summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/3rdparty/atspi2/atspi/atspi-constants.h118
-rw-r--r--src/3rdparty/des/des.cpp602
-rw-r--r--src/3rdparty/forkfd/forkfd.c495
-rw-r--r--src/3rdparty/forkfd/forkfd.h58
-rw-r--r--src/3rdparty/forkfd/forkfd_gcc.h76
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/Accessible2.h585
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/Accessible2_i.c79
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/Accessible2_p.c1196
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleAction.h220
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleAction_i.c79
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleAction_p.c557
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleApplication.h188
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleApplication_i.c79
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleApplication_p.c420
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleComponent.h185
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleComponent_i.c79
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleComponent_p.c360
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleEditableText.h235
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleEditableText_i.c79
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleEditableText_p.c579
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleEventID.h105
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleHyperlink.h252
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleHyperlink_i.c79
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleHyperlink_p.c1113
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleHypertext.h349
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleHypertext_i.c79
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleHypertext_p.c454
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleImage.h185
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleImage_i.c79
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleImage_p.c414
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleRelation.h244
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleRelation_i.c79
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleRelation_p.c520
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleRole.h118
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleStates.h95
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleTable.h497
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleTable2.h367
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleTable2_i.c79
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleTable2_p.c1099
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleTableCell.h246
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleTableCell_i.c79
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleTableCell_p.c634
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleTable_i.c79
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleTable_p.c1543
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleText.h435
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleText_i.c79
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleText_p.c1203
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleValue.h188
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleValue_i.c79
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/AccessibleValue_p.c1029
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/IA2CommonTypes.h102
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/IA2TypeLibrary.h103
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/IA2TypeLibrary.tlbbin1236 -> 0 bytes
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/IA2TypeLibrary_i.c79
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/dlldata.c30
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/ia2_api_all.h4667
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/ia2_api_all.tlbbin0 -> 27672 bytes
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/ia2_api_all_i.c133
-rw-r--r--src/3rdparty/iaccessible2/generated/amd64/ia2_api_all_p.c7867
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/Accessible2.h585
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/Accessible2_i.c79
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/Accessible2_p.c1190
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleAction.h220
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleAction_i.c79
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleAction_p.c563
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleApplication.h188
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleApplication_i.c79
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleApplication_p.c428
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleComponent.h185
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleComponent_i.c79
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleComponent_p.c369
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleEditableText.h235
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleEditableText_i.c79
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleEditableText_p.c584
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleEventID.h105
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleHyperlink.h252
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleHyperlink_i.c79
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleHyperlink_p.c1191
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleHypertext.h349
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleHypertext_i.c79
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleHypertext_p.c463
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleImage.h185
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleImage_i.c79
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleImage_p.c423
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleRelation.h244
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleRelation_i.c79
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleRelation_p.c527
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleRole.h118
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleStates.h95
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleTable.h497
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleTable2.h367
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleTable2_i.c79
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleTable2_p.c1091
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleTableCell.h246
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleTableCell_i.c79
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleTableCell_p.c637
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleTable_i.c79
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleTable_p.c1526
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleText.h435
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleText_i.c79
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleText_p.c1196
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleValue.h188
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleValue_i.c79
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/AccessibleValue_p.c1105
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/IA2CommonTypes.h102
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/IA2TypeLibrary.h103
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/IA2TypeLibrary.tlbbin1236 -> 0 bytes
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/IA2TypeLibrary_i.c79
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/dlldata.c30
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/ia2_api_all.h4667
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/ia2_api_all.tlbbin0 -> 27672 bytes
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/ia2_api_all_i.c133
-rw-r--r--src/3rdparty/iaccessible2/generated/x86/ia2_api_all_p.c7823
-rw-r--r--src/3rdparty/iaccessible2/iaccessible2.pri74
-rw-r--r--src/3rdparty/iaccessible2/idl/Accessible2.idl679
-rw-r--r--src/3rdparty/iaccessible2/idl/AccessibleAction.idl194
-rw-r--r--src/3rdparty/iaccessible2/idl/AccessibleApplication.idl121
-rw-r--r--src/3rdparty/iaccessible2/idl/AccessibleComponent.idl124
-rw-r--r--src/3rdparty/iaccessible2/idl/AccessibleEditableText.idl259
-rw-r--r--src/3rdparty/iaccessible2/idl/AccessibleEventID.idl230
-rw-r--r--src/3rdparty/iaccessible2/idl/AccessibleHyperlink.idl187
-rw-r--r--src/3rdparty/iaccessible2/idl/AccessibleHypertext.idl123
-rw-r--r--src/3rdparty/iaccessible2/idl/AccessibleImage.idl111
-rw-r--r--src/3rdparty/iaccessible2/idl/AccessibleRelation.idl197
-rw-r--r--src/3rdparty/iaccessible2/idl/AccessibleRole.idl293
-rw-r--r--src/3rdparty/iaccessible2/idl/AccessibleStates.idl209
-rw-r--r--src/3rdparty/iaccessible2/idl/AccessibleTable.idl551
-rw-r--r--src/3rdparty/iaccessible2/idl/AccessibleTable2.idl375
-rw-r--r--src/3rdparty/iaccessible2/idl/AccessibleTableCell.idl194
-rw-r--r--src/3rdparty/iaccessible2/idl/AccessibleText.idl674
-rw-r--r--src/3rdparty/iaccessible2/idl/AccessibleValue.idl136
-rw-r--r--src/3rdparty/iaccessible2/idl/IA2CommonTypes.idl191
-rw-r--r--src/3rdparty/iaccessible2/idl/IA2TypeLibrary.idl94
-rw-r--r--src/3rdparty/iaccessible2/idl/Makefile41
-rw-r--r--src/3rdparty/iaccessible2/idl/README3
-rw-r--r--src/3rdparty/iaccessible2/idl/ia2_api_all.idl5473
-rw-r--r--src/3rdparty/sqlite/shell.c301
-rw-r--r--src/3rdparty/sqlite/sqlite3.c10108
-rw-r--r--src/3rdparty/sqlite/sqlite3.h129
-rw-r--r--src/angle/src/config.pri3
-rw-r--r--src/concurrent/qtconcurrentthreadengine.h4
-rw-r--r--src/corelib/animation/qabstractanimation.h2
-rw-r--r--src/corelib/animation/qabstractanimation_p.h10
-rw-r--r--src/corelib/animation/qanimationgroup.h2
-rw-r--r--src/corelib/animation/qparallelanimationgroup.h10
-rw-r--r--src/corelib/animation/qparallelanimationgroup_p.h2
-rw-r--r--src/corelib/animation/qpauseanimation.h6
-rw-r--r--src/corelib/animation/qpropertyanimation.h6
-rw-r--r--src/corelib/animation/qsequentialanimationgroup.h10
-rw-r--r--src/corelib/animation/qsequentialanimationgroup_p.h4
-rw-r--r--src/corelib/animation/qvariantanimation.h8
-rw-r--r--src/corelib/arch/qatomic_mips.h5
-rw-r--r--src/corelib/codecs/qicucodec_p.h10
-rw-r--r--src/corelib/codecs/qisciicodec.cpp1
-rw-r--r--src/corelib/codecs/qisciicodec_p.h8
-rw-r--r--src/corelib/codecs/qlatincodec_p.h20
-rw-r--r--src/corelib/codecs/qtsciicodec_p.h8
-rw-r--r--src/corelib/codecs/qutfcodec_p.h52
-rw-r--r--src/corelib/doc/snippets/code/src_corelib_global_qglobal.cpp13
-rw-r--r--src/corelib/doc/snippets/code/src_corelib_kernel_qmimedata.cpp6
-rw-r--r--src/corelib/doc/snippets/code/src_corelib_tools_qhash.cpp14
-rw-r--r--src/corelib/doc/snippets/qloggingcategory/main.cpp14
-rw-r--r--src/corelib/doc/snippets/qstring/main.cpp14
-rw-r--r--src/corelib/global/global.pri3
-rw-r--r--src/corelib/global/qcompilerdetection.h106
-rw-r--r--src/corelib/global/qflags.h73
-rw-r--r--src/corelib/global/qglobal.cpp191
-rw-r--r--src/corelib/global/qglobal.h65
-rw-r--r--src/corelib/global/qlibraryinfo.cpp2
-rw-r--r--src/corelib/global/qlogging.cpp212
-rw-r--r--src/corelib/global/qlogging.h18
-rw-r--r--src/corelib/global/qnamespace.h6
-rw-r--r--src/corelib/global/qnamespace.qdoc15
-rw-r--r--src/corelib/global/qsysinfo.h20
-rw-r--r--src/corelib/global/qsystemdetection.h3
-rw-r--r--src/corelib/global/qtypeinfo.h13
-rw-r--r--src/corelib/io/qbuffer.cpp4
-rw-r--r--src/corelib/io/qbuffer.h22
-rw-r--r--src/corelib/io/qdatastream.cpp1
-rw-r--r--src/corelib/io/qdatastream.h5
-rw-r--r--src/corelib/io/qdebug.cpp170
-rw-r--r--src/corelib/io/qdebug.h101
-rw-r--r--src/corelib/io/qdir.cpp29
-rw-r--r--src/corelib/io/qfile.h12
-rw-r--r--src/corelib/io/qfiledevice.h18
-rw-r--r--src/corelib/io/qfiledevice_p.h2
-rw-r--r--src/corelib/io/qfileselector.cpp37
-rw-r--r--src/corelib/io/qfilesystemengine_unix.cpp37
-rw-r--r--src/corelib/io/qfilesystementry.cpp8
-rw-r--r--src/corelib/io/qfilesystemwatcher.cpp20
-rw-r--r--src/corelib/io/qfilesystemwatcher_inotify_p.h4
-rw-r--r--src/corelib/io/qfilesystemwatcher_polling_p.h4
-rw-r--r--src/corelib/io/qfsfileengine_iterator_p.h8
-rw-r--r--src/corelib/io/qfsfileengine_p.h68
-rw-r--r--src/corelib/io/qiodevice.cpp187
-rw-r--r--src/corelib/io/qipaddress.cpp3
-rw-r--r--src/corelib/io/qloggingcategory.cpp75
-rw-r--r--src/corelib/io/qloggingcategory.h19
-rw-r--r--src/corelib/io/qloggingregistry.cpp11
-rw-r--r--src/corelib/io/qnoncontiguousbytedevice.cpp29
-rw-r--r--src/corelib/io/qnoncontiguousbytedevice_p.h55
-rw-r--r--src/corelib/io/qprocess.h20
-rw-r--r--src/corelib/io/qprocess_p.h2
-rw-r--r--src/corelib/io/qprocess_unix.cpp2
-rw-r--r--src/corelib/io/qresource.cpp22
-rw-r--r--src/corelib/io/qresource_iterator_p.h6
-rw-r--r--src/corelib/io/qresource_p.h60
-rw-r--r--src/corelib/io/qsettings.h2
-rw-r--r--src/corelib/io/qsettings_p.h18
-rw-r--r--src/corelib/io/qstandardpaths.cpp16
-rw-r--r--src/corelib/io/qstandardpaths.h1
-rw-r--r--src/corelib/io/qstandardpaths_android.cpp1
-rw-r--r--src/corelib/io/qstandardpaths_blackberry.cpp1
-rw-r--r--src/corelib/io/qstandardpaths_ios.mm1
-rw-r--r--src/corelib/io/qstandardpaths_mac.mm10
-rw-r--r--src/corelib/io/qstandardpaths_unix.cpp31
-rw-r--r--src/corelib/io/qstandardpaths_win.cpp2
-rw-r--r--src/corelib/io/qstandardpaths_winrt.cpp1
-rw-r--r--src/corelib/io/qstorageinfo_p.h6
-rw-r--r--src/corelib/io/qstorageinfo_unix.cpp7
-rw-r--r--src/corelib/io/qstorageinfo_win.cpp8
-rw-r--r--src/corelib/io/qtemporaryfile.cpp1
-rw-r--r--src/corelib/io/qtemporaryfile.h4
-rw-r--r--src/corelib/io/qtextstream.cpp85
-rw-r--r--src/corelib/io/qtextstream.h1
-rw-r--r--src/corelib/io/qtextstream_p.h8
-rw-r--r--src/corelib/io/qtldurl.cpp2
-rw-r--r--src/corelib/io/qurl.h8
-rw-r--r--src/corelib/io/qurlrecode.cpp4
-rw-r--r--src/corelib/itemmodels/qabstractitemmodel.cpp17
-rw-r--r--src/corelib/itemmodels/qabstractitemmodel.h73
-rw-r--r--src/corelib/itemmodels/qabstractproxymodel.h48
-rw-r--r--src/corelib/itemmodels/qidentityproxymodel.cpp3
-rw-r--r--src/corelib/itemmodels/qidentityproxymodel.h38
-rw-r--r--src/corelib/itemmodels/qsortfilterproxymodel.cpp29
-rw-r--r--src/corelib/itemmodels/qsortfilterproxymodel.h66
-rw-r--r--src/corelib/itemmodels/qstringlistmodel.h18
-rw-r--r--src/corelib/json/qjsonobject.cpp43
-rw-r--r--src/corelib/json/qjsonobject.h4
-rw-r--r--src/corelib/json/qjsonvalue.cpp3
-rw-r--r--src/corelib/kernel/kernel.pri30
-rw-r--r--src/corelib/kernel/qcore_mac_objc.mm97
-rw-r--r--src/corelib/kernel/qcore_mac_p.h8
-rw-r--r--src/corelib/kernel/qcoreapplication.cpp2
-rw-r--r--src/corelib/kernel/qcoreapplication.h2
-rw-r--r--src/corelib/kernel/qcoreevent.cpp1
-rw-r--r--src/corelib/kernel/qcoreevent.h2
-rw-r--r--src/corelib/kernel/qeventdispatcher_glib_p.h4
-rw-r--r--src/corelib/kernel/qeventdispatcher_unix_p.h6
-rw-r--r--src/corelib/kernel/qeventloop.h2
-rw-r--r--src/corelib/kernel/qfunctions_p.h9
-rw-r--r--src/corelib/kernel/qfunctions_wince.h2
-rw-r--r--src/corelib/kernel/qmetaobject.cpp208
-rw-r--r--src/corelib/kernel/qmetaobject.h35
-rw-r--r--src/corelib/kernel/qmetaobject_p.h4
-rw-r--r--src/corelib/kernel/qmetatype.cpp291
-rw-r--r--src/corelib/kernel/qmetatype.h106
-rw-r--r--src/corelib/kernel/qmetatype_p.h6
-rw-r--r--src/corelib/kernel/qmimedata.cpp5
-rw-r--r--src/corelib/kernel/qobject.cpp10
-rw-r--r--src/corelib/kernel/qobject_p.h4
-rw-r--r--src/corelib/kernel/qobjectdefs.h21
-rw-r--r--src/corelib/kernel/qsharedmemory.cpp2
-rw-r--r--src/corelib/kernel/qsharedmemory_p.h4
-rw-r--r--src/corelib/kernel/qsharedmemory_posix.cpp231
-rw-r--r--src/corelib/kernel/qsharedmemory_systemv.cpp254
-rw-r--r--src/corelib/kernel/qsharedmemory_unix.cpp199
-rw-r--r--src/corelib/kernel/qsocketnotifier.h2
-rw-r--r--src/corelib/kernel/qsystemsemaphore.cpp2
-rw-r--r--src/corelib/kernel/qsystemsemaphore_p.h11
-rw-r--r--src/corelib/kernel/qsystemsemaphore_posix.cpp182
-rw-r--r--src/corelib/kernel/qsystemsemaphore_systemv.cpp198
-rw-r--r--src/corelib/kernel/qsystemsemaphore_unix.cpp150
-rw-r--r--src/corelib/kernel/qtimer.cpp2
-rw-r--r--src/corelib/kernel/qtimer.h2
-rw-r--r--src/corelib/kernel/qtranslator.cpp1
-rw-r--r--src/corelib/kernel/qvariant.cpp213
-rw-r--r--src/corelib/kernel/qvariant.h12
-rw-r--r--src/corelib/kernel/qvariant_p.h4
-rw-r--r--src/corelib/mimetypes/qmimedatabase_p.h1
-rw-r--r--src/corelib/mimetypes/qmimeprovider_p.h38
-rw-r--r--src/corelib/plugin/qfactoryloader.cpp28
-rw-r--r--src/corelib/plugin/qlibrary.cpp10
-rw-r--r--src/corelib/plugin/qlibrary.h3
-rw-r--r--src/corelib/plugin/qlibrary_unix.cpp4
-rw-r--r--src/corelib/plugin/quuid.cpp21
-rw-r--r--src/corelib/plugin/quuid.h15
-rw-r--r--src/corelib/statemachine/qabstractstate.h2
-rw-r--r--src/corelib/statemachine/qabstracttransition.h2
-rw-r--r--src/corelib/statemachine/qeventtransition.h6
-rw-r--r--src/corelib/statemachine/qfinalstate.h6
-rw-r--r--src/corelib/statemachine/qhistorystate.h6
-rw-r--r--src/corelib/statemachine/qsignaltransition.h6
-rw-r--r--src/corelib/statemachine/qsignaltransition_p.h2
-rw-r--r--src/corelib/statemachine/qstate.cpp15
-rw-r--r--src/corelib/statemachine/qstate.h20
-rw-r--r--src/corelib/statemachine/qstatemachine.cpp20
-rw-r--r--src/corelib/statemachine/qstatemachine.h8
-rw-r--r--src/corelib/statemachine/qstatemachine_p.h19
-rw-r--r--src/corelib/thread/qatomic.h11
-rw-r--r--src/corelib/thread/qexception.h4
-rw-r--r--src/corelib/thread/qfutureinterface.cpp4
-rw-r--r--src/corelib/thread/qfuturewatcher.h14
-rw-r--r--src/corelib/thread/qfuturewatcher_p.h4
-rw-r--r--src/corelib/thread/qmutex.h20
-rw-r--r--src/corelib/thread/qreadwritelock.h36
-rw-r--r--src/corelib/thread/qthread.h2
-rw-r--r--src/corelib/thread/qthread_p.h2
-rw-r--r--src/corelib/thread/qthread_unix.cpp6
-rw-r--r--src/corelib/thread/qthreadpool.cpp46
-rw-r--r--src/corelib/thread/qthreadpool.h1
-rw-r--r--src/corelib/thread/qthreadpool_p.h3
-rw-r--r--src/corelib/thread/qwaitcondition_unix.cpp2
-rw-r--r--src/corelib/tools/qalgorithms.h6
-rw-r--r--src/corelib/tools/qarraydata.cpp19
-rw-r--r--src/corelib/tools/qarraydata.h4
-rw-r--r--src/corelib/tools/qarraydatapointer.h6
-rw-r--r--src/corelib/tools/qbitarray.h6
-rw-r--r--src/corelib/tools/qbytearray.cpp237
-rw-r--r--src/corelib/tools/qbytearray.h47
-rw-r--r--src/corelib/tools/qbytearraymatcher.h8
-rw-r--r--src/corelib/tools/qcache.h4
-rw-r--r--src/corelib/tools/qchar.h125
-rw-r--r--src/corelib/tools/qcollator.h10
-rw-r--r--src/corelib/tools/qcommandlineparser.cpp68
-rw-r--r--src/corelib/tools/qdatetime.cpp115
-rw-r--r--src/corelib/tools/qdatetime.h16
-rw-r--r--src/corelib/tools/qdatetime_mac.mm76
-rw-r--r--src/corelib/tools/qdatetime_p.h3
-rw-r--r--src/corelib/tools/qeasingcurve.cpp105
-rw-r--r--src/corelib/tools/qelapsedtimer_generic.cpp4
-rw-r--r--src/corelib/tools/qelapsedtimer_unix.cpp14
-rw-r--r--src/corelib/tools/qhash.cpp159
-rw-r--r--src/corelib/tools/qhash.h92
-rw-r--r--src/corelib/tools/qlist.cpp8
-rw-r--r--src/corelib/tools/qlist.h28
-rw-r--r--src/corelib/tools/qmap.cpp43
-rw-r--r--src/corelib/tools/qmap.h18
-rw-r--r--src/corelib/tools/qmargins.h213
-rw-r--r--src/corelib/tools/qpair.h23
-rw-r--r--src/corelib/tools/qpair.qdoc25
-rw-r--r--src/corelib/tools/qpoint.h72
-rw-r--r--src/corelib/tools/qrect.cpp26
-rw-r--r--src/corelib/tools/qrect.h649
-rw-r--r--src/corelib/tools/qregexp.cpp3
-rw-r--r--src/corelib/tools/qregularexpression.cpp131
-rw-r--r--src/corelib/tools/qregularexpression.h22
-rw-r--r--src/corelib/tools/qringbuffer_p.h48
-rw-r--r--src/corelib/tools/qset.h9
-rw-r--r--src/corelib/tools/qset.qdoc11
-rw-r--r--src/corelib/tools/qshareddata.h26
-rw-r--r--src/corelib/tools/qsize.cpp8
-rw-r--r--src/corelib/tools/qsize.h248
-rw-r--r--src/corelib/tools/qstring.cpp514
-rw-r--r--src/corelib/tools/qstring.h98
-rw-r--r--src/corelib/tools/qstring_compat.cpp49
-rw-r--r--src/corelib/tools/qstringalgorithms_p.h156
-rw-r--r--src/corelib/tools/qstringiterator_p.h5
-rw-r--r--src/corelib/tools/qstringlist.cpp45
-rw-r--r--src/corelib/tools/qstringlist.h138
-rw-r--r--src/corelib/tools/qstringmatcher.h8
-rw-r--r--src/corelib/tools/qtimeline.h2
-rw-r--r--src/corelib/tools/qtimezone.cpp27
-rw-r--r--src/corelib/tools/qtimezone.h6
-rw-r--r--src/corelib/tools/qtimezoneprivate_android.cpp287
-rw-r--r--src/corelib/tools/qtimezoneprivate_p.h50
-rw-r--r--src/corelib/tools/qtools_p.h31
-rw-r--r--src/corelib/tools/qunicodetables.cpp16
-rw-r--r--src/corelib/tools/qunicodetables_p.h20
-rw-r--r--src/corelib/tools/qvector.cpp12
-rw-r--r--src/corelib/tools/qvector.h28
-rw-r--r--src/corelib/tools/qversionnumber.cpp8
-rw-r--r--src/corelib/tools/qversionnumber_p.h14
-rw-r--r--src/corelib/tools/tools.pri13
-rw-r--r--src/corelib/xml/qxmlstream.cpp9
-rw-r--r--src/corelib/xml/qxmlstream.h5
-rw-r--r--src/dbus/qdbus_symbols_p.h78
-rw-r--r--src/dbus/qdbusabstractinterface.h6
-rw-r--r--src/dbus/qdbusargument_p.h3
-rw-r--r--src/dbus/qdbusconnection.cpp35
-rw-r--r--src/dbus/qdbusconnection.h7
-rw-r--r--src/dbus/qdbusconnection_p.h6
-rw-r--r--src/dbus/qdbusconnectioninterface.h4
-rw-r--r--src/dbus/qdbusconnectionmanager_p.h3
-rw-r--r--src/dbus/qdbusintegrator.cpp8
-rw-r--r--src/dbus/qdbusintegrator_p.h4
-rw-r--r--src/dbus/qdbusinterface.h6
-rw-r--r--src/dbus/qdbusmarshaller.cpp87
-rw-r--r--src/dbus/qdbusmessage.cpp35
-rw-r--r--src/dbus/qdbusmessage_p.h3
-rw-r--r--src/dbus/qdbusmetaobject.cpp16
-rw-r--r--src/dbus/qdbuspendingreply.h5
-rw-r--r--src/gui/Qt5GuiConfigExtras.cmake.in3
-rw-r--r--src/gui/accessible/qaccessible.cpp105
-rw-r--r--src/gui/accessible/qaccessible.h6
-rw-r--r--src/gui/accessible/qaccessiblecache.cpp4
-rw-r--r--src/gui/accessible/qaccessiblecache_p.h4
-rw-r--r--src/gui/gui.pro4
-rw-r--r--src/gui/image/qbmphandler.cpp4
-rw-r--r--src/gui/image/qgifhandler_p.h22
-rw-r--r--src/gui/image/qicon.cpp2
-rw-r--r--src/gui/image/qicon_p.h22
-rw-r--r--src/gui/image/qimage.cpp98
-rw-r--r--src/gui/image/qimage.h38
-rw-r--r--src/gui/image/qimage_conversions.cpp333
-rw-r--r--src/gui/image/qimage_p.h2
-rw-r--r--src/gui/image/qimageiohandler.cpp6
-rw-r--r--src/gui/image/qimageiohandler.h4
-rw-r--r--src/gui/image/qimagereader.cpp2
-rw-r--r--src/gui/image/qimagewriter.cpp65
-rw-r--r--src/gui/image/qimagewriter.h6
-rw-r--r--src/gui/image/qjpeghandler.cpp71
-rw-r--r--src/gui/image/qjpeghandler_p.h14
-rw-r--r--src/gui/image/qpaintengine_pic_p.h27
-rw-r--r--src/gui/image/qpicture.cpp4
-rw-r--r--src/gui/image/qpicture.h6
-rw-r--r--src/gui/image/qpixmap.h6
-rw-r--r--src/gui/image/qpixmap_blitter_p.h22
-rw-r--r--src/gui/image/qpixmap_raster.cpp9
-rw-r--r--src/gui/image/qpixmap_raster_p.h38
-rw-r--r--src/gui/image/qpixmapcache.cpp2
-rw-r--r--src/gui/image/qpnghandler.cpp25
-rw-r--r--src/gui/image/qppmhandler.cpp108
-rw-r--r--src/gui/itemmodels/qstandarditemmodel.cpp6
-rw-r--r--src/gui/itemmodels/qstandarditemmodel.h48
-rw-r--r--src/gui/kernel/kernel.pri10
-rw-r--r--src/gui/kernel/qcursor.cpp10
-rw-r--r--src/gui/kernel/qcursor.h1
-rw-r--r--src/gui/kernel/qdnd_p.h6
-rw-r--r--src/gui/kernel/qevent.cpp121
-rw-r--r--src/gui/kernel/qevent.h28
-rw-r--r--src/gui/kernel/qguiapplication.cpp63
-rw-r--r--src/gui/kernel/qguiapplication.h6
-rw-r--r--src/gui/kernel/qguiapplication_p.h4
-rw-r--r--src/gui/kernel/qkeysequence.cpp5
-rw-r--r--src/gui/kernel/qkeysequence.h3
-rw-r--r--src/gui/kernel/qoffscreensurface.cpp7
-rw-r--r--src/gui/kernel/qoffscreensurface.h8
-rw-r--r--src/gui/kernel/qopenglcontext.cpp1
-rw-r--r--src/gui/kernel/qopenglcontext_p.h4
-rw-r--r--src/gui/kernel/qopenglwindow.cpp29
-rw-r--r--src/gui/kernel/qopenglwindow.h2
-rw-r--r--src/gui/kernel/qpaintdevicewindow.cpp5
-rw-r--r--src/gui/kernel/qpaintdevicewindow_p.h12
-rw-r--r--src/gui/kernel/qpixelformat.cpp18
-rw-r--r--src/gui/kernel/qpixelformat.h19
-rw-r--r--src/gui/kernel/qplatformgraphicsbuffer.cpp277
-rw-r--r--src/gui/kernel/qplatformgraphicsbuffer.h117
-rw-r--r--src/gui/kernel/qplatformgraphicsbufferhelper.cpp185
-rw-r--r--src/gui/kernel/qplatformgraphicsbufferhelper.h56
-rw-r--r--src/gui/kernel/qplatformhardwarecompositor.cpp98
-rw-r--r--src/gui/kernel/qplatformhardwarecompositor.h80
-rw-r--r--src/gui/kernel/qplatformintegration.cpp33
-rw-r--r--src/gui/kernel/qplatformintegration.h5
-rw-r--r--src/gui/kernel/qplatformoffscreensurface.h2
-rw-r--r--src/gui/kernel/qplatformopenglcontext.cpp10
-rw-r--r--src/gui/kernel/qplatformopenglcontext.h2
-rw-r--r--src/gui/kernel/qplatformscreen.cpp8
-rw-r--r--src/gui/kernel/qplatformsystemtrayicon.cpp2
-rw-r--r--src/gui/kernel/qplatformsystemtrayicon.h2
-rw-r--r--src/gui/kernel/qplatformtheme.cpp7
-rw-r--r--src/gui/kernel/qplatformtheme.h3
-rw-r--r--src/gui/kernel/qplatformwindow.cpp32
-rw-r--r--src/gui/kernel/qplatformwindow.h3
-rw-r--r--src/gui/kernel/qshapedpixmapdndwindow_p.h2
-rw-r--r--src/gui/kernel/qshortcutmap.cpp4
-rw-r--r--src/gui/kernel/qsimpledrag_p.h14
-rw-r--r--src/gui/kernel/qstylehints.cpp65
-rw-r--r--src/gui/kernel/qstylehints.h22
-rw-r--r--src/gui/kernel/qsurface.h4
-rw-r--r--src/gui/kernel/qwindow.cpp79
-rw-r--r--src/gui/kernel/qwindow.h10
-rw-r--r--src/gui/kernel/qwindow_p.h11
-rw-r--r--src/gui/kernel/qwindowsysteminterface.cpp58
-rw-r--r--src/gui/kernel/qwindowsysteminterface.h9
-rw-r--r--src/gui/kernel/qwindowsysteminterface_p.h25
-rw-r--r--src/gui/opengl/qopenglengineshadermanager.cpp16
-rw-r--r--src/gui/opengl/qopenglengineshadermanager_p.h6
-rw-r--r--src/gui/opengl/qopenglengineshadersource_p.h16
-rw-r--r--src/gui/opengl/qopenglextensions_p.h14
-rw-r--r--src/gui/opengl/qopenglfunctions.cpp18
-rw-r--r--src/gui/opengl/qopenglfunctions.h3
-rw-r--r--src/gui/opengl/qopenglgradientcache_p.h4
-rw-r--r--src/gui/opengl/qopenglpaintengine.cpp16
-rw-r--r--src/gui/opengl/qopenglpaintengine_p.h56
-rw-r--r--src/gui/opengl/qopenglshaderprogram.cpp153
-rw-r--r--src/gui/opengl/qopengltexture.cpp601
-rw-r--r--src/gui/opengl/qopengltexture.h234
-rw-r--r--src/gui/opengl/qopengltexture_p.h6
-rw-r--r--src/gui/opengl/qopengltexturecache.cpp33
-rw-r--r--src/gui/opengl/qopengltexturecache_p.h5
-rw-r--r--src/gui/opengl/qopengltextureglyphcache_p.h16
-rw-r--r--src/gui/opengl/qopengltexturehelper.cpp5
-rw-r--r--src/gui/opengl/qopenglvertexarrayobject.cpp5
-rw-r--r--src/gui/opengl/qtriangulator.cpp6
-rw-r--r--src/gui/painting/painting.pri1
-rw-r--r--src/gui/painting/qblendfunctions.cpp426
-rw-r--r--src/gui/painting/qbrush.h2
-rw-r--r--src/gui/painting/qcolor.h2
-rw-r--r--src/gui/painting/qdrawhelper.cpp134
-rw-r--r--src/gui/painting/qdrawhelper_p.h29
-rw-r--r--src/gui/painting/qdrawhelper_sse2.cpp4
-rw-r--r--src/gui/painting/qdrawhelper_sse_p.h4
-rw-r--r--src/gui/painting/qgrayraster.c60
-rw-r--r--src/gui/painting/qmemrotate.cpp17
-rw-r--r--src/gui/painting/qpaintbuffer.cpp6
-rw-r--r--src/gui/painting/qpaintengineex_p.h26
-rw-r--r--src/gui/painting/qpainter.cpp14
-rw-r--r--src/gui/painting/qpdf.cpp13
-rw-r--r--src/gui/painting/qpdf_p.h26
-rw-r--r--src/gui/painting/qpen.cpp4
-rw-r--r--src/gui/painting/qpen.h10
-rw-r--r--src/gui/painting/qplatformbackingstore.cpp54
-rw-r--r--src/gui/painting/qplatformbackingstore.h3
-rw-r--r--src/gui/painting/qrgb.h14
-rw-r--r--src/gui/painting/qtextureglyphcache.cpp8
-rw-r--r--src/gui/painting/qtextureglyphcache_p.h6
-rw-r--r--src/gui/text/qcssparser.cpp7
-rw-r--r--src/gui/text/qdistancefield.cpp5
-rw-r--r--src/gui/text/qfont.cpp22
-rw-r--r--src/gui/text/qfont.h17
-rw-r--r--src/gui/text/qfont_p.h2
-rw-r--r--src/gui/text/qfontdatabase.cpp203
-rw-r--r--src/gui/text/qfontdatabase.h2
-rw-r--r--src/gui/text/qfontengine.cpp219
-rw-r--r--src/gui/text/qfontengine_ft.cpp80
-rw-r--r--src/gui/text/qfontengine_ft_p.h82
-rw-r--r--src/gui/text/qfontengine_p.h134
-rw-r--r--src/gui/text/qfontengine_qpf2.cpp2
-rw-r--r--src/gui/text/qfontengine_qpf2_p.h36
-rw-r--r--src/gui/text/qfontsubset.cpp5
-rw-r--r--src/gui/text/qfragmentmap_p.h2
-rw-r--r--src/gui/text/qharfbuzzng.cpp26
-rw-r--r--src/gui/text/qplatformfontdatabase.cpp30
-rw-r--r--src/gui/text/qplatformfontdatabase.h1
-rw-r--r--src/gui/text/qstatictext.cpp46
-rw-r--r--src/gui/text/qstatictext_p.h21
-rw-r--r--src/gui/text/qtextdocument.cpp253
-rw-r--r--src/gui/text/qtextdocument.h11
-rw-r--r--src/gui/text/qtextdocument_p.cpp2
-rw-r--r--src/gui/text/qtextdocumentlayout.cpp10
-rw-r--r--src/gui/text/qtextdocumentlayout_p.h22
-rw-r--r--src/gui/text/qtextengine.cpp4
-rw-r--r--src/gui/text/qtextformat.cpp20
-rw-r--r--src/gui/text/qtexthtmlparser.cpp27
-rw-r--r--src/gui/text/qtextimagehandler_p.h4
-rw-r--r--src/gui/text/qtextodfwriter.cpp4
-rw-r--r--src/gui/text/qtexttable.cpp5
-rw-r--r--src/gui/text/qtexttable_p.h4
-rw-r--r--src/gui/util/qabstractlayoutstyleinfo.cpp7
-rw-r--r--src/gui/util/qabstractlayoutstyleinfo_p.h21
-rw-r--r--src/gui/util/qgridlayoutengine.cpp4
-rw-r--r--src/gui/util/qvalidator.h8
-rw-r--r--src/network/access/qhttpmultipart_p.h18
-rw-r--r--src/network/access/qhttpnetworkconnection.cpp11
-rw-r--r--src/network/access/qhttpnetworkconnection_p.h2
-rw-r--r--src/network/access/qhttpnetworkreply_p.h18
-rw-r--r--src/network/access/qhttpnetworkrequest_p.h18
-rw-r--r--src/network/access/qhttpthreaddelegate.cpp12
-rw-r--r--src/network/access/qhttpthreaddelegate_p.h10
-rw-r--r--src/network/access/qnetworkaccessauthenticationmanager.cpp2
-rw-r--r--src/network/access/qnetworkaccessbackend.cpp6
-rw-r--r--src/network/access/qnetworkaccesscache_p.h2
-rw-r--r--src/network/access/qnetworkaccesscachebackend_p.h6
-rw-r--r--src/network/access/qnetworkaccessdebugpipebackend_p.h8
-rw-r--r--src/network/access/qnetworkaccessfilebackend_p.h8
-rw-r--r--src/network/access/qnetworkaccessftpbackend.cpp2
-rw-r--r--src/network/access/qnetworkaccessftpbackend_p.h8
-rw-r--r--src/network/access/qnetworkdiskcache.h16
-rw-r--r--src/network/access/qnetworkreply.cpp1
-rw-r--r--src/network/access/qnetworkreply.h6
-rw-r--r--src/network/access/qnetworkreply_p.h1
-rw-r--r--src/network/access/qnetworkreplydataimpl_p.h12
-rw-r--r--src/network/access/qnetworkreplyfileimpl_p.h12
-rw-r--r--src/network/access/qnetworkreplyhttpimpl.cpp27
-rw-r--r--src/network/access/qnetworkreplyhttpimpl_p.h24
-rw-r--r--src/network/access/qnetworkreplyimpl.cpp18
-rw-r--r--src/network/access/qnetworkreplyimpl_p.h26
-rw-r--r--src/network/access/qnetworkrequest.cpp7
-rw-r--r--src/network/access/qnetworkrequest.h1
-rw-r--r--src/network/bearer/qnetworksession.h4
-rw-r--r--src/network/kernel/qauthenticator.cpp59
-rw-r--r--src/network/kernel/qdnslookup_p.h2
-rw-r--r--src/network/kernel/qhostinfo.cpp3
-rw-r--r--src/network/kernel/qhostinfo_p.h4
-rw-r--r--src/network/kernel/qnetworkinterface.cpp5
-rw-r--r--src/network/kernel/qnetworkinterface_unix.cpp5
-rw-r--r--src/network/socket/qabstractsocket.h22
-rw-r--r--src/network/socket/qhttpsocketengine_p.h70
-rw-r--r--src/network/socket/qlocalsocket.h18
-rw-r--r--src/network/socket/qnativesocketengine_p.h68
-rw-r--r--src/network/socket/qsocks5socketengine.cpp2
-rw-r--r--src/network/socket/qsocks5socketengine_p.h78
-rw-r--r--src/network/socket/qtcpserver.cpp47
-rw-r--r--src/network/socket/qtcpserver.h2
-rw-r--r--src/network/socket/qtcpserver_p.h105
-rw-r--r--src/network/socket/socket.pri3
-rw-r--r--src/network/ssl/qssl.cpp1
-rw-r--r--src/network/ssl/qssl.h3
-rw-r--r--src/network/ssl/qsslcertificate_openssl.cpp6
-rw-r--r--src/network/ssl/qsslcertificate_qt.cpp2
-rw-r--r--src/network/ssl/qsslconfiguration.cpp46
-rw-r--r--src/network/ssl/qsslconfiguration.h5
-rw-r--r--src/network/ssl/qsslconfiguration_p.h3
-rw-r--r--src/network/ssl/qsslcontext_openssl.cpp51
-rw-r--r--src/network/ssl/qsslellipticcurve.cpp173
-rw-r--r--src/network/ssl/qsslellipticcurve.h103
-rw-r--r--src/network/ssl/qsslellipticcurve_dummy.cpp67
-rw-r--r--src/network/ssl/qsslellipticcurve_openssl.cpp167
-rw-r--r--src/network/ssl/qsslkey_openssl.cpp60
-rw-r--r--src/network/ssl/qsslkey_p.cpp18
-rw-r--r--src/network/ssl/qsslkey_p.h6
-rw-r--r--src/network/ssl/qsslkey_qt.cpp1
-rw-r--r--src/network/ssl/qsslsocket.cpp161
-rw-r--r--src/network/ssl/qsslsocket.h44
-rw-r--r--src/network/ssl/qsslsocket_openssl.cpp28
-rw-r--r--src/network/ssl/qsslsocket_openssl_p.h16
-rw-r--r--src/network/ssl/qsslsocket_openssl_symbols.cpp63
-rw-r--r--src/network/ssl/qsslsocket_openssl_symbols_p.h31
-rw-r--r--src/network/ssl/qsslsocket_p.h10
-rw-r--r--src/network/ssl/ssl.pri6
-rw-r--r--src/opengl/gl2paintengineex/qglengineshadermanager.cpp4
-rw-r--r--src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp2
-rw-r--r--src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h56
-rw-r--r--src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h16
-rw-r--r--src/opengl/qgl.h8
-rw-r--r--src/opengl/qgl_p.h8
-rw-r--r--src/opengl/qglframebufferobject.h6
-rw-r--r--src/opengl/qglframebufferobject_p.h10
-rw-r--r--src/opengl/qglfunctions.cpp4
-rw-r--r--src/opengl/qglpaintdevice_p.h14
-rw-r--r--src/opengl/qglpixelbuffer.h6
-rw-r--r--src/opengl/qgraphicsshadereffect.cpp2
-rw-r--r--src/opengl/qgraphicsshadereffect_p.h2
-rw-r--r--src/platformheaders/doc/snippets/qwindowswindowfunctions/main.cpp61
-rw-r--r--src/platformheaders/doc/src/qtplatformheaders.qdoc2
-rw-r--r--src/platformheaders/platformheaders.pro1
-rw-r--r--src/platformheaders/windowsfunctions/qwindowswindowfunctions.h69
-rw-r--r--src/platformheaders/windowsfunctions/qwindowswindowfunctions.qdoc71
-rw-r--r--src/platformheaders/windowsfunctions/windowsfunctions.pri1
-rw-r--r--src/platformsupport/accessibility/qaccessiblebridgeutils_p.h4
-rw-r--r--src/platformsupport/dbustray/qdbustraytypes.cpp163
-rw-r--r--src/platformsupport/dbustray/qdbustraytypes_p.h81
-rw-r--r--src/platformsupport/eglconvenience/eglconvenience.pri4
-rw-r--r--src/platformsupport/eglconvenience/qeglconvenience.cpp12
-rw-r--r--src/platformsupport/eglconvenience/qeglpbuffer_p.h4
-rw-r--r--src/platformsupport/eglconvenience/qeglplatformcontext.cpp56
-rw-r--r--src/platformsupport/eglconvenience/qeglplatformcontext_p.h17
-rw-r--r--src/platformsupport/eglconvenience/qeglplatformcursor_p.h1
-rw-r--r--src/platformsupport/eglconvenience/qeglplatformintegration.cpp47
-rw-r--r--src/platformsupport/eglconvenience/qeglplatformintegration_p.h5
-rw-r--r--src/platformsupport/eglconvenience/qeglplatformscreen.cpp49
-rw-r--r--src/platformsupport/eglconvenience/qeglplatformscreen_p.h13
-rw-r--r--src/platformsupport/eglconvenience/qeglplatformwindow.cpp24
-rw-r--r--src/platformsupport/eglconvenience/qeglplatformwindow_p.h17
-rw-r--r--src/platformsupport/eglconvenience/qxlibeglintegration.cpp34
-rw-r--r--src/platformsupport/eventdispatchers/qeventdispatcher_glib_p.h2
-rw-r--r--src/platformsupport/fbconvenience/qfbbackingstore_p.h6
-rw-r--r--src/platformsupport/fbconvenience/qfbcursor.cpp5
-rw-r--r--src/platformsupport/fbconvenience/qfbcursor_p.h9
-rw-r--r--src/platformsupport/fbconvenience/qfbvthandler.cpp2
-rw-r--r--src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp31
-rw-r--r--src/platformsupport/fontdatabases/basic/qbasicfontdatabase_p.h12
-rw-r--r--src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp47
-rw-r--r--src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h16
-rw-r--r--src/platformsupport/fontdatabases/fontconfig/qfontenginemultifontconfig.cpp6
-rw-r--r--src/platformsupport/fontdatabases/fontconfig/qfontenginemultifontconfig_p.h4
-rw-r--r--src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm27
-rw-r--r--src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h1
-rw-r--r--src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm144
-rw-r--r--src/platformsupport/fontdatabases/mac/qfontengine_coretext_p.h7
-rw-r--r--src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler.cpp72
-rw-r--r--src/platformsupport/input/evdevkeyboard/qevdevkeyboardmanager.cpp25
-rw-r--r--src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp28
-rw-r--r--src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp33
-rw-r--r--src/platformsupport/input/evdevtablet/qevdevtablet.cpp16
-rw-r--r--src/platformsupport/input/evdevtablet/qevdevtablet_p.h2
-rw-r--r--src/platformsupport/input/evdevtouch/qevdevtouch.cpp35
-rw-r--r--src/platformsupport/input/evdevtouch/qevdevtouch_p.h2
-rw-r--r--src/platformsupport/input/input.pri8
-rw-r--r--src/platformsupport/input/libinput/libinput.pri21
-rw-r--r--src/platformsupport/input/libinput/qlibinputhandler.cpp194
-rw-r--r--src/platformsupport/input/libinput/qlibinputhandler_p.h91
-rw-r--r--src/platformsupport/input/libinput/qlibinputkeyboard.cpp279
-rw-r--r--src/platformsupport/input/libinput/qlibinputkeyboard_p.h98
-rw-r--r--src/platformsupport/input/libinput/qlibinputpointer.cpp101
-rw-r--r--src/platformsupport/input/libinput/qlibinputpointer_p.h (renamed from src/platformsupport/eglconvenience/qeglcompositor_p.h)41
-rw-r--r--src/platformsupport/input/libinput/qlibinputtouch.cpp165
-rw-r--r--src/platformsupport/input/libinput/qlibinputtouch_p.h83
-rw-r--r--src/platformsupport/input/tslib/qtslib.cpp (renamed from src/plugins/generic/tslib/qtslib.cpp)34
-rw-r--r--src/platformsupport/input/tslib/qtslib_p.h (renamed from src/plugins/generic/tslib/qtslib.h)11
-rw-r--r--src/platformsupport/input/tslib/tslib.pri7
-rw-r--r--src/platformsupport/linuxaccessibility/application.cpp3
-rw-r--r--src/platformsupport/linuxaccessibility/application_p.h4
-rw-r--r--src/platformsupport/linuxaccessibility/atspiadaptor.cpp2
-rw-r--r--src/platformsupport/linuxaccessibility/atspiadaptor_p.h2
-rw-r--r--src/platformsupport/linuxaccessibility/bridge.cpp2
-rw-r--r--src/platformsupport/linuxaccessibility/bridge_p.h4
-rw-r--r--src/platformsupport/linuxaccessibility/cache.cpp6
-rw-r--r--src/platformsupport/linuxaccessibility/cache_p.h2
-rw-r--r--src/platformsupport/linuxaccessibility/constant_mappings.cpp2
-rw-r--r--src/platformsupport/linuxaccessibility/constant_mappings_p.h2
-rw-r--r--src/platformsupport/linuxaccessibility/struct_marshallers.cpp2
-rw-r--r--src/platformsupport/linuxaccessibility/struct_marshallers_p.h2
-rw-r--r--src/platformsupport/platformcompositor/platformcompositor.pri7
-rw-r--r--src/platformsupport/platformcompositor/qopenglcompositor.cpp (renamed from src/platformsupport/eglconvenience/qeglcompositor.cpp)158
-rw-r--r--src/platformsupport/platformcompositor/qopenglcompositor_p.h107
-rw-r--r--src/platformsupport/platformcompositor/qopenglcompositorbackingstore.cpp (renamed from src/platformsupport/eglconvenience/qeglplatformbackingstore.cpp)103
-rw-r--r--src/platformsupport/platformcompositor/qopenglcompositorbackingstore_p.h (renamed from src/platformsupport/eglconvenience/qeglplatformbackingstore_p.h)20
-rw-r--r--src/platformsupport/platformsupport.pro1
-rw-r--r--src/platformsupport/services/genericunix/qgenericunixservices_p.h6
-rw-r--r--src/platformsupport/themes/genericunix/qgenericunixthemes.cpp42
-rw-r--r--src/platformsupport/themes/genericunix/qgenericunixthemes_p.h14
-rw-r--r--src/plugins/bearer/generic/main.cpp2
-rw-r--r--src/plugins/bearer/generic/qgenericengine.h18
-rw-r--r--src/plugins/bearer/linux_common/qofonoservice_linux.cpp8
-rw-r--r--src/plugins/bearer/linux_common/qofonoservice_linux_p.h4
-rw-r--r--src/plugins/bearer/qnetworksession_impl.h44
-rw-r--r--src/plugins/generic/evdevkeyboard/main.cpp2
-rw-r--r--src/plugins/generic/evdevmouse/main.cpp2
-rw-r--r--src/plugins/generic/evdevtablet/main.cpp2
-rw-r--r--src/plugins/generic/evdevtouch/main.cpp2
-rw-r--r--src/plugins/generic/generic.pro6
-rw-r--r--src/plugins/generic/libinput/README18
-rw-r--r--src/plugins/generic/libinput/libinput.json3
-rw-r--r--src/plugins/generic/libinput/libinput.pro12
-rw-r--r--src/plugins/generic/libinput/main.cpp58
-rw-r--r--src/plugins/generic/tslib/main.cpp15
-rw-r--r--src/plugins/generic/tslib/tslib.pro7
-rw-r--r--src/plugins/generic/tuiotouch/README.md54
-rw-r--r--src/plugins/generic/tuiotouch/main.cpp68
-rw-r--r--src/plugins/generic/tuiotouch/qoscbundle.cpp186
-rw-r--r--src/plugins/generic/tuiotouch/qoscbundle_p.h62
-rw-r--r--src/plugins/generic/tuiotouch/qoscmessage.cpp138
-rw-r--r--src/plugins/generic/tuiotouch/qoscmessage_p.h57
-rw-r--r--src/plugins/generic/tuiotouch/qtuio_p.h62
-rw-r--r--src/plugins/generic/tuiotouch/qtuiocursor_p.h102
-rw-r--r--src/plugins/generic/tuiotouch/qtuiohandler.cpp337
-rw-r--r--src/plugins/generic/tuiotouch/qtuiohandler_p.h79
-rw-r--r--src/plugins/generic/tuiotouch/tuiotouch.json3
-rw-r--r--src/plugins/generic/tuiotouch/tuiotouch.pro26
-rw-r--r--src/plugins/imageformats/gif/main.h4
-rw-r--r--src/plugins/imageformats/ico/main.h4
-rw-r--r--src/plugins/imageformats/ico/qicohandler.h18
-rw-r--r--src/plugins/imageformats/jpeg/main.h4
-rw-r--r--src/plugins/platforminputcontexts/compose/main.cpp2
-rw-r--r--src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontext.h10
-rw-r--r--src/plugins/platforminputcontexts/ibus/main.cpp2
-rw-r--r--src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.h12
-rw-r--r--src/plugins/platforms/android/androidjniinput.cpp2
-rw-r--r--src/plugins/platforms/android/androidjnimain.cpp2
-rw-r--r--src/plugins/platforms/android/androidjnimenu.cpp2
-rw-r--r--src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp2
-rw-r--r--src/plugins/platforms/android/qandroidplatformscreen.cpp2
-rw-r--r--src/plugins/platforms/android/qandroidplatformtheme.cpp6
-rw-r--r--src/plugins/platforms/cocoa/qcocoaintegration.mm4
-rwxr-xr-xsrc/plugins/platforms/cocoa/qcocoasystemtrayicon.h2
-rw-r--r--src/plugins/platforms/cocoa/qnsview.h1
-rw-r--r--src/plugins/platforms/cocoa/qnsview.mm37
-rw-r--r--src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp6
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/deviceintegration.pro4
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/eglfs_kms.json3
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/eglfs_kms.pro32
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmscursor.cpp218
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmscursor.h94
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsdevice.cpp408
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsdevice.h93
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsintegration.cpp268
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsintegration.h90
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsmain.cpp58
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsscreen.cpp286
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsscreen.h130
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/eglfs_x11.json3
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/eglfs_x11.pro24
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/qeglfsx11integration.cpp (renamed from src/plugins/platforms/eglfs/qeglfshooks_x11.cpp)118
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/qeglfsx11integration.h95
-rw-r--r--src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/qeglfsx11main.cpp58
-rw-r--r--src/plugins/platforms/eglfs/eglfs-plugin.pro12
-rw-r--r--src/plugins/platforms/eglfs/eglfs.pri44
-rw-r--r--src/plugins/platforms/eglfs/eglfs.pro14
-rw-r--r--src/plugins/platforms/eglfs/eglfs_device_lib.pro59
-rw-r--r--src/plugins/platforms/eglfs/qeglfscontext.cpp35
-rw-r--r--src/plugins/platforms/eglfs/qeglfscontext.h8
-rw-r--r--src/plugins/platforms/eglfs/qeglfsdeviceintegration.cpp311
-rw-r--r--src/plugins/platforms/eglfs/qeglfsdeviceintegration.h113
-rw-r--r--src/plugins/platforms/eglfs/qeglfsglobal.h45
-rw-r--r--src/plugins/platforms/eglfs/qeglfshooks.cpp130
-rw-r--r--src/plugins/platforms/eglfs/qeglfshooks.h49
-rw-r--r--src/plugins/platforms/eglfs/qeglfshooks_kms.cpp422
-rw-r--r--src/plugins/platforms/eglfs/qeglfshooks_stub.cpp199
-rw-r--r--src/plugins/platforms/eglfs/qeglfsintegration.cpp80
-rw-r--r--src/plugins/platforms/eglfs/qeglfsintegration.h10
-rw-r--r--src/plugins/platforms/eglfs/qeglfsmain.cpp (renamed from src/plugins/platforms/eglfs/main.cpp)4
-rw-r--r--src/plugins/platforms/eglfs/qeglfsoffscreenwindow.cpp85
-rw-r--r--src/plugins/platforms/eglfs/qeglfsoffscreenwindow.h69
-rw-r--r--src/plugins/platforms/eglfs/qeglfsscreen.cpp22
-rw-r--r--src/plugins/platforms/eglfs/qeglfsscreen.h17
-rw-r--r--src/plugins/platforms/eglfs/qeglfswindow.cpp46
-rw-r--r--src/plugins/platforms/eglfs/qeglfswindow.h6
-rw-r--r--src/plugins/platforms/ios/qiosintegration.mm2
-rw-r--r--src/plugins/platforms/ios/quiaccessibilityelement.mm29
-rw-r--r--src/plugins/platforms/kms/main.cpp2
-rw-r--r--src/plugins/platforms/kms/qkmsbackingstore.h8
-rw-r--r--src/plugins/platforms/kms/qkmscontext.h12
-rw-r--r--src/plugins/platforms/kms/qkmscursor.h4
-rw-r--r--src/plugins/platforms/kms/qkmsintegration.cpp2
-rw-r--r--src/plugins/platforms/kms/qkmsnativeinterface.cpp24
-rw-r--r--src/plugins/platforms/kms/qkmsnativeinterface.h6
-rw-r--r--src/plugins/platforms/kms/qkmsscreen.cpp2
-rw-r--r--src/plugins/platforms/kms/qkmsscreen.h10
-rw-r--r--src/plugins/platforms/linuxfb/main.cpp2
-rw-r--r--src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp35
-rw-r--r--src/plugins/platforms/linuxfb/qlinuxfbintegration.h5
-rw-r--r--src/plugins/platforms/linuxfb/qlinuxfbscreen.h2
-rw-r--r--src/plugins/platforms/minimal/main.cpp2
-rw-r--r--src/plugins/platforms/minimal/qminimalbackingstore.h6
-rw-r--r--src/plugins/platforms/minimal/qminimalintegration.cpp4
-rw-r--r--src/plugins/platforms/minimal/qminimalintegration.h16
-rw-r--r--src/plugins/platforms/minimalegl/main.cpp2
-rw-r--r--src/plugins/platforms/minimalegl/qminimaleglbackingstore.h10
-rw-r--r--src/plugins/platforms/minimalegl/qminimaleglintegration.cpp2
-rw-r--r--src/plugins/platforms/minimalegl/qminimaleglintegration.h14
-rw-r--r--src/plugins/platforms/minimalegl/qminimaleglscreen.cpp2
-rw-r--r--src/plugins/platforms/minimalegl/qminimaleglscreen.h6
-rw-r--r--src/plugins/platforms/minimalegl/qminimaleglwindow.h4
-rw-r--r--src/plugins/platforms/offscreen/main.cpp2
-rw-r--r--src/plugins/platforms/offscreen/qoffscreencommon.cpp6
-rw-r--r--src/plugins/platforms/offscreen/qoffscreencommon.h22
-rw-r--r--src/plugins/platforms/offscreen/qoffscreenintegration.h14
-rw-r--r--src/plugins/platforms/offscreen/qoffscreenintegration_x11.h18
-rw-r--r--src/plugins/platforms/offscreen/qoffscreenwindow.h12
-rw-r--r--src/plugins/platforms/openwfd/qopenwfdintegration.cpp5
-rw-r--r--src/plugins/platforms/openwfd/qopenwfdintegration.h1
-rw-r--r--src/plugins/platforms/openwfd/qopenwfdport.cpp2
-rw-r--r--src/plugins/platforms/platforms.pro4
-rw-r--r--src/plugins/platforms/qnx/qqnxglcontext.cpp4
-rw-r--r--src/plugins/platforms/qnx/qqnxglcontext.h4
-rw-r--r--src/plugins/platforms/qnx/qqnxintegration.cpp6
-rw-r--r--src/plugins/platforms/qnx/qqnxscreen.cpp6
-rw-r--r--src/plugins/platforms/windows/accessible/iaccessible2.cpp2
-rw-r--r--src/plugins/platforms/windows/accessible/iaccessible2.h19
-rw-r--r--src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.h2
-rw-r--r--src/plugins/platforms/windows/qwindowsdialoghelpers.cpp24
-rw-r--r--src/plugins/platforms/windows/qwindowsfontdatabase.cpp56
-rw-r--r--src/plugins/platforms/windows/qwindowsfontdatabase_ft.cpp30
-rw-r--r--src/plugins/platforms/windows/qwindowsfontengine.cpp53
-rw-r--r--src/plugins/platforms/windows/qwindowsfontengine.h5
-rw-r--r--src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp10
-rw-r--r--src/plugins/platforms/windows/qwindowsinputcontext.cpp4
-rw-r--r--src/plugins/platforms/windows/qwindowsintegration.h1
-rw-r--r--src/plugins/platforms/windows/qwindowskeymapper.cpp2
-rw-r--r--src/plugins/platforms/windows/qwindowsmime.cpp36
-rw-r--r--src/plugins/platforms/windows/qwindowsnativeinterface.cpp7
-rw-r--r--src/plugins/platforms/windows/qwindowsnativeinterface.h2
-rw-r--r--src/plugins/platforms/windows/qwindowsscreen.cpp9
-rw-r--r--src/plugins/platforms/windows/qwindowsscreen.h6
-rw-r--r--src/plugins/platforms/windows/qwindowswindow.cpp31
-rw-r--r--src/plugins/platforms/windows/qwindowswindow.h4
-rw-r--r--src/plugins/platforms/winrt/qwinrtfontdatabase.cpp31
-rw-r--r--src/plugins/platforms/winrt/qwinrtfontdatabase.h3
-rw-r--r--src/plugins/platforms/winrt/qwinrttheme.cpp2
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/gl_integrations.pri13
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/gl_integrations.pro9
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/gl_integrations_plugin_base.pri38
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/qxcbglintegration.cpp62
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/qxcbglintegration.h76
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationfactory.cpp108
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationfactory.h61
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationplugin.h67
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/qxcbnativeinterfacehandler.cpp93
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/qxcbnativeinterfacehandler.h72
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglcontext.h104
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglinclude.h57
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.cpp112
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.h85
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglmain.cpp62
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.cpp140
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.h72
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.cpp92
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.h75
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_egl/xcb_egl.json3
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_egl/xcb_egl.pro27
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp (renamed from src/plugins/platforms/xcb/qglxintegration.cpp)0
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.h (renamed from src/plugins/platforms/xcb/qglxintegration.h)18
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.cpp223
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.h75
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxmain.cpp62
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxnativeinterfacehandler.cpp95
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxnativeinterfacehandler.h67
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp68
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.h63
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_glx/xcb_glx.json3
-rw-r--r--src/plugins/platforms/xcb/gl_integrations/xcb_glx/xcb_glx.pro31
-rw-r--r--src/plugins/platforms/xcb/qxcbbackingstore.cpp45
-rw-r--r--src/plugins/platforms/xcb/qxcbbackingstore.h17
-rw-r--r--src/plugins/platforms/xcb/qxcbclipboard.cpp8
-rw-r--r--src/plugins/platforms/xcb/qxcbclipboard.h8
-rw-r--r--src/plugins/platforms/xcb/qxcbconnection.cpp191
-rw-r--r--src/plugins/platforms/xcb/qxcbconnection.h31
-rw-r--r--src/plugins/platforms/xcb/qxcbconnection_xi2.cpp2
-rw-r--r--src/plugins/platforms/xcb/qxcbcursor.h6
-rw-r--r--src/plugins/platforms/xcb/qxcbdrag.cpp6
-rw-r--r--src/plugins/platforms/xcb/qxcbdrag.h14
-rw-r--r--src/plugins/platforms/xcb/qxcbexport.h (renamed from src/plugins/platforms/xcb/qxcbeglsurface.h)33
-rw-r--r--src/plugins/platforms/xcb/qxcbintegration.cpp142
-rw-r--r--src/plugins/platforms/xcb/qxcbintegration.h44
-rw-r--r--src/plugins/platforms/xcb/qxcbmain.cpp2
-rw-r--r--src/plugins/platforms/xcb/qxcbnativeinterface.cpp298
-rw-r--r--src/plugins/platforms/xcb/qxcbnativeinterface.h35
-rw-r--r--src/plugins/platforms/xcb/qxcbscreen.cpp2
-rw-r--r--src/plugins/platforms/xcb/qxcbscreen.h31
-rw-r--r--src/plugins/platforms/xcb/qxcbsystemtraytracker.h2
-rw-r--r--src/plugins/platforms/xcb/qxcbwindow.cpp76
-rw-r--r--src/plugins/platforms/xcb/qxcbwindow.h76
-rw-r--r--src/plugins/platforms/xcb/xcb-plugin.pro112
-rw-r--r--src/plugins/platforms/xcb/xcb.pro3
-rw-r--r--src/plugins/platforms/xcb/xcb_qpa_lib.pro111
-rw-r--r--src/plugins/platformthemes/gtk2/main.cpp2
-rw-r--r--src/plugins/platformthemes/gtk2/qgtk2dialoghelpers.cpp24
-rw-r--r--src/plugins/platformthemes/gtk2/qgtk2dialoghelpers.h34
-rw-r--r--src/plugins/platformthemes/gtk2/qgtk2theme.h4
-rw-r--r--src/plugins/plugins.pro1
-rw-r--r--src/plugins/printsupport/cups/main.cpp2
-rw-r--r--src/plugins/printsupport/cups/qcupsprintengine_p.h8
-rw-r--r--src/plugins/sqldrivers/mysql/main.cpp2
-rw-r--r--src/plugins/sqldrivers/psql/main.cpp2
-rw-r--r--src/plugins/sqldrivers/sqlite/smain.cpp2
-rw-r--r--src/plugins/styles/bb10style/bb10lightstyle.qrc54
-rw-r--r--src/plugins/styles/bb10style/bb10style.pro28
-rw-r--r--src/plugins/styles/bb10style/bright/button/core_button_disabled.pngbin0 -> 1510 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/button/core_button_disabled_selected.pngbin0 -> 1782 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/button/core_button_enabled_selected.pngbin0 -> 1830 bytes
-rwxr-xr-xsrc/plugins/styles/bb10style/bright/button/core_button_inactive.pngbin0 -> 2428 bytes
-rwxr-xr-xsrc/plugins/styles/bb10style/bright/button/core_button_pressed.pngbin0 -> 3221 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/checkbox/core_checkbox_checked.pngbin0 -> 2048 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/checkbox/core_checkbox_disabled.pngbin0 -> 935 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/checkbox/core_checkbox_disabled_checked.pngbin0 -> 1702 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/checkbox/core_checkbox_enabled.pngbin0 -> 1082 bytes
-rwxr-xr-xsrc/plugins/styles/bb10style/bright/checkbox/core_checkbox_pressed.pngbin0 -> 2776 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/checkbox/core_checkbox_pressed_checked.pngbin0 -> 2652 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/combobox/core_dropdown_button.pngbin0 -> 1605 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/combobox/core_dropdown_button_arrowdown.pngbin0 -> 1419 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/combobox/core_dropdown_button_arrowdown_pressed.pngbin0 -> 1404 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/combobox/core_dropdown_button_arrowup.pngbin0 -> 1398 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/combobox/core_dropdown_button_disabled.pngbin0 -> 1587 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/combobox/core_dropdown_button_pressed.pngbin0 -> 1801 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/combobox/core_dropdown_checkmark.pngbin0 -> 1769 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/combobox/core_dropdown_divider.pngbin0 -> 134 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/combobox/core_dropdown_menu.pngbin0 -> 874 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/combobox/core_dropdown_menuup.pngbin0 -> 996 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/combobox/core_listitem_active.pngbin0 -> 182 bytes
-rwxr-xr-xsrc/plugins/styles/bb10style/bright/lineedit/core_textinput_bg.pngbin0 -> 1315 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/lineedit/core_textinput_bg_disabled.pngbin0 -> 454 bytes
-rwxr-xr-xsrc/plugins/styles/bb10style/bright/lineedit/core_textinput_bg_highlight.pngbin0 -> 394 bytes
-rwxr-xr-xsrc/plugins/styles/bb10style/bright/listitem/core_listitem_active.pngbin0 -> 164 bytes
-rwxr-xr-xsrc/plugins/styles/bb10style/bright/listitem/core_listitem_divider.pngbin0 -> 135 bytes
-rwxr-xr-xsrc/plugins/styles/bb10style/bright/progressbar/core_progressindicator_bg.pngbin0 -> 1802 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/progressbar/core_progressindicator_complete.pngbin0 -> 635 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/progressbar/core_progressindicator_fill.pngbin0 -> 629 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/progressbar/core_progressindicator_vbg.pngbin0 -> 903 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/progressbar/core_progressindicator_vcomplete.pngbin0 -> 614 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/progressbar/core_progressindicator_vfill.pngbin0 -> 594 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/radiobutton/core_radiobutton_checked.pngbin0 -> 4471 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/radiobutton/core_radiobutton_disabled.pngbin0 -> 3652 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/radiobutton/core_radiobutton_disabled_checked.pngbin0 -> 4094 bytes
-rwxr-xr-xsrc/plugins/styles/bb10style/bright/radiobutton/core_radiobutton_inactive.pngbin0 -> 4245 bytes
-rwxr-xr-xsrc/plugins/styles/bb10style/bright/radiobutton/core_radiobutton_pressed.pngbin0 -> 5460 bytes
-rwxr-xr-xsrc/plugins/styles/bb10style/bright/scrollbar/core_scrollbar.pngbin0 -> 1242 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/scrollbar/core_scrollbar_v.pngbin0 -> 385 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/slider/core_slider_active.pngbin0 -> 1167 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/slider/core_slider_cache.pngbin0 -> 1154 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/slider/core_slider_disabled.pngbin0 -> 1134 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/slider/core_slider_enabled.pngbin0 -> 1049 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/slider/core_slider_handle.pngbin0 -> 2843 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/slider/core_slider_handle_disabled.pngbin0 -> 2708 bytes
-rwxr-xr-xsrc/plugins/styles/bb10style/bright/slider/core_slider_handle_pressed.pngbin0 -> 6577 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/slider/core_slider_inactive.pngbin0 -> 1162 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/slider/core_slider_vactive.pngbin0 -> 1077 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/slider/core_slider_vcache.pngbin0 -> 1063 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/slider/core_slider_vdisabled.pngbin0 -> 1064 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/slider/core_slider_venabled.pngbin0 -> 996 bytes
-rw-r--r--src/plugins/styles/bb10style/bright/slider/core_slider_vinactive.pngbin0 -> 1071 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/button/core_button_disabled.pngbin0 -> 1291 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/button/core_button_disabled_selected.pngbin0 -> 1655 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/button/core_button_enabled_selected.pngbin0 -> 1665 bytes
-rwxr-xr-xsrc/plugins/styles/bb10style/dark/button/core_button_inactive.pngbin0 -> 2262 bytes
-rwxr-xr-xsrc/plugins/styles/bb10style/dark/button/core_button_pressed.pngbin0 -> 2853 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/checkbox/core_checkbox_checked.pngbin0 -> 1947 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/checkbox/core_checkbox_disabled.pngbin0 -> 787 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/checkbox/core_checkbox_disabled_checked.pngbin0 -> 1578 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/checkbox/core_checkbox_enabled.pngbin0 -> 925 bytes
-rwxr-xr-xsrc/plugins/styles/bb10style/dark/checkbox/core_checkbox_pressed.pngbin0 -> 2478 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/checkbox/core_checkbox_pressed_checked.pngbin0 -> 2256 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/combobox/core_dropdown_button.pngbin0 -> 1425 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/combobox/core_dropdown_button_arrowdown.pngbin0 -> 1404 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/combobox/core_dropdown_button_arrowdown_pressed.pngbin0 -> 1465 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/combobox/core_dropdown_button_arrowup.pngbin0 -> 1383 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/combobox/core_dropdown_button_disabled.pngbin0 -> 1291 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/combobox/core_dropdown_button_pressed.pngbin0 -> 1583 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/combobox/core_dropdown_checkmark.pngbin0 -> 1588 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/combobox/core_dropdown_divider.pngbin0 -> 134 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/combobox/core_dropdown_menu.pngbin0 -> 662 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/combobox/core_dropdown_menuup.pngbin0 -> 688 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/combobox/core_listitem_active.pngbin0 -> 149 bytes
-rwxr-xr-xsrc/plugins/styles/bb10style/dark/lineedit/core_textinput_bg.pngbin0 -> 1315 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/lineedit/core_textinput_bg_disabled.pngbin0 -> 454 bytes
-rwxr-xr-xsrc/plugins/styles/bb10style/dark/lineedit/core_textinput_bg_highlight.pngbin0 -> 394 bytes
-rwxr-xr-xsrc/plugins/styles/bb10style/dark/listitem/core_listitem_active.pngbin0 -> 164 bytes
-rwxr-xr-xsrc/plugins/styles/bb10style/dark/listitem/core_listitem_divider.pngbin0 -> 136 bytes
-rwxr-xr-xsrc/plugins/styles/bb10style/dark/progressbar/core_progressindicator_bg.pngbin0 -> 1724 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/progressbar/core_progressindicator_complete.pngbin0 -> 635 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/progressbar/core_progressindicator_fill.pngbin0 -> 658 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/progressbar/core_progressindicator_vbg.pngbin0 -> 815 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/progressbar/core_progressindicator_vcomplete.pngbin0 -> 614 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/progressbar/core_progressindicator_vfill.pngbin0 -> 602 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/radiobutton/core_radiobutton_checked.pngbin0 -> 4298 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/radiobutton/core_radiobutton_disabled.pngbin0 -> 3125 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/radiobutton/core_radiobutton_disabled_checked.pngbin0 -> 3539 bytes
-rwxr-xr-xsrc/plugins/styles/bb10style/dark/radiobutton/core_radiobutton_inactive.pngbin0 -> 3968 bytes
-rwxr-xr-xsrc/plugins/styles/bb10style/dark/radiobutton/core_radiobutton_pressed.pngbin0 -> 4777 bytes
-rwxr-xr-xsrc/plugins/styles/bb10style/dark/scrollbar/core_scrollbar.pngbin0 -> 1245 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/scrollbar/core_scrollbar_v.pngbin0 -> 369 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/slider/core_slider_active.pngbin0 -> 1160 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/slider/core_slider_cache.pngbin0 -> 1154 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/slider/core_slider_disabled.pngbin0 -> 1105 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/slider/core_slider_enabled.pngbin0 -> 983 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/slider/core_slider_handle.pngbin0 -> 3019 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/slider/core_slider_handle_disabled.pngbin0 -> 1715 bytes
-rwxr-xr-xsrc/plugins/styles/bb10style/dark/slider/core_slider_handle_pressed.pngbin0 -> 6593 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/slider/core_slider_inactive.pngbin0 -> 1158 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/slider/core_slider_vactive.pngbin0 -> 1066 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/slider/core_slider_vcache.pngbin0 -> 1058 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/slider/core_slider_vdisabled.pngbin0 -> 1009 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/slider/core_slider_venabled.pngbin0 -> 929 bytes
-rw-r--r--src/plugins/styles/bb10style/dark/slider/core_slider_vinactive.pngbin0 -> 1067 bytes
-rw-r--r--src/plugins/styles/bb10style/qbb10brightstyle.cpp352
-rw-r--r--src/plugins/styles/bb10style/qbb10brightstyle.h70
-rw-r--r--src/plugins/styles/bb10style/qbb10brightstyle.qrc57
-rw-r--r--src/plugins/styles/bb10style/qbb10darkstyle.cpp357
-rw-r--r--src/plugins/styles/bb10style/qbb10darkstyle.h70
-rw-r--r--src/plugins/styles/bb10style/qbb10darkstyle.qrc57
-rw-r--r--src/plugins/styles/bb10style/qbb10styleplugin.cpp74
-rw-r--r--src/plugins/styles/bb10style/qbb10styleplugin.h64
-rw-r--r--src/plugins/styles/bb10style/qbb10styleplugin.json3
-rw-r--r--src/plugins/styles/bb10style/qpixmapstyle.cpp994
-rw-r--r--src/plugins/styles/bb10style/qpixmapstyle.h236
-rw-r--r--src/plugins/styles/styles.pro3
-rw-r--r--src/printsupport/dialogs/qpagesetupdialog.h10
-rw-r--r--src/printsupport/dialogs/qpagesetupdialog_unix.cpp2
-rw-r--r--src/printsupport/dialogs/qprintdialog.h20
-rw-r--r--src/printsupport/dialogs/qprintdialog_unix.cpp4
-rw-r--r--src/printsupport/dialogs/qprintpreviewdialog.cpp8
-rw-r--r--src/printsupport/dialogs/qprintpreviewdialog.h10
-rw-r--r--src/printsupport/kernel/qcups.cpp7
-rw-r--r--src/printsupport/kernel/qprintengine_pdf_p.h16
-rw-r--r--src/printsupport/kernel/qprinter.h14
-rw-r--r--src/printsupport/widgets/qprintpreviewwidget.cpp6
-rw-r--r--src/printsupport/widgets/qprintpreviewwidget.h2
-rw-r--r--src/sql/drivers/mysql/qsql_mysql.cpp2
-rw-r--r--src/sql/drivers/mysql/qsql_mysql_p.h60
-rw-r--r--src/sql/drivers/odbc/qsql_odbc.cpp189
-rw-r--r--src/sql/drivers/psql/qsql_psql.cpp2
-rw-r--r--src/sql/drivers/psql/qsql_psql_p.h62
-rw-r--r--src/sql/drivers/sqlite/qsql_sqlite.cpp22
-rw-r--r--src/sql/drivers/sqlite/qsql_sqlite_p.h24
-rw-r--r--src/sql/kernel/qsqldatabase.h2
-rw-r--r--src/sql/kernel/qsqlfield.cpp6
-rw-r--r--src/sql/models/qsqlquerymodel.h18
-rw-r--r--src/sql/models/qsqlrelationaltablemodel.cpp8
-rw-r--r--src/sql/models/qsqlrelationaltablemodel.h22
-rw-r--r--src/sql/models/qsqltablemodel.h26
-rw-r--r--src/src.pro2
-rw-r--r--src/testlib/doc/snippets/code/src_qtestlib_qtestcase.cpp13
-rw-r--r--src/testlib/qabstracttestlogger_p.h5
-rw-r--r--src/testlib/qbenchmarkperfevents_p.h20
-rw-r--r--src/testlib/qplaintestlogger.cpp4
-rw-r--r--src/testlib/qtest.h2
-rw-r--r--src/testlib/qtest_widgets.h64
-rw-r--r--src/testlib/qtestcase.cpp85
-rw-r--r--src/testlib/qtestcase.h2
-rw-r--r--src/testlib/qtestkeyboard.h4
-rw-r--r--src/testlib/qtestlog.cpp5
-rw-r--r--src/testlib/qxmltestlogger.cpp4
-rw-r--r--src/testlib/qxunittestlogger.cpp5
-rw-r--r--src/tools/bootstrap/bootstrap.pro12
-rw-r--r--src/tools/moc/generator.cpp345
-rw-r--r--src/tools/moc/keywords.cpp4
-rw-r--r--src/tools/moc/moc.cpp8
-rw-r--r--src/tools/moc/preprocessor.cpp59
-rw-r--r--src/tools/moc/preprocessor.h4
-rw-r--r--src/tools/moc/token.h2
-rw-r--r--src/tools/moc/util/generate_keywords.cpp2
-rw-r--r--src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp15
-rw-r--r--src/tools/qdoc/atom.cpp53
-rw-r--r--src/tools/qdoc/atom.h43
-rw-r--r--src/tools/qdoc/codeparser.cpp9
-rw-r--r--src/tools/qdoc/codeparser.h5
-rw-r--r--src/tools/qdoc/config.cpp44
-rw-r--r--src/tools/qdoc/config.h5
-rw-r--r--src/tools/qdoc/cppcodemarker.h30
-rw-r--r--src/tools/qdoc/cppcodeparser.h18
-rw-r--r--src/tools/qdoc/ditaxmlgenerator.cpp6
-rw-r--r--src/tools/qdoc/ditaxmlgenerator.h34
-rw-r--r--src/tools/qdoc/doc.cpp43
-rw-r--r--src/tools/qdoc/doc.h8
-rw-r--r--src/tools/qdoc/doc/images/link-to-qquickitem.pngbin0 -> 46571 bytes
-rw-r--r--src/tools/qdoc/doc/images/links-to-broken-links.pngbin0 -> 16569 bytes
-rw-r--r--src/tools/qdoc/doc/images/links-to-links.pngbin0 -> 10042 bytes
-rw-r--r--src/tools/qdoc/doc/images/qa-table.pngbin0 -> 7057 bytes
-rw-r--r--src/tools/qdoc/doc/qa-pages.qdoc109
-rw-r--r--src/tools/qdoc/doc/qdoc-manual-intro.qdoc149
-rw-r--r--src/tools/qdoc/doc/qdoc-manual-markupcmds.qdoc103
-rw-r--r--src/tools/qdoc/doc/qdoc-manual-qdocconf.qdoc2
-rw-r--r--src/tools/qdoc/doc/qdoc-manual.qdoc1
-rw-r--r--src/tools/qdoc/generator.cpp18
-rw-r--r--src/tools/qdoc/generator.h25
-rw-r--r--src/tools/qdoc/htmlgenerator.cpp318
-rw-r--r--src/tools/qdoc/htmlgenerator.h30
-rw-r--r--src/tools/qdoc/jscodemarker.h10
-rw-r--r--src/tools/qdoc/location.cpp16
-rw-r--r--src/tools/qdoc/location.h4
-rw-r--r--src/tools/qdoc/main.cpp489
-rw-r--r--src/tools/qdoc/node.cpp4
-rw-r--r--src/tools/qdoc/node.h270
-rw-r--r--src/tools/qdoc/plaincodemarker.h26
-rw-r--r--src/tools/qdoc/puredocparser.h4
-rw-r--r--src/tools/qdoc/qdocdatabase.cpp324
-rw-r--r--src/tools/qdoc/qdocdatabase.h60
-rw-r--r--src/tools/qdoc/qdocindexfiles.cpp4
-rw-r--r--src/tools/qdoc/qmlcodemarker.h20
-rw-r--r--src/tools/qdoc/qmlcodeparser.h12
-rw-r--r--src/tools/qdoc/qmlmarkupvisitor.h172
-rw-r--r--src/tools/qdoc/qmlparser/qqmljsast_p.h548
-rw-r--r--src/tools/qdoc/qmlvisitor.h34
-rw-r--r--src/tools/qdoc/tokenizer.cpp8
-rw-r--r--src/tools/qdoc/tree.cpp92
-rw-r--r--src/tools/qdoc/tree.h36
-rw-r--r--src/tools/uic/cpp/cppextractimages.h6
-rw-r--r--src/tools/uic/cpp/cppwritedeclaration.h14
-rw-r--r--src/tools/uic/cpp/cppwriteicondata.h6
-rw-r--r--src/tools/uic/cpp/cppwriteicondeclaration.h6
-rw-r--r--src/tools/uic/cpp/cppwriteiconinitialization.h6
-rw-r--r--src/tools/uic/cpp/cppwriteincludes.h20
-rw-r--r--src/tools/uic/cpp/cppwriteinitialization.cpp16
-rw-r--r--src/tools/uic/cpp/cppwriteinitialization.h32
-rw-r--r--src/tools/uic/customwidgetsinfo.h6
-rw-r--r--src/tools/uic/databaseinfo.h4
-rw-r--r--src/tools/uic/validator.h12
-rw-r--r--src/widgets/accessible/complexwidgets.cpp32
-rw-r--r--src/widgets/accessible/qaccessiblewidgets.h4
-rw-r--r--src/widgets/dialogs/qcolordialog.cpp184
-rw-r--r--src/widgets/dialogs/qcolordialog.h10
-rw-r--r--src/widgets/dialogs/qcolordialog_p.h7
-rw-r--r--src/widgets/dialogs/qerrormessage.cpp4
-rw-r--r--src/widgets/dialogs/qerrormessage.h4
-rw-r--r--src/widgets/dialogs/qfiledialog.h14
-rw-r--r--src/widgets/dialogs/qfiledialog_p.h22
-rw-r--r--src/widgets/dialogs/qfilesystemmodel.h36
-rw-r--r--src/widgets/dialogs/qfontdialog.cpp2
-rw-r--r--src/widgets/dialogs/qfontdialog.h14
-rw-r--r--src/widgets/dialogs/qfontdialog_p.h6
-rw-r--r--src/widgets/dialogs/qfscompleter_p.h4
-rw-r--r--src/widgets/dialogs/qinputdialog.cpp8
-rw-r--r--src/widgets/dialogs/qinputdialog.h14
-rw-r--r--src/widgets/dialogs/qmessagebox.cpp10
-rw-r--r--src/widgets/dialogs/qmessagebox.h18
-rw-r--r--src/widgets/dialogs/qprogressdialog.cpp16
-rw-r--r--src/widgets/dialogs/qprogressdialog.h16
-rw-r--r--src/widgets/dialogs/qsidebar_p.h20
-rw-r--r--src/widgets/dialogs/qwizard.cpp4
-rw-r--r--src/widgets/dialogs/qwizard.h12
-rw-r--r--src/widgets/doc/snippets/javastyle.cpp4
-rw-r--r--src/widgets/effects/qgraphicseffect.h12
-rw-r--r--src/widgets/effects/qpixmapfilter.cpp7
-rw-r--r--src/widgets/effects/qpixmapfilter_p.h14
-rw-r--r--src/widgets/graphicsview/qgraphicsanchorlayout.h12
-rw-r--r--src/widgets/graphicsview/qgraphicsanchorlayout_p.h4
-rw-r--r--src/widgets/graphicsview/qgraphicsgridlayout.cpp1
-rw-r--r--src/widgets/graphicsview/qgraphicsgridlayout.h12
-rw-r--r--src/widgets/graphicsview/qgraphicsitem.cpp10
-rw-r--r--src/widgets/graphicsview/qgraphicsitem.h222
-rw-r--r--src/widgets/graphicsview/qgraphicsitem_p.h6
-rw-r--r--src/widgets/graphicsview/qgraphicslayout.h4
-rw-r--r--src/widgets/graphicsview/qgraphicslayout_p.h2
-rw-r--r--src/widgets/graphicsview/qgraphicslayoutstyleinfo_p.h7
-rw-r--r--src/widgets/graphicsview/qgraphicslinearlayout.cpp1
-rw-r--r--src/widgets/graphicsview/qgraphicslinearlayout.h12
-rw-r--r--src/widgets/graphicsview/qgraphicsproxywidget.h64
-rw-r--r--src/widgets/graphicsview/qgraphicsscene.cpp40
-rw-r--r--src/widgets/graphicsview/qgraphicsscene.h6
-rw-r--r--src/widgets/graphicsview/qgraphicsscene_bsp.cpp6
-rw-r--r--src/widgets/graphicsview/qgraphicsscenebsptreeindex_p.h20
-rw-r--r--src/widgets/graphicsview/qgraphicsscenelinearindex_p.h10
-rw-r--r--src/widgets/graphicsview/qgraphicstransform.h4
-rw-r--r--src/widgets/graphicsview/qgraphicsview.cpp15
-rw-r--r--src/widgets/graphicsview/qgraphicsview.h50
-rw-r--r--src/widgets/graphicsview/qgraphicsview_p.h1
-rw-r--r--src/widgets/graphicsview/qgraphicswidget.cpp12
-rw-r--r--src/widgets/graphicsview/qgraphicswidget.h34
-rw-r--r--src/widgets/graphicsview/qgraphicswidget_p.h16
-rw-r--r--src/widgets/itemviews/itemviews.pri1
-rw-r--r--src/widgets/itemviews/qabstractitemdelegate.cpp141
-rw-r--r--src/widgets/itemviews/qabstractitemdelegate.h3
-rw-r--r--src/widgets/itemviews/qabstractitemdelegate_p.h70
-rw-r--r--src/widgets/itemviews/qabstractitemview.cpp6
-rw-r--r--src/widgets/itemviews/qabstractitemview.h44
-rw-r--r--src/widgets/itemviews/qcolumnview.h36
-rw-r--r--src/widgets/itemviews/qcolumnview_p.h24
-rw-r--r--src/widgets/itemviews/qcolumnviewgrip_p.h10
-rw-r--r--src/widgets/itemviews/qdatawidgetmapper.cpp2
-rw-r--r--src/widgets/itemviews/qdirmodel.cpp5
-rw-r--r--src/widgets/itemviews/qdirmodel.h32
-rw-r--r--src/widgets/itemviews/qheaderview.cpp120
-rw-r--r--src/widgets/itemviews/qheaderview.h55
-rw-r--r--src/widgets/itemviews/qheaderview_p.h6
-rw-r--r--src/widgets/itemviews/qitemdelegate.cpp109
-rw-r--r--src/widgets/itemviews/qitemdelegate.h18
-rw-r--r--src/widgets/itemviews/qitemeditorfactory.cpp4
-rw-r--r--src/widgets/itemviews/qitemeditorfactory_p.h2
-rw-r--r--src/widgets/itemviews/qlistview.h62
-rw-r--r--src/widgets/itemviews/qlistwidget.cpp19
-rw-r--r--src/widgets/itemviews/qlistwidget.h6
-rw-r--r--src/widgets/itemviews/qlistwidget_p.h2
-rw-r--r--src/widgets/itemviews/qstyleditemdelegate.cpp103
-rw-r--r--src/widgets/itemviews/qstyleditemdelegate.h18
-rw-r--r--src/widgets/itemviews/qtableview.cpp2
-rw-r--r--src/widgets/itemviews/qtableview.h50
-rw-r--r--src/widgets/itemviews/qtablewidget.cpp19
-rw-r--r--src/widgets/itemviews/qtablewidget.h6
-rw-r--r--src/widgets/itemviews/qtablewidget_p.h2
-rw-r--r--src/widgets/itemviews/qtreeview.cpp4
-rw-r--r--src/widgets/itemviews/qtreeview.h70
-rw-r--r--src/widgets/itemviews/qtreeview_p.h2
-rw-r--r--src/widgets/itemviews/qtreewidget.cpp5
-rw-r--r--src/widgets/itemviews/qtreewidget.h8
-rw-r--r--src/widgets/itemviews/qtreewidget_p.h40
-rw-r--r--src/widgets/kernel/qaction.h2
-rw-r--r--src/widgets/kernel/qapplication.cpp55
-rw-r--r--src/widgets/kernel/qapplication.h13
-rw-r--r--src/widgets/kernel/qapplication_p.h14
-rw-r--r--src/widgets/kernel/qboxlayout.h26
-rw-r--r--src/widgets/kernel/qdesktopwidget.h2
-rw-r--r--src/widgets/kernel/qdesktopwidget_p.h4
-rw-r--r--src/widgets/kernel/qformlayout.h26
-rw-r--r--src/widgets/kernel/qgesture.cpp106
-rw-r--r--src/widgets/kernel/qgesture.h13
-rw-r--r--src/widgets/kernel/qgesturemanager.cpp53
-rw-r--r--src/widgets/kernel/qgridlayout.h26
-rw-r--r--src/widgets/kernel/qlayout.cpp8
-rw-r--r--src/widgets/kernel/qlayout.h24
-rw-r--r--src/widgets/kernel/qopenglwidget.cpp98
-rw-r--r--src/widgets/kernel/qopenglwidget.h8
-rw-r--r--src/widgets/kernel/qshortcut.h2
-rw-r--r--src/widgets/kernel/qsizepolicy.h9
-rw-r--r--src/widgets/kernel/qstackedlayout.cpp5
-rw-r--r--src/widgets/kernel/qstackedlayout.h22
-rw-r--r--src/widgets/kernel/qstandardgestures_p.h30
-rw-r--r--src/widgets/kernel/qtooltip.cpp10
-rw-r--r--src/widgets/kernel/qwhatsthis.cpp14
-rw-r--r--src/widgets/kernel/qwidget.cpp23
-rw-r--r--src/widgets/kernel/qwidget.h14
-rw-r--r--src/widgets/kernel/qwidget_p.h10
-rw-r--r--src/widgets/kernel/qwidgetaction.h4
-rw-r--r--src/widgets/kernel/qwidgetbackingstore.cpp18
-rw-r--r--src/widgets/kernel/qwidgetwindow.cpp7
-rw-r--r--src/widgets/kernel/qwidgetwindow_p.h8
-rw-r--r--src/widgets/kernel/qwindowcontainer_p.h2
-rw-r--r--src/widgets/statemachine/qbasickeyeventtransition_p.h4
-rw-r--r--src/widgets/statemachine/qbasicmouseeventtransition_p.h4
-rw-r--r--src/widgets/statemachine/qkeyeventtransition.h4
-rw-r--r--src/widgets/statemachine/qmouseeventtransition.h4
-rw-r--r--src/widgets/styles/qcommonstyle.cpp42
-rw-r--r--src/widgets/styles/qcommonstyle.h36
-rw-r--r--src/widgets/styles/qfusionstyle.cpp9
-rw-r--r--src/widgets/styles/qfusionstyle_p.h42
-rw-r--r--src/widgets/styles/qgtk2painter_p.h30
-rw-r--r--src/widgets/styles/qgtkstyle.cpp4
-rw-r--r--src/widgets/styles/qgtkstyle_p.cpp14
-rw-r--r--src/widgets/styles/qgtkstyle_p.h42
-rw-r--r--src/widgets/styles/qgtkstyle_p_p.h2
-rw-r--r--src/widgets/styles/qmacstyle_mac.mm54
-rw-r--r--src/widgets/styles/qproxystyle.h48
-rw-r--r--src/widgets/styles/qstyle.cpp31
-rw-r--r--src/widgets/styles/qstyle.h9
-rw-r--r--src/widgets/styles/qstyleanimation_p.h12
-rw-r--r--src/widgets/styles/qstyleoption.cpp3
-rw-r--r--src/widgets/styles/qstyleoption.h2
-rw-r--r--src/widgets/styles/qstylesheetstyle.cpp24
-rw-r--r--src/widgets/styles/qstylesheetstyle_p.h48
-rw-r--r--src/widgets/styles/qwindowsmobilestyle.cpp4
-rw-r--r--src/widgets/styles/qwindowsstyle.cpp15
-rw-r--r--src/widgets/styles/qwindowsstyle_p.h30
-rw-r--r--src/widgets/styles/qwindowsvistastyle.cpp23
-rw-r--r--src/widgets/styles/qwindowsxpstyle.cpp4
-rw-r--r--src/widgets/util/qcompleter.h4
-rw-r--r--src/widgets/util/qcompleter_p.h26
-rw-r--r--src/widgets/util/qflickgesture.cpp2
-rw-r--r--src/widgets/util/qscroller.cpp4
-rw-r--r--src/widgets/util/qsystemtrayicon.cpp6
-rw-r--r--src/widgets/util/qsystemtrayicon.h2
-rw-r--r--src/widgets/util/qsystemtrayicon_p.h12
-rw-r--r--src/widgets/util/qsystemtrayicon_qpa.cpp8
-rw-r--r--src/widgets/util/qsystemtrayicon_x11.cpp43
-rw-r--r--src/widgets/util/qundoview.cpp10
-rw-r--r--src/widgets/widgets/qabstractbutton.h20
-rw-r--r--src/widgets/widgets/qabstractscrollarea.cpp17
-rw-r--r--src/widgets/widgets/qabstractscrollarea.h35
-rw-r--r--src/widgets/widgets/qabstractscrollarea_p.h2
-rw-r--r--src/widgets/widgets/qabstractslider.cpp2
-rw-r--r--src/widgets/widgets/qabstractslider.h10
-rw-r--r--src/widgets/widgets/qcalendarwidget.cpp74
-rw-r--r--src/widgets/widgets/qcalendarwidget.h14
-rw-r--r--src/widgets/widgets/qcheckbox.h16
-rw-r--r--src/widgets/widgets/qcombobox.cpp20
-rw-r--r--src/widgets/widgets/qcombobox.h36
-rw-r--r--src/widgets/widgets/qcommandlinkbutton.h10
-rw-r--r--src/widgets/widgets/qdial.cpp2
-rw-r--r--src/widgets/widgets/qdial.h18
-rw-r--r--src/widgets/widgets/qdialogbuttonbox.h4
-rw-r--r--src/widgets/widgets/qdockwidget.cpp10
-rw-r--r--src/widgets/widgets/qdockwidget.h8
-rw-r--r--src/widgets/widgets/qdockwidget_p.h22
-rw-r--r--src/widgets/widgets/qeffects.cpp10
-rw-r--r--src/widgets/widgets/qfocusframe.h6
-rw-r--r--src/widgets/widgets/qfontcombobox.cpp4
-rw-r--r--src/widgets/widgets/qfontcombobox.h4
-rw-r--r--src/widgets/widgets/qframe.cpp76
-rw-r--r--src/widgets/widgets/qframe.h10
-rw-r--r--src/widgets/widgets/qgroupbox.h20
-rw-r--r--src/widgets/widgets/qlabel.h28
-rw-r--r--src/widgets/widgets/qlcdnumber.h6
-rw-r--r--src/widgets/widgets/qlineedit.cpp8
-rw-r--r--src/widgets/widgets/qlineedit.h44
-rw-r--r--src/widgets/widgets/qlineedit_p.h2
-rw-r--r--src/widgets/widgets/qmainwindow.h4
-rw-r--r--src/widgets/widgets/qmainwindowlayout.cpp6
-rw-r--r--src/widgets/widgets/qmainwindowlayout_p.h18
-rw-r--r--src/widgets/widgets/qmdiarea.cpp4
-rw-r--r--src/widgets/widgets/qmdiarea.h24
-rw-r--r--src/widgets/widgets/qmdiarea_p.h10
-rw-r--r--src/widgets/widgets/qmdisubwindow.cpp26
-rw-r--r--src/widgets/widgets/qmdisubwindow.h44
-rw-r--r--src/widgets/widgets/qmdisubwindow_p.h2
-rw-r--r--src/widgets/widgets/qmenu.cpp311
-rw-r--r--src/widgets/widgets/qmenu.h35
-rw-r--r--src/widgets/widgets/qmenu_p.h251
-rw-r--r--src/widgets/widgets/qmenubar.cpp13
-rw-r--r--src/widgets/widgets/qmenubar.h4
-rw-r--r--src/widgets/widgets/qplaintextedit.h62
-rw-r--r--src/widgets/widgets/qplaintextedit_p.h14
-rw-r--r--src/widgets/widgets/qprogressbar.cpp4
-rw-r--r--src/widgets/widgets/qprogressbar.h8
-rw-r--r--src/widgets/widgets/qpushbutton.h14
-rw-r--r--src/widgets/widgets/qradiobutton.h12
-rw-r--r--src/widgets/widgets/qrubberband.h12
-rw-r--r--src/widgets/widgets/qscrollarea.h12
-rw-r--r--src/widgets/widgets/qscrollbar.h20
-rw-r--r--src/widgets/widgets/qsizegrip.h22
-rw-r--r--src/widgets/widgets/qslider.h14
-rw-r--r--src/widgets/widgets/qspinbox.cpp12
-rw-r--r--src/widgets/widgets/qsplashscreen.h4
-rw-r--r--src/widgets/widgets/qsplitter.h26
-rw-r--r--src/widgets/widgets/qstackedwidget.h2
-rw-r--r--src/widgets/widgets/qstatusbar.h8
-rw-r--r--src/widgets/widgets/qtabbar.h28
-rw-r--r--src/widgets/widgets/qtabbar_p.h12
-rw-r--r--src/widgets/widgets/qtabwidget.h20
-rw-r--r--src/widgets/widgets/qtextbrowser.cpp2
-rw-r--r--src/widgets/widgets/qtextbrowser.h18
-rw-r--r--src/widgets/widgets/qtextedit.cpp6
-rw-r--r--src/widgets/widgets/qtextedit.h48
-rw-r--r--src/widgets/widgets/qtoolbar.cpp9
-rw-r--r--src/widgets/widgets/qtoolbar.h14
-rw-r--r--src/widgets/widgets/qtoolbarextension_p.h4
-rw-r--r--src/widgets/widgets/qtoolbarlayout_p.h24
-rw-r--r--src/widgets/widgets/qtoolbarseparator_p.h4
-rw-r--r--src/widgets/widgets/qtoolbox.cpp6
-rw-r--r--src/widgets/widgets/qtoolbox.h6
-rw-r--r--src/widgets/widgets/qtoolbutton.h30
-rw-r--r--src/widgets/widgets/qwidgetlinecontrol_p.h2
-rw-r--r--src/widgets/widgets/qwidgetresizehandler_p.h2
-rw-r--r--src/widgets/widgets/qwidgettextcontrol.cpp6
-rw-r--r--src/widgets/widgets/qwidgettextcontrol_p.h8
-rw-r--r--src/xml/dom/qdom.cpp125
-rw-r--r--src/xml/sax/qxml.cpp4
-rw-r--r--src/xml/sax/qxml.h114
1386 files changed, 68724 insertions, 55977 deletions
diff --git a/src/3rdparty/atspi2/atspi/atspi-constants.h b/src/3rdparty/atspi2/atspi/atspi-constants.h
index 7a55169f1f..3675bcca1f 100644
--- a/src/3rdparty/atspi2/atspi/atspi-constants.h
+++ b/src/3rdparty/atspi2/atspi/atspi-constants.h
@@ -190,7 +190,7 @@ typedef enum {
* enumeration.
*
* Enumeration used by #AtspiMatchRule to specify
- * how to interpret #AtspiAccesible objects.
+ * how to interpret #AtspiAccessible objects.
*
**/
typedef enum {
@@ -331,6 +331,8 @@ typedef enum {
* #atspi_text_get_text_at_offset, #atspi_text_get_text_after_offset, and
* #atspi_text_get_text_before_offset.
*
+ * This enumerationis deprecated since 2.9.90 and should not be used. Use
+ * AtspiTextGranularity with #atspi_text_get_string_at_offset instead.
**/
typedef enum {
ATSPI_TEXT_BOUNDARY_CHAR,
@@ -343,6 +345,34 @@ typedef enum {
} AtspiTextBoundaryType;
/**
+ *AtspiTextGranularity:
+ *@ATSPI_TEXT_GRANULARITY_CHAR: Granularity is defined by the boundaries between characters
+ * (including non-printing characters)
+ *@ATSPI_TEXT_GRANULARITY_WORD: Granularity is defined by the boundaries of a word,
+ * starting at the beginning of the current word and finishing at the beginning of
+ * the following one, if present.
+ *@ATSPI_TEXT_GRANULARITY_SENTENCE: Granularity is defined by the boundaries of a sentence,
+ * starting at the beginning of the current sentence and finishing at the beginning of
+ * the following one, if present.
+ *@ATSPI_TEXT_GRANULARITY_LINE: Granularity is defined by the boundaries of a line,
+ * starting at the beginning of the current line and finishing at the beginning of
+ * the following one, if present.
+ *@ATSPI_TEXT_GRANULARITY_PARAGRAPH: Granularity is defined by the boundaries of a paragraph,
+ * starting at the beginning of the current paragraph and finishing at the beginning of
+ * the following one, if present.
+ *
+ * Text granularity types used for specifying the granularity of the region of
+ * text we are interested in.
+ **/
+typedef enum {
+ ATSPI_TEXT_GRANULARITY_CHAR,
+ ATSPI_TEXT_GRANULARITY_WORD,
+ ATSPI_TEXT_GRANULARITY_SENTENCE,
+ ATSPI_TEXT_GRANULARITY_LINE,
+ ATSPI_TEXT_GRANULARITY_PARAGRAPH
+} AtspiTextGranularity;
+
+/**
* ATSPI_TEXT_BOUNDARY_TYPE_COUNT:
*
* One higher than the highest valid value of #AtspiTextBoundaryType.
@@ -523,6 +553,14 @@ typedef enum {
* @ATSPI_STATE_VISITED: This state indicates that the object (typically a
* hyperlink) has already been activated or invoked, with the result that
* some backing data has been downloaded or rendered.
+ *@ATSPI_STATE_CHECKABLE: Indicates this object has the potential to
+ * be checked, such as a checkbox or toggle-able table cell. @Since:
+ * 2.12
+ *@ATSPI_STATE_HAS_POPUP: Indicates that the object has a popup
+ * context menu or sub-level menu which may or may not be
+ * showing. This means that activation renders conditional content.
+ * Note that ordinary tooltips are not considered popups in this
+ * context. @Since: 2.12
* @ATSPI_STATE_LAST_DEFINED: This value of the enumeration should not be used
* as a parameter, it indicates the number of items in the #AtspiStateType
* enumeration.
@@ -574,6 +612,8 @@ typedef enum {
ATSPI_STATE_SELECTABLE_TEXT,
ATSPI_STATE_IS_DEFAULT,
ATSPI_STATE_VISITED,
+ ATSPI_STATE_CHECKABLE,
+ ATSPI_STATE_HAS_POPUP,
ATSPI_STATE_LAST_DEFINED,
} AtspiStateType;
@@ -639,19 +679,20 @@ typedef enum {
* @ATSPI_KEY_PRESS: Emulates the pressing of a hardware keyboard key.
* @ATSPI_KEY_RELEASE: Emulates the release of a hardware keyboard key.
* @ATSPI_KEY_PRESSRELEASE: Emulates the pressing and immediate releasing
- * ofa hardware keyboard key.
+ * of a hardware keyboard key.
* @ATSPI_KEY_SYM: A symbolic key event is generated, without specifying a
* hardware key. Note: if the keysym is not present in the current keyboard
* map, the #AtspiDeviceEventController instance has a limited ability to
* generate such keysyms on-the-fly. Reliability of GenerateKeyboardEvent
* calls using out-of-keymap keysyms will vary from system to system, and on
- * the number of different out-of-keymap being generated in quick succession.
+ * the number of different out-of-keymap keysyms being generated in quick
+ * succession.
* In practice this is rarely significant, since the keysyms of interest to
* AT clients and keyboard emulators are usually part of the current keymap,
- * i.e. present on the system keyboard for the current locale (even if a
- * physical hardware keyboard is not connected.
+ * i.e., present on the system keyboard for the current locale (even if a
+ * physical hardware keyboard is not connected).
* @ATSPI_KEY_STRING: A string is converted to its equivalent keyboard events
- * and emitted. If the string consists of complex character or composed
+ * and emitted. If the string consists of complex characters or composed
* characters which are not in the current keymap, string emission is
* subject to the out-of-keymap limitations described for
* @ATSPI_KEY_SYM. In practice this limitation primarily effects
@@ -1000,7 +1041,7 @@ typedef enum {
* contains a view of document content. #AtspiDocument frames may occur within
* another #AtspiDocument instance, in which case the second document may be
* said to be embedded in the containing instance. HTML frames are often
- * @ATSPI_ROLE_DOCUMENT_FRAME: Either this object, or a singleton descendant,
+ * ATSPI_ROLE_DOCUMENT_FRAME: Either this object, or a singleton descendant,
* should implement the #AtspiDocument interface.
* @ATSPI_ROLE_HEADING: The object serves as a heading for content which
* follows it in a document. The 'heading level' of the heading, if
@@ -1064,6 +1105,46 @@ typedef enum {
* particular application.
* @ATSPI_ROLE_INFO_BAR: An object designed to present a message to the user
* within an existing window.
+ *@ATSPI_ROLE_LEVEL_BAR: A bar that serves as a level indicator to, for
+ * instance, show the strength of a password or the state of a battery.
+ * Since: 2.8
+ *@ATSPI_ROLE_TITLE_BAR: A bar that serves as the title of a window or a
+ * dialog. @Since: 2.12
+ *@ATSPI_ROLE_BLOCK_QUOTE: An object which contains a text section
+ * that is quoted from another source. @Since: 2.12
+ *@ATSPI_ROLE_AUDIO: An object which represents an audio
+ * element. @Since: 2.12
+ *@ATSPI_ROLE_VIDEO: An object which represents a video
+ * element. @Since: 2.12
+ *@ATSPI_ROLE_DEFINITION: A definition of a term or concept. @Since: 2.12
+ *@ATSPI_ROLE_ARTICLE: A section of a page that consists of a
+ * composition that forms an independent part of a document, page, or
+ * site. Examples: A blog entry, a news story, a forum post. @Since:
+ * 2.12
+ *@ATSPI_ROLE_LANDMARK: A region of a web page intended as a
+ * navigational landmark. This is designed to allow Assistive
+ * Technologies to provide quick navigation among key regions within a
+ * document. @Since: 2.12
+ *@ATSPI_ROLE_LOG: A text widget or container holding log content, such
+ * as chat history and error logs. In this role there is a
+ * relationship between the arrival of new items in the log and the
+ * reading order. The log contains a meaningful sequence and new
+ * information is added only to the end of the log, not at arbitrary
+ * points. @Since: 2.12
+ *@ATSPI_ROLE_MARQUEE: A container where non-essential information
+ * changes frequently. Common usages of marquee include stock tickers
+ * and ad banners. The primary difference between a marquee and a log
+ * is that logs usually have a meaningful order or sequence of
+ * important content changes. @Since: 2.12
+ *@ATSPI_ROLE_MATH: A text widget or container that holds a mathematical
+ * expression. @Since: 2.12
+ *@ATSPI_ROLE_RATING: A widget whose purpose is to display a rating,
+ * such as the number of stars associated with a song in a media
+ * player. Objects of this role should also implement
+ * AtspiValue. @Since: 2.12
+ *@ATSPI_ROLE_TIMER: An object containing a numerical counter which
+ * indicates an amount of elapsed time from a start point, or the time
+ * remaining until an end point. @Since: 2.12
* @ATSPI_ROLE_LAST_DEFINED: Not a valid role, used for finding end of
* enumeration.
*
@@ -1175,6 +1256,19 @@ typedef enum {
ATSPI_ROLE_IMAGE_MAP,
ATSPI_ROLE_NOTIFICATION,
ATSPI_ROLE_INFO_BAR,
+ ATSPI_ROLE_LEVEL_BAR,
+ ATSPI_ROLE_TITLE_BAR,
+ ATSPI_ROLE_BLOCK_QUOTE,
+ ATSPI_ROLE_AUDIO,
+ ATSPI_ROLE_VIDEO,
+ ATSPI_ROLE_DEFINITION,
+ ATSPI_ROLE_ARTICLE,
+ ATSPI_ROLE_LANDMARK,
+ ATSPI_ROLE_LOG,
+ ATSPI_ROLE_MARQUEE,
+ ATSPI_ROLE_MATH,
+ ATSPI_ROLE_RATING,
+ ATSPI_ROLE_TIMER,
ATSPI_ROLE_LAST_DEFINED,
} AtspiRole;
@@ -1187,8 +1281,8 @@ typedef enum {
typedef enum
{
- ATSPI_CACHE_NONE = 0,
- ATSPI_CACHE_PARENT = 1 << 0,
+ ATSPI_CACHE_NONE = 0,
+ ATSPI_CACHE_PARENT = 1 << 0,
ATSPI_CACHE_CHILDREN = 1 << 1,
ATSPI_CACHE_NAME = 1 << 2,
ATSPI_CACHE_DESCRIPTION = 1 << 3,
@@ -1197,10 +1291,7 @@ typedef enum
ATSPI_CACHE_INTERFACES = 1 << 6,
ATSPI_CACHE_ATTRIBUTES = 1 << 7,
ATSPI_CACHE_ALL = 0x3fffffff,
- ATSPI_CACHE_DEFAULT = ATSPI_CACHE_PARENT | ATSPI_CACHE_CHILDREN |
- ATSPI_CACHE_NAME | ATSPI_CACHE_DESCRIPTION |
- ATSPI_CACHE_STATES | ATSPI_CACHE_ROLE |
- ATSPI_CACHE_INTERFACES,
+ ATSPI_CACHE_DEFAULT = ATSPI_CACHE_PARENT | ATSPI_CACHE_CHILDREN | ATSPI_CACHE_NAME | ATSPI_CACHE_DESCRIPTION | ATSPI_CACHE_STATES | ATSPI_CACHE_ROLE | ATSPI_CACHE_INTERFACES,
ATSPI_CACHE_UNDEFINED = 0x40000000,
} AtspiCache;
@@ -1231,6 +1322,7 @@ typedef enum
#define ATSPI_DBUS_INTERFACE_IMAGE "org.a11y.atspi.Image"
#define ATSPI_DBUS_INTERFACE_SELECTION "org.a11y.atspi.Selection"
#define ATSPI_DBUS_INTERFACE_TABLE "org.a11y.atspi.Table"
+#define ATSPI_DBUS_INTERFACE_TABLE_CELL "org.a11y.atspi.TableCell"
#define ATSPI_DBUS_INTERFACE_TEXT "org.a11y.atspi.Text"
#define ATSPI_DBUS_INTERFACE_VALUE "org.a11y.atspi.Value"
#define ATSPI_DBUS_INTERFACE_SOCKET "org.a11y.atspi.Socket"
diff --git a/src/3rdparty/des/des.cpp b/src/3rdparty/des/des.cpp
deleted file mode 100644
index c1a260bbac..0000000000
--- a/src/3rdparty/des/des.cpp
+++ /dev/null
@@ -1,602 +0,0 @@
-/*
- * Implementation of DES encryption for NTLM
- *
- * Copyright 1997-2005 Simon Tatham.
- *
- * This software is released under the MIT license.
- */
-
-/*
- * Description of DES
- * ------------------
- *
- * Unlike the description in FIPS 46, I'm going to use _sensible_ indices:
- * bits in an n-bit word are numbered from 0 at the LSB to n-1 at the MSB.
- * And S-boxes are indexed by six consecutive bits, not by the outer two
- * followed by the middle four.
- *
- * The DES encryption routine requires a 64-bit input, and a key schedule K
- * containing 16 48-bit elements.
- *
- * First the input is permuted by the initial permutation IP.
- * Then the input is split into 32-bit words L and R. (L is the MSW.)
- * Next, 16 rounds. In each round:
- * (L, R) <- (R, L xor f(R, K[i]))
- * Then the pre-output words L and R are swapped.
- * Then L and R are glued back together into a 64-bit word. (L is the MSW,
- * again, but since we just swapped them, the MSW is the R that came out
- * of the last round.)
- * The 64-bit output block is permuted by the inverse of IP and returned.
- *
- * Decryption is identical except that the elements of K are used in the
- * opposite order. (This wouldn't work if that word swap didn't happen.)
- *
- * The function f, used in each round, accepts a 32-bit word R and a
- * 48-bit key block K. It produces a 32-bit output.
- *
- * First R is expanded to 48 bits using the bit-selection function E.
- * The resulting 48-bit block is XORed with the key block K to produce
- * a 48-bit block X.
- * This block X is split into eight groups of 6 bits. Each group of 6
- * bits is then looked up in one of the eight S-boxes to convert
- * it to 4 bits. These eight groups of 4 bits are glued back
- * together to produce a 32-bit preoutput block.
- * The preoutput block is permuted using the permutation P and returned.
- *
- * Key setup maps a 64-bit key word into a 16x48-bit key schedule. Although
- * the approved input format for the key is a 64-bit word, eight of the
- * bits are discarded, so the actual quantity of key used is 56 bits.
- *
- * First the input key is converted to two 28-bit words C and D using
- * the bit-selection function PC1.
- * Then 16 rounds of key setup occur. In each round, C and D are each
- * rotated left by either 1 or 2 bits (depending on which round), and
- * then converted into a key schedule element using the bit-selection
- * function PC2.
- *
- * That's the actual algorithm. Now for the tedious details: all those
- * painful permutations and lookup tables.
- *
- * IP is a 64-to-64 bit permutation. Its output contains the following
- * bits of its input (listed in order MSB to LSB of output).
- *
- * 6 14 22 30 38 46 54 62 4 12 20 28 36 44 52 60
- * 2 10 18 26 34 42 50 58 0 8 16 24 32 40 48 56
- * 7 15 23 31 39 47 55 63 5 13 21 29 37 45 53 61
- * 3 11 19 27 35 43 51 59 1 9 17 25 33 41 49 57
- *
- * E is a 32-to-48 bit selection function. Its output contains the following
- * bits of its input (listed in order MSB to LSB of output).
- *
- * 0 31 30 29 28 27 28 27 26 25 24 23 24 23 22 21 20 19 20 19 18 17 16 15
- * 16 15 14 13 12 11 12 11 10 9 8 7 8 7 6 5 4 3 4 3 2 1 0 31
- *
- * The S-boxes are arbitrary table-lookups each mapping a 6-bit input to a
- * 4-bit output. In other words, each S-box is an array[64] of 4-bit numbers.
- * The S-boxes are listed below. The first S-box listed is applied to the
- * most significant six bits of the block X; the last one is applied to the
- * least significant.
- *
- * 14 0 4 15 13 7 1 4 2 14 15 2 11 13 8 1
- * 3 10 10 6 6 12 12 11 5 9 9 5 0 3 7 8
- * 4 15 1 12 14 8 8 2 13 4 6 9 2 1 11 7
- * 15 5 12 11 9 3 7 14 3 10 10 0 5 6 0 13
- *
- * 15 3 1 13 8 4 14 7 6 15 11 2 3 8 4 14
- * 9 12 7 0 2 1 13 10 12 6 0 9 5 11 10 5
- * 0 13 14 8 7 10 11 1 10 3 4 15 13 4 1 2
- * 5 11 8 6 12 7 6 12 9 0 3 5 2 14 15 9
- *
- * 10 13 0 7 9 0 14 9 6 3 3 4 15 6 5 10
- * 1 2 13 8 12 5 7 14 11 12 4 11 2 15 8 1
- * 13 1 6 10 4 13 9 0 8 6 15 9 3 8 0 7
- * 11 4 1 15 2 14 12 3 5 11 10 5 14 2 7 12
- *
- * 7 13 13 8 14 11 3 5 0 6 6 15 9 0 10 3
- * 1 4 2 7 8 2 5 12 11 1 12 10 4 14 15 9
- * 10 3 6 15 9 0 0 6 12 10 11 1 7 13 13 8
- * 15 9 1 4 3 5 14 11 5 12 2 7 8 2 4 14
- *
- * 2 14 12 11 4 2 1 12 7 4 10 7 11 13 6 1
- * 8 5 5 0 3 15 15 10 13 3 0 9 14 8 9 6
- * 4 11 2 8 1 12 11 7 10 1 13 14 7 2 8 13
- * 15 6 9 15 12 0 5 9 6 10 3 4 0 5 14 3
- *
- * 12 10 1 15 10 4 15 2 9 7 2 12 6 9 8 5
- * 0 6 13 1 3 13 4 14 14 0 7 11 5 3 11 8
- * 9 4 14 3 15 2 5 12 2 9 8 5 12 15 3 10
- * 7 11 0 14 4 1 10 7 1 6 13 0 11 8 6 13
- *
- * 4 13 11 0 2 11 14 7 15 4 0 9 8 1 13 10
- * 3 14 12 3 9 5 7 12 5 2 10 15 6 8 1 6
- * 1 6 4 11 11 13 13 8 12 1 3 4 7 10 14 7
- * 10 9 15 5 6 0 8 15 0 14 5 2 9 3 2 12
- *
- * 13 1 2 15 8 13 4 8 6 10 15 3 11 7 1 4
- * 10 12 9 5 3 6 14 11 5 0 0 14 12 9 7 2
- * 7 2 11 1 4 14 1 7 9 4 12 10 14 8 2 13
- * 0 15 6 12 10 9 13 0 15 3 3 5 5 6 8 11
- *
- * P is a 32-to-32 bit permutation. Its output contains the following
- * bits of its input (listed in order MSB to LSB of output).
- *
- * 16 25 12 11 3 20 4 15 31 17 9 6 27 14 1 22
- * 30 24 8 18 0 5 29 23 13 19 2 26 10 21 28 7
- *
- * PC1 is a 64-to-56 bit selection function. Its output is in two words,
- * C and D. The word C contains the following bits of its input (listed
- * in order MSB to LSB of output).
- *
- * 7 15 23 31 39 47 55 63 6 14 22 30 38 46
- * 54 62 5 13 21 29 37 45 53 61 4 12 20 28
- *
- * And the word D contains these bits.
- *
- * 1 9 17 25 33 41 49 57 2 10 18 26 34 42
- * 50 58 3 11 19 27 35 43 51 59 36 44 52 60
- *
- * PC2 is a 56-to-48 bit selection function. Its input is in two words,
- * C and D. These are treated as one 56-bit word (with C more significant,
- * so that bits 55 to 28 of the word are bits 27 to 0 of C, and bits 27 to
- * 0 of the word are bits 27 to 0 of D). The output contains the following
- * bits of this 56-bit input word (listed in order MSB to LSB of output).
- *
- * 42 39 45 32 55 51 53 28 41 50 35 46 33 37 44 52 30 48 40 49 29 36 43 54
- * 15 4 25 19 9 1 26 16 5 11 23 8 12 7 17 0 22 3 10 14 6 20 27 24
- */
-
-/*
- * Implementation details
- * ----------------------
- *
- * If you look at the code in this module, you'll find it looks
- * nothing _like_ the above algorithm. Here I explain the
- * differences...
- *
- * Key setup has not been heavily optimised here. We are not
- * concerned with key agility: we aren't codebreakers. We don't
- * mind a little delay (and it really is a little one; it may be a
- * factor of five or so slower than it could be but it's still not
- * an appreciable length of time) while setting up. The only tweaks
- * in the key setup are ones which change the format of the key
- * schedule to speed up the actual encryption. I'll describe those
- * below.
- *
- * The first and most obvious optimisation is the S-boxes. Since
- * each S-box always targets the same four bits in the final 32-bit
- * word, so the output from (for example) S-box 0 must always be
- * shifted left 28 bits, we can store the already-shifted outputs
- * in the lookup tables. This reduces lookup-and-shift to lookup,
- * so the S-box step is now just a question of ORing together eight
- * table lookups.
- *
- * The permutation P is just a bit order change; it's invariant
- * with respect to OR, in that P(x)|P(y) = P(x|y). Therefore, we
- * can apply P to every entry of the S-box tables and then we don't
- * have to do it in the code of f(). This yields a set of tables
- * which might be called SP-boxes.
- *
- * The bit-selection function E is our next target. Note that E is
- * immediately followed by the operation of splitting into 6-bit
- * chunks. Examining the 6-bit chunks coming out of E we notice
- * they're all contiguous within the word (speaking cyclically -
- * the end two wrap round); so we can extract those bit strings
- * individually rather than explicitly running E. This would yield
- * code such as
- *
- * y |= SPboxes[0][ (rotl(R, 5) ^ top6bitsofK) & 0x3F ];
- * t |= SPboxes[1][ (rotl(R,11) ^ next6bitsofK) & 0x3F ];
- *
- * and so on; and the key schedule preparation would have to
- * provide each 6-bit chunk separately.
- *
- * Really we'd like to XOR in the key schedule element before
- * looking up bit strings in R. This we can't do, naively, because
- * the 6-bit strings we want overlap. But look at the strings:
- *
- * 3322222222221111111111
- * bit 10987654321098765432109876543210
- *
- * box0 XXXXX X
- * box1 XXXXXX
- * box2 XXXXXX
- * box3 XXXXXX
- * box4 XXXXXX
- * box5 XXXXXX
- * box6 XXXXXX
- * box7 X XXXXX
- *
- * The bit strings we need to XOR in for boxes 0, 2, 4 and 6 don't
- * overlap with each other. Neither do the ones for boxes 1, 3, 5
- * and 7. So we could provide the key schedule in the form of two
- * words that we can separately XOR into R, and then every S-box
- * index is available as a (cyclically) contiguous 6-bit substring
- * of one or the other of the results.
- *
- * The comments in Eric Young's libdes implementation point out
- * that two of these bit strings require a rotation (rather than a
- * simple shift) to extract. It's unavoidable that at least _one_
- * must do; but we can actually run the whole inner algorithm (all
- * 16 rounds) rotated one bit to the left, so that what the `real'
- * DES description sees as L=0x80000001 we see as L=0x00000003.
- * This requires rotating all our SP-box entries one bit to the
- * left, and rotating each word of the key schedule elements one to
- * the left, and rotating L and R one bit left just after IP and
- * one bit right again just before FP. And in each round we convert
- * a rotate into a shift, so we've saved a few per cent.
- *
- * That's about it for the inner loop; the SP-box tables as listed
- * below are what I've described here (the original S value,
- * shifted to its final place in the input to P, run through P, and
- * then rotated one bit left). All that remains is to optimise the
- * initial permutation IP.
- *
- * IP is not an arbitrary permutation. It has the nice property
- * that if you take any bit number, write it in binary (6 bits),
- * permute those 6 bits and invert some of them, you get the final
- * position of that bit. Specifically, the bit whose initial
- * position is given (in binary) as fedcba ends up in position
- * AcbFED (where a capital letter denotes the inverse of a bit).
- *
- * We have the 64-bit data in two 32-bit words L and R, where bits
- * in L are those with f=1 and bits in R are those with f=0. We
- * note that we can do a simple transformation: suppose we exchange
- * the bits with f=1,c=0 and the bits with f=0,c=1. This will cause
- * the bit fedcba to be in position cedfba - we've `swapped' bits c
- * and f in the position of each bit!
- *
- * Better still, this transformation is easy. In the example above,
- * bits in L with c=0 are bits 0x0F0F0F0F, and those in R with c=1
- * are 0xF0F0F0F0. So we can do
- *
- * difference = ((R >> 4) ^ L) & 0x0F0F0F0F
- * R ^= (difference << 4)
- * L ^= difference
- *
- * to perform the swap. Let's denote this by bitswap(4,0x0F0F0F0F).
- * Also, we can invert the bit at the top just by exchanging L and
- * R. So in a few swaps and a few of these bit operations we can
- * do:
- *
- * Initially the position of bit fedcba is fedcba
- * Swap L with R to make it Fedcba
- * Perform bitswap( 4,0x0F0F0F0F) to make it cedFba
- * Perform bitswap(16,0x0000FFFF) to make it ecdFba
- * Swap L with R to make it EcdFba
- * Perform bitswap( 2,0x33333333) to make it bcdFEa
- * Perform bitswap( 8,0x00FF00FF) to make it dcbFEa
- * Swap L with R to make it DcbFEa
- * Perform bitswap( 1,0x55555555) to make it acbFED
- * Swap L with R to make it AcbFED
- *
- * (In the actual code the four swaps are implicit: R and L are
- * simply used the other way round in the first, second and last
- * bitswap operations.)
- *
- * The final permutation is just the inverse of IP, so it can be
- * performed by a similar set of operations.
- */
-
-struct des_context {
- quint32 k0246[16], k1357[16];
-};
-
-#define rotl(x, c) ( (x << c) | (x >> (32-c)) )
-#define rotl28(x, c) ( ( (x << c) | (x >> (28-c)) ) & 0x0FFFFFFF)
-
-static quint32 bitsel(quint32 * input, const int *bitnums, int size)
-{
- quint32 ret = 0;
- while (size--) {
- int bitpos = *bitnums++;
- ret <<= 1;
- if (bitpos >= 0)
- ret |= 1 & (input[bitpos / 32] >> (bitpos % 32));
- }
- return ret;
-}
-
-static inline void des_key_setup(quint32 key_msw, quint32 key_lsw,
- struct des_context *sched)
-{
- /* Tables are modified to work with 56-bit key */
- static const int PC1_Cbits[] = {
- 6, 13, 20, 27, 34, 41, 48, 55, 5, 12, 19, 26, 33, 40,
- 47, 54, 4, 11, 18, 25, 32, 39, 46, 53, 3, 10, 17, 24
- };
- static const int PC1_Dbits[] = {
- 0, 7, 14, 21, 28, 35, 42, 49, 1, 8, 15, 22, 29, 36,
- 43, 50, 2, 9, 16, 23, 30, 37, 44, 51, 31, 38, 45, 52
- };
- /*
- * The bit numbers in the two lists below don't correspond to
- * the ones in the above description of PC2, because in the
- * above description C and D are concatenated so `bit 28' means
- * bit 0 of C. In this implementation we're using the standard
- * `bitsel' function above and C is in the second word, so bit
- * 0 of C is addressed by writing `32' here.
- */
- static const int PC2_0246[] = {
- 49, 36, 59, 55, -1, -1, 37, 41, 48, 56, 34, 52, -1, -1, 15, 4,
- 25, 19, 9, 1, -1, -1, 12, 7, 17, 0, 22, 3, -1, -1, 46, 43
- };
- static const int PC2_1357[] = {
- -1, -1, 57, 32, 45, 54, 39, 50, -1, -1, 44, 53, 33, 40, 47, 58,
- -1, -1, 26, 16, 5, 11, 23, 8, -1, -1, 10, 14, 6, 20, 27, 24
- };
- static const int leftshifts[] = {
- 1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1
- };
-
- quint32 C, D;
- quint32 buf[2];
- int i;
-
- buf[0] = key_lsw;
- buf[1] = key_msw;
-
- C = bitsel(buf, PC1_Cbits, 28);
- D = bitsel(buf, PC1_Dbits, 28);
-
- for (i = 0; i < 16; i++) {
- C = rotl28(C, leftshifts[i]);
- D = rotl28(D, leftshifts[i]);
- buf[0] = D;
- buf[1] = C;
- sched->k0246[i] = bitsel(buf, PC2_0246, 32);
- sched->k1357[i] = bitsel(buf, PC2_1357, 32);
- }
-}
-
-static const quint32 SPboxes[8][64] = {
- {0x01010400, 0x00000000, 0x00010000, 0x01010404,
- 0x01010004, 0x00010404, 0x00000004, 0x00010000,
- 0x00000400, 0x01010400, 0x01010404, 0x00000400,
- 0x01000404, 0x01010004, 0x01000000, 0x00000004,
- 0x00000404, 0x01000400, 0x01000400, 0x00010400,
- 0x00010400, 0x01010000, 0x01010000, 0x01000404,
- 0x00010004, 0x01000004, 0x01000004, 0x00010004,
- 0x00000000, 0x00000404, 0x00010404, 0x01000000,
- 0x00010000, 0x01010404, 0x00000004, 0x01010000,
- 0x01010400, 0x01000000, 0x01000000, 0x00000400,
- 0x01010004, 0x00010000, 0x00010400, 0x01000004,
- 0x00000400, 0x00000004, 0x01000404, 0x00010404,
- 0x01010404, 0x00010004, 0x01010000, 0x01000404,
- 0x01000004, 0x00000404, 0x00010404, 0x01010400,
- 0x00000404, 0x01000400, 0x01000400, 0x00000000,
- 0x00010004, 0x00010400, 0x00000000, 0x01010004},
-
- {0x80108020, 0x80008000, 0x00008000, 0x00108020,
- 0x00100000, 0x00000020, 0x80100020, 0x80008020,
- 0x80000020, 0x80108020, 0x80108000, 0x80000000,
- 0x80008000, 0x00100000, 0x00000020, 0x80100020,
- 0x00108000, 0x00100020, 0x80008020, 0x00000000,
- 0x80000000, 0x00008000, 0x00108020, 0x80100000,
- 0x00100020, 0x80000020, 0x00000000, 0x00108000,
- 0x00008020, 0x80108000, 0x80100000, 0x00008020,
- 0x00000000, 0x00108020, 0x80100020, 0x00100000,
- 0x80008020, 0x80100000, 0x80108000, 0x00008000,
- 0x80100000, 0x80008000, 0x00000020, 0x80108020,
- 0x00108020, 0x00000020, 0x00008000, 0x80000000,
- 0x00008020, 0x80108000, 0x00100000, 0x80000020,
- 0x00100020, 0x80008020, 0x80000020, 0x00100020,
- 0x00108000, 0x00000000, 0x80008000, 0x00008020,
- 0x80000000, 0x80100020, 0x80108020, 0x00108000},
-
- {0x00000208, 0x08020200, 0x00000000, 0x08020008,
- 0x08000200, 0x00000000, 0x00020208, 0x08000200,
- 0x00020008, 0x08000008, 0x08000008, 0x00020000,
- 0x08020208, 0x00020008, 0x08020000, 0x00000208,
- 0x08000000, 0x00000008, 0x08020200, 0x00000200,
- 0x00020200, 0x08020000, 0x08020008, 0x00020208,
- 0x08000208, 0x00020200, 0x00020000, 0x08000208,
- 0x00000008, 0x08020208, 0x00000200, 0x08000000,
- 0x08020200, 0x08000000, 0x00020008, 0x00000208,
- 0x00020000, 0x08020200, 0x08000200, 0x00000000,
- 0x00000200, 0x00020008, 0x08020208, 0x08000200,
- 0x08000008, 0x00000200, 0x00000000, 0x08020008,
- 0x08000208, 0x00020000, 0x08000000, 0x08020208,
- 0x00000008, 0x00020208, 0x00020200, 0x08000008,
- 0x08020000, 0x08000208, 0x00000208, 0x08020000,
- 0x00020208, 0x00000008, 0x08020008, 0x00020200},
-
- {0x00802001, 0x00002081, 0x00002081, 0x00000080,
- 0x00802080, 0x00800081, 0x00800001, 0x00002001,
- 0x00000000, 0x00802000, 0x00802000, 0x00802081,
- 0x00000081, 0x00000000, 0x00800080, 0x00800001,
- 0x00000001, 0x00002000, 0x00800000, 0x00802001,
- 0x00000080, 0x00800000, 0x00002001, 0x00002080,
- 0x00800081, 0x00000001, 0x00002080, 0x00800080,
- 0x00002000, 0x00802080, 0x00802081, 0x00000081,
- 0x00800080, 0x00800001, 0x00802000, 0x00802081,
- 0x00000081, 0x00000000, 0x00000000, 0x00802000,
- 0x00002080, 0x00800080, 0x00800081, 0x00000001,
- 0x00802001, 0x00002081, 0x00002081, 0x00000080,
- 0x00802081, 0x00000081, 0x00000001, 0x00002000,
- 0x00800001, 0x00002001, 0x00802080, 0x00800081,
- 0x00002001, 0x00002080, 0x00800000, 0x00802001,
- 0x00000080, 0x00800000, 0x00002000, 0x00802080},
-
- {0x00000100, 0x02080100, 0x02080000, 0x42000100,
- 0x00080000, 0x00000100, 0x40000000, 0x02080000,
- 0x40080100, 0x00080000, 0x02000100, 0x40080100,
- 0x42000100, 0x42080000, 0x00080100, 0x40000000,
- 0x02000000, 0x40080000, 0x40080000, 0x00000000,
- 0x40000100, 0x42080100, 0x42080100, 0x02000100,
- 0x42080000, 0x40000100, 0x00000000, 0x42000000,
- 0x02080100, 0x02000000, 0x42000000, 0x00080100,
- 0x00080000, 0x42000100, 0x00000100, 0x02000000,
- 0x40000000, 0x02080000, 0x42000100, 0x40080100,
- 0x02000100, 0x40000000, 0x42080000, 0x02080100,
- 0x40080100, 0x00000100, 0x02000000, 0x42080000,
- 0x42080100, 0x00080100, 0x42000000, 0x42080100,
- 0x02080000, 0x00000000, 0x40080000, 0x42000000,
- 0x00080100, 0x02000100, 0x40000100, 0x00080000,
- 0x00000000, 0x40080000, 0x02080100, 0x40000100},
-
- {0x20000010, 0x20400000, 0x00004000, 0x20404010,
- 0x20400000, 0x00000010, 0x20404010, 0x00400000,
- 0x20004000, 0x00404010, 0x00400000, 0x20000010,
- 0x00400010, 0x20004000, 0x20000000, 0x00004010,
- 0x00000000, 0x00400010, 0x20004010, 0x00004000,
- 0x00404000, 0x20004010, 0x00000010, 0x20400010,
- 0x20400010, 0x00000000, 0x00404010, 0x20404000,
- 0x00004010, 0x00404000, 0x20404000, 0x20000000,
- 0x20004000, 0x00000010, 0x20400010, 0x00404000,
- 0x20404010, 0x00400000, 0x00004010, 0x20000010,
- 0x00400000, 0x20004000, 0x20000000, 0x00004010,
- 0x20000010, 0x20404010, 0x00404000, 0x20400000,
- 0x00404010, 0x20404000, 0x00000000, 0x20400010,
- 0x00000010, 0x00004000, 0x20400000, 0x00404010,
- 0x00004000, 0x00400010, 0x20004010, 0x00000000,
- 0x20404000, 0x20000000, 0x00400010, 0x20004010},
-
- {0x00200000, 0x04200002, 0x04000802, 0x00000000,
- 0x00000800, 0x04000802, 0x00200802, 0x04200800,
- 0x04200802, 0x00200000, 0x00000000, 0x04000002,
- 0x00000002, 0x04000000, 0x04200002, 0x00000802,
- 0x04000800, 0x00200802, 0x00200002, 0x04000800,
- 0x04000002, 0x04200000, 0x04200800, 0x00200002,
- 0x04200000, 0x00000800, 0x00000802, 0x04200802,
- 0x00200800, 0x00000002, 0x04000000, 0x00200800,
- 0x04000000, 0x00200800, 0x00200000, 0x04000802,
- 0x04000802, 0x04200002, 0x04200002, 0x00000002,
- 0x00200002, 0x04000000, 0x04000800, 0x00200000,
- 0x04200800, 0x00000802, 0x00200802, 0x04200800,
- 0x00000802, 0x04000002, 0x04200802, 0x04200000,
- 0x00200800, 0x00000000, 0x00000002, 0x04200802,
- 0x00000000, 0x00200802, 0x04200000, 0x00000800,
- 0x04000002, 0x04000800, 0x00000800, 0x00200002},
-
- {0x10001040, 0x00001000, 0x00040000, 0x10041040,
- 0x10000000, 0x10001040, 0x00000040, 0x10000000,
- 0x00040040, 0x10040000, 0x10041040, 0x00041000,
- 0x10041000, 0x00041040, 0x00001000, 0x00000040,
- 0x10040000, 0x10000040, 0x10001000, 0x00001040,
- 0x00041000, 0x00040040, 0x10040040, 0x10041000,
- 0x00001040, 0x00000000, 0x00000000, 0x10040040,
- 0x10000040, 0x10001000, 0x00041040, 0x00040000,
- 0x00041040, 0x00040000, 0x10041000, 0x00001000,
- 0x00000040, 0x10040040, 0x00001000, 0x00041040,
- 0x10001000, 0x00000040, 0x10000040, 0x10040000,
- 0x10040040, 0x10000000, 0x00040000, 0x10001040,
- 0x00000000, 0x10041040, 0x00040040, 0x10000040,
- 0x10040000, 0x10001000, 0x10001040, 0x00000000,
- 0x10041040, 0x00041000, 0x00041000, 0x00001040,
- 0x00001040, 0x00040040, 0x10000000, 0x10041000}
-};
-
-#define f(R, K0246, K1357) (\
- s0246 = R ^ K0246, \
- s1357 = R ^ K1357, \
- s0246 = rotl(s0246, 28), \
- SPboxes[0] [(s0246 >> 24) & 0x3F] | \
- SPboxes[1] [(s1357 >> 24) & 0x3F] | \
- SPboxes[2] [(s0246 >> 16) & 0x3F] | \
- SPboxes[3] [(s1357 >> 16) & 0x3F] | \
- SPboxes[4] [(s0246 >> 8) & 0x3F] | \
- SPboxes[5] [(s1357 >> 8) & 0x3F] | \
- SPboxes[6] [(s0246 ) & 0x3F] | \
- SPboxes[7] [(s1357 ) & 0x3F])
-
-#define bitswap(L, R, n, mask) (\
- swap = mask & ( (R >> n) ^ L ), \
- R ^= swap << n, \
- L ^= swap)
-
-/* Initial permutation */
-#define IP(L, R) (\
- bitswap(R, L, 4, 0x0F0F0F0F), \
- bitswap(R, L, 16, 0x0000FFFF), \
- bitswap(L, R, 2, 0x33333333), \
- bitswap(L, R, 8, 0x00FF00FF), \
- bitswap(R, L, 1, 0x55555555))
-
-/* Final permutation */
-#define FP(L, R) (\
- bitswap(R, L, 1, 0x55555555), \
- bitswap(L, R, 8, 0x00FF00FF), \
- bitswap(L, R, 2, 0x33333333), \
- bitswap(R, L, 16, 0x0000FFFF), \
- bitswap(R, L, 4, 0x0F0F0F0F))
-
-static void
-des_encipher(quint32 *output, quint32 L, quint32 R,
- struct des_context *sched)
-{
- quint32 swap, s0246, s1357;
-
- IP(L, R);
-
- L = rotl(L, 1);
- R = rotl(R, 1);
-
- L ^= f(R, sched->k0246[0], sched->k1357[0]);
- R ^= f(L, sched->k0246[1], sched->k1357[1]);
- L ^= f(R, sched->k0246[2], sched->k1357[2]);
- R ^= f(L, sched->k0246[3], sched->k1357[3]);
- L ^= f(R, sched->k0246[4], sched->k1357[4]);
- R ^= f(L, sched->k0246[5], sched->k1357[5]);
- L ^= f(R, sched->k0246[6], sched->k1357[6]);
- R ^= f(L, sched->k0246[7], sched->k1357[7]);
- L ^= f(R, sched->k0246[8], sched->k1357[8]);
- R ^= f(L, sched->k0246[9], sched->k1357[9]);
- L ^= f(R, sched->k0246[10], sched->k1357[10]);
- R ^= f(L, sched->k0246[11], sched->k1357[11]);
- L ^= f(R, sched->k0246[12], sched->k1357[12]);
- R ^= f(L, sched->k0246[13], sched->k1357[13]);
- L ^= f(R, sched->k0246[14], sched->k1357[14]);
- R ^= f(L, sched->k0246[15], sched->k1357[15]);
-
- L = rotl(L, 31);
- R = rotl(R, 31);
-
- swap = L;
- L = R;
- R = swap;
-
- FP(L, R);
-
- output[0] = L;
- output[1] = R;
-}
-
-#define GET_32BIT_MSB_FIRST(cp) \
- (((unsigned long)(unsigned char)(cp)[3]) | \
- ((unsigned long)(unsigned char)(cp)[2] << 8) | \
- ((unsigned long)(unsigned char)(cp)[1] << 16) | \
- ((unsigned long)(unsigned char)(cp)[0] << 24))
-
-#define PUT_32BIT_MSB_FIRST(cp, value) do { \
- (cp)[3] = (value); \
- (cp)[2] = (value) >> 8; \
- (cp)[1] = (value) >> 16; \
- (cp)[0] = (value) >> 24; } while (0)
-
-static inline void
-des_cbc_encrypt(unsigned char *dest, const unsigned char *src,
- struct des_context *sched)
-{
- quint32 out[2], L, R;
-
- L = GET_32BIT_MSB_FIRST(src);
- R = GET_32BIT_MSB_FIRST(src + 4);
- des_encipher(out, L, R, sched);
- PUT_32BIT_MSB_FIRST(dest, out[0]);
- PUT_32BIT_MSB_FIRST(dest + 4, out[1]);
-}
-
-
-static unsigned char *
-deshash(unsigned char *dst, const unsigned char *key,
- const unsigned char *src)
-{
- struct des_context ctx;
-
- des_key_setup(GET_32BIT_MSB_FIRST(key) >> 8,
- GET_32BIT_MSB_FIRST(key + 3), &ctx);
-
- des_cbc_encrypt(dst, src, &ctx);
-
- return dst;
-}
diff --git a/src/3rdparty/forkfd/forkfd.c b/src/3rdparty/forkfd/forkfd.c
new file mode 100644
index 0000000000..067e41d486
--- /dev/null
+++ b/src/3rdparty/forkfd/forkfd.c
@@ -0,0 +1,495 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Intel Corporation
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE
+# define _POSIX_C_SOURCE 200809L
+# define _XOPEN_SOURCE 500
+#endif
+#include "forkfd.h"
+
+#include <sys/types.h>
+#include <sys/wait.h>
+#include <assert.h>
+#include <errno.h>
+#include <pthread.h>
+#include <signal.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+
+#ifdef __linux__
+# define HAVE_PIPE2 1
+# define HAVE_EVENTFD 1
+# include <sys/eventfd.h>
+#endif
+
+#if _POSIX_VERSION-0 >= 200809L || _XOPEN_VERSION-0 >= 500
+# define HAVE_WAITID 1
+#endif
+
+#ifndef FFD_ATOMIC_RELAXED
+# include "forkfd_gcc.h"
+#endif
+
+#define CHILDREN_IN_SMALL_ARRAY 16
+#define CHILDREN_IN_BIG_ARRAY 256
+#define sizeofarray(array) (sizeof(array)/sizeof(array[0]))
+#define EINTR_LOOP(ret, call) \
+ do { \
+ ret = call; \
+ } while (ret == -1 && errno == EINTR)
+
+typedef struct process_info
+{
+ ffd_atomic_int pid;
+ int deathPipe;
+} ProcessInfo;
+
+struct BigArray;
+typedef struct Header
+{
+ ffd_atomic_pointer(struct BigArray) nextArray;
+ ffd_atomic_int busyCount;
+} Header;
+
+typedef struct BigArray
+{
+ Header header;
+ ProcessInfo entries[CHILDREN_IN_BIG_ARRAY];
+} BigArray;
+
+typedef struct SmallArray
+{
+ Header header;
+ ProcessInfo entries[CHILDREN_IN_SMALL_ARRAY];
+} SmallArray;
+static SmallArray children;
+
+static struct sigaction old_sigaction;
+static pthread_once_t forkfd_initialization = PTHREAD_ONCE_INIT;
+static ffd_atomic_int forkfd_status = FFD_ATOMIC_INIT(0);
+
+static ProcessInfo *tryAllocateInSection(Header *header, ProcessInfo entries[], int maxCount)
+{
+ /* we use ACQUIRE here because the signal handler might have released the PID */
+ int busyCount = ffd_atomic_add_fetch(&header->busyCount, 1, FFD_ATOMIC_ACQUIRE);
+ if (busyCount <= maxCount) {
+ /* there's an available entry in this section, find it and take it */
+ int i;
+ for (i = 0; i < maxCount; ++i) {
+ /* if the PID is 0, it's free; mark it as used by swapping it with -1 */
+ int expected_pid = 0;
+ if (ffd_atomic_compare_exchange(&entries[i].pid, &expected_pid,
+ -1, FFD_ATOMIC_RELAXED, FFD_ATOMIC_RELAXED))
+ return &entries[i];
+ }
+ }
+
+ /* there isn't an available entry, undo our increment */
+ ffd_atomic_add_fetch(&header->busyCount, -1, FFD_ATOMIC_RELAXED);
+ return NULL;
+}
+
+static ProcessInfo *allocateInfo(Header **header)
+{
+ Header *currentHeader = &children.header;
+
+ /* try to find an available entry in the small array first */
+ ProcessInfo *info =
+ tryAllocateInSection(currentHeader, children.entries, sizeofarray(children.entries));
+
+ /* go on to the next arrays */
+ while (info == NULL) {
+ BigArray *array = ffd_atomic_load(&currentHeader->nextArray, FFD_ATOMIC_ACQUIRE);
+ if (array == NULL) {
+ /* allocate an array and try to use it */
+ BigArray *allocatedArray = (BigArray *)calloc(1, sizeof(BigArray));
+ if (allocatedArray == NULL)
+ return NULL;
+
+ if (ffd_atomic_compare_exchange(&currentHeader->nextArray, &array, allocatedArray,
+ FFD_ATOMIC_RELEASE, FFD_ATOMIC_ACQUIRE)) {
+ /* success */
+ array = allocatedArray;
+ } else {
+ /* failed, the atomic updated 'array' */
+ free(allocatedArray);
+ }
+ }
+
+ currentHeader = &array->header;
+ info = tryAllocateInSection(currentHeader, array->entries, sizeofarray(array->entries));
+ }
+
+ *header = currentHeader;
+ return info;
+}
+
+static int tryReaping(pid_t pid, siginfo_t *info)
+{
+ /* reap the child */
+#ifdef HAVE_WAITID
+ // we have waitid(2), which fills in siginfo_t for us
+ info->si_pid = 0;
+ return waitid(P_PID, pid, info, WEXITED | WNOHANG) == 0 && info->si_pid == pid;
+#else
+ int status;
+ if (waitpid(pid, &status, WNOHANG) <= 0)
+ return 0; // child did not change state
+
+ info->si_signo = SIGCHLD;
+ info->si_utime = 0;
+ info->si_stime = 0;
+ info->si_pid = pid;
+ if (WIFEXITED(status)) {
+ info->si_code = CLD_EXITED;
+ info->si_status = WEXITSTATUS(status);
+ } else if (WIFSIGNALED(status)) {
+ info->si_code = CLD_KILLED;
+# ifdef WCOREDUMP
+ if (WCOREDUMP(status))
+ info->si_code = CLD_DUMPED;
+# endif
+ info->si_status = WTERMSIG(status);
+ }
+
+ return 1;
+#endif
+}
+
+static void freeInfo(Header *header, ProcessInfo *entry)
+{
+ entry->deathPipe = -1;
+ entry->pid = 0;
+
+ ffd_atomic_add_fetch(&header->busyCount, -1, FFD_ATOMIC_RELEASE);
+ assert(header->busyCount >= 0);
+}
+
+static void notifyAndFreeInfo(Header *header, ProcessInfo *entry, siginfo_t *info)
+{
+ ssize_t ret;
+ EINTR_LOOP(ret, write(entry->deathPipe, info, sizeof(*info)));
+ EINTR_LOOP(ret, close(entry->deathPipe));
+
+ freeInfo(header, entry);
+}
+
+static void sigchld_handler(int signum)
+{
+ /*
+ * This is a signal handler, so we need to be careful about which functions
+ * we can call. See the full, official listing in the POSIX.1-2008
+ * specification at:
+ * http://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_04_03
+ *
+ */
+
+ if (ffd_atomic_load(&forkfd_status, FFD_ATOMIC_RELAXED) == 1) {
+ /* is this one of our children? */
+ BigArray *array;
+ siginfo_t info;
+ int i;
+
+ for (i = 0; i < (int)sizeofarray(children.entries); ++i) {
+ int pid = ffd_atomic_load(&children.entries[i].pid, FFD_ATOMIC_ACQUIRE);
+ if (pid > 0 && tryReaping(pid, &info)) {
+ /* this is our child, send notification and free up this entry */
+ notifyAndFreeInfo(&children.header, &children.entries[i], &info);
+ }
+ }
+
+ /* try the arrays */
+ array = ffd_atomic_load(&children.header.nextArray, FFD_ATOMIC_ACQUIRE);
+ while (array != NULL) {
+ for (i = 0; i < (int)sizeofarray(array->entries); ++i) {
+ int pid = ffd_atomic_load(&array->entries[i].pid, FFD_ATOMIC_ACQUIRE);
+ if (pid > 0 && tryReaping(pid, &info)) {
+ /* this is our child, send notification and free up this entry */
+ notifyAndFreeInfo(&array->header, &array->entries[i], &info);
+ }
+ }
+
+ array = ffd_atomic_load(&array->header.nextArray, FFD_ATOMIC_ACQUIRE);
+ }
+ }
+
+ if (old_sigaction.sa_handler != SIG_IGN && old_sigaction.sa_handler != SIG_DFL)
+ old_sigaction.sa_handler(signum);
+}
+
+static void forkfd_initialize()
+{
+ /* install our signal handler */
+ struct sigaction action;
+ memset(&action, 0, sizeof action);
+ sigemptyset(&action.sa_mask);
+ action.sa_flags = SA_NOCLDSTOP;
+ action.sa_handler = sigchld_handler;
+
+ /* ### RACE CONDITION
+ * The sigaction function does a memcpy from an internal buffer
+ * to old_sigaction, which we use in the SIGCHLD handler. If a
+ * SIGCHLD is delivered before or during that memcpy, the handler will
+ * see an inconsistent state.
+ *
+ * There is no solution. pthread_sigmask doesn't work here because the
+ * signal could be delivered to another thread.
+ */
+ sigaction(SIGCHLD, &action, &old_sigaction);
+
+#ifndef __GNUC__
+ atexit(cleanup);
+#endif
+
+ ffd_atomic_store(&forkfd_status, 1, FFD_ATOMIC_RELAXED);
+}
+
+#ifdef __GNUC__
+__attribute((destructor, unused)) static void cleanup();
+#endif
+
+static void cleanup()
+{
+ BigArray *array;
+ /* This function is not thread-safe!
+ * It must only be called when the process is shutting down.
+ * At shutdown, we expect no one to be calling forkfd(), so we don't
+ * need to be thread-safe with what is done there.
+ *
+ * But SIGCHLD might be delivered to any thread, including this one.
+ * There's no way to prevent that. The correct solution would be to
+ * cooperatively delete. We don't do that.
+ */
+ if (ffd_atomic_load(&forkfd_status, FFD_ATOMIC_RELAXED) == 0)
+ return;
+
+ /* notify the handler that we're no longer in operation */
+ ffd_atomic_store(&forkfd_status, 0, FFD_ATOMIC_RELAXED);
+
+ /* free any arrays we might have */
+ array = children.header.nextArray;
+ while (array != NULL) {
+ BigArray *next = array->header.nextArray;
+ free(array);
+ array = next;
+ }
+}
+
+static int create_pipe(int filedes[], int flags)
+{
+ int ret;
+#ifdef HAVE_PIPE2
+ /* use pipe2(2) whenever possible, since it can thread-safely create a
+ * cloexec pair of pipes. Without it, we have a race condition setting
+ * FD_CLOEXEC
+ */
+ ret = pipe2(filedes, O_CLOEXEC);
+ if (ret == -1)
+ return ret;
+
+ if ((flags & FFD_CLOEXEC) == 0)
+ fcntl(filedes[0], F_SETFD, 0);
+#else
+ ret = pipe(filedes);
+ if (ret == -1)
+ return ret;
+
+ fcntl(filedes[1], F_SETFD, FD_CLOEXEC);
+ if (flags & FFD_CLOEXEC)
+ fcntl(filedes[0], F_SETFD, FD_CLOEXEC);
+#endif
+ if (flags & FFD_NONBLOCK)
+ fcntl(filedes[0], F_SETFL, fcntl(filedes[0], F_GETFL) | O_NONBLOCK);
+ return ret;
+}
+
+/**
+ * @brief forkfd returns a file descriptor representing a child process
+ * @return a file descriptor, or -1 in case of failure
+ *
+ * forkfd() creates a file descriptor that can be used to be notified of when a
+ * child process exits. This file descriptor can be monitored using select(2),
+ * poll(2) or similar mechanisms.
+ *
+ * The @a flags parameter can contain the following values ORed to change the
+ * behaviour of forkfd():
+ *
+ * @li @c FFD_NONBLOCK Set the O_NONBLOCK file status flag on the new open file
+ * descriptor. Using this flag saves extra calls to fnctl(2) to achieve the same
+ * result.
+ *
+ * @li @c FFD_CLOEXEC Set the close-on-exec (FD_CLOEXEC) flag on the new file
+ * descriptor. You probably want to set this flag, since forkfd() does not work
+ * if the original parent process dies.
+ *
+ * The file descriptor returned by forkfd() supports the following operations:
+ *
+ * @li read(2) When the child process exits, then the buffer supplied to
+ * read(2) is used to return information about the status of the child in the
+ * form of one @c siginfo_t structure. The buffer must be at least
+ * sizeof(siginfo_t) bytes. The return value of read(2) is the total number of
+ * bytes read.
+ *
+ * @li poll(2), select(2) (and similar) The file descriptor is readable (the
+ * select(2) readfds argument; the poll(2) POLLIN flag) if the child has exited
+ * or signalled via SIGCHLD.
+ *
+ * @li close(2) When the file descriptor is no longer required it should be closed.
+ */
+int forkfd(int flags, pid_t *ppid)
+{
+ Header *header;
+ ProcessInfo *info;
+ pid_t pid;
+ int fd = -1;
+ int death_pipe[2];
+ int sync_pipe[2];
+ int ret;
+#ifdef __linux__
+ int efd;
+#endif
+
+ (void) pthread_once(&forkfd_initialization, forkfd_initialize);
+
+ info = allocateInfo(&header);
+ if (info == NULL) {
+ errno = ENOMEM;
+ return -1;
+ }
+
+ /* create the pipes before we fork */
+ if (create_pipe(death_pipe, flags) == -1)
+ goto err_free; /* failed to create the pipes, pass errno */
+
+#ifdef HAVE_EVENTFD
+ /* try using an eventfd, which consumes less resources */
+ efd = eventfd(0, EFD_CLOEXEC);
+ if (efd == -1)
+#endif
+ {
+ /* try a pipe */
+ if (create_pipe(sync_pipe, FFD_CLOEXEC) == -1) {
+ /* failed both at eventfd and pipe; fail and pass errno */
+ goto err_close;
+ }
+ }
+
+ /* now fork */
+ pid = fork();
+ if (pid == -1)
+ goto err_close2; /* failed to fork, pass errno */
+ if (ppid)
+ *ppid = pid;
+
+ /*
+ * We need to store the child's PID in the info structure, so
+ * the SIGCHLD handler knows that this child is present and it
+ * knows the writing end of the pipe to pass information on.
+ * However, the child process could exit before we stored the
+ * information (or the handler could run for other children exiting).
+ * We prevent that from happening by blocking the child process in
+ * a read(2) until we're finished storing the information.
+ */
+ if (pid == 0) {
+ /* this is the child process */
+ /* first, wait for the all clear */
+#ifdef HAVE_EVENTFD
+ if (efd != -1) {
+ eventfd_t val64;
+ EINTR_LOOP(ret, eventfd_read(efd, &val64));
+ EINTR_LOOP(ret, close(efd));
+ } else
+#endif
+ {
+ char c;
+ EINTR_LOOP(ret, close(sync_pipe[1]));
+ EINTR_LOOP(ret, read(sync_pipe[0], &c, sizeof c));
+ EINTR_LOOP(ret, close(sync_pipe[0]));
+ }
+
+ /* now close the pipes and return to the caller */
+ EINTR_LOOP(ret, close(death_pipe[0]));
+ EINTR_LOOP(ret, close(death_pipe[1]));
+ fd = FFD_CHILD_PROCESS;
+ } else {
+ /* parent process */
+ info->deathPipe = death_pipe[1];
+ fd = death_pipe[0];
+ ffd_atomic_store(&info->pid, pid, FFD_ATOMIC_RELEASE);
+
+ /* release the child */
+#ifdef HAVE_EVENTFD
+ if (efd != -1) {
+ eventfd_t val64 = 42;
+ EINTR_LOOP(ret, eventfd_write(efd, val64));
+ EINTR_LOOP(ret, close(efd));
+ } else
+#endif
+ {
+ /*
+ * Usually, closing would be enough to make read(2) return and the child process
+ * continue. We need to write here: another thread could be calling forkfd at the
+ * same time, which means auxpipe[1] might be open in another child process.
+ */
+ EINTR_LOOP(ret, close(sync_pipe[0]));
+ EINTR_LOOP(ret, write(sync_pipe[1], "", 1));
+ EINTR_LOOP(ret, close(sync_pipe[1]));
+ }
+ }
+
+ return fd;
+
+err_close2:
+#ifdef HAVE_EVENTFD
+ if (efd != -1) {
+ EINTR_LOOP(ret, close(efd));
+ } else
+#endif
+ {
+ EINTR_LOOP(ret, close(sync_pipe[0]));
+ EINTR_LOOP(ret, close(sync_pipe[1]));
+ }
+err_close:
+ EINTR_LOOP(ret, close(death_pipe[0]));
+ EINTR_LOOP(ret, close(death_pipe[1]));
+err_free:
+ /* free the info pointer */
+ freeInfo(header, info);
+ return -1;
+}
diff --git a/src/3rdparty/forkfd/forkfd.h b/src/3rdparty/forkfd/forkfd.h
new file mode 100644
index 0000000000..01b8882623
--- /dev/null
+++ b/src/3rdparty/forkfd/forkfd.h
@@ -0,0 +1,58 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Intel Corporation
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef FORKFD_H
+#define FORKFD_H
+
+#include <fcntl.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define FFD_CLOEXEC 1
+#define FFD_NONBLOCK 2
+
+#define FFD_CHILD_PROCESS (-2)
+
+int forkfd(int flags, pid_t *ppid);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif // FORKFD_H
diff --git a/src/3rdparty/forkfd/forkfd_gcc.h b/src/3rdparty/forkfd/forkfd_gcc.h
new file mode 100644
index 0000000000..e5cbbe60e0
--- /dev/null
+++ b/src/3rdparty/forkfd/forkfd_gcc.h
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Intel Corporation
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor
+** the names of its contributors may be used to endorse or promote
+** products derived from this software without specific prior written
+** permission.
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef FFD_ATOMIC_GCC_H
+#define FFD_ATOMIC_GCC_H
+
+/* atomics */
+/* we'll use the GCC 4.7 atomic builtins
+ * See http://gcc.gnu.org/onlinedocs/gcc/_005f_005fatomic-Builtins.html#_005f_005fatomic-Builtins
+ * Or in texinfo: C Extensions > __atomic Builtins
+ */
+typedef int ffd_atomic_int;
+#define ffd_atomic_pointer(type) type*
+
+#define FFD_ATOMIC_INIT(val) (val)
+
+#define FFD_ATOMIC_RELAXED __ATOMIC_RELAXED
+#define FFD_ATOMIC_ACQUIRE __ATOMIC_ACQUIRE
+#define FFD_ATOMIC_RELEASE __ATOMIC_RELEASE
+// acq_rel & cst not necessary
+
+#if !defined(__GNUC__) || \
+ ((__GNUC__ - 0) * 100 + (__GNUC_MINOR__ - 0)) < 407 || \
+ (defined(__INTEL_COMPILER) && __INTEL_COMPILER-0 < 1310) || \
+ (defined(__clang__) && ((__clang_major__-0) * 100 + (__clang_minor-0)) < 303)
+#define ffd_atomic_load_n(ptr,order) *(ptr)
+#define ffd_atomic_store_n(ptr,val,order) (*(ptr) = (val), (void)0)
+#define ffd_atomic_exchange_n(ptr,val,order) __sync_lock_test_and_set(ptr, val)
+#define ffd_atomic_compare_exchange_n(ptr,expected,desired,weak,order1,order2) \
+ __sync_bool_compare_and_swap(ptr, *(expected), desired) ? 1 : \
+ (*(expected) = *(ptr), 0)
+#define ffd_atomic_add_fetch(ptr,val,order) __sync_add_and_fetch(ptr, val)
+#else
+#define ffd_atomic_load(ptr,order) __atomic_load_n(ptr, order)
+#define ffd_atomic_store(ptr,val,order) __atomic_store_n(ptr, val, order)
+#define ffd_atomic_exchange(ptr,val,order) __atomic_exchange_n(ptr, val, order)
+#define ffd_atomic_compare_exchange(ptr,expected,desired,order1,order2) \
+ __atomic_compare_exchange_n(ptr, expected, desired, 1, order1, order2)
+#define ffd_atomic_add_fetch(ptr,val,order) __atomic_add_fetch(ptr, val, order)
+#endif
+
+#endif
diff --git a/src/3rdparty/iaccessible2/generated/amd64/Accessible2.h b/src/3rdparty/iaccessible2/generated/amd64/Accessible2.h
deleted file mode 100644
index 3973db319e..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/Accessible2.h
+++ /dev/null
@@ -1,585 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:56 2012
- */
-/* Compiler settings for Accessible2.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-#ifndef COM_NO_WINDOWS_H
-#include "windows.h"
-#include "ole2.h"
-#endif /*COM_NO_WINDOWS_H*/
-
-#ifndef __Accessible2_h__
-#define __Accessible2_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifndef __IAccessible2_FWD_DEFINED__
-#define __IAccessible2_FWD_DEFINED__
-typedef interface IAccessible2 IAccessible2;
-#endif /* __IAccessible2_FWD_DEFINED__ */
-
-
-/* header files for imported files */
-#include "objidl.h"
-#include "oaidl.h"
-#include "oleacc.h"
-#include "AccessibleRelation.h"
-#include "AccessibleStates.h"
-#include "IA2CommonTypes.h"
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-/* interface __MIDL_itf_Accessible2_0000_0000 */
-/* [local] */
-
-typedef struct IA2Locale
- {
- BSTR language;
- BSTR country;
- BSTR variant;
- } IA2Locale;
-
-
-
-extern RPC_IF_HANDLE __MIDL_itf_Accessible2_0000_0000_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_Accessible2_0000_0000_v0_0_s_ifspec;
-
-#ifndef __IAccessible2_INTERFACE_DEFINED__
-#define __IAccessible2_INTERFACE_DEFINED__
-
-/* interface IAccessible2 */
-/* [uuid][object] */
-
-
-EXTERN_C const IID IID_IAccessible2;
-
-#if defined(__cplusplus) && !defined(CINTERFACE)
-
- MIDL_INTERFACE("E89F726E-C4F4-4c19-BB19-B647D7FA8478")
- IAccessible2 : public IAccessible
- {
- public:
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nRelations(
- /* [retval][out] */ long *nRelations) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_relation(
- /* [in] */ long relationIndex,
- /* [retval][out] */ IAccessibleRelation **relation) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_relations(
- /* [in] */ long maxRelations,
- /* [length_is][size_is][out] */ IAccessibleRelation **relations,
- /* [retval][out] */ long *nRelations) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE role(
- /* [retval][out] */ long *role) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE scrollTo(
- /* [in] */ enum IA2ScrollType scrollType) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE scrollToPoint(
- /* [in] */ enum IA2CoordinateType coordinateType,
- /* [in] */ long x,
- /* [in] */ long y) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_groupPosition(
- /* [out] */ long *groupLevel,
- /* [out] */ long *similarItemsInGroup,
- /* [retval][out] */ long *positionInGroup) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_states(
- /* [retval][out] */ AccessibleStates *states) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_extendedRole(
- /* [retval][out] */ BSTR *extendedRole) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_localizedExtendedRole(
- /* [retval][out] */ BSTR *localizedExtendedRole) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nExtendedStates(
- /* [retval][out] */ long *nExtendedStates) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_extendedStates(
- /* [in] */ long maxExtendedStates,
- /* [length_is][length_is][size_is][size_is][out] */ BSTR **extendedStates,
- /* [retval][out] */ long *nExtendedStates) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_localizedExtendedStates(
- /* [in] */ long maxLocalizedExtendedStates,
- /* [length_is][length_is][size_is][size_is][out] */ BSTR **localizedExtendedStates,
- /* [retval][out] */ long *nLocalizedExtendedStates) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_uniqueID(
- /* [retval][out] */ long *uniqueID) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_windowHandle(
- /* [retval][out] */ HWND *windowHandle) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_indexInParent(
- /* [retval][out] */ long *indexInParent) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_locale(
- /* [retval][out] */ IA2Locale *locale) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_attributes(
- /* [retval][out] */ BSTR *attributes) = 0;
-
- };
-
-#else /* C style interface */
-
- typedef struct IAccessible2Vtbl
- {
- BEGIN_INTERFACE
-
- HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
- IAccessible2 * This,
- /* [in] */ REFIID riid,
- /* [annotation][iid_is][out] */
- __RPC__deref_out void **ppvObject);
-
- ULONG ( STDMETHODCALLTYPE *AddRef )(
- IAccessible2 * This);
-
- ULONG ( STDMETHODCALLTYPE *Release )(
- IAccessible2 * This);
-
- HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
- IAccessible2 * This,
- /* [out] */ UINT *pctinfo);
-
- HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
- IAccessible2 * This,
- /* [in] */ UINT iTInfo,
- /* [in] */ LCID lcid,
- /* [out] */ ITypeInfo **ppTInfo);
-
- HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
- IAccessible2 * This,
- /* [in] */ REFIID riid,
- /* [size_is][in] */ LPOLESTR *rgszNames,
- /* [range][in] */ UINT cNames,
- /* [in] */ LCID lcid,
- /* [size_is][out] */ DISPID *rgDispId);
-
- /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
- IAccessible2 * This,
- /* [in] */ DISPID dispIdMember,
- /* [in] */ REFIID riid,
- /* [in] */ LCID lcid,
- /* [in] */ WORD wFlags,
- /* [out][in] */ DISPPARAMS *pDispParams,
- /* [out] */ VARIANT *pVarResult,
- /* [out] */ EXCEPINFO *pExcepInfo,
- /* [out] */ UINT *puArgErr);
-
- /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accParent )(
- IAccessible2 * This,
- /* [retval][out] */ IDispatch **ppdispParent);
-
- /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accChildCount )(
- IAccessible2 * This,
- /* [retval][out] */ long *pcountChildren);
-
- /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accChild )(
- IAccessible2 * This,
- /* [in] */ VARIANT varChild,
- /* [retval][out] */ IDispatch **ppdispChild);
-
- /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accName )(
- IAccessible2 * This,
- /* [optional][in] */ VARIANT varChild,
- /* [retval][out] */ BSTR *pszName);
-
- /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accValue )(
- IAccessible2 * This,
- /* [optional][in] */ VARIANT varChild,
- /* [retval][out] */ BSTR *pszValue);
-
- /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accDescription )(
- IAccessible2 * This,
- /* [optional][in] */ VARIANT varChild,
- /* [retval][out] */ BSTR *pszDescription);
-
- /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accRole )(
- IAccessible2 * This,
- /* [optional][in] */ VARIANT varChild,
- /* [retval][out] */ VARIANT *pvarRole);
-
- /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accState )(
- IAccessible2 * This,
- /* [optional][in] */ VARIANT varChild,
- /* [retval][out] */ VARIANT *pvarState);
-
- /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accHelp )(
- IAccessible2 * This,
- /* [optional][in] */ VARIANT varChild,
- /* [retval][out] */ BSTR *pszHelp);
-
- /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accHelpTopic )(
- IAccessible2 * This,
- /* [out] */ BSTR *pszHelpFile,
- /* [optional][in] */ VARIANT varChild,
- /* [retval][out] */ long *pidTopic);
-
- /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accKeyboardShortcut )(
- IAccessible2 * This,
- /* [optional][in] */ VARIANT varChild,
- /* [retval][out] */ BSTR *pszKeyboardShortcut);
-
- /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accFocus )(
- IAccessible2 * This,
- /* [retval][out] */ VARIANT *pvarChild);
-
- /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accSelection )(
- IAccessible2 * This,
- /* [retval][out] */ VARIANT *pvarChildren);
-
- /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accDefaultAction )(
- IAccessible2 * This,
- /* [optional][in] */ VARIANT varChild,
- /* [retval][out] */ BSTR *pszDefaultAction);
-
- /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accSelect )(
- IAccessible2 * This,
- /* [in] */ long flagsSelect,
- /* [optional][in] */ VARIANT varChild);
-
- /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accLocation )(
- IAccessible2 * This,
- /* [out] */ long *pxLeft,
- /* [out] */ long *pyTop,
- /* [out] */ long *pcxWidth,
- /* [out] */ long *pcyHeight,
- /* [optional][in] */ VARIANT varChild);
-
- /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accNavigate )(
- IAccessible2 * This,
- /* [in] */ long navDir,
- /* [optional][in] */ VARIANT varStart,
- /* [retval][out] */ VARIANT *pvarEndUpAt);
-
- /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accHitTest )(
- IAccessible2 * This,
- /* [in] */ long xLeft,
- /* [in] */ long yTop,
- /* [retval][out] */ VARIANT *pvarChild);
-
- /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accDoDefaultAction )(
- IAccessible2 * This,
- /* [optional][in] */ VARIANT varChild);
-
- /* [id][propput][hidden] */ HRESULT ( STDMETHODCALLTYPE *put_accName )(
- IAccessible2 * This,
- /* [optional][in] */ VARIANT varChild,
- /* [in] */ BSTR szName);
-
- /* [id][propput][hidden] */ HRESULT ( STDMETHODCALLTYPE *put_accValue )(
- IAccessible2 * This,
- /* [optional][in] */ VARIANT varChild,
- /* [in] */ BSTR szValue);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nRelations )(
- IAccessible2 * This,
- /* [retval][out] */ long *nRelations);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relation )(
- IAccessible2 * This,
- /* [in] */ long relationIndex,
- /* [retval][out] */ IAccessibleRelation **relation);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relations )(
- IAccessible2 * This,
- /* [in] */ long maxRelations,
- /* [length_is][size_is][out] */ IAccessibleRelation **relations,
- /* [retval][out] */ long *nRelations);
-
- HRESULT ( STDMETHODCALLTYPE *role )(
- IAccessible2 * This,
- /* [retval][out] */ long *role);
-
- HRESULT ( STDMETHODCALLTYPE *scrollTo )(
- IAccessible2 * This,
- /* [in] */ enum IA2ScrollType scrollType);
-
- HRESULT ( STDMETHODCALLTYPE *scrollToPoint )(
- IAccessible2 * This,
- /* [in] */ enum IA2CoordinateType coordinateType,
- /* [in] */ long x,
- /* [in] */ long y);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_groupPosition )(
- IAccessible2 * This,
- /* [out] */ long *groupLevel,
- /* [out] */ long *similarItemsInGroup,
- /* [retval][out] */ long *positionInGroup);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_states )(
- IAccessible2 * This,
- /* [retval][out] */ AccessibleStates *states);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_extendedRole )(
- IAccessible2 * This,
- /* [retval][out] */ BSTR *extendedRole);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedExtendedRole )(
- IAccessible2 * This,
- /* [retval][out] */ BSTR *localizedExtendedRole);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nExtendedStates )(
- IAccessible2 * This,
- /* [retval][out] */ long *nExtendedStates);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_extendedStates )(
- IAccessible2 * This,
- /* [in] */ long maxExtendedStates,
- /* [length_is][length_is][size_is][size_is][out] */ BSTR **extendedStates,
- /* [retval][out] */ long *nExtendedStates);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedExtendedStates )(
- IAccessible2 * This,
- /* [in] */ long maxLocalizedExtendedStates,
- /* [length_is][length_is][size_is][size_is][out] */ BSTR **localizedExtendedStates,
- /* [retval][out] */ long *nLocalizedExtendedStates);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_uniqueID )(
- IAccessible2 * This,
- /* [retval][out] */ long *uniqueID);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_windowHandle )(
- IAccessible2 * This,
- /* [retval][out] */ HWND *windowHandle);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_indexInParent )(
- IAccessible2 * This,
- /* [retval][out] */ long *indexInParent);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_locale )(
- IAccessible2 * This,
- /* [retval][out] */ IA2Locale *locale);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attributes )(
- IAccessible2 * This,
- /* [retval][out] */ BSTR *attributes);
-
- END_INTERFACE
- } IAccessible2Vtbl;
-
- interface IAccessible2
- {
- CONST_VTBL struct IAccessible2Vtbl *lpVtbl;
- };
-
-
-
-#ifdef COBJMACROS
-
-
-#define IAccessible2_QueryInterface(This,riid,ppvObject) \
- ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
-
-#define IAccessible2_AddRef(This) \
- ( (This)->lpVtbl -> AddRef(This) )
-
-#define IAccessible2_Release(This) \
- ( (This)->lpVtbl -> Release(This) )
-
-
-#define IAccessible2_GetTypeInfoCount(This,pctinfo) \
- ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
-
-#define IAccessible2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
- ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
-
-#define IAccessible2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
- ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
-
-#define IAccessible2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
- ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
-
-
-#define IAccessible2_get_accParent(This,ppdispParent) \
- ( (This)->lpVtbl -> get_accParent(This,ppdispParent) )
-
-#define IAccessible2_get_accChildCount(This,pcountChildren) \
- ( (This)->lpVtbl -> get_accChildCount(This,pcountChildren) )
-
-#define IAccessible2_get_accChild(This,varChild,ppdispChild) \
- ( (This)->lpVtbl -> get_accChild(This,varChild,ppdispChild) )
-
-#define IAccessible2_get_accName(This,varChild,pszName) \
- ( (This)->lpVtbl -> get_accName(This,varChild,pszName) )
-
-#define IAccessible2_get_accValue(This,varChild,pszValue) \
- ( (This)->lpVtbl -> get_accValue(This,varChild,pszValue) )
-
-#define IAccessible2_get_accDescription(This,varChild,pszDescription) \
- ( (This)->lpVtbl -> get_accDescription(This,varChild,pszDescription) )
-
-#define IAccessible2_get_accRole(This,varChild,pvarRole) \
- ( (This)->lpVtbl -> get_accRole(This,varChild,pvarRole) )
-
-#define IAccessible2_get_accState(This,varChild,pvarState) \
- ( (This)->lpVtbl -> get_accState(This,varChild,pvarState) )
-
-#define IAccessible2_get_accHelp(This,varChild,pszHelp) \
- ( (This)->lpVtbl -> get_accHelp(This,varChild,pszHelp) )
-
-#define IAccessible2_get_accHelpTopic(This,pszHelpFile,varChild,pidTopic) \
- ( (This)->lpVtbl -> get_accHelpTopic(This,pszHelpFile,varChild,pidTopic) )
-
-#define IAccessible2_get_accKeyboardShortcut(This,varChild,pszKeyboardShortcut) \
- ( (This)->lpVtbl -> get_accKeyboardShortcut(This,varChild,pszKeyboardShortcut) )
-
-#define IAccessible2_get_accFocus(This,pvarChild) \
- ( (This)->lpVtbl -> get_accFocus(This,pvarChild) )
-
-#define IAccessible2_get_accSelection(This,pvarChildren) \
- ( (This)->lpVtbl -> get_accSelection(This,pvarChildren) )
-
-#define IAccessible2_get_accDefaultAction(This,varChild,pszDefaultAction) \
- ( (This)->lpVtbl -> get_accDefaultAction(This,varChild,pszDefaultAction) )
-
-#define IAccessible2_accSelect(This,flagsSelect,varChild) \
- ( (This)->lpVtbl -> accSelect(This,flagsSelect,varChild) )
-
-#define IAccessible2_accLocation(This,pxLeft,pyTop,pcxWidth,pcyHeight,varChild) \
- ( (This)->lpVtbl -> accLocation(This,pxLeft,pyTop,pcxWidth,pcyHeight,varChild) )
-
-#define IAccessible2_accNavigate(This,navDir,varStart,pvarEndUpAt) \
- ( (This)->lpVtbl -> accNavigate(This,navDir,varStart,pvarEndUpAt) )
-
-#define IAccessible2_accHitTest(This,xLeft,yTop,pvarChild) \
- ( (This)->lpVtbl -> accHitTest(This,xLeft,yTop,pvarChild) )
-
-#define IAccessible2_accDoDefaultAction(This,varChild) \
- ( (This)->lpVtbl -> accDoDefaultAction(This,varChild) )
-
-#define IAccessible2_put_accName(This,varChild,szName) \
- ( (This)->lpVtbl -> put_accName(This,varChild,szName) )
-
-#define IAccessible2_put_accValue(This,varChild,szValue) \
- ( (This)->lpVtbl -> put_accValue(This,varChild,szValue) )
-
-
-#define IAccessible2_get_nRelations(This,nRelations) \
- ( (This)->lpVtbl -> get_nRelations(This,nRelations) )
-
-#define IAccessible2_get_relation(This,relationIndex,relation) \
- ( (This)->lpVtbl -> get_relation(This,relationIndex,relation) )
-
-#define IAccessible2_get_relations(This,maxRelations,relations,nRelations) \
- ( (This)->lpVtbl -> get_relations(This,maxRelations,relations,nRelations) )
-
-#define IAccessible2_role(This,role) \
- ( (This)->lpVtbl -> role(This,role) )
-
-#define IAccessible2_scrollTo(This,scrollType) \
- ( (This)->lpVtbl -> scrollTo(This,scrollType) )
-
-#define IAccessible2_scrollToPoint(This,coordinateType,x,y) \
- ( (This)->lpVtbl -> scrollToPoint(This,coordinateType,x,y) )
-
-#define IAccessible2_get_groupPosition(This,groupLevel,similarItemsInGroup,positionInGroup) \
- ( (This)->lpVtbl -> get_groupPosition(This,groupLevel,similarItemsInGroup,positionInGroup) )
-
-#define IAccessible2_get_states(This,states) \
- ( (This)->lpVtbl -> get_states(This,states) )
-
-#define IAccessible2_get_extendedRole(This,extendedRole) \
- ( (This)->lpVtbl -> get_extendedRole(This,extendedRole) )
-
-#define IAccessible2_get_localizedExtendedRole(This,localizedExtendedRole) \
- ( (This)->lpVtbl -> get_localizedExtendedRole(This,localizedExtendedRole) )
-
-#define IAccessible2_get_nExtendedStates(This,nExtendedStates) \
- ( (This)->lpVtbl -> get_nExtendedStates(This,nExtendedStates) )
-
-#define IAccessible2_get_extendedStates(This,maxExtendedStates,extendedStates,nExtendedStates) \
- ( (This)->lpVtbl -> get_extendedStates(This,maxExtendedStates,extendedStates,nExtendedStates) )
-
-#define IAccessible2_get_localizedExtendedStates(This,maxLocalizedExtendedStates,localizedExtendedStates,nLocalizedExtendedStates) \
- ( (This)->lpVtbl -> get_localizedExtendedStates(This,maxLocalizedExtendedStates,localizedExtendedStates,nLocalizedExtendedStates) )
-
-#define IAccessible2_get_uniqueID(This,uniqueID) \
- ( (This)->lpVtbl -> get_uniqueID(This,uniqueID) )
-
-#define IAccessible2_get_windowHandle(This,windowHandle) \
- ( (This)->lpVtbl -> get_windowHandle(This,windowHandle) )
-
-#define IAccessible2_get_indexInParent(This,indexInParent) \
- ( (This)->lpVtbl -> get_indexInParent(This,indexInParent) )
-
-#define IAccessible2_get_locale(This,locale) \
- ( (This)->lpVtbl -> get_locale(This,locale) )
-
-#define IAccessible2_get_attributes(This,attributes) \
- ( (This)->lpVtbl -> get_attributes(This,attributes) )
-
-#endif /* COBJMACROS */
-
-
-#endif /* C style interface */
-
-
-
-
-#endif /* __IAccessible2_INTERFACE_DEFINED__ */
-
-
-/* Additional Prototypes for ALL interfaces */
-
-unsigned long __RPC_USER BSTR_UserSize( unsigned long *, unsigned long , BSTR * );
-unsigned char * __RPC_USER BSTR_UserMarshal( unsigned long *, unsigned char *, BSTR * );
-unsigned char * __RPC_USER BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * );
-void __RPC_USER BSTR_UserFree( unsigned long *, BSTR * );
-
-unsigned long __RPC_USER HWND_UserSize( unsigned long *, unsigned long , HWND * );
-unsigned char * __RPC_USER HWND_UserMarshal( unsigned long *, unsigned char *, HWND * );
-unsigned char * __RPC_USER HWND_UserUnmarshal(unsigned long *, unsigned char *, HWND * );
-void __RPC_USER HWND_UserFree( unsigned long *, HWND * );
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/Accessible2_i.c b/src/3rdparty/iaccessible2/generated/amd64/Accessible2_i.c
deleted file mode 100644
index 480a2a7537..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/Accessible2_i.c
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
-
-/* link this file in with the server and any clients */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:56 2012
- */
-/* Compiler settings for Accessible2.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#include <rpc.h>
-#include <rpcndr.h>
-
-#ifdef _MIDL_USE_GUIDDEF_
-
-#ifndef INITGUID
-#define INITGUID
-#include <guiddef.h>
-#undef INITGUID
-#else
-#include <guiddef.h>
-#endif
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
-
-#else // !_MIDL_USE_GUIDDEF_
-
-#ifndef __IID_DEFINED__
-#define __IID_DEFINED__
-
-typedef struct _IID
-{
- unsigned long x;
- unsigned short s1;
- unsigned short s2;
- unsigned char c[8];
-} IID;
-
-#endif // __IID_DEFINED__
-
-#ifndef CLSID_DEFINED
-#define CLSID_DEFINED
-typedef IID CLSID;
-#endif // CLSID_DEFINED
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
-
-#endif !_MIDL_USE_GUIDDEF_
-
-MIDL_DEFINE_GUID(IID, IID_IAccessible2,0xE89F726E,0xC4F4,0x4c19,0xBB,0x19,0xB6,0x47,0xD7,0xFA,0x84,0x78);
-
-#undef MIDL_DEFINE_GUID
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/Accessible2_p.c b/src/3rdparty/iaccessible2/generated/amd64/Accessible2_p.c
deleted file mode 100644
index 281718a7e5..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/Accessible2_p.c
+++ /dev/null
@@ -1,1196 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the proxy stub code */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:56 2012
- */
-/* Compiler settings for Accessible2.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#if defined(_M_AMD64)
-
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-#if _MSC_VER >= 1200
-#pragma warning(push)
-#endif
-
-#pragma warning( disable: 4211 ) /* redefine extern to static */
-#pragma warning( disable: 4232 ) /* dllimport identity*/
-#pragma warning( disable: 4024 ) /* array to pointer mapping*/
-#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */
-
-#define USE_STUBLESS_PROXY
-
-
-/* verify that the <rpcproxy.h> version is high enough to compile this file*/
-#ifndef __REDQ_RPCPROXY_H_VERSION__
-#define __REQUIRED_RPCPROXY_H_VERSION__ 475
-#endif
-
-
-#include "rpcproxy.h"
-#ifndef __RPCPROXY_H_VERSION__
-#error this stub requires an updated version of <rpcproxy.h>
-#endif /* __RPCPROXY_H_VERSION__ */
-
-
-#include "Accessible2.h"
-
-#define TYPE_FORMAT_STRING_SIZE 189
-#define PROC_FORMAT_STRING_SIZE 751
-#define EXPR_FORMAT_STRING_SIZE 1
-#define TRANSMIT_AS_TABLE_SIZE 0
-#define WIRE_MARSHAL_TABLE_SIZE 2
-
-typedef struct _Accessible2_MIDL_TYPE_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
- } Accessible2_MIDL_TYPE_FORMAT_STRING;
-
-typedef struct _Accessible2_MIDL_PROC_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
- } Accessible2_MIDL_PROC_FORMAT_STRING;
-
-typedef struct _Accessible2_MIDL_EXPR_FORMAT_STRING
- {
- long Pad;
- unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
- } Accessible2_MIDL_EXPR_FORMAT_STRING;
-
-
-static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
-{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
-
-
-extern const Accessible2_MIDL_TYPE_FORMAT_STRING Accessible2__MIDL_TypeFormatString;
-extern const Accessible2_MIDL_PROC_FORMAT_STRING Accessible2__MIDL_ProcFormatString;
-extern const Accessible2_MIDL_EXPR_FORMAT_STRING Accessible2__MIDL_ExprFormatString;
-
-
-extern const MIDL_STUB_DESC Object_StubDesc;
-
-
-extern const MIDL_SERVER_INFO IAccessible2_ServerInfo;
-extern const MIDL_STUBLESS_PROXY_INFO IAccessible2_ProxyInfo;
-
-
-extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ];
-
-#if !defined(__RPC_WIN64__)
-#error Invalid build platform for this stub.
-#endif
-
-static const Accessible2_MIDL_PROC_FORMAT_STRING Accessible2__MIDL_ProcFormatString =
- {
- 0,
- {
-
- /* Procedure get_nRelations */
-
- 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 2 */ NdrFcLong( 0x0 ), /* 0 */
-/* 6 */ NdrFcShort( 0x1c ), /* 28 */
-/* 8 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 10 */ NdrFcShort( 0x0 ), /* 0 */
-/* 12 */ NdrFcShort( 0x24 ), /* 36 */
-/* 14 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 16 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 18 */ NdrFcShort( 0x0 ), /* 0 */
-/* 20 */ NdrFcShort( 0x0 ), /* 0 */
-/* 22 */ NdrFcShort( 0x0 ), /* 0 */
-/* 24 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter nRelations */
-
-/* 26 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 28 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 30 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 32 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 34 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 36 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_relation */
-
-/* 38 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 40 */ NdrFcLong( 0x0 ), /* 0 */
-/* 44 */ NdrFcShort( 0x1d ), /* 29 */
-/* 46 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 48 */ NdrFcShort( 0x8 ), /* 8 */
-/* 50 */ NdrFcShort( 0x8 ), /* 8 */
-/* 52 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 54 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 56 */ NdrFcShort( 0x0 ), /* 0 */
-/* 58 */ NdrFcShort( 0x0 ), /* 0 */
-/* 60 */ NdrFcShort( 0x0 ), /* 0 */
-/* 62 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter relationIndex */
-
-/* 64 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 66 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 68 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter relation */
-
-/* 70 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
-/* 72 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 74 */ NdrFcShort( 0x6 ), /* Type Offset=6 */
-
- /* Return value */
-
-/* 76 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 78 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 80 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_relations */
-
-/* 82 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 84 */ NdrFcLong( 0x0 ), /* 0 */
-/* 88 */ NdrFcShort( 0x1e ), /* 30 */
-/* 90 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
-/* 92 */ NdrFcShort( 0x8 ), /* 8 */
-/* 94 */ NdrFcShort( 0x24 ), /* 36 */
-/* 96 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x4, /* 4 */
-/* 98 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 100 */ NdrFcShort( 0x1 ), /* 1 */
-/* 102 */ NdrFcShort( 0x0 ), /* 0 */
-/* 104 */ NdrFcShort( 0x0 ), /* 0 */
-/* 106 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter maxRelations */
-
-/* 108 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 110 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 112 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter relations */
-
-/* 114 */ NdrFcShort( 0x113 ), /* Flags: must size, must free, out, simple ref, */
-/* 116 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 118 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
-
- /* Parameter nRelations */
-
-/* 120 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 122 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 124 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 126 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 128 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 130 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure role */
-
-/* 132 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 134 */ NdrFcLong( 0x0 ), /* 0 */
-/* 138 */ NdrFcShort( 0x1f ), /* 31 */
-/* 140 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 142 */ NdrFcShort( 0x0 ), /* 0 */
-/* 144 */ NdrFcShort( 0x24 ), /* 36 */
-/* 146 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 148 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 150 */ NdrFcShort( 0x0 ), /* 0 */
-/* 152 */ NdrFcShort( 0x0 ), /* 0 */
-/* 154 */ NdrFcShort( 0x0 ), /* 0 */
-/* 156 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter role */
-
-/* 158 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 160 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 162 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 164 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 166 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 168 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure scrollTo */
-
-/* 170 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 172 */ NdrFcLong( 0x0 ), /* 0 */
-/* 176 */ NdrFcShort( 0x20 ), /* 32 */
-/* 178 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 180 */ NdrFcShort( 0x6 ), /* 6 */
-/* 182 */ NdrFcShort( 0x8 ), /* 8 */
-/* 184 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 186 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 188 */ NdrFcShort( 0x0 ), /* 0 */
-/* 190 */ NdrFcShort( 0x0 ), /* 0 */
-/* 192 */ NdrFcShort( 0x0 ), /* 0 */
-/* 194 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter scrollType */
-
-/* 196 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 198 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 200 */ 0xd, /* FC_ENUM16 */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 202 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 204 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 206 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure scrollToPoint */
-
-/* 208 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 210 */ NdrFcLong( 0x0 ), /* 0 */
-/* 214 */ NdrFcShort( 0x21 ), /* 33 */
-/* 216 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
-/* 218 */ NdrFcShort( 0x16 ), /* 22 */
-/* 220 */ NdrFcShort( 0x8 ), /* 8 */
-/* 222 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x4, /* 4 */
-/* 224 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 226 */ NdrFcShort( 0x0 ), /* 0 */
-/* 228 */ NdrFcShort( 0x0 ), /* 0 */
-/* 230 */ NdrFcShort( 0x0 ), /* 0 */
-/* 232 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter coordinateType */
-
-/* 234 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 236 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 238 */ 0xd, /* FC_ENUM16 */
- 0x0, /* 0 */
-
- /* Parameter x */
-
-/* 240 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 242 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 244 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter y */
-
-/* 246 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 248 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 250 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 252 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 254 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 256 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_groupPosition */
-
-/* 258 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 260 */ NdrFcLong( 0x0 ), /* 0 */
-/* 264 */ NdrFcShort( 0x22 ), /* 34 */
-/* 266 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
-/* 268 */ NdrFcShort( 0x0 ), /* 0 */
-/* 270 */ NdrFcShort( 0x5c ), /* 92 */
-/* 272 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x4, /* 4 */
-/* 274 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 276 */ NdrFcShort( 0x0 ), /* 0 */
-/* 278 */ NdrFcShort( 0x0 ), /* 0 */
-/* 280 */ NdrFcShort( 0x0 ), /* 0 */
-/* 282 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter groupLevel */
-
-/* 284 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 286 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 288 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter similarItemsInGroup */
-
-/* 290 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 292 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 294 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter positionInGroup */
-
-/* 296 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 298 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 300 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 302 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 304 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 306 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_states */
-
-/* 308 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 310 */ NdrFcLong( 0x0 ), /* 0 */
-/* 314 */ NdrFcShort( 0x23 ), /* 35 */
-/* 316 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 318 */ NdrFcShort( 0x0 ), /* 0 */
-/* 320 */ NdrFcShort( 0x24 ), /* 36 */
-/* 322 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 324 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 326 */ NdrFcShort( 0x0 ), /* 0 */
-/* 328 */ NdrFcShort( 0x0 ), /* 0 */
-/* 330 */ NdrFcShort( 0x0 ), /* 0 */
-/* 332 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter states */
-
-/* 334 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 336 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 338 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 340 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 342 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 344 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_extendedRole */
-
-/* 346 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 348 */ NdrFcLong( 0x0 ), /* 0 */
-/* 352 */ NdrFcShort( 0x24 ), /* 36 */
-/* 354 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 356 */ NdrFcShort( 0x0 ), /* 0 */
-/* 358 */ NdrFcShort( 0x8 ), /* 8 */
-/* 360 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 362 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 364 */ NdrFcShort( 0x1 ), /* 1 */
-/* 366 */ NdrFcShort( 0x0 ), /* 0 */
-/* 368 */ NdrFcShort( 0x0 ), /* 0 */
-/* 370 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter extendedRole */
-
-/* 372 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 374 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 376 */ NdrFcShort( 0x54 ), /* Type Offset=84 */
-
- /* Return value */
-
-/* 378 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 380 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 382 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_localizedExtendedRole */
-
-/* 384 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 386 */ NdrFcLong( 0x0 ), /* 0 */
-/* 390 */ NdrFcShort( 0x25 ), /* 37 */
-/* 392 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 394 */ NdrFcShort( 0x0 ), /* 0 */
-/* 396 */ NdrFcShort( 0x8 ), /* 8 */
-/* 398 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 400 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 402 */ NdrFcShort( 0x1 ), /* 1 */
-/* 404 */ NdrFcShort( 0x0 ), /* 0 */
-/* 406 */ NdrFcShort( 0x0 ), /* 0 */
-/* 408 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter localizedExtendedRole */
-
-/* 410 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 412 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 414 */ NdrFcShort( 0x54 ), /* Type Offset=84 */
-
- /* Return value */
-
-/* 416 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 418 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 420 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_nExtendedStates */
-
-/* 422 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 424 */ NdrFcLong( 0x0 ), /* 0 */
-/* 428 */ NdrFcShort( 0x26 ), /* 38 */
-/* 430 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 432 */ NdrFcShort( 0x0 ), /* 0 */
-/* 434 */ NdrFcShort( 0x24 ), /* 36 */
-/* 436 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 438 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 440 */ NdrFcShort( 0x0 ), /* 0 */
-/* 442 */ NdrFcShort( 0x0 ), /* 0 */
-/* 444 */ NdrFcShort( 0x0 ), /* 0 */
-/* 446 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter nExtendedStates */
-
-/* 448 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 450 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 452 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 454 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 456 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 458 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_extendedStates */
-
-/* 460 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 462 */ NdrFcLong( 0x0 ), /* 0 */
-/* 466 */ NdrFcShort( 0x27 ), /* 39 */
-/* 468 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
-/* 470 */ NdrFcShort( 0x8 ), /* 8 */
-/* 472 */ NdrFcShort( 0x24 ), /* 36 */
-/* 474 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x4, /* 4 */
-/* 476 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 478 */ NdrFcShort( 0x1 ), /* 1 */
-/* 480 */ NdrFcShort( 0x0 ), /* 0 */
-/* 482 */ NdrFcShort( 0x0 ), /* 0 */
-/* 484 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter maxExtendedStates */
-
-/* 486 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 488 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 490 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter extendedStates */
-
-/* 492 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
-/* 494 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 496 */ NdrFcShort( 0x5e ), /* Type Offset=94 */
-
- /* Parameter nExtendedStates */
-
-/* 498 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 500 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 502 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 504 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 506 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 508 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_localizedExtendedStates */
-
-/* 510 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 512 */ NdrFcLong( 0x0 ), /* 0 */
-/* 516 */ NdrFcShort( 0x28 ), /* 40 */
-/* 518 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
-/* 520 */ NdrFcShort( 0x8 ), /* 8 */
-/* 522 */ NdrFcShort( 0x24 ), /* 36 */
-/* 524 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x4, /* 4 */
-/* 526 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 528 */ NdrFcShort( 0x1 ), /* 1 */
-/* 530 */ NdrFcShort( 0x0 ), /* 0 */
-/* 532 */ NdrFcShort( 0x0 ), /* 0 */
-/* 534 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter maxLocalizedExtendedStates */
-
-/* 536 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 538 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 540 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter localizedExtendedStates */
-
-/* 542 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
-/* 544 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 546 */ NdrFcShort( 0x5e ), /* Type Offset=94 */
-
- /* Parameter nLocalizedExtendedStates */
-
-/* 548 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 550 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 552 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 554 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 556 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 558 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_uniqueID */
-
-/* 560 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 562 */ NdrFcLong( 0x0 ), /* 0 */
-/* 566 */ NdrFcShort( 0x29 ), /* 41 */
-/* 568 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 570 */ NdrFcShort( 0x0 ), /* 0 */
-/* 572 */ NdrFcShort( 0x24 ), /* 36 */
-/* 574 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 576 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 578 */ NdrFcShort( 0x0 ), /* 0 */
-/* 580 */ NdrFcShort( 0x0 ), /* 0 */
-/* 582 */ NdrFcShort( 0x0 ), /* 0 */
-/* 584 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter uniqueID */
-
-/* 586 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 588 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 590 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 592 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 594 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 596 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_windowHandle */
-
-/* 598 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 600 */ NdrFcLong( 0x0 ), /* 0 */
-/* 604 */ NdrFcShort( 0x2a ), /* 42 */
-/* 606 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 608 */ NdrFcShort( 0x0 ), /* 0 */
-/* 610 */ NdrFcShort( 0x8 ), /* 8 */
-/* 612 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 614 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 616 */ NdrFcShort( 0x1 ), /* 1 */
-/* 618 */ NdrFcShort( 0x0 ), /* 0 */
-/* 620 */ NdrFcShort( 0x0 ), /* 0 */
-/* 622 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter windowHandle */
-
-/* 624 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 626 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 628 */ NdrFcShort( 0x98 ), /* Type Offset=152 */
-
- /* Return value */
-
-/* 630 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 632 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 634 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_indexInParent */
-
-/* 636 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 638 */ NdrFcLong( 0x0 ), /* 0 */
-/* 642 */ NdrFcShort( 0x2b ), /* 43 */
-/* 644 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 646 */ NdrFcShort( 0x0 ), /* 0 */
-/* 648 */ NdrFcShort( 0x24 ), /* 36 */
-/* 650 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 652 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 654 */ NdrFcShort( 0x0 ), /* 0 */
-/* 656 */ NdrFcShort( 0x0 ), /* 0 */
-/* 658 */ NdrFcShort( 0x0 ), /* 0 */
-/* 660 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter indexInParent */
-
-/* 662 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 664 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 666 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 668 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 670 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 672 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_locale */
-
-/* 674 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 676 */ NdrFcLong( 0x0 ), /* 0 */
-/* 680 */ NdrFcShort( 0x2c ), /* 44 */
-/* 682 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 684 */ NdrFcShort( 0x0 ), /* 0 */
-/* 686 */ NdrFcShort( 0x8 ), /* 8 */
-/* 688 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 690 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 692 */ NdrFcShort( 0x1 ), /* 1 */
-/* 694 */ NdrFcShort( 0x0 ), /* 0 */
-/* 696 */ NdrFcShort( 0x0 ), /* 0 */
-/* 698 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter locale */
-
-/* 700 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */
-/* 702 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 704 */ NdrFcShort( 0xa6 ), /* Type Offset=166 */
-
- /* Return value */
-
-/* 706 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 708 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 710 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_attributes */
-
-/* 712 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 714 */ NdrFcLong( 0x0 ), /* 0 */
-/* 718 */ NdrFcShort( 0x2d ), /* 45 */
-/* 720 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 722 */ NdrFcShort( 0x0 ), /* 0 */
-/* 724 */ NdrFcShort( 0x8 ), /* 8 */
-/* 726 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 728 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 730 */ NdrFcShort( 0x1 ), /* 1 */
-/* 732 */ NdrFcShort( 0x0 ), /* 0 */
-/* 734 */ NdrFcShort( 0x0 ), /* 0 */
-/* 736 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter attributes */
-
-/* 738 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 740 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 742 */ NdrFcShort( 0x54 ), /* Type Offset=84 */
-
- /* Return value */
-
-/* 744 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 746 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 748 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- 0x0
- }
- };
-
-static const Accessible2_MIDL_TYPE_FORMAT_STRING Accessible2__MIDL_TypeFormatString =
- {
- 0,
- {
- NdrFcShort( 0x0 ), /* 0 */
-/* 2 */
- 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
-/* 4 */ 0x8, /* FC_LONG */
- 0x5c, /* FC_PAD */
-/* 6 */
- 0x11, 0x10, /* FC_RP [pointer_deref] */
-/* 8 */ NdrFcShort( 0x2 ), /* Offset= 2 (10) */
-/* 10 */
- 0x2f, /* FC_IP */
- 0x5a, /* FC_CONSTANT_IID */
-/* 12 */ NdrFcLong( 0x7cdf86ee ), /* 2095023854 */
-/* 16 */ NdrFcShort( 0xc3da ), /* -15398 */
-/* 18 */ NdrFcShort( 0x496a ), /* 18794 */
-/* 20 */ 0xbd, /* 189 */
- 0xa4, /* 164 */
-/* 22 */ 0x28, /* 40 */
- 0x1b, /* 27 */
-/* 24 */ 0x33, /* 51 */
- 0x6e, /* 110 */
-/* 26 */ 0x1f, /* 31 */
- 0xdc, /* 220 */
-/* 28 */
- 0x11, 0x0, /* FC_RP */
-/* 30 */ NdrFcShort( 0x2 ), /* Offset= 2 (32) */
-/* 32 */
- 0x21, /* FC_BOGUS_ARRAY */
- 0x3, /* 3 */
-/* 34 */ NdrFcShort( 0x0 ), /* 0 */
-/* 36 */ 0x28, /* Corr desc: parameter, FC_LONG */
- 0x0, /* */
-/* 38 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 40 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 42 */ 0x28, /* Corr desc: parameter, FC_LONG */
- 0x54, /* FC_DEREFERENCE */
-/* 44 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 46 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 48 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 50 */ NdrFcShort( 0xffd8 ), /* Offset= -40 (10) */
-/* 52 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 54 */
- 0x11, 0x4, /* FC_RP [alloced_on_stack] */
-/* 56 */ NdrFcShort( 0x1c ), /* Offset= 28 (84) */
-/* 58 */
- 0x13, 0x0, /* FC_OP */
-/* 60 */ NdrFcShort( 0xe ), /* Offset= 14 (74) */
-/* 62 */
- 0x1b, /* FC_CARRAY */
- 0x1, /* 1 */
-/* 64 */ NdrFcShort( 0x2 ), /* 2 */
-/* 66 */ 0x9, /* Corr desc: FC_ULONG */
- 0x0, /* */
-/* 68 */ NdrFcShort( 0xfffc ), /* -4 */
-/* 70 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 72 */ 0x6, /* FC_SHORT */
- 0x5b, /* FC_END */
-/* 74 */
- 0x17, /* FC_CSTRUCT */
- 0x3, /* 3 */
-/* 76 */ NdrFcShort( 0x8 ), /* 8 */
-/* 78 */ NdrFcShort( 0xfff0 ), /* Offset= -16 (62) */
-/* 80 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 82 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 84 */ 0xb4, /* FC_USER_MARSHAL */
- 0x83, /* 131 */
-/* 86 */ NdrFcShort( 0x0 ), /* 0 */
-/* 88 */ NdrFcShort( 0x8 ), /* 8 */
-/* 90 */ NdrFcShort( 0x0 ), /* 0 */
-/* 92 */ NdrFcShort( 0xffde ), /* Offset= -34 (58) */
-/* 94 */
- 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */
-/* 96 */ NdrFcShort( 0x2 ), /* Offset= 2 (98) */
-/* 98 */
- 0x13, 0x0, /* FC_OP */
-/* 100 */ NdrFcShort( 0x2 ), /* Offset= 2 (102) */
-/* 102 */
- 0x21, /* FC_BOGUS_ARRAY */
- 0x3, /* 3 */
-/* 104 */ NdrFcShort( 0x0 ), /* 0 */
-/* 106 */ 0x28, /* Corr desc: parameter, FC_LONG */
- 0x0, /* */
-/* 108 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 110 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 112 */ 0x28, /* Corr desc: parameter, FC_LONG */
- 0x54, /* FC_DEREFERENCE */
-/* 114 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 116 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 118 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 120 */ NdrFcShort( 0xffdc ), /* Offset= -36 (84) */
-/* 122 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 124 */
- 0x11, 0x4, /* FC_RP [alloced_on_stack] */
-/* 126 */ NdrFcShort( 0x1a ), /* Offset= 26 (152) */
-/* 128 */
- 0x13, 0x0, /* FC_OP */
-/* 130 */ NdrFcShort( 0x2 ), /* Offset= 2 (132) */
-/* 132 */
- 0x2a, /* FC_ENCAPSULATED_UNION */
- 0x48, /* 72 */
-/* 134 */ NdrFcShort( 0x4 ), /* 4 */
-/* 136 */ NdrFcShort( 0x2 ), /* 2 */
-/* 138 */ NdrFcLong( 0x48746457 ), /* 1215587415 */
-/* 142 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
-/* 144 */ NdrFcLong( 0x52746457 ), /* 1383359575 */
-/* 148 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
-/* 150 */ NdrFcShort( 0xffff ), /* Offset= -1 (149) */
-/* 152 */ 0xb4, /* FC_USER_MARSHAL */
- 0x83, /* 131 */
-/* 154 */ NdrFcShort( 0x1 ), /* 1 */
-/* 156 */ NdrFcShort( 0x8 ), /* 8 */
-/* 158 */ NdrFcShort( 0x0 ), /* 0 */
-/* 160 */ NdrFcShort( 0xffe0 ), /* Offset= -32 (128) */
-/* 162 */
- 0x11, 0x4, /* FC_RP [alloced_on_stack] */
-/* 164 */ NdrFcShort( 0x2 ), /* Offset= 2 (166) */
-/* 166 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 168 */ NdrFcShort( 0x18 ), /* 24 */
-/* 170 */ NdrFcShort( 0x0 ), /* 0 */
-/* 172 */ NdrFcShort( 0x0 ), /* Offset= 0 (172) */
-/* 174 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 176 */ NdrFcShort( 0xffa4 ), /* Offset= -92 (84) */
-/* 178 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 180 */ NdrFcShort( 0xffa0 ), /* Offset= -96 (84) */
-/* 182 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 184 */ NdrFcShort( 0xff9c ), /* Offset= -100 (84) */
-/* 186 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-
- 0x0
- }
- };
-
-static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ] =
- {
-
- {
- BSTR_UserSize
- ,BSTR_UserMarshal
- ,BSTR_UserUnmarshal
- ,BSTR_UserFree
- },
- {
- HWND_UserSize
- ,HWND_UserMarshal
- ,HWND_UserUnmarshal
- ,HWND_UserFree
- }
-
- };
-
-
-
-/* Standard interface: __MIDL_itf_Accessible2_0000_0000, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */
-
-
-/* Object interface: IUnknown, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
-
-
-/* Object interface: IDispatch, ver. 0.0,
- GUID={0x00020400,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
-
-
-/* Object interface: IAccessible, ver. 0.0,
- GUID={0x618736e0,0x3c3d,0x11cf,{0x81,0x0c,0x00,0xaa,0x00,0x38,0x9b,0x71}} */
-
-
-/* Object interface: IAccessible2, ver. 0.0,
- GUID={0xE89F726E,0xC4F4,0x4c19,{0xBB,0x19,0xB6,0x47,0xD7,0xFA,0x84,0x78}} */
-
-#pragma code_seg(".orpc")
-static const unsigned short IAccessible2_FormatStringOffsetTable[] =
- {
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- 0,
- 38,
- 82,
- 132,
- 170,
- 208,
- 258,
- 308,
- 346,
- 384,
- 422,
- 460,
- 510,
- 560,
- 598,
- 636,
- 674,
- 712
- };
-
-static const MIDL_STUBLESS_PROXY_INFO IAccessible2_ProxyInfo =
- {
- &Object_StubDesc,
- Accessible2__MIDL_ProcFormatString.Format,
- &IAccessible2_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0
- };
-
-
-static const MIDL_SERVER_INFO IAccessible2_ServerInfo =
- {
- &Object_StubDesc,
- 0,
- Accessible2__MIDL_ProcFormatString.Format,
- &IAccessible2_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0,
- 0};
-CINTERFACE_PROXY_VTABLE(46) _IAccessible2ProxyVtbl =
-{
- &IAccessible2_ProxyInfo,
- &IID_IAccessible2,
- IUnknown_QueryInterface_Proxy,
- IUnknown_AddRef_Proxy,
- IUnknown_Release_Proxy ,
- 0 /* IDispatch::GetTypeInfoCount */ ,
- 0 /* IDispatch::GetTypeInfo */ ,
- 0 /* IDispatch::GetIDsOfNames */ ,
- 0 /* IDispatch_Invoke_Proxy */ ,
- 0 /* IAccessible::get_accParent */ ,
- 0 /* IAccessible::get_accChildCount */ ,
- 0 /* IAccessible::get_accChild */ ,
- 0 /* IAccessible::get_accName */ ,
- 0 /* IAccessible::get_accValue */ ,
- 0 /* IAccessible::get_accDescription */ ,
- 0 /* IAccessible::get_accRole */ ,
- 0 /* IAccessible::get_accState */ ,
- 0 /* IAccessible::get_accHelp */ ,
- 0 /* IAccessible::get_accHelpTopic */ ,
- 0 /* IAccessible::get_accKeyboardShortcut */ ,
- 0 /* IAccessible::get_accFocus */ ,
- 0 /* IAccessible::get_accSelection */ ,
- 0 /* IAccessible::get_accDefaultAction */ ,
- 0 /* IAccessible::accSelect */ ,
- 0 /* IAccessible::accLocation */ ,
- 0 /* IAccessible::accNavigate */ ,
- 0 /* IAccessible::accHitTest */ ,
- 0 /* IAccessible::accDoDefaultAction */ ,
- 0 /* IAccessible::put_accName */ ,
- 0 /* IAccessible::put_accValue */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::get_nRelations */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::get_relation */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::get_relations */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::role */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::scrollTo */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::scrollToPoint */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::get_groupPosition */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::get_states */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::get_extendedRole */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::get_localizedExtendedRole */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::get_nExtendedStates */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::get_extendedStates */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::get_localizedExtendedStates */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::get_uniqueID */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::get_windowHandle */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::get_indexInParent */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::get_locale */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::get_attributes */
-};
-
-
-static const PRPC_STUB_FUNCTION IAccessible2_table[] =
-{
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2
-};
-
-CInterfaceStubVtbl _IAccessible2StubVtbl =
-{
- &IID_IAccessible2,
- &IAccessible2_ServerInfo,
- 46,
- &IAccessible2_table[-3],
- CStdStubBuffer_DELEGATING_METHODS
-};
-
-static const MIDL_STUB_DESC Object_StubDesc =
- {
- 0,
- NdrOleAllocate,
- NdrOleFree,
- 0,
- 0,
- 0,
- 0,
- 0,
- Accessible2__MIDL_TypeFormatString.Format,
- 1, /* -error bounds_check flag */
- 0x50002, /* Ndr library version */
- 0,
- 0x700022b, /* MIDL Version 7.0.555 */
- 0,
- UserMarshalRoutines,
- 0, /* notify & notify_flag routine table */
- 0x1, /* MIDL flag */
- 0, /* cs routines */
- 0, /* proxy/server info */
- 0
- };
-
-const CInterfaceProxyVtbl * const _Accessible2_ProxyVtblList[] =
-{
- ( CInterfaceProxyVtbl *) &_IAccessible2ProxyVtbl,
- 0
-};
-
-const CInterfaceStubVtbl * const _Accessible2_StubVtblList[] =
-{
- ( CInterfaceStubVtbl *) &_IAccessible2StubVtbl,
- 0
-};
-
-PCInterfaceName const _Accessible2_InterfaceNamesList[] =
-{
- "IAccessible2",
- 0
-};
-
-const IID * const _Accessible2_BaseIIDList[] =
-{
- &IID_IAccessible,
- 0
-};
-
-
-#define _Accessible2_CHECK_IID(n) IID_GENERIC_CHECK_IID( _Accessible2, pIID, n)
-
-int __stdcall _Accessible2_IID_Lookup( const IID * pIID, int * pIndex )
-{
-
- if(!_Accessible2_CHECK_IID(0))
- {
- *pIndex = 0;
- return 1;
- }
-
- return 0;
-}
-
-const ExtendedProxyFileInfo Accessible2_ProxyFileInfo =
-{
- (PCInterfaceProxyVtblList *) & _Accessible2_ProxyVtblList,
- (PCInterfaceStubVtblList *) & _Accessible2_StubVtblList,
- (const PCInterfaceName * ) & _Accessible2_InterfaceNamesList,
- (const IID ** ) & _Accessible2_BaseIIDList,
- & _Accessible2_IID_Lookup,
- 1,
- 2,
- 0, /* table of [async_uuid] interfaces */
- 0, /* Filler1 */
- 0, /* Filler2 */
- 0 /* Filler3 */
-};
-#if _MSC_VER >= 1200
-#pragma warning(pop)
-#endif
-
-
-#endif /* defined(_M_AMD64)*/
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleAction.h b/src/3rdparty/iaccessible2/generated/amd64/AccessibleAction.h
deleted file mode 100644
index 8755505bf3..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleAction.h
+++ /dev/null
@@ -1,220 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:56 2012
- */
-/* Compiler settings for AccessibleAction.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-#ifndef COM_NO_WINDOWS_H
-#include "windows.h"
-#include "ole2.h"
-#endif /*COM_NO_WINDOWS_H*/
-
-#ifndef __AccessibleAction_h__
-#define __AccessibleAction_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifndef __IAccessibleAction_FWD_DEFINED__
-#define __IAccessibleAction_FWD_DEFINED__
-typedef interface IAccessibleAction IAccessibleAction;
-#endif /* __IAccessibleAction_FWD_DEFINED__ */
-
-
-/* header files for imported files */
-#include "objidl.h"
-#include "oaidl.h"
-#include "oleacc.h"
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#ifndef __IAccessibleAction_INTERFACE_DEFINED__
-#define __IAccessibleAction_INTERFACE_DEFINED__
-
-/* interface IAccessibleAction */
-/* [uuid][object] */
-
-
-EXTERN_C const IID IID_IAccessibleAction;
-
-#if defined(__cplusplus) && !defined(CINTERFACE)
-
- MIDL_INTERFACE("B70D9F59-3B5A-4dba-AB9E-22012F607DF5")
- IAccessibleAction : public IUnknown
- {
- public:
- virtual HRESULT STDMETHODCALLTYPE nActions(
- /* [retval][out] */ long *nActions) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE doAction(
- /* [in] */ long actionIndex) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_description(
- /* [in] */ long actionIndex,
- /* [retval][out] */ BSTR *description) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_keyBinding(
- /* [in] */ long actionIndex,
- /* [in] */ long nMaxBindings,
- /* [length_is][length_is][size_is][size_is][out] */ BSTR **keyBindings,
- /* [retval][out] */ long *nBindings) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_name(
- /* [in] */ long actionIndex,
- /* [retval][out] */ BSTR *name) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_localizedName(
- /* [in] */ long actionIndex,
- /* [retval][out] */ BSTR *localizedName) = 0;
-
- };
-
-#else /* C style interface */
-
- typedef struct IAccessibleActionVtbl
- {
- BEGIN_INTERFACE
-
- HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
- IAccessibleAction * This,
- /* [in] */ REFIID riid,
- /* [annotation][iid_is][out] */
- __RPC__deref_out void **ppvObject);
-
- ULONG ( STDMETHODCALLTYPE *AddRef )(
- IAccessibleAction * This);
-
- ULONG ( STDMETHODCALLTYPE *Release )(
- IAccessibleAction * This);
-
- HRESULT ( STDMETHODCALLTYPE *nActions )(
- IAccessibleAction * This,
- /* [retval][out] */ long *nActions);
-
- HRESULT ( STDMETHODCALLTYPE *doAction )(
- IAccessibleAction * This,
- /* [in] */ long actionIndex);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_description )(
- IAccessibleAction * This,
- /* [in] */ long actionIndex,
- /* [retval][out] */ BSTR *description);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_keyBinding )(
- IAccessibleAction * This,
- /* [in] */ long actionIndex,
- /* [in] */ long nMaxBindings,
- /* [length_is][length_is][size_is][size_is][out] */ BSTR **keyBindings,
- /* [retval][out] */ long *nBindings);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_name )(
- IAccessibleAction * This,
- /* [in] */ long actionIndex,
- /* [retval][out] */ BSTR *name);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedName )(
- IAccessibleAction * This,
- /* [in] */ long actionIndex,
- /* [retval][out] */ BSTR *localizedName);
-
- END_INTERFACE
- } IAccessibleActionVtbl;
-
- interface IAccessibleAction
- {
- CONST_VTBL struct IAccessibleActionVtbl *lpVtbl;
- };
-
-
-
-#ifdef COBJMACROS
-
-
-#define IAccessibleAction_QueryInterface(This,riid,ppvObject) \
- ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
-
-#define IAccessibleAction_AddRef(This) \
- ( (This)->lpVtbl -> AddRef(This) )
-
-#define IAccessibleAction_Release(This) \
- ( (This)->lpVtbl -> Release(This) )
-
-
-#define IAccessibleAction_nActions(This,nActions) \
- ( (This)->lpVtbl -> nActions(This,nActions) )
-
-#define IAccessibleAction_doAction(This,actionIndex) \
- ( (This)->lpVtbl -> doAction(This,actionIndex) )
-
-#define IAccessibleAction_get_description(This,actionIndex,description) \
- ( (This)->lpVtbl -> get_description(This,actionIndex,description) )
-
-#define IAccessibleAction_get_keyBinding(This,actionIndex,nMaxBindings,keyBindings,nBindings) \
- ( (This)->lpVtbl -> get_keyBinding(This,actionIndex,nMaxBindings,keyBindings,nBindings) )
-
-#define IAccessibleAction_get_name(This,actionIndex,name) \
- ( (This)->lpVtbl -> get_name(This,actionIndex,name) )
-
-#define IAccessibleAction_get_localizedName(This,actionIndex,localizedName) \
- ( (This)->lpVtbl -> get_localizedName(This,actionIndex,localizedName) )
-
-#endif /* COBJMACROS */
-
-
-#endif /* C style interface */
-
-
-
-
-#endif /* __IAccessibleAction_INTERFACE_DEFINED__ */
-
-
-/* Additional Prototypes for ALL interfaces */
-
-unsigned long __RPC_USER BSTR_UserSize( unsigned long *, unsigned long , BSTR * );
-unsigned char * __RPC_USER BSTR_UserMarshal( unsigned long *, unsigned char *, BSTR * );
-unsigned char * __RPC_USER BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * );
-void __RPC_USER BSTR_UserFree( unsigned long *, BSTR * );
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleAction_i.c b/src/3rdparty/iaccessible2/generated/amd64/AccessibleAction_i.c
deleted file mode 100644
index a4d754b68d..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleAction_i.c
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
-
-/* link this file in with the server and any clients */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:56 2012
- */
-/* Compiler settings for AccessibleAction.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#include <rpc.h>
-#include <rpcndr.h>
-
-#ifdef _MIDL_USE_GUIDDEF_
-
-#ifndef INITGUID
-#define INITGUID
-#include <guiddef.h>
-#undef INITGUID
-#else
-#include <guiddef.h>
-#endif
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
-
-#else // !_MIDL_USE_GUIDDEF_
-
-#ifndef __IID_DEFINED__
-#define __IID_DEFINED__
-
-typedef struct _IID
-{
- unsigned long x;
- unsigned short s1;
- unsigned short s2;
- unsigned char c[8];
-} IID;
-
-#endif // __IID_DEFINED__
-
-#ifndef CLSID_DEFINED
-#define CLSID_DEFINED
-typedef IID CLSID;
-#endif // CLSID_DEFINED
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
-
-#endif !_MIDL_USE_GUIDDEF_
-
-MIDL_DEFINE_GUID(IID, IID_IAccessibleAction,0xB70D9F59,0x3B5A,0x4dba,0xAB,0x9E,0x22,0x01,0x2F,0x60,0x7D,0xF5);
-
-#undef MIDL_DEFINE_GUID
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleAction_p.c b/src/3rdparty/iaccessible2/generated/amd64/AccessibleAction_p.c
deleted file mode 100644
index 68eeac00b4..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleAction_p.c
+++ /dev/null
@@ -1,557 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the proxy stub code */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:56 2012
- */
-/* Compiler settings for AccessibleAction.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#if defined(_M_AMD64)
-
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-#if _MSC_VER >= 1200
-#pragma warning(push)
-#endif
-
-#pragma warning( disable: 4211 ) /* redefine extern to static */
-#pragma warning( disable: 4232 ) /* dllimport identity*/
-#pragma warning( disable: 4024 ) /* array to pointer mapping*/
-#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */
-
-#define USE_STUBLESS_PROXY
-
-
-/* verify that the <rpcproxy.h> version is high enough to compile this file*/
-#ifndef __REDQ_RPCPROXY_H_VERSION__
-#define __REQUIRED_RPCPROXY_H_VERSION__ 475
-#endif
-
-
-#include "rpcproxy.h"
-#ifndef __RPCPROXY_H_VERSION__
-#error this stub requires an updated version of <rpcproxy.h>
-#endif /* __RPCPROXY_H_VERSION__ */
-
-
-#include "AccessibleAction.h"
-
-#define TYPE_FORMAT_STRING_SIZE 77
-#define PROC_FORMAT_STRING_SIZE 265
-#define EXPR_FORMAT_STRING_SIZE 1
-#define TRANSMIT_AS_TABLE_SIZE 0
-#define WIRE_MARSHAL_TABLE_SIZE 1
-
-typedef struct _AccessibleAction_MIDL_TYPE_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
- } AccessibleAction_MIDL_TYPE_FORMAT_STRING;
-
-typedef struct _AccessibleAction_MIDL_PROC_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
- } AccessibleAction_MIDL_PROC_FORMAT_STRING;
-
-typedef struct _AccessibleAction_MIDL_EXPR_FORMAT_STRING
- {
- long Pad;
- unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
- } AccessibleAction_MIDL_EXPR_FORMAT_STRING;
-
-
-static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
-{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
-
-
-extern const AccessibleAction_MIDL_TYPE_FORMAT_STRING AccessibleAction__MIDL_TypeFormatString;
-extern const AccessibleAction_MIDL_PROC_FORMAT_STRING AccessibleAction__MIDL_ProcFormatString;
-extern const AccessibleAction_MIDL_EXPR_FORMAT_STRING AccessibleAction__MIDL_ExprFormatString;
-
-
-extern const MIDL_STUB_DESC Object_StubDesc;
-
-
-extern const MIDL_SERVER_INFO IAccessibleAction_ServerInfo;
-extern const MIDL_STUBLESS_PROXY_INFO IAccessibleAction_ProxyInfo;
-
-
-extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ];
-
-#if !defined(__RPC_WIN64__)
-#error Invalid build platform for this stub.
-#endif
-
-static const AccessibleAction_MIDL_PROC_FORMAT_STRING AccessibleAction__MIDL_ProcFormatString =
- {
- 0,
- {
-
- /* Procedure nActions */
-
- 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 2 */ NdrFcLong( 0x0 ), /* 0 */
-/* 6 */ NdrFcShort( 0x3 ), /* 3 */
-/* 8 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 10 */ NdrFcShort( 0x0 ), /* 0 */
-/* 12 */ NdrFcShort( 0x24 ), /* 36 */
-/* 14 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 16 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 18 */ NdrFcShort( 0x0 ), /* 0 */
-/* 20 */ NdrFcShort( 0x0 ), /* 0 */
-/* 22 */ NdrFcShort( 0x0 ), /* 0 */
-/* 24 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter nActions */
-
-/* 26 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 28 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 30 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 32 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 34 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 36 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure doAction */
-
-/* 38 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 40 */ NdrFcLong( 0x0 ), /* 0 */
-/* 44 */ NdrFcShort( 0x4 ), /* 4 */
-/* 46 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 48 */ NdrFcShort( 0x8 ), /* 8 */
-/* 50 */ NdrFcShort( 0x8 ), /* 8 */
-/* 52 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 54 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 56 */ NdrFcShort( 0x0 ), /* 0 */
-/* 58 */ NdrFcShort( 0x0 ), /* 0 */
-/* 60 */ NdrFcShort( 0x0 ), /* 0 */
-/* 62 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter actionIndex */
-
-/* 64 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 66 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 68 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 70 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 72 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 74 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_description */
-
-/* 76 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 78 */ NdrFcLong( 0x0 ), /* 0 */
-/* 82 */ NdrFcShort( 0x5 ), /* 5 */
-/* 84 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 86 */ NdrFcShort( 0x8 ), /* 8 */
-/* 88 */ NdrFcShort( 0x8 ), /* 8 */
-/* 90 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 92 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 94 */ NdrFcShort( 0x1 ), /* 1 */
-/* 96 */ NdrFcShort( 0x0 ), /* 0 */
-/* 98 */ NdrFcShort( 0x0 ), /* 0 */
-/* 100 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter actionIndex */
-
-/* 102 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 104 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 106 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter description */
-
-/* 108 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 110 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 112 */ NdrFcShort( 0x24 ), /* Type Offset=36 */
-
- /* Return value */
-
-/* 114 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 116 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 118 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_keyBinding */
-
-/* 120 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 122 */ NdrFcLong( 0x0 ), /* 0 */
-/* 126 */ NdrFcShort( 0x6 ), /* 6 */
-/* 128 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */
-/* 130 */ NdrFcShort( 0x10 ), /* 16 */
-/* 132 */ NdrFcShort( 0x24 ), /* 36 */
-/* 134 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x5, /* 5 */
-/* 136 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 138 */ NdrFcShort( 0x1 ), /* 1 */
-/* 140 */ NdrFcShort( 0x0 ), /* 0 */
-/* 142 */ NdrFcShort( 0x0 ), /* 0 */
-/* 144 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter actionIndex */
-
-/* 146 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 148 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 150 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter nMaxBindings */
-
-/* 152 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 154 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 156 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter keyBindings */
-
-/* 158 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
-/* 160 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 162 */ NdrFcShort( 0x2e ), /* Type Offset=46 */
-
- /* Parameter nBindings */
-
-/* 164 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 166 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 168 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 170 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 172 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
-/* 174 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_name */
-
-/* 176 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 178 */ NdrFcLong( 0x0 ), /* 0 */
-/* 182 */ NdrFcShort( 0x7 ), /* 7 */
-/* 184 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 186 */ NdrFcShort( 0x8 ), /* 8 */
-/* 188 */ NdrFcShort( 0x8 ), /* 8 */
-/* 190 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 192 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 194 */ NdrFcShort( 0x1 ), /* 1 */
-/* 196 */ NdrFcShort( 0x0 ), /* 0 */
-/* 198 */ NdrFcShort( 0x0 ), /* 0 */
-/* 200 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter actionIndex */
-
-/* 202 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 204 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 206 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter name */
-
-/* 208 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 210 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 212 */ NdrFcShort( 0x24 ), /* Type Offset=36 */
-
- /* Return value */
-
-/* 214 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 216 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 218 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_localizedName */
-
-/* 220 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 222 */ NdrFcLong( 0x0 ), /* 0 */
-/* 226 */ NdrFcShort( 0x8 ), /* 8 */
-/* 228 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 230 */ NdrFcShort( 0x8 ), /* 8 */
-/* 232 */ NdrFcShort( 0x8 ), /* 8 */
-/* 234 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 236 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 238 */ NdrFcShort( 0x1 ), /* 1 */
-/* 240 */ NdrFcShort( 0x0 ), /* 0 */
-/* 242 */ NdrFcShort( 0x0 ), /* 0 */
-/* 244 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter actionIndex */
-
-/* 246 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 248 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 250 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter localizedName */
-
-/* 252 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 254 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 256 */ NdrFcShort( 0x24 ), /* Type Offset=36 */
-
- /* Return value */
-
-/* 258 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 260 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 262 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- 0x0
- }
- };
-
-static const AccessibleAction_MIDL_TYPE_FORMAT_STRING AccessibleAction__MIDL_TypeFormatString =
- {
- 0,
- {
- NdrFcShort( 0x0 ), /* 0 */
-/* 2 */
- 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
-/* 4 */ 0x8, /* FC_LONG */
- 0x5c, /* FC_PAD */
-/* 6 */
- 0x11, 0x4, /* FC_RP [alloced_on_stack] */
-/* 8 */ NdrFcShort( 0x1c ), /* Offset= 28 (36) */
-/* 10 */
- 0x13, 0x0, /* FC_OP */
-/* 12 */ NdrFcShort( 0xe ), /* Offset= 14 (26) */
-/* 14 */
- 0x1b, /* FC_CARRAY */
- 0x1, /* 1 */
-/* 16 */ NdrFcShort( 0x2 ), /* 2 */
-/* 18 */ 0x9, /* Corr desc: FC_ULONG */
- 0x0, /* */
-/* 20 */ NdrFcShort( 0xfffc ), /* -4 */
-/* 22 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 24 */ 0x6, /* FC_SHORT */
- 0x5b, /* FC_END */
-/* 26 */
- 0x17, /* FC_CSTRUCT */
- 0x3, /* 3 */
-/* 28 */ NdrFcShort( 0x8 ), /* 8 */
-/* 30 */ NdrFcShort( 0xfff0 ), /* Offset= -16 (14) */
-/* 32 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 34 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 36 */ 0xb4, /* FC_USER_MARSHAL */
- 0x83, /* 131 */
-/* 38 */ NdrFcShort( 0x0 ), /* 0 */
-/* 40 */ NdrFcShort( 0x8 ), /* 8 */
-/* 42 */ NdrFcShort( 0x0 ), /* 0 */
-/* 44 */ NdrFcShort( 0xffde ), /* Offset= -34 (10) */
-/* 46 */
- 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */
-/* 48 */ NdrFcShort( 0x2 ), /* Offset= 2 (50) */
-/* 50 */
- 0x13, 0x0, /* FC_OP */
-/* 52 */ NdrFcShort( 0x2 ), /* Offset= 2 (54) */
-/* 54 */
- 0x21, /* FC_BOGUS_ARRAY */
- 0x3, /* 3 */
-/* 56 */ NdrFcShort( 0x0 ), /* 0 */
-/* 58 */ 0x28, /* Corr desc: parameter, FC_LONG */
- 0x0, /* */
-/* 60 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 62 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 64 */ 0x28, /* Corr desc: parameter, FC_LONG */
- 0x54, /* FC_DEREFERENCE */
-/* 66 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 68 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 70 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 72 */ NdrFcShort( 0xffdc ), /* Offset= -36 (36) */
-/* 74 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-
- 0x0
- }
- };
-
-static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ] =
- {
-
- {
- BSTR_UserSize
- ,BSTR_UserMarshal
- ,BSTR_UserUnmarshal
- ,BSTR_UserFree
- }
-
- };
-
-
-
-/* Object interface: IUnknown, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
-
-
-/* Object interface: IAccessibleAction, ver. 0.0,
- GUID={0xB70D9F59,0x3B5A,0x4dba,{0xAB,0x9E,0x22,0x01,0x2F,0x60,0x7D,0xF5}} */
-
-#pragma code_seg(".orpc")
-static const unsigned short IAccessibleAction_FormatStringOffsetTable[] =
- {
- 0,
- 38,
- 76,
- 120,
- 176,
- 220
- };
-
-static const MIDL_STUBLESS_PROXY_INFO IAccessibleAction_ProxyInfo =
- {
- &Object_StubDesc,
- AccessibleAction__MIDL_ProcFormatString.Format,
- &IAccessibleAction_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0
- };
-
-
-static const MIDL_SERVER_INFO IAccessibleAction_ServerInfo =
- {
- &Object_StubDesc,
- 0,
- AccessibleAction__MIDL_ProcFormatString.Format,
- &IAccessibleAction_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0,
- 0};
-CINTERFACE_PROXY_VTABLE(9) _IAccessibleActionProxyVtbl =
-{
- &IAccessibleAction_ProxyInfo,
- &IID_IAccessibleAction,
- IUnknown_QueryInterface_Proxy,
- IUnknown_AddRef_Proxy,
- IUnknown_Release_Proxy ,
- (void *) (INT_PTR) -1 /* IAccessibleAction::nActions */ ,
- (void *) (INT_PTR) -1 /* IAccessibleAction::doAction */ ,
- (void *) (INT_PTR) -1 /* IAccessibleAction::get_description */ ,
- (void *) (INT_PTR) -1 /* IAccessibleAction::get_keyBinding */ ,
- (void *) (INT_PTR) -1 /* IAccessibleAction::get_name */ ,
- (void *) (INT_PTR) -1 /* IAccessibleAction::get_localizedName */
-};
-
-const CInterfaceStubVtbl _IAccessibleActionStubVtbl =
-{
- &IID_IAccessibleAction,
- &IAccessibleAction_ServerInfo,
- 9,
- 0, /* pure interpreted */
- CStdStubBuffer_METHODS
-};
-
-static const MIDL_STUB_DESC Object_StubDesc =
- {
- 0,
- NdrOleAllocate,
- NdrOleFree,
- 0,
- 0,
- 0,
- 0,
- 0,
- AccessibleAction__MIDL_TypeFormatString.Format,
- 1, /* -error bounds_check flag */
- 0x50002, /* Ndr library version */
- 0,
- 0x700022b, /* MIDL Version 7.0.555 */
- 0,
- UserMarshalRoutines,
- 0, /* notify & notify_flag routine table */
- 0x1, /* MIDL flag */
- 0, /* cs routines */
- 0, /* proxy/server info */
- 0
- };
-
-const CInterfaceProxyVtbl * const _AccessibleAction_ProxyVtblList[] =
-{
- ( CInterfaceProxyVtbl *) &_IAccessibleActionProxyVtbl,
- 0
-};
-
-const CInterfaceStubVtbl * const _AccessibleAction_StubVtblList[] =
-{
- ( CInterfaceStubVtbl *) &_IAccessibleActionStubVtbl,
- 0
-};
-
-PCInterfaceName const _AccessibleAction_InterfaceNamesList[] =
-{
- "IAccessibleAction",
- 0
-};
-
-
-#define _AccessibleAction_CHECK_IID(n) IID_GENERIC_CHECK_IID( _AccessibleAction, pIID, n)
-
-int __stdcall _AccessibleAction_IID_Lookup( const IID * pIID, int * pIndex )
-{
-
- if(!_AccessibleAction_CHECK_IID(0))
- {
- *pIndex = 0;
- return 1;
- }
-
- return 0;
-}
-
-const ExtendedProxyFileInfo AccessibleAction_ProxyFileInfo =
-{
- (PCInterfaceProxyVtblList *) & _AccessibleAction_ProxyVtblList,
- (PCInterfaceStubVtblList *) & _AccessibleAction_StubVtblList,
- (const PCInterfaceName * ) & _AccessibleAction_InterfaceNamesList,
- 0, /* no delegation */
- & _AccessibleAction_IID_Lookup,
- 1,
- 2,
- 0, /* table of [async_uuid] interfaces */
- 0, /* Filler1 */
- 0, /* Filler2 */
- 0 /* Filler3 */
-};
-#if _MSC_VER >= 1200
-#pragma warning(pop)
-#endif
-
-
-#endif /* defined(_M_AMD64)*/
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleApplication.h b/src/3rdparty/iaccessible2/generated/amd64/AccessibleApplication.h
deleted file mode 100644
index 7e901563e9..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleApplication.h
+++ /dev/null
@@ -1,188 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:57 2012
- */
-/* Compiler settings for AccessibleApplication.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-#ifndef COM_NO_WINDOWS_H
-#include "windows.h"
-#include "ole2.h"
-#endif /*COM_NO_WINDOWS_H*/
-
-#ifndef __AccessibleApplication_h__
-#define __AccessibleApplication_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifndef __IAccessibleApplication_FWD_DEFINED__
-#define __IAccessibleApplication_FWD_DEFINED__
-typedef interface IAccessibleApplication IAccessibleApplication;
-#endif /* __IAccessibleApplication_FWD_DEFINED__ */
-
-
-/* header files for imported files */
-#include "objidl.h"
-#include "oaidl.h"
-#include "oleacc.h"
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#ifndef __IAccessibleApplication_INTERFACE_DEFINED__
-#define __IAccessibleApplication_INTERFACE_DEFINED__
-
-/* interface IAccessibleApplication */
-/* [uuid][object] */
-
-
-EXTERN_C const IID IID_IAccessibleApplication;
-
-#if defined(__cplusplus) && !defined(CINTERFACE)
-
- MIDL_INTERFACE("D49DED83-5B25-43F4-9B95-93B44595979E")
- IAccessibleApplication : public IUnknown
- {
- public:
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_appName(
- /* [retval][out] */ BSTR *name) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_appVersion(
- /* [retval][out] */ BSTR *version) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_toolkitName(
- /* [retval][out] */ BSTR *name) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_toolkitVersion(
- /* [retval][out] */ BSTR *version) = 0;
-
- };
-
-#else /* C style interface */
-
- typedef struct IAccessibleApplicationVtbl
- {
- BEGIN_INTERFACE
-
- HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
- IAccessibleApplication * This,
- /* [in] */ REFIID riid,
- /* [annotation][iid_is][out] */
- __RPC__deref_out void **ppvObject);
-
- ULONG ( STDMETHODCALLTYPE *AddRef )(
- IAccessibleApplication * This);
-
- ULONG ( STDMETHODCALLTYPE *Release )(
- IAccessibleApplication * This);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_appName )(
- IAccessibleApplication * This,
- /* [retval][out] */ BSTR *name);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_appVersion )(
- IAccessibleApplication * This,
- /* [retval][out] */ BSTR *version);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_toolkitName )(
- IAccessibleApplication * This,
- /* [retval][out] */ BSTR *name);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_toolkitVersion )(
- IAccessibleApplication * This,
- /* [retval][out] */ BSTR *version);
-
- END_INTERFACE
- } IAccessibleApplicationVtbl;
-
- interface IAccessibleApplication
- {
- CONST_VTBL struct IAccessibleApplicationVtbl *lpVtbl;
- };
-
-
-
-#ifdef COBJMACROS
-
-
-#define IAccessibleApplication_QueryInterface(This,riid,ppvObject) \
- ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
-
-#define IAccessibleApplication_AddRef(This) \
- ( (This)->lpVtbl -> AddRef(This) )
-
-#define IAccessibleApplication_Release(This) \
- ( (This)->lpVtbl -> Release(This) )
-
-
-#define IAccessibleApplication_get_appName(This,name) \
- ( (This)->lpVtbl -> get_appName(This,name) )
-
-#define IAccessibleApplication_get_appVersion(This,version) \
- ( (This)->lpVtbl -> get_appVersion(This,version) )
-
-#define IAccessibleApplication_get_toolkitName(This,name) \
- ( (This)->lpVtbl -> get_toolkitName(This,name) )
-
-#define IAccessibleApplication_get_toolkitVersion(This,version) \
- ( (This)->lpVtbl -> get_toolkitVersion(This,version) )
-
-#endif /* COBJMACROS */
-
-
-#endif /* C style interface */
-
-
-
-
-#endif /* __IAccessibleApplication_INTERFACE_DEFINED__ */
-
-
-/* Additional Prototypes for ALL interfaces */
-
-unsigned long __RPC_USER BSTR_UserSize( unsigned long *, unsigned long , BSTR * );
-unsigned char * __RPC_USER BSTR_UserMarshal( unsigned long *, unsigned char *, BSTR * );
-unsigned char * __RPC_USER BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * );
-void __RPC_USER BSTR_UserFree( unsigned long *, BSTR * );
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleApplication_i.c b/src/3rdparty/iaccessible2/generated/amd64/AccessibleApplication_i.c
deleted file mode 100644
index b50ae8a2c6..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleApplication_i.c
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
-
-/* link this file in with the server and any clients */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:57 2012
- */
-/* Compiler settings for AccessibleApplication.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#include <rpc.h>
-#include <rpcndr.h>
-
-#ifdef _MIDL_USE_GUIDDEF_
-
-#ifndef INITGUID
-#define INITGUID
-#include <guiddef.h>
-#undef INITGUID
-#else
-#include <guiddef.h>
-#endif
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
-
-#else // !_MIDL_USE_GUIDDEF_
-
-#ifndef __IID_DEFINED__
-#define __IID_DEFINED__
-
-typedef struct _IID
-{
- unsigned long x;
- unsigned short s1;
- unsigned short s2;
- unsigned char c[8];
-} IID;
-
-#endif // __IID_DEFINED__
-
-#ifndef CLSID_DEFINED
-#define CLSID_DEFINED
-typedef IID CLSID;
-#endif // CLSID_DEFINED
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
-
-#endif !_MIDL_USE_GUIDDEF_
-
-MIDL_DEFINE_GUID(IID, IID_IAccessibleApplication,0xD49DED83,0x5B25,0x43F4,0x9B,0x95,0x93,0xB4,0x45,0x95,0x97,0x9E);
-
-#undef MIDL_DEFINE_GUID
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleApplication_p.c b/src/3rdparty/iaccessible2/generated/amd64/AccessibleApplication_p.c
deleted file mode 100644
index 84d7e30344..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleApplication_p.c
+++ /dev/null
@@ -1,420 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the proxy stub code */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:57 2012
- */
-/* Compiler settings for AccessibleApplication.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#if defined(_M_AMD64)
-
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-#if _MSC_VER >= 1200
-#pragma warning(push)
-#endif
-
-#pragma warning( disable: 4211 ) /* redefine extern to static */
-#pragma warning( disable: 4232 ) /* dllimport identity*/
-#pragma warning( disable: 4024 ) /* array to pointer mapping*/
-#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */
-
-#define USE_STUBLESS_PROXY
-
-
-/* verify that the <rpcproxy.h> version is high enough to compile this file*/
-#ifndef __REDQ_RPCPROXY_H_VERSION__
-#define __REQUIRED_RPCPROXY_H_VERSION__ 475
-#endif
-
-
-#include "rpcproxy.h"
-#ifndef __RPCPROXY_H_VERSION__
-#error this stub requires an updated version of <rpcproxy.h>
-#endif /* __RPCPROXY_H_VERSION__ */
-
-
-#include "AccessibleApplication.h"
-
-#define TYPE_FORMAT_STRING_SIZE 43
-#define PROC_FORMAT_STRING_SIZE 153
-#define EXPR_FORMAT_STRING_SIZE 1
-#define TRANSMIT_AS_TABLE_SIZE 0
-#define WIRE_MARSHAL_TABLE_SIZE 1
-
-typedef struct _AccessibleApplication_MIDL_TYPE_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
- } AccessibleApplication_MIDL_TYPE_FORMAT_STRING;
-
-typedef struct _AccessibleApplication_MIDL_PROC_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
- } AccessibleApplication_MIDL_PROC_FORMAT_STRING;
-
-typedef struct _AccessibleApplication_MIDL_EXPR_FORMAT_STRING
- {
- long Pad;
- unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
- } AccessibleApplication_MIDL_EXPR_FORMAT_STRING;
-
-
-static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
-{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
-
-
-extern const AccessibleApplication_MIDL_TYPE_FORMAT_STRING AccessibleApplication__MIDL_TypeFormatString;
-extern const AccessibleApplication_MIDL_PROC_FORMAT_STRING AccessibleApplication__MIDL_ProcFormatString;
-extern const AccessibleApplication_MIDL_EXPR_FORMAT_STRING AccessibleApplication__MIDL_ExprFormatString;
-
-
-extern const MIDL_STUB_DESC Object_StubDesc;
-
-
-extern const MIDL_SERVER_INFO IAccessibleApplication_ServerInfo;
-extern const MIDL_STUBLESS_PROXY_INFO IAccessibleApplication_ProxyInfo;
-
-
-extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ];
-
-#if !defined(__RPC_WIN64__)
-#error Invalid build platform for this stub.
-#endif
-
-static const AccessibleApplication_MIDL_PROC_FORMAT_STRING AccessibleApplication__MIDL_ProcFormatString =
- {
- 0,
- {
-
- /* Procedure get_appName */
-
- 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 2 */ NdrFcLong( 0x0 ), /* 0 */
-/* 6 */ NdrFcShort( 0x3 ), /* 3 */
-/* 8 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 10 */ NdrFcShort( 0x0 ), /* 0 */
-/* 12 */ NdrFcShort( 0x8 ), /* 8 */
-/* 14 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 16 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 18 */ NdrFcShort( 0x1 ), /* 1 */
-/* 20 */ NdrFcShort( 0x0 ), /* 0 */
-/* 22 */ NdrFcShort( 0x0 ), /* 0 */
-/* 24 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter name */
-
-/* 26 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 28 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 30 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
-
- /* Return value */
-
-/* 32 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 34 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 36 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_appVersion */
-
-/* 38 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 40 */ NdrFcLong( 0x0 ), /* 0 */
-/* 44 */ NdrFcShort( 0x4 ), /* 4 */
-/* 46 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 48 */ NdrFcShort( 0x0 ), /* 0 */
-/* 50 */ NdrFcShort( 0x8 ), /* 8 */
-/* 52 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 54 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 56 */ NdrFcShort( 0x1 ), /* 1 */
-/* 58 */ NdrFcShort( 0x0 ), /* 0 */
-/* 60 */ NdrFcShort( 0x0 ), /* 0 */
-/* 62 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter version */
-
-/* 64 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 66 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 68 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
-
- /* Return value */
-
-/* 70 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 72 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 74 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_toolkitName */
-
-/* 76 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 78 */ NdrFcLong( 0x0 ), /* 0 */
-/* 82 */ NdrFcShort( 0x5 ), /* 5 */
-/* 84 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 86 */ NdrFcShort( 0x0 ), /* 0 */
-/* 88 */ NdrFcShort( 0x8 ), /* 8 */
-/* 90 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 92 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 94 */ NdrFcShort( 0x1 ), /* 1 */
-/* 96 */ NdrFcShort( 0x0 ), /* 0 */
-/* 98 */ NdrFcShort( 0x0 ), /* 0 */
-/* 100 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter name */
-
-/* 102 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 104 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 106 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
-
- /* Return value */
-
-/* 108 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 110 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 112 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_toolkitVersion */
-
-/* 114 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 116 */ NdrFcLong( 0x0 ), /* 0 */
-/* 120 */ NdrFcShort( 0x6 ), /* 6 */
-/* 122 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 124 */ NdrFcShort( 0x0 ), /* 0 */
-/* 126 */ NdrFcShort( 0x8 ), /* 8 */
-/* 128 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 130 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 132 */ NdrFcShort( 0x1 ), /* 1 */
-/* 134 */ NdrFcShort( 0x0 ), /* 0 */
-/* 136 */ NdrFcShort( 0x0 ), /* 0 */
-/* 138 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter version */
-
-/* 140 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 142 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 144 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
-
- /* Return value */
-
-/* 146 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 148 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 150 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- 0x0
- }
- };
-
-static const AccessibleApplication_MIDL_TYPE_FORMAT_STRING AccessibleApplication__MIDL_TypeFormatString =
- {
- 0,
- {
- NdrFcShort( 0x0 ), /* 0 */
-/* 2 */
- 0x11, 0x4, /* FC_RP [alloced_on_stack] */
-/* 4 */ NdrFcShort( 0x1c ), /* Offset= 28 (32) */
-/* 6 */
- 0x13, 0x0, /* FC_OP */
-/* 8 */ NdrFcShort( 0xe ), /* Offset= 14 (22) */
-/* 10 */
- 0x1b, /* FC_CARRAY */
- 0x1, /* 1 */
-/* 12 */ NdrFcShort( 0x2 ), /* 2 */
-/* 14 */ 0x9, /* Corr desc: FC_ULONG */
- 0x0, /* */
-/* 16 */ NdrFcShort( 0xfffc ), /* -4 */
-/* 18 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 20 */ 0x6, /* FC_SHORT */
- 0x5b, /* FC_END */
-/* 22 */
- 0x17, /* FC_CSTRUCT */
- 0x3, /* 3 */
-/* 24 */ NdrFcShort( 0x8 ), /* 8 */
-/* 26 */ NdrFcShort( 0xfff0 ), /* Offset= -16 (10) */
-/* 28 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 30 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 32 */ 0xb4, /* FC_USER_MARSHAL */
- 0x83, /* 131 */
-/* 34 */ NdrFcShort( 0x0 ), /* 0 */
-/* 36 */ NdrFcShort( 0x8 ), /* 8 */
-/* 38 */ NdrFcShort( 0x0 ), /* 0 */
-/* 40 */ NdrFcShort( 0xffde ), /* Offset= -34 (6) */
-
- 0x0
- }
- };
-
-static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ] =
- {
-
- {
- BSTR_UserSize
- ,BSTR_UserMarshal
- ,BSTR_UserUnmarshal
- ,BSTR_UserFree
- }
-
- };
-
-
-
-/* Object interface: IUnknown, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
-
-
-/* Object interface: IAccessibleApplication, ver. 0.0,
- GUID={0xD49DED83,0x5B25,0x43F4,{0x9B,0x95,0x93,0xB4,0x45,0x95,0x97,0x9E}} */
-
-#pragma code_seg(".orpc")
-static const unsigned short IAccessibleApplication_FormatStringOffsetTable[] =
- {
- 0,
- 38,
- 76,
- 114
- };
-
-static const MIDL_STUBLESS_PROXY_INFO IAccessibleApplication_ProxyInfo =
- {
- &Object_StubDesc,
- AccessibleApplication__MIDL_ProcFormatString.Format,
- &IAccessibleApplication_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0
- };
-
-
-static const MIDL_SERVER_INFO IAccessibleApplication_ServerInfo =
- {
- &Object_StubDesc,
- 0,
- AccessibleApplication__MIDL_ProcFormatString.Format,
- &IAccessibleApplication_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0,
- 0};
-CINTERFACE_PROXY_VTABLE(7) _IAccessibleApplicationProxyVtbl =
-{
- &IAccessibleApplication_ProxyInfo,
- &IID_IAccessibleApplication,
- IUnknown_QueryInterface_Proxy,
- IUnknown_AddRef_Proxy,
- IUnknown_Release_Proxy ,
- (void *) (INT_PTR) -1 /* IAccessibleApplication::get_appName */ ,
- (void *) (INT_PTR) -1 /* IAccessibleApplication::get_appVersion */ ,
- (void *) (INT_PTR) -1 /* IAccessibleApplication::get_toolkitName */ ,
- (void *) (INT_PTR) -1 /* IAccessibleApplication::get_toolkitVersion */
-};
-
-const CInterfaceStubVtbl _IAccessibleApplicationStubVtbl =
-{
- &IID_IAccessibleApplication,
- &IAccessibleApplication_ServerInfo,
- 7,
- 0, /* pure interpreted */
- CStdStubBuffer_METHODS
-};
-
-static const MIDL_STUB_DESC Object_StubDesc =
- {
- 0,
- NdrOleAllocate,
- NdrOleFree,
- 0,
- 0,
- 0,
- 0,
- 0,
- AccessibleApplication__MIDL_TypeFormatString.Format,
- 1, /* -error bounds_check flag */
- 0x50002, /* Ndr library version */
- 0,
- 0x700022b, /* MIDL Version 7.0.555 */
- 0,
- UserMarshalRoutines,
- 0, /* notify & notify_flag routine table */
- 0x1, /* MIDL flag */
- 0, /* cs routines */
- 0, /* proxy/server info */
- 0
- };
-
-const CInterfaceProxyVtbl * const _AccessibleApplication_ProxyVtblList[] =
-{
- ( CInterfaceProxyVtbl *) &_IAccessibleApplicationProxyVtbl,
- 0
-};
-
-const CInterfaceStubVtbl * const _AccessibleApplication_StubVtblList[] =
-{
- ( CInterfaceStubVtbl *) &_IAccessibleApplicationStubVtbl,
- 0
-};
-
-PCInterfaceName const _AccessibleApplication_InterfaceNamesList[] =
-{
- "IAccessibleApplication",
- 0
-};
-
-
-#define _AccessibleApplication_CHECK_IID(n) IID_GENERIC_CHECK_IID( _AccessibleApplication, pIID, n)
-
-int __stdcall _AccessibleApplication_IID_Lookup( const IID * pIID, int * pIndex )
-{
-
- if(!_AccessibleApplication_CHECK_IID(0))
- {
- *pIndex = 0;
- return 1;
- }
-
- return 0;
-}
-
-const ExtendedProxyFileInfo AccessibleApplication_ProxyFileInfo =
-{
- (PCInterfaceProxyVtblList *) & _AccessibleApplication_ProxyVtblList,
- (PCInterfaceStubVtblList *) & _AccessibleApplication_StubVtblList,
- (const PCInterfaceName * ) & _AccessibleApplication_InterfaceNamesList,
- 0, /* no delegation */
- & _AccessibleApplication_IID_Lookup,
- 1,
- 2,
- 0, /* table of [async_uuid] interfaces */
- 0, /* Filler1 */
- 0, /* Filler2 */
- 0 /* Filler3 */
-};
-#if _MSC_VER >= 1200
-#pragma warning(pop)
-#endif
-
-
-#endif /* defined(_M_AMD64)*/
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleComponent.h b/src/3rdparty/iaccessible2/generated/amd64/AccessibleComponent.h
deleted file mode 100644
index 38f696f45c..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleComponent.h
+++ /dev/null
@@ -1,185 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:57 2012
- */
-/* Compiler settings for AccessibleComponent.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-#ifndef COM_NO_WINDOWS_H
-#include "windows.h"
-#include "ole2.h"
-#endif /*COM_NO_WINDOWS_H*/
-
-#ifndef __AccessibleComponent_h__
-#define __AccessibleComponent_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifndef __IAccessibleComponent_FWD_DEFINED__
-#define __IAccessibleComponent_FWD_DEFINED__
-typedef interface IAccessibleComponent IAccessibleComponent;
-#endif /* __IAccessibleComponent_FWD_DEFINED__ */
-
-
-/* header files for imported files */
-#include "objidl.h"
-#include "oaidl.h"
-#include "oleacc.h"
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-/* interface __MIDL_itf_AccessibleComponent_0000_0000 */
-/* [local] */
-
-typedef long IA2Color;
-
-
-
-extern RPC_IF_HANDLE __MIDL_itf_AccessibleComponent_0000_0000_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_AccessibleComponent_0000_0000_v0_0_s_ifspec;
-
-#ifndef __IAccessibleComponent_INTERFACE_DEFINED__
-#define __IAccessibleComponent_INTERFACE_DEFINED__
-
-/* interface IAccessibleComponent */
-/* [uuid][object] */
-
-
-EXTERN_C const IID IID_IAccessibleComponent;
-
-#if defined(__cplusplus) && !defined(CINTERFACE)
-
- MIDL_INTERFACE("1546D4B0-4C98-4bda-89AE-9A64748BDDE4")
- IAccessibleComponent : public IUnknown
- {
- public:
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_locationInParent(
- /* [out] */ long *x,
- /* [retval][out] */ long *y) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_foreground(
- /* [retval][out] */ IA2Color *foreground) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_background(
- /* [retval][out] */ IA2Color *background) = 0;
-
- };
-
-#else /* C style interface */
-
- typedef struct IAccessibleComponentVtbl
- {
- BEGIN_INTERFACE
-
- HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
- IAccessibleComponent * This,
- /* [in] */ REFIID riid,
- /* [annotation][iid_is][out] */
- __RPC__deref_out void **ppvObject);
-
- ULONG ( STDMETHODCALLTYPE *AddRef )(
- IAccessibleComponent * This);
-
- ULONG ( STDMETHODCALLTYPE *Release )(
- IAccessibleComponent * This);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_locationInParent )(
- IAccessibleComponent * This,
- /* [out] */ long *x,
- /* [retval][out] */ long *y);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_foreground )(
- IAccessibleComponent * This,
- /* [retval][out] */ IA2Color *foreground);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_background )(
- IAccessibleComponent * This,
- /* [retval][out] */ IA2Color *background);
-
- END_INTERFACE
- } IAccessibleComponentVtbl;
-
- interface IAccessibleComponent
- {
- CONST_VTBL struct IAccessibleComponentVtbl *lpVtbl;
- };
-
-
-
-#ifdef COBJMACROS
-
-
-#define IAccessibleComponent_QueryInterface(This,riid,ppvObject) \
- ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
-
-#define IAccessibleComponent_AddRef(This) \
- ( (This)->lpVtbl -> AddRef(This) )
-
-#define IAccessibleComponent_Release(This) \
- ( (This)->lpVtbl -> Release(This) )
-
-
-#define IAccessibleComponent_get_locationInParent(This,x,y) \
- ( (This)->lpVtbl -> get_locationInParent(This,x,y) )
-
-#define IAccessibleComponent_get_foreground(This,foreground) \
- ( (This)->lpVtbl -> get_foreground(This,foreground) )
-
-#define IAccessibleComponent_get_background(This,background) \
- ( (This)->lpVtbl -> get_background(This,background) )
-
-#endif /* COBJMACROS */
-
-
-#endif /* C style interface */
-
-
-
-
-#endif /* __IAccessibleComponent_INTERFACE_DEFINED__ */
-
-
-/* Additional Prototypes for ALL interfaces */
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleComponent_i.c b/src/3rdparty/iaccessible2/generated/amd64/AccessibleComponent_i.c
deleted file mode 100644
index 34be13e31c..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleComponent_i.c
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
-
-/* link this file in with the server and any clients */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:57 2012
- */
-/* Compiler settings for AccessibleComponent.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#include <rpc.h>
-#include <rpcndr.h>
-
-#ifdef _MIDL_USE_GUIDDEF_
-
-#ifndef INITGUID
-#define INITGUID
-#include <guiddef.h>
-#undef INITGUID
-#else
-#include <guiddef.h>
-#endif
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
-
-#else // !_MIDL_USE_GUIDDEF_
-
-#ifndef __IID_DEFINED__
-#define __IID_DEFINED__
-
-typedef struct _IID
-{
- unsigned long x;
- unsigned short s1;
- unsigned short s2;
- unsigned char c[8];
-} IID;
-
-#endif // __IID_DEFINED__
-
-#ifndef CLSID_DEFINED
-#define CLSID_DEFINED
-typedef IID CLSID;
-#endif // CLSID_DEFINED
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
-
-#endif !_MIDL_USE_GUIDDEF_
-
-MIDL_DEFINE_GUID(IID, IID_IAccessibleComponent,0x1546D4B0,0x4C98,0x4bda,0x89,0xAE,0x9A,0x64,0x74,0x8B,0xDD,0xE4);
-
-#undef MIDL_DEFINE_GUID
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleComponent_p.c b/src/3rdparty/iaccessible2/generated/amd64/AccessibleComponent_p.c
deleted file mode 100644
index ddcacff7e7..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleComponent_p.c
+++ /dev/null
@@ -1,360 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the proxy stub code */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:57 2012
- */
-/* Compiler settings for AccessibleComponent.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#if defined(_M_AMD64)
-
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-#if _MSC_VER >= 1200
-#pragma warning(push)
-#endif
-
-#pragma warning( disable: 4211 ) /* redefine extern to static */
-#pragma warning( disable: 4232 ) /* dllimport identity*/
-#pragma warning( disable: 4024 ) /* array to pointer mapping*/
-#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */
-
-#define USE_STUBLESS_PROXY
-
-
-/* verify that the <rpcproxy.h> version is high enough to compile this file*/
-#ifndef __REDQ_RPCPROXY_H_VERSION__
-#define __REQUIRED_RPCPROXY_H_VERSION__ 475
-#endif
-
-
-#include "rpcproxy.h"
-#ifndef __RPCPROXY_H_VERSION__
-#error this stub requires an updated version of <rpcproxy.h>
-#endif /* __RPCPROXY_H_VERSION__ */
-
-
-#include "AccessibleComponent.h"
-
-#define TYPE_FORMAT_STRING_SIZE 7
-#define PROC_FORMAT_STRING_SIZE 121
-#define EXPR_FORMAT_STRING_SIZE 1
-#define TRANSMIT_AS_TABLE_SIZE 0
-#define WIRE_MARSHAL_TABLE_SIZE 0
-
-typedef struct _AccessibleComponent_MIDL_TYPE_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
- } AccessibleComponent_MIDL_TYPE_FORMAT_STRING;
-
-typedef struct _AccessibleComponent_MIDL_PROC_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
- } AccessibleComponent_MIDL_PROC_FORMAT_STRING;
-
-typedef struct _AccessibleComponent_MIDL_EXPR_FORMAT_STRING
- {
- long Pad;
- unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
- } AccessibleComponent_MIDL_EXPR_FORMAT_STRING;
-
-
-static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
-{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
-
-
-extern const AccessibleComponent_MIDL_TYPE_FORMAT_STRING AccessibleComponent__MIDL_TypeFormatString;
-extern const AccessibleComponent_MIDL_PROC_FORMAT_STRING AccessibleComponent__MIDL_ProcFormatString;
-extern const AccessibleComponent_MIDL_EXPR_FORMAT_STRING AccessibleComponent__MIDL_ExprFormatString;
-
-
-extern const MIDL_STUB_DESC Object_StubDesc;
-
-
-extern const MIDL_SERVER_INFO IAccessibleComponent_ServerInfo;
-extern const MIDL_STUBLESS_PROXY_INFO IAccessibleComponent_ProxyInfo;
-
-
-
-#if !defined(__RPC_WIN64__)
-#error Invalid build platform for this stub.
-#endif
-
-static const AccessibleComponent_MIDL_PROC_FORMAT_STRING AccessibleComponent__MIDL_ProcFormatString =
- {
- 0,
- {
-
- /* Procedure get_locationInParent */
-
- 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 2 */ NdrFcLong( 0x0 ), /* 0 */
-/* 6 */ NdrFcShort( 0x3 ), /* 3 */
-/* 8 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 10 */ NdrFcShort( 0x0 ), /* 0 */
-/* 12 */ NdrFcShort( 0x40 ), /* 64 */
-/* 14 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x3, /* 3 */
-/* 16 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 18 */ NdrFcShort( 0x0 ), /* 0 */
-/* 20 */ NdrFcShort( 0x0 ), /* 0 */
-/* 22 */ NdrFcShort( 0x0 ), /* 0 */
-/* 24 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter x */
-
-/* 26 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 28 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 30 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter y */
-
-/* 32 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 34 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 36 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 38 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 40 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 42 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_foreground */
-
-/* 44 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 46 */ NdrFcLong( 0x0 ), /* 0 */
-/* 50 */ NdrFcShort( 0x4 ), /* 4 */
-/* 52 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 54 */ NdrFcShort( 0x0 ), /* 0 */
-/* 56 */ NdrFcShort( 0x24 ), /* 36 */
-/* 58 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 60 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 62 */ NdrFcShort( 0x0 ), /* 0 */
-/* 64 */ NdrFcShort( 0x0 ), /* 0 */
-/* 66 */ NdrFcShort( 0x0 ), /* 0 */
-/* 68 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter foreground */
-
-/* 70 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 72 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 74 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 76 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 78 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 80 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_background */
-
-/* 82 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 84 */ NdrFcLong( 0x0 ), /* 0 */
-/* 88 */ NdrFcShort( 0x5 ), /* 5 */
-/* 90 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 92 */ NdrFcShort( 0x0 ), /* 0 */
-/* 94 */ NdrFcShort( 0x24 ), /* 36 */
-/* 96 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 98 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 100 */ NdrFcShort( 0x0 ), /* 0 */
-/* 102 */ NdrFcShort( 0x0 ), /* 0 */
-/* 104 */ NdrFcShort( 0x0 ), /* 0 */
-/* 106 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter background */
-
-/* 108 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 110 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 112 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 114 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 116 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 118 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- 0x0
- }
- };
-
-static const AccessibleComponent_MIDL_TYPE_FORMAT_STRING AccessibleComponent__MIDL_TypeFormatString =
- {
- 0,
- {
- NdrFcShort( 0x0 ), /* 0 */
-/* 2 */
- 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
-/* 4 */ 0x8, /* FC_LONG */
- 0x5c, /* FC_PAD */
-
- 0x0
- }
- };
-
-
-/* Standard interface: __MIDL_itf_AccessibleComponent_0000_0000, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */
-
-
-/* Object interface: IUnknown, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
-
-
-/* Object interface: IAccessibleComponent, ver. 0.0,
- GUID={0x1546D4B0,0x4C98,0x4bda,{0x89,0xAE,0x9A,0x64,0x74,0x8B,0xDD,0xE4}} */
-
-#pragma code_seg(".orpc")
-static const unsigned short IAccessibleComponent_FormatStringOffsetTable[] =
- {
- 0,
- 44,
- 82
- };
-
-static const MIDL_STUBLESS_PROXY_INFO IAccessibleComponent_ProxyInfo =
- {
- &Object_StubDesc,
- AccessibleComponent__MIDL_ProcFormatString.Format,
- &IAccessibleComponent_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0
- };
-
-
-static const MIDL_SERVER_INFO IAccessibleComponent_ServerInfo =
- {
- &Object_StubDesc,
- 0,
- AccessibleComponent__MIDL_ProcFormatString.Format,
- &IAccessibleComponent_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0,
- 0};
-CINTERFACE_PROXY_VTABLE(6) _IAccessibleComponentProxyVtbl =
-{
- &IAccessibleComponent_ProxyInfo,
- &IID_IAccessibleComponent,
- IUnknown_QueryInterface_Proxy,
- IUnknown_AddRef_Proxy,
- IUnknown_Release_Proxy ,
- (void *) (INT_PTR) -1 /* IAccessibleComponent::get_locationInParent */ ,
- (void *) (INT_PTR) -1 /* IAccessibleComponent::get_foreground */ ,
- (void *) (INT_PTR) -1 /* IAccessibleComponent::get_background */
-};
-
-const CInterfaceStubVtbl _IAccessibleComponentStubVtbl =
-{
- &IID_IAccessibleComponent,
- &IAccessibleComponent_ServerInfo,
- 6,
- 0, /* pure interpreted */
- CStdStubBuffer_METHODS
-};
-
-static const MIDL_STUB_DESC Object_StubDesc =
- {
- 0,
- NdrOleAllocate,
- NdrOleFree,
- 0,
- 0,
- 0,
- 0,
- 0,
- AccessibleComponent__MIDL_TypeFormatString.Format,
- 1, /* -error bounds_check flag */
- 0x50002, /* Ndr library version */
- 0,
- 0x700022b, /* MIDL Version 7.0.555 */
- 0,
- 0,
- 0, /* notify & notify_flag routine table */
- 0x1, /* MIDL flag */
- 0, /* cs routines */
- 0, /* proxy/server info */
- 0
- };
-
-const CInterfaceProxyVtbl * const _AccessibleComponent_ProxyVtblList[] =
-{
- ( CInterfaceProxyVtbl *) &_IAccessibleComponentProxyVtbl,
- 0
-};
-
-const CInterfaceStubVtbl * const _AccessibleComponent_StubVtblList[] =
-{
- ( CInterfaceStubVtbl *) &_IAccessibleComponentStubVtbl,
- 0
-};
-
-PCInterfaceName const _AccessibleComponent_InterfaceNamesList[] =
-{
- "IAccessibleComponent",
- 0
-};
-
-
-#define _AccessibleComponent_CHECK_IID(n) IID_GENERIC_CHECK_IID( _AccessibleComponent, pIID, n)
-
-int __stdcall _AccessibleComponent_IID_Lookup( const IID * pIID, int * pIndex )
-{
-
- if(!_AccessibleComponent_CHECK_IID(0))
- {
- *pIndex = 0;
- return 1;
- }
-
- return 0;
-}
-
-const ExtendedProxyFileInfo AccessibleComponent_ProxyFileInfo =
-{
- (PCInterfaceProxyVtblList *) & _AccessibleComponent_ProxyVtblList,
- (PCInterfaceStubVtblList *) & _AccessibleComponent_StubVtblList,
- (const PCInterfaceName * ) & _AccessibleComponent_InterfaceNamesList,
- 0, /* no delegation */
- & _AccessibleComponent_IID_Lookup,
- 1,
- 2,
- 0, /* table of [async_uuid] interfaces */
- 0, /* Filler1 */
- 0, /* Filler2 */
- 0 /* Filler3 */
-};
-#if _MSC_VER >= 1200
-#pragma warning(pop)
-#endif
-
-
-#endif /* defined(_M_AMD64)*/
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleEditableText.h b/src/3rdparty/iaccessible2/generated/amd64/AccessibleEditableText.h
deleted file mode 100644
index 4c94154a15..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleEditableText.h
+++ /dev/null
@@ -1,235 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:57 2012
- */
-/* Compiler settings for AccessibleEditableText.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-#ifndef COM_NO_WINDOWS_H
-#include "windows.h"
-#include "ole2.h"
-#endif /*COM_NO_WINDOWS_H*/
-
-#ifndef __AccessibleEditableText_h__
-#define __AccessibleEditableText_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifndef __IAccessibleEditableText_FWD_DEFINED__
-#define __IAccessibleEditableText_FWD_DEFINED__
-typedef interface IAccessibleEditableText IAccessibleEditableText;
-#endif /* __IAccessibleEditableText_FWD_DEFINED__ */
-
-
-/* header files for imported files */
-#include "objidl.h"
-#include "oaidl.h"
-#include "oleacc.h"
-#include "IA2CommonTypes.h"
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#ifndef __IAccessibleEditableText_INTERFACE_DEFINED__
-#define __IAccessibleEditableText_INTERFACE_DEFINED__
-
-/* interface IAccessibleEditableText */
-/* [uuid][object] */
-
-
-EXTERN_C const IID IID_IAccessibleEditableText;
-
-#if defined(__cplusplus) && !defined(CINTERFACE)
-
- MIDL_INTERFACE("A59AA09A-7011-4b65-939D-32B1FB5547E3")
- IAccessibleEditableText : public IUnknown
- {
- public:
- virtual HRESULT STDMETHODCALLTYPE copyText(
- /* [in] */ long startOffset,
- /* [in] */ long endOffset) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE deleteText(
- /* [in] */ long startOffset,
- /* [in] */ long endOffset) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE insertText(
- /* [in] */ long offset,
- /* [in] */ BSTR *text) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE cutText(
- /* [in] */ long startOffset,
- /* [in] */ long endOffset) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE pasteText(
- /* [in] */ long offset) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE replaceText(
- /* [in] */ long startOffset,
- /* [in] */ long endOffset,
- /* [in] */ BSTR *text) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE setAttributes(
- /* [in] */ long startOffset,
- /* [in] */ long endOffset,
- /* [in] */ BSTR *attributes) = 0;
-
- };
-
-#else /* C style interface */
-
- typedef struct IAccessibleEditableTextVtbl
- {
- BEGIN_INTERFACE
-
- HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
- IAccessibleEditableText * This,
- /* [in] */ REFIID riid,
- /* [annotation][iid_is][out] */
- __RPC__deref_out void **ppvObject);
-
- ULONG ( STDMETHODCALLTYPE *AddRef )(
- IAccessibleEditableText * This);
-
- ULONG ( STDMETHODCALLTYPE *Release )(
- IAccessibleEditableText * This);
-
- HRESULT ( STDMETHODCALLTYPE *copyText )(
- IAccessibleEditableText * This,
- /* [in] */ long startOffset,
- /* [in] */ long endOffset);
-
- HRESULT ( STDMETHODCALLTYPE *deleteText )(
- IAccessibleEditableText * This,
- /* [in] */ long startOffset,
- /* [in] */ long endOffset);
-
- HRESULT ( STDMETHODCALLTYPE *insertText )(
- IAccessibleEditableText * This,
- /* [in] */ long offset,
- /* [in] */ BSTR *text);
-
- HRESULT ( STDMETHODCALLTYPE *cutText )(
- IAccessibleEditableText * This,
- /* [in] */ long startOffset,
- /* [in] */ long endOffset);
-
- HRESULT ( STDMETHODCALLTYPE *pasteText )(
- IAccessibleEditableText * This,
- /* [in] */ long offset);
-
- HRESULT ( STDMETHODCALLTYPE *replaceText )(
- IAccessibleEditableText * This,
- /* [in] */ long startOffset,
- /* [in] */ long endOffset,
- /* [in] */ BSTR *text);
-
- HRESULT ( STDMETHODCALLTYPE *setAttributes )(
- IAccessibleEditableText * This,
- /* [in] */ long startOffset,
- /* [in] */ long endOffset,
- /* [in] */ BSTR *attributes);
-
- END_INTERFACE
- } IAccessibleEditableTextVtbl;
-
- interface IAccessibleEditableText
- {
- CONST_VTBL struct IAccessibleEditableTextVtbl *lpVtbl;
- };
-
-
-
-#ifdef COBJMACROS
-
-
-#define IAccessibleEditableText_QueryInterface(This,riid,ppvObject) \
- ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
-
-#define IAccessibleEditableText_AddRef(This) \
- ( (This)->lpVtbl -> AddRef(This) )
-
-#define IAccessibleEditableText_Release(This) \
- ( (This)->lpVtbl -> Release(This) )
-
-
-#define IAccessibleEditableText_copyText(This,startOffset,endOffset) \
- ( (This)->lpVtbl -> copyText(This,startOffset,endOffset) )
-
-#define IAccessibleEditableText_deleteText(This,startOffset,endOffset) \
- ( (This)->lpVtbl -> deleteText(This,startOffset,endOffset) )
-
-#define IAccessibleEditableText_insertText(This,offset,text) \
- ( (This)->lpVtbl -> insertText(This,offset,text) )
-
-#define IAccessibleEditableText_cutText(This,startOffset,endOffset) \
- ( (This)->lpVtbl -> cutText(This,startOffset,endOffset) )
-
-#define IAccessibleEditableText_pasteText(This,offset) \
- ( (This)->lpVtbl -> pasteText(This,offset) )
-
-#define IAccessibleEditableText_replaceText(This,startOffset,endOffset,text) \
- ( (This)->lpVtbl -> replaceText(This,startOffset,endOffset,text) )
-
-#define IAccessibleEditableText_setAttributes(This,startOffset,endOffset,attributes) \
- ( (This)->lpVtbl -> setAttributes(This,startOffset,endOffset,attributes) )
-
-#endif /* COBJMACROS */
-
-
-#endif /* C style interface */
-
-
-
-
-#endif /* __IAccessibleEditableText_INTERFACE_DEFINED__ */
-
-
-/* Additional Prototypes for ALL interfaces */
-
-unsigned long __RPC_USER BSTR_UserSize( unsigned long *, unsigned long , BSTR * );
-unsigned char * __RPC_USER BSTR_UserMarshal( unsigned long *, unsigned char *, BSTR * );
-unsigned char * __RPC_USER BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * );
-void __RPC_USER BSTR_UserFree( unsigned long *, BSTR * );
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleEditableText_i.c b/src/3rdparty/iaccessible2/generated/amd64/AccessibleEditableText_i.c
deleted file mode 100644
index a444951721..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleEditableText_i.c
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
-
-/* link this file in with the server and any clients */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:57 2012
- */
-/* Compiler settings for AccessibleEditableText.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#include <rpc.h>
-#include <rpcndr.h>
-
-#ifdef _MIDL_USE_GUIDDEF_
-
-#ifndef INITGUID
-#define INITGUID
-#include <guiddef.h>
-#undef INITGUID
-#else
-#include <guiddef.h>
-#endif
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
-
-#else // !_MIDL_USE_GUIDDEF_
-
-#ifndef __IID_DEFINED__
-#define __IID_DEFINED__
-
-typedef struct _IID
-{
- unsigned long x;
- unsigned short s1;
- unsigned short s2;
- unsigned char c[8];
-} IID;
-
-#endif // __IID_DEFINED__
-
-#ifndef CLSID_DEFINED
-#define CLSID_DEFINED
-typedef IID CLSID;
-#endif // CLSID_DEFINED
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
-
-#endif !_MIDL_USE_GUIDDEF_
-
-MIDL_DEFINE_GUID(IID, IID_IAccessibleEditableText,0xA59AA09A,0x7011,0x4b65,0x93,0x9D,0x32,0xB1,0xFB,0x55,0x47,0xE3);
-
-#undef MIDL_DEFINE_GUID
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleEditableText_p.c b/src/3rdparty/iaccessible2/generated/amd64/AccessibleEditableText_p.c
deleted file mode 100644
index 9e9b466d86..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleEditableText_p.c
+++ /dev/null
@@ -1,579 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the proxy stub code */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:57 2012
- */
-/* Compiler settings for AccessibleEditableText.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#if defined(_M_AMD64)
-
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-#if _MSC_VER >= 1200
-#pragma warning(push)
-#endif
-
-#pragma warning( disable: 4211 ) /* redefine extern to static */
-#pragma warning( disable: 4232 ) /* dllimport identity*/
-#pragma warning( disable: 4024 ) /* array to pointer mapping*/
-#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */
-
-#define USE_STUBLESS_PROXY
-
-
-/* verify that the <rpcproxy.h> version is high enough to compile this file*/
-#ifndef __REDQ_RPCPROXY_H_VERSION__
-#define __REQUIRED_RPCPROXY_H_VERSION__ 475
-#endif
-
-
-#include "rpcproxy.h"
-#ifndef __RPCPROXY_H_VERSION__
-#error this stub requires an updated version of <rpcproxy.h>
-#endif /* __RPCPROXY_H_VERSION__ */
-
-
-#include "AccessibleEditableText.h"
-
-#define TYPE_FORMAT_STRING_SIZE 43
-#define PROC_FORMAT_STRING_SIZE 315
-#define EXPR_FORMAT_STRING_SIZE 1
-#define TRANSMIT_AS_TABLE_SIZE 0
-#define WIRE_MARSHAL_TABLE_SIZE 1
-
-typedef struct _AccessibleEditableText_MIDL_TYPE_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
- } AccessibleEditableText_MIDL_TYPE_FORMAT_STRING;
-
-typedef struct _AccessibleEditableText_MIDL_PROC_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
- } AccessibleEditableText_MIDL_PROC_FORMAT_STRING;
-
-typedef struct _AccessibleEditableText_MIDL_EXPR_FORMAT_STRING
- {
- long Pad;
- unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
- } AccessibleEditableText_MIDL_EXPR_FORMAT_STRING;
-
-
-static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
-{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
-
-
-extern const AccessibleEditableText_MIDL_TYPE_FORMAT_STRING AccessibleEditableText__MIDL_TypeFormatString;
-extern const AccessibleEditableText_MIDL_PROC_FORMAT_STRING AccessibleEditableText__MIDL_ProcFormatString;
-extern const AccessibleEditableText_MIDL_EXPR_FORMAT_STRING AccessibleEditableText__MIDL_ExprFormatString;
-
-
-extern const MIDL_STUB_DESC Object_StubDesc;
-
-
-extern const MIDL_SERVER_INFO IAccessibleEditableText_ServerInfo;
-extern const MIDL_STUBLESS_PROXY_INFO IAccessibleEditableText_ProxyInfo;
-
-
-extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ];
-
-#if !defined(__RPC_WIN64__)
-#error Invalid build platform for this stub.
-#endif
-
-static const AccessibleEditableText_MIDL_PROC_FORMAT_STRING AccessibleEditableText__MIDL_ProcFormatString =
- {
- 0,
- {
-
- /* Procedure copyText */
-
- 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 2 */ NdrFcLong( 0x0 ), /* 0 */
-/* 6 */ NdrFcShort( 0x3 ), /* 3 */
-/* 8 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 10 */ NdrFcShort( 0x10 ), /* 16 */
-/* 12 */ NdrFcShort( 0x8 ), /* 8 */
-/* 14 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x3, /* 3 */
-/* 16 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 18 */ NdrFcShort( 0x0 ), /* 0 */
-/* 20 */ NdrFcShort( 0x0 ), /* 0 */
-/* 22 */ NdrFcShort( 0x0 ), /* 0 */
-/* 24 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter startOffset */
-
-/* 26 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 28 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 30 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter endOffset */
-
-/* 32 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 34 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 36 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 38 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 40 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 42 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure deleteText */
-
-/* 44 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 46 */ NdrFcLong( 0x0 ), /* 0 */
-/* 50 */ NdrFcShort( 0x4 ), /* 4 */
-/* 52 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 54 */ NdrFcShort( 0x10 ), /* 16 */
-/* 56 */ NdrFcShort( 0x8 ), /* 8 */
-/* 58 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x3, /* 3 */
-/* 60 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 62 */ NdrFcShort( 0x0 ), /* 0 */
-/* 64 */ NdrFcShort( 0x0 ), /* 0 */
-/* 66 */ NdrFcShort( 0x0 ), /* 0 */
-/* 68 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter startOffset */
-
-/* 70 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 72 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 74 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter endOffset */
-
-/* 76 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 78 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 80 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 82 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 84 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 86 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure insertText */
-
-/* 88 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 90 */ NdrFcLong( 0x0 ), /* 0 */
-/* 94 */ NdrFcShort( 0x5 ), /* 5 */
-/* 96 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 98 */ NdrFcShort( 0x8 ), /* 8 */
-/* 100 */ NdrFcShort( 0x8 ), /* 8 */
-/* 102 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */
- 0x3, /* 3 */
-/* 104 */ 0xa, /* 10 */
- 0x5, /* Ext Flags: new corr desc, srv corr check, */
-/* 106 */ NdrFcShort( 0x0 ), /* 0 */
-/* 108 */ NdrFcShort( 0x1 ), /* 1 */
-/* 110 */ NdrFcShort( 0x0 ), /* 0 */
-/* 112 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter offset */
-
-/* 114 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 116 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 118 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter text */
-
-/* 120 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */
-/* 122 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 124 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
-
- /* Return value */
-
-/* 126 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 128 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 130 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure cutText */
-
-/* 132 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 134 */ NdrFcLong( 0x0 ), /* 0 */
-/* 138 */ NdrFcShort( 0x6 ), /* 6 */
-/* 140 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 142 */ NdrFcShort( 0x10 ), /* 16 */
-/* 144 */ NdrFcShort( 0x8 ), /* 8 */
-/* 146 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x3, /* 3 */
-/* 148 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 150 */ NdrFcShort( 0x0 ), /* 0 */
-/* 152 */ NdrFcShort( 0x0 ), /* 0 */
-/* 154 */ NdrFcShort( 0x0 ), /* 0 */
-/* 156 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter startOffset */
-
-/* 158 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 160 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 162 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter endOffset */
-
-/* 164 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 166 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 168 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 170 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 172 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 174 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure pasteText */
-
-/* 176 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 178 */ NdrFcLong( 0x0 ), /* 0 */
-/* 182 */ NdrFcShort( 0x7 ), /* 7 */
-/* 184 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 186 */ NdrFcShort( 0x8 ), /* 8 */
-/* 188 */ NdrFcShort( 0x8 ), /* 8 */
-/* 190 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 192 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 194 */ NdrFcShort( 0x0 ), /* 0 */
-/* 196 */ NdrFcShort( 0x0 ), /* 0 */
-/* 198 */ NdrFcShort( 0x0 ), /* 0 */
-/* 200 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter offset */
-
-/* 202 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 204 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 206 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 208 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 210 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 212 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure replaceText */
-
-/* 214 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 216 */ NdrFcLong( 0x0 ), /* 0 */
-/* 220 */ NdrFcShort( 0x8 ), /* 8 */
-/* 222 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
-/* 224 */ NdrFcShort( 0x10 ), /* 16 */
-/* 226 */ NdrFcShort( 0x8 ), /* 8 */
-/* 228 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */
- 0x4, /* 4 */
-/* 230 */ 0xa, /* 10 */
- 0x5, /* Ext Flags: new corr desc, srv corr check, */
-/* 232 */ NdrFcShort( 0x0 ), /* 0 */
-/* 234 */ NdrFcShort( 0x1 ), /* 1 */
-/* 236 */ NdrFcShort( 0x0 ), /* 0 */
-/* 238 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter startOffset */
-
-/* 240 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 242 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 244 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter endOffset */
-
-/* 246 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 248 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 250 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter text */
-
-/* 252 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */
-/* 254 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 256 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
-
- /* Return value */
-
-/* 258 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 260 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 262 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure setAttributes */
-
-/* 264 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 266 */ NdrFcLong( 0x0 ), /* 0 */
-/* 270 */ NdrFcShort( 0x9 ), /* 9 */
-/* 272 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
-/* 274 */ NdrFcShort( 0x10 ), /* 16 */
-/* 276 */ NdrFcShort( 0x8 ), /* 8 */
-/* 278 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */
- 0x4, /* 4 */
-/* 280 */ 0xa, /* 10 */
- 0x5, /* Ext Flags: new corr desc, srv corr check, */
-/* 282 */ NdrFcShort( 0x0 ), /* 0 */
-/* 284 */ NdrFcShort( 0x1 ), /* 1 */
-/* 286 */ NdrFcShort( 0x0 ), /* 0 */
-/* 288 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter startOffset */
-
-/* 290 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 292 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 294 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter endOffset */
-
-/* 296 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 298 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 300 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter attributes */
-
-/* 302 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */
-/* 304 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 306 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
-
- /* Return value */
-
-/* 308 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 310 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 312 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- 0x0
- }
- };
-
-static const AccessibleEditableText_MIDL_TYPE_FORMAT_STRING AccessibleEditableText__MIDL_TypeFormatString =
- {
- 0,
- {
- NdrFcShort( 0x0 ), /* 0 */
-/* 2 */
- 0x11, 0x0, /* FC_RP */
-/* 4 */ NdrFcShort( 0x1c ), /* Offset= 28 (32) */
-/* 6 */
- 0x12, 0x0, /* FC_UP */
-/* 8 */ NdrFcShort( 0xe ), /* Offset= 14 (22) */
-/* 10 */
- 0x1b, /* FC_CARRAY */
- 0x1, /* 1 */
-/* 12 */ NdrFcShort( 0x2 ), /* 2 */
-/* 14 */ 0x9, /* Corr desc: FC_ULONG */
- 0x0, /* */
-/* 16 */ NdrFcShort( 0xfffc ), /* -4 */
-/* 18 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 20 */ 0x6, /* FC_SHORT */
- 0x5b, /* FC_END */
-/* 22 */
- 0x17, /* FC_CSTRUCT */
- 0x3, /* 3 */
-/* 24 */ NdrFcShort( 0x8 ), /* 8 */
-/* 26 */ NdrFcShort( 0xfff0 ), /* Offset= -16 (10) */
-/* 28 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 30 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 32 */ 0xb4, /* FC_USER_MARSHAL */
- 0x83, /* 131 */
-/* 34 */ NdrFcShort( 0x0 ), /* 0 */
-/* 36 */ NdrFcShort( 0x8 ), /* 8 */
-/* 38 */ NdrFcShort( 0x0 ), /* 0 */
-/* 40 */ NdrFcShort( 0xffde ), /* Offset= -34 (6) */
-
- 0x0
- }
- };
-
-static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ] =
- {
-
- {
- BSTR_UserSize
- ,BSTR_UserMarshal
- ,BSTR_UserUnmarshal
- ,BSTR_UserFree
- }
-
- };
-
-
-
-/* Object interface: IUnknown, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
-
-
-/* Object interface: IAccessibleEditableText, ver. 0.0,
- GUID={0xA59AA09A,0x7011,0x4b65,{0x93,0x9D,0x32,0xB1,0xFB,0x55,0x47,0xE3}} */
-
-#pragma code_seg(".orpc")
-static const unsigned short IAccessibleEditableText_FormatStringOffsetTable[] =
- {
- 0,
- 44,
- 88,
- 132,
- 176,
- 214,
- 264
- };
-
-static const MIDL_STUBLESS_PROXY_INFO IAccessibleEditableText_ProxyInfo =
- {
- &Object_StubDesc,
- AccessibleEditableText__MIDL_ProcFormatString.Format,
- &IAccessibleEditableText_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0
- };
-
-
-static const MIDL_SERVER_INFO IAccessibleEditableText_ServerInfo =
- {
- &Object_StubDesc,
- 0,
- AccessibleEditableText__MIDL_ProcFormatString.Format,
- &IAccessibleEditableText_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0,
- 0};
-CINTERFACE_PROXY_VTABLE(10) _IAccessibleEditableTextProxyVtbl =
-{
- &IAccessibleEditableText_ProxyInfo,
- &IID_IAccessibleEditableText,
- IUnknown_QueryInterface_Proxy,
- IUnknown_AddRef_Proxy,
- IUnknown_Release_Proxy ,
- (void *) (INT_PTR) -1 /* IAccessibleEditableText::copyText */ ,
- (void *) (INT_PTR) -1 /* IAccessibleEditableText::deleteText */ ,
- (void *) (INT_PTR) -1 /* IAccessibleEditableText::insertText */ ,
- (void *) (INT_PTR) -1 /* IAccessibleEditableText::cutText */ ,
- (void *) (INT_PTR) -1 /* IAccessibleEditableText::pasteText */ ,
- (void *) (INT_PTR) -1 /* IAccessibleEditableText::replaceText */ ,
- (void *) (INT_PTR) -1 /* IAccessibleEditableText::setAttributes */
-};
-
-const CInterfaceStubVtbl _IAccessibleEditableTextStubVtbl =
-{
- &IID_IAccessibleEditableText,
- &IAccessibleEditableText_ServerInfo,
- 10,
- 0, /* pure interpreted */
- CStdStubBuffer_METHODS
-};
-
-static const MIDL_STUB_DESC Object_StubDesc =
- {
- 0,
- NdrOleAllocate,
- NdrOleFree,
- 0,
- 0,
- 0,
- 0,
- 0,
- AccessibleEditableText__MIDL_TypeFormatString.Format,
- 1, /* -error bounds_check flag */
- 0x50002, /* Ndr library version */
- 0,
- 0x700022b, /* MIDL Version 7.0.555 */
- 0,
- UserMarshalRoutines,
- 0, /* notify & notify_flag routine table */
- 0x1, /* MIDL flag */
- 0, /* cs routines */
- 0, /* proxy/server info */
- 0
- };
-
-const CInterfaceProxyVtbl * const _AccessibleEditableText_ProxyVtblList[] =
-{
- ( CInterfaceProxyVtbl *) &_IAccessibleEditableTextProxyVtbl,
- 0
-};
-
-const CInterfaceStubVtbl * const _AccessibleEditableText_StubVtblList[] =
-{
- ( CInterfaceStubVtbl *) &_IAccessibleEditableTextStubVtbl,
- 0
-};
-
-PCInterfaceName const _AccessibleEditableText_InterfaceNamesList[] =
-{
- "IAccessibleEditableText",
- 0
-};
-
-
-#define _AccessibleEditableText_CHECK_IID(n) IID_GENERIC_CHECK_IID( _AccessibleEditableText, pIID, n)
-
-int __stdcall _AccessibleEditableText_IID_Lookup( const IID * pIID, int * pIndex )
-{
-
- if(!_AccessibleEditableText_CHECK_IID(0))
- {
- *pIndex = 0;
- return 1;
- }
-
- return 0;
-}
-
-const ExtendedProxyFileInfo AccessibleEditableText_ProxyFileInfo =
-{
- (PCInterfaceProxyVtblList *) & _AccessibleEditableText_ProxyVtblList,
- (PCInterfaceStubVtblList *) & _AccessibleEditableText_StubVtblList,
- (const PCInterfaceName * ) & _AccessibleEditableText_InterfaceNamesList,
- 0, /* no delegation */
- & _AccessibleEditableText_IID_Lookup,
- 1,
- 2,
- 0, /* table of [async_uuid] interfaces */
- 0, /* Filler1 */
- 0, /* Filler2 */
- 0 /* Filler3 */
-};
-#if _MSC_VER >= 1200
-#pragma warning(pop)
-#endif
-
-
-#endif /* defined(_M_AMD64)*/
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleEventID.h b/src/3rdparty/iaccessible2/generated/amd64/AccessibleEventID.h
deleted file mode 100644
index 6e6c8a888a..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleEventID.h
+++ /dev/null
@@ -1,105 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:57 2012
- */
-/* Compiler settings for AccessibleEventID.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-
-#ifndef __AccessibleEventID_h__
-#define __AccessibleEventID_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-/* interface __MIDL_itf_AccessibleEventID_0000_0000 */
-/* [local] */
-
-
-enum IA2EventID
- { IA2_EVENT_ACTION_CHANGED = 0x101,
- IA2_EVENT_ACTIVE_DECENDENT_CHANGED = ( IA2_EVENT_ACTION_CHANGED + 1 ) ,
- IA2_EVENT_ACTIVE_DESCENDANT_CHANGED = IA2_EVENT_ACTIVE_DECENDENT_CHANGED,
- IA2_EVENT_DOCUMENT_ATTRIBUTE_CHANGED = ( IA2_EVENT_ACTIVE_DESCENDANT_CHANGED + 1 ) ,
- IA2_EVENT_DOCUMENT_CONTENT_CHANGED = ( IA2_EVENT_DOCUMENT_ATTRIBUTE_CHANGED + 1 ) ,
- IA2_EVENT_DOCUMENT_LOAD_COMPLETE = ( IA2_EVENT_DOCUMENT_CONTENT_CHANGED + 1 ) ,
- IA2_EVENT_DOCUMENT_LOAD_STOPPED = ( IA2_EVENT_DOCUMENT_LOAD_COMPLETE + 1 ) ,
- IA2_EVENT_DOCUMENT_RELOAD = ( IA2_EVENT_DOCUMENT_LOAD_STOPPED + 1 ) ,
- IA2_EVENT_HYPERLINK_END_INDEX_CHANGED = ( IA2_EVENT_DOCUMENT_RELOAD + 1 ) ,
- IA2_EVENT_HYPERLINK_NUMBER_OF_ANCHORS_CHANGED = ( IA2_EVENT_HYPERLINK_END_INDEX_CHANGED + 1 ) ,
- IA2_EVENT_HYPERLINK_SELECTED_LINK_CHANGED = ( IA2_EVENT_HYPERLINK_NUMBER_OF_ANCHORS_CHANGED + 1 ) ,
- IA2_EVENT_HYPERTEXT_LINK_ACTIVATED = ( IA2_EVENT_HYPERLINK_SELECTED_LINK_CHANGED + 1 ) ,
- IA2_EVENT_HYPERTEXT_LINK_SELECTED = ( IA2_EVENT_HYPERTEXT_LINK_ACTIVATED + 1 ) ,
- IA2_EVENT_HYPERLINK_START_INDEX_CHANGED = ( IA2_EVENT_HYPERTEXT_LINK_SELECTED + 1 ) ,
- IA2_EVENT_HYPERTEXT_CHANGED = ( IA2_EVENT_HYPERLINK_START_INDEX_CHANGED + 1 ) ,
- IA2_EVENT_HYPERTEXT_NLINKS_CHANGED = ( IA2_EVENT_HYPERTEXT_CHANGED + 1 ) ,
- IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED = ( IA2_EVENT_HYPERTEXT_NLINKS_CHANGED + 1 ) ,
- IA2_EVENT_PAGE_CHANGED = ( IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED + 1 ) ,
- IA2_EVENT_SECTION_CHANGED = ( IA2_EVENT_PAGE_CHANGED + 1 ) ,
- IA2_EVENT_TABLE_CAPTION_CHANGED = ( IA2_EVENT_SECTION_CHANGED + 1 ) ,
- IA2_EVENT_TABLE_COLUMN_DESCRIPTION_CHANGED = ( IA2_EVENT_TABLE_CAPTION_CHANGED + 1 ) ,
- IA2_EVENT_TABLE_COLUMN_HEADER_CHANGED = ( IA2_EVENT_TABLE_COLUMN_DESCRIPTION_CHANGED + 1 ) ,
- IA2_EVENT_TABLE_MODEL_CHANGED = ( IA2_EVENT_TABLE_COLUMN_HEADER_CHANGED + 1 ) ,
- IA2_EVENT_TABLE_ROW_DESCRIPTION_CHANGED = ( IA2_EVENT_TABLE_MODEL_CHANGED + 1 ) ,
- IA2_EVENT_TABLE_ROW_HEADER_CHANGED = ( IA2_EVENT_TABLE_ROW_DESCRIPTION_CHANGED + 1 ) ,
- IA2_EVENT_TABLE_SUMMARY_CHANGED = ( IA2_EVENT_TABLE_ROW_HEADER_CHANGED + 1 ) ,
- IA2_EVENT_TEXT_ATTRIBUTE_CHANGED = ( IA2_EVENT_TABLE_SUMMARY_CHANGED + 1 ) ,
- IA2_EVENT_TEXT_CARET_MOVED = ( IA2_EVENT_TEXT_ATTRIBUTE_CHANGED + 1 ) ,
- IA2_EVENT_TEXT_CHANGED = ( IA2_EVENT_TEXT_CARET_MOVED + 1 ) ,
- IA2_EVENT_TEXT_COLUMN_CHANGED = ( IA2_EVENT_TEXT_CHANGED + 1 ) ,
- IA2_EVENT_TEXT_INSERTED = ( IA2_EVENT_TEXT_COLUMN_CHANGED + 1 ) ,
- IA2_EVENT_TEXT_REMOVED = ( IA2_EVENT_TEXT_INSERTED + 1 ) ,
- IA2_EVENT_TEXT_UPDATED = ( IA2_EVENT_TEXT_REMOVED + 1 ) ,
- IA2_EVENT_TEXT_SELECTION_CHANGED = ( IA2_EVENT_TEXT_UPDATED + 1 ) ,
- IA2_EVENT_VISIBLE_DATA_CHANGED = ( IA2_EVENT_TEXT_SELECTION_CHANGED + 1 )
- } ;
-
-
-extern RPC_IF_HANDLE __MIDL_itf_AccessibleEventID_0000_0000_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_AccessibleEventID_0000_0000_v0_0_s_ifspec;
-
-/* Additional Prototypes for ALL interfaces */
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleHyperlink.h b/src/3rdparty/iaccessible2/generated/amd64/AccessibleHyperlink.h
deleted file mode 100644
index 24fad0bd8a..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleHyperlink.h
+++ /dev/null
@@ -1,252 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:57 2012
- */
-/* Compiler settings for AccessibleHyperlink.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-#ifndef COM_NO_WINDOWS_H
-#include "windows.h"
-#include "ole2.h"
-#endif /*COM_NO_WINDOWS_H*/
-
-#ifndef __AccessibleHyperlink_h__
-#define __AccessibleHyperlink_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifndef __IAccessibleHyperlink_FWD_DEFINED__
-#define __IAccessibleHyperlink_FWD_DEFINED__
-typedef interface IAccessibleHyperlink IAccessibleHyperlink;
-#endif /* __IAccessibleHyperlink_FWD_DEFINED__ */
-
-
-/* header files for imported files */
-#include "objidl.h"
-#include "oaidl.h"
-#include "oleacc.h"
-#include "AccessibleAction.h"
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#ifndef __IAccessibleHyperlink_INTERFACE_DEFINED__
-#define __IAccessibleHyperlink_INTERFACE_DEFINED__
-
-/* interface IAccessibleHyperlink */
-/* [uuid][object] */
-
-
-EXTERN_C const IID IID_IAccessibleHyperlink;
-
-#if defined(__cplusplus) && !defined(CINTERFACE)
-
- MIDL_INTERFACE("01C20F2B-3DD2-400f-949F-AD00BDAB1D41")
- IAccessibleHyperlink : public IAccessibleAction
- {
- public:
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_anchor(
- /* [in] */ long index,
- /* [retval][out] */ VARIANT *anchor) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_anchorTarget(
- /* [in] */ long index,
- /* [retval][out] */ VARIANT *anchorTarget) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_startIndex(
- /* [retval][out] */ long *index) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_endIndex(
- /* [retval][out] */ long *index) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_valid(
- /* [retval][out] */ boolean *valid) = 0;
-
- };
-
-#else /* C style interface */
-
- typedef struct IAccessibleHyperlinkVtbl
- {
- BEGIN_INTERFACE
-
- HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
- IAccessibleHyperlink * This,
- /* [in] */ REFIID riid,
- /* [annotation][iid_is][out] */
- __RPC__deref_out void **ppvObject);
-
- ULONG ( STDMETHODCALLTYPE *AddRef )(
- IAccessibleHyperlink * This);
-
- ULONG ( STDMETHODCALLTYPE *Release )(
- IAccessibleHyperlink * This);
-
- HRESULT ( STDMETHODCALLTYPE *nActions )(
- IAccessibleHyperlink * This,
- /* [retval][out] */ long *nActions);
-
- HRESULT ( STDMETHODCALLTYPE *doAction )(
- IAccessibleHyperlink * This,
- /* [in] */ long actionIndex);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_description )(
- IAccessibleHyperlink * This,
- /* [in] */ long actionIndex,
- /* [retval][out] */ BSTR *description);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_keyBinding )(
- IAccessibleHyperlink * This,
- /* [in] */ long actionIndex,
- /* [in] */ long nMaxBindings,
- /* [length_is][length_is][size_is][size_is][out] */ BSTR **keyBindings,
- /* [retval][out] */ long *nBindings);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_name )(
- IAccessibleHyperlink * This,
- /* [in] */ long actionIndex,
- /* [retval][out] */ BSTR *name);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedName )(
- IAccessibleHyperlink * This,
- /* [in] */ long actionIndex,
- /* [retval][out] */ BSTR *localizedName);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_anchor )(
- IAccessibleHyperlink * This,
- /* [in] */ long index,
- /* [retval][out] */ VARIANT *anchor);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_anchorTarget )(
- IAccessibleHyperlink * This,
- /* [in] */ long index,
- /* [retval][out] */ VARIANT *anchorTarget);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_startIndex )(
- IAccessibleHyperlink * This,
- /* [retval][out] */ long *index);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_endIndex )(
- IAccessibleHyperlink * This,
- /* [retval][out] */ long *index);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_valid )(
- IAccessibleHyperlink * This,
- /* [retval][out] */ boolean *valid);
-
- END_INTERFACE
- } IAccessibleHyperlinkVtbl;
-
- interface IAccessibleHyperlink
- {
- CONST_VTBL struct IAccessibleHyperlinkVtbl *lpVtbl;
- };
-
-
-
-#ifdef COBJMACROS
-
-
-#define IAccessibleHyperlink_QueryInterface(This,riid,ppvObject) \
- ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
-
-#define IAccessibleHyperlink_AddRef(This) \
- ( (This)->lpVtbl -> AddRef(This) )
-
-#define IAccessibleHyperlink_Release(This) \
- ( (This)->lpVtbl -> Release(This) )
-
-
-#define IAccessibleHyperlink_nActions(This,nActions) \
- ( (This)->lpVtbl -> nActions(This,nActions) )
-
-#define IAccessibleHyperlink_doAction(This,actionIndex) \
- ( (This)->lpVtbl -> doAction(This,actionIndex) )
-
-#define IAccessibleHyperlink_get_description(This,actionIndex,description) \
- ( (This)->lpVtbl -> get_description(This,actionIndex,description) )
-
-#define IAccessibleHyperlink_get_keyBinding(This,actionIndex,nMaxBindings,keyBindings,nBindings) \
- ( (This)->lpVtbl -> get_keyBinding(This,actionIndex,nMaxBindings,keyBindings,nBindings) )
-
-#define IAccessibleHyperlink_get_name(This,actionIndex,name) \
- ( (This)->lpVtbl -> get_name(This,actionIndex,name) )
-
-#define IAccessibleHyperlink_get_localizedName(This,actionIndex,localizedName) \
- ( (This)->lpVtbl -> get_localizedName(This,actionIndex,localizedName) )
-
-
-#define IAccessibleHyperlink_get_anchor(This,index,anchor) \
- ( (This)->lpVtbl -> get_anchor(This,index,anchor) )
-
-#define IAccessibleHyperlink_get_anchorTarget(This,index,anchorTarget) \
- ( (This)->lpVtbl -> get_anchorTarget(This,index,anchorTarget) )
-
-#define IAccessibleHyperlink_get_startIndex(This,index) \
- ( (This)->lpVtbl -> get_startIndex(This,index) )
-
-#define IAccessibleHyperlink_get_endIndex(This,index) \
- ( (This)->lpVtbl -> get_endIndex(This,index) )
-
-#define IAccessibleHyperlink_get_valid(This,valid) \
- ( (This)->lpVtbl -> get_valid(This,valid) )
-
-#endif /* COBJMACROS */
-
-
-#endif /* C style interface */
-
-
-
-
-#endif /* __IAccessibleHyperlink_INTERFACE_DEFINED__ */
-
-
-/* Additional Prototypes for ALL interfaces */
-
-unsigned long __RPC_USER VARIANT_UserSize( unsigned long *, unsigned long , VARIANT * );
-unsigned char * __RPC_USER VARIANT_UserMarshal( unsigned long *, unsigned char *, VARIANT * );
-unsigned char * __RPC_USER VARIANT_UserUnmarshal(unsigned long *, unsigned char *, VARIANT * );
-void __RPC_USER VARIANT_UserFree( unsigned long *, VARIANT * );
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleHyperlink_i.c b/src/3rdparty/iaccessible2/generated/amd64/AccessibleHyperlink_i.c
deleted file mode 100644
index f668740e0b..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleHyperlink_i.c
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
-
-/* link this file in with the server and any clients */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:57 2012
- */
-/* Compiler settings for AccessibleHyperlink.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#include <rpc.h>
-#include <rpcndr.h>
-
-#ifdef _MIDL_USE_GUIDDEF_
-
-#ifndef INITGUID
-#define INITGUID
-#include <guiddef.h>
-#undef INITGUID
-#else
-#include <guiddef.h>
-#endif
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
-
-#else // !_MIDL_USE_GUIDDEF_
-
-#ifndef __IID_DEFINED__
-#define __IID_DEFINED__
-
-typedef struct _IID
-{
- unsigned long x;
- unsigned short s1;
- unsigned short s2;
- unsigned char c[8];
-} IID;
-
-#endif // __IID_DEFINED__
-
-#ifndef CLSID_DEFINED
-#define CLSID_DEFINED
-typedef IID CLSID;
-#endif // CLSID_DEFINED
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
-
-#endif !_MIDL_USE_GUIDDEF_
-
-MIDL_DEFINE_GUID(IID, IID_IAccessibleHyperlink,0x01C20F2B,0x3DD2,0x400f,0x94,0x9F,0xAD,0x00,0xBD,0xAB,0x1D,0x41);
-
-#undef MIDL_DEFINE_GUID
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleHyperlink_p.c b/src/3rdparty/iaccessible2/generated/amd64/AccessibleHyperlink_p.c
deleted file mode 100644
index 4cf0a1333c..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleHyperlink_p.c
+++ /dev/null
@@ -1,1113 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the proxy stub code */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:57 2012
- */
-/* Compiler settings for AccessibleHyperlink.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#if defined(_M_AMD64)
-
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-#if _MSC_VER >= 1200
-#pragma warning(push)
-#endif
-
-#pragma warning( disable: 4211 ) /* redefine extern to static */
-#pragma warning( disable: 4232 ) /* dllimport identity*/
-#pragma warning( disable: 4024 ) /* array to pointer mapping*/
-#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */
-
-#define USE_STUBLESS_PROXY
-
-
-/* verify that the <rpcproxy.h> version is high enough to compile this file*/
-#ifndef __REDQ_RPCPROXY_H_VERSION__
-#define __REQUIRED_RPCPROXY_H_VERSION__ 475
-#endif
-
-
-#include "rpcproxy.h"
-#ifndef __RPCPROXY_H_VERSION__
-#error this stub requires an updated version of <rpcproxy.h>
-#endif /* __RPCPROXY_H_VERSION__ */
-
-
-#include "AccessibleHyperlink.h"
-
-#define TYPE_FORMAT_STRING_SIZE 997
-#define PROC_FORMAT_STRING_SIZE 203
-#define EXPR_FORMAT_STRING_SIZE 1
-#define TRANSMIT_AS_TABLE_SIZE 0
-#define WIRE_MARSHAL_TABLE_SIZE 1
-
-typedef struct _AccessibleHyperlink_MIDL_TYPE_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
- } AccessibleHyperlink_MIDL_TYPE_FORMAT_STRING;
-
-typedef struct _AccessibleHyperlink_MIDL_PROC_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
- } AccessibleHyperlink_MIDL_PROC_FORMAT_STRING;
-
-typedef struct _AccessibleHyperlink_MIDL_EXPR_FORMAT_STRING
- {
- long Pad;
- unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
- } AccessibleHyperlink_MIDL_EXPR_FORMAT_STRING;
-
-
-static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
-{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
-
-
-extern const AccessibleHyperlink_MIDL_TYPE_FORMAT_STRING AccessibleHyperlink__MIDL_TypeFormatString;
-extern const AccessibleHyperlink_MIDL_PROC_FORMAT_STRING AccessibleHyperlink__MIDL_ProcFormatString;
-extern const AccessibleHyperlink_MIDL_EXPR_FORMAT_STRING AccessibleHyperlink__MIDL_ExprFormatString;
-
-
-extern const MIDL_STUB_DESC Object_StubDesc;
-
-
-extern const MIDL_SERVER_INFO IAccessibleHyperlink_ServerInfo;
-extern const MIDL_STUBLESS_PROXY_INFO IAccessibleHyperlink_ProxyInfo;
-
-
-extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ];
-
-#if !defined(__RPC_WIN64__)
-#error Invalid build platform for this stub.
-#endif
-
-static const AccessibleHyperlink_MIDL_PROC_FORMAT_STRING AccessibleHyperlink__MIDL_ProcFormatString =
- {
- 0,
- {
-
- /* Procedure get_anchor */
-
- 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 2 */ NdrFcLong( 0x0 ), /* 0 */
-/* 6 */ NdrFcShort( 0x9 ), /* 9 */
-/* 8 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 10 */ NdrFcShort( 0x8 ), /* 8 */
-/* 12 */ NdrFcShort( 0x8 ), /* 8 */
-/* 14 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 16 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 18 */ NdrFcShort( 0x1 ), /* 1 */
-/* 20 */ NdrFcShort( 0x0 ), /* 0 */
-/* 22 */ NdrFcShort( 0x0 ), /* 0 */
-/* 24 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter index */
-
-/* 26 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 28 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 30 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter anchor */
-
-/* 32 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */
-/* 34 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 36 */ NdrFcShort( 0x3d2 ), /* Type Offset=978 */
-
- /* Return value */
-
-/* 38 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 40 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 42 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_anchorTarget */
-
-/* 44 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 46 */ NdrFcLong( 0x0 ), /* 0 */
-/* 50 */ NdrFcShort( 0xa ), /* 10 */
-/* 52 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 54 */ NdrFcShort( 0x8 ), /* 8 */
-/* 56 */ NdrFcShort( 0x8 ), /* 8 */
-/* 58 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 60 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 62 */ NdrFcShort( 0x1 ), /* 1 */
-/* 64 */ NdrFcShort( 0x0 ), /* 0 */
-/* 66 */ NdrFcShort( 0x0 ), /* 0 */
-/* 68 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter index */
-
-/* 70 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 72 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 74 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter anchorTarget */
-
-/* 76 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */
-/* 78 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 80 */ NdrFcShort( 0x3d2 ), /* Type Offset=978 */
-
- /* Return value */
-
-/* 82 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 84 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 86 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_startIndex */
-
-/* 88 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 90 */ NdrFcLong( 0x0 ), /* 0 */
-/* 94 */ NdrFcShort( 0xb ), /* 11 */
-/* 96 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 98 */ NdrFcShort( 0x0 ), /* 0 */
-/* 100 */ NdrFcShort( 0x24 ), /* 36 */
-/* 102 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 104 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 106 */ NdrFcShort( 0x0 ), /* 0 */
-/* 108 */ NdrFcShort( 0x0 ), /* 0 */
-/* 110 */ NdrFcShort( 0x0 ), /* 0 */
-/* 112 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter index */
-
-/* 114 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 116 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 118 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 120 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 122 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 124 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_endIndex */
-
-/* 126 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 128 */ NdrFcLong( 0x0 ), /* 0 */
-/* 132 */ NdrFcShort( 0xc ), /* 12 */
-/* 134 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 136 */ NdrFcShort( 0x0 ), /* 0 */
-/* 138 */ NdrFcShort( 0x24 ), /* 36 */
-/* 140 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 142 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 144 */ NdrFcShort( 0x0 ), /* 0 */
-/* 146 */ NdrFcShort( 0x0 ), /* 0 */
-/* 148 */ NdrFcShort( 0x0 ), /* 0 */
-/* 150 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter index */
-
-/* 152 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 154 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 156 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 158 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 160 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 162 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_valid */
-
-/* 164 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 166 */ NdrFcLong( 0x0 ), /* 0 */
-/* 170 */ NdrFcShort( 0xd ), /* 13 */
-/* 172 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 174 */ NdrFcShort( 0x0 ), /* 0 */
-/* 176 */ NdrFcShort( 0x21 ), /* 33 */
-/* 178 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 180 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 182 */ NdrFcShort( 0x0 ), /* 0 */
-/* 184 */ NdrFcShort( 0x0 ), /* 0 */
-/* 186 */ NdrFcShort( 0x0 ), /* 0 */
-/* 188 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter valid */
-
-/* 190 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 192 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 194 */ 0x3, /* FC_SMALL */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 196 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 198 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 200 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- 0x0
- }
- };
-
-static const AccessibleHyperlink_MIDL_TYPE_FORMAT_STRING AccessibleHyperlink__MIDL_TypeFormatString =
- {
- 0,
- {
- NdrFcShort( 0x0 ), /* 0 */
-/* 2 */
- 0x11, 0x4, /* FC_RP [alloced_on_stack] */
-/* 4 */ NdrFcShort( 0x3ce ), /* Offset= 974 (978) */
-/* 6 */
- 0x13, 0x0, /* FC_OP */
-/* 8 */ NdrFcShort( 0x3b6 ), /* Offset= 950 (958) */
-/* 10 */
- 0x2b, /* FC_NON_ENCAPSULATED_UNION */
- 0x9, /* FC_ULONG */
-/* 12 */ 0x7, /* Corr desc: FC_USHORT */
- 0x0, /* */
-/* 14 */ NdrFcShort( 0xfff8 ), /* -8 */
-/* 16 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 18 */ NdrFcShort( 0x2 ), /* Offset= 2 (20) */
-/* 20 */ NdrFcShort( 0x10 ), /* 16 */
-/* 22 */ NdrFcShort( 0x2f ), /* 47 */
-/* 24 */ NdrFcLong( 0x14 ), /* 20 */
-/* 28 */ NdrFcShort( 0x800b ), /* Simple arm type: FC_HYPER */
-/* 30 */ NdrFcLong( 0x3 ), /* 3 */
-/* 34 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
-/* 36 */ NdrFcLong( 0x11 ), /* 17 */
-/* 40 */ NdrFcShort( 0x8001 ), /* Simple arm type: FC_BYTE */
-/* 42 */ NdrFcLong( 0x2 ), /* 2 */
-/* 46 */ NdrFcShort( 0x8006 ), /* Simple arm type: FC_SHORT */
-/* 48 */ NdrFcLong( 0x4 ), /* 4 */
-/* 52 */ NdrFcShort( 0x800a ), /* Simple arm type: FC_FLOAT */
-/* 54 */ NdrFcLong( 0x5 ), /* 5 */
-/* 58 */ NdrFcShort( 0x800c ), /* Simple arm type: FC_DOUBLE */
-/* 60 */ NdrFcLong( 0xb ), /* 11 */
-/* 64 */ NdrFcShort( 0x8006 ), /* Simple arm type: FC_SHORT */
-/* 66 */ NdrFcLong( 0xa ), /* 10 */
-/* 70 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
-/* 72 */ NdrFcLong( 0x6 ), /* 6 */
-/* 76 */ NdrFcShort( 0xe8 ), /* Offset= 232 (308) */
-/* 78 */ NdrFcLong( 0x7 ), /* 7 */
-/* 82 */ NdrFcShort( 0x800c ), /* Simple arm type: FC_DOUBLE */
-/* 84 */ NdrFcLong( 0x8 ), /* 8 */
-/* 88 */ NdrFcShort( 0xe2 ), /* Offset= 226 (314) */
-/* 90 */ NdrFcLong( 0xd ), /* 13 */
-/* 94 */ NdrFcShort( 0xf6 ), /* Offset= 246 (340) */
-/* 96 */ NdrFcLong( 0x9 ), /* 9 */
-/* 100 */ NdrFcShort( 0x102 ), /* Offset= 258 (358) */
-/* 102 */ NdrFcLong( 0x2000 ), /* 8192 */
-/* 106 */ NdrFcShort( 0x10e ), /* Offset= 270 (376) */
-/* 108 */ NdrFcLong( 0x24 ), /* 36 */
-/* 112 */ NdrFcShort( 0x304 ), /* Offset= 772 (884) */
-/* 114 */ NdrFcLong( 0x4024 ), /* 16420 */
-/* 118 */ NdrFcShort( 0x2fe ), /* Offset= 766 (884) */
-/* 120 */ NdrFcLong( 0x4011 ), /* 16401 */
-/* 124 */ NdrFcShort( 0x2fc ), /* Offset= 764 (888) */
-/* 126 */ NdrFcLong( 0x4002 ), /* 16386 */
-/* 130 */ NdrFcShort( 0x2fa ), /* Offset= 762 (892) */
-/* 132 */ NdrFcLong( 0x4003 ), /* 16387 */
-/* 136 */ NdrFcShort( 0x2f8 ), /* Offset= 760 (896) */
-/* 138 */ NdrFcLong( 0x4014 ), /* 16404 */
-/* 142 */ NdrFcShort( 0x2f6 ), /* Offset= 758 (900) */
-/* 144 */ NdrFcLong( 0x4004 ), /* 16388 */
-/* 148 */ NdrFcShort( 0x2f4 ), /* Offset= 756 (904) */
-/* 150 */ NdrFcLong( 0x4005 ), /* 16389 */
-/* 154 */ NdrFcShort( 0x2f2 ), /* Offset= 754 (908) */
-/* 156 */ NdrFcLong( 0x400b ), /* 16395 */
-/* 160 */ NdrFcShort( 0x2dc ), /* Offset= 732 (892) */
-/* 162 */ NdrFcLong( 0x400a ), /* 16394 */
-/* 166 */ NdrFcShort( 0x2da ), /* Offset= 730 (896) */
-/* 168 */ NdrFcLong( 0x4006 ), /* 16390 */
-/* 172 */ NdrFcShort( 0x2e4 ), /* Offset= 740 (912) */
-/* 174 */ NdrFcLong( 0x4007 ), /* 16391 */
-/* 178 */ NdrFcShort( 0x2da ), /* Offset= 730 (908) */
-/* 180 */ NdrFcLong( 0x4008 ), /* 16392 */
-/* 184 */ NdrFcShort( 0x2dc ), /* Offset= 732 (916) */
-/* 186 */ NdrFcLong( 0x400d ), /* 16397 */
-/* 190 */ NdrFcShort( 0x2da ), /* Offset= 730 (920) */
-/* 192 */ NdrFcLong( 0x4009 ), /* 16393 */
-/* 196 */ NdrFcShort( 0x2d8 ), /* Offset= 728 (924) */
-/* 198 */ NdrFcLong( 0x6000 ), /* 24576 */
-/* 202 */ NdrFcShort( 0x2d6 ), /* Offset= 726 (928) */
-/* 204 */ NdrFcLong( 0x400c ), /* 16396 */
-/* 208 */ NdrFcShort( 0x2d4 ), /* Offset= 724 (932) */
-/* 210 */ NdrFcLong( 0x10 ), /* 16 */
-/* 214 */ NdrFcShort( 0x8002 ), /* Simple arm type: FC_CHAR */
-/* 216 */ NdrFcLong( 0x12 ), /* 18 */
-/* 220 */ NdrFcShort( 0x8006 ), /* Simple arm type: FC_SHORT */
-/* 222 */ NdrFcLong( 0x13 ), /* 19 */
-/* 226 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
-/* 228 */ NdrFcLong( 0x15 ), /* 21 */
-/* 232 */ NdrFcShort( 0x800b ), /* Simple arm type: FC_HYPER */
-/* 234 */ NdrFcLong( 0x16 ), /* 22 */
-/* 238 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
-/* 240 */ NdrFcLong( 0x17 ), /* 23 */
-/* 244 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
-/* 246 */ NdrFcLong( 0xe ), /* 14 */
-/* 250 */ NdrFcShort( 0x2b2 ), /* Offset= 690 (940) */
-/* 252 */ NdrFcLong( 0x400e ), /* 16398 */
-/* 256 */ NdrFcShort( 0x2b6 ), /* Offset= 694 (950) */
-/* 258 */ NdrFcLong( 0x4010 ), /* 16400 */
-/* 262 */ NdrFcShort( 0x2b4 ), /* Offset= 692 (954) */
-/* 264 */ NdrFcLong( 0x4012 ), /* 16402 */
-/* 268 */ NdrFcShort( 0x270 ), /* Offset= 624 (892) */
-/* 270 */ NdrFcLong( 0x4013 ), /* 16403 */
-/* 274 */ NdrFcShort( 0x26e ), /* Offset= 622 (896) */
-/* 276 */ NdrFcLong( 0x4015 ), /* 16405 */
-/* 280 */ NdrFcShort( 0x26c ), /* Offset= 620 (900) */
-/* 282 */ NdrFcLong( 0x4016 ), /* 16406 */
-/* 286 */ NdrFcShort( 0x262 ), /* Offset= 610 (896) */
-/* 288 */ NdrFcLong( 0x4017 ), /* 16407 */
-/* 292 */ NdrFcShort( 0x25c ), /* Offset= 604 (896) */
-/* 294 */ NdrFcLong( 0x0 ), /* 0 */
-/* 298 */ NdrFcShort( 0x0 ), /* Offset= 0 (298) */
-/* 300 */ NdrFcLong( 0x1 ), /* 1 */
-/* 304 */ NdrFcShort( 0x0 ), /* Offset= 0 (304) */
-/* 306 */ NdrFcShort( 0xffff ), /* Offset= -1 (305) */
-/* 308 */
- 0x15, /* FC_STRUCT */
- 0x7, /* 7 */
-/* 310 */ NdrFcShort( 0x8 ), /* 8 */
-/* 312 */ 0xb, /* FC_HYPER */
- 0x5b, /* FC_END */
-/* 314 */
- 0x13, 0x0, /* FC_OP */
-/* 316 */ NdrFcShort( 0xe ), /* Offset= 14 (330) */
-/* 318 */
- 0x1b, /* FC_CARRAY */
- 0x1, /* 1 */
-/* 320 */ NdrFcShort( 0x2 ), /* 2 */
-/* 322 */ 0x9, /* Corr desc: FC_ULONG */
- 0x0, /* */
-/* 324 */ NdrFcShort( 0xfffc ), /* -4 */
-/* 326 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 328 */ 0x6, /* FC_SHORT */
- 0x5b, /* FC_END */
-/* 330 */
- 0x17, /* FC_CSTRUCT */
- 0x3, /* 3 */
-/* 332 */ NdrFcShort( 0x8 ), /* 8 */
-/* 334 */ NdrFcShort( 0xfff0 ), /* Offset= -16 (318) */
-/* 336 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 338 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 340 */
- 0x2f, /* FC_IP */
- 0x5a, /* FC_CONSTANT_IID */
-/* 342 */ NdrFcLong( 0x0 ), /* 0 */
-/* 346 */ NdrFcShort( 0x0 ), /* 0 */
-/* 348 */ NdrFcShort( 0x0 ), /* 0 */
-/* 350 */ 0xc0, /* 192 */
- 0x0, /* 0 */
-/* 352 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 354 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 356 */ 0x0, /* 0 */
- 0x46, /* 70 */
-/* 358 */
- 0x2f, /* FC_IP */
- 0x5a, /* FC_CONSTANT_IID */
-/* 360 */ NdrFcLong( 0x20400 ), /* 132096 */
-/* 364 */ NdrFcShort( 0x0 ), /* 0 */
-/* 366 */ NdrFcShort( 0x0 ), /* 0 */
-/* 368 */ 0xc0, /* 192 */
- 0x0, /* 0 */
-/* 370 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 372 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 374 */ 0x0, /* 0 */
- 0x46, /* 70 */
-/* 376 */
- 0x13, 0x10, /* FC_OP [pointer_deref] */
-/* 378 */ NdrFcShort( 0x2 ), /* Offset= 2 (380) */
-/* 380 */
- 0x13, 0x0, /* FC_OP */
-/* 382 */ NdrFcShort( 0x1e4 ), /* Offset= 484 (866) */
-/* 384 */
- 0x2a, /* FC_ENCAPSULATED_UNION */
- 0x89, /* 137 */
-/* 386 */ NdrFcShort( 0x20 ), /* 32 */
-/* 388 */ NdrFcShort( 0xa ), /* 10 */
-/* 390 */ NdrFcLong( 0x8 ), /* 8 */
-/* 394 */ NdrFcShort( 0x50 ), /* Offset= 80 (474) */
-/* 396 */ NdrFcLong( 0xd ), /* 13 */
-/* 400 */ NdrFcShort( 0x70 ), /* Offset= 112 (512) */
-/* 402 */ NdrFcLong( 0x9 ), /* 9 */
-/* 406 */ NdrFcShort( 0x90 ), /* Offset= 144 (550) */
-/* 408 */ NdrFcLong( 0xc ), /* 12 */
-/* 412 */ NdrFcShort( 0xb0 ), /* Offset= 176 (588) */
-/* 414 */ NdrFcLong( 0x24 ), /* 36 */
-/* 418 */ NdrFcShort( 0x102 ), /* Offset= 258 (676) */
-/* 420 */ NdrFcLong( 0x800d ), /* 32781 */
-/* 424 */ NdrFcShort( 0x11e ), /* Offset= 286 (710) */
-/* 426 */ NdrFcLong( 0x10 ), /* 16 */
-/* 430 */ NdrFcShort( 0x138 ), /* Offset= 312 (742) */
-/* 432 */ NdrFcLong( 0x2 ), /* 2 */
-/* 436 */ NdrFcShort( 0x14e ), /* Offset= 334 (770) */
-/* 438 */ NdrFcLong( 0x3 ), /* 3 */
-/* 442 */ NdrFcShort( 0x164 ), /* Offset= 356 (798) */
-/* 444 */ NdrFcLong( 0x14 ), /* 20 */
-/* 448 */ NdrFcShort( 0x17a ), /* Offset= 378 (826) */
-/* 450 */ NdrFcShort( 0xffff ), /* Offset= -1 (449) */
-/* 452 */
- 0x21, /* FC_BOGUS_ARRAY */
- 0x3, /* 3 */
-/* 454 */ NdrFcShort( 0x0 ), /* 0 */
-/* 456 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 458 */ NdrFcShort( 0x0 ), /* 0 */
-/* 460 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 462 */ NdrFcLong( 0xffffffff ), /* -1 */
-/* 466 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 468 */
- 0x13, 0x0, /* FC_OP */
-/* 470 */ NdrFcShort( 0xff74 ), /* Offset= -140 (330) */
-/* 472 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 474 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 476 */ NdrFcShort( 0x10 ), /* 16 */
-/* 478 */ NdrFcShort( 0x0 ), /* 0 */
-/* 480 */ NdrFcShort( 0x6 ), /* Offset= 6 (486) */
-/* 482 */ 0x8, /* FC_LONG */
- 0x40, /* FC_STRUCTPAD4 */
-/* 484 */ 0x36, /* FC_POINTER */
- 0x5b, /* FC_END */
-/* 486 */
- 0x11, 0x0, /* FC_RP */
-/* 488 */ NdrFcShort( 0xffdc ), /* Offset= -36 (452) */
-/* 490 */
- 0x21, /* FC_BOGUS_ARRAY */
- 0x3, /* 3 */
-/* 492 */ NdrFcShort( 0x0 ), /* 0 */
-/* 494 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 496 */ NdrFcShort( 0x0 ), /* 0 */
-/* 498 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 500 */ NdrFcLong( 0xffffffff ), /* -1 */
-/* 504 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 506 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 508 */ NdrFcShort( 0xff58 ), /* Offset= -168 (340) */
-/* 510 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 512 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 514 */ NdrFcShort( 0x10 ), /* 16 */
-/* 516 */ NdrFcShort( 0x0 ), /* 0 */
-/* 518 */ NdrFcShort( 0x6 ), /* Offset= 6 (524) */
-/* 520 */ 0x8, /* FC_LONG */
- 0x40, /* FC_STRUCTPAD4 */
-/* 522 */ 0x36, /* FC_POINTER */
- 0x5b, /* FC_END */
-/* 524 */
- 0x11, 0x0, /* FC_RP */
-/* 526 */ NdrFcShort( 0xffdc ), /* Offset= -36 (490) */
-/* 528 */
- 0x21, /* FC_BOGUS_ARRAY */
- 0x3, /* 3 */
-/* 530 */ NdrFcShort( 0x0 ), /* 0 */
-/* 532 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 534 */ NdrFcShort( 0x0 ), /* 0 */
-/* 536 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 538 */ NdrFcLong( 0xffffffff ), /* -1 */
-/* 542 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 544 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 546 */ NdrFcShort( 0xff44 ), /* Offset= -188 (358) */
-/* 548 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 550 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 552 */ NdrFcShort( 0x10 ), /* 16 */
-/* 554 */ NdrFcShort( 0x0 ), /* 0 */
-/* 556 */ NdrFcShort( 0x6 ), /* Offset= 6 (562) */
-/* 558 */ 0x8, /* FC_LONG */
- 0x40, /* FC_STRUCTPAD4 */
-/* 560 */ 0x36, /* FC_POINTER */
- 0x5b, /* FC_END */
-/* 562 */
- 0x11, 0x0, /* FC_RP */
-/* 564 */ NdrFcShort( 0xffdc ), /* Offset= -36 (528) */
-/* 566 */
- 0x21, /* FC_BOGUS_ARRAY */
- 0x3, /* 3 */
-/* 568 */ NdrFcShort( 0x0 ), /* 0 */
-/* 570 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 572 */ NdrFcShort( 0x0 ), /* 0 */
-/* 574 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 576 */ NdrFcLong( 0xffffffff ), /* -1 */
-/* 580 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 582 */
- 0x13, 0x0, /* FC_OP */
-/* 584 */ NdrFcShort( 0x176 ), /* Offset= 374 (958) */
-/* 586 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 588 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 590 */ NdrFcShort( 0x10 ), /* 16 */
-/* 592 */ NdrFcShort( 0x0 ), /* 0 */
-/* 594 */ NdrFcShort( 0x6 ), /* Offset= 6 (600) */
-/* 596 */ 0x8, /* FC_LONG */
- 0x40, /* FC_STRUCTPAD4 */
-/* 598 */ 0x36, /* FC_POINTER */
- 0x5b, /* FC_END */
-/* 600 */
- 0x11, 0x0, /* FC_RP */
-/* 602 */ NdrFcShort( 0xffdc ), /* Offset= -36 (566) */
-/* 604 */
- 0x2f, /* FC_IP */
- 0x5a, /* FC_CONSTANT_IID */
-/* 606 */ NdrFcLong( 0x2f ), /* 47 */
-/* 610 */ NdrFcShort( 0x0 ), /* 0 */
-/* 612 */ NdrFcShort( 0x0 ), /* 0 */
-/* 614 */ 0xc0, /* 192 */
- 0x0, /* 0 */
-/* 616 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 618 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 620 */ 0x0, /* 0 */
- 0x46, /* 70 */
-/* 622 */
- 0x1b, /* FC_CARRAY */
- 0x0, /* 0 */
-/* 624 */ NdrFcShort( 0x1 ), /* 1 */
-/* 626 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 628 */ NdrFcShort( 0x4 ), /* 4 */
-/* 630 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 632 */ 0x1, /* FC_BYTE */
- 0x5b, /* FC_END */
-/* 634 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 636 */ NdrFcShort( 0x18 ), /* 24 */
-/* 638 */ NdrFcShort( 0x0 ), /* 0 */
-/* 640 */ NdrFcShort( 0xa ), /* Offset= 10 (650) */
-/* 642 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 644 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 646 */ NdrFcShort( 0xffd6 ), /* Offset= -42 (604) */
-/* 648 */ 0x36, /* FC_POINTER */
- 0x5b, /* FC_END */
-/* 650 */
- 0x13, 0x0, /* FC_OP */
-/* 652 */ NdrFcShort( 0xffe2 ), /* Offset= -30 (622) */
-/* 654 */
- 0x21, /* FC_BOGUS_ARRAY */
- 0x3, /* 3 */
-/* 656 */ NdrFcShort( 0x0 ), /* 0 */
-/* 658 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 660 */ NdrFcShort( 0x0 ), /* 0 */
-/* 662 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 664 */ NdrFcLong( 0xffffffff ), /* -1 */
-/* 668 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 670 */
- 0x13, 0x0, /* FC_OP */
-/* 672 */ NdrFcShort( 0xffda ), /* Offset= -38 (634) */
-/* 674 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 676 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 678 */ NdrFcShort( 0x10 ), /* 16 */
-/* 680 */ NdrFcShort( 0x0 ), /* 0 */
-/* 682 */ NdrFcShort( 0x6 ), /* Offset= 6 (688) */
-/* 684 */ 0x8, /* FC_LONG */
- 0x40, /* FC_STRUCTPAD4 */
-/* 686 */ 0x36, /* FC_POINTER */
- 0x5b, /* FC_END */
-/* 688 */
- 0x11, 0x0, /* FC_RP */
-/* 690 */ NdrFcShort( 0xffdc ), /* Offset= -36 (654) */
-/* 692 */
- 0x1d, /* FC_SMFARRAY */
- 0x0, /* 0 */
-/* 694 */ NdrFcShort( 0x8 ), /* 8 */
-/* 696 */ 0x1, /* FC_BYTE */
- 0x5b, /* FC_END */
-/* 698 */
- 0x15, /* FC_STRUCT */
- 0x3, /* 3 */
-/* 700 */ NdrFcShort( 0x10 ), /* 16 */
-/* 702 */ 0x8, /* FC_LONG */
- 0x6, /* FC_SHORT */
-/* 704 */ 0x6, /* FC_SHORT */
- 0x4c, /* FC_EMBEDDED_COMPLEX */
-/* 706 */ 0x0, /* 0 */
- NdrFcShort( 0xfff1 ), /* Offset= -15 (692) */
- 0x5b, /* FC_END */
-/* 710 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 712 */ NdrFcShort( 0x20 ), /* 32 */
-/* 714 */ NdrFcShort( 0x0 ), /* 0 */
-/* 716 */ NdrFcShort( 0xa ), /* Offset= 10 (726) */
-/* 718 */ 0x8, /* FC_LONG */
- 0x40, /* FC_STRUCTPAD4 */
-/* 720 */ 0x36, /* FC_POINTER */
- 0x4c, /* FC_EMBEDDED_COMPLEX */
-/* 722 */ 0x0, /* 0 */
- NdrFcShort( 0xffe7 ), /* Offset= -25 (698) */
- 0x5b, /* FC_END */
-/* 726 */
- 0x11, 0x0, /* FC_RP */
-/* 728 */ NdrFcShort( 0xff12 ), /* Offset= -238 (490) */
-/* 730 */
- 0x1b, /* FC_CARRAY */
- 0x0, /* 0 */
-/* 732 */ NdrFcShort( 0x1 ), /* 1 */
-/* 734 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 736 */ NdrFcShort( 0x0 ), /* 0 */
-/* 738 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 740 */ 0x1, /* FC_BYTE */
- 0x5b, /* FC_END */
-/* 742 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 744 */ NdrFcShort( 0x10 ), /* 16 */
-/* 746 */ NdrFcShort( 0x0 ), /* 0 */
-/* 748 */ NdrFcShort( 0x6 ), /* Offset= 6 (754) */
-/* 750 */ 0x8, /* FC_LONG */
- 0x40, /* FC_STRUCTPAD4 */
-/* 752 */ 0x36, /* FC_POINTER */
- 0x5b, /* FC_END */
-/* 754 */
- 0x13, 0x0, /* FC_OP */
-/* 756 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (730) */
-/* 758 */
- 0x1b, /* FC_CARRAY */
- 0x1, /* 1 */
-/* 760 */ NdrFcShort( 0x2 ), /* 2 */
-/* 762 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 764 */ NdrFcShort( 0x0 ), /* 0 */
-/* 766 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 768 */ 0x6, /* FC_SHORT */
- 0x5b, /* FC_END */
-/* 770 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 772 */ NdrFcShort( 0x10 ), /* 16 */
-/* 774 */ NdrFcShort( 0x0 ), /* 0 */
-/* 776 */ NdrFcShort( 0x6 ), /* Offset= 6 (782) */
-/* 778 */ 0x8, /* FC_LONG */
- 0x40, /* FC_STRUCTPAD4 */
-/* 780 */ 0x36, /* FC_POINTER */
- 0x5b, /* FC_END */
-/* 782 */
- 0x13, 0x0, /* FC_OP */
-/* 784 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (758) */
-/* 786 */
- 0x1b, /* FC_CARRAY */
- 0x3, /* 3 */
-/* 788 */ NdrFcShort( 0x4 ), /* 4 */
-/* 790 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 792 */ NdrFcShort( 0x0 ), /* 0 */
-/* 794 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 796 */ 0x8, /* FC_LONG */
- 0x5b, /* FC_END */
-/* 798 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 800 */ NdrFcShort( 0x10 ), /* 16 */
-/* 802 */ NdrFcShort( 0x0 ), /* 0 */
-/* 804 */ NdrFcShort( 0x6 ), /* Offset= 6 (810) */
-/* 806 */ 0x8, /* FC_LONG */
- 0x40, /* FC_STRUCTPAD4 */
-/* 808 */ 0x36, /* FC_POINTER */
- 0x5b, /* FC_END */
-/* 810 */
- 0x13, 0x0, /* FC_OP */
-/* 812 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (786) */
-/* 814 */
- 0x1b, /* FC_CARRAY */
- 0x7, /* 7 */
-/* 816 */ NdrFcShort( 0x8 ), /* 8 */
-/* 818 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 820 */ NdrFcShort( 0x0 ), /* 0 */
-/* 822 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 824 */ 0xb, /* FC_HYPER */
- 0x5b, /* FC_END */
-/* 826 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 828 */ NdrFcShort( 0x10 ), /* 16 */
-/* 830 */ NdrFcShort( 0x0 ), /* 0 */
-/* 832 */ NdrFcShort( 0x6 ), /* Offset= 6 (838) */
-/* 834 */ 0x8, /* FC_LONG */
- 0x40, /* FC_STRUCTPAD4 */
-/* 836 */ 0x36, /* FC_POINTER */
- 0x5b, /* FC_END */
-/* 838 */
- 0x13, 0x0, /* FC_OP */
-/* 840 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (814) */
-/* 842 */
- 0x15, /* FC_STRUCT */
- 0x3, /* 3 */
-/* 844 */ NdrFcShort( 0x8 ), /* 8 */
-/* 846 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 848 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 850 */
- 0x1b, /* FC_CARRAY */
- 0x3, /* 3 */
-/* 852 */ NdrFcShort( 0x8 ), /* 8 */
-/* 854 */ 0x7, /* Corr desc: FC_USHORT */
- 0x0, /* */
-/* 856 */ NdrFcShort( 0xffc8 ), /* -56 */
-/* 858 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 860 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 862 */ NdrFcShort( 0xffec ), /* Offset= -20 (842) */
-/* 864 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 866 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 868 */ NdrFcShort( 0x38 ), /* 56 */
-/* 870 */ NdrFcShort( 0xffec ), /* Offset= -20 (850) */
-/* 872 */ NdrFcShort( 0x0 ), /* Offset= 0 (872) */
-/* 874 */ 0x6, /* FC_SHORT */
- 0x6, /* FC_SHORT */
-/* 876 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 878 */ 0x40, /* FC_STRUCTPAD4 */
- 0x4c, /* FC_EMBEDDED_COMPLEX */
-/* 880 */ 0x0, /* 0 */
- NdrFcShort( 0xfe0f ), /* Offset= -497 (384) */
- 0x5b, /* FC_END */
-/* 884 */
- 0x13, 0x0, /* FC_OP */
-/* 886 */ NdrFcShort( 0xff04 ), /* Offset= -252 (634) */
-/* 888 */
- 0x13, 0x8, /* FC_OP [simple_pointer] */
-/* 890 */ 0x1, /* FC_BYTE */
- 0x5c, /* FC_PAD */
-/* 892 */
- 0x13, 0x8, /* FC_OP [simple_pointer] */
-/* 894 */ 0x6, /* FC_SHORT */
- 0x5c, /* FC_PAD */
-/* 896 */
- 0x13, 0x8, /* FC_OP [simple_pointer] */
-/* 898 */ 0x8, /* FC_LONG */
- 0x5c, /* FC_PAD */
-/* 900 */
- 0x13, 0x8, /* FC_OP [simple_pointer] */
-/* 902 */ 0xb, /* FC_HYPER */
- 0x5c, /* FC_PAD */
-/* 904 */
- 0x13, 0x8, /* FC_OP [simple_pointer] */
-/* 906 */ 0xa, /* FC_FLOAT */
- 0x5c, /* FC_PAD */
-/* 908 */
- 0x13, 0x8, /* FC_OP [simple_pointer] */
-/* 910 */ 0xc, /* FC_DOUBLE */
- 0x5c, /* FC_PAD */
-/* 912 */
- 0x13, 0x0, /* FC_OP */
-/* 914 */ NdrFcShort( 0xfda2 ), /* Offset= -606 (308) */
-/* 916 */
- 0x13, 0x10, /* FC_OP [pointer_deref] */
-/* 918 */ NdrFcShort( 0xfda4 ), /* Offset= -604 (314) */
-/* 920 */
- 0x13, 0x10, /* FC_OP [pointer_deref] */
-/* 922 */ NdrFcShort( 0xfdba ), /* Offset= -582 (340) */
-/* 924 */
- 0x13, 0x10, /* FC_OP [pointer_deref] */
-/* 926 */ NdrFcShort( 0xfdc8 ), /* Offset= -568 (358) */
-/* 928 */
- 0x13, 0x10, /* FC_OP [pointer_deref] */
-/* 930 */ NdrFcShort( 0xfdd6 ), /* Offset= -554 (376) */
-/* 932 */
- 0x13, 0x10, /* FC_OP [pointer_deref] */
-/* 934 */ NdrFcShort( 0x2 ), /* Offset= 2 (936) */
-/* 936 */
- 0x13, 0x0, /* FC_OP */
-/* 938 */ NdrFcShort( 0x14 ), /* Offset= 20 (958) */
-/* 940 */
- 0x15, /* FC_STRUCT */
- 0x7, /* 7 */
-/* 942 */ NdrFcShort( 0x10 ), /* 16 */
-/* 944 */ 0x6, /* FC_SHORT */
- 0x1, /* FC_BYTE */
-/* 946 */ 0x1, /* FC_BYTE */
- 0x8, /* FC_LONG */
-/* 948 */ 0xb, /* FC_HYPER */
- 0x5b, /* FC_END */
-/* 950 */
- 0x13, 0x0, /* FC_OP */
-/* 952 */ NdrFcShort( 0xfff4 ), /* Offset= -12 (940) */
-/* 954 */
- 0x13, 0x8, /* FC_OP [simple_pointer] */
-/* 956 */ 0x2, /* FC_CHAR */
- 0x5c, /* FC_PAD */
-/* 958 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x7, /* 7 */
-/* 960 */ NdrFcShort( 0x20 ), /* 32 */
-/* 962 */ NdrFcShort( 0x0 ), /* 0 */
-/* 964 */ NdrFcShort( 0x0 ), /* Offset= 0 (964) */
-/* 966 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 968 */ 0x6, /* FC_SHORT */
- 0x6, /* FC_SHORT */
-/* 970 */ 0x6, /* FC_SHORT */
- 0x6, /* FC_SHORT */
-/* 972 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 974 */ NdrFcShort( 0xfc3c ), /* Offset= -964 (10) */
-/* 976 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 978 */ 0xb4, /* FC_USER_MARSHAL */
- 0x83, /* 131 */
-/* 980 */ NdrFcShort( 0x0 ), /* 0 */
-/* 982 */ NdrFcShort( 0x18 ), /* 24 */
-/* 984 */ NdrFcShort( 0x0 ), /* 0 */
-/* 986 */ NdrFcShort( 0xfc2c ), /* Offset= -980 (6) */
-/* 988 */
- 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
-/* 990 */ 0x8, /* FC_LONG */
- 0x5c, /* FC_PAD */
-/* 992 */
- 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
-/* 994 */ 0x3, /* FC_SMALL */
- 0x5c, /* FC_PAD */
-
- 0x0
- }
- };
-
-static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ] =
- {
-
- {
- VARIANT_UserSize
- ,VARIANT_UserMarshal
- ,VARIANT_UserUnmarshal
- ,VARIANT_UserFree
- }
-
- };
-
-
-
-/* Object interface: IUnknown, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
-
-
-/* Object interface: IAccessibleAction, ver. 0.0,
- GUID={0xB70D9F59,0x3B5A,0x4dba,{0xAB,0x9E,0x22,0x01,0x2F,0x60,0x7D,0xF5}} */
-
-
-/* Object interface: IAccessibleHyperlink, ver. 0.0,
- GUID={0x01C20F2B,0x3DD2,0x400f,{0x94,0x9F,0xAD,0x00,0xBD,0xAB,0x1D,0x41}} */
-
-#pragma code_seg(".orpc")
-static const unsigned short IAccessibleHyperlink_FormatStringOffsetTable[] =
- {
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- 0,
- 44,
- 88,
- 126,
- 164
- };
-
-static const MIDL_STUBLESS_PROXY_INFO IAccessibleHyperlink_ProxyInfo =
- {
- &Object_StubDesc,
- AccessibleHyperlink__MIDL_ProcFormatString.Format,
- &IAccessibleHyperlink_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0
- };
-
-
-static const MIDL_SERVER_INFO IAccessibleHyperlink_ServerInfo =
- {
- &Object_StubDesc,
- 0,
- AccessibleHyperlink__MIDL_ProcFormatString.Format,
- &IAccessibleHyperlink_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0,
- 0};
-CINTERFACE_PROXY_VTABLE(14) _IAccessibleHyperlinkProxyVtbl =
-{
- &IAccessibleHyperlink_ProxyInfo,
- &IID_IAccessibleHyperlink,
- IUnknown_QueryInterface_Proxy,
- IUnknown_AddRef_Proxy,
- IUnknown_Release_Proxy ,
- 0 /* IAccessibleAction::nActions */ ,
- 0 /* IAccessibleAction::doAction */ ,
- 0 /* IAccessibleAction::get_description */ ,
- 0 /* IAccessibleAction::get_keyBinding */ ,
- 0 /* IAccessibleAction::get_name */ ,
- 0 /* IAccessibleAction::get_localizedName */ ,
- (void *) (INT_PTR) -1 /* IAccessibleHyperlink::get_anchor */ ,
- (void *) (INT_PTR) -1 /* IAccessibleHyperlink::get_anchorTarget */ ,
- (void *) (INT_PTR) -1 /* IAccessibleHyperlink::get_startIndex */ ,
- (void *) (INT_PTR) -1 /* IAccessibleHyperlink::get_endIndex */ ,
- (void *) (INT_PTR) -1 /* IAccessibleHyperlink::get_valid */
-};
-
-
-static const PRPC_STUB_FUNCTION IAccessibleHyperlink_table[] =
-{
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2
-};
-
-CInterfaceStubVtbl _IAccessibleHyperlinkStubVtbl =
-{
- &IID_IAccessibleHyperlink,
- &IAccessibleHyperlink_ServerInfo,
- 14,
- &IAccessibleHyperlink_table[-3],
- CStdStubBuffer_DELEGATING_METHODS
-};
-
-static const MIDL_STUB_DESC Object_StubDesc =
- {
- 0,
- NdrOleAllocate,
- NdrOleFree,
- 0,
- 0,
- 0,
- 0,
- 0,
- AccessibleHyperlink__MIDL_TypeFormatString.Format,
- 1, /* -error bounds_check flag */
- 0x50002, /* Ndr library version */
- 0,
- 0x700022b, /* MIDL Version 7.0.555 */
- 0,
- UserMarshalRoutines,
- 0, /* notify & notify_flag routine table */
- 0x1, /* MIDL flag */
- 0, /* cs routines */
- 0, /* proxy/server info */
- 0
- };
-
-const CInterfaceProxyVtbl * const _AccessibleHyperlink_ProxyVtblList[] =
-{
- ( CInterfaceProxyVtbl *) &_IAccessibleHyperlinkProxyVtbl,
- 0
-};
-
-const CInterfaceStubVtbl * const _AccessibleHyperlink_StubVtblList[] =
-{
- ( CInterfaceStubVtbl *) &_IAccessibleHyperlinkStubVtbl,
- 0
-};
-
-PCInterfaceName const _AccessibleHyperlink_InterfaceNamesList[] =
-{
- "IAccessibleHyperlink",
- 0
-};
-
-const IID * const _AccessibleHyperlink_BaseIIDList[] =
-{
- &IID_IAccessibleAction,
- 0
-};
-
-
-#define _AccessibleHyperlink_CHECK_IID(n) IID_GENERIC_CHECK_IID( _AccessibleHyperlink, pIID, n)
-
-int __stdcall _AccessibleHyperlink_IID_Lookup( const IID * pIID, int * pIndex )
-{
-
- if(!_AccessibleHyperlink_CHECK_IID(0))
- {
- *pIndex = 0;
- return 1;
- }
-
- return 0;
-}
-
-const ExtendedProxyFileInfo AccessibleHyperlink_ProxyFileInfo =
-{
- (PCInterfaceProxyVtblList *) & _AccessibleHyperlink_ProxyVtblList,
- (PCInterfaceStubVtblList *) & _AccessibleHyperlink_StubVtblList,
- (const PCInterfaceName * ) & _AccessibleHyperlink_InterfaceNamesList,
- (const IID ** ) & _AccessibleHyperlink_BaseIIDList,
- & _AccessibleHyperlink_IID_Lookup,
- 1,
- 2,
- 0, /* table of [async_uuid] interfaces */
- 0, /* Filler1 */
- 0, /* Filler2 */
- 0 /* Filler3 */
-};
-#if _MSC_VER >= 1200
-#pragma warning(pop)
-#endif
-
-
-#endif /* defined(_M_AMD64)*/
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleHypertext.h b/src/3rdparty/iaccessible2/generated/amd64/AccessibleHypertext.h
deleted file mode 100644
index 91cb85c69e..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleHypertext.h
+++ /dev/null
@@ -1,349 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:58 2012
- */
-/* Compiler settings for AccessibleHypertext.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-#ifndef COM_NO_WINDOWS_H
-#include "windows.h"
-#include "ole2.h"
-#endif /*COM_NO_WINDOWS_H*/
-
-#ifndef __AccessibleHypertext_h__
-#define __AccessibleHypertext_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifndef __IAccessibleHypertext_FWD_DEFINED__
-#define __IAccessibleHypertext_FWD_DEFINED__
-typedef interface IAccessibleHypertext IAccessibleHypertext;
-#endif /* __IAccessibleHypertext_FWD_DEFINED__ */
-
-
-/* header files for imported files */
-#include "objidl.h"
-#include "oaidl.h"
-#include "oleacc.h"
-#include "AccessibleText.h"
-#include "AccessibleHyperlink.h"
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#ifndef __IAccessibleHypertext_INTERFACE_DEFINED__
-#define __IAccessibleHypertext_INTERFACE_DEFINED__
-
-/* interface IAccessibleHypertext */
-/* [uuid][object] */
-
-
-EXTERN_C const IID IID_IAccessibleHypertext;
-
-#if defined(__cplusplus) && !defined(CINTERFACE)
-
- MIDL_INTERFACE("6B4F8BBF-F1F2-418a-B35E-A195BC4103B9")
- IAccessibleHypertext : public IAccessibleText
- {
- public:
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nHyperlinks(
- /* [retval][out] */ long *hyperlinkCount) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_hyperlink(
- /* [in] */ long index,
- /* [retval][out] */ IAccessibleHyperlink **hyperlink) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_hyperlinkIndex(
- /* [in] */ long charIndex,
- /* [retval][out] */ long *hyperlinkIndex) = 0;
-
- };
-
-#else /* C style interface */
-
- typedef struct IAccessibleHypertextVtbl
- {
- BEGIN_INTERFACE
-
- HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
- IAccessibleHypertext * This,
- /* [in] */ REFIID riid,
- /* [annotation][iid_is][out] */
- __RPC__deref_out void **ppvObject);
-
- ULONG ( STDMETHODCALLTYPE *AddRef )(
- IAccessibleHypertext * This);
-
- ULONG ( STDMETHODCALLTYPE *Release )(
- IAccessibleHypertext * This);
-
- HRESULT ( STDMETHODCALLTYPE *addSelection )(
- IAccessibleHypertext * This,
- /* [in] */ long startOffset,
- /* [in] */ long endOffset);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attributes )(
- IAccessibleHypertext * This,
- /* [in] */ long offset,
- /* [out] */ long *startOffset,
- /* [out] */ long *endOffset,
- /* [retval][out] */ BSTR *textAttributes);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_caretOffset )(
- IAccessibleHypertext * This,
- /* [retval][out] */ long *offset);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_characterExtents )(
- IAccessibleHypertext * This,
- /* [in] */ long offset,
- /* [in] */ enum IA2CoordinateType coordType,
- /* [out] */ long *x,
- /* [out] */ long *y,
- /* [out] */ long *width,
- /* [retval][out] */ long *height);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelections )(
- IAccessibleHypertext * This,
- /* [retval][out] */ long *nSelections);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_offsetAtPoint )(
- IAccessibleHypertext * This,
- /* [in] */ long x,
- /* [in] */ long y,
- /* [in] */ enum IA2CoordinateType coordType,
- /* [retval][out] */ long *offset);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selection )(
- IAccessibleHypertext * This,
- /* [in] */ long selectionIndex,
- /* [out] */ long *startOffset,
- /* [retval][out] */ long *endOffset);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_text )(
- IAccessibleHypertext * This,
- /* [in] */ long startOffset,
- /* [in] */ long endOffset,
- /* [retval][out] */ BSTR *text);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textBeforeOffset )(
- IAccessibleHypertext * This,
- /* [in] */ long offset,
- /* [in] */ enum IA2TextBoundaryType boundaryType,
- /* [out] */ long *startOffset,
- /* [out] */ long *endOffset,
- /* [retval][out] */ BSTR *text);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textAfterOffset )(
- IAccessibleHypertext * This,
- /* [in] */ long offset,
- /* [in] */ enum IA2TextBoundaryType boundaryType,
- /* [out] */ long *startOffset,
- /* [out] */ long *endOffset,
- /* [retval][out] */ BSTR *text);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textAtOffset )(
- IAccessibleHypertext * This,
- /* [in] */ long offset,
- /* [in] */ enum IA2TextBoundaryType boundaryType,
- /* [out] */ long *startOffset,
- /* [out] */ long *endOffset,
- /* [retval][out] */ BSTR *text);
-
- HRESULT ( STDMETHODCALLTYPE *removeSelection )(
- IAccessibleHypertext * This,
- /* [in] */ long selectionIndex);
-
- HRESULT ( STDMETHODCALLTYPE *setCaretOffset )(
- IAccessibleHypertext * This,
- /* [in] */ long offset);
-
- HRESULT ( STDMETHODCALLTYPE *setSelection )(
- IAccessibleHypertext * This,
- /* [in] */ long selectionIndex,
- /* [in] */ long startOffset,
- /* [in] */ long endOffset);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nCharacters )(
- IAccessibleHypertext * This,
- /* [retval][out] */ long *nCharacters);
-
- HRESULT ( STDMETHODCALLTYPE *scrollSubstringTo )(
- IAccessibleHypertext * This,
- /* [in] */ long startIndex,
- /* [in] */ long endIndex,
- /* [in] */ enum IA2ScrollType scrollType);
-
- HRESULT ( STDMETHODCALLTYPE *scrollSubstringToPoint )(
- IAccessibleHypertext * This,
- /* [in] */ long startIndex,
- /* [in] */ long endIndex,
- /* [in] */ enum IA2CoordinateType coordinateType,
- /* [in] */ long x,
- /* [in] */ long y);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_newText )(
- IAccessibleHypertext * This,
- /* [retval][out] */ IA2TextSegment *newText);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_oldText )(
- IAccessibleHypertext * This,
- /* [retval][out] */ IA2TextSegment *oldText);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nHyperlinks )(
- IAccessibleHypertext * This,
- /* [retval][out] */ long *hyperlinkCount);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_hyperlink )(
- IAccessibleHypertext * This,
- /* [in] */ long index,
- /* [retval][out] */ IAccessibleHyperlink **hyperlink);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_hyperlinkIndex )(
- IAccessibleHypertext * This,
- /* [in] */ long charIndex,
- /* [retval][out] */ long *hyperlinkIndex);
-
- END_INTERFACE
- } IAccessibleHypertextVtbl;
-
- interface IAccessibleHypertext
- {
- CONST_VTBL struct IAccessibleHypertextVtbl *lpVtbl;
- };
-
-
-
-#ifdef COBJMACROS
-
-
-#define IAccessibleHypertext_QueryInterface(This,riid,ppvObject) \
- ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
-
-#define IAccessibleHypertext_AddRef(This) \
- ( (This)->lpVtbl -> AddRef(This) )
-
-#define IAccessibleHypertext_Release(This) \
- ( (This)->lpVtbl -> Release(This) )
-
-
-#define IAccessibleHypertext_addSelection(This,startOffset,endOffset) \
- ( (This)->lpVtbl -> addSelection(This,startOffset,endOffset) )
-
-#define IAccessibleHypertext_get_attributes(This,offset,startOffset,endOffset,textAttributes) \
- ( (This)->lpVtbl -> get_attributes(This,offset,startOffset,endOffset,textAttributes) )
-
-#define IAccessibleHypertext_get_caretOffset(This,offset) \
- ( (This)->lpVtbl -> get_caretOffset(This,offset) )
-
-#define IAccessibleHypertext_get_characterExtents(This,offset,coordType,x,y,width,height) \
- ( (This)->lpVtbl -> get_characterExtents(This,offset,coordType,x,y,width,height) )
-
-#define IAccessibleHypertext_get_nSelections(This,nSelections) \
- ( (This)->lpVtbl -> get_nSelections(This,nSelections) )
-
-#define IAccessibleHypertext_get_offsetAtPoint(This,x,y,coordType,offset) \
- ( (This)->lpVtbl -> get_offsetAtPoint(This,x,y,coordType,offset) )
-
-#define IAccessibleHypertext_get_selection(This,selectionIndex,startOffset,endOffset) \
- ( (This)->lpVtbl -> get_selection(This,selectionIndex,startOffset,endOffset) )
-
-#define IAccessibleHypertext_get_text(This,startOffset,endOffset,text) \
- ( (This)->lpVtbl -> get_text(This,startOffset,endOffset,text) )
-
-#define IAccessibleHypertext_get_textBeforeOffset(This,offset,boundaryType,startOffset,endOffset,text) \
- ( (This)->lpVtbl -> get_textBeforeOffset(This,offset,boundaryType,startOffset,endOffset,text) )
-
-#define IAccessibleHypertext_get_textAfterOffset(This,offset,boundaryType,startOffset,endOffset,text) \
- ( (This)->lpVtbl -> get_textAfterOffset(This,offset,boundaryType,startOffset,endOffset,text) )
-
-#define IAccessibleHypertext_get_textAtOffset(This,offset,boundaryType,startOffset,endOffset,text) \
- ( (This)->lpVtbl -> get_textAtOffset(This,offset,boundaryType,startOffset,endOffset,text) )
-
-#define IAccessibleHypertext_removeSelection(This,selectionIndex) \
- ( (This)->lpVtbl -> removeSelection(This,selectionIndex) )
-
-#define IAccessibleHypertext_setCaretOffset(This,offset) \
- ( (This)->lpVtbl -> setCaretOffset(This,offset) )
-
-#define IAccessibleHypertext_setSelection(This,selectionIndex,startOffset,endOffset) \
- ( (This)->lpVtbl -> setSelection(This,selectionIndex,startOffset,endOffset) )
-
-#define IAccessibleHypertext_get_nCharacters(This,nCharacters) \
- ( (This)->lpVtbl -> get_nCharacters(This,nCharacters) )
-
-#define IAccessibleHypertext_scrollSubstringTo(This,startIndex,endIndex,scrollType) \
- ( (This)->lpVtbl -> scrollSubstringTo(This,startIndex,endIndex,scrollType) )
-
-#define IAccessibleHypertext_scrollSubstringToPoint(This,startIndex,endIndex,coordinateType,x,y) \
- ( (This)->lpVtbl -> scrollSubstringToPoint(This,startIndex,endIndex,coordinateType,x,y) )
-
-#define IAccessibleHypertext_get_newText(This,newText) \
- ( (This)->lpVtbl -> get_newText(This,newText) )
-
-#define IAccessibleHypertext_get_oldText(This,oldText) \
- ( (This)->lpVtbl -> get_oldText(This,oldText) )
-
-
-#define IAccessibleHypertext_get_nHyperlinks(This,hyperlinkCount) \
- ( (This)->lpVtbl -> get_nHyperlinks(This,hyperlinkCount) )
-
-#define IAccessibleHypertext_get_hyperlink(This,index,hyperlink) \
- ( (This)->lpVtbl -> get_hyperlink(This,index,hyperlink) )
-
-#define IAccessibleHypertext_get_hyperlinkIndex(This,charIndex,hyperlinkIndex) \
- ( (This)->lpVtbl -> get_hyperlinkIndex(This,charIndex,hyperlinkIndex) )
-
-#endif /* COBJMACROS */
-
-
-#endif /* C style interface */
-
-
-
-
-#endif /* __IAccessibleHypertext_INTERFACE_DEFINED__ */
-
-
-/* Additional Prototypes for ALL interfaces */
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleHypertext_i.c b/src/3rdparty/iaccessible2/generated/amd64/AccessibleHypertext_i.c
deleted file mode 100644
index fbc3ef133a..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleHypertext_i.c
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
-
-/* link this file in with the server and any clients */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:58 2012
- */
-/* Compiler settings for AccessibleHypertext.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#include <rpc.h>
-#include <rpcndr.h>
-
-#ifdef _MIDL_USE_GUIDDEF_
-
-#ifndef INITGUID
-#define INITGUID
-#include <guiddef.h>
-#undef INITGUID
-#else
-#include <guiddef.h>
-#endif
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
-
-#else // !_MIDL_USE_GUIDDEF_
-
-#ifndef __IID_DEFINED__
-#define __IID_DEFINED__
-
-typedef struct _IID
-{
- unsigned long x;
- unsigned short s1;
- unsigned short s2;
- unsigned char c[8];
-} IID;
-
-#endif // __IID_DEFINED__
-
-#ifndef CLSID_DEFINED
-#define CLSID_DEFINED
-typedef IID CLSID;
-#endif // CLSID_DEFINED
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
-
-#endif !_MIDL_USE_GUIDDEF_
-
-MIDL_DEFINE_GUID(IID, IID_IAccessibleHypertext,0x6B4F8BBF,0xF1F2,0x418a,0xB3,0x5E,0xA1,0x95,0xBC,0x41,0x03,0xB9);
-
-#undef MIDL_DEFINE_GUID
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleHypertext_p.c b/src/3rdparty/iaccessible2/generated/amd64/AccessibleHypertext_p.c
deleted file mode 100644
index e4df1ac6df..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleHypertext_p.c
+++ /dev/null
@@ -1,454 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the proxy stub code */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:58 2012
- */
-/* Compiler settings for AccessibleHypertext.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#if defined(_M_AMD64)
-
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-#if _MSC_VER >= 1200
-#pragma warning(push)
-#endif
-
-#pragma warning( disable: 4211 ) /* redefine extern to static */
-#pragma warning( disable: 4232 ) /* dllimport identity*/
-#pragma warning( disable: 4024 ) /* array to pointer mapping*/
-#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */
-
-#define USE_STUBLESS_PROXY
-
-
-/* verify that the <rpcproxy.h> version is high enough to compile this file*/
-#ifndef __REDQ_RPCPROXY_H_VERSION__
-#define __REQUIRED_RPCPROXY_H_VERSION__ 475
-#endif
-
-
-#include "rpcproxy.h"
-#ifndef __RPCPROXY_H_VERSION__
-#error this stub requires an updated version of <rpcproxy.h>
-#endif /* __RPCPROXY_H_VERSION__ */
-
-
-#include "AccessibleHypertext.h"
-
-#define TYPE_FORMAT_STRING_SIZE 29
-#define PROC_FORMAT_STRING_SIZE 127
-#define EXPR_FORMAT_STRING_SIZE 1
-#define TRANSMIT_AS_TABLE_SIZE 0
-#define WIRE_MARSHAL_TABLE_SIZE 0
-
-typedef struct _AccessibleHypertext_MIDL_TYPE_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
- } AccessibleHypertext_MIDL_TYPE_FORMAT_STRING;
-
-typedef struct _AccessibleHypertext_MIDL_PROC_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
- } AccessibleHypertext_MIDL_PROC_FORMAT_STRING;
-
-typedef struct _AccessibleHypertext_MIDL_EXPR_FORMAT_STRING
- {
- long Pad;
- unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
- } AccessibleHypertext_MIDL_EXPR_FORMAT_STRING;
-
-
-static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
-{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
-
-
-extern const AccessibleHypertext_MIDL_TYPE_FORMAT_STRING AccessibleHypertext__MIDL_TypeFormatString;
-extern const AccessibleHypertext_MIDL_PROC_FORMAT_STRING AccessibleHypertext__MIDL_ProcFormatString;
-extern const AccessibleHypertext_MIDL_EXPR_FORMAT_STRING AccessibleHypertext__MIDL_ExprFormatString;
-
-
-extern const MIDL_STUB_DESC Object_StubDesc;
-
-
-extern const MIDL_SERVER_INFO IAccessibleHypertext_ServerInfo;
-extern const MIDL_STUBLESS_PROXY_INFO IAccessibleHypertext_ProxyInfo;
-
-
-
-#if !defined(__RPC_WIN64__)
-#error Invalid build platform for this stub.
-#endif
-
-static const AccessibleHypertext_MIDL_PROC_FORMAT_STRING AccessibleHypertext__MIDL_ProcFormatString =
- {
- 0,
- {
-
- /* Procedure get_nHyperlinks */
-
- 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 2 */ NdrFcLong( 0x0 ), /* 0 */
-/* 6 */ NdrFcShort( 0x16 ), /* 22 */
-/* 8 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 10 */ NdrFcShort( 0x0 ), /* 0 */
-/* 12 */ NdrFcShort( 0x24 ), /* 36 */
-/* 14 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 16 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 18 */ NdrFcShort( 0x0 ), /* 0 */
-/* 20 */ NdrFcShort( 0x0 ), /* 0 */
-/* 22 */ NdrFcShort( 0x0 ), /* 0 */
-/* 24 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter hyperlinkCount */
-
-/* 26 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 28 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 30 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 32 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 34 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 36 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_hyperlink */
-
-/* 38 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 40 */ NdrFcLong( 0x0 ), /* 0 */
-/* 44 */ NdrFcShort( 0x17 ), /* 23 */
-/* 46 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 48 */ NdrFcShort( 0x8 ), /* 8 */
-/* 50 */ NdrFcShort( 0x8 ), /* 8 */
-/* 52 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 54 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 56 */ NdrFcShort( 0x0 ), /* 0 */
-/* 58 */ NdrFcShort( 0x0 ), /* 0 */
-/* 60 */ NdrFcShort( 0x0 ), /* 0 */
-/* 62 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter index */
-
-/* 64 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 66 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 68 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter hyperlink */
-
-/* 70 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
-/* 72 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 74 */ NdrFcShort( 0x6 ), /* Type Offset=6 */
-
- /* Return value */
-
-/* 76 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 78 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 80 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_hyperlinkIndex */
-
-/* 82 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 84 */ NdrFcLong( 0x0 ), /* 0 */
-/* 88 */ NdrFcShort( 0x18 ), /* 24 */
-/* 90 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 92 */ NdrFcShort( 0x8 ), /* 8 */
-/* 94 */ NdrFcShort( 0x24 ), /* 36 */
-/* 96 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x3, /* 3 */
-/* 98 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 100 */ NdrFcShort( 0x0 ), /* 0 */
-/* 102 */ NdrFcShort( 0x0 ), /* 0 */
-/* 104 */ NdrFcShort( 0x0 ), /* 0 */
-/* 106 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter charIndex */
-
-/* 108 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 110 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 112 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter hyperlinkIndex */
-
-/* 114 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 116 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 118 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 120 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 122 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 124 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- 0x0
- }
- };
-
-static const AccessibleHypertext_MIDL_TYPE_FORMAT_STRING AccessibleHypertext__MIDL_TypeFormatString =
- {
- 0,
- {
- NdrFcShort( 0x0 ), /* 0 */
-/* 2 */
- 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
-/* 4 */ 0x8, /* FC_LONG */
- 0x5c, /* FC_PAD */
-/* 6 */
- 0x11, 0x10, /* FC_RP [pointer_deref] */
-/* 8 */ NdrFcShort( 0x2 ), /* Offset= 2 (10) */
-/* 10 */
- 0x2f, /* FC_IP */
- 0x5a, /* FC_CONSTANT_IID */
-/* 12 */ NdrFcLong( 0x1c20f2b ), /* 29495083 */
-/* 16 */ NdrFcShort( 0x3dd2 ), /* 15826 */
-/* 18 */ NdrFcShort( 0x400f ), /* 16399 */
-/* 20 */ 0x94, /* 148 */
- 0x9f, /* 159 */
-/* 22 */ 0xad, /* 173 */
- 0x0, /* 0 */
-/* 24 */ 0xbd, /* 189 */
- 0xab, /* 171 */
-/* 26 */ 0x1d, /* 29 */
- 0x41, /* 65 */
-
- 0x0
- }
- };
-
-
-/* Object interface: IUnknown, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
-
-
-/* Object interface: IAccessibleText, ver. 0.0,
- GUID={0x24FD2FFB,0x3AAD,0x4a08,{0x83,0x35,0xA3,0xAD,0x89,0xC0,0xFB,0x4B}} */
-
-
-/* Object interface: IAccessibleHypertext, ver. 0.0,
- GUID={0x6B4F8BBF,0xF1F2,0x418a,{0xB3,0x5E,0xA1,0x95,0xBC,0x41,0x03,0xB9}} */
-
-#pragma code_seg(".orpc")
-static const unsigned short IAccessibleHypertext_FormatStringOffsetTable[] =
- {
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- 0,
- 38,
- 82
- };
-
-static const MIDL_STUBLESS_PROXY_INFO IAccessibleHypertext_ProxyInfo =
- {
- &Object_StubDesc,
- AccessibleHypertext__MIDL_ProcFormatString.Format,
- &IAccessibleHypertext_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0
- };
-
-
-static const MIDL_SERVER_INFO IAccessibleHypertext_ServerInfo =
- {
- &Object_StubDesc,
- 0,
- AccessibleHypertext__MIDL_ProcFormatString.Format,
- &IAccessibleHypertext_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0,
- 0};
-CINTERFACE_PROXY_VTABLE(25) _IAccessibleHypertextProxyVtbl =
-{
- &IAccessibleHypertext_ProxyInfo,
- &IID_IAccessibleHypertext,
- IUnknown_QueryInterface_Proxy,
- IUnknown_AddRef_Proxy,
- IUnknown_Release_Proxy ,
- 0 /* IAccessibleText::addSelection */ ,
- 0 /* IAccessibleText::get_attributes */ ,
- 0 /* IAccessibleText::get_caretOffset */ ,
- 0 /* IAccessibleText::get_characterExtents */ ,
- 0 /* IAccessibleText::get_nSelections */ ,
- 0 /* IAccessibleText::get_offsetAtPoint */ ,
- 0 /* IAccessibleText::get_selection */ ,
- 0 /* IAccessibleText::get_text */ ,
- 0 /* IAccessibleText::get_textBeforeOffset */ ,
- 0 /* IAccessibleText::get_textAfterOffset */ ,
- 0 /* IAccessibleText::get_textAtOffset */ ,
- 0 /* IAccessibleText::removeSelection */ ,
- 0 /* IAccessibleText::setCaretOffset */ ,
- 0 /* IAccessibleText::setSelection */ ,
- 0 /* IAccessibleText::get_nCharacters */ ,
- 0 /* IAccessibleText::scrollSubstringTo */ ,
- 0 /* IAccessibleText::scrollSubstringToPoint */ ,
- 0 /* IAccessibleText::get_newText */ ,
- 0 /* IAccessibleText::get_oldText */ ,
- (void *) (INT_PTR) -1 /* IAccessibleHypertext::get_nHyperlinks */ ,
- (void *) (INT_PTR) -1 /* IAccessibleHypertext::get_hyperlink */ ,
- (void *) (INT_PTR) -1 /* IAccessibleHypertext::get_hyperlinkIndex */
-};
-
-
-static const PRPC_STUB_FUNCTION IAccessibleHypertext_table[] =
-{
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2
-};
-
-CInterfaceStubVtbl _IAccessibleHypertextStubVtbl =
-{
- &IID_IAccessibleHypertext,
- &IAccessibleHypertext_ServerInfo,
- 25,
- &IAccessibleHypertext_table[-3],
- CStdStubBuffer_DELEGATING_METHODS
-};
-
-static const MIDL_STUB_DESC Object_StubDesc =
- {
- 0,
- NdrOleAllocate,
- NdrOleFree,
- 0,
- 0,
- 0,
- 0,
- 0,
- AccessibleHypertext__MIDL_TypeFormatString.Format,
- 1, /* -error bounds_check flag */
- 0x50002, /* Ndr library version */
- 0,
- 0x700022b, /* MIDL Version 7.0.555 */
- 0,
- 0,
- 0, /* notify & notify_flag routine table */
- 0x1, /* MIDL flag */
- 0, /* cs routines */
- 0, /* proxy/server info */
- 0
- };
-
-const CInterfaceProxyVtbl * const _AccessibleHypertext_ProxyVtblList[] =
-{
- ( CInterfaceProxyVtbl *) &_IAccessibleHypertextProxyVtbl,
- 0
-};
-
-const CInterfaceStubVtbl * const _AccessibleHypertext_StubVtblList[] =
-{
- ( CInterfaceStubVtbl *) &_IAccessibleHypertextStubVtbl,
- 0
-};
-
-PCInterfaceName const _AccessibleHypertext_InterfaceNamesList[] =
-{
- "IAccessibleHypertext",
- 0
-};
-
-const IID * const _AccessibleHypertext_BaseIIDList[] =
-{
- &IID_IAccessibleText,
- 0
-};
-
-
-#define _AccessibleHypertext_CHECK_IID(n) IID_GENERIC_CHECK_IID( _AccessibleHypertext, pIID, n)
-
-int __stdcall _AccessibleHypertext_IID_Lookup( const IID * pIID, int * pIndex )
-{
-
- if(!_AccessibleHypertext_CHECK_IID(0))
- {
- *pIndex = 0;
- return 1;
- }
-
- return 0;
-}
-
-const ExtendedProxyFileInfo AccessibleHypertext_ProxyFileInfo =
-{
- (PCInterfaceProxyVtblList *) & _AccessibleHypertext_ProxyVtblList,
- (PCInterfaceStubVtblList *) & _AccessibleHypertext_StubVtblList,
- (const PCInterfaceName * ) & _AccessibleHypertext_InterfaceNamesList,
- (const IID ** ) & _AccessibleHypertext_BaseIIDList,
- & _AccessibleHypertext_IID_Lookup,
- 1,
- 2,
- 0, /* table of [async_uuid] interfaces */
- 0, /* Filler1 */
- 0, /* Filler2 */
- 0 /* Filler3 */
-};
-#if _MSC_VER >= 1200
-#pragma warning(pop)
-#endif
-
-
-#endif /* defined(_M_AMD64)*/
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleImage.h b/src/3rdparty/iaccessible2/generated/amd64/AccessibleImage.h
deleted file mode 100644
index a01e4dc0b6..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleImage.h
+++ /dev/null
@@ -1,185 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:58 2012
- */
-/* Compiler settings for AccessibleImage.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-#ifndef COM_NO_WINDOWS_H
-#include "windows.h"
-#include "ole2.h"
-#endif /*COM_NO_WINDOWS_H*/
-
-#ifndef __AccessibleImage_h__
-#define __AccessibleImage_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifndef __IAccessibleImage_FWD_DEFINED__
-#define __IAccessibleImage_FWD_DEFINED__
-typedef interface IAccessibleImage IAccessibleImage;
-#endif /* __IAccessibleImage_FWD_DEFINED__ */
-
-
-/* header files for imported files */
-#include "objidl.h"
-#include "oaidl.h"
-#include "oleacc.h"
-#include "IA2CommonTypes.h"
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#ifndef __IAccessibleImage_INTERFACE_DEFINED__
-#define __IAccessibleImage_INTERFACE_DEFINED__
-
-/* interface IAccessibleImage */
-/* [uuid][object] */
-
-
-EXTERN_C const IID IID_IAccessibleImage;
-
-#if defined(__cplusplus) && !defined(CINTERFACE)
-
- MIDL_INTERFACE("FE5ABB3D-615E-4f7b-909F-5F0EDA9E8DDE")
- IAccessibleImage : public IUnknown
- {
- public:
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_description(
- /* [retval][out] */ BSTR *description) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_imagePosition(
- /* [in] */ enum IA2CoordinateType coordinateType,
- /* [out] */ long *x,
- /* [retval][out] */ long *y) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_imageSize(
- /* [out] */ long *height,
- /* [retval][out] */ long *width) = 0;
-
- };
-
-#else /* C style interface */
-
- typedef struct IAccessibleImageVtbl
- {
- BEGIN_INTERFACE
-
- HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
- IAccessibleImage * This,
- /* [in] */ REFIID riid,
- /* [annotation][iid_is][out] */
- __RPC__deref_out void **ppvObject);
-
- ULONG ( STDMETHODCALLTYPE *AddRef )(
- IAccessibleImage * This);
-
- ULONG ( STDMETHODCALLTYPE *Release )(
- IAccessibleImage * This);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_description )(
- IAccessibleImage * This,
- /* [retval][out] */ BSTR *description);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_imagePosition )(
- IAccessibleImage * This,
- /* [in] */ enum IA2CoordinateType coordinateType,
- /* [out] */ long *x,
- /* [retval][out] */ long *y);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_imageSize )(
- IAccessibleImage * This,
- /* [out] */ long *height,
- /* [retval][out] */ long *width);
-
- END_INTERFACE
- } IAccessibleImageVtbl;
-
- interface IAccessibleImage
- {
- CONST_VTBL struct IAccessibleImageVtbl *lpVtbl;
- };
-
-
-
-#ifdef COBJMACROS
-
-
-#define IAccessibleImage_QueryInterface(This,riid,ppvObject) \
- ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
-
-#define IAccessibleImage_AddRef(This) \
- ( (This)->lpVtbl -> AddRef(This) )
-
-#define IAccessibleImage_Release(This) \
- ( (This)->lpVtbl -> Release(This) )
-
-
-#define IAccessibleImage_get_description(This,description) \
- ( (This)->lpVtbl -> get_description(This,description) )
-
-#define IAccessibleImage_get_imagePosition(This,coordinateType,x,y) \
- ( (This)->lpVtbl -> get_imagePosition(This,coordinateType,x,y) )
-
-#define IAccessibleImage_get_imageSize(This,height,width) \
- ( (This)->lpVtbl -> get_imageSize(This,height,width) )
-
-#endif /* COBJMACROS */
-
-
-#endif /* C style interface */
-
-
-
-
-#endif /* __IAccessibleImage_INTERFACE_DEFINED__ */
-
-
-/* Additional Prototypes for ALL interfaces */
-
-unsigned long __RPC_USER BSTR_UserSize( unsigned long *, unsigned long , BSTR * );
-unsigned char * __RPC_USER BSTR_UserMarshal( unsigned long *, unsigned char *, BSTR * );
-unsigned char * __RPC_USER BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * );
-void __RPC_USER BSTR_UserFree( unsigned long *, BSTR * );
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleImage_i.c b/src/3rdparty/iaccessible2/generated/amd64/AccessibleImage_i.c
deleted file mode 100644
index 1afecd10b5..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleImage_i.c
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
-
-/* link this file in with the server and any clients */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:58 2012
- */
-/* Compiler settings for AccessibleImage.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#include <rpc.h>
-#include <rpcndr.h>
-
-#ifdef _MIDL_USE_GUIDDEF_
-
-#ifndef INITGUID
-#define INITGUID
-#include <guiddef.h>
-#undef INITGUID
-#else
-#include <guiddef.h>
-#endif
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
-
-#else // !_MIDL_USE_GUIDDEF_
-
-#ifndef __IID_DEFINED__
-#define __IID_DEFINED__
-
-typedef struct _IID
-{
- unsigned long x;
- unsigned short s1;
- unsigned short s2;
- unsigned char c[8];
-} IID;
-
-#endif // __IID_DEFINED__
-
-#ifndef CLSID_DEFINED
-#define CLSID_DEFINED
-typedef IID CLSID;
-#endif // CLSID_DEFINED
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
-
-#endif !_MIDL_USE_GUIDDEF_
-
-MIDL_DEFINE_GUID(IID, IID_IAccessibleImage,0xFE5ABB3D,0x615E,0x4f7b,0x90,0x9F,0x5F,0x0E,0xDA,0x9E,0x8D,0xDE);
-
-#undef MIDL_DEFINE_GUID
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleImage_p.c b/src/3rdparty/iaccessible2/generated/amd64/AccessibleImage_p.c
deleted file mode 100644
index 4b6aff7ba5..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleImage_p.c
+++ /dev/null
@@ -1,414 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the proxy stub code */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:58 2012
- */
-/* Compiler settings for AccessibleImage.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#if defined(_M_AMD64)
-
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-#if _MSC_VER >= 1200
-#pragma warning(push)
-#endif
-
-#pragma warning( disable: 4211 ) /* redefine extern to static */
-#pragma warning( disable: 4232 ) /* dllimport identity*/
-#pragma warning( disable: 4024 ) /* array to pointer mapping*/
-#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */
-
-#define USE_STUBLESS_PROXY
-
-
-/* verify that the <rpcproxy.h> version is high enough to compile this file*/
-#ifndef __REDQ_RPCPROXY_H_VERSION__
-#define __REQUIRED_RPCPROXY_H_VERSION__ 475
-#endif
-
-
-#include "rpcproxy.h"
-#ifndef __RPCPROXY_H_VERSION__
-#error this stub requires an updated version of <rpcproxy.h>
-#endif /* __RPCPROXY_H_VERSION__ */
-
-
-#include "AccessibleImage.h"
-
-#define TYPE_FORMAT_STRING_SIZE 47
-#define PROC_FORMAT_STRING_SIZE 133
-#define EXPR_FORMAT_STRING_SIZE 1
-#define TRANSMIT_AS_TABLE_SIZE 0
-#define WIRE_MARSHAL_TABLE_SIZE 1
-
-typedef struct _AccessibleImage_MIDL_TYPE_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
- } AccessibleImage_MIDL_TYPE_FORMAT_STRING;
-
-typedef struct _AccessibleImage_MIDL_PROC_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
- } AccessibleImage_MIDL_PROC_FORMAT_STRING;
-
-typedef struct _AccessibleImage_MIDL_EXPR_FORMAT_STRING
- {
- long Pad;
- unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
- } AccessibleImage_MIDL_EXPR_FORMAT_STRING;
-
-
-static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
-{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
-
-
-extern const AccessibleImage_MIDL_TYPE_FORMAT_STRING AccessibleImage__MIDL_TypeFormatString;
-extern const AccessibleImage_MIDL_PROC_FORMAT_STRING AccessibleImage__MIDL_ProcFormatString;
-extern const AccessibleImage_MIDL_EXPR_FORMAT_STRING AccessibleImage__MIDL_ExprFormatString;
-
-
-extern const MIDL_STUB_DESC Object_StubDesc;
-
-
-extern const MIDL_SERVER_INFO IAccessibleImage_ServerInfo;
-extern const MIDL_STUBLESS_PROXY_INFO IAccessibleImage_ProxyInfo;
-
-
-extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ];
-
-#if !defined(__RPC_WIN64__)
-#error Invalid build platform for this stub.
-#endif
-
-static const AccessibleImage_MIDL_PROC_FORMAT_STRING AccessibleImage__MIDL_ProcFormatString =
- {
- 0,
- {
-
- /* Procedure get_description */
-
- 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 2 */ NdrFcLong( 0x0 ), /* 0 */
-/* 6 */ NdrFcShort( 0x3 ), /* 3 */
-/* 8 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 10 */ NdrFcShort( 0x0 ), /* 0 */
-/* 12 */ NdrFcShort( 0x8 ), /* 8 */
-/* 14 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 16 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 18 */ NdrFcShort( 0x1 ), /* 1 */
-/* 20 */ NdrFcShort( 0x0 ), /* 0 */
-/* 22 */ NdrFcShort( 0x0 ), /* 0 */
-/* 24 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter description */
-
-/* 26 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 28 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 30 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
-
- /* Return value */
-
-/* 32 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 34 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 36 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_imagePosition */
-
-/* 38 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 40 */ NdrFcLong( 0x0 ), /* 0 */
-/* 44 */ NdrFcShort( 0x4 ), /* 4 */
-/* 46 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
-/* 48 */ NdrFcShort( 0x6 ), /* 6 */
-/* 50 */ NdrFcShort( 0x40 ), /* 64 */
-/* 52 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x4, /* 4 */
-/* 54 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 56 */ NdrFcShort( 0x0 ), /* 0 */
-/* 58 */ NdrFcShort( 0x0 ), /* 0 */
-/* 60 */ NdrFcShort( 0x0 ), /* 0 */
-/* 62 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter coordinateType */
-
-/* 64 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 66 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 68 */ 0xd, /* FC_ENUM16 */
- 0x0, /* 0 */
-
- /* Parameter x */
-
-/* 70 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 72 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 74 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter y */
-
-/* 76 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 78 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 80 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 82 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 84 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 86 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_imageSize */
-
-/* 88 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 90 */ NdrFcLong( 0x0 ), /* 0 */
-/* 94 */ NdrFcShort( 0x5 ), /* 5 */
-/* 96 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 98 */ NdrFcShort( 0x0 ), /* 0 */
-/* 100 */ NdrFcShort( 0x40 ), /* 64 */
-/* 102 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x3, /* 3 */
-/* 104 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 106 */ NdrFcShort( 0x0 ), /* 0 */
-/* 108 */ NdrFcShort( 0x0 ), /* 0 */
-/* 110 */ NdrFcShort( 0x0 ), /* 0 */
-/* 112 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter height */
-
-/* 114 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 116 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 118 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter width */
-
-/* 120 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 122 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 124 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 126 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 128 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 130 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- 0x0
- }
- };
-
-static const AccessibleImage_MIDL_TYPE_FORMAT_STRING AccessibleImage__MIDL_TypeFormatString =
- {
- 0,
- {
- NdrFcShort( 0x0 ), /* 0 */
-/* 2 */
- 0x11, 0x4, /* FC_RP [alloced_on_stack] */
-/* 4 */ NdrFcShort( 0x1c ), /* Offset= 28 (32) */
-/* 6 */
- 0x13, 0x0, /* FC_OP */
-/* 8 */ NdrFcShort( 0xe ), /* Offset= 14 (22) */
-/* 10 */
- 0x1b, /* FC_CARRAY */
- 0x1, /* 1 */
-/* 12 */ NdrFcShort( 0x2 ), /* 2 */
-/* 14 */ 0x9, /* Corr desc: FC_ULONG */
- 0x0, /* */
-/* 16 */ NdrFcShort( 0xfffc ), /* -4 */
-/* 18 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 20 */ 0x6, /* FC_SHORT */
- 0x5b, /* FC_END */
-/* 22 */
- 0x17, /* FC_CSTRUCT */
- 0x3, /* 3 */
-/* 24 */ NdrFcShort( 0x8 ), /* 8 */
-/* 26 */ NdrFcShort( 0xfff0 ), /* Offset= -16 (10) */
-/* 28 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 30 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 32 */ 0xb4, /* FC_USER_MARSHAL */
- 0x83, /* 131 */
-/* 34 */ NdrFcShort( 0x0 ), /* 0 */
-/* 36 */ NdrFcShort( 0x8 ), /* 8 */
-/* 38 */ NdrFcShort( 0x0 ), /* 0 */
-/* 40 */ NdrFcShort( 0xffde ), /* Offset= -34 (6) */
-/* 42 */
- 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
-/* 44 */ 0x8, /* FC_LONG */
- 0x5c, /* FC_PAD */
-
- 0x0
- }
- };
-
-static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ] =
- {
-
- {
- BSTR_UserSize
- ,BSTR_UserMarshal
- ,BSTR_UserUnmarshal
- ,BSTR_UserFree
- }
-
- };
-
-
-
-/* Object interface: IUnknown, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
-
-
-/* Object interface: IAccessibleImage, ver. 0.0,
- GUID={0xFE5ABB3D,0x615E,0x4f7b,{0x90,0x9F,0x5F,0x0E,0xDA,0x9E,0x8D,0xDE}} */
-
-#pragma code_seg(".orpc")
-static const unsigned short IAccessibleImage_FormatStringOffsetTable[] =
- {
- 0,
- 38,
- 88
- };
-
-static const MIDL_STUBLESS_PROXY_INFO IAccessibleImage_ProxyInfo =
- {
- &Object_StubDesc,
- AccessibleImage__MIDL_ProcFormatString.Format,
- &IAccessibleImage_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0
- };
-
-
-static const MIDL_SERVER_INFO IAccessibleImage_ServerInfo =
- {
- &Object_StubDesc,
- 0,
- AccessibleImage__MIDL_ProcFormatString.Format,
- &IAccessibleImage_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0,
- 0};
-CINTERFACE_PROXY_VTABLE(6) _IAccessibleImageProxyVtbl =
-{
- &IAccessibleImage_ProxyInfo,
- &IID_IAccessibleImage,
- IUnknown_QueryInterface_Proxy,
- IUnknown_AddRef_Proxy,
- IUnknown_Release_Proxy ,
- (void *) (INT_PTR) -1 /* IAccessibleImage::get_description */ ,
- (void *) (INT_PTR) -1 /* IAccessibleImage::get_imagePosition */ ,
- (void *) (INT_PTR) -1 /* IAccessibleImage::get_imageSize */
-};
-
-const CInterfaceStubVtbl _IAccessibleImageStubVtbl =
-{
- &IID_IAccessibleImage,
- &IAccessibleImage_ServerInfo,
- 6,
- 0, /* pure interpreted */
- CStdStubBuffer_METHODS
-};
-
-static const MIDL_STUB_DESC Object_StubDesc =
- {
- 0,
- NdrOleAllocate,
- NdrOleFree,
- 0,
- 0,
- 0,
- 0,
- 0,
- AccessibleImage__MIDL_TypeFormatString.Format,
- 1, /* -error bounds_check flag */
- 0x50002, /* Ndr library version */
- 0,
- 0x700022b, /* MIDL Version 7.0.555 */
- 0,
- UserMarshalRoutines,
- 0, /* notify & notify_flag routine table */
- 0x1, /* MIDL flag */
- 0, /* cs routines */
- 0, /* proxy/server info */
- 0
- };
-
-const CInterfaceProxyVtbl * const _AccessibleImage_ProxyVtblList[] =
-{
- ( CInterfaceProxyVtbl *) &_IAccessibleImageProxyVtbl,
- 0
-};
-
-const CInterfaceStubVtbl * const _AccessibleImage_StubVtblList[] =
-{
- ( CInterfaceStubVtbl *) &_IAccessibleImageStubVtbl,
- 0
-};
-
-PCInterfaceName const _AccessibleImage_InterfaceNamesList[] =
-{
- "IAccessibleImage",
- 0
-};
-
-
-#define _AccessibleImage_CHECK_IID(n) IID_GENERIC_CHECK_IID( _AccessibleImage, pIID, n)
-
-int __stdcall _AccessibleImage_IID_Lookup( const IID * pIID, int * pIndex )
-{
-
- if(!_AccessibleImage_CHECK_IID(0))
- {
- *pIndex = 0;
- return 1;
- }
-
- return 0;
-}
-
-const ExtendedProxyFileInfo AccessibleImage_ProxyFileInfo =
-{
- (PCInterfaceProxyVtblList *) & _AccessibleImage_ProxyVtblList,
- (PCInterfaceStubVtblList *) & _AccessibleImage_StubVtblList,
- (const PCInterfaceName * ) & _AccessibleImage_InterfaceNamesList,
- 0, /* no delegation */
- & _AccessibleImage_IID_Lookup,
- 1,
- 2,
- 0, /* table of [async_uuid] interfaces */
- 0, /* Filler1 */
- 0, /* Filler2 */
- 0 /* Filler3 */
-};
-#if _MSC_VER >= 1200
-#pragma warning(pop)
-#endif
-
-
-#endif /* defined(_M_AMD64)*/
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleRelation.h b/src/3rdparty/iaccessible2/generated/amd64/AccessibleRelation.h
deleted file mode 100644
index e153cd8476..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleRelation.h
+++ /dev/null
@@ -1,244 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:58 2012
- */
-/* Compiler settings for AccessibleRelation.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-#ifndef COM_NO_WINDOWS_H
-#include "windows.h"
-#include "ole2.h"
-#endif /*COM_NO_WINDOWS_H*/
-
-#ifndef __AccessibleRelation_h__
-#define __AccessibleRelation_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifndef __IAccessibleRelation_FWD_DEFINED__
-#define __IAccessibleRelation_FWD_DEFINED__
-typedef interface IAccessibleRelation IAccessibleRelation;
-#endif /* __IAccessibleRelation_FWD_DEFINED__ */
-
-
-/* header files for imported files */
-#include "objidl.h"
-#include "oaidl.h"
-#include "oleacc.h"
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-/* interface __MIDL_itf_AccessibleRelation_0000_0000 */
-/* [local] */
-
-#define IA2_RELATION_CONTROLLED_BY ( L"controlledBy" )
-
-#define IA2_RELATION_CONTROLLER_FOR ( L"controllerFor" )
-
-#define IA2_RELATION_DESCRIBED_BY ( L"describedBy" )
-
-#define IA2_RELATION_DESCRIPTION_FOR ( L"descriptionFor" )
-
-#define IA2_RELATION_EMBEDDED_BY ( L"embeddedBy" )
-
-#define IA2_RELATION_EMBEDS ( L"embeds" )
-
-#define IA2_RELATION_FLOWS_FROM ( L"flowsFrom" )
-
-#define IA2_RELATION_FLOWS_TO ( L"flowsTo" )
-
-#define IA2_RELATION_LABEL_FOR ( L"labelFor" )
-
-#define IA2_RELATION_LABELED_BY ( L"labelledBy" )
-
-#define IA2_RELATION_LABELLED_BY ( L"labelledBy" )
-
-#define IA2_RELATION_MEMBER_OF ( L"memberOf" )
-
-#define IA2_RELATION_NODE_CHILD_OF ( L"nodeChildOf" )
-
-#define IA2_RELATION_PARENT_WINDOW_OF ( L"parentWindowOf" )
-
-#define IA2_RELATION_POPUP_FOR ( L"popupFor" )
-
-#define IA2_RELATION_SUBWINDOW_OF ( L"subwindowOf" )
-
-
-
-extern RPC_IF_HANDLE __MIDL_itf_AccessibleRelation_0000_0000_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_AccessibleRelation_0000_0000_v0_0_s_ifspec;
-
-#ifndef __IAccessibleRelation_INTERFACE_DEFINED__
-#define __IAccessibleRelation_INTERFACE_DEFINED__
-
-/* interface IAccessibleRelation */
-/* [uuid][object] */
-
-
-EXTERN_C const IID IID_IAccessibleRelation;
-
-#if defined(__cplusplus) && !defined(CINTERFACE)
-
- MIDL_INTERFACE("7CDF86EE-C3DA-496a-BDA4-281B336E1FDC")
- IAccessibleRelation : public IUnknown
- {
- public:
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_relationType(
- /* [retval][out] */ BSTR *relationType) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_localizedRelationType(
- /* [retval][out] */ BSTR *localizedRelationType) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nTargets(
- /* [retval][out] */ long *nTargets) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_target(
- /* [in] */ long targetIndex,
- /* [retval][out] */ IUnknown **target) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_targets(
- /* [in] */ long maxTargets,
- /* [length_is][size_is][out] */ IUnknown **targets,
- /* [retval][out] */ long *nTargets) = 0;
-
- };
-
-#else /* C style interface */
-
- typedef struct IAccessibleRelationVtbl
- {
- BEGIN_INTERFACE
-
- HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
- IAccessibleRelation * This,
- /* [in] */ REFIID riid,
- /* [annotation][iid_is][out] */
- __RPC__deref_out void **ppvObject);
-
- ULONG ( STDMETHODCALLTYPE *AddRef )(
- IAccessibleRelation * This);
-
- ULONG ( STDMETHODCALLTYPE *Release )(
- IAccessibleRelation * This);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relationType )(
- IAccessibleRelation * This,
- /* [retval][out] */ BSTR *relationType);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedRelationType )(
- IAccessibleRelation * This,
- /* [retval][out] */ BSTR *localizedRelationType);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nTargets )(
- IAccessibleRelation * This,
- /* [retval][out] */ long *nTargets);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_target )(
- IAccessibleRelation * This,
- /* [in] */ long targetIndex,
- /* [retval][out] */ IUnknown **target);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_targets )(
- IAccessibleRelation * This,
- /* [in] */ long maxTargets,
- /* [length_is][size_is][out] */ IUnknown **targets,
- /* [retval][out] */ long *nTargets);
-
- END_INTERFACE
- } IAccessibleRelationVtbl;
-
- interface IAccessibleRelation
- {
- CONST_VTBL struct IAccessibleRelationVtbl *lpVtbl;
- };
-
-
-
-#ifdef COBJMACROS
-
-
-#define IAccessibleRelation_QueryInterface(This,riid,ppvObject) \
- ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
-
-#define IAccessibleRelation_AddRef(This) \
- ( (This)->lpVtbl -> AddRef(This) )
-
-#define IAccessibleRelation_Release(This) \
- ( (This)->lpVtbl -> Release(This) )
-
-
-#define IAccessibleRelation_get_relationType(This,relationType) \
- ( (This)->lpVtbl -> get_relationType(This,relationType) )
-
-#define IAccessibleRelation_get_localizedRelationType(This,localizedRelationType) \
- ( (This)->lpVtbl -> get_localizedRelationType(This,localizedRelationType) )
-
-#define IAccessibleRelation_get_nTargets(This,nTargets) \
- ( (This)->lpVtbl -> get_nTargets(This,nTargets) )
-
-#define IAccessibleRelation_get_target(This,targetIndex,target) \
- ( (This)->lpVtbl -> get_target(This,targetIndex,target) )
-
-#define IAccessibleRelation_get_targets(This,maxTargets,targets,nTargets) \
- ( (This)->lpVtbl -> get_targets(This,maxTargets,targets,nTargets) )
-
-#endif /* COBJMACROS */
-
-
-#endif /* C style interface */
-
-
-
-
-#endif /* __IAccessibleRelation_INTERFACE_DEFINED__ */
-
-
-/* Additional Prototypes for ALL interfaces */
-
-unsigned long __RPC_USER BSTR_UserSize( unsigned long *, unsigned long , BSTR * );
-unsigned char * __RPC_USER BSTR_UserMarshal( unsigned long *, unsigned char *, BSTR * );
-unsigned char * __RPC_USER BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * );
-void __RPC_USER BSTR_UserFree( unsigned long *, BSTR * );
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleRelation_i.c b/src/3rdparty/iaccessible2/generated/amd64/AccessibleRelation_i.c
deleted file mode 100644
index 2ab3837a27..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleRelation_i.c
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
-
-/* link this file in with the server and any clients */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:58 2012
- */
-/* Compiler settings for AccessibleRelation.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#include <rpc.h>
-#include <rpcndr.h>
-
-#ifdef _MIDL_USE_GUIDDEF_
-
-#ifndef INITGUID
-#define INITGUID
-#include <guiddef.h>
-#undef INITGUID
-#else
-#include <guiddef.h>
-#endif
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
-
-#else // !_MIDL_USE_GUIDDEF_
-
-#ifndef __IID_DEFINED__
-#define __IID_DEFINED__
-
-typedef struct _IID
-{
- unsigned long x;
- unsigned short s1;
- unsigned short s2;
- unsigned char c[8];
-} IID;
-
-#endif // __IID_DEFINED__
-
-#ifndef CLSID_DEFINED
-#define CLSID_DEFINED
-typedef IID CLSID;
-#endif // CLSID_DEFINED
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
-
-#endif !_MIDL_USE_GUIDDEF_
-
-MIDL_DEFINE_GUID(IID, IID_IAccessibleRelation,0x7CDF86EE,0xC3DA,0x496a,0xBD,0xA4,0x28,0x1B,0x33,0x6E,0x1F,0xDC);
-
-#undef MIDL_DEFINE_GUID
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleRelation_p.c b/src/3rdparty/iaccessible2/generated/amd64/AccessibleRelation_p.c
deleted file mode 100644
index e02cf7254c..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleRelation_p.c
+++ /dev/null
@@ -1,520 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the proxy stub code */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:58 2012
- */
-/* Compiler settings for AccessibleRelation.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#if defined(_M_AMD64)
-
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-#if _MSC_VER >= 1200
-#pragma warning(push)
-#endif
-
-#pragma warning( disable: 4211 ) /* redefine extern to static */
-#pragma warning( disable: 4232 ) /* dllimport identity*/
-#pragma warning( disable: 4024 ) /* array to pointer mapping*/
-#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */
-
-#define USE_STUBLESS_PROXY
-
-
-/* verify that the <rpcproxy.h> version is high enough to compile this file*/
-#ifndef __REDQ_RPCPROXY_H_VERSION__
-#define __REQUIRED_RPCPROXY_H_VERSION__ 475
-#endif
-
-
-#include "rpcproxy.h"
-#ifndef __RPCPROXY_H_VERSION__
-#error this stub requires an updated version of <rpcproxy.h>
-#endif /* __RPCPROXY_H_VERSION__ */
-
-
-#include "AccessibleRelation.h"
-
-#define TYPE_FORMAT_STRING_SIZE 95
-#define PROC_FORMAT_STRING_SIZE 209
-#define EXPR_FORMAT_STRING_SIZE 1
-#define TRANSMIT_AS_TABLE_SIZE 0
-#define WIRE_MARSHAL_TABLE_SIZE 1
-
-typedef struct _AccessibleRelation_MIDL_TYPE_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
- } AccessibleRelation_MIDL_TYPE_FORMAT_STRING;
-
-typedef struct _AccessibleRelation_MIDL_PROC_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
- } AccessibleRelation_MIDL_PROC_FORMAT_STRING;
-
-typedef struct _AccessibleRelation_MIDL_EXPR_FORMAT_STRING
- {
- long Pad;
- unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
- } AccessibleRelation_MIDL_EXPR_FORMAT_STRING;
-
-
-static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
-{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
-
-
-extern const AccessibleRelation_MIDL_TYPE_FORMAT_STRING AccessibleRelation__MIDL_TypeFormatString;
-extern const AccessibleRelation_MIDL_PROC_FORMAT_STRING AccessibleRelation__MIDL_ProcFormatString;
-extern const AccessibleRelation_MIDL_EXPR_FORMAT_STRING AccessibleRelation__MIDL_ExprFormatString;
-
-
-extern const MIDL_STUB_DESC Object_StubDesc;
-
-
-extern const MIDL_SERVER_INFO IAccessibleRelation_ServerInfo;
-extern const MIDL_STUBLESS_PROXY_INFO IAccessibleRelation_ProxyInfo;
-
-
-extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ];
-
-#if !defined(__RPC_WIN64__)
-#error Invalid build platform for this stub.
-#endif
-
-static const AccessibleRelation_MIDL_PROC_FORMAT_STRING AccessibleRelation__MIDL_ProcFormatString =
- {
- 0,
- {
-
- /* Procedure get_relationType */
-
- 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 2 */ NdrFcLong( 0x0 ), /* 0 */
-/* 6 */ NdrFcShort( 0x3 ), /* 3 */
-/* 8 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 10 */ NdrFcShort( 0x0 ), /* 0 */
-/* 12 */ NdrFcShort( 0x8 ), /* 8 */
-/* 14 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 16 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 18 */ NdrFcShort( 0x1 ), /* 1 */
-/* 20 */ NdrFcShort( 0x0 ), /* 0 */
-/* 22 */ NdrFcShort( 0x0 ), /* 0 */
-/* 24 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter relationType */
-
-/* 26 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 28 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 30 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
-
- /* Return value */
-
-/* 32 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 34 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 36 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_localizedRelationType */
-
-/* 38 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 40 */ NdrFcLong( 0x0 ), /* 0 */
-/* 44 */ NdrFcShort( 0x4 ), /* 4 */
-/* 46 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 48 */ NdrFcShort( 0x0 ), /* 0 */
-/* 50 */ NdrFcShort( 0x8 ), /* 8 */
-/* 52 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 54 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 56 */ NdrFcShort( 0x1 ), /* 1 */
-/* 58 */ NdrFcShort( 0x0 ), /* 0 */
-/* 60 */ NdrFcShort( 0x0 ), /* 0 */
-/* 62 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter localizedRelationType */
-
-/* 64 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 66 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 68 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
-
- /* Return value */
-
-/* 70 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 72 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 74 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_nTargets */
-
-/* 76 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 78 */ NdrFcLong( 0x0 ), /* 0 */
-/* 82 */ NdrFcShort( 0x5 ), /* 5 */
-/* 84 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 86 */ NdrFcShort( 0x0 ), /* 0 */
-/* 88 */ NdrFcShort( 0x24 ), /* 36 */
-/* 90 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 92 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 94 */ NdrFcShort( 0x0 ), /* 0 */
-/* 96 */ NdrFcShort( 0x0 ), /* 0 */
-/* 98 */ NdrFcShort( 0x0 ), /* 0 */
-/* 100 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter nTargets */
-
-/* 102 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 104 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 106 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 108 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 110 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 112 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_target */
-
-/* 114 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 116 */ NdrFcLong( 0x0 ), /* 0 */
-/* 120 */ NdrFcShort( 0x6 ), /* 6 */
-/* 122 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 124 */ NdrFcShort( 0x8 ), /* 8 */
-/* 126 */ NdrFcShort( 0x8 ), /* 8 */
-/* 128 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 130 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 132 */ NdrFcShort( 0x0 ), /* 0 */
-/* 134 */ NdrFcShort( 0x0 ), /* 0 */
-/* 136 */ NdrFcShort( 0x0 ), /* 0 */
-/* 138 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter targetIndex */
-
-/* 140 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 142 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 144 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter target */
-
-/* 146 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
-/* 148 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 150 */ NdrFcShort( 0x2e ), /* Type Offset=46 */
-
- /* Return value */
-
-/* 152 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 154 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 156 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_targets */
-
-/* 158 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 160 */ NdrFcLong( 0x0 ), /* 0 */
-/* 164 */ NdrFcShort( 0x7 ), /* 7 */
-/* 166 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
-/* 168 */ NdrFcShort( 0x8 ), /* 8 */
-/* 170 */ NdrFcShort( 0x24 ), /* 36 */
-/* 172 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x4, /* 4 */
-/* 174 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 176 */ NdrFcShort( 0x1 ), /* 1 */
-/* 178 */ NdrFcShort( 0x0 ), /* 0 */
-/* 180 */ NdrFcShort( 0x0 ), /* 0 */
-/* 182 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter maxTargets */
-
-/* 184 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 186 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 188 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter targets */
-
-/* 190 */ NdrFcShort( 0x113 ), /* Flags: must size, must free, out, simple ref, */
-/* 192 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 194 */ NdrFcShort( 0x48 ), /* Type Offset=72 */
-
- /* Parameter nTargets */
-
-/* 196 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 198 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 200 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 202 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 204 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 206 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- 0x0
- }
- };
-
-static const AccessibleRelation_MIDL_TYPE_FORMAT_STRING AccessibleRelation__MIDL_TypeFormatString =
- {
- 0,
- {
- NdrFcShort( 0x0 ), /* 0 */
-/* 2 */
- 0x11, 0x4, /* FC_RP [alloced_on_stack] */
-/* 4 */ NdrFcShort( 0x1c ), /* Offset= 28 (32) */
-/* 6 */
- 0x13, 0x0, /* FC_OP */
-/* 8 */ NdrFcShort( 0xe ), /* Offset= 14 (22) */
-/* 10 */
- 0x1b, /* FC_CARRAY */
- 0x1, /* 1 */
-/* 12 */ NdrFcShort( 0x2 ), /* 2 */
-/* 14 */ 0x9, /* Corr desc: FC_ULONG */
- 0x0, /* */
-/* 16 */ NdrFcShort( 0xfffc ), /* -4 */
-/* 18 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 20 */ 0x6, /* FC_SHORT */
- 0x5b, /* FC_END */
-/* 22 */
- 0x17, /* FC_CSTRUCT */
- 0x3, /* 3 */
-/* 24 */ NdrFcShort( 0x8 ), /* 8 */
-/* 26 */ NdrFcShort( 0xfff0 ), /* Offset= -16 (10) */
-/* 28 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 30 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 32 */ 0xb4, /* FC_USER_MARSHAL */
- 0x83, /* 131 */
-/* 34 */ NdrFcShort( 0x0 ), /* 0 */
-/* 36 */ NdrFcShort( 0x8 ), /* 8 */
-/* 38 */ NdrFcShort( 0x0 ), /* 0 */
-/* 40 */ NdrFcShort( 0xffde ), /* Offset= -34 (6) */
-/* 42 */
- 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
-/* 44 */ 0x8, /* FC_LONG */
- 0x5c, /* FC_PAD */
-/* 46 */
- 0x11, 0x10, /* FC_RP [pointer_deref] */
-/* 48 */ NdrFcShort( 0x2 ), /* Offset= 2 (50) */
-/* 50 */
- 0x2f, /* FC_IP */
- 0x5a, /* FC_CONSTANT_IID */
-/* 52 */ NdrFcLong( 0x0 ), /* 0 */
-/* 56 */ NdrFcShort( 0x0 ), /* 0 */
-/* 58 */ NdrFcShort( 0x0 ), /* 0 */
-/* 60 */ 0xc0, /* 192 */
- 0x0, /* 0 */
-/* 62 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 64 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 66 */ 0x0, /* 0 */
- 0x46, /* 70 */
-/* 68 */
- 0x11, 0x0, /* FC_RP */
-/* 70 */ NdrFcShort( 0x2 ), /* Offset= 2 (72) */
-/* 72 */
- 0x21, /* FC_BOGUS_ARRAY */
- 0x3, /* 3 */
-/* 74 */ NdrFcShort( 0x0 ), /* 0 */
-/* 76 */ 0x28, /* Corr desc: parameter, FC_LONG */
- 0x0, /* */
-/* 78 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 80 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 82 */ 0x28, /* Corr desc: parameter, FC_LONG */
- 0x54, /* FC_DEREFERENCE */
-/* 84 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 86 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 88 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 90 */ NdrFcShort( 0xffd8 ), /* Offset= -40 (50) */
-/* 92 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-
- 0x0
- }
- };
-
-static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ] =
- {
-
- {
- BSTR_UserSize
- ,BSTR_UserMarshal
- ,BSTR_UserUnmarshal
- ,BSTR_UserFree
- }
-
- };
-
-
-
-/* Standard interface: __MIDL_itf_AccessibleRelation_0000_0000, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */
-
-
-/* Object interface: IUnknown, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
-
-
-/* Object interface: IAccessibleRelation, ver. 0.0,
- GUID={0x7CDF86EE,0xC3DA,0x496a,{0xBD,0xA4,0x28,0x1B,0x33,0x6E,0x1F,0xDC}} */
-
-#pragma code_seg(".orpc")
-static const unsigned short IAccessibleRelation_FormatStringOffsetTable[] =
- {
- 0,
- 38,
- 76,
- 114,
- 158
- };
-
-static const MIDL_STUBLESS_PROXY_INFO IAccessibleRelation_ProxyInfo =
- {
- &Object_StubDesc,
- AccessibleRelation__MIDL_ProcFormatString.Format,
- &IAccessibleRelation_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0
- };
-
-
-static const MIDL_SERVER_INFO IAccessibleRelation_ServerInfo =
- {
- &Object_StubDesc,
- 0,
- AccessibleRelation__MIDL_ProcFormatString.Format,
- &IAccessibleRelation_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0,
- 0};
-CINTERFACE_PROXY_VTABLE(8) _IAccessibleRelationProxyVtbl =
-{
- &IAccessibleRelation_ProxyInfo,
- &IID_IAccessibleRelation,
- IUnknown_QueryInterface_Proxy,
- IUnknown_AddRef_Proxy,
- IUnknown_Release_Proxy ,
- (void *) (INT_PTR) -1 /* IAccessibleRelation::get_relationType */ ,
- (void *) (INT_PTR) -1 /* IAccessibleRelation::get_localizedRelationType */ ,
- (void *) (INT_PTR) -1 /* IAccessibleRelation::get_nTargets */ ,
- (void *) (INT_PTR) -1 /* IAccessibleRelation::get_target */ ,
- (void *) (INT_PTR) -1 /* IAccessibleRelation::get_targets */
-};
-
-const CInterfaceStubVtbl _IAccessibleRelationStubVtbl =
-{
- &IID_IAccessibleRelation,
- &IAccessibleRelation_ServerInfo,
- 8,
- 0, /* pure interpreted */
- CStdStubBuffer_METHODS
-};
-
-static const MIDL_STUB_DESC Object_StubDesc =
- {
- 0,
- NdrOleAllocate,
- NdrOleFree,
- 0,
- 0,
- 0,
- 0,
- 0,
- AccessibleRelation__MIDL_TypeFormatString.Format,
- 1, /* -error bounds_check flag */
- 0x50002, /* Ndr library version */
- 0,
- 0x700022b, /* MIDL Version 7.0.555 */
- 0,
- UserMarshalRoutines,
- 0, /* notify & notify_flag routine table */
- 0x1, /* MIDL flag */
- 0, /* cs routines */
- 0, /* proxy/server info */
- 0
- };
-
-const CInterfaceProxyVtbl * const _AccessibleRelation_ProxyVtblList[] =
-{
- ( CInterfaceProxyVtbl *) &_IAccessibleRelationProxyVtbl,
- 0
-};
-
-const CInterfaceStubVtbl * const _AccessibleRelation_StubVtblList[] =
-{
- ( CInterfaceStubVtbl *) &_IAccessibleRelationStubVtbl,
- 0
-};
-
-PCInterfaceName const _AccessibleRelation_InterfaceNamesList[] =
-{
- "IAccessibleRelation",
- 0
-};
-
-
-#define _AccessibleRelation_CHECK_IID(n) IID_GENERIC_CHECK_IID( _AccessibleRelation, pIID, n)
-
-int __stdcall _AccessibleRelation_IID_Lookup( const IID * pIID, int * pIndex )
-{
-
- if(!_AccessibleRelation_CHECK_IID(0))
- {
- *pIndex = 0;
- return 1;
- }
-
- return 0;
-}
-
-const ExtendedProxyFileInfo AccessibleRelation_ProxyFileInfo =
-{
- (PCInterfaceProxyVtblList *) & _AccessibleRelation_ProxyVtblList,
- (PCInterfaceStubVtblList *) & _AccessibleRelation_StubVtblList,
- (const PCInterfaceName * ) & _AccessibleRelation_InterfaceNamesList,
- 0, /* no delegation */
- & _AccessibleRelation_IID_Lookup,
- 1,
- 2,
- 0, /* table of [async_uuid] interfaces */
- 0, /* Filler1 */
- 0, /* Filler2 */
- 0 /* Filler3 */
-};
-#if _MSC_VER >= 1200
-#pragma warning(pop)
-#endif
-
-
-#endif /* defined(_M_AMD64)*/
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleRole.h b/src/3rdparty/iaccessible2/generated/amd64/AccessibleRole.h
deleted file mode 100644
index bee6466b7c..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleRole.h
+++ /dev/null
@@ -1,118 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:59 2012
- */
-/* Compiler settings for AccessibleRole.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-
-#ifndef __AccessibleRole_h__
-#define __AccessibleRole_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-/* header files for imported files */
-#include "objidl.h"
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-/* interface __MIDL_itf_AccessibleRole_0000_0000 */
-/* [local] */
-
-
-enum IA2Role
- { IA2_ROLE_UNKNOWN = 0,
- IA2_ROLE_CANVAS = 0x401,
- IA2_ROLE_CAPTION = ( IA2_ROLE_CANVAS + 1 ) ,
- IA2_ROLE_CHECK_MENU_ITEM = ( IA2_ROLE_CAPTION + 1 ) ,
- IA2_ROLE_COLOR_CHOOSER = ( IA2_ROLE_CHECK_MENU_ITEM + 1 ) ,
- IA2_ROLE_DATE_EDITOR = ( IA2_ROLE_COLOR_CHOOSER + 1 ) ,
- IA2_ROLE_DESKTOP_ICON = ( IA2_ROLE_DATE_EDITOR + 1 ) ,
- IA2_ROLE_DESKTOP_PANE = ( IA2_ROLE_DESKTOP_ICON + 1 ) ,
- IA2_ROLE_DIRECTORY_PANE = ( IA2_ROLE_DESKTOP_PANE + 1 ) ,
- IA2_ROLE_EDITBAR = ( IA2_ROLE_DIRECTORY_PANE + 1 ) ,
- IA2_ROLE_EMBEDDED_OBJECT = ( IA2_ROLE_EDITBAR + 1 ) ,
- IA2_ROLE_ENDNOTE = ( IA2_ROLE_EMBEDDED_OBJECT + 1 ) ,
- IA2_ROLE_FILE_CHOOSER = ( IA2_ROLE_ENDNOTE + 1 ) ,
- IA2_ROLE_FONT_CHOOSER = ( IA2_ROLE_FILE_CHOOSER + 1 ) ,
- IA2_ROLE_FOOTER = ( IA2_ROLE_FONT_CHOOSER + 1 ) ,
- IA2_ROLE_FOOTNOTE = ( IA2_ROLE_FOOTER + 1 ) ,
- IA2_ROLE_FORM = ( IA2_ROLE_FOOTNOTE + 1 ) ,
- IA2_ROLE_FRAME = ( IA2_ROLE_FORM + 1 ) ,
- IA2_ROLE_GLASS_PANE = ( IA2_ROLE_FRAME + 1 ) ,
- IA2_ROLE_HEADER = ( IA2_ROLE_GLASS_PANE + 1 ) ,
- IA2_ROLE_HEADING = ( IA2_ROLE_HEADER + 1 ) ,
- IA2_ROLE_ICON = ( IA2_ROLE_HEADING + 1 ) ,
- IA2_ROLE_IMAGE_MAP = ( IA2_ROLE_ICON + 1 ) ,
- IA2_ROLE_INPUT_METHOD_WINDOW = ( IA2_ROLE_IMAGE_MAP + 1 ) ,
- IA2_ROLE_INTERNAL_FRAME = ( IA2_ROLE_INPUT_METHOD_WINDOW + 1 ) ,
- IA2_ROLE_LABEL = ( IA2_ROLE_INTERNAL_FRAME + 1 ) ,
- IA2_ROLE_LAYERED_PANE = ( IA2_ROLE_LABEL + 1 ) ,
- IA2_ROLE_NOTE = ( IA2_ROLE_LAYERED_PANE + 1 ) ,
- IA2_ROLE_OPTION_PANE = ( IA2_ROLE_NOTE + 1 ) ,
- IA2_ROLE_PAGE = ( IA2_ROLE_OPTION_PANE + 1 ) ,
- IA2_ROLE_PARAGRAPH = ( IA2_ROLE_PAGE + 1 ) ,
- IA2_ROLE_RADIO_MENU_ITEM = ( IA2_ROLE_PARAGRAPH + 1 ) ,
- IA2_ROLE_REDUNDANT_OBJECT = ( IA2_ROLE_RADIO_MENU_ITEM + 1 ) ,
- IA2_ROLE_ROOT_PANE = ( IA2_ROLE_REDUNDANT_OBJECT + 1 ) ,
- IA2_ROLE_RULER = ( IA2_ROLE_ROOT_PANE + 1 ) ,
- IA2_ROLE_SCROLL_PANE = ( IA2_ROLE_RULER + 1 ) ,
- IA2_ROLE_SECTION = ( IA2_ROLE_SCROLL_PANE + 1 ) ,
- IA2_ROLE_SHAPE = ( IA2_ROLE_SECTION + 1 ) ,
- IA2_ROLE_SPLIT_PANE = ( IA2_ROLE_SHAPE + 1 ) ,
- IA2_ROLE_TEAR_OFF_MENU = ( IA2_ROLE_SPLIT_PANE + 1 ) ,
- IA2_ROLE_TERMINAL = ( IA2_ROLE_TEAR_OFF_MENU + 1 ) ,
- IA2_ROLE_TEXT_FRAME = ( IA2_ROLE_TERMINAL + 1 ) ,
- IA2_ROLE_TOGGLE_BUTTON = ( IA2_ROLE_TEXT_FRAME + 1 ) ,
- IA2_ROLE_VIEW_PORT = ( IA2_ROLE_TOGGLE_BUTTON + 1 ) ,
- IA2_ROLE_COMPLEMENTARY_CONTENT = ( IA2_ROLE_VIEW_PORT + 1 )
- } ;
-
-
-extern RPC_IF_HANDLE __MIDL_itf_AccessibleRole_0000_0000_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_AccessibleRole_0000_0000_v0_0_s_ifspec;
-
-/* Additional Prototypes for ALL interfaces */
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleStates.h b/src/3rdparty/iaccessible2/generated/amd64/AccessibleStates.h
deleted file mode 100644
index fbb6ff99b3..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleStates.h
+++ /dev/null
@@ -1,95 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:59 2012
- */
-/* Compiler settings for AccessibleStates.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-
-#ifndef __AccessibleStates_h__
-#define __AccessibleStates_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-/* header files for imported files */
-#include "objidl.h"
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-/* interface __MIDL_itf_AccessibleStates_0000_0000 */
-/* [local] */
-
-typedef long AccessibleStates;
-
-
-enum IA2States
- { IA2_STATE_ACTIVE = 0x1,
- IA2_STATE_ARMED = 0x2,
- IA2_STATE_DEFUNCT = 0x4,
- IA2_STATE_EDITABLE = 0x8,
- IA2_STATE_HORIZONTAL = 0x10,
- IA2_STATE_ICONIFIED = 0x20,
- IA2_STATE_INVALID_ENTRY = 0x40,
- IA2_STATE_MANAGES_DESCENDANTS = 0x80,
- IA2_STATE_MODAL = 0x100,
- IA2_STATE_MULTI_LINE = 0x200,
- IA2_STATE_OPAQUE = 0x400,
- IA2_STATE_REQUIRED = 0x800,
- IA2_STATE_SELECTABLE_TEXT = 0x1000,
- IA2_STATE_SINGLE_LINE = 0x2000,
- IA2_STATE_STALE = 0x4000,
- IA2_STATE_SUPPORTS_AUTOCOMPLETION = 0x8000,
- IA2_STATE_TRANSIENT = 0x10000,
- IA2_STATE_VERTICAL = 0x20000,
- IA2_STATE_CHECKABLE = 0x40000,
- IA2_STATE_PINNED = 0x80000
- } ;
-
-
-extern RPC_IF_HANDLE __MIDL_itf_AccessibleStates_0000_0000_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_AccessibleStates_0000_0000_v0_0_s_ifspec;
-
-/* Additional Prototypes for ALL interfaces */
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleTable.h b/src/3rdparty/iaccessible2/generated/amd64/AccessibleTable.h
deleted file mode 100644
index fb9c7478a1..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleTable.h
+++ /dev/null
@@ -1,497 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:59 2012
- */
-/* Compiler settings for AccessibleTable.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-#ifndef COM_NO_WINDOWS_H
-#include "windows.h"
-#include "ole2.h"
-#endif /*COM_NO_WINDOWS_H*/
-
-#ifndef __AccessibleTable_h__
-#define __AccessibleTable_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifndef __IAccessibleTable_FWD_DEFINED__
-#define __IAccessibleTable_FWD_DEFINED__
-typedef interface IAccessibleTable IAccessibleTable;
-#endif /* __IAccessibleTable_FWD_DEFINED__ */
-
-
-/* header files for imported files */
-#include "objidl.h"
-#include "oaidl.h"
-#include "oleacc.h"
-#include "Accessible2.h"
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#ifndef __IAccessibleTable_INTERFACE_DEFINED__
-#define __IAccessibleTable_INTERFACE_DEFINED__
-
-/* interface IAccessibleTable */
-/* [uuid][object] */
-
-
-EXTERN_C const IID IID_IAccessibleTable;
-
-#if defined(__cplusplus) && !defined(CINTERFACE)
-
- MIDL_INTERFACE("35AD8070-C20C-4fb4-B094-F4F7275DD469")
- IAccessibleTable : public IUnknown
- {
- public:
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_accessibleAt(
- /* [in] */ long row,
- /* [in] */ long column,
- /* [retval][out] */ IUnknown **accessible) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_caption(
- /* [retval][out] */ IUnknown **accessible) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_childIndex(
- /* [in] */ long rowIndex,
- /* [in] */ long columnIndex,
- /* [retval][out] */ long *cellIndex) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnDescription(
- /* [in] */ long column,
- /* [retval][out] */ BSTR *description) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnExtentAt(
- /* [in] */ long row,
- /* [in] */ long column,
- /* [retval][out] */ long *nColumnsSpanned) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnHeader(
- /* [out] */ IAccessibleTable **accessibleTable,
- /* [retval][out] */ long *startingRowIndex) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnIndex(
- /* [in] */ long cellIndex,
- /* [retval][out] */ long *columnIndex) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nColumns(
- /* [retval][out] */ long *columnCount) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nRows(
- /* [retval][out] */ long *rowCount) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelectedChildren(
- /* [retval][out] */ long *cellCount) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelectedColumns(
- /* [retval][out] */ long *columnCount) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelectedRows(
- /* [retval][out] */ long *rowCount) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowDescription(
- /* [in] */ long row,
- /* [retval][out] */ BSTR *description) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowExtentAt(
- /* [in] */ long row,
- /* [in] */ long column,
- /* [retval][out] */ long *nRowsSpanned) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowHeader(
- /* [out] */ IAccessibleTable **accessibleTable,
- /* [retval][out] */ long *startingColumnIndex) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowIndex(
- /* [in] */ long cellIndex,
- /* [retval][out] */ long *rowIndex) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selectedChildren(
- /* [in] */ long maxChildren,
- /* [length_is][length_is][size_is][size_is][out] */ long **children,
- /* [retval][out] */ long *nChildren) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selectedColumns(
- /* [in] */ long maxColumns,
- /* [length_is][length_is][size_is][size_is][out] */ long **columns,
- /* [retval][out] */ long *nColumns) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selectedRows(
- /* [in] */ long maxRows,
- /* [length_is][length_is][size_is][size_is][out] */ long **rows,
- /* [retval][out] */ long *nRows) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_summary(
- /* [retval][out] */ IUnknown **accessible) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isColumnSelected(
- /* [in] */ long column,
- /* [retval][out] */ boolean *isSelected) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isRowSelected(
- /* [in] */ long row,
- /* [retval][out] */ boolean *isSelected) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isSelected(
- /* [in] */ long row,
- /* [in] */ long column,
- /* [retval][out] */ boolean *isSelected) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE selectRow(
- /* [in] */ long row) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE selectColumn(
- /* [in] */ long column) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE unselectRow(
- /* [in] */ long row) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE unselectColumn(
- /* [in] */ long column) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowColumnExtentsAtIndex(
- /* [in] */ long index,
- /* [out] */ long *row,
- /* [out] */ long *column,
- /* [out] */ long *rowExtents,
- /* [out] */ long *columnExtents,
- /* [retval][out] */ boolean *isSelected) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_modelChange(
- /* [retval][out] */ IA2TableModelChange *modelChange) = 0;
-
- };
-
-#else /* C style interface */
-
- typedef struct IAccessibleTableVtbl
- {
- BEGIN_INTERFACE
-
- HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
- IAccessibleTable * This,
- /* [in] */ REFIID riid,
- /* [annotation][iid_is][out] */
- __RPC__deref_out void **ppvObject);
-
- ULONG ( STDMETHODCALLTYPE *AddRef )(
- IAccessibleTable * This);
-
- ULONG ( STDMETHODCALLTYPE *Release )(
- IAccessibleTable * This);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_accessibleAt )(
- IAccessibleTable * This,
- /* [in] */ long row,
- /* [in] */ long column,
- /* [retval][out] */ IUnknown **accessible);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_caption )(
- IAccessibleTable * This,
- /* [retval][out] */ IUnknown **accessible);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_childIndex )(
- IAccessibleTable * This,
- /* [in] */ long rowIndex,
- /* [in] */ long columnIndex,
- /* [retval][out] */ long *cellIndex);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnDescription )(
- IAccessibleTable * This,
- /* [in] */ long column,
- /* [retval][out] */ BSTR *description);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnExtentAt )(
- IAccessibleTable * This,
- /* [in] */ long row,
- /* [in] */ long column,
- /* [retval][out] */ long *nColumnsSpanned);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnHeader )(
- IAccessibleTable * This,
- /* [out] */ IAccessibleTable **accessibleTable,
- /* [retval][out] */ long *startingRowIndex);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnIndex )(
- IAccessibleTable * This,
- /* [in] */ long cellIndex,
- /* [retval][out] */ long *columnIndex);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nColumns )(
- IAccessibleTable * This,
- /* [retval][out] */ long *columnCount);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nRows )(
- IAccessibleTable * This,
- /* [retval][out] */ long *rowCount);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelectedChildren )(
- IAccessibleTable * This,
- /* [retval][out] */ long *cellCount);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelectedColumns )(
- IAccessibleTable * This,
- /* [retval][out] */ long *columnCount);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelectedRows )(
- IAccessibleTable * This,
- /* [retval][out] */ long *rowCount);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowDescription )(
- IAccessibleTable * This,
- /* [in] */ long row,
- /* [retval][out] */ BSTR *description);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowExtentAt )(
- IAccessibleTable * This,
- /* [in] */ long row,
- /* [in] */ long column,
- /* [retval][out] */ long *nRowsSpanned);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowHeader )(
- IAccessibleTable * This,
- /* [out] */ IAccessibleTable **accessibleTable,
- /* [retval][out] */ long *startingColumnIndex);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowIndex )(
- IAccessibleTable * This,
- /* [in] */ long cellIndex,
- /* [retval][out] */ long *rowIndex);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectedChildren )(
- IAccessibleTable * This,
- /* [in] */ long maxChildren,
- /* [length_is][length_is][size_is][size_is][out] */ long **children,
- /* [retval][out] */ long *nChildren);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectedColumns )(
- IAccessibleTable * This,
- /* [in] */ long maxColumns,
- /* [length_is][length_is][size_is][size_is][out] */ long **columns,
- /* [retval][out] */ long *nColumns);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectedRows )(
- IAccessibleTable * This,
- /* [in] */ long maxRows,
- /* [length_is][length_is][size_is][size_is][out] */ long **rows,
- /* [retval][out] */ long *nRows);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_summary )(
- IAccessibleTable * This,
- /* [retval][out] */ IUnknown **accessible);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isColumnSelected )(
- IAccessibleTable * This,
- /* [in] */ long column,
- /* [retval][out] */ boolean *isSelected);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isRowSelected )(
- IAccessibleTable * This,
- /* [in] */ long row,
- /* [retval][out] */ boolean *isSelected);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isSelected )(
- IAccessibleTable * This,
- /* [in] */ long row,
- /* [in] */ long column,
- /* [retval][out] */ boolean *isSelected);
-
- HRESULT ( STDMETHODCALLTYPE *selectRow )(
- IAccessibleTable * This,
- /* [in] */ long row);
-
- HRESULT ( STDMETHODCALLTYPE *selectColumn )(
- IAccessibleTable * This,
- /* [in] */ long column);
-
- HRESULT ( STDMETHODCALLTYPE *unselectRow )(
- IAccessibleTable * This,
- /* [in] */ long row);
-
- HRESULT ( STDMETHODCALLTYPE *unselectColumn )(
- IAccessibleTable * This,
- /* [in] */ long column);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowColumnExtentsAtIndex )(
- IAccessibleTable * This,
- /* [in] */ long index,
- /* [out] */ long *row,
- /* [out] */ long *column,
- /* [out] */ long *rowExtents,
- /* [out] */ long *columnExtents,
- /* [retval][out] */ boolean *isSelected);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_modelChange )(
- IAccessibleTable * This,
- /* [retval][out] */ IA2TableModelChange *modelChange);
-
- END_INTERFACE
- } IAccessibleTableVtbl;
-
- interface IAccessibleTable
- {
- CONST_VTBL struct IAccessibleTableVtbl *lpVtbl;
- };
-
-
-
-#ifdef COBJMACROS
-
-
-#define IAccessibleTable_QueryInterface(This,riid,ppvObject) \
- ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
-
-#define IAccessibleTable_AddRef(This) \
- ( (This)->lpVtbl -> AddRef(This) )
-
-#define IAccessibleTable_Release(This) \
- ( (This)->lpVtbl -> Release(This) )
-
-
-#define IAccessibleTable_get_accessibleAt(This,row,column,accessible) \
- ( (This)->lpVtbl -> get_accessibleAt(This,row,column,accessible) )
-
-#define IAccessibleTable_get_caption(This,accessible) \
- ( (This)->lpVtbl -> get_caption(This,accessible) )
-
-#define IAccessibleTable_get_childIndex(This,rowIndex,columnIndex,cellIndex) \
- ( (This)->lpVtbl -> get_childIndex(This,rowIndex,columnIndex,cellIndex) )
-
-#define IAccessibleTable_get_columnDescription(This,column,description) \
- ( (This)->lpVtbl -> get_columnDescription(This,column,description) )
-
-#define IAccessibleTable_get_columnExtentAt(This,row,column,nColumnsSpanned) \
- ( (This)->lpVtbl -> get_columnExtentAt(This,row,column,nColumnsSpanned) )
-
-#define IAccessibleTable_get_columnHeader(This,accessibleTable,startingRowIndex) \
- ( (This)->lpVtbl -> get_columnHeader(This,accessibleTable,startingRowIndex) )
-
-#define IAccessibleTable_get_columnIndex(This,cellIndex,columnIndex) \
- ( (This)->lpVtbl -> get_columnIndex(This,cellIndex,columnIndex) )
-
-#define IAccessibleTable_get_nColumns(This,columnCount) \
- ( (This)->lpVtbl -> get_nColumns(This,columnCount) )
-
-#define IAccessibleTable_get_nRows(This,rowCount) \
- ( (This)->lpVtbl -> get_nRows(This,rowCount) )
-
-#define IAccessibleTable_get_nSelectedChildren(This,cellCount) \
- ( (This)->lpVtbl -> get_nSelectedChildren(This,cellCount) )
-
-#define IAccessibleTable_get_nSelectedColumns(This,columnCount) \
- ( (This)->lpVtbl -> get_nSelectedColumns(This,columnCount) )
-
-#define IAccessibleTable_get_nSelectedRows(This,rowCount) \
- ( (This)->lpVtbl -> get_nSelectedRows(This,rowCount) )
-
-#define IAccessibleTable_get_rowDescription(This,row,description) \
- ( (This)->lpVtbl -> get_rowDescription(This,row,description) )
-
-#define IAccessibleTable_get_rowExtentAt(This,row,column,nRowsSpanned) \
- ( (This)->lpVtbl -> get_rowExtentAt(This,row,column,nRowsSpanned) )
-
-#define IAccessibleTable_get_rowHeader(This,accessibleTable,startingColumnIndex) \
- ( (This)->lpVtbl -> get_rowHeader(This,accessibleTable,startingColumnIndex) )
-
-#define IAccessibleTable_get_rowIndex(This,cellIndex,rowIndex) \
- ( (This)->lpVtbl -> get_rowIndex(This,cellIndex,rowIndex) )
-
-#define IAccessibleTable_get_selectedChildren(This,maxChildren,children,nChildren) \
- ( (This)->lpVtbl -> get_selectedChildren(This,maxChildren,children,nChildren) )
-
-#define IAccessibleTable_get_selectedColumns(This,maxColumns,columns,nColumns) \
- ( (This)->lpVtbl -> get_selectedColumns(This,maxColumns,columns,nColumns) )
-
-#define IAccessibleTable_get_selectedRows(This,maxRows,rows,nRows) \
- ( (This)->lpVtbl -> get_selectedRows(This,maxRows,rows,nRows) )
-
-#define IAccessibleTable_get_summary(This,accessible) \
- ( (This)->lpVtbl -> get_summary(This,accessible) )
-
-#define IAccessibleTable_get_isColumnSelected(This,column,isSelected) \
- ( (This)->lpVtbl -> get_isColumnSelected(This,column,isSelected) )
-
-#define IAccessibleTable_get_isRowSelected(This,row,isSelected) \
- ( (This)->lpVtbl -> get_isRowSelected(This,row,isSelected) )
-
-#define IAccessibleTable_get_isSelected(This,row,column,isSelected) \
- ( (This)->lpVtbl -> get_isSelected(This,row,column,isSelected) )
-
-#define IAccessibleTable_selectRow(This,row) \
- ( (This)->lpVtbl -> selectRow(This,row) )
-
-#define IAccessibleTable_selectColumn(This,column) \
- ( (This)->lpVtbl -> selectColumn(This,column) )
-
-#define IAccessibleTable_unselectRow(This,row) \
- ( (This)->lpVtbl -> unselectRow(This,row) )
-
-#define IAccessibleTable_unselectColumn(This,column) \
- ( (This)->lpVtbl -> unselectColumn(This,column) )
-
-#define IAccessibleTable_get_rowColumnExtentsAtIndex(This,index,row,column,rowExtents,columnExtents,isSelected) \
- ( (This)->lpVtbl -> get_rowColumnExtentsAtIndex(This,index,row,column,rowExtents,columnExtents,isSelected) )
-
-#define IAccessibleTable_get_modelChange(This,modelChange) \
- ( (This)->lpVtbl -> get_modelChange(This,modelChange) )
-
-#endif /* COBJMACROS */
-
-
-#endif /* C style interface */
-
-
-
-
-#endif /* __IAccessibleTable_INTERFACE_DEFINED__ */
-
-
-/* Additional Prototypes for ALL interfaces */
-
-unsigned long __RPC_USER BSTR_UserSize( unsigned long *, unsigned long , BSTR * );
-unsigned char * __RPC_USER BSTR_UserMarshal( unsigned long *, unsigned char *, BSTR * );
-unsigned char * __RPC_USER BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * );
-void __RPC_USER BSTR_UserFree( unsigned long *, BSTR * );
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleTable2.h b/src/3rdparty/iaccessible2/generated/amd64/AccessibleTable2.h
deleted file mode 100644
index eeacb21515..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleTable2.h
+++ /dev/null
@@ -1,367 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:59 2012
- */
-/* Compiler settings for AccessibleTable2.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-#ifndef COM_NO_WINDOWS_H
-#include "windows.h"
-#include "ole2.h"
-#endif /*COM_NO_WINDOWS_H*/
-
-#ifndef __AccessibleTable2_h__
-#define __AccessibleTable2_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifndef __IAccessibleTable2_FWD_DEFINED__
-#define __IAccessibleTable2_FWD_DEFINED__
-typedef interface IAccessibleTable2 IAccessibleTable2;
-#endif /* __IAccessibleTable2_FWD_DEFINED__ */
-
-
-/* header files for imported files */
-#include "objidl.h"
-#include "oaidl.h"
-#include "oleacc.h"
-#include "Accessible2.h"
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#ifndef __IAccessibleTable2_INTERFACE_DEFINED__
-#define __IAccessibleTable2_INTERFACE_DEFINED__
-
-/* interface IAccessibleTable2 */
-/* [uuid][object] */
-
-
-EXTERN_C const IID IID_IAccessibleTable2;
-
-#if defined(__cplusplus) && !defined(CINTERFACE)
-
- MIDL_INTERFACE("6167f295-06f0-4cdd-a1fa-02e25153d869")
- IAccessibleTable2 : public IUnknown
- {
- public:
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_cellAt(
- /* [in] */ long row,
- /* [in] */ long column,
- /* [retval][out] */ IUnknown **cell) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_caption(
- /* [retval][out] */ IUnknown **accessible) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnDescription(
- /* [in] */ long column,
- /* [retval][out] */ BSTR *description) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nColumns(
- /* [retval][out] */ long *columnCount) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nRows(
- /* [retval][out] */ long *rowCount) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelectedCells(
- /* [retval][out] */ long *cellCount) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelectedColumns(
- /* [retval][out] */ long *columnCount) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelectedRows(
- /* [retval][out] */ long *rowCount) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowDescription(
- /* [in] */ long row,
- /* [retval][out] */ BSTR *description) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selectedCells(
- /* [size_is][size_is][size_is][out] */ IUnknown ***cells,
- /* [retval][out] */ long *nSelectedCells) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selectedColumns(
- /* [size_is][size_is][out] */ long **selectedColumns,
- /* [retval][out] */ long *nColumns) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selectedRows(
- /* [size_is][size_is][out] */ long **selectedRows,
- /* [retval][out] */ long *nRows) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_summary(
- /* [retval][out] */ IUnknown **accessible) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isColumnSelected(
- /* [in] */ long column,
- /* [retval][out] */ boolean *isSelected) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isRowSelected(
- /* [in] */ long row,
- /* [retval][out] */ boolean *isSelected) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE selectRow(
- /* [in] */ long row) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE selectColumn(
- /* [in] */ long column) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE unselectRow(
- /* [in] */ long row) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE unselectColumn(
- /* [in] */ long column) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_modelChange(
- /* [retval][out] */ IA2TableModelChange *modelChange) = 0;
-
- };
-
-#else /* C style interface */
-
- typedef struct IAccessibleTable2Vtbl
- {
- BEGIN_INTERFACE
-
- HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
- IAccessibleTable2 * This,
- /* [in] */ REFIID riid,
- /* [annotation][iid_is][out] */
- __RPC__deref_out void **ppvObject);
-
- ULONG ( STDMETHODCALLTYPE *AddRef )(
- IAccessibleTable2 * This);
-
- ULONG ( STDMETHODCALLTYPE *Release )(
- IAccessibleTable2 * This);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_cellAt )(
- IAccessibleTable2 * This,
- /* [in] */ long row,
- /* [in] */ long column,
- /* [retval][out] */ IUnknown **cell);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_caption )(
- IAccessibleTable2 * This,
- /* [retval][out] */ IUnknown **accessible);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnDescription )(
- IAccessibleTable2 * This,
- /* [in] */ long column,
- /* [retval][out] */ BSTR *description);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nColumns )(
- IAccessibleTable2 * This,
- /* [retval][out] */ long *columnCount);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nRows )(
- IAccessibleTable2 * This,
- /* [retval][out] */ long *rowCount);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelectedCells )(
- IAccessibleTable2 * This,
- /* [retval][out] */ long *cellCount);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelectedColumns )(
- IAccessibleTable2 * This,
- /* [retval][out] */ long *columnCount);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelectedRows )(
- IAccessibleTable2 * This,
- /* [retval][out] */ long *rowCount);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowDescription )(
- IAccessibleTable2 * This,
- /* [in] */ long row,
- /* [retval][out] */ BSTR *description);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectedCells )(
- IAccessibleTable2 * This,
- /* [size_is][size_is][size_is][out] */ IUnknown ***cells,
- /* [retval][out] */ long *nSelectedCells);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectedColumns )(
- IAccessibleTable2 * This,
- /* [size_is][size_is][out] */ long **selectedColumns,
- /* [retval][out] */ long *nColumns);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectedRows )(
- IAccessibleTable2 * This,
- /* [size_is][size_is][out] */ long **selectedRows,
- /* [retval][out] */ long *nRows);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_summary )(
- IAccessibleTable2 * This,
- /* [retval][out] */ IUnknown **accessible);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isColumnSelected )(
- IAccessibleTable2 * This,
- /* [in] */ long column,
- /* [retval][out] */ boolean *isSelected);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isRowSelected )(
- IAccessibleTable2 * This,
- /* [in] */ long row,
- /* [retval][out] */ boolean *isSelected);
-
- HRESULT ( STDMETHODCALLTYPE *selectRow )(
- IAccessibleTable2 * This,
- /* [in] */ long row);
-
- HRESULT ( STDMETHODCALLTYPE *selectColumn )(
- IAccessibleTable2 * This,
- /* [in] */ long column);
-
- HRESULT ( STDMETHODCALLTYPE *unselectRow )(
- IAccessibleTable2 * This,
- /* [in] */ long row);
-
- HRESULT ( STDMETHODCALLTYPE *unselectColumn )(
- IAccessibleTable2 * This,
- /* [in] */ long column);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_modelChange )(
- IAccessibleTable2 * This,
- /* [retval][out] */ IA2TableModelChange *modelChange);
-
- END_INTERFACE
- } IAccessibleTable2Vtbl;
-
- interface IAccessibleTable2
- {
- CONST_VTBL struct IAccessibleTable2Vtbl *lpVtbl;
- };
-
-
-
-#ifdef COBJMACROS
-
-
-#define IAccessibleTable2_QueryInterface(This,riid,ppvObject) \
- ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
-
-#define IAccessibleTable2_AddRef(This) \
- ( (This)->lpVtbl -> AddRef(This) )
-
-#define IAccessibleTable2_Release(This) \
- ( (This)->lpVtbl -> Release(This) )
-
-
-#define IAccessibleTable2_get_cellAt(This,row,column,cell) \
- ( (This)->lpVtbl -> get_cellAt(This,row,column,cell) )
-
-#define IAccessibleTable2_get_caption(This,accessible) \
- ( (This)->lpVtbl -> get_caption(This,accessible) )
-
-#define IAccessibleTable2_get_columnDescription(This,column,description) \
- ( (This)->lpVtbl -> get_columnDescription(This,column,description) )
-
-#define IAccessibleTable2_get_nColumns(This,columnCount) \
- ( (This)->lpVtbl -> get_nColumns(This,columnCount) )
-
-#define IAccessibleTable2_get_nRows(This,rowCount) \
- ( (This)->lpVtbl -> get_nRows(This,rowCount) )
-
-#define IAccessibleTable2_get_nSelectedCells(This,cellCount) \
- ( (This)->lpVtbl -> get_nSelectedCells(This,cellCount) )
-
-#define IAccessibleTable2_get_nSelectedColumns(This,columnCount) \
- ( (This)->lpVtbl -> get_nSelectedColumns(This,columnCount) )
-
-#define IAccessibleTable2_get_nSelectedRows(This,rowCount) \
- ( (This)->lpVtbl -> get_nSelectedRows(This,rowCount) )
-
-#define IAccessibleTable2_get_rowDescription(This,row,description) \
- ( (This)->lpVtbl -> get_rowDescription(This,row,description) )
-
-#define IAccessibleTable2_get_selectedCells(This,cells,nSelectedCells) \
- ( (This)->lpVtbl -> get_selectedCells(This,cells,nSelectedCells) )
-
-#define IAccessibleTable2_get_selectedColumns(This,selectedColumns,nColumns) \
- ( (This)->lpVtbl -> get_selectedColumns(This,selectedColumns,nColumns) )
-
-#define IAccessibleTable2_get_selectedRows(This,selectedRows,nRows) \
- ( (This)->lpVtbl -> get_selectedRows(This,selectedRows,nRows) )
-
-#define IAccessibleTable2_get_summary(This,accessible) \
- ( (This)->lpVtbl -> get_summary(This,accessible) )
-
-#define IAccessibleTable2_get_isColumnSelected(This,column,isSelected) \
- ( (This)->lpVtbl -> get_isColumnSelected(This,column,isSelected) )
-
-#define IAccessibleTable2_get_isRowSelected(This,row,isSelected) \
- ( (This)->lpVtbl -> get_isRowSelected(This,row,isSelected) )
-
-#define IAccessibleTable2_selectRow(This,row) \
- ( (This)->lpVtbl -> selectRow(This,row) )
-
-#define IAccessibleTable2_selectColumn(This,column) \
- ( (This)->lpVtbl -> selectColumn(This,column) )
-
-#define IAccessibleTable2_unselectRow(This,row) \
- ( (This)->lpVtbl -> unselectRow(This,row) )
-
-#define IAccessibleTable2_unselectColumn(This,column) \
- ( (This)->lpVtbl -> unselectColumn(This,column) )
-
-#define IAccessibleTable2_get_modelChange(This,modelChange) \
- ( (This)->lpVtbl -> get_modelChange(This,modelChange) )
-
-#endif /* COBJMACROS */
-
-
-#endif /* C style interface */
-
-
-
-
-#endif /* __IAccessibleTable2_INTERFACE_DEFINED__ */
-
-
-/* Additional Prototypes for ALL interfaces */
-
-unsigned long __RPC_USER BSTR_UserSize( unsigned long *, unsigned long , BSTR * );
-unsigned char * __RPC_USER BSTR_UserMarshal( unsigned long *, unsigned char *, BSTR * );
-unsigned char * __RPC_USER BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * );
-void __RPC_USER BSTR_UserFree( unsigned long *, BSTR * );
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleTable2_i.c b/src/3rdparty/iaccessible2/generated/amd64/AccessibleTable2_i.c
deleted file mode 100644
index 56e5f31fc0..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleTable2_i.c
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
-
-/* link this file in with the server and any clients */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:59 2012
- */
-/* Compiler settings for AccessibleTable2.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#include <rpc.h>
-#include <rpcndr.h>
-
-#ifdef _MIDL_USE_GUIDDEF_
-
-#ifndef INITGUID
-#define INITGUID
-#include <guiddef.h>
-#undef INITGUID
-#else
-#include <guiddef.h>
-#endif
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
-
-#else // !_MIDL_USE_GUIDDEF_
-
-#ifndef __IID_DEFINED__
-#define __IID_DEFINED__
-
-typedef struct _IID
-{
- unsigned long x;
- unsigned short s1;
- unsigned short s2;
- unsigned char c[8];
-} IID;
-
-#endif // __IID_DEFINED__
-
-#ifndef CLSID_DEFINED
-#define CLSID_DEFINED
-typedef IID CLSID;
-#endif // CLSID_DEFINED
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
-
-#endif !_MIDL_USE_GUIDDEF_
-
-MIDL_DEFINE_GUID(IID, IID_IAccessibleTable2,0x6167f295,0x06f0,0x4cdd,0xa1,0xfa,0x02,0xe2,0x51,0x53,0xd8,0x69);
-
-#undef MIDL_DEFINE_GUID
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleTable2_p.c b/src/3rdparty/iaccessible2/generated/amd64/AccessibleTable2_p.c
deleted file mode 100644
index 02c603fde9..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleTable2_p.c
+++ /dev/null
@@ -1,1099 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the proxy stub code */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:59 2012
- */
-/* Compiler settings for AccessibleTable2.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#if defined(_M_AMD64)
-
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-#if _MSC_VER >= 1200
-#pragma warning(push)
-#endif
-
-#pragma warning( disable: 4211 ) /* redefine extern to static */
-#pragma warning( disable: 4232 ) /* dllimport identity*/
-#pragma warning( disable: 4024 ) /* array to pointer mapping*/
-#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */
-
-#define USE_STUBLESS_PROXY
-
-
-/* verify that the <rpcproxy.h> version is high enough to compile this file*/
-#ifndef __REDQ_RPCPROXY_H_VERSION__
-#define __REQUIRED_RPCPROXY_H_VERSION__ 475
-#endif
-
-
-#include "rpcproxy.h"
-#ifndef __RPCPROXY_H_VERSION__
-#error this stub requires an updated version of <rpcproxy.h>
-#endif /* __RPCPROXY_H_VERSION__ */
-
-
-#include "AccessibleTable2.h"
-
-#define TYPE_FORMAT_STRING_SIZE 141
-#define PROC_FORMAT_STRING_SIZE 815
-#define EXPR_FORMAT_STRING_SIZE 1
-#define TRANSMIT_AS_TABLE_SIZE 0
-#define WIRE_MARSHAL_TABLE_SIZE 1
-
-typedef struct _AccessibleTable2_MIDL_TYPE_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
- } AccessibleTable2_MIDL_TYPE_FORMAT_STRING;
-
-typedef struct _AccessibleTable2_MIDL_PROC_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
- } AccessibleTable2_MIDL_PROC_FORMAT_STRING;
-
-typedef struct _AccessibleTable2_MIDL_EXPR_FORMAT_STRING
- {
- long Pad;
- unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
- } AccessibleTable2_MIDL_EXPR_FORMAT_STRING;
-
-
-static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
-{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
-
-
-extern const AccessibleTable2_MIDL_TYPE_FORMAT_STRING AccessibleTable2__MIDL_TypeFormatString;
-extern const AccessibleTable2_MIDL_PROC_FORMAT_STRING AccessibleTable2__MIDL_ProcFormatString;
-extern const AccessibleTable2_MIDL_EXPR_FORMAT_STRING AccessibleTable2__MIDL_ExprFormatString;
-
-
-extern const MIDL_STUB_DESC Object_StubDesc;
-
-
-extern const MIDL_SERVER_INFO IAccessibleTable2_ServerInfo;
-extern const MIDL_STUBLESS_PROXY_INFO IAccessibleTable2_ProxyInfo;
-
-
-extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ];
-
-#if !defined(__RPC_WIN64__)
-#error Invalid build platform for this stub.
-#endif
-
-static const AccessibleTable2_MIDL_PROC_FORMAT_STRING AccessibleTable2__MIDL_ProcFormatString =
- {
- 0,
- {
-
- /* Procedure get_cellAt */
-
- 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 2 */ NdrFcLong( 0x0 ), /* 0 */
-/* 6 */ NdrFcShort( 0x3 ), /* 3 */
-/* 8 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
-/* 10 */ NdrFcShort( 0x10 ), /* 16 */
-/* 12 */ NdrFcShort( 0x8 ), /* 8 */
-/* 14 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x4, /* 4 */
-/* 16 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 18 */ NdrFcShort( 0x0 ), /* 0 */
-/* 20 */ NdrFcShort( 0x0 ), /* 0 */
-/* 22 */ NdrFcShort( 0x0 ), /* 0 */
-/* 24 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter row */
-
-/* 26 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 28 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 30 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter column */
-
-/* 32 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 34 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 36 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter cell */
-
-/* 38 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
-/* 40 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 42 */ NdrFcShort( 0x2 ), /* Type Offset=2 */
-
- /* Return value */
-
-/* 44 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 46 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 48 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_caption */
-
-/* 50 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 52 */ NdrFcLong( 0x0 ), /* 0 */
-/* 56 */ NdrFcShort( 0x4 ), /* 4 */
-/* 58 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 60 */ NdrFcShort( 0x0 ), /* 0 */
-/* 62 */ NdrFcShort( 0x8 ), /* 8 */
-/* 64 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 66 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 68 */ NdrFcShort( 0x0 ), /* 0 */
-/* 70 */ NdrFcShort( 0x0 ), /* 0 */
-/* 72 */ NdrFcShort( 0x0 ), /* 0 */
-/* 74 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter accessible */
-
-/* 76 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
-/* 78 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 80 */ NdrFcShort( 0x2 ), /* Type Offset=2 */
-
- /* Return value */
-
-/* 82 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 84 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 86 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_columnDescription */
-
-/* 88 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 90 */ NdrFcLong( 0x0 ), /* 0 */
-/* 94 */ NdrFcShort( 0x5 ), /* 5 */
-/* 96 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 98 */ NdrFcShort( 0x8 ), /* 8 */
-/* 100 */ NdrFcShort( 0x8 ), /* 8 */
-/* 102 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 104 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 106 */ NdrFcShort( 0x1 ), /* 1 */
-/* 108 */ NdrFcShort( 0x0 ), /* 0 */
-/* 110 */ NdrFcShort( 0x0 ), /* 0 */
-/* 112 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter column */
-
-/* 114 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 116 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 118 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter description */
-
-/* 120 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 122 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 124 */ NdrFcShort( 0x36 ), /* Type Offset=54 */
-
- /* Return value */
-
-/* 126 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 128 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 130 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_nColumns */
-
-/* 132 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 134 */ NdrFcLong( 0x0 ), /* 0 */
-/* 138 */ NdrFcShort( 0x6 ), /* 6 */
-/* 140 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 142 */ NdrFcShort( 0x0 ), /* 0 */
-/* 144 */ NdrFcShort( 0x24 ), /* 36 */
-/* 146 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 148 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 150 */ NdrFcShort( 0x0 ), /* 0 */
-/* 152 */ NdrFcShort( 0x0 ), /* 0 */
-/* 154 */ NdrFcShort( 0x0 ), /* 0 */
-/* 156 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter columnCount */
-
-/* 158 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 160 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 162 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 164 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 166 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 168 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_nRows */
-
-/* 170 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 172 */ NdrFcLong( 0x0 ), /* 0 */
-/* 176 */ NdrFcShort( 0x7 ), /* 7 */
-/* 178 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 180 */ NdrFcShort( 0x0 ), /* 0 */
-/* 182 */ NdrFcShort( 0x24 ), /* 36 */
-/* 184 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 186 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 188 */ NdrFcShort( 0x0 ), /* 0 */
-/* 190 */ NdrFcShort( 0x0 ), /* 0 */
-/* 192 */ NdrFcShort( 0x0 ), /* 0 */
-/* 194 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter rowCount */
-
-/* 196 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 198 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 200 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 202 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 204 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 206 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_nSelectedCells */
-
-/* 208 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 210 */ NdrFcLong( 0x0 ), /* 0 */
-/* 214 */ NdrFcShort( 0x8 ), /* 8 */
-/* 216 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 218 */ NdrFcShort( 0x0 ), /* 0 */
-/* 220 */ NdrFcShort( 0x24 ), /* 36 */
-/* 222 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 224 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 226 */ NdrFcShort( 0x0 ), /* 0 */
-/* 228 */ NdrFcShort( 0x0 ), /* 0 */
-/* 230 */ NdrFcShort( 0x0 ), /* 0 */
-/* 232 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter cellCount */
-
-/* 234 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 236 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 238 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 240 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 242 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 244 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_nSelectedColumns */
-
-/* 246 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 248 */ NdrFcLong( 0x0 ), /* 0 */
-/* 252 */ NdrFcShort( 0x9 ), /* 9 */
-/* 254 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 256 */ NdrFcShort( 0x0 ), /* 0 */
-/* 258 */ NdrFcShort( 0x24 ), /* 36 */
-/* 260 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 262 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 264 */ NdrFcShort( 0x0 ), /* 0 */
-/* 266 */ NdrFcShort( 0x0 ), /* 0 */
-/* 268 */ NdrFcShort( 0x0 ), /* 0 */
-/* 270 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter columnCount */
-
-/* 272 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 274 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 276 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 278 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 280 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 282 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_nSelectedRows */
-
-/* 284 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 286 */ NdrFcLong( 0x0 ), /* 0 */
-/* 290 */ NdrFcShort( 0xa ), /* 10 */
-/* 292 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 294 */ NdrFcShort( 0x0 ), /* 0 */
-/* 296 */ NdrFcShort( 0x24 ), /* 36 */
-/* 298 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 300 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 302 */ NdrFcShort( 0x0 ), /* 0 */
-/* 304 */ NdrFcShort( 0x0 ), /* 0 */
-/* 306 */ NdrFcShort( 0x0 ), /* 0 */
-/* 308 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter rowCount */
-
-/* 310 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 312 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 314 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 316 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 318 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 320 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_rowDescription */
-
-/* 322 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 324 */ NdrFcLong( 0x0 ), /* 0 */
-/* 328 */ NdrFcShort( 0xb ), /* 11 */
-/* 330 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 332 */ NdrFcShort( 0x8 ), /* 8 */
-/* 334 */ NdrFcShort( 0x8 ), /* 8 */
-/* 336 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 338 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 340 */ NdrFcShort( 0x1 ), /* 1 */
-/* 342 */ NdrFcShort( 0x0 ), /* 0 */
-/* 344 */ NdrFcShort( 0x0 ), /* 0 */
-/* 346 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter row */
-
-/* 348 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 350 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 352 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter description */
-
-/* 354 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 356 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 358 */ NdrFcShort( 0x36 ), /* Type Offset=54 */
-
- /* Return value */
-
-/* 360 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 362 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 364 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_selectedCells */
-
-/* 366 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 368 */ NdrFcLong( 0x0 ), /* 0 */
-/* 372 */ NdrFcShort( 0xc ), /* 12 */
-/* 374 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 376 */ NdrFcShort( 0x0 ), /* 0 */
-/* 378 */ NdrFcShort( 0x24 ), /* 36 */
-/* 380 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 382 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 384 */ NdrFcShort( 0x1 ), /* 1 */
-/* 386 */ NdrFcShort( 0x0 ), /* 0 */
-/* 388 */ NdrFcShort( 0x0 ), /* 0 */
-/* 390 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter cells */
-
-/* 392 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
-/* 394 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 396 */ NdrFcShort( 0x44 ), /* Type Offset=68 */
-
- /* Parameter nSelectedCells */
-
-/* 398 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 400 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 402 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 404 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 406 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 408 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_selectedColumns */
-
-/* 410 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 412 */ NdrFcLong( 0x0 ), /* 0 */
-/* 416 */ NdrFcShort( 0xd ), /* 13 */
-/* 418 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 420 */ NdrFcShort( 0x0 ), /* 0 */
-/* 422 */ NdrFcShort( 0x24 ), /* 36 */
-/* 424 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 426 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 428 */ NdrFcShort( 0x1 ), /* 1 */
-/* 430 */ NdrFcShort( 0x0 ), /* 0 */
-/* 432 */ NdrFcShort( 0x0 ), /* 0 */
-/* 434 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter selectedColumns */
-
-/* 436 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
-/* 438 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 440 */ NdrFcShort( 0x62 ), /* Type Offset=98 */
-
- /* Parameter nColumns */
-
-/* 442 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 444 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 446 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 448 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 450 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 452 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_selectedRows */
-
-/* 454 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 456 */ NdrFcLong( 0x0 ), /* 0 */
-/* 460 */ NdrFcShort( 0xe ), /* 14 */
-/* 462 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 464 */ NdrFcShort( 0x0 ), /* 0 */
-/* 466 */ NdrFcShort( 0x24 ), /* 36 */
-/* 468 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 470 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 472 */ NdrFcShort( 0x1 ), /* 1 */
-/* 474 */ NdrFcShort( 0x0 ), /* 0 */
-/* 476 */ NdrFcShort( 0x0 ), /* 0 */
-/* 478 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter selectedRows */
-
-/* 480 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
-/* 482 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 484 */ NdrFcShort( 0x62 ), /* Type Offset=98 */
-
- /* Parameter nRows */
-
-/* 486 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 488 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 490 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 492 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 494 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 496 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_summary */
-
-/* 498 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 500 */ NdrFcLong( 0x0 ), /* 0 */
-/* 504 */ NdrFcShort( 0xf ), /* 15 */
-/* 506 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 508 */ NdrFcShort( 0x0 ), /* 0 */
-/* 510 */ NdrFcShort( 0x8 ), /* 8 */
-/* 512 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 514 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 516 */ NdrFcShort( 0x0 ), /* 0 */
-/* 518 */ NdrFcShort( 0x0 ), /* 0 */
-/* 520 */ NdrFcShort( 0x0 ), /* 0 */
-/* 522 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter accessible */
-
-/* 524 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
-/* 526 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 528 */ NdrFcShort( 0x2 ), /* Type Offset=2 */
-
- /* Return value */
-
-/* 530 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 532 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 534 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_isColumnSelected */
-
-/* 536 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 538 */ NdrFcLong( 0x0 ), /* 0 */
-/* 542 */ NdrFcShort( 0x10 ), /* 16 */
-/* 544 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 546 */ NdrFcShort( 0x8 ), /* 8 */
-/* 548 */ NdrFcShort( 0x21 ), /* 33 */
-/* 550 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x3, /* 3 */
-/* 552 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 554 */ NdrFcShort( 0x0 ), /* 0 */
-/* 556 */ NdrFcShort( 0x0 ), /* 0 */
-/* 558 */ NdrFcShort( 0x0 ), /* 0 */
-/* 560 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter column */
-
-/* 562 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 564 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 566 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter isSelected */
-
-/* 568 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 570 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 572 */ 0x3, /* FC_SMALL */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 574 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 576 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 578 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_isRowSelected */
-
-/* 580 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 582 */ NdrFcLong( 0x0 ), /* 0 */
-/* 586 */ NdrFcShort( 0x11 ), /* 17 */
-/* 588 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 590 */ NdrFcShort( 0x8 ), /* 8 */
-/* 592 */ NdrFcShort( 0x21 ), /* 33 */
-/* 594 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x3, /* 3 */
-/* 596 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 598 */ NdrFcShort( 0x0 ), /* 0 */
-/* 600 */ NdrFcShort( 0x0 ), /* 0 */
-/* 602 */ NdrFcShort( 0x0 ), /* 0 */
-/* 604 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter row */
-
-/* 606 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 608 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 610 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter isSelected */
-
-/* 612 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 614 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 616 */ 0x3, /* FC_SMALL */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 618 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 620 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 622 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure selectRow */
-
-/* 624 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 626 */ NdrFcLong( 0x0 ), /* 0 */
-/* 630 */ NdrFcShort( 0x12 ), /* 18 */
-/* 632 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 634 */ NdrFcShort( 0x8 ), /* 8 */
-/* 636 */ NdrFcShort( 0x8 ), /* 8 */
-/* 638 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 640 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 642 */ NdrFcShort( 0x0 ), /* 0 */
-/* 644 */ NdrFcShort( 0x0 ), /* 0 */
-/* 646 */ NdrFcShort( 0x0 ), /* 0 */
-/* 648 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter row */
-
-/* 650 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 652 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 654 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 656 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 658 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 660 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure selectColumn */
-
-/* 662 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 664 */ NdrFcLong( 0x0 ), /* 0 */
-/* 668 */ NdrFcShort( 0x13 ), /* 19 */
-/* 670 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 672 */ NdrFcShort( 0x8 ), /* 8 */
-/* 674 */ NdrFcShort( 0x8 ), /* 8 */
-/* 676 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 678 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 680 */ NdrFcShort( 0x0 ), /* 0 */
-/* 682 */ NdrFcShort( 0x0 ), /* 0 */
-/* 684 */ NdrFcShort( 0x0 ), /* 0 */
-/* 686 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter column */
-
-/* 688 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 690 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 692 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 694 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 696 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 698 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure unselectRow */
-
-/* 700 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 702 */ NdrFcLong( 0x0 ), /* 0 */
-/* 706 */ NdrFcShort( 0x14 ), /* 20 */
-/* 708 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 710 */ NdrFcShort( 0x8 ), /* 8 */
-/* 712 */ NdrFcShort( 0x8 ), /* 8 */
-/* 714 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 716 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 718 */ NdrFcShort( 0x0 ), /* 0 */
-/* 720 */ NdrFcShort( 0x0 ), /* 0 */
-/* 722 */ NdrFcShort( 0x0 ), /* 0 */
-/* 724 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter row */
-
-/* 726 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 728 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 730 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 732 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 734 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 736 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure unselectColumn */
-
-/* 738 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 740 */ NdrFcLong( 0x0 ), /* 0 */
-/* 744 */ NdrFcShort( 0x15 ), /* 21 */
-/* 746 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 748 */ NdrFcShort( 0x8 ), /* 8 */
-/* 750 */ NdrFcShort( 0x8 ), /* 8 */
-/* 752 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 754 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 756 */ NdrFcShort( 0x0 ), /* 0 */
-/* 758 */ NdrFcShort( 0x0 ), /* 0 */
-/* 760 */ NdrFcShort( 0x0 ), /* 0 */
-/* 762 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter column */
-
-/* 764 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 766 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 768 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 770 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 772 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 774 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_modelChange */
-
-/* 776 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 778 */ NdrFcLong( 0x0 ), /* 0 */
-/* 782 */ NdrFcShort( 0x16 ), /* 22 */
-/* 784 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 786 */ NdrFcShort( 0x0 ), /* 0 */
-/* 788 */ NdrFcShort( 0x8 ), /* 8 */
-/* 790 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 792 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 794 */ NdrFcShort( 0x0 ), /* 0 */
-/* 796 */ NdrFcShort( 0x0 ), /* 0 */
-/* 798 */ NdrFcShort( 0x0 ), /* 0 */
-/* 800 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter modelChange */
-
-/* 802 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */
-/* 804 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 806 */ NdrFcShort( 0x7e ), /* Type Offset=126 */
-
- /* Return value */
-
-/* 808 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 810 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 812 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- 0x0
- }
- };
-
-static const AccessibleTable2_MIDL_TYPE_FORMAT_STRING AccessibleTable2__MIDL_TypeFormatString =
- {
- 0,
- {
- NdrFcShort( 0x0 ), /* 0 */
-/* 2 */
- 0x11, 0x10, /* FC_RP [pointer_deref] */
-/* 4 */ NdrFcShort( 0x2 ), /* Offset= 2 (6) */
-/* 6 */
- 0x2f, /* FC_IP */
- 0x5a, /* FC_CONSTANT_IID */
-/* 8 */ NdrFcLong( 0x0 ), /* 0 */
-/* 12 */ NdrFcShort( 0x0 ), /* 0 */
-/* 14 */ NdrFcShort( 0x0 ), /* 0 */
-/* 16 */ 0xc0, /* 192 */
- 0x0, /* 0 */
-/* 18 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 20 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 22 */ 0x0, /* 0 */
- 0x46, /* 70 */
-/* 24 */
- 0x11, 0x4, /* FC_RP [alloced_on_stack] */
-/* 26 */ NdrFcShort( 0x1c ), /* Offset= 28 (54) */
-/* 28 */
- 0x13, 0x0, /* FC_OP */
-/* 30 */ NdrFcShort( 0xe ), /* Offset= 14 (44) */
-/* 32 */
- 0x1b, /* FC_CARRAY */
- 0x1, /* 1 */
-/* 34 */ NdrFcShort( 0x2 ), /* 2 */
-/* 36 */ 0x9, /* Corr desc: FC_ULONG */
- 0x0, /* */
-/* 38 */ NdrFcShort( 0xfffc ), /* -4 */
-/* 40 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 42 */ 0x6, /* FC_SHORT */
- 0x5b, /* FC_END */
-/* 44 */
- 0x17, /* FC_CSTRUCT */
- 0x3, /* 3 */
-/* 46 */ NdrFcShort( 0x8 ), /* 8 */
-/* 48 */ NdrFcShort( 0xfff0 ), /* Offset= -16 (32) */
-/* 50 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 52 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 54 */ 0xb4, /* FC_USER_MARSHAL */
- 0x83, /* 131 */
-/* 56 */ NdrFcShort( 0x0 ), /* 0 */
-/* 58 */ NdrFcShort( 0x8 ), /* 8 */
-/* 60 */ NdrFcShort( 0x0 ), /* 0 */
-/* 62 */ NdrFcShort( 0xffde ), /* Offset= -34 (28) */
-/* 64 */
- 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
-/* 66 */ 0x8, /* FC_LONG */
- 0x5c, /* FC_PAD */
-/* 68 */
- 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */
-/* 70 */ NdrFcShort( 0x2 ), /* Offset= 2 (72) */
-/* 72 */
- 0x13, 0x0, /* FC_OP */
-/* 74 */ NdrFcShort( 0x2 ), /* Offset= 2 (76) */
-/* 76 */
- 0x21, /* FC_BOGUS_ARRAY */
- 0x3, /* 3 */
-/* 78 */ NdrFcShort( 0x0 ), /* 0 */
-/* 80 */ 0x28, /* Corr desc: parameter, FC_LONG */
- 0x54, /* FC_DEREFERENCE */
-/* 82 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 84 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 86 */ NdrFcLong( 0xffffffff ), /* -1 */
-/* 90 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 92 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 94 */ NdrFcShort( 0xffa8 ), /* Offset= -88 (6) */
-/* 96 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 98 */
- 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */
-/* 100 */ NdrFcShort( 0x2 ), /* Offset= 2 (102) */
-/* 102 */
- 0x13, 0x0, /* FC_OP */
-/* 104 */ NdrFcShort( 0x2 ), /* Offset= 2 (106) */
-/* 106 */
- 0x1b, /* FC_CARRAY */
- 0x3, /* 3 */
-/* 108 */ NdrFcShort( 0x4 ), /* 4 */
-/* 110 */ 0x28, /* Corr desc: parameter, FC_LONG */
- 0x54, /* FC_DEREFERENCE */
-/* 112 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 114 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 116 */ 0x8, /* FC_LONG */
- 0x5b, /* FC_END */
-/* 118 */
- 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
-/* 120 */ 0x3, /* FC_SMALL */
- 0x5c, /* FC_PAD */
-/* 122 */
- 0x11, 0x4, /* FC_RP [alloced_on_stack] */
-/* 124 */ NdrFcShort( 0x2 ), /* Offset= 2 (126) */
-/* 126 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 128 */ NdrFcShort( 0x14 ), /* 20 */
-/* 130 */ NdrFcShort( 0x0 ), /* 0 */
-/* 132 */ NdrFcShort( 0x0 ), /* Offset= 0 (132) */
-/* 134 */ 0xd, /* FC_ENUM16 */
- 0x8, /* FC_LONG */
-/* 136 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 138 */ 0x8, /* FC_LONG */
- 0x5b, /* FC_END */
-
- 0x0
- }
- };
-
-static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ] =
- {
-
- {
- BSTR_UserSize
- ,BSTR_UserMarshal
- ,BSTR_UserUnmarshal
- ,BSTR_UserFree
- }
-
- };
-
-
-
-/* Object interface: IUnknown, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
-
-
-/* Object interface: IAccessibleTable2, ver. 0.0,
- GUID={0x6167f295,0x06f0,0x4cdd,{0xa1,0xfa,0x02,0xe2,0x51,0x53,0xd8,0x69}} */
-
-#pragma code_seg(".orpc")
-static const unsigned short IAccessibleTable2_FormatStringOffsetTable[] =
- {
- 0,
- 50,
- 88,
- 132,
- 170,
- 208,
- 246,
- 284,
- 322,
- 366,
- 410,
- 454,
- 498,
- 536,
- 580,
- 624,
- 662,
- 700,
- 738,
- 776
- };
-
-static const MIDL_STUBLESS_PROXY_INFO IAccessibleTable2_ProxyInfo =
- {
- &Object_StubDesc,
- AccessibleTable2__MIDL_ProcFormatString.Format,
- &IAccessibleTable2_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0
- };
-
-
-static const MIDL_SERVER_INFO IAccessibleTable2_ServerInfo =
- {
- &Object_StubDesc,
- 0,
- AccessibleTable2__MIDL_ProcFormatString.Format,
- &IAccessibleTable2_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0,
- 0};
-CINTERFACE_PROXY_VTABLE(23) _IAccessibleTable2ProxyVtbl =
-{
- &IAccessibleTable2_ProxyInfo,
- &IID_IAccessibleTable2,
- IUnknown_QueryInterface_Proxy,
- IUnknown_AddRef_Proxy,
- IUnknown_Release_Proxy ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::get_cellAt */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::get_caption */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::get_columnDescription */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::get_nColumns */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::get_nRows */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::get_nSelectedCells */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::get_nSelectedColumns */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::get_nSelectedRows */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::get_rowDescription */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::get_selectedCells */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::get_selectedColumns */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::get_selectedRows */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::get_summary */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::get_isColumnSelected */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::get_isRowSelected */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::selectRow */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::selectColumn */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::unselectRow */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::unselectColumn */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::get_modelChange */
-};
-
-const CInterfaceStubVtbl _IAccessibleTable2StubVtbl =
-{
- &IID_IAccessibleTable2,
- &IAccessibleTable2_ServerInfo,
- 23,
- 0, /* pure interpreted */
- CStdStubBuffer_METHODS
-};
-
-static const MIDL_STUB_DESC Object_StubDesc =
- {
- 0,
- NdrOleAllocate,
- NdrOleFree,
- 0,
- 0,
- 0,
- 0,
- 0,
- AccessibleTable2__MIDL_TypeFormatString.Format,
- 1, /* -error bounds_check flag */
- 0x50002, /* Ndr library version */
- 0,
- 0x700022b, /* MIDL Version 7.0.555 */
- 0,
- UserMarshalRoutines,
- 0, /* notify & notify_flag routine table */
- 0x1, /* MIDL flag */
- 0, /* cs routines */
- 0, /* proxy/server info */
- 0
- };
-
-const CInterfaceProxyVtbl * const _AccessibleTable2_ProxyVtblList[] =
-{
- ( CInterfaceProxyVtbl *) &_IAccessibleTable2ProxyVtbl,
- 0
-};
-
-const CInterfaceStubVtbl * const _AccessibleTable2_StubVtblList[] =
-{
- ( CInterfaceStubVtbl *) &_IAccessibleTable2StubVtbl,
- 0
-};
-
-PCInterfaceName const _AccessibleTable2_InterfaceNamesList[] =
-{
- "IAccessibleTable2",
- 0
-};
-
-
-#define _AccessibleTable2_CHECK_IID(n) IID_GENERIC_CHECK_IID( _AccessibleTable2, pIID, n)
-
-int __stdcall _AccessibleTable2_IID_Lookup( const IID * pIID, int * pIndex )
-{
-
- if(!_AccessibleTable2_CHECK_IID(0))
- {
- *pIndex = 0;
- return 1;
- }
-
- return 0;
-}
-
-const ExtendedProxyFileInfo AccessibleTable2_ProxyFileInfo =
-{
- (PCInterfaceProxyVtblList *) & _AccessibleTable2_ProxyVtblList,
- (PCInterfaceStubVtblList *) & _AccessibleTable2_StubVtblList,
- (const PCInterfaceName * ) & _AccessibleTable2_InterfaceNamesList,
- 0, /* no delegation */
- & _AccessibleTable2_IID_Lookup,
- 1,
- 2,
- 0, /* table of [async_uuid] interfaces */
- 0, /* Filler1 */
- 0, /* Filler2 */
- 0 /* Filler3 */
-};
-#if _MSC_VER >= 1200
-#pragma warning(pop)
-#endif
-
-
-#endif /* defined(_M_AMD64)*/
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleTableCell.h b/src/3rdparty/iaccessible2/generated/amd64/AccessibleTableCell.h
deleted file mode 100644
index 85648fcc7e..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleTableCell.h
+++ /dev/null
@@ -1,246 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:54:00 2012
- */
-/* Compiler settings for AccessibleTableCell.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-#ifndef COM_NO_WINDOWS_H
-#include "windows.h"
-#include "ole2.h"
-#endif /*COM_NO_WINDOWS_H*/
-
-#ifndef __AccessibleTableCell_h__
-#define __AccessibleTableCell_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifndef __IAccessibleTableCell_FWD_DEFINED__
-#define __IAccessibleTableCell_FWD_DEFINED__
-typedef interface IAccessibleTableCell IAccessibleTableCell;
-#endif /* __IAccessibleTableCell_FWD_DEFINED__ */
-
-
-/* header files for imported files */
-#include "objidl.h"
-#include "oaidl.h"
-#include "oleacc.h"
-#include "Accessible2.h"
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#ifndef __IAccessibleTableCell_INTERFACE_DEFINED__
-#define __IAccessibleTableCell_INTERFACE_DEFINED__
-
-/* interface IAccessibleTableCell */
-/* [uuid][object] */
-
-
-EXTERN_C const IID IID_IAccessibleTableCell;
-
-#if defined(__cplusplus) && !defined(CINTERFACE)
-
- MIDL_INTERFACE("594116B1-C99F-4847-AD06-0A7A86ECE645")
- IAccessibleTableCell : public IUnknown
- {
- public:
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnExtent(
- /* [retval][out] */ long *nColumnsSpanned) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnHeaderCells(
- /* [size_is][size_is][size_is][out] */ IUnknown ***cellAccessibles,
- /* [retval][out] */ long *nColumnHeaderCells) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnIndex(
- /* [retval][out] */ long *columnIndex) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowExtent(
- /* [retval][out] */ long *nRowsSpanned) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowHeaderCells(
- /* [size_is][size_is][size_is][out] */ IUnknown ***cellAccessibles,
- /* [retval][out] */ long *nRowHeaderCells) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowIndex(
- /* [retval][out] */ long *rowIndex) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isSelected(
- /* [retval][out] */ boolean *isSelected) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowColumnExtents(
- /* [out] */ long *row,
- /* [out] */ long *column,
- /* [out] */ long *rowExtents,
- /* [out] */ long *columnExtents,
- /* [retval][out] */ boolean *isSelected) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_table(
- /* [retval][out] */ IUnknown **table) = 0;
-
- };
-
-#else /* C style interface */
-
- typedef struct IAccessibleTableCellVtbl
- {
- BEGIN_INTERFACE
-
- HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
- IAccessibleTableCell * This,
- /* [in] */ REFIID riid,
- /* [annotation][iid_is][out] */
- __RPC__deref_out void **ppvObject);
-
- ULONG ( STDMETHODCALLTYPE *AddRef )(
- IAccessibleTableCell * This);
-
- ULONG ( STDMETHODCALLTYPE *Release )(
- IAccessibleTableCell * This);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnExtent )(
- IAccessibleTableCell * This,
- /* [retval][out] */ long *nColumnsSpanned);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnHeaderCells )(
- IAccessibleTableCell * This,
- /* [size_is][size_is][size_is][out] */ IUnknown ***cellAccessibles,
- /* [retval][out] */ long *nColumnHeaderCells);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnIndex )(
- IAccessibleTableCell * This,
- /* [retval][out] */ long *columnIndex);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowExtent )(
- IAccessibleTableCell * This,
- /* [retval][out] */ long *nRowsSpanned);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowHeaderCells )(
- IAccessibleTableCell * This,
- /* [size_is][size_is][size_is][out] */ IUnknown ***cellAccessibles,
- /* [retval][out] */ long *nRowHeaderCells);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowIndex )(
- IAccessibleTableCell * This,
- /* [retval][out] */ long *rowIndex);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isSelected )(
- IAccessibleTableCell * This,
- /* [retval][out] */ boolean *isSelected);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowColumnExtents )(
- IAccessibleTableCell * This,
- /* [out] */ long *row,
- /* [out] */ long *column,
- /* [out] */ long *rowExtents,
- /* [out] */ long *columnExtents,
- /* [retval][out] */ boolean *isSelected);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_table )(
- IAccessibleTableCell * This,
- /* [retval][out] */ IUnknown **table);
-
- END_INTERFACE
- } IAccessibleTableCellVtbl;
-
- interface IAccessibleTableCell
- {
- CONST_VTBL struct IAccessibleTableCellVtbl *lpVtbl;
- };
-
-
-
-#ifdef COBJMACROS
-
-
-#define IAccessibleTableCell_QueryInterface(This,riid,ppvObject) \
- ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
-
-#define IAccessibleTableCell_AddRef(This) \
- ( (This)->lpVtbl -> AddRef(This) )
-
-#define IAccessibleTableCell_Release(This) \
- ( (This)->lpVtbl -> Release(This) )
-
-
-#define IAccessibleTableCell_get_columnExtent(This,nColumnsSpanned) \
- ( (This)->lpVtbl -> get_columnExtent(This,nColumnsSpanned) )
-
-#define IAccessibleTableCell_get_columnHeaderCells(This,cellAccessibles,nColumnHeaderCells) \
- ( (This)->lpVtbl -> get_columnHeaderCells(This,cellAccessibles,nColumnHeaderCells) )
-
-#define IAccessibleTableCell_get_columnIndex(This,columnIndex) \
- ( (This)->lpVtbl -> get_columnIndex(This,columnIndex) )
-
-#define IAccessibleTableCell_get_rowExtent(This,nRowsSpanned) \
- ( (This)->lpVtbl -> get_rowExtent(This,nRowsSpanned) )
-
-#define IAccessibleTableCell_get_rowHeaderCells(This,cellAccessibles,nRowHeaderCells) \
- ( (This)->lpVtbl -> get_rowHeaderCells(This,cellAccessibles,nRowHeaderCells) )
-
-#define IAccessibleTableCell_get_rowIndex(This,rowIndex) \
- ( (This)->lpVtbl -> get_rowIndex(This,rowIndex) )
-
-#define IAccessibleTableCell_get_isSelected(This,isSelected) \
- ( (This)->lpVtbl -> get_isSelected(This,isSelected) )
-
-#define IAccessibleTableCell_get_rowColumnExtents(This,row,column,rowExtents,columnExtents,isSelected) \
- ( (This)->lpVtbl -> get_rowColumnExtents(This,row,column,rowExtents,columnExtents,isSelected) )
-
-#define IAccessibleTableCell_get_table(This,table) \
- ( (This)->lpVtbl -> get_table(This,table) )
-
-#endif /* COBJMACROS */
-
-
-#endif /* C style interface */
-
-
-
-
-#endif /* __IAccessibleTableCell_INTERFACE_DEFINED__ */
-
-
-/* Additional Prototypes for ALL interfaces */
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleTableCell_i.c b/src/3rdparty/iaccessible2/generated/amd64/AccessibleTableCell_i.c
deleted file mode 100644
index fa94037d95..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleTableCell_i.c
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
-
-/* link this file in with the server and any clients */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:54:00 2012
- */
-/* Compiler settings for AccessibleTableCell.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#include <rpc.h>
-#include <rpcndr.h>
-
-#ifdef _MIDL_USE_GUIDDEF_
-
-#ifndef INITGUID
-#define INITGUID
-#include <guiddef.h>
-#undef INITGUID
-#else
-#include <guiddef.h>
-#endif
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
-
-#else // !_MIDL_USE_GUIDDEF_
-
-#ifndef __IID_DEFINED__
-#define __IID_DEFINED__
-
-typedef struct _IID
-{
- unsigned long x;
- unsigned short s1;
- unsigned short s2;
- unsigned char c[8];
-} IID;
-
-#endif // __IID_DEFINED__
-
-#ifndef CLSID_DEFINED
-#define CLSID_DEFINED
-typedef IID CLSID;
-#endif // CLSID_DEFINED
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
-
-#endif !_MIDL_USE_GUIDDEF_
-
-MIDL_DEFINE_GUID(IID, IID_IAccessibleTableCell,0x594116B1,0xC99F,0x4847,0xAD,0x06,0x0A,0x7A,0x86,0xEC,0xE6,0x45);
-
-#undef MIDL_DEFINE_GUID
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleTableCell_p.c b/src/3rdparty/iaccessible2/generated/amd64/AccessibleTableCell_p.c
deleted file mode 100644
index bf18e659b6..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleTableCell_p.c
+++ /dev/null
@@ -1,634 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the proxy stub code */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:54:00 2012
- */
-/* Compiler settings for AccessibleTableCell.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#if defined(_M_AMD64)
-
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-#if _MSC_VER >= 1200
-#pragma warning(push)
-#endif
-
-#pragma warning( disable: 4211 ) /* redefine extern to static */
-#pragma warning( disable: 4232 ) /* dllimport identity*/
-#pragma warning( disable: 4024 ) /* array to pointer mapping*/
-#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */
-
-#define USE_STUBLESS_PROXY
-
-
-/* verify that the <rpcproxy.h> version is high enough to compile this file*/
-#ifndef __REDQ_RPCPROXY_H_VERSION__
-#define __REQUIRED_RPCPROXY_H_VERSION__ 475
-#endif
-
-
-#include "rpcproxy.h"
-#ifndef __RPCPROXY_H_VERSION__
-#error this stub requires an updated version of <rpcproxy.h>
-#endif /* __RPCPROXY_H_VERSION__ */
-
-
-#include "AccessibleTableCell.h"
-
-#define TYPE_FORMAT_STRING_SIZE 63
-#define PROC_FORMAT_STRING_SIZE 379
-#define EXPR_FORMAT_STRING_SIZE 1
-#define TRANSMIT_AS_TABLE_SIZE 0
-#define WIRE_MARSHAL_TABLE_SIZE 0
-
-typedef struct _AccessibleTableCell_MIDL_TYPE_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
- } AccessibleTableCell_MIDL_TYPE_FORMAT_STRING;
-
-typedef struct _AccessibleTableCell_MIDL_PROC_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
- } AccessibleTableCell_MIDL_PROC_FORMAT_STRING;
-
-typedef struct _AccessibleTableCell_MIDL_EXPR_FORMAT_STRING
- {
- long Pad;
- unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
- } AccessibleTableCell_MIDL_EXPR_FORMAT_STRING;
-
-
-static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
-{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
-
-
-extern const AccessibleTableCell_MIDL_TYPE_FORMAT_STRING AccessibleTableCell__MIDL_TypeFormatString;
-extern const AccessibleTableCell_MIDL_PROC_FORMAT_STRING AccessibleTableCell__MIDL_ProcFormatString;
-extern const AccessibleTableCell_MIDL_EXPR_FORMAT_STRING AccessibleTableCell__MIDL_ExprFormatString;
-
-
-extern const MIDL_STUB_DESC Object_StubDesc;
-
-
-extern const MIDL_SERVER_INFO IAccessibleTableCell_ServerInfo;
-extern const MIDL_STUBLESS_PROXY_INFO IAccessibleTableCell_ProxyInfo;
-
-
-
-#if !defined(__RPC_WIN64__)
-#error Invalid build platform for this stub.
-#endif
-
-static const AccessibleTableCell_MIDL_PROC_FORMAT_STRING AccessibleTableCell__MIDL_ProcFormatString =
- {
- 0,
- {
-
- /* Procedure get_columnExtent */
-
- 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 2 */ NdrFcLong( 0x0 ), /* 0 */
-/* 6 */ NdrFcShort( 0x3 ), /* 3 */
-/* 8 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 10 */ NdrFcShort( 0x0 ), /* 0 */
-/* 12 */ NdrFcShort( 0x24 ), /* 36 */
-/* 14 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 16 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 18 */ NdrFcShort( 0x0 ), /* 0 */
-/* 20 */ NdrFcShort( 0x0 ), /* 0 */
-/* 22 */ NdrFcShort( 0x0 ), /* 0 */
-/* 24 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter nColumnsSpanned */
-
-/* 26 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 28 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 30 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 32 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 34 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 36 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_columnHeaderCells */
-
-/* 38 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 40 */ NdrFcLong( 0x0 ), /* 0 */
-/* 44 */ NdrFcShort( 0x4 ), /* 4 */
-/* 46 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 48 */ NdrFcShort( 0x0 ), /* 0 */
-/* 50 */ NdrFcShort( 0x24 ), /* 36 */
-/* 52 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 54 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 56 */ NdrFcShort( 0x1 ), /* 1 */
-/* 58 */ NdrFcShort( 0x0 ), /* 0 */
-/* 60 */ NdrFcShort( 0x0 ), /* 0 */
-/* 62 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter cellAccessibles */
-
-/* 64 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
-/* 66 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 68 */ NdrFcShort( 0x6 ), /* Type Offset=6 */
-
- /* Parameter nColumnHeaderCells */
-
-/* 70 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 72 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 74 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 76 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 78 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 80 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_columnIndex */
-
-/* 82 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 84 */ NdrFcLong( 0x0 ), /* 0 */
-/* 88 */ NdrFcShort( 0x5 ), /* 5 */
-/* 90 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 92 */ NdrFcShort( 0x0 ), /* 0 */
-/* 94 */ NdrFcShort( 0x24 ), /* 36 */
-/* 96 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 98 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 100 */ NdrFcShort( 0x0 ), /* 0 */
-/* 102 */ NdrFcShort( 0x0 ), /* 0 */
-/* 104 */ NdrFcShort( 0x0 ), /* 0 */
-/* 106 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter columnIndex */
-
-/* 108 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 110 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 112 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 114 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 116 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 118 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_rowExtent */
-
-/* 120 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 122 */ NdrFcLong( 0x0 ), /* 0 */
-/* 126 */ NdrFcShort( 0x6 ), /* 6 */
-/* 128 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 130 */ NdrFcShort( 0x0 ), /* 0 */
-/* 132 */ NdrFcShort( 0x24 ), /* 36 */
-/* 134 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 136 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 138 */ NdrFcShort( 0x0 ), /* 0 */
-/* 140 */ NdrFcShort( 0x0 ), /* 0 */
-/* 142 */ NdrFcShort( 0x0 ), /* 0 */
-/* 144 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter nRowsSpanned */
-
-/* 146 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 148 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 150 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 152 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 154 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 156 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_rowHeaderCells */
-
-/* 158 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 160 */ NdrFcLong( 0x0 ), /* 0 */
-/* 164 */ NdrFcShort( 0x7 ), /* 7 */
-/* 166 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 168 */ NdrFcShort( 0x0 ), /* 0 */
-/* 170 */ NdrFcShort( 0x24 ), /* 36 */
-/* 172 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 174 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 176 */ NdrFcShort( 0x1 ), /* 1 */
-/* 178 */ NdrFcShort( 0x0 ), /* 0 */
-/* 180 */ NdrFcShort( 0x0 ), /* 0 */
-/* 182 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter cellAccessibles */
-
-/* 184 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
-/* 186 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 188 */ NdrFcShort( 0x6 ), /* Type Offset=6 */
-
- /* Parameter nRowHeaderCells */
-
-/* 190 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 192 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 194 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 196 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 198 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 200 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_rowIndex */
-
-/* 202 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 204 */ NdrFcLong( 0x0 ), /* 0 */
-/* 208 */ NdrFcShort( 0x8 ), /* 8 */
-/* 210 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 212 */ NdrFcShort( 0x0 ), /* 0 */
-/* 214 */ NdrFcShort( 0x24 ), /* 36 */
-/* 216 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 218 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 220 */ NdrFcShort( 0x0 ), /* 0 */
-/* 222 */ NdrFcShort( 0x0 ), /* 0 */
-/* 224 */ NdrFcShort( 0x0 ), /* 0 */
-/* 226 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter rowIndex */
-
-/* 228 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 230 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 232 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 234 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 236 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 238 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_isSelected */
-
-/* 240 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 242 */ NdrFcLong( 0x0 ), /* 0 */
-/* 246 */ NdrFcShort( 0x9 ), /* 9 */
-/* 248 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 250 */ NdrFcShort( 0x0 ), /* 0 */
-/* 252 */ NdrFcShort( 0x21 ), /* 33 */
-/* 254 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 256 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 258 */ NdrFcShort( 0x0 ), /* 0 */
-/* 260 */ NdrFcShort( 0x0 ), /* 0 */
-/* 262 */ NdrFcShort( 0x0 ), /* 0 */
-/* 264 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter isSelected */
-
-/* 266 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 268 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 270 */ 0x3, /* FC_SMALL */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 272 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 274 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 276 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_rowColumnExtents */
-
-/* 278 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 280 */ NdrFcLong( 0x0 ), /* 0 */
-/* 284 */ NdrFcShort( 0xa ), /* 10 */
-/* 286 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */
-/* 288 */ NdrFcShort( 0x0 ), /* 0 */
-/* 290 */ NdrFcShort( 0x91 ), /* 145 */
-/* 292 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x6, /* 6 */
-/* 294 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 296 */ NdrFcShort( 0x0 ), /* 0 */
-/* 298 */ NdrFcShort( 0x0 ), /* 0 */
-/* 300 */ NdrFcShort( 0x0 ), /* 0 */
-/* 302 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter row */
-
-/* 304 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 306 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 308 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter column */
-
-/* 310 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 312 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 314 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter rowExtents */
-
-/* 316 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 318 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 320 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter columnExtents */
-
-/* 322 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 324 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 326 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter isSelected */
-
-/* 328 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 330 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
-/* 332 */ 0x3, /* FC_SMALL */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 334 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 336 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */
-/* 338 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_table */
-
-/* 340 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 342 */ NdrFcLong( 0x0 ), /* 0 */
-/* 346 */ NdrFcShort( 0xb ), /* 11 */
-/* 348 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 350 */ NdrFcShort( 0x0 ), /* 0 */
-/* 352 */ NdrFcShort( 0x8 ), /* 8 */
-/* 354 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 356 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 358 */ NdrFcShort( 0x0 ), /* 0 */
-/* 360 */ NdrFcShort( 0x0 ), /* 0 */
-/* 362 */ NdrFcShort( 0x0 ), /* 0 */
-/* 364 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter table */
-
-/* 366 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
-/* 368 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 370 */ NdrFcShort( 0x3a ), /* Type Offset=58 */
-
- /* Return value */
-
-/* 372 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 374 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 376 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- 0x0
- }
- };
-
-static const AccessibleTableCell_MIDL_TYPE_FORMAT_STRING AccessibleTableCell__MIDL_TypeFormatString =
- {
- 0,
- {
- NdrFcShort( 0x0 ), /* 0 */
-/* 2 */
- 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
-/* 4 */ 0x8, /* FC_LONG */
- 0x5c, /* FC_PAD */
-/* 6 */
- 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */
-/* 8 */ NdrFcShort( 0x2 ), /* Offset= 2 (10) */
-/* 10 */
- 0x13, 0x0, /* FC_OP */
-/* 12 */ NdrFcShort( 0x14 ), /* Offset= 20 (32) */
-/* 14 */
- 0x2f, /* FC_IP */
- 0x5a, /* FC_CONSTANT_IID */
-/* 16 */ NdrFcLong( 0x0 ), /* 0 */
-/* 20 */ NdrFcShort( 0x0 ), /* 0 */
-/* 22 */ NdrFcShort( 0x0 ), /* 0 */
-/* 24 */ 0xc0, /* 192 */
- 0x0, /* 0 */
-/* 26 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 28 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 30 */ 0x0, /* 0 */
- 0x46, /* 70 */
-/* 32 */
- 0x21, /* FC_BOGUS_ARRAY */
- 0x3, /* 3 */
-/* 34 */ NdrFcShort( 0x0 ), /* 0 */
-/* 36 */ 0x28, /* Corr desc: parameter, FC_LONG */
- 0x54, /* FC_DEREFERENCE */
-/* 38 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 40 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 42 */ NdrFcLong( 0xffffffff ), /* -1 */
-/* 46 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 48 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 50 */ NdrFcShort( 0xffdc ), /* Offset= -36 (14) */
-/* 52 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 54 */
- 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
-/* 56 */ 0x3, /* FC_SMALL */
- 0x5c, /* FC_PAD */
-/* 58 */
- 0x11, 0x10, /* FC_RP [pointer_deref] */
-/* 60 */ NdrFcShort( 0xffd2 ), /* Offset= -46 (14) */
-
- 0x0
- }
- };
-
-
-/* Object interface: IUnknown, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
-
-
-/* Object interface: IAccessibleTableCell, ver. 0.0,
- GUID={0x594116B1,0xC99F,0x4847,{0xAD,0x06,0x0A,0x7A,0x86,0xEC,0xE6,0x45}} */
-
-#pragma code_seg(".orpc")
-static const unsigned short IAccessibleTableCell_FormatStringOffsetTable[] =
- {
- 0,
- 38,
- 82,
- 120,
- 158,
- 202,
- 240,
- 278,
- 340
- };
-
-static const MIDL_STUBLESS_PROXY_INFO IAccessibleTableCell_ProxyInfo =
- {
- &Object_StubDesc,
- AccessibleTableCell__MIDL_ProcFormatString.Format,
- &IAccessibleTableCell_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0
- };
-
-
-static const MIDL_SERVER_INFO IAccessibleTableCell_ServerInfo =
- {
- &Object_StubDesc,
- 0,
- AccessibleTableCell__MIDL_ProcFormatString.Format,
- &IAccessibleTableCell_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0,
- 0};
-CINTERFACE_PROXY_VTABLE(12) _IAccessibleTableCellProxyVtbl =
-{
- &IAccessibleTableCell_ProxyInfo,
- &IID_IAccessibleTableCell,
- IUnknown_QueryInterface_Proxy,
- IUnknown_AddRef_Proxy,
- IUnknown_Release_Proxy ,
- (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_columnExtent */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_columnHeaderCells */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_columnIndex */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_rowExtent */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_rowHeaderCells */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_rowIndex */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_isSelected */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_rowColumnExtents */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_table */
-};
-
-const CInterfaceStubVtbl _IAccessibleTableCellStubVtbl =
-{
- &IID_IAccessibleTableCell,
- &IAccessibleTableCell_ServerInfo,
- 12,
- 0, /* pure interpreted */
- CStdStubBuffer_METHODS
-};
-
-static const MIDL_STUB_DESC Object_StubDesc =
- {
- 0,
- NdrOleAllocate,
- NdrOleFree,
- 0,
- 0,
- 0,
- 0,
- 0,
- AccessibleTableCell__MIDL_TypeFormatString.Format,
- 1, /* -error bounds_check flag */
- 0x50002, /* Ndr library version */
- 0,
- 0x700022b, /* MIDL Version 7.0.555 */
- 0,
- 0,
- 0, /* notify & notify_flag routine table */
- 0x1, /* MIDL flag */
- 0, /* cs routines */
- 0, /* proxy/server info */
- 0
- };
-
-const CInterfaceProxyVtbl * const _AccessibleTableCell_ProxyVtblList[] =
-{
- ( CInterfaceProxyVtbl *) &_IAccessibleTableCellProxyVtbl,
- 0
-};
-
-const CInterfaceStubVtbl * const _AccessibleTableCell_StubVtblList[] =
-{
- ( CInterfaceStubVtbl *) &_IAccessibleTableCellStubVtbl,
- 0
-};
-
-PCInterfaceName const _AccessibleTableCell_InterfaceNamesList[] =
-{
- "IAccessibleTableCell",
- 0
-};
-
-
-#define _AccessibleTableCell_CHECK_IID(n) IID_GENERIC_CHECK_IID( _AccessibleTableCell, pIID, n)
-
-int __stdcall _AccessibleTableCell_IID_Lookup( const IID * pIID, int * pIndex )
-{
-
- if(!_AccessibleTableCell_CHECK_IID(0))
- {
- *pIndex = 0;
- return 1;
- }
-
- return 0;
-}
-
-const ExtendedProxyFileInfo AccessibleTableCell_ProxyFileInfo =
-{
- (PCInterfaceProxyVtblList *) & _AccessibleTableCell_ProxyVtblList,
- (PCInterfaceStubVtblList *) & _AccessibleTableCell_StubVtblList,
- (const PCInterfaceName * ) & _AccessibleTableCell_InterfaceNamesList,
- 0, /* no delegation */
- & _AccessibleTableCell_IID_Lookup,
- 1,
- 2,
- 0, /* table of [async_uuid] interfaces */
- 0, /* Filler1 */
- 0, /* Filler2 */
- 0 /* Filler3 */
-};
-#if _MSC_VER >= 1200
-#pragma warning(pop)
-#endif
-
-
-#endif /* defined(_M_AMD64)*/
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleTable_i.c b/src/3rdparty/iaccessible2/generated/amd64/AccessibleTable_i.c
deleted file mode 100644
index dd4e1fe983..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleTable_i.c
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
-
-/* link this file in with the server and any clients */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:59 2012
- */
-/* Compiler settings for AccessibleTable.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#include <rpc.h>
-#include <rpcndr.h>
-
-#ifdef _MIDL_USE_GUIDDEF_
-
-#ifndef INITGUID
-#define INITGUID
-#include <guiddef.h>
-#undef INITGUID
-#else
-#include <guiddef.h>
-#endif
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
-
-#else // !_MIDL_USE_GUIDDEF_
-
-#ifndef __IID_DEFINED__
-#define __IID_DEFINED__
-
-typedef struct _IID
-{
- unsigned long x;
- unsigned short s1;
- unsigned short s2;
- unsigned char c[8];
-} IID;
-
-#endif // __IID_DEFINED__
-
-#ifndef CLSID_DEFINED
-#define CLSID_DEFINED
-typedef IID CLSID;
-#endif // CLSID_DEFINED
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
-
-#endif !_MIDL_USE_GUIDDEF_
-
-MIDL_DEFINE_GUID(IID, IID_IAccessibleTable,0x35AD8070,0xC20C,0x4fb4,0xB0,0x94,0xF4,0xF7,0x27,0x5D,0xD4,0x69);
-
-#undef MIDL_DEFINE_GUID
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleTable_p.c b/src/3rdparty/iaccessible2/generated/amd64/AccessibleTable_p.c
deleted file mode 100644
index cca4e376c8..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleTable_p.c
+++ /dev/null
@@ -1,1543 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the proxy stub code */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:59 2012
- */
-/* Compiler settings for AccessibleTable.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#if defined(_M_AMD64)
-
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-#if _MSC_VER >= 1200
-#pragma warning(push)
-#endif
-
-#pragma warning( disable: 4211 ) /* redefine extern to static */
-#pragma warning( disable: 4232 ) /* dllimport identity*/
-#pragma warning( disable: 4024 ) /* array to pointer mapping*/
-#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */
-
-#define USE_STUBLESS_PROXY
-
-
-/* verify that the <rpcproxy.h> version is high enough to compile this file*/
-#ifndef __REDQ_RPCPROXY_H_VERSION__
-#define __REQUIRED_RPCPROXY_H_VERSION__ 475
-#endif
-
-
-#include "rpcproxy.h"
-#ifndef __RPCPROXY_H_VERSION__
-#error this stub requires an updated version of <rpcproxy.h>
-#endif /* __RPCPROXY_H_VERSION__ */
-
-
-#include "AccessibleTable.h"
-
-#define TYPE_FORMAT_STRING_SIZE 139
-#define PROC_FORMAT_STRING_SIZE 1277
-#define EXPR_FORMAT_STRING_SIZE 1
-#define TRANSMIT_AS_TABLE_SIZE 0
-#define WIRE_MARSHAL_TABLE_SIZE 1
-
-typedef struct _AccessibleTable_MIDL_TYPE_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
- } AccessibleTable_MIDL_TYPE_FORMAT_STRING;
-
-typedef struct _AccessibleTable_MIDL_PROC_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
- } AccessibleTable_MIDL_PROC_FORMAT_STRING;
-
-typedef struct _AccessibleTable_MIDL_EXPR_FORMAT_STRING
- {
- long Pad;
- unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
- } AccessibleTable_MIDL_EXPR_FORMAT_STRING;
-
-
-static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
-{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
-
-
-extern const AccessibleTable_MIDL_TYPE_FORMAT_STRING AccessibleTable__MIDL_TypeFormatString;
-extern const AccessibleTable_MIDL_PROC_FORMAT_STRING AccessibleTable__MIDL_ProcFormatString;
-extern const AccessibleTable_MIDL_EXPR_FORMAT_STRING AccessibleTable__MIDL_ExprFormatString;
-
-
-extern const MIDL_STUB_DESC Object_StubDesc;
-
-
-extern const MIDL_SERVER_INFO IAccessibleTable_ServerInfo;
-extern const MIDL_STUBLESS_PROXY_INFO IAccessibleTable_ProxyInfo;
-
-
-extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ];
-
-#if !defined(__RPC_WIN64__)
-#error Invalid build platform for this stub.
-#endif
-
-static const AccessibleTable_MIDL_PROC_FORMAT_STRING AccessibleTable__MIDL_ProcFormatString =
- {
- 0,
- {
-
- /* Procedure get_accessibleAt */
-
- 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 2 */ NdrFcLong( 0x0 ), /* 0 */
-/* 6 */ NdrFcShort( 0x3 ), /* 3 */
-/* 8 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
-/* 10 */ NdrFcShort( 0x10 ), /* 16 */
-/* 12 */ NdrFcShort( 0x8 ), /* 8 */
-/* 14 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x4, /* 4 */
-/* 16 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 18 */ NdrFcShort( 0x0 ), /* 0 */
-/* 20 */ NdrFcShort( 0x0 ), /* 0 */
-/* 22 */ NdrFcShort( 0x0 ), /* 0 */
-/* 24 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter row */
-
-/* 26 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 28 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 30 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter column */
-
-/* 32 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 34 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 36 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter accessible */
-
-/* 38 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
-/* 40 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 42 */ NdrFcShort( 0x2 ), /* Type Offset=2 */
-
- /* Return value */
-
-/* 44 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 46 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 48 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_caption */
-
-/* 50 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 52 */ NdrFcLong( 0x0 ), /* 0 */
-/* 56 */ NdrFcShort( 0x4 ), /* 4 */
-/* 58 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 60 */ NdrFcShort( 0x0 ), /* 0 */
-/* 62 */ NdrFcShort( 0x8 ), /* 8 */
-/* 64 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 66 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 68 */ NdrFcShort( 0x0 ), /* 0 */
-/* 70 */ NdrFcShort( 0x0 ), /* 0 */
-/* 72 */ NdrFcShort( 0x0 ), /* 0 */
-/* 74 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter accessible */
-
-/* 76 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
-/* 78 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 80 */ NdrFcShort( 0x2 ), /* Type Offset=2 */
-
- /* Return value */
-
-/* 82 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 84 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 86 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_childIndex */
-
-/* 88 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 90 */ NdrFcLong( 0x0 ), /* 0 */
-/* 94 */ NdrFcShort( 0x5 ), /* 5 */
-/* 96 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
-/* 98 */ NdrFcShort( 0x10 ), /* 16 */
-/* 100 */ NdrFcShort( 0x24 ), /* 36 */
-/* 102 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x4, /* 4 */
-/* 104 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 106 */ NdrFcShort( 0x0 ), /* 0 */
-/* 108 */ NdrFcShort( 0x0 ), /* 0 */
-/* 110 */ NdrFcShort( 0x0 ), /* 0 */
-/* 112 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter rowIndex */
-
-/* 114 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 116 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 118 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter columnIndex */
-
-/* 120 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 122 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 124 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter cellIndex */
-
-/* 126 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 128 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 130 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 132 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 134 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 136 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_columnDescription */
-
-/* 138 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 140 */ NdrFcLong( 0x0 ), /* 0 */
-/* 144 */ NdrFcShort( 0x6 ), /* 6 */
-/* 146 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 148 */ NdrFcShort( 0x8 ), /* 8 */
-/* 150 */ NdrFcShort( 0x8 ), /* 8 */
-/* 152 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 154 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 156 */ NdrFcShort( 0x1 ), /* 1 */
-/* 158 */ NdrFcShort( 0x0 ), /* 0 */
-/* 160 */ NdrFcShort( 0x0 ), /* 0 */
-/* 162 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter column */
-
-/* 164 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 166 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 168 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter description */
-
-/* 170 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 172 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 174 */ NdrFcShort( 0x3a ), /* Type Offset=58 */
-
- /* Return value */
-
-/* 176 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 178 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 180 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_columnExtentAt */
-
-/* 182 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 184 */ NdrFcLong( 0x0 ), /* 0 */
-/* 188 */ NdrFcShort( 0x7 ), /* 7 */
-/* 190 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
-/* 192 */ NdrFcShort( 0x10 ), /* 16 */
-/* 194 */ NdrFcShort( 0x24 ), /* 36 */
-/* 196 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x4, /* 4 */
-/* 198 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 200 */ NdrFcShort( 0x0 ), /* 0 */
-/* 202 */ NdrFcShort( 0x0 ), /* 0 */
-/* 204 */ NdrFcShort( 0x0 ), /* 0 */
-/* 206 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter row */
-
-/* 208 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 210 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 212 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter column */
-
-/* 214 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 216 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 218 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter nColumnsSpanned */
-
-/* 220 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 222 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 224 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 226 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 228 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 230 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_columnHeader */
-
-/* 232 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 234 */ NdrFcLong( 0x0 ), /* 0 */
-/* 238 */ NdrFcShort( 0x8 ), /* 8 */
-/* 240 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 242 */ NdrFcShort( 0x0 ), /* 0 */
-/* 244 */ NdrFcShort( 0x24 ), /* 36 */
-/* 246 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 248 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 250 */ NdrFcShort( 0x0 ), /* 0 */
-/* 252 */ NdrFcShort( 0x0 ), /* 0 */
-/* 254 */ NdrFcShort( 0x0 ), /* 0 */
-/* 256 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter accessibleTable */
-
-/* 258 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
-/* 260 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 262 */ NdrFcShort( 0x44 ), /* Type Offset=68 */
-
- /* Parameter startingRowIndex */
-
-/* 264 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 266 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 268 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 270 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 272 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 274 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_columnIndex */
-
-/* 276 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 278 */ NdrFcLong( 0x0 ), /* 0 */
-/* 282 */ NdrFcShort( 0x9 ), /* 9 */
-/* 284 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 286 */ NdrFcShort( 0x8 ), /* 8 */
-/* 288 */ NdrFcShort( 0x24 ), /* 36 */
-/* 290 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x3, /* 3 */
-/* 292 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 294 */ NdrFcShort( 0x0 ), /* 0 */
-/* 296 */ NdrFcShort( 0x0 ), /* 0 */
-/* 298 */ NdrFcShort( 0x0 ), /* 0 */
-/* 300 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter cellIndex */
-
-/* 302 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 304 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 306 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter columnIndex */
-
-/* 308 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 310 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 312 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 314 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 316 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 318 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_nColumns */
-
-/* 320 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 322 */ NdrFcLong( 0x0 ), /* 0 */
-/* 326 */ NdrFcShort( 0xa ), /* 10 */
-/* 328 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 330 */ NdrFcShort( 0x0 ), /* 0 */
-/* 332 */ NdrFcShort( 0x24 ), /* 36 */
-/* 334 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 336 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 338 */ NdrFcShort( 0x0 ), /* 0 */
-/* 340 */ NdrFcShort( 0x0 ), /* 0 */
-/* 342 */ NdrFcShort( 0x0 ), /* 0 */
-/* 344 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter columnCount */
-
-/* 346 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 348 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 350 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 352 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 354 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 356 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_nRows */
-
-/* 358 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 360 */ NdrFcLong( 0x0 ), /* 0 */
-/* 364 */ NdrFcShort( 0xb ), /* 11 */
-/* 366 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 368 */ NdrFcShort( 0x0 ), /* 0 */
-/* 370 */ NdrFcShort( 0x24 ), /* 36 */
-/* 372 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 374 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 376 */ NdrFcShort( 0x0 ), /* 0 */
-/* 378 */ NdrFcShort( 0x0 ), /* 0 */
-/* 380 */ NdrFcShort( 0x0 ), /* 0 */
-/* 382 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter rowCount */
-
-/* 384 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 386 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 388 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 390 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 392 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 394 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_nSelectedChildren */
-
-/* 396 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 398 */ NdrFcLong( 0x0 ), /* 0 */
-/* 402 */ NdrFcShort( 0xc ), /* 12 */
-/* 404 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 406 */ NdrFcShort( 0x0 ), /* 0 */
-/* 408 */ NdrFcShort( 0x24 ), /* 36 */
-/* 410 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 412 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 414 */ NdrFcShort( 0x0 ), /* 0 */
-/* 416 */ NdrFcShort( 0x0 ), /* 0 */
-/* 418 */ NdrFcShort( 0x0 ), /* 0 */
-/* 420 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter cellCount */
-
-/* 422 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 424 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 426 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 428 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 430 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 432 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_nSelectedColumns */
-
-/* 434 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 436 */ NdrFcLong( 0x0 ), /* 0 */
-/* 440 */ NdrFcShort( 0xd ), /* 13 */
-/* 442 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 444 */ NdrFcShort( 0x0 ), /* 0 */
-/* 446 */ NdrFcShort( 0x24 ), /* 36 */
-/* 448 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 450 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 452 */ NdrFcShort( 0x0 ), /* 0 */
-/* 454 */ NdrFcShort( 0x0 ), /* 0 */
-/* 456 */ NdrFcShort( 0x0 ), /* 0 */
-/* 458 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter columnCount */
-
-/* 460 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 462 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 464 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 466 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 468 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 470 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_nSelectedRows */
-
-/* 472 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 474 */ NdrFcLong( 0x0 ), /* 0 */
-/* 478 */ NdrFcShort( 0xe ), /* 14 */
-/* 480 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 482 */ NdrFcShort( 0x0 ), /* 0 */
-/* 484 */ NdrFcShort( 0x24 ), /* 36 */
-/* 486 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 488 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 490 */ NdrFcShort( 0x0 ), /* 0 */
-/* 492 */ NdrFcShort( 0x0 ), /* 0 */
-/* 494 */ NdrFcShort( 0x0 ), /* 0 */
-/* 496 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter rowCount */
-
-/* 498 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 500 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 502 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 504 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 506 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 508 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_rowDescription */
-
-/* 510 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 512 */ NdrFcLong( 0x0 ), /* 0 */
-/* 516 */ NdrFcShort( 0xf ), /* 15 */
-/* 518 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 520 */ NdrFcShort( 0x8 ), /* 8 */
-/* 522 */ NdrFcShort( 0x8 ), /* 8 */
-/* 524 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 526 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 528 */ NdrFcShort( 0x1 ), /* 1 */
-/* 530 */ NdrFcShort( 0x0 ), /* 0 */
-/* 532 */ NdrFcShort( 0x0 ), /* 0 */
-/* 534 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter row */
-
-/* 536 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 538 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 540 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter description */
-
-/* 542 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 544 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 546 */ NdrFcShort( 0x3a ), /* Type Offset=58 */
-
- /* Return value */
-
-/* 548 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 550 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 552 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_rowExtentAt */
-
-/* 554 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 556 */ NdrFcLong( 0x0 ), /* 0 */
-/* 560 */ NdrFcShort( 0x10 ), /* 16 */
-/* 562 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
-/* 564 */ NdrFcShort( 0x10 ), /* 16 */
-/* 566 */ NdrFcShort( 0x24 ), /* 36 */
-/* 568 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x4, /* 4 */
-/* 570 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 572 */ NdrFcShort( 0x0 ), /* 0 */
-/* 574 */ NdrFcShort( 0x0 ), /* 0 */
-/* 576 */ NdrFcShort( 0x0 ), /* 0 */
-/* 578 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter row */
-
-/* 580 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 582 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 584 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter column */
-
-/* 586 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 588 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 590 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter nRowsSpanned */
-
-/* 592 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 594 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 596 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 598 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 600 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 602 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_rowHeader */
-
-/* 604 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 606 */ NdrFcLong( 0x0 ), /* 0 */
-/* 610 */ NdrFcShort( 0x11 ), /* 17 */
-/* 612 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 614 */ NdrFcShort( 0x0 ), /* 0 */
-/* 616 */ NdrFcShort( 0x24 ), /* 36 */
-/* 618 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 620 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 622 */ NdrFcShort( 0x0 ), /* 0 */
-/* 624 */ NdrFcShort( 0x0 ), /* 0 */
-/* 626 */ NdrFcShort( 0x0 ), /* 0 */
-/* 628 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter accessibleTable */
-
-/* 630 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
-/* 632 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 634 */ NdrFcShort( 0x44 ), /* Type Offset=68 */
-
- /* Parameter startingColumnIndex */
-
-/* 636 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 638 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 640 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 642 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 644 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 646 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_rowIndex */
-
-/* 648 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 650 */ NdrFcLong( 0x0 ), /* 0 */
-/* 654 */ NdrFcShort( 0x12 ), /* 18 */
-/* 656 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 658 */ NdrFcShort( 0x8 ), /* 8 */
-/* 660 */ NdrFcShort( 0x24 ), /* 36 */
-/* 662 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x3, /* 3 */
-/* 664 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 666 */ NdrFcShort( 0x0 ), /* 0 */
-/* 668 */ NdrFcShort( 0x0 ), /* 0 */
-/* 670 */ NdrFcShort( 0x0 ), /* 0 */
-/* 672 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter cellIndex */
-
-/* 674 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 676 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 678 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter rowIndex */
-
-/* 680 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 682 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 684 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 686 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 688 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 690 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_selectedChildren */
-
-/* 692 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 694 */ NdrFcLong( 0x0 ), /* 0 */
-/* 698 */ NdrFcShort( 0x13 ), /* 19 */
-/* 700 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
-/* 702 */ NdrFcShort( 0x8 ), /* 8 */
-/* 704 */ NdrFcShort( 0x24 ), /* 36 */
-/* 706 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x4, /* 4 */
-/* 708 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 710 */ NdrFcShort( 0x1 ), /* 1 */
-/* 712 */ NdrFcShort( 0x0 ), /* 0 */
-/* 714 */ NdrFcShort( 0x0 ), /* 0 */
-/* 716 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter maxChildren */
-
-/* 718 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 720 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 722 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter children */
-
-/* 724 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
-/* 726 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 728 */ NdrFcShort( 0x5a ), /* Type Offset=90 */
-
- /* Parameter nChildren */
-
-/* 730 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 732 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 734 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 736 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 738 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 740 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_selectedColumns */
-
-/* 742 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 744 */ NdrFcLong( 0x0 ), /* 0 */
-/* 748 */ NdrFcShort( 0x14 ), /* 20 */
-/* 750 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
-/* 752 */ NdrFcShort( 0x8 ), /* 8 */
-/* 754 */ NdrFcShort( 0x24 ), /* 36 */
-/* 756 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x4, /* 4 */
-/* 758 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 760 */ NdrFcShort( 0x1 ), /* 1 */
-/* 762 */ NdrFcShort( 0x0 ), /* 0 */
-/* 764 */ NdrFcShort( 0x0 ), /* 0 */
-/* 766 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter maxColumns */
-
-/* 768 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 770 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 772 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter columns */
-
-/* 774 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
-/* 776 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 778 */ NdrFcShort( 0x5a ), /* Type Offset=90 */
-
- /* Parameter nColumns */
-
-/* 780 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 782 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 784 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 786 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 788 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 790 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_selectedRows */
-
-/* 792 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 794 */ NdrFcLong( 0x0 ), /* 0 */
-/* 798 */ NdrFcShort( 0x15 ), /* 21 */
-/* 800 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
-/* 802 */ NdrFcShort( 0x8 ), /* 8 */
-/* 804 */ NdrFcShort( 0x24 ), /* 36 */
-/* 806 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x4, /* 4 */
-/* 808 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 810 */ NdrFcShort( 0x1 ), /* 1 */
-/* 812 */ NdrFcShort( 0x0 ), /* 0 */
-/* 814 */ NdrFcShort( 0x0 ), /* 0 */
-/* 816 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter maxRows */
-
-/* 818 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 820 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 822 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter rows */
-
-/* 824 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
-/* 826 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 828 */ NdrFcShort( 0x5a ), /* Type Offset=90 */
-
- /* Parameter nRows */
-
-/* 830 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 832 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 834 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 836 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 838 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 840 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_summary */
-
-/* 842 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 844 */ NdrFcLong( 0x0 ), /* 0 */
-/* 848 */ NdrFcShort( 0x16 ), /* 22 */
-/* 850 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 852 */ NdrFcShort( 0x0 ), /* 0 */
-/* 854 */ NdrFcShort( 0x8 ), /* 8 */
-/* 856 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 858 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 860 */ NdrFcShort( 0x0 ), /* 0 */
-/* 862 */ NdrFcShort( 0x0 ), /* 0 */
-/* 864 */ NdrFcShort( 0x0 ), /* 0 */
-/* 866 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter accessible */
-
-/* 868 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
-/* 870 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 872 */ NdrFcShort( 0x2 ), /* Type Offset=2 */
-
- /* Return value */
-
-/* 874 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 876 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 878 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_isColumnSelected */
-
-/* 880 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 882 */ NdrFcLong( 0x0 ), /* 0 */
-/* 886 */ NdrFcShort( 0x17 ), /* 23 */
-/* 888 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 890 */ NdrFcShort( 0x8 ), /* 8 */
-/* 892 */ NdrFcShort( 0x21 ), /* 33 */
-/* 894 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x3, /* 3 */
-/* 896 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 898 */ NdrFcShort( 0x0 ), /* 0 */
-/* 900 */ NdrFcShort( 0x0 ), /* 0 */
-/* 902 */ NdrFcShort( 0x0 ), /* 0 */
-/* 904 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter column */
-
-/* 906 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 908 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 910 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter isSelected */
-
-/* 912 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 914 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 916 */ 0x3, /* FC_SMALL */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 918 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 920 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 922 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_isRowSelected */
-
-/* 924 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 926 */ NdrFcLong( 0x0 ), /* 0 */
-/* 930 */ NdrFcShort( 0x18 ), /* 24 */
-/* 932 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 934 */ NdrFcShort( 0x8 ), /* 8 */
-/* 936 */ NdrFcShort( 0x21 ), /* 33 */
-/* 938 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x3, /* 3 */
-/* 940 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 942 */ NdrFcShort( 0x0 ), /* 0 */
-/* 944 */ NdrFcShort( 0x0 ), /* 0 */
-/* 946 */ NdrFcShort( 0x0 ), /* 0 */
-/* 948 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter row */
-
-/* 950 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 952 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 954 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter isSelected */
-
-/* 956 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 958 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 960 */ 0x3, /* FC_SMALL */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 962 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 964 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 966 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_isSelected */
-
-/* 968 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 970 */ NdrFcLong( 0x0 ), /* 0 */
-/* 974 */ NdrFcShort( 0x19 ), /* 25 */
-/* 976 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
-/* 978 */ NdrFcShort( 0x10 ), /* 16 */
-/* 980 */ NdrFcShort( 0x21 ), /* 33 */
-/* 982 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x4, /* 4 */
-/* 984 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 986 */ NdrFcShort( 0x0 ), /* 0 */
-/* 988 */ NdrFcShort( 0x0 ), /* 0 */
-/* 990 */ NdrFcShort( 0x0 ), /* 0 */
-/* 992 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter row */
-
-/* 994 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 996 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 998 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter column */
-
-/* 1000 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 1002 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 1004 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter isSelected */
-
-/* 1006 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 1008 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 1010 */ 0x3, /* FC_SMALL */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 1012 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 1014 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 1016 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure selectRow */
-
-/* 1018 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 1020 */ NdrFcLong( 0x0 ), /* 0 */
-/* 1024 */ NdrFcShort( 0x1a ), /* 26 */
-/* 1026 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 1028 */ NdrFcShort( 0x8 ), /* 8 */
-/* 1030 */ NdrFcShort( 0x8 ), /* 8 */
-/* 1032 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 1034 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 1036 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1038 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1040 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1042 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter row */
-
-/* 1044 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 1046 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 1048 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 1050 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 1052 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 1054 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure selectColumn */
-
-/* 1056 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 1058 */ NdrFcLong( 0x0 ), /* 0 */
-/* 1062 */ NdrFcShort( 0x1b ), /* 27 */
-/* 1064 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 1066 */ NdrFcShort( 0x8 ), /* 8 */
-/* 1068 */ NdrFcShort( 0x8 ), /* 8 */
-/* 1070 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 1072 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 1074 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1076 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1078 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1080 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter column */
-
-/* 1082 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 1084 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 1086 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 1088 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 1090 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 1092 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure unselectRow */
-
-/* 1094 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 1096 */ NdrFcLong( 0x0 ), /* 0 */
-/* 1100 */ NdrFcShort( 0x1c ), /* 28 */
-/* 1102 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 1104 */ NdrFcShort( 0x8 ), /* 8 */
-/* 1106 */ NdrFcShort( 0x8 ), /* 8 */
-/* 1108 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 1110 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 1112 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1114 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1116 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1118 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter row */
-
-/* 1120 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 1122 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 1124 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 1126 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 1128 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 1130 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure unselectColumn */
-
-/* 1132 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 1134 */ NdrFcLong( 0x0 ), /* 0 */
-/* 1138 */ NdrFcShort( 0x1d ), /* 29 */
-/* 1140 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 1142 */ NdrFcShort( 0x8 ), /* 8 */
-/* 1144 */ NdrFcShort( 0x8 ), /* 8 */
-/* 1146 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 1148 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 1150 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1152 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1154 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1156 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter column */
-
-/* 1158 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 1160 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 1162 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 1164 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 1166 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 1168 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_rowColumnExtentsAtIndex */
-
-/* 1170 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 1172 */ NdrFcLong( 0x0 ), /* 0 */
-/* 1176 */ NdrFcShort( 0x1e ), /* 30 */
-/* 1178 */ NdrFcShort( 0x40 ), /* X64 Stack size/offset = 64 */
-/* 1180 */ NdrFcShort( 0x8 ), /* 8 */
-/* 1182 */ NdrFcShort( 0x91 ), /* 145 */
-/* 1184 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x7, /* 7 */
-/* 1186 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 1188 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1190 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1192 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1194 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter index */
-
-/* 1196 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 1198 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 1200 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter row */
-
-/* 1202 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 1204 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 1206 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter column */
-
-/* 1208 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 1210 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 1212 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter rowExtents */
-
-/* 1214 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 1216 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 1218 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter columnExtents */
-
-/* 1220 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 1222 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
-/* 1224 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter isSelected */
-
-/* 1226 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 1228 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */
-/* 1230 */ 0x3, /* FC_SMALL */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 1232 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 1234 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */
-/* 1236 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_modelChange */
-
-/* 1238 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 1240 */ NdrFcLong( 0x0 ), /* 0 */
-/* 1244 */ NdrFcShort( 0x1f ), /* 31 */
-/* 1246 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 1248 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1250 */ NdrFcShort( 0x8 ), /* 8 */
-/* 1252 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 1254 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 1256 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1258 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1260 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1262 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter modelChange */
-
-/* 1264 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */
-/* 1266 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 1268 */ NdrFcShort( 0x7c ), /* Type Offset=124 */
-
- /* Return value */
-
-/* 1270 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 1272 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 1274 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- 0x0
- }
- };
-
-static const AccessibleTable_MIDL_TYPE_FORMAT_STRING AccessibleTable__MIDL_TypeFormatString =
- {
- 0,
- {
- NdrFcShort( 0x0 ), /* 0 */
-/* 2 */
- 0x11, 0x10, /* FC_RP [pointer_deref] */
-/* 4 */ NdrFcShort( 0x2 ), /* Offset= 2 (6) */
-/* 6 */
- 0x2f, /* FC_IP */
- 0x5a, /* FC_CONSTANT_IID */
-/* 8 */ NdrFcLong( 0x0 ), /* 0 */
-/* 12 */ NdrFcShort( 0x0 ), /* 0 */
-/* 14 */ NdrFcShort( 0x0 ), /* 0 */
-/* 16 */ 0xc0, /* 192 */
- 0x0, /* 0 */
-/* 18 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 20 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 22 */ 0x0, /* 0 */
- 0x46, /* 70 */
-/* 24 */
- 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
-/* 26 */ 0x8, /* FC_LONG */
- 0x5c, /* FC_PAD */
-/* 28 */
- 0x11, 0x4, /* FC_RP [alloced_on_stack] */
-/* 30 */ NdrFcShort( 0x1c ), /* Offset= 28 (58) */
-/* 32 */
- 0x13, 0x0, /* FC_OP */
-/* 34 */ NdrFcShort( 0xe ), /* Offset= 14 (48) */
-/* 36 */
- 0x1b, /* FC_CARRAY */
- 0x1, /* 1 */
-/* 38 */ NdrFcShort( 0x2 ), /* 2 */
-/* 40 */ 0x9, /* Corr desc: FC_ULONG */
- 0x0, /* */
-/* 42 */ NdrFcShort( 0xfffc ), /* -4 */
-/* 44 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 46 */ 0x6, /* FC_SHORT */
- 0x5b, /* FC_END */
-/* 48 */
- 0x17, /* FC_CSTRUCT */
- 0x3, /* 3 */
-/* 50 */ NdrFcShort( 0x8 ), /* 8 */
-/* 52 */ NdrFcShort( 0xfff0 ), /* Offset= -16 (36) */
-/* 54 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 56 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 58 */ 0xb4, /* FC_USER_MARSHAL */
- 0x83, /* 131 */
-/* 60 */ NdrFcShort( 0x0 ), /* 0 */
-/* 62 */ NdrFcShort( 0x8 ), /* 8 */
-/* 64 */ NdrFcShort( 0x0 ), /* 0 */
-/* 66 */ NdrFcShort( 0xffde ), /* Offset= -34 (32) */
-/* 68 */
- 0x11, 0x10, /* FC_RP [pointer_deref] */
-/* 70 */ NdrFcShort( 0x2 ), /* Offset= 2 (72) */
-/* 72 */
- 0x2f, /* FC_IP */
- 0x5a, /* FC_CONSTANT_IID */
-/* 74 */ NdrFcLong( 0x35ad8070 ), /* 900563056 */
-/* 78 */ NdrFcShort( 0xc20c ), /* -15860 */
-/* 80 */ NdrFcShort( 0x4fb4 ), /* 20404 */
-/* 82 */ 0xb0, /* 176 */
- 0x94, /* 148 */
-/* 84 */ 0xf4, /* 244 */
- 0xf7, /* 247 */
-/* 86 */ 0x27, /* 39 */
- 0x5d, /* 93 */
-/* 88 */ 0xd4, /* 212 */
- 0x69, /* 105 */
-/* 90 */
- 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */
-/* 92 */ NdrFcShort( 0x2 ), /* Offset= 2 (94) */
-/* 94 */
- 0x13, 0x0, /* FC_OP */
-/* 96 */ NdrFcShort( 0x2 ), /* Offset= 2 (98) */
-/* 98 */
- 0x1c, /* FC_CVARRAY */
- 0x3, /* 3 */
-/* 100 */ NdrFcShort( 0x4 ), /* 4 */
-/* 102 */ 0x28, /* Corr desc: parameter, FC_LONG */
- 0x0, /* */
-/* 104 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 106 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 108 */ 0x28, /* Corr desc: parameter, FC_LONG */
- 0x54, /* FC_DEREFERENCE */
-/* 110 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 112 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 114 */ 0x8, /* FC_LONG */
- 0x5b, /* FC_END */
-/* 116 */
- 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
-/* 118 */ 0x3, /* FC_SMALL */
- 0x5c, /* FC_PAD */
-/* 120 */
- 0x11, 0x4, /* FC_RP [alloced_on_stack] */
-/* 122 */ NdrFcShort( 0x2 ), /* Offset= 2 (124) */
-/* 124 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 126 */ NdrFcShort( 0x14 ), /* 20 */
-/* 128 */ NdrFcShort( 0x0 ), /* 0 */
-/* 130 */ NdrFcShort( 0x0 ), /* Offset= 0 (130) */
-/* 132 */ 0xd, /* FC_ENUM16 */
- 0x8, /* FC_LONG */
-/* 134 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 136 */ 0x8, /* FC_LONG */
- 0x5b, /* FC_END */
-
- 0x0
- }
- };
-
-static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ] =
- {
-
- {
- BSTR_UserSize
- ,BSTR_UserMarshal
- ,BSTR_UserUnmarshal
- ,BSTR_UserFree
- }
-
- };
-
-
-
-/* Object interface: IUnknown, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
-
-
-/* Object interface: IAccessibleTable, ver. 0.0,
- GUID={0x35AD8070,0xC20C,0x4fb4,{0xB0,0x94,0xF4,0xF7,0x27,0x5D,0xD4,0x69}} */
-
-#pragma code_seg(".orpc")
-static const unsigned short IAccessibleTable_FormatStringOffsetTable[] =
- {
- 0,
- 50,
- 88,
- 138,
- 182,
- 232,
- 276,
- 320,
- 358,
- 396,
- 434,
- 472,
- 510,
- 554,
- 604,
- 648,
- 692,
- 742,
- 792,
- 842,
- 880,
- 924,
- 968,
- 1018,
- 1056,
- 1094,
- 1132,
- 1170,
- 1238
- };
-
-static const MIDL_STUBLESS_PROXY_INFO IAccessibleTable_ProxyInfo =
- {
- &Object_StubDesc,
- AccessibleTable__MIDL_ProcFormatString.Format,
- &IAccessibleTable_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0
- };
-
-
-static const MIDL_SERVER_INFO IAccessibleTable_ServerInfo =
- {
- &Object_StubDesc,
- 0,
- AccessibleTable__MIDL_ProcFormatString.Format,
- &IAccessibleTable_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0,
- 0};
-CINTERFACE_PROXY_VTABLE(32) _IAccessibleTableProxyVtbl =
-{
- &IAccessibleTable_ProxyInfo,
- &IID_IAccessibleTable,
- IUnknown_QueryInterface_Proxy,
- IUnknown_AddRef_Proxy,
- IUnknown_Release_Proxy ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_accessibleAt */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_caption */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_childIndex */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_columnDescription */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_columnExtentAt */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_columnHeader */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_columnIndex */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_nColumns */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_nRows */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_nSelectedChildren */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_nSelectedColumns */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_nSelectedRows */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_rowDescription */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_rowExtentAt */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_rowHeader */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_rowIndex */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_selectedChildren */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_selectedColumns */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_selectedRows */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_summary */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_isColumnSelected */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_isRowSelected */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_isSelected */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::selectRow */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::selectColumn */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::unselectRow */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::unselectColumn */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_rowColumnExtentsAtIndex */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_modelChange */
-};
-
-const CInterfaceStubVtbl _IAccessibleTableStubVtbl =
-{
- &IID_IAccessibleTable,
- &IAccessibleTable_ServerInfo,
- 32,
- 0, /* pure interpreted */
- CStdStubBuffer_METHODS
-};
-
-static const MIDL_STUB_DESC Object_StubDesc =
- {
- 0,
- NdrOleAllocate,
- NdrOleFree,
- 0,
- 0,
- 0,
- 0,
- 0,
- AccessibleTable__MIDL_TypeFormatString.Format,
- 1, /* -error bounds_check flag */
- 0x50002, /* Ndr library version */
- 0,
- 0x700022b, /* MIDL Version 7.0.555 */
- 0,
- UserMarshalRoutines,
- 0, /* notify & notify_flag routine table */
- 0x1, /* MIDL flag */
- 0, /* cs routines */
- 0, /* proxy/server info */
- 0
- };
-
-const CInterfaceProxyVtbl * const _AccessibleTable_ProxyVtblList[] =
-{
- ( CInterfaceProxyVtbl *) &_IAccessibleTableProxyVtbl,
- 0
-};
-
-const CInterfaceStubVtbl * const _AccessibleTable_StubVtblList[] =
-{
- ( CInterfaceStubVtbl *) &_IAccessibleTableStubVtbl,
- 0
-};
-
-PCInterfaceName const _AccessibleTable_InterfaceNamesList[] =
-{
- "IAccessibleTable",
- 0
-};
-
-
-#define _AccessibleTable_CHECK_IID(n) IID_GENERIC_CHECK_IID( _AccessibleTable, pIID, n)
-
-int __stdcall _AccessibleTable_IID_Lookup( const IID * pIID, int * pIndex )
-{
-
- if(!_AccessibleTable_CHECK_IID(0))
- {
- *pIndex = 0;
- return 1;
- }
-
- return 0;
-}
-
-const ExtendedProxyFileInfo AccessibleTable_ProxyFileInfo =
-{
- (PCInterfaceProxyVtblList *) & _AccessibleTable_ProxyVtblList,
- (PCInterfaceStubVtblList *) & _AccessibleTable_StubVtblList,
- (const PCInterfaceName * ) & _AccessibleTable_InterfaceNamesList,
- 0, /* no delegation */
- & _AccessibleTable_IID_Lookup,
- 1,
- 2,
- 0, /* table of [async_uuid] interfaces */
- 0, /* Filler1 */
- 0, /* Filler2 */
- 0 /* Filler3 */
-};
-#if _MSC_VER >= 1200
-#pragma warning(pop)
-#endif
-
-
-#endif /* defined(_M_AMD64)*/
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleText.h b/src/3rdparty/iaccessible2/generated/amd64/AccessibleText.h
deleted file mode 100644
index 9b9119629d..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleText.h
+++ /dev/null
@@ -1,435 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:54:00 2012
- */
-/* Compiler settings for AccessibleText.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-#ifndef COM_NO_WINDOWS_H
-#include "windows.h"
-#include "ole2.h"
-#endif /*COM_NO_WINDOWS_H*/
-
-#ifndef __AccessibleText_h__
-#define __AccessibleText_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifndef __IAccessibleText_FWD_DEFINED__
-#define __IAccessibleText_FWD_DEFINED__
-typedef interface IAccessibleText IAccessibleText;
-#endif /* __IAccessibleText_FWD_DEFINED__ */
-
-
-/* header files for imported files */
-#include "objidl.h"
-#include "oaidl.h"
-#include "oleacc.h"
-#include "IA2CommonTypes.h"
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-/* interface __MIDL_itf_AccessibleText_0000_0000 */
-/* [local] */
-
-typedef struct IA2TextSegment
- {
- BSTR text;
- long start;
- long end;
- } IA2TextSegment;
-
-
-enum IA2TextBoundaryType
- { IA2_TEXT_BOUNDARY_CHAR = 0,
- IA2_TEXT_BOUNDARY_WORD = ( IA2_TEXT_BOUNDARY_CHAR + 1 ) ,
- IA2_TEXT_BOUNDARY_SENTENCE = ( IA2_TEXT_BOUNDARY_WORD + 1 ) ,
- IA2_TEXT_BOUNDARY_PARAGRAPH = ( IA2_TEXT_BOUNDARY_SENTENCE + 1 ) ,
- IA2_TEXT_BOUNDARY_LINE = ( IA2_TEXT_BOUNDARY_PARAGRAPH + 1 ) ,
- IA2_TEXT_BOUNDARY_ALL = ( IA2_TEXT_BOUNDARY_LINE + 1 )
- } ;
-
-
-extern RPC_IF_HANDLE __MIDL_itf_AccessibleText_0000_0000_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_AccessibleText_0000_0000_v0_0_s_ifspec;
-
-#ifndef __IAccessibleText_INTERFACE_DEFINED__
-#define __IAccessibleText_INTERFACE_DEFINED__
-
-/* interface IAccessibleText */
-/* [uuid][object] */
-
-
-EXTERN_C const IID IID_IAccessibleText;
-
-#if defined(__cplusplus) && !defined(CINTERFACE)
-
- MIDL_INTERFACE("24FD2FFB-3AAD-4a08-8335-A3AD89C0FB4B")
- IAccessibleText : public IUnknown
- {
- public:
- virtual HRESULT STDMETHODCALLTYPE addSelection(
- /* [in] */ long startOffset,
- /* [in] */ long endOffset) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_attributes(
- /* [in] */ long offset,
- /* [out] */ long *startOffset,
- /* [out] */ long *endOffset,
- /* [retval][out] */ BSTR *textAttributes) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_caretOffset(
- /* [retval][out] */ long *offset) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_characterExtents(
- /* [in] */ long offset,
- /* [in] */ enum IA2CoordinateType coordType,
- /* [out] */ long *x,
- /* [out] */ long *y,
- /* [out] */ long *width,
- /* [retval][out] */ long *height) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelections(
- /* [retval][out] */ long *nSelections) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_offsetAtPoint(
- /* [in] */ long x,
- /* [in] */ long y,
- /* [in] */ enum IA2CoordinateType coordType,
- /* [retval][out] */ long *offset) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selection(
- /* [in] */ long selectionIndex,
- /* [out] */ long *startOffset,
- /* [retval][out] */ long *endOffset) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_text(
- /* [in] */ long startOffset,
- /* [in] */ long endOffset,
- /* [retval][out] */ BSTR *text) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_textBeforeOffset(
- /* [in] */ long offset,
- /* [in] */ enum IA2TextBoundaryType boundaryType,
- /* [out] */ long *startOffset,
- /* [out] */ long *endOffset,
- /* [retval][out] */ BSTR *text) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_textAfterOffset(
- /* [in] */ long offset,
- /* [in] */ enum IA2TextBoundaryType boundaryType,
- /* [out] */ long *startOffset,
- /* [out] */ long *endOffset,
- /* [retval][out] */ BSTR *text) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_textAtOffset(
- /* [in] */ long offset,
- /* [in] */ enum IA2TextBoundaryType boundaryType,
- /* [out] */ long *startOffset,
- /* [out] */ long *endOffset,
- /* [retval][out] */ BSTR *text) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE removeSelection(
- /* [in] */ long selectionIndex) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE setCaretOffset(
- /* [in] */ long offset) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE setSelection(
- /* [in] */ long selectionIndex,
- /* [in] */ long startOffset,
- /* [in] */ long endOffset) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nCharacters(
- /* [retval][out] */ long *nCharacters) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE scrollSubstringTo(
- /* [in] */ long startIndex,
- /* [in] */ long endIndex,
- /* [in] */ enum IA2ScrollType scrollType) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE scrollSubstringToPoint(
- /* [in] */ long startIndex,
- /* [in] */ long endIndex,
- /* [in] */ enum IA2CoordinateType coordinateType,
- /* [in] */ long x,
- /* [in] */ long y) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_newText(
- /* [retval][out] */ IA2TextSegment *newText) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_oldText(
- /* [retval][out] */ IA2TextSegment *oldText) = 0;
-
- };
-
-#else /* C style interface */
-
- typedef struct IAccessibleTextVtbl
- {
- BEGIN_INTERFACE
-
- HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
- IAccessibleText * This,
- /* [in] */ REFIID riid,
- /* [annotation][iid_is][out] */
- __RPC__deref_out void **ppvObject);
-
- ULONG ( STDMETHODCALLTYPE *AddRef )(
- IAccessibleText * This);
-
- ULONG ( STDMETHODCALLTYPE *Release )(
- IAccessibleText * This);
-
- HRESULT ( STDMETHODCALLTYPE *addSelection )(
- IAccessibleText * This,
- /* [in] */ long startOffset,
- /* [in] */ long endOffset);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attributes )(
- IAccessibleText * This,
- /* [in] */ long offset,
- /* [out] */ long *startOffset,
- /* [out] */ long *endOffset,
- /* [retval][out] */ BSTR *textAttributes);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_caretOffset )(
- IAccessibleText * This,
- /* [retval][out] */ long *offset);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_characterExtents )(
- IAccessibleText * This,
- /* [in] */ long offset,
- /* [in] */ enum IA2CoordinateType coordType,
- /* [out] */ long *x,
- /* [out] */ long *y,
- /* [out] */ long *width,
- /* [retval][out] */ long *height);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelections )(
- IAccessibleText * This,
- /* [retval][out] */ long *nSelections);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_offsetAtPoint )(
- IAccessibleText * This,
- /* [in] */ long x,
- /* [in] */ long y,
- /* [in] */ enum IA2CoordinateType coordType,
- /* [retval][out] */ long *offset);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selection )(
- IAccessibleText * This,
- /* [in] */ long selectionIndex,
- /* [out] */ long *startOffset,
- /* [retval][out] */ long *endOffset);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_text )(
- IAccessibleText * This,
- /* [in] */ long startOffset,
- /* [in] */ long endOffset,
- /* [retval][out] */ BSTR *text);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textBeforeOffset )(
- IAccessibleText * This,
- /* [in] */ long offset,
- /* [in] */ enum IA2TextBoundaryType boundaryType,
- /* [out] */ long *startOffset,
- /* [out] */ long *endOffset,
- /* [retval][out] */ BSTR *text);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textAfterOffset )(
- IAccessibleText * This,
- /* [in] */ long offset,
- /* [in] */ enum IA2TextBoundaryType boundaryType,
- /* [out] */ long *startOffset,
- /* [out] */ long *endOffset,
- /* [retval][out] */ BSTR *text);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textAtOffset )(
- IAccessibleText * This,
- /* [in] */ long offset,
- /* [in] */ enum IA2TextBoundaryType boundaryType,
- /* [out] */ long *startOffset,
- /* [out] */ long *endOffset,
- /* [retval][out] */ BSTR *text);
-
- HRESULT ( STDMETHODCALLTYPE *removeSelection )(
- IAccessibleText * This,
- /* [in] */ long selectionIndex);
-
- HRESULT ( STDMETHODCALLTYPE *setCaretOffset )(
- IAccessibleText * This,
- /* [in] */ long offset);
-
- HRESULT ( STDMETHODCALLTYPE *setSelection )(
- IAccessibleText * This,
- /* [in] */ long selectionIndex,
- /* [in] */ long startOffset,
- /* [in] */ long endOffset);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nCharacters )(
- IAccessibleText * This,
- /* [retval][out] */ long *nCharacters);
-
- HRESULT ( STDMETHODCALLTYPE *scrollSubstringTo )(
- IAccessibleText * This,
- /* [in] */ long startIndex,
- /* [in] */ long endIndex,
- /* [in] */ enum IA2ScrollType scrollType);
-
- HRESULT ( STDMETHODCALLTYPE *scrollSubstringToPoint )(
- IAccessibleText * This,
- /* [in] */ long startIndex,
- /* [in] */ long endIndex,
- /* [in] */ enum IA2CoordinateType coordinateType,
- /* [in] */ long x,
- /* [in] */ long y);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_newText )(
- IAccessibleText * This,
- /* [retval][out] */ IA2TextSegment *newText);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_oldText )(
- IAccessibleText * This,
- /* [retval][out] */ IA2TextSegment *oldText);
-
- END_INTERFACE
- } IAccessibleTextVtbl;
-
- interface IAccessibleText
- {
- CONST_VTBL struct IAccessibleTextVtbl *lpVtbl;
- };
-
-
-
-#ifdef COBJMACROS
-
-
-#define IAccessibleText_QueryInterface(This,riid,ppvObject) \
- ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
-
-#define IAccessibleText_AddRef(This) \
- ( (This)->lpVtbl -> AddRef(This) )
-
-#define IAccessibleText_Release(This) \
- ( (This)->lpVtbl -> Release(This) )
-
-
-#define IAccessibleText_addSelection(This,startOffset,endOffset) \
- ( (This)->lpVtbl -> addSelection(This,startOffset,endOffset) )
-
-#define IAccessibleText_get_attributes(This,offset,startOffset,endOffset,textAttributes) \
- ( (This)->lpVtbl -> get_attributes(This,offset,startOffset,endOffset,textAttributes) )
-
-#define IAccessibleText_get_caretOffset(This,offset) \
- ( (This)->lpVtbl -> get_caretOffset(This,offset) )
-
-#define IAccessibleText_get_characterExtents(This,offset,coordType,x,y,width,height) \
- ( (This)->lpVtbl -> get_characterExtents(This,offset,coordType,x,y,width,height) )
-
-#define IAccessibleText_get_nSelections(This,nSelections) \
- ( (This)->lpVtbl -> get_nSelections(This,nSelections) )
-
-#define IAccessibleText_get_offsetAtPoint(This,x,y,coordType,offset) \
- ( (This)->lpVtbl -> get_offsetAtPoint(This,x,y,coordType,offset) )
-
-#define IAccessibleText_get_selection(This,selectionIndex,startOffset,endOffset) \
- ( (This)->lpVtbl -> get_selection(This,selectionIndex,startOffset,endOffset) )
-
-#define IAccessibleText_get_text(This,startOffset,endOffset,text) \
- ( (This)->lpVtbl -> get_text(This,startOffset,endOffset,text) )
-
-#define IAccessibleText_get_textBeforeOffset(This,offset,boundaryType,startOffset,endOffset,text) \
- ( (This)->lpVtbl -> get_textBeforeOffset(This,offset,boundaryType,startOffset,endOffset,text) )
-
-#define IAccessibleText_get_textAfterOffset(This,offset,boundaryType,startOffset,endOffset,text) \
- ( (This)->lpVtbl -> get_textAfterOffset(This,offset,boundaryType,startOffset,endOffset,text) )
-
-#define IAccessibleText_get_textAtOffset(This,offset,boundaryType,startOffset,endOffset,text) \
- ( (This)->lpVtbl -> get_textAtOffset(This,offset,boundaryType,startOffset,endOffset,text) )
-
-#define IAccessibleText_removeSelection(This,selectionIndex) \
- ( (This)->lpVtbl -> removeSelection(This,selectionIndex) )
-
-#define IAccessibleText_setCaretOffset(This,offset) \
- ( (This)->lpVtbl -> setCaretOffset(This,offset) )
-
-#define IAccessibleText_setSelection(This,selectionIndex,startOffset,endOffset) \
- ( (This)->lpVtbl -> setSelection(This,selectionIndex,startOffset,endOffset) )
-
-#define IAccessibleText_get_nCharacters(This,nCharacters) \
- ( (This)->lpVtbl -> get_nCharacters(This,nCharacters) )
-
-#define IAccessibleText_scrollSubstringTo(This,startIndex,endIndex,scrollType) \
- ( (This)->lpVtbl -> scrollSubstringTo(This,startIndex,endIndex,scrollType) )
-
-#define IAccessibleText_scrollSubstringToPoint(This,startIndex,endIndex,coordinateType,x,y) \
- ( (This)->lpVtbl -> scrollSubstringToPoint(This,startIndex,endIndex,coordinateType,x,y) )
-
-#define IAccessibleText_get_newText(This,newText) \
- ( (This)->lpVtbl -> get_newText(This,newText) )
-
-#define IAccessibleText_get_oldText(This,oldText) \
- ( (This)->lpVtbl -> get_oldText(This,oldText) )
-
-#endif /* COBJMACROS */
-
-
-#endif /* C style interface */
-
-
-
-
-#endif /* __IAccessibleText_INTERFACE_DEFINED__ */
-
-
-/* Additional Prototypes for ALL interfaces */
-
-unsigned long __RPC_USER BSTR_UserSize( unsigned long *, unsigned long , BSTR * );
-unsigned char * __RPC_USER BSTR_UserMarshal( unsigned long *, unsigned char *, BSTR * );
-unsigned char * __RPC_USER BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * );
-void __RPC_USER BSTR_UserFree( unsigned long *, BSTR * );
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleText_i.c b/src/3rdparty/iaccessible2/generated/amd64/AccessibleText_i.c
deleted file mode 100644
index 564c790b78..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleText_i.c
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
-
-/* link this file in with the server and any clients */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:54:00 2012
- */
-/* Compiler settings for AccessibleText.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#include <rpc.h>
-#include <rpcndr.h>
-
-#ifdef _MIDL_USE_GUIDDEF_
-
-#ifndef INITGUID
-#define INITGUID
-#include <guiddef.h>
-#undef INITGUID
-#else
-#include <guiddef.h>
-#endif
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
-
-#else // !_MIDL_USE_GUIDDEF_
-
-#ifndef __IID_DEFINED__
-#define __IID_DEFINED__
-
-typedef struct _IID
-{
- unsigned long x;
- unsigned short s1;
- unsigned short s2;
- unsigned char c[8];
-} IID;
-
-#endif // __IID_DEFINED__
-
-#ifndef CLSID_DEFINED
-#define CLSID_DEFINED
-typedef IID CLSID;
-#endif // CLSID_DEFINED
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
-
-#endif !_MIDL_USE_GUIDDEF_
-
-MIDL_DEFINE_GUID(IID, IID_IAccessibleText,0x24FD2FFB,0x3AAD,0x4a08,0x83,0x35,0xA3,0xAD,0x89,0xC0,0xFB,0x4B);
-
-#undef MIDL_DEFINE_GUID
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleText_p.c b/src/3rdparty/iaccessible2/generated/amd64/AccessibleText_p.c
deleted file mode 100644
index b2512f74ef..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleText_p.c
+++ /dev/null
@@ -1,1203 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the proxy stub code */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:54:00 2012
- */
-/* Compiler settings for AccessibleText.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#if defined(_M_AMD64)
-
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-#if _MSC_VER >= 1200
-#pragma warning(push)
-#endif
-
-#pragma warning( disable: 4211 ) /* redefine extern to static */
-#pragma warning( disable: 4232 ) /* dllimport identity*/
-#pragma warning( disable: 4024 ) /* array to pointer mapping*/
-#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */
-
-#define USE_STUBLESS_PROXY
-
-
-/* verify that the <rpcproxy.h> version is high enough to compile this file*/
-#ifndef __REDQ_RPCPROXY_H_VERSION__
-#define __REQUIRED_RPCPROXY_H_VERSION__ 475
-#endif
-
-
-#include "rpcproxy.h"
-#ifndef __RPCPROXY_H_VERSION__
-#error this stub requires an updated version of <rpcproxy.h>
-#endif /* __RPCPROXY_H_VERSION__ */
-
-
-#include "AccessibleText.h"
-
-#define TYPE_FORMAT_STRING_SIZE 67
-#define PROC_FORMAT_STRING_SIZE 939
-#define EXPR_FORMAT_STRING_SIZE 1
-#define TRANSMIT_AS_TABLE_SIZE 0
-#define WIRE_MARSHAL_TABLE_SIZE 1
-
-typedef struct _AccessibleText_MIDL_TYPE_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
- } AccessibleText_MIDL_TYPE_FORMAT_STRING;
-
-typedef struct _AccessibleText_MIDL_PROC_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
- } AccessibleText_MIDL_PROC_FORMAT_STRING;
-
-typedef struct _AccessibleText_MIDL_EXPR_FORMAT_STRING
- {
- long Pad;
- unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
- } AccessibleText_MIDL_EXPR_FORMAT_STRING;
-
-
-static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
-{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
-
-
-extern const AccessibleText_MIDL_TYPE_FORMAT_STRING AccessibleText__MIDL_TypeFormatString;
-extern const AccessibleText_MIDL_PROC_FORMAT_STRING AccessibleText__MIDL_ProcFormatString;
-extern const AccessibleText_MIDL_EXPR_FORMAT_STRING AccessibleText__MIDL_ExprFormatString;
-
-
-extern const MIDL_STUB_DESC Object_StubDesc;
-
-
-extern const MIDL_SERVER_INFO IAccessibleText_ServerInfo;
-extern const MIDL_STUBLESS_PROXY_INFO IAccessibleText_ProxyInfo;
-
-
-extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ];
-
-#if !defined(__RPC_WIN64__)
-#error Invalid build platform for this stub.
-#endif
-
-static const AccessibleText_MIDL_PROC_FORMAT_STRING AccessibleText__MIDL_ProcFormatString =
- {
- 0,
- {
-
- /* Procedure addSelection */
-
- 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 2 */ NdrFcLong( 0x0 ), /* 0 */
-/* 6 */ NdrFcShort( 0x3 ), /* 3 */
-/* 8 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 10 */ NdrFcShort( 0x10 ), /* 16 */
-/* 12 */ NdrFcShort( 0x8 ), /* 8 */
-/* 14 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x3, /* 3 */
-/* 16 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 18 */ NdrFcShort( 0x0 ), /* 0 */
-/* 20 */ NdrFcShort( 0x0 ), /* 0 */
-/* 22 */ NdrFcShort( 0x0 ), /* 0 */
-/* 24 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter startOffset */
-
-/* 26 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 28 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 30 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter endOffset */
-
-/* 32 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 34 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 36 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 38 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 40 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 42 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_attributes */
-
-/* 44 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 46 */ NdrFcLong( 0x0 ), /* 0 */
-/* 50 */ NdrFcShort( 0x4 ), /* 4 */
-/* 52 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */
-/* 54 */ NdrFcShort( 0x8 ), /* 8 */
-/* 56 */ NdrFcShort( 0x40 ), /* 64 */
-/* 58 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x5, /* 5 */
-/* 60 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 62 */ NdrFcShort( 0x1 ), /* 1 */
-/* 64 */ NdrFcShort( 0x0 ), /* 0 */
-/* 66 */ NdrFcShort( 0x0 ), /* 0 */
-/* 68 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter offset */
-
-/* 70 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 72 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 74 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter startOffset */
-
-/* 76 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 78 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 80 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter endOffset */
-
-/* 82 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 84 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 86 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter textAttributes */
-
-/* 88 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 90 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 92 */ NdrFcShort( 0x24 ), /* Type Offset=36 */
-
- /* Return value */
-
-/* 94 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 96 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
-/* 98 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_caretOffset */
-
-/* 100 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 102 */ NdrFcLong( 0x0 ), /* 0 */
-/* 106 */ NdrFcShort( 0x5 ), /* 5 */
-/* 108 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 110 */ NdrFcShort( 0x0 ), /* 0 */
-/* 112 */ NdrFcShort( 0x24 ), /* 36 */
-/* 114 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 116 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 118 */ NdrFcShort( 0x0 ), /* 0 */
-/* 120 */ NdrFcShort( 0x0 ), /* 0 */
-/* 122 */ NdrFcShort( 0x0 ), /* 0 */
-/* 124 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter offset */
-
-/* 126 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 128 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 130 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 132 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 134 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 136 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_characterExtents */
-
-/* 138 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 140 */ NdrFcLong( 0x0 ), /* 0 */
-/* 144 */ NdrFcShort( 0x6 ), /* 6 */
-/* 146 */ NdrFcShort( 0x40 ), /* X64 Stack size/offset = 64 */
-/* 148 */ NdrFcShort( 0xe ), /* 14 */
-/* 150 */ NdrFcShort( 0x78 ), /* 120 */
-/* 152 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x7, /* 7 */
-/* 154 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 156 */ NdrFcShort( 0x0 ), /* 0 */
-/* 158 */ NdrFcShort( 0x0 ), /* 0 */
-/* 160 */ NdrFcShort( 0x0 ), /* 0 */
-/* 162 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter offset */
-
-/* 164 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 166 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 168 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter coordType */
-
-/* 170 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 172 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 174 */ 0xd, /* FC_ENUM16 */
- 0x0, /* 0 */
-
- /* Parameter x */
-
-/* 176 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 178 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 180 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter y */
-
-/* 182 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 184 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 186 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter width */
-
-/* 188 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 190 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
-/* 192 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter height */
-
-/* 194 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 196 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */
-/* 198 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 200 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 202 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */
-/* 204 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_nSelections */
-
-/* 206 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 208 */ NdrFcLong( 0x0 ), /* 0 */
-/* 212 */ NdrFcShort( 0x7 ), /* 7 */
-/* 214 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 216 */ NdrFcShort( 0x0 ), /* 0 */
-/* 218 */ NdrFcShort( 0x24 ), /* 36 */
-/* 220 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 222 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 224 */ NdrFcShort( 0x0 ), /* 0 */
-/* 226 */ NdrFcShort( 0x0 ), /* 0 */
-/* 228 */ NdrFcShort( 0x0 ), /* 0 */
-/* 230 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter nSelections */
-
-/* 232 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 234 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 236 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 238 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 240 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 242 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_offsetAtPoint */
-
-/* 244 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 246 */ NdrFcLong( 0x0 ), /* 0 */
-/* 250 */ NdrFcShort( 0x8 ), /* 8 */
-/* 252 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */
-/* 254 */ NdrFcShort( 0x16 ), /* 22 */
-/* 256 */ NdrFcShort( 0x24 ), /* 36 */
-/* 258 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x5, /* 5 */
-/* 260 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 262 */ NdrFcShort( 0x0 ), /* 0 */
-/* 264 */ NdrFcShort( 0x0 ), /* 0 */
-/* 266 */ NdrFcShort( 0x0 ), /* 0 */
-/* 268 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter x */
-
-/* 270 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 272 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 274 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter y */
-
-/* 276 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 278 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 280 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter coordType */
-
-/* 282 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 284 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 286 */ 0xd, /* FC_ENUM16 */
- 0x0, /* 0 */
-
- /* Parameter offset */
-
-/* 288 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 290 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 292 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 294 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 296 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
-/* 298 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_selection */
-
-/* 300 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 302 */ NdrFcLong( 0x0 ), /* 0 */
-/* 306 */ NdrFcShort( 0x9 ), /* 9 */
-/* 308 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
-/* 310 */ NdrFcShort( 0x8 ), /* 8 */
-/* 312 */ NdrFcShort( 0x40 ), /* 64 */
-/* 314 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x4, /* 4 */
-/* 316 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 318 */ NdrFcShort( 0x0 ), /* 0 */
-/* 320 */ NdrFcShort( 0x0 ), /* 0 */
-/* 322 */ NdrFcShort( 0x0 ), /* 0 */
-/* 324 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter selectionIndex */
-
-/* 326 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 328 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 330 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter startOffset */
-
-/* 332 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 334 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 336 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter endOffset */
-
-/* 338 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 340 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 342 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 344 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 346 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 348 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_text */
-
-/* 350 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 352 */ NdrFcLong( 0x0 ), /* 0 */
-/* 356 */ NdrFcShort( 0xa ), /* 10 */
-/* 358 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
-/* 360 */ NdrFcShort( 0x10 ), /* 16 */
-/* 362 */ NdrFcShort( 0x8 ), /* 8 */
-/* 364 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x4, /* 4 */
-/* 366 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 368 */ NdrFcShort( 0x1 ), /* 1 */
-/* 370 */ NdrFcShort( 0x0 ), /* 0 */
-/* 372 */ NdrFcShort( 0x0 ), /* 0 */
-/* 374 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter startOffset */
-
-/* 376 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 378 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 380 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter endOffset */
-
-/* 382 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 384 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 386 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter text */
-
-/* 388 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 390 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 392 */ NdrFcShort( 0x24 ), /* Type Offset=36 */
-
- /* Return value */
-
-/* 394 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 396 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 398 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_textBeforeOffset */
-
-/* 400 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 402 */ NdrFcLong( 0x0 ), /* 0 */
-/* 406 */ NdrFcShort( 0xb ), /* 11 */
-/* 408 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */
-/* 410 */ NdrFcShort( 0xe ), /* 14 */
-/* 412 */ NdrFcShort( 0x40 ), /* 64 */
-/* 414 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x6, /* 6 */
-/* 416 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 418 */ NdrFcShort( 0x1 ), /* 1 */
-/* 420 */ NdrFcShort( 0x0 ), /* 0 */
-/* 422 */ NdrFcShort( 0x0 ), /* 0 */
-/* 424 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter offset */
-
-/* 426 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 428 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 430 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter boundaryType */
-
-/* 432 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 434 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 436 */ 0xd, /* FC_ENUM16 */
- 0x0, /* 0 */
-
- /* Parameter startOffset */
-
-/* 438 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 440 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 442 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter endOffset */
-
-/* 444 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 446 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 448 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter text */
-
-/* 450 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 452 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
-/* 454 */ NdrFcShort( 0x24 ), /* Type Offset=36 */
-
- /* Return value */
-
-/* 456 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 458 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */
-/* 460 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_textAfterOffset */
-
-/* 462 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 464 */ NdrFcLong( 0x0 ), /* 0 */
-/* 468 */ NdrFcShort( 0xc ), /* 12 */
-/* 470 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */
-/* 472 */ NdrFcShort( 0xe ), /* 14 */
-/* 474 */ NdrFcShort( 0x40 ), /* 64 */
-/* 476 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x6, /* 6 */
-/* 478 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 480 */ NdrFcShort( 0x1 ), /* 1 */
-/* 482 */ NdrFcShort( 0x0 ), /* 0 */
-/* 484 */ NdrFcShort( 0x0 ), /* 0 */
-/* 486 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter offset */
-
-/* 488 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 490 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 492 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter boundaryType */
-
-/* 494 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 496 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 498 */ 0xd, /* FC_ENUM16 */
- 0x0, /* 0 */
-
- /* Parameter startOffset */
-
-/* 500 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 502 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 504 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter endOffset */
-
-/* 506 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 508 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 510 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter text */
-
-/* 512 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 514 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
-/* 516 */ NdrFcShort( 0x24 ), /* Type Offset=36 */
-
- /* Return value */
-
-/* 518 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 520 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */
-/* 522 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_textAtOffset */
-
-/* 524 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 526 */ NdrFcLong( 0x0 ), /* 0 */
-/* 530 */ NdrFcShort( 0xd ), /* 13 */
-/* 532 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */
-/* 534 */ NdrFcShort( 0xe ), /* 14 */
-/* 536 */ NdrFcShort( 0x40 ), /* 64 */
-/* 538 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x6, /* 6 */
-/* 540 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 542 */ NdrFcShort( 0x1 ), /* 1 */
-/* 544 */ NdrFcShort( 0x0 ), /* 0 */
-/* 546 */ NdrFcShort( 0x0 ), /* 0 */
-/* 548 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter offset */
-
-/* 550 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 552 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 554 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter boundaryType */
-
-/* 556 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 558 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 560 */ 0xd, /* FC_ENUM16 */
- 0x0, /* 0 */
-
- /* Parameter startOffset */
-
-/* 562 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 564 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 566 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter endOffset */
-
-/* 568 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 570 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 572 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter text */
-
-/* 574 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 576 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
-/* 578 */ NdrFcShort( 0x24 ), /* Type Offset=36 */
-
- /* Return value */
-
-/* 580 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 582 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */
-/* 584 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure removeSelection */
-
-/* 586 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 588 */ NdrFcLong( 0x0 ), /* 0 */
-/* 592 */ NdrFcShort( 0xe ), /* 14 */
-/* 594 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 596 */ NdrFcShort( 0x8 ), /* 8 */
-/* 598 */ NdrFcShort( 0x8 ), /* 8 */
-/* 600 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 602 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 604 */ NdrFcShort( 0x0 ), /* 0 */
-/* 606 */ NdrFcShort( 0x0 ), /* 0 */
-/* 608 */ NdrFcShort( 0x0 ), /* 0 */
-/* 610 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter selectionIndex */
-
-/* 612 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 614 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 616 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 618 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 620 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 622 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure setCaretOffset */
-
-/* 624 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 626 */ NdrFcLong( 0x0 ), /* 0 */
-/* 630 */ NdrFcShort( 0xf ), /* 15 */
-/* 632 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 634 */ NdrFcShort( 0x8 ), /* 8 */
-/* 636 */ NdrFcShort( 0x8 ), /* 8 */
-/* 638 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 640 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 642 */ NdrFcShort( 0x0 ), /* 0 */
-/* 644 */ NdrFcShort( 0x0 ), /* 0 */
-/* 646 */ NdrFcShort( 0x0 ), /* 0 */
-/* 648 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter offset */
-
-/* 650 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 652 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 654 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 656 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 658 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 660 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure setSelection */
-
-/* 662 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 664 */ NdrFcLong( 0x0 ), /* 0 */
-/* 668 */ NdrFcShort( 0x10 ), /* 16 */
-/* 670 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
-/* 672 */ NdrFcShort( 0x18 ), /* 24 */
-/* 674 */ NdrFcShort( 0x8 ), /* 8 */
-/* 676 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x4, /* 4 */
-/* 678 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 680 */ NdrFcShort( 0x0 ), /* 0 */
-/* 682 */ NdrFcShort( 0x0 ), /* 0 */
-/* 684 */ NdrFcShort( 0x0 ), /* 0 */
-/* 686 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter selectionIndex */
-
-/* 688 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 690 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 692 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter startOffset */
-
-/* 694 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 696 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 698 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter endOffset */
-
-/* 700 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 702 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 704 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 706 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 708 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 710 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_nCharacters */
-
-/* 712 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 714 */ NdrFcLong( 0x0 ), /* 0 */
-/* 718 */ NdrFcShort( 0x11 ), /* 17 */
-/* 720 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 722 */ NdrFcShort( 0x0 ), /* 0 */
-/* 724 */ NdrFcShort( 0x24 ), /* 36 */
-/* 726 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 728 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 730 */ NdrFcShort( 0x0 ), /* 0 */
-/* 732 */ NdrFcShort( 0x0 ), /* 0 */
-/* 734 */ NdrFcShort( 0x0 ), /* 0 */
-/* 736 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter nCharacters */
-
-/* 738 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 740 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 742 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 744 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 746 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 748 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure scrollSubstringTo */
-
-/* 750 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 752 */ NdrFcLong( 0x0 ), /* 0 */
-/* 756 */ NdrFcShort( 0x12 ), /* 18 */
-/* 758 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
-/* 760 */ NdrFcShort( 0x16 ), /* 22 */
-/* 762 */ NdrFcShort( 0x8 ), /* 8 */
-/* 764 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x4, /* 4 */
-/* 766 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 768 */ NdrFcShort( 0x0 ), /* 0 */
-/* 770 */ NdrFcShort( 0x0 ), /* 0 */
-/* 772 */ NdrFcShort( 0x0 ), /* 0 */
-/* 774 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter startIndex */
-
-/* 776 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 778 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 780 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter endIndex */
-
-/* 782 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 784 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 786 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter scrollType */
-
-/* 788 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 790 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 792 */ 0xd, /* FC_ENUM16 */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 794 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 796 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 798 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure scrollSubstringToPoint */
-
-/* 800 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 802 */ NdrFcLong( 0x0 ), /* 0 */
-/* 806 */ NdrFcShort( 0x13 ), /* 19 */
-/* 808 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */
-/* 810 */ NdrFcShort( 0x26 ), /* 38 */
-/* 812 */ NdrFcShort( 0x8 ), /* 8 */
-/* 814 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x6, /* 6 */
-/* 816 */ 0xa, /* 10 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 818 */ NdrFcShort( 0x0 ), /* 0 */
-/* 820 */ NdrFcShort( 0x0 ), /* 0 */
-/* 822 */ NdrFcShort( 0x0 ), /* 0 */
-/* 824 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter startIndex */
-
-/* 826 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 828 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 830 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter endIndex */
-
-/* 832 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 834 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 836 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter coordinateType */
-
-/* 838 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 840 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 842 */ 0xd, /* FC_ENUM16 */
- 0x0, /* 0 */
-
- /* Parameter x */
-
-/* 844 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 846 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
-/* 848 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter y */
-
-/* 850 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 852 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
-/* 854 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 856 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 858 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */
-/* 860 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_newText */
-
-/* 862 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 864 */ NdrFcLong( 0x0 ), /* 0 */
-/* 868 */ NdrFcShort( 0x14 ), /* 20 */
-/* 870 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 872 */ NdrFcShort( 0x0 ), /* 0 */
-/* 874 */ NdrFcShort( 0x8 ), /* 8 */
-/* 876 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 878 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 880 */ NdrFcShort( 0x1 ), /* 1 */
-/* 882 */ NdrFcShort( 0x0 ), /* 0 */
-/* 884 */ NdrFcShort( 0x0 ), /* 0 */
-/* 886 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter newText */
-
-/* 888 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */
-/* 890 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 892 */ NdrFcShort( 0x32 ), /* Type Offset=50 */
-
- /* Return value */
-
-/* 894 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 896 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 898 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_oldText */
-
-/* 900 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 902 */ NdrFcLong( 0x0 ), /* 0 */
-/* 906 */ NdrFcShort( 0x15 ), /* 21 */
-/* 908 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 910 */ NdrFcShort( 0x0 ), /* 0 */
-/* 912 */ NdrFcShort( 0x8 ), /* 8 */
-/* 914 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 916 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 918 */ NdrFcShort( 0x1 ), /* 1 */
-/* 920 */ NdrFcShort( 0x0 ), /* 0 */
-/* 922 */ NdrFcShort( 0x0 ), /* 0 */
-/* 924 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter oldText */
-
-/* 926 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */
-/* 928 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 930 */ NdrFcShort( 0x32 ), /* Type Offset=50 */
-
- /* Return value */
-
-/* 932 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 934 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 936 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- 0x0
- }
- };
-
-static const AccessibleText_MIDL_TYPE_FORMAT_STRING AccessibleText__MIDL_TypeFormatString =
- {
- 0,
- {
- NdrFcShort( 0x0 ), /* 0 */
-/* 2 */
- 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
-/* 4 */ 0x8, /* FC_LONG */
- 0x5c, /* FC_PAD */
-/* 6 */
- 0x11, 0x4, /* FC_RP [alloced_on_stack] */
-/* 8 */ NdrFcShort( 0x1c ), /* Offset= 28 (36) */
-/* 10 */
- 0x13, 0x0, /* FC_OP */
-/* 12 */ NdrFcShort( 0xe ), /* Offset= 14 (26) */
-/* 14 */
- 0x1b, /* FC_CARRAY */
- 0x1, /* 1 */
-/* 16 */ NdrFcShort( 0x2 ), /* 2 */
-/* 18 */ 0x9, /* Corr desc: FC_ULONG */
- 0x0, /* */
-/* 20 */ NdrFcShort( 0xfffc ), /* -4 */
-/* 22 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 24 */ 0x6, /* FC_SHORT */
- 0x5b, /* FC_END */
-/* 26 */
- 0x17, /* FC_CSTRUCT */
- 0x3, /* 3 */
-/* 28 */ NdrFcShort( 0x8 ), /* 8 */
-/* 30 */ NdrFcShort( 0xfff0 ), /* Offset= -16 (14) */
-/* 32 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 34 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 36 */ 0xb4, /* FC_USER_MARSHAL */
- 0x83, /* 131 */
-/* 38 */ NdrFcShort( 0x0 ), /* 0 */
-/* 40 */ NdrFcShort( 0x8 ), /* 8 */
-/* 42 */ NdrFcShort( 0x0 ), /* 0 */
-/* 44 */ NdrFcShort( 0xffde ), /* Offset= -34 (10) */
-/* 46 */
- 0x11, 0x4, /* FC_RP [alloced_on_stack] */
-/* 48 */ NdrFcShort( 0x2 ), /* Offset= 2 (50) */
-/* 50 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 52 */ NdrFcShort( 0x10 ), /* 16 */
-/* 54 */ NdrFcShort( 0x0 ), /* 0 */
-/* 56 */ NdrFcShort( 0x0 ), /* Offset= 0 (56) */
-/* 58 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 60 */ NdrFcShort( 0xffe8 ), /* Offset= -24 (36) */
-/* 62 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 64 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-
- 0x0
- }
- };
-
-static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ] =
- {
-
- {
- BSTR_UserSize
- ,BSTR_UserMarshal
- ,BSTR_UserUnmarshal
- ,BSTR_UserFree
- }
-
- };
-
-
-
-/* Standard interface: __MIDL_itf_AccessibleText_0000_0000, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */
-
-
-/* Object interface: IUnknown, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
-
-
-/* Object interface: IAccessibleText, ver. 0.0,
- GUID={0x24FD2FFB,0x3AAD,0x4a08,{0x83,0x35,0xA3,0xAD,0x89,0xC0,0xFB,0x4B}} */
-
-#pragma code_seg(".orpc")
-static const unsigned short IAccessibleText_FormatStringOffsetTable[] =
- {
- 0,
- 44,
- 100,
- 138,
- 206,
- 244,
- 300,
- 350,
- 400,
- 462,
- 524,
- 586,
- 624,
- 662,
- 712,
- 750,
- 800,
- 862,
- 900
- };
-
-static const MIDL_STUBLESS_PROXY_INFO IAccessibleText_ProxyInfo =
- {
- &Object_StubDesc,
- AccessibleText__MIDL_ProcFormatString.Format,
- &IAccessibleText_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0
- };
-
-
-static const MIDL_SERVER_INFO IAccessibleText_ServerInfo =
- {
- &Object_StubDesc,
- 0,
- AccessibleText__MIDL_ProcFormatString.Format,
- &IAccessibleText_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0,
- 0};
-CINTERFACE_PROXY_VTABLE(22) _IAccessibleTextProxyVtbl =
-{
- &IAccessibleText_ProxyInfo,
- &IID_IAccessibleText,
- IUnknown_QueryInterface_Proxy,
- IUnknown_AddRef_Proxy,
- IUnknown_Release_Proxy ,
- (void *) (INT_PTR) -1 /* IAccessibleText::addSelection */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::get_attributes */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::get_caretOffset */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::get_characterExtents */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::get_nSelections */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::get_offsetAtPoint */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::get_selection */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::get_text */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::get_textBeforeOffset */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::get_textAfterOffset */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::get_textAtOffset */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::removeSelection */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::setCaretOffset */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::setSelection */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::get_nCharacters */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::scrollSubstringTo */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::scrollSubstringToPoint */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::get_newText */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::get_oldText */
-};
-
-const CInterfaceStubVtbl _IAccessibleTextStubVtbl =
-{
- &IID_IAccessibleText,
- &IAccessibleText_ServerInfo,
- 22,
- 0, /* pure interpreted */
- CStdStubBuffer_METHODS
-};
-
-static const MIDL_STUB_DESC Object_StubDesc =
- {
- 0,
- NdrOleAllocate,
- NdrOleFree,
- 0,
- 0,
- 0,
- 0,
- 0,
- AccessibleText__MIDL_TypeFormatString.Format,
- 1, /* -error bounds_check flag */
- 0x50002, /* Ndr library version */
- 0,
- 0x700022b, /* MIDL Version 7.0.555 */
- 0,
- UserMarshalRoutines,
- 0, /* notify & notify_flag routine table */
- 0x1, /* MIDL flag */
- 0, /* cs routines */
- 0, /* proxy/server info */
- 0
- };
-
-const CInterfaceProxyVtbl * const _AccessibleText_ProxyVtblList[] =
-{
- ( CInterfaceProxyVtbl *) &_IAccessibleTextProxyVtbl,
- 0
-};
-
-const CInterfaceStubVtbl * const _AccessibleText_StubVtblList[] =
-{
- ( CInterfaceStubVtbl *) &_IAccessibleTextStubVtbl,
- 0
-};
-
-PCInterfaceName const _AccessibleText_InterfaceNamesList[] =
-{
- "IAccessibleText",
- 0
-};
-
-
-#define _AccessibleText_CHECK_IID(n) IID_GENERIC_CHECK_IID( _AccessibleText, pIID, n)
-
-int __stdcall _AccessibleText_IID_Lookup( const IID * pIID, int * pIndex )
-{
-
- if(!_AccessibleText_CHECK_IID(0))
- {
- *pIndex = 0;
- return 1;
- }
-
- return 0;
-}
-
-const ExtendedProxyFileInfo AccessibleText_ProxyFileInfo =
-{
- (PCInterfaceProxyVtblList *) & _AccessibleText_ProxyVtblList,
- (PCInterfaceStubVtblList *) & _AccessibleText_StubVtblList,
- (const PCInterfaceName * ) & _AccessibleText_InterfaceNamesList,
- 0, /* no delegation */
- & _AccessibleText_IID_Lookup,
- 1,
- 2,
- 0, /* table of [async_uuid] interfaces */
- 0, /* Filler1 */
- 0, /* Filler2 */
- 0 /* Filler3 */
-};
-#if _MSC_VER >= 1200
-#pragma warning(pop)
-#endif
-
-
-#endif /* defined(_M_AMD64)*/
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleValue.h b/src/3rdparty/iaccessible2/generated/amd64/AccessibleValue.h
deleted file mode 100644
index b27f9bb0c2..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleValue.h
+++ /dev/null
@@ -1,188 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:54:00 2012
- */
-/* Compiler settings for AccessibleValue.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-#ifndef COM_NO_WINDOWS_H
-#include "windows.h"
-#include "ole2.h"
-#endif /*COM_NO_WINDOWS_H*/
-
-#ifndef __AccessibleValue_h__
-#define __AccessibleValue_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifndef __IAccessibleValue_FWD_DEFINED__
-#define __IAccessibleValue_FWD_DEFINED__
-typedef interface IAccessibleValue IAccessibleValue;
-#endif /* __IAccessibleValue_FWD_DEFINED__ */
-
-
-/* header files for imported files */
-#include "objidl.h"
-#include "oaidl.h"
-#include "oleacc.h"
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#ifndef __IAccessibleValue_INTERFACE_DEFINED__
-#define __IAccessibleValue_INTERFACE_DEFINED__
-
-/* interface IAccessibleValue */
-/* [uuid][object] */
-
-
-EXTERN_C const IID IID_IAccessibleValue;
-
-#if defined(__cplusplus) && !defined(CINTERFACE)
-
- MIDL_INTERFACE("35855B5B-C566-4fd0-A7B1-E65465600394")
- IAccessibleValue : public IUnknown
- {
- public:
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_currentValue(
- /* [retval][out] */ VARIANT *currentValue) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE setCurrentValue(
- /* [in] */ VARIANT value) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_maximumValue(
- /* [retval][out] */ VARIANT *maximumValue) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_minimumValue(
- /* [retval][out] */ VARIANT *minimumValue) = 0;
-
- };
-
-#else /* C style interface */
-
- typedef struct IAccessibleValueVtbl
- {
- BEGIN_INTERFACE
-
- HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
- IAccessibleValue * This,
- /* [in] */ REFIID riid,
- /* [annotation][iid_is][out] */
- __RPC__deref_out void **ppvObject);
-
- ULONG ( STDMETHODCALLTYPE *AddRef )(
- IAccessibleValue * This);
-
- ULONG ( STDMETHODCALLTYPE *Release )(
- IAccessibleValue * This);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_currentValue )(
- IAccessibleValue * This,
- /* [retval][out] */ VARIANT *currentValue);
-
- HRESULT ( STDMETHODCALLTYPE *setCurrentValue )(
- IAccessibleValue * This,
- /* [in] */ VARIANT value);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_maximumValue )(
- IAccessibleValue * This,
- /* [retval][out] */ VARIANT *maximumValue);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_minimumValue )(
- IAccessibleValue * This,
- /* [retval][out] */ VARIANT *minimumValue);
-
- END_INTERFACE
- } IAccessibleValueVtbl;
-
- interface IAccessibleValue
- {
- CONST_VTBL struct IAccessibleValueVtbl *lpVtbl;
- };
-
-
-
-#ifdef COBJMACROS
-
-
-#define IAccessibleValue_QueryInterface(This,riid,ppvObject) \
- ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
-
-#define IAccessibleValue_AddRef(This) \
- ( (This)->lpVtbl -> AddRef(This) )
-
-#define IAccessibleValue_Release(This) \
- ( (This)->lpVtbl -> Release(This) )
-
-
-#define IAccessibleValue_get_currentValue(This,currentValue) \
- ( (This)->lpVtbl -> get_currentValue(This,currentValue) )
-
-#define IAccessibleValue_setCurrentValue(This,value) \
- ( (This)->lpVtbl -> setCurrentValue(This,value) )
-
-#define IAccessibleValue_get_maximumValue(This,maximumValue) \
- ( (This)->lpVtbl -> get_maximumValue(This,maximumValue) )
-
-#define IAccessibleValue_get_minimumValue(This,minimumValue) \
- ( (This)->lpVtbl -> get_minimumValue(This,minimumValue) )
-
-#endif /* COBJMACROS */
-
-
-#endif /* C style interface */
-
-
-
-
-#endif /* __IAccessibleValue_INTERFACE_DEFINED__ */
-
-
-/* Additional Prototypes for ALL interfaces */
-
-unsigned long __RPC_USER VARIANT_UserSize( unsigned long *, unsigned long , VARIANT * );
-unsigned char * __RPC_USER VARIANT_UserMarshal( unsigned long *, unsigned char *, VARIANT * );
-unsigned char * __RPC_USER VARIANT_UserUnmarshal(unsigned long *, unsigned char *, VARIANT * );
-void __RPC_USER VARIANT_UserFree( unsigned long *, VARIANT * );
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleValue_i.c b/src/3rdparty/iaccessible2/generated/amd64/AccessibleValue_i.c
deleted file mode 100644
index bc757ff1a1..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleValue_i.c
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
-
-/* link this file in with the server and any clients */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:54:00 2012
- */
-/* Compiler settings for AccessibleValue.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#include <rpc.h>
-#include <rpcndr.h>
-
-#ifdef _MIDL_USE_GUIDDEF_
-
-#ifndef INITGUID
-#define INITGUID
-#include <guiddef.h>
-#undef INITGUID
-#else
-#include <guiddef.h>
-#endif
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
-
-#else // !_MIDL_USE_GUIDDEF_
-
-#ifndef __IID_DEFINED__
-#define __IID_DEFINED__
-
-typedef struct _IID
-{
- unsigned long x;
- unsigned short s1;
- unsigned short s2;
- unsigned char c[8];
-} IID;
-
-#endif // __IID_DEFINED__
-
-#ifndef CLSID_DEFINED
-#define CLSID_DEFINED
-typedef IID CLSID;
-#endif // CLSID_DEFINED
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
-
-#endif !_MIDL_USE_GUIDDEF_
-
-MIDL_DEFINE_GUID(IID, IID_IAccessibleValue,0x35855B5B,0xC566,0x4fd0,0xA7,0xB1,0xE6,0x54,0x65,0x60,0x03,0x94);
-
-#undef MIDL_DEFINE_GUID
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/AccessibleValue_p.c b/src/3rdparty/iaccessible2/generated/amd64/AccessibleValue_p.c
deleted file mode 100644
index c3fd72ceb2..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/AccessibleValue_p.c
+++ /dev/null
@@ -1,1029 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the proxy stub code */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:54:00 2012
- */
-/* Compiler settings for AccessibleValue.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#if defined(_M_AMD64)
-
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-#if _MSC_VER >= 1200
-#pragma warning(push)
-#endif
-
-#pragma warning( disable: 4211 ) /* redefine extern to static */
-#pragma warning( disable: 4232 ) /* dllimport identity*/
-#pragma warning( disable: 4024 ) /* array to pointer mapping*/
-#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */
-
-#define USE_STUBLESS_PROXY
-
-
-/* verify that the <rpcproxy.h> version is high enough to compile this file*/
-#ifndef __REDQ_RPCPROXY_H_VERSION__
-#define __REQUIRED_RPCPROXY_H_VERSION__ 475
-#endif
-
-
-#include "rpcproxy.h"
-#ifndef __RPCPROXY_H_VERSION__
-#error this stub requires an updated version of <rpcproxy.h>
-#endif /* __RPCPROXY_H_VERSION__ */
-
-
-#include "AccessibleValue.h"
-
-#define TYPE_FORMAT_STRING_SIZE 1007
-#define PROC_FORMAT_STRING_SIZE 153
-#define EXPR_FORMAT_STRING_SIZE 1
-#define TRANSMIT_AS_TABLE_SIZE 0
-#define WIRE_MARSHAL_TABLE_SIZE 1
-
-typedef struct _AccessibleValue_MIDL_TYPE_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
- } AccessibleValue_MIDL_TYPE_FORMAT_STRING;
-
-typedef struct _AccessibleValue_MIDL_PROC_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
- } AccessibleValue_MIDL_PROC_FORMAT_STRING;
-
-typedef struct _AccessibleValue_MIDL_EXPR_FORMAT_STRING
- {
- long Pad;
- unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
- } AccessibleValue_MIDL_EXPR_FORMAT_STRING;
-
-
-static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
-{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
-
-
-extern const AccessibleValue_MIDL_TYPE_FORMAT_STRING AccessibleValue__MIDL_TypeFormatString;
-extern const AccessibleValue_MIDL_PROC_FORMAT_STRING AccessibleValue__MIDL_ProcFormatString;
-extern const AccessibleValue_MIDL_EXPR_FORMAT_STRING AccessibleValue__MIDL_ExprFormatString;
-
-
-extern const MIDL_STUB_DESC Object_StubDesc;
-
-
-extern const MIDL_SERVER_INFO IAccessibleValue_ServerInfo;
-extern const MIDL_STUBLESS_PROXY_INFO IAccessibleValue_ProxyInfo;
-
-
-extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ];
-
-#if !defined(__RPC_WIN64__)
-#error Invalid build platform for this stub.
-#endif
-
-static const AccessibleValue_MIDL_PROC_FORMAT_STRING AccessibleValue__MIDL_ProcFormatString =
- {
- 0,
- {
-
- /* Procedure get_currentValue */
-
- 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 2 */ NdrFcLong( 0x0 ), /* 0 */
-/* 6 */ NdrFcShort( 0x3 ), /* 3 */
-/* 8 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 10 */ NdrFcShort( 0x0 ), /* 0 */
-/* 12 */ NdrFcShort( 0x8 ), /* 8 */
-/* 14 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 16 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 18 */ NdrFcShort( 0x1 ), /* 1 */
-/* 20 */ NdrFcShort( 0x0 ), /* 0 */
-/* 22 */ NdrFcShort( 0x0 ), /* 0 */
-/* 24 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter currentValue */
-
-/* 26 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */
-/* 28 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 30 */ NdrFcShort( 0x3d2 ), /* Type Offset=978 */
-
- /* Return value */
-
-/* 32 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 34 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 36 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure setCurrentValue */
-
-/* 38 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 40 */ NdrFcLong( 0x0 ), /* 0 */
-/* 44 */ NdrFcShort( 0x4 ), /* 4 */
-/* 46 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 48 */ NdrFcShort( 0x0 ), /* 0 */
-/* 50 */ NdrFcShort( 0x8 ), /* 8 */
-/* 52 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */
- 0x2, /* 2 */
-/* 54 */ 0xa, /* 10 */
- 0x85, /* Ext Flags: new corr desc, srv corr check, has big amd64 byval param */
-/* 56 */ NdrFcShort( 0x0 ), /* 0 */
-/* 58 */ NdrFcShort( 0x1 ), /* 1 */
-/* 60 */ NdrFcShort( 0x0 ), /* 0 */
-/* 62 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter value */
-
-/* 64 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */
-/* 66 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 68 */ NdrFcShort( 0x3e4 ), /* Type Offset=996 */
-
- /* Return value */
-
-/* 70 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 72 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 74 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_maximumValue */
-
-/* 76 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 78 */ NdrFcLong( 0x0 ), /* 0 */
-/* 82 */ NdrFcShort( 0x5 ), /* 5 */
-/* 84 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 86 */ NdrFcShort( 0x0 ), /* 0 */
-/* 88 */ NdrFcShort( 0x8 ), /* 8 */
-/* 90 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 92 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 94 */ NdrFcShort( 0x1 ), /* 1 */
-/* 96 */ NdrFcShort( 0x0 ), /* 0 */
-/* 98 */ NdrFcShort( 0x0 ), /* 0 */
-/* 100 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter maximumValue */
-
-/* 102 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */
-/* 104 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 106 */ NdrFcShort( 0x3d2 ), /* Type Offset=978 */
-
- /* Return value */
-
-/* 108 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 110 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 112 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_minimumValue */
-
-/* 114 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 116 */ NdrFcLong( 0x0 ), /* 0 */
-/* 120 */ NdrFcShort( 0x6 ), /* 6 */
-/* 122 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
-/* 124 */ NdrFcShort( 0x0 ), /* 0 */
-/* 126 */ NdrFcShort( 0x8 ), /* 8 */
-/* 128 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 130 */ 0xa, /* 10 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 132 */ NdrFcShort( 0x1 ), /* 1 */
-/* 134 */ NdrFcShort( 0x0 ), /* 0 */
-/* 136 */ NdrFcShort( 0x0 ), /* 0 */
-/* 138 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter minimumValue */
-
-/* 140 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */
-/* 142 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
-/* 144 */ NdrFcShort( 0x3d2 ), /* Type Offset=978 */
-
- /* Return value */
-
-/* 146 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 148 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
-/* 150 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- 0x0
- }
- };
-
-static const AccessibleValue_MIDL_TYPE_FORMAT_STRING AccessibleValue__MIDL_TypeFormatString =
- {
- 0,
- {
- NdrFcShort( 0x0 ), /* 0 */
-/* 2 */
- 0x11, 0x4, /* FC_RP [alloced_on_stack] */
-/* 4 */ NdrFcShort( 0x3ce ), /* Offset= 974 (978) */
-/* 6 */
- 0x13, 0x0, /* FC_OP */
-/* 8 */ NdrFcShort( 0x3b6 ), /* Offset= 950 (958) */
-/* 10 */
- 0x2b, /* FC_NON_ENCAPSULATED_UNION */
- 0x9, /* FC_ULONG */
-/* 12 */ 0x7, /* Corr desc: FC_USHORT */
- 0x0, /* */
-/* 14 */ NdrFcShort( 0xfff8 ), /* -8 */
-/* 16 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 18 */ NdrFcShort( 0x2 ), /* Offset= 2 (20) */
-/* 20 */ NdrFcShort( 0x10 ), /* 16 */
-/* 22 */ NdrFcShort( 0x2f ), /* 47 */
-/* 24 */ NdrFcLong( 0x14 ), /* 20 */
-/* 28 */ NdrFcShort( 0x800b ), /* Simple arm type: FC_HYPER */
-/* 30 */ NdrFcLong( 0x3 ), /* 3 */
-/* 34 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
-/* 36 */ NdrFcLong( 0x11 ), /* 17 */
-/* 40 */ NdrFcShort( 0x8001 ), /* Simple arm type: FC_BYTE */
-/* 42 */ NdrFcLong( 0x2 ), /* 2 */
-/* 46 */ NdrFcShort( 0x8006 ), /* Simple arm type: FC_SHORT */
-/* 48 */ NdrFcLong( 0x4 ), /* 4 */
-/* 52 */ NdrFcShort( 0x800a ), /* Simple arm type: FC_FLOAT */
-/* 54 */ NdrFcLong( 0x5 ), /* 5 */
-/* 58 */ NdrFcShort( 0x800c ), /* Simple arm type: FC_DOUBLE */
-/* 60 */ NdrFcLong( 0xb ), /* 11 */
-/* 64 */ NdrFcShort( 0x8006 ), /* Simple arm type: FC_SHORT */
-/* 66 */ NdrFcLong( 0xa ), /* 10 */
-/* 70 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
-/* 72 */ NdrFcLong( 0x6 ), /* 6 */
-/* 76 */ NdrFcShort( 0xe8 ), /* Offset= 232 (308) */
-/* 78 */ NdrFcLong( 0x7 ), /* 7 */
-/* 82 */ NdrFcShort( 0x800c ), /* Simple arm type: FC_DOUBLE */
-/* 84 */ NdrFcLong( 0x8 ), /* 8 */
-/* 88 */ NdrFcShort( 0xe2 ), /* Offset= 226 (314) */
-/* 90 */ NdrFcLong( 0xd ), /* 13 */
-/* 94 */ NdrFcShort( 0xf6 ), /* Offset= 246 (340) */
-/* 96 */ NdrFcLong( 0x9 ), /* 9 */
-/* 100 */ NdrFcShort( 0x102 ), /* Offset= 258 (358) */
-/* 102 */ NdrFcLong( 0x2000 ), /* 8192 */
-/* 106 */ NdrFcShort( 0x10e ), /* Offset= 270 (376) */
-/* 108 */ NdrFcLong( 0x24 ), /* 36 */
-/* 112 */ NdrFcShort( 0x304 ), /* Offset= 772 (884) */
-/* 114 */ NdrFcLong( 0x4024 ), /* 16420 */
-/* 118 */ NdrFcShort( 0x2fe ), /* Offset= 766 (884) */
-/* 120 */ NdrFcLong( 0x4011 ), /* 16401 */
-/* 124 */ NdrFcShort( 0x2fc ), /* Offset= 764 (888) */
-/* 126 */ NdrFcLong( 0x4002 ), /* 16386 */
-/* 130 */ NdrFcShort( 0x2fa ), /* Offset= 762 (892) */
-/* 132 */ NdrFcLong( 0x4003 ), /* 16387 */
-/* 136 */ NdrFcShort( 0x2f8 ), /* Offset= 760 (896) */
-/* 138 */ NdrFcLong( 0x4014 ), /* 16404 */
-/* 142 */ NdrFcShort( 0x2f6 ), /* Offset= 758 (900) */
-/* 144 */ NdrFcLong( 0x4004 ), /* 16388 */
-/* 148 */ NdrFcShort( 0x2f4 ), /* Offset= 756 (904) */
-/* 150 */ NdrFcLong( 0x4005 ), /* 16389 */
-/* 154 */ NdrFcShort( 0x2f2 ), /* Offset= 754 (908) */
-/* 156 */ NdrFcLong( 0x400b ), /* 16395 */
-/* 160 */ NdrFcShort( 0x2dc ), /* Offset= 732 (892) */
-/* 162 */ NdrFcLong( 0x400a ), /* 16394 */
-/* 166 */ NdrFcShort( 0x2da ), /* Offset= 730 (896) */
-/* 168 */ NdrFcLong( 0x4006 ), /* 16390 */
-/* 172 */ NdrFcShort( 0x2e4 ), /* Offset= 740 (912) */
-/* 174 */ NdrFcLong( 0x4007 ), /* 16391 */
-/* 178 */ NdrFcShort( 0x2da ), /* Offset= 730 (908) */
-/* 180 */ NdrFcLong( 0x4008 ), /* 16392 */
-/* 184 */ NdrFcShort( 0x2dc ), /* Offset= 732 (916) */
-/* 186 */ NdrFcLong( 0x400d ), /* 16397 */
-/* 190 */ NdrFcShort( 0x2da ), /* Offset= 730 (920) */
-/* 192 */ NdrFcLong( 0x4009 ), /* 16393 */
-/* 196 */ NdrFcShort( 0x2d8 ), /* Offset= 728 (924) */
-/* 198 */ NdrFcLong( 0x6000 ), /* 24576 */
-/* 202 */ NdrFcShort( 0x2d6 ), /* Offset= 726 (928) */
-/* 204 */ NdrFcLong( 0x400c ), /* 16396 */
-/* 208 */ NdrFcShort( 0x2d4 ), /* Offset= 724 (932) */
-/* 210 */ NdrFcLong( 0x10 ), /* 16 */
-/* 214 */ NdrFcShort( 0x8002 ), /* Simple arm type: FC_CHAR */
-/* 216 */ NdrFcLong( 0x12 ), /* 18 */
-/* 220 */ NdrFcShort( 0x8006 ), /* Simple arm type: FC_SHORT */
-/* 222 */ NdrFcLong( 0x13 ), /* 19 */
-/* 226 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
-/* 228 */ NdrFcLong( 0x15 ), /* 21 */
-/* 232 */ NdrFcShort( 0x800b ), /* Simple arm type: FC_HYPER */
-/* 234 */ NdrFcLong( 0x16 ), /* 22 */
-/* 238 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
-/* 240 */ NdrFcLong( 0x17 ), /* 23 */
-/* 244 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
-/* 246 */ NdrFcLong( 0xe ), /* 14 */
-/* 250 */ NdrFcShort( 0x2b2 ), /* Offset= 690 (940) */
-/* 252 */ NdrFcLong( 0x400e ), /* 16398 */
-/* 256 */ NdrFcShort( 0x2b6 ), /* Offset= 694 (950) */
-/* 258 */ NdrFcLong( 0x4010 ), /* 16400 */
-/* 262 */ NdrFcShort( 0x2b4 ), /* Offset= 692 (954) */
-/* 264 */ NdrFcLong( 0x4012 ), /* 16402 */
-/* 268 */ NdrFcShort( 0x270 ), /* Offset= 624 (892) */
-/* 270 */ NdrFcLong( 0x4013 ), /* 16403 */
-/* 274 */ NdrFcShort( 0x26e ), /* Offset= 622 (896) */
-/* 276 */ NdrFcLong( 0x4015 ), /* 16405 */
-/* 280 */ NdrFcShort( 0x26c ), /* Offset= 620 (900) */
-/* 282 */ NdrFcLong( 0x4016 ), /* 16406 */
-/* 286 */ NdrFcShort( 0x262 ), /* Offset= 610 (896) */
-/* 288 */ NdrFcLong( 0x4017 ), /* 16407 */
-/* 292 */ NdrFcShort( 0x25c ), /* Offset= 604 (896) */
-/* 294 */ NdrFcLong( 0x0 ), /* 0 */
-/* 298 */ NdrFcShort( 0x0 ), /* Offset= 0 (298) */
-/* 300 */ NdrFcLong( 0x1 ), /* 1 */
-/* 304 */ NdrFcShort( 0x0 ), /* Offset= 0 (304) */
-/* 306 */ NdrFcShort( 0xffff ), /* Offset= -1 (305) */
-/* 308 */
- 0x15, /* FC_STRUCT */
- 0x7, /* 7 */
-/* 310 */ NdrFcShort( 0x8 ), /* 8 */
-/* 312 */ 0xb, /* FC_HYPER */
- 0x5b, /* FC_END */
-/* 314 */
- 0x13, 0x0, /* FC_OP */
-/* 316 */ NdrFcShort( 0xe ), /* Offset= 14 (330) */
-/* 318 */
- 0x1b, /* FC_CARRAY */
- 0x1, /* 1 */
-/* 320 */ NdrFcShort( 0x2 ), /* 2 */
-/* 322 */ 0x9, /* Corr desc: FC_ULONG */
- 0x0, /* */
-/* 324 */ NdrFcShort( 0xfffc ), /* -4 */
-/* 326 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 328 */ 0x6, /* FC_SHORT */
- 0x5b, /* FC_END */
-/* 330 */
- 0x17, /* FC_CSTRUCT */
- 0x3, /* 3 */
-/* 332 */ NdrFcShort( 0x8 ), /* 8 */
-/* 334 */ NdrFcShort( 0xfff0 ), /* Offset= -16 (318) */
-/* 336 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 338 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 340 */
- 0x2f, /* FC_IP */
- 0x5a, /* FC_CONSTANT_IID */
-/* 342 */ NdrFcLong( 0x0 ), /* 0 */
-/* 346 */ NdrFcShort( 0x0 ), /* 0 */
-/* 348 */ NdrFcShort( 0x0 ), /* 0 */
-/* 350 */ 0xc0, /* 192 */
- 0x0, /* 0 */
-/* 352 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 354 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 356 */ 0x0, /* 0 */
- 0x46, /* 70 */
-/* 358 */
- 0x2f, /* FC_IP */
- 0x5a, /* FC_CONSTANT_IID */
-/* 360 */ NdrFcLong( 0x20400 ), /* 132096 */
-/* 364 */ NdrFcShort( 0x0 ), /* 0 */
-/* 366 */ NdrFcShort( 0x0 ), /* 0 */
-/* 368 */ 0xc0, /* 192 */
- 0x0, /* 0 */
-/* 370 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 372 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 374 */ 0x0, /* 0 */
- 0x46, /* 70 */
-/* 376 */
- 0x13, 0x10, /* FC_OP [pointer_deref] */
-/* 378 */ NdrFcShort( 0x2 ), /* Offset= 2 (380) */
-/* 380 */
- 0x13, 0x0, /* FC_OP */
-/* 382 */ NdrFcShort( 0x1e4 ), /* Offset= 484 (866) */
-/* 384 */
- 0x2a, /* FC_ENCAPSULATED_UNION */
- 0x89, /* 137 */
-/* 386 */ NdrFcShort( 0x20 ), /* 32 */
-/* 388 */ NdrFcShort( 0xa ), /* 10 */
-/* 390 */ NdrFcLong( 0x8 ), /* 8 */
-/* 394 */ NdrFcShort( 0x50 ), /* Offset= 80 (474) */
-/* 396 */ NdrFcLong( 0xd ), /* 13 */
-/* 400 */ NdrFcShort( 0x70 ), /* Offset= 112 (512) */
-/* 402 */ NdrFcLong( 0x9 ), /* 9 */
-/* 406 */ NdrFcShort( 0x90 ), /* Offset= 144 (550) */
-/* 408 */ NdrFcLong( 0xc ), /* 12 */
-/* 412 */ NdrFcShort( 0xb0 ), /* Offset= 176 (588) */
-/* 414 */ NdrFcLong( 0x24 ), /* 36 */
-/* 418 */ NdrFcShort( 0x102 ), /* Offset= 258 (676) */
-/* 420 */ NdrFcLong( 0x800d ), /* 32781 */
-/* 424 */ NdrFcShort( 0x11e ), /* Offset= 286 (710) */
-/* 426 */ NdrFcLong( 0x10 ), /* 16 */
-/* 430 */ NdrFcShort( 0x138 ), /* Offset= 312 (742) */
-/* 432 */ NdrFcLong( 0x2 ), /* 2 */
-/* 436 */ NdrFcShort( 0x14e ), /* Offset= 334 (770) */
-/* 438 */ NdrFcLong( 0x3 ), /* 3 */
-/* 442 */ NdrFcShort( 0x164 ), /* Offset= 356 (798) */
-/* 444 */ NdrFcLong( 0x14 ), /* 20 */
-/* 448 */ NdrFcShort( 0x17a ), /* Offset= 378 (826) */
-/* 450 */ NdrFcShort( 0xffff ), /* Offset= -1 (449) */
-/* 452 */
- 0x21, /* FC_BOGUS_ARRAY */
- 0x3, /* 3 */
-/* 454 */ NdrFcShort( 0x0 ), /* 0 */
-/* 456 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 458 */ NdrFcShort( 0x0 ), /* 0 */
-/* 460 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 462 */ NdrFcLong( 0xffffffff ), /* -1 */
-/* 466 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 468 */
- 0x13, 0x0, /* FC_OP */
-/* 470 */ NdrFcShort( 0xff74 ), /* Offset= -140 (330) */
-/* 472 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 474 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 476 */ NdrFcShort( 0x10 ), /* 16 */
-/* 478 */ NdrFcShort( 0x0 ), /* 0 */
-/* 480 */ NdrFcShort( 0x6 ), /* Offset= 6 (486) */
-/* 482 */ 0x8, /* FC_LONG */
- 0x40, /* FC_STRUCTPAD4 */
-/* 484 */ 0x36, /* FC_POINTER */
- 0x5b, /* FC_END */
-/* 486 */
- 0x11, 0x0, /* FC_RP */
-/* 488 */ NdrFcShort( 0xffdc ), /* Offset= -36 (452) */
-/* 490 */
- 0x21, /* FC_BOGUS_ARRAY */
- 0x3, /* 3 */
-/* 492 */ NdrFcShort( 0x0 ), /* 0 */
-/* 494 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 496 */ NdrFcShort( 0x0 ), /* 0 */
-/* 498 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 500 */ NdrFcLong( 0xffffffff ), /* -1 */
-/* 504 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 506 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 508 */ NdrFcShort( 0xff58 ), /* Offset= -168 (340) */
-/* 510 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 512 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 514 */ NdrFcShort( 0x10 ), /* 16 */
-/* 516 */ NdrFcShort( 0x0 ), /* 0 */
-/* 518 */ NdrFcShort( 0x6 ), /* Offset= 6 (524) */
-/* 520 */ 0x8, /* FC_LONG */
- 0x40, /* FC_STRUCTPAD4 */
-/* 522 */ 0x36, /* FC_POINTER */
- 0x5b, /* FC_END */
-/* 524 */
- 0x11, 0x0, /* FC_RP */
-/* 526 */ NdrFcShort( 0xffdc ), /* Offset= -36 (490) */
-/* 528 */
- 0x21, /* FC_BOGUS_ARRAY */
- 0x3, /* 3 */
-/* 530 */ NdrFcShort( 0x0 ), /* 0 */
-/* 532 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 534 */ NdrFcShort( 0x0 ), /* 0 */
-/* 536 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 538 */ NdrFcLong( 0xffffffff ), /* -1 */
-/* 542 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 544 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 546 */ NdrFcShort( 0xff44 ), /* Offset= -188 (358) */
-/* 548 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 550 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 552 */ NdrFcShort( 0x10 ), /* 16 */
-/* 554 */ NdrFcShort( 0x0 ), /* 0 */
-/* 556 */ NdrFcShort( 0x6 ), /* Offset= 6 (562) */
-/* 558 */ 0x8, /* FC_LONG */
- 0x40, /* FC_STRUCTPAD4 */
-/* 560 */ 0x36, /* FC_POINTER */
- 0x5b, /* FC_END */
-/* 562 */
- 0x11, 0x0, /* FC_RP */
-/* 564 */ NdrFcShort( 0xffdc ), /* Offset= -36 (528) */
-/* 566 */
- 0x21, /* FC_BOGUS_ARRAY */
- 0x3, /* 3 */
-/* 568 */ NdrFcShort( 0x0 ), /* 0 */
-/* 570 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 572 */ NdrFcShort( 0x0 ), /* 0 */
-/* 574 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 576 */ NdrFcLong( 0xffffffff ), /* -1 */
-/* 580 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 582 */
- 0x13, 0x0, /* FC_OP */
-/* 584 */ NdrFcShort( 0x176 ), /* Offset= 374 (958) */
-/* 586 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 588 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 590 */ NdrFcShort( 0x10 ), /* 16 */
-/* 592 */ NdrFcShort( 0x0 ), /* 0 */
-/* 594 */ NdrFcShort( 0x6 ), /* Offset= 6 (600) */
-/* 596 */ 0x8, /* FC_LONG */
- 0x40, /* FC_STRUCTPAD4 */
-/* 598 */ 0x36, /* FC_POINTER */
- 0x5b, /* FC_END */
-/* 600 */
- 0x11, 0x0, /* FC_RP */
-/* 602 */ NdrFcShort( 0xffdc ), /* Offset= -36 (566) */
-/* 604 */
- 0x2f, /* FC_IP */
- 0x5a, /* FC_CONSTANT_IID */
-/* 606 */ NdrFcLong( 0x2f ), /* 47 */
-/* 610 */ NdrFcShort( 0x0 ), /* 0 */
-/* 612 */ NdrFcShort( 0x0 ), /* 0 */
-/* 614 */ 0xc0, /* 192 */
- 0x0, /* 0 */
-/* 616 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 618 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 620 */ 0x0, /* 0 */
- 0x46, /* 70 */
-/* 622 */
- 0x1b, /* FC_CARRAY */
- 0x0, /* 0 */
-/* 624 */ NdrFcShort( 0x1 ), /* 1 */
-/* 626 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 628 */ NdrFcShort( 0x4 ), /* 4 */
-/* 630 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 632 */ 0x1, /* FC_BYTE */
- 0x5b, /* FC_END */
-/* 634 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 636 */ NdrFcShort( 0x18 ), /* 24 */
-/* 638 */ NdrFcShort( 0x0 ), /* 0 */
-/* 640 */ NdrFcShort( 0xa ), /* Offset= 10 (650) */
-/* 642 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 644 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 646 */ NdrFcShort( 0xffd6 ), /* Offset= -42 (604) */
-/* 648 */ 0x36, /* FC_POINTER */
- 0x5b, /* FC_END */
-/* 650 */
- 0x13, 0x0, /* FC_OP */
-/* 652 */ NdrFcShort( 0xffe2 ), /* Offset= -30 (622) */
-/* 654 */
- 0x21, /* FC_BOGUS_ARRAY */
- 0x3, /* 3 */
-/* 656 */ NdrFcShort( 0x0 ), /* 0 */
-/* 658 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 660 */ NdrFcShort( 0x0 ), /* 0 */
-/* 662 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 664 */ NdrFcLong( 0xffffffff ), /* -1 */
-/* 668 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 670 */
- 0x13, 0x0, /* FC_OP */
-/* 672 */ NdrFcShort( 0xffda ), /* Offset= -38 (634) */
-/* 674 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 676 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 678 */ NdrFcShort( 0x10 ), /* 16 */
-/* 680 */ NdrFcShort( 0x0 ), /* 0 */
-/* 682 */ NdrFcShort( 0x6 ), /* Offset= 6 (688) */
-/* 684 */ 0x8, /* FC_LONG */
- 0x40, /* FC_STRUCTPAD4 */
-/* 686 */ 0x36, /* FC_POINTER */
- 0x5b, /* FC_END */
-/* 688 */
- 0x11, 0x0, /* FC_RP */
-/* 690 */ NdrFcShort( 0xffdc ), /* Offset= -36 (654) */
-/* 692 */
- 0x1d, /* FC_SMFARRAY */
- 0x0, /* 0 */
-/* 694 */ NdrFcShort( 0x8 ), /* 8 */
-/* 696 */ 0x1, /* FC_BYTE */
- 0x5b, /* FC_END */
-/* 698 */
- 0x15, /* FC_STRUCT */
- 0x3, /* 3 */
-/* 700 */ NdrFcShort( 0x10 ), /* 16 */
-/* 702 */ 0x8, /* FC_LONG */
- 0x6, /* FC_SHORT */
-/* 704 */ 0x6, /* FC_SHORT */
- 0x4c, /* FC_EMBEDDED_COMPLEX */
-/* 706 */ 0x0, /* 0 */
- NdrFcShort( 0xfff1 ), /* Offset= -15 (692) */
- 0x5b, /* FC_END */
-/* 710 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 712 */ NdrFcShort( 0x20 ), /* 32 */
-/* 714 */ NdrFcShort( 0x0 ), /* 0 */
-/* 716 */ NdrFcShort( 0xa ), /* Offset= 10 (726) */
-/* 718 */ 0x8, /* FC_LONG */
- 0x40, /* FC_STRUCTPAD4 */
-/* 720 */ 0x36, /* FC_POINTER */
- 0x4c, /* FC_EMBEDDED_COMPLEX */
-/* 722 */ 0x0, /* 0 */
- NdrFcShort( 0xffe7 ), /* Offset= -25 (698) */
- 0x5b, /* FC_END */
-/* 726 */
- 0x11, 0x0, /* FC_RP */
-/* 728 */ NdrFcShort( 0xff12 ), /* Offset= -238 (490) */
-/* 730 */
- 0x1b, /* FC_CARRAY */
- 0x0, /* 0 */
-/* 732 */ NdrFcShort( 0x1 ), /* 1 */
-/* 734 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 736 */ NdrFcShort( 0x0 ), /* 0 */
-/* 738 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 740 */ 0x1, /* FC_BYTE */
- 0x5b, /* FC_END */
-/* 742 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 744 */ NdrFcShort( 0x10 ), /* 16 */
-/* 746 */ NdrFcShort( 0x0 ), /* 0 */
-/* 748 */ NdrFcShort( 0x6 ), /* Offset= 6 (754) */
-/* 750 */ 0x8, /* FC_LONG */
- 0x40, /* FC_STRUCTPAD4 */
-/* 752 */ 0x36, /* FC_POINTER */
- 0x5b, /* FC_END */
-/* 754 */
- 0x13, 0x0, /* FC_OP */
-/* 756 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (730) */
-/* 758 */
- 0x1b, /* FC_CARRAY */
- 0x1, /* 1 */
-/* 760 */ NdrFcShort( 0x2 ), /* 2 */
-/* 762 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 764 */ NdrFcShort( 0x0 ), /* 0 */
-/* 766 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 768 */ 0x6, /* FC_SHORT */
- 0x5b, /* FC_END */
-/* 770 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 772 */ NdrFcShort( 0x10 ), /* 16 */
-/* 774 */ NdrFcShort( 0x0 ), /* 0 */
-/* 776 */ NdrFcShort( 0x6 ), /* Offset= 6 (782) */
-/* 778 */ 0x8, /* FC_LONG */
- 0x40, /* FC_STRUCTPAD4 */
-/* 780 */ 0x36, /* FC_POINTER */
- 0x5b, /* FC_END */
-/* 782 */
- 0x13, 0x0, /* FC_OP */
-/* 784 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (758) */
-/* 786 */
- 0x1b, /* FC_CARRAY */
- 0x3, /* 3 */
-/* 788 */ NdrFcShort( 0x4 ), /* 4 */
-/* 790 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 792 */ NdrFcShort( 0x0 ), /* 0 */
-/* 794 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 796 */ 0x8, /* FC_LONG */
- 0x5b, /* FC_END */
-/* 798 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 800 */ NdrFcShort( 0x10 ), /* 16 */
-/* 802 */ NdrFcShort( 0x0 ), /* 0 */
-/* 804 */ NdrFcShort( 0x6 ), /* Offset= 6 (810) */
-/* 806 */ 0x8, /* FC_LONG */
- 0x40, /* FC_STRUCTPAD4 */
-/* 808 */ 0x36, /* FC_POINTER */
- 0x5b, /* FC_END */
-/* 810 */
- 0x13, 0x0, /* FC_OP */
-/* 812 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (786) */
-/* 814 */
- 0x1b, /* FC_CARRAY */
- 0x7, /* 7 */
-/* 816 */ NdrFcShort( 0x8 ), /* 8 */
-/* 818 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 820 */ NdrFcShort( 0x0 ), /* 0 */
-/* 822 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 824 */ 0xb, /* FC_HYPER */
- 0x5b, /* FC_END */
-/* 826 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 828 */ NdrFcShort( 0x10 ), /* 16 */
-/* 830 */ NdrFcShort( 0x0 ), /* 0 */
-/* 832 */ NdrFcShort( 0x6 ), /* Offset= 6 (838) */
-/* 834 */ 0x8, /* FC_LONG */
- 0x40, /* FC_STRUCTPAD4 */
-/* 836 */ 0x36, /* FC_POINTER */
- 0x5b, /* FC_END */
-/* 838 */
- 0x13, 0x0, /* FC_OP */
-/* 840 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (814) */
-/* 842 */
- 0x15, /* FC_STRUCT */
- 0x3, /* 3 */
-/* 844 */ NdrFcShort( 0x8 ), /* 8 */
-/* 846 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 848 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 850 */
- 0x1b, /* FC_CARRAY */
- 0x3, /* 3 */
-/* 852 */ NdrFcShort( 0x8 ), /* 8 */
-/* 854 */ 0x7, /* Corr desc: FC_USHORT */
- 0x0, /* */
-/* 856 */ NdrFcShort( 0xffc8 ), /* -56 */
-/* 858 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 860 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 862 */ NdrFcShort( 0xffec ), /* Offset= -20 (842) */
-/* 864 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 866 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 868 */ NdrFcShort( 0x38 ), /* 56 */
-/* 870 */ NdrFcShort( 0xffec ), /* Offset= -20 (850) */
-/* 872 */ NdrFcShort( 0x0 ), /* Offset= 0 (872) */
-/* 874 */ 0x6, /* FC_SHORT */
- 0x6, /* FC_SHORT */
-/* 876 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 878 */ 0x40, /* FC_STRUCTPAD4 */
- 0x4c, /* FC_EMBEDDED_COMPLEX */
-/* 880 */ 0x0, /* 0 */
- NdrFcShort( 0xfe0f ), /* Offset= -497 (384) */
- 0x5b, /* FC_END */
-/* 884 */
- 0x13, 0x0, /* FC_OP */
-/* 886 */ NdrFcShort( 0xff04 ), /* Offset= -252 (634) */
-/* 888 */
- 0x13, 0x8, /* FC_OP [simple_pointer] */
-/* 890 */ 0x1, /* FC_BYTE */
- 0x5c, /* FC_PAD */
-/* 892 */
- 0x13, 0x8, /* FC_OP [simple_pointer] */
-/* 894 */ 0x6, /* FC_SHORT */
- 0x5c, /* FC_PAD */
-/* 896 */
- 0x13, 0x8, /* FC_OP [simple_pointer] */
-/* 898 */ 0x8, /* FC_LONG */
- 0x5c, /* FC_PAD */
-/* 900 */
- 0x13, 0x8, /* FC_OP [simple_pointer] */
-/* 902 */ 0xb, /* FC_HYPER */
- 0x5c, /* FC_PAD */
-/* 904 */
- 0x13, 0x8, /* FC_OP [simple_pointer] */
-/* 906 */ 0xa, /* FC_FLOAT */
- 0x5c, /* FC_PAD */
-/* 908 */
- 0x13, 0x8, /* FC_OP [simple_pointer] */
-/* 910 */ 0xc, /* FC_DOUBLE */
- 0x5c, /* FC_PAD */
-/* 912 */
- 0x13, 0x0, /* FC_OP */
-/* 914 */ NdrFcShort( 0xfda2 ), /* Offset= -606 (308) */
-/* 916 */
- 0x13, 0x10, /* FC_OP [pointer_deref] */
-/* 918 */ NdrFcShort( 0xfda4 ), /* Offset= -604 (314) */
-/* 920 */
- 0x13, 0x10, /* FC_OP [pointer_deref] */
-/* 922 */ NdrFcShort( 0xfdba ), /* Offset= -582 (340) */
-/* 924 */
- 0x13, 0x10, /* FC_OP [pointer_deref] */
-/* 926 */ NdrFcShort( 0xfdc8 ), /* Offset= -568 (358) */
-/* 928 */
- 0x13, 0x10, /* FC_OP [pointer_deref] */
-/* 930 */ NdrFcShort( 0xfdd6 ), /* Offset= -554 (376) */
-/* 932 */
- 0x13, 0x10, /* FC_OP [pointer_deref] */
-/* 934 */ NdrFcShort( 0x2 ), /* Offset= 2 (936) */
-/* 936 */
- 0x13, 0x0, /* FC_OP */
-/* 938 */ NdrFcShort( 0x14 ), /* Offset= 20 (958) */
-/* 940 */
- 0x15, /* FC_STRUCT */
- 0x7, /* 7 */
-/* 942 */ NdrFcShort( 0x10 ), /* 16 */
-/* 944 */ 0x6, /* FC_SHORT */
- 0x1, /* FC_BYTE */
-/* 946 */ 0x1, /* FC_BYTE */
- 0x8, /* FC_LONG */
-/* 948 */ 0xb, /* FC_HYPER */
- 0x5b, /* FC_END */
-/* 950 */
- 0x13, 0x0, /* FC_OP */
-/* 952 */ NdrFcShort( 0xfff4 ), /* Offset= -12 (940) */
-/* 954 */
- 0x13, 0x8, /* FC_OP [simple_pointer] */
-/* 956 */ 0x2, /* FC_CHAR */
- 0x5c, /* FC_PAD */
-/* 958 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x7, /* 7 */
-/* 960 */ NdrFcShort( 0x20 ), /* 32 */
-/* 962 */ NdrFcShort( 0x0 ), /* 0 */
-/* 964 */ NdrFcShort( 0x0 ), /* Offset= 0 (964) */
-/* 966 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 968 */ 0x6, /* FC_SHORT */
- 0x6, /* FC_SHORT */
-/* 970 */ 0x6, /* FC_SHORT */
- 0x6, /* FC_SHORT */
-/* 972 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 974 */ NdrFcShort( 0xfc3c ), /* Offset= -964 (10) */
-/* 976 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 978 */ 0xb4, /* FC_USER_MARSHAL */
- 0x83, /* 131 */
-/* 980 */ NdrFcShort( 0x0 ), /* 0 */
-/* 982 */ NdrFcShort( 0x18 ), /* 24 */
-/* 984 */ NdrFcShort( 0x0 ), /* 0 */
-/* 986 */ NdrFcShort( 0xfc2c ), /* Offset= -980 (6) */
-/* 988 */
- 0x11, 0x0, /* FC_RP */
-/* 990 */ NdrFcShort( 0x6 ), /* Offset= 6 (996) */
-/* 992 */
- 0x12, 0x0, /* FC_UP */
-/* 994 */ NdrFcShort( 0xffdc ), /* Offset= -36 (958) */
-/* 996 */ 0xb4, /* FC_USER_MARSHAL */
- 0x83, /* 131 */
-/* 998 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1000 */ NdrFcShort( 0x18 ), /* 24 */
-/* 1002 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1004 */ NdrFcShort( 0xfff4 ), /* Offset= -12 (992) */
-
- 0x0
- }
- };
-
-static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ] =
- {
-
- {
- VARIANT_UserSize
- ,VARIANT_UserMarshal
- ,VARIANT_UserUnmarshal
- ,VARIANT_UserFree
- }
-
- };
-
-
-
-/* Object interface: IUnknown, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
-
-
-/* Object interface: IAccessibleValue, ver. 0.0,
- GUID={0x35855B5B,0xC566,0x4fd0,{0xA7,0xB1,0xE6,0x54,0x65,0x60,0x03,0x94}} */
-
-#pragma code_seg(".orpc")
-static const unsigned short IAccessibleValue_FormatStringOffsetTable[] =
- {
- 0,
- 38,
- 76,
- 114
- };
-
-static const MIDL_STUBLESS_PROXY_INFO IAccessibleValue_ProxyInfo =
- {
- &Object_StubDesc,
- AccessibleValue__MIDL_ProcFormatString.Format,
- &IAccessibleValue_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0
- };
-
-
-static const MIDL_SERVER_INFO IAccessibleValue_ServerInfo =
- {
- &Object_StubDesc,
- 0,
- AccessibleValue__MIDL_ProcFormatString.Format,
- &IAccessibleValue_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0,
- 0};
-CINTERFACE_PROXY_VTABLE(7) _IAccessibleValueProxyVtbl =
-{
- &IAccessibleValue_ProxyInfo,
- &IID_IAccessibleValue,
- IUnknown_QueryInterface_Proxy,
- IUnknown_AddRef_Proxy,
- IUnknown_Release_Proxy ,
- (void *) (INT_PTR) -1 /* IAccessibleValue::get_currentValue */ ,
- (void *) (INT_PTR) -1 /* IAccessibleValue::setCurrentValue */ ,
- (void *) (INT_PTR) -1 /* IAccessibleValue::get_maximumValue */ ,
- (void *) (INT_PTR) -1 /* IAccessibleValue::get_minimumValue */
-};
-
-const CInterfaceStubVtbl _IAccessibleValueStubVtbl =
-{
- &IID_IAccessibleValue,
- &IAccessibleValue_ServerInfo,
- 7,
- 0, /* pure interpreted */
- CStdStubBuffer_METHODS
-};
-
-static const MIDL_STUB_DESC Object_StubDesc =
- {
- 0,
- NdrOleAllocate,
- NdrOleFree,
- 0,
- 0,
- 0,
- 0,
- 0,
- AccessibleValue__MIDL_TypeFormatString.Format,
- 1, /* -error bounds_check flag */
- 0x50002, /* Ndr library version */
- 0,
- 0x700022b, /* MIDL Version 7.0.555 */
- 0,
- UserMarshalRoutines,
- 0, /* notify & notify_flag routine table */
- 0x1, /* MIDL flag */
- 0, /* cs routines */
- 0, /* proxy/server info */
- 0
- };
-
-const CInterfaceProxyVtbl * const _AccessibleValue_ProxyVtblList[] =
-{
- ( CInterfaceProxyVtbl *) &_IAccessibleValueProxyVtbl,
- 0
-};
-
-const CInterfaceStubVtbl * const _AccessibleValue_StubVtblList[] =
-{
- ( CInterfaceStubVtbl *) &_IAccessibleValueStubVtbl,
- 0
-};
-
-PCInterfaceName const _AccessibleValue_InterfaceNamesList[] =
-{
- "IAccessibleValue",
- 0
-};
-
-
-#define _AccessibleValue_CHECK_IID(n) IID_GENERIC_CHECK_IID( _AccessibleValue, pIID, n)
-
-int __stdcall _AccessibleValue_IID_Lookup( const IID * pIID, int * pIndex )
-{
-
- if(!_AccessibleValue_CHECK_IID(0))
- {
- *pIndex = 0;
- return 1;
- }
-
- return 0;
-}
-
-const ExtendedProxyFileInfo AccessibleValue_ProxyFileInfo =
-{
- (PCInterfaceProxyVtblList *) & _AccessibleValue_ProxyVtblList,
- (PCInterfaceStubVtblList *) & _AccessibleValue_StubVtblList,
- (const PCInterfaceName * ) & _AccessibleValue_InterfaceNamesList,
- 0, /* no delegation */
- & _AccessibleValue_IID_Lookup,
- 1,
- 2,
- 0, /* table of [async_uuid] interfaces */
- 0, /* Filler1 */
- 0, /* Filler2 */
- 0 /* Filler3 */
-};
-#if _MSC_VER >= 1200
-#pragma warning(pop)
-#endif
-
-
-#endif /* defined(_M_AMD64)*/
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/IA2CommonTypes.h b/src/3rdparty/iaccessible2/generated/amd64/IA2CommonTypes.h
deleted file mode 100644
index 5b5a313541..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/IA2CommonTypes.h
+++ /dev/null
@@ -1,102 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:54:00 2012
- */
-/* Compiler settings for IA2CommonTypes.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-
-#ifndef __IA2CommonTypes_h__
-#define __IA2CommonTypes_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-/* interface __MIDL_itf_IA2CommonTypes_0000_0000 */
-/* [local] */
-
-
-enum IA2ScrollType
- { IA2_SCROLL_TYPE_TOP_LEFT = 0,
- IA2_SCROLL_TYPE_BOTTOM_RIGHT = ( IA2_SCROLL_TYPE_TOP_LEFT + 1 ) ,
- IA2_SCROLL_TYPE_TOP_EDGE = ( IA2_SCROLL_TYPE_BOTTOM_RIGHT + 1 ) ,
- IA2_SCROLL_TYPE_BOTTOM_EDGE = ( IA2_SCROLL_TYPE_TOP_EDGE + 1 ) ,
- IA2_SCROLL_TYPE_LEFT_EDGE = ( IA2_SCROLL_TYPE_BOTTOM_EDGE + 1 ) ,
- IA2_SCROLL_TYPE_RIGHT_EDGE = ( IA2_SCROLL_TYPE_LEFT_EDGE + 1 ) ,
- IA2_SCROLL_TYPE_ANYWHERE = ( IA2_SCROLL_TYPE_RIGHT_EDGE + 1 )
- } ;
-
-enum IA2CoordinateType
- { IA2_COORDTYPE_SCREEN_RELATIVE = 0,
- IA2_COORDTYPE_PARENT_RELATIVE = ( IA2_COORDTYPE_SCREEN_RELATIVE + 1 )
- } ;
-
-enum IA2TextSpecialOffsets
- { IA2_TEXT_OFFSET_LENGTH = -1,
- IA2_TEXT_OFFSET_CARET = -2
- } ;
-
-enum IA2TableModelChangeType
- { IA2_TABLE_MODEL_CHANGE_INSERT = 0,
- IA2_TABLE_MODEL_CHANGE_DELETE = ( IA2_TABLE_MODEL_CHANGE_INSERT + 1 ) ,
- IA2_TABLE_MODEL_CHANGE_UPDATE = ( IA2_TABLE_MODEL_CHANGE_DELETE + 1 )
- } ;
-typedef struct IA2TableModelChange
- {
- enum IA2TableModelChangeType type;
- long firstRow;
- long lastRow;
- long firstColumn;
- long lastColumn;
- } IA2TableModelChange;
-
-
-
-extern RPC_IF_HANDLE __MIDL_itf_IA2CommonTypes_0000_0000_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_IA2CommonTypes_0000_0000_v0_0_s_ifspec;
-
-/* Additional Prototypes for ALL interfaces */
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/IA2TypeLibrary.h b/src/3rdparty/iaccessible2/generated/amd64/IA2TypeLibrary.h
deleted file mode 100644
index 31142c6b44..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/IA2TypeLibrary.h
+++ /dev/null
@@ -1,103 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:54:00 2012
- */
-/* Compiler settings for IA2TypeLibrary.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-
-#ifndef __IA2TypeLibrary_h__
-#define __IA2TypeLibrary_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-/* interface __MIDL_itf_IA2TypeLibrary_0000_0000 */
-/* [local] */
-
-
-// Type Library Definitions
-
-
-
-extern RPC_IF_HANDLE __MIDL_itf_IA2TypeLibrary_0000_0000_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_IA2TypeLibrary_0000_0000_v0_0_s_ifspec;
-
-
-#ifndef __IAccessible2Lib_LIBRARY_DEFINED__
-#define __IAccessible2Lib_LIBRARY_DEFINED__
-
-/* library IAccessible2Lib */
-/* [hidden][version][helpstring][uuid] */
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-EXTERN_C const IID LIBID_IAccessible2Lib;
-#endif /* __IAccessible2Lib_LIBRARY_DEFINED__ */
-
-/* Additional Prototypes for ALL interfaces */
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/IA2TypeLibrary.tlb b/src/3rdparty/iaccessible2/generated/amd64/IA2TypeLibrary.tlb
deleted file mode 100644
index 44e7cdc173..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/IA2TypeLibrary.tlb
+++ /dev/null
Binary files differ
diff --git a/src/3rdparty/iaccessible2/generated/amd64/IA2TypeLibrary_i.c b/src/3rdparty/iaccessible2/generated/amd64/IA2TypeLibrary_i.c
deleted file mode 100644
index f3eabd2c49..0000000000
--- a/src/3rdparty/iaccessible2/generated/amd64/IA2TypeLibrary_i.c
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
-
-/* link this file in with the server and any clients */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:54:00 2012
- */
-/* Compiler settings for IA2TypeLibrary.idl:
- Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#include <rpc.h>
-#include <rpcndr.h>
-
-#ifdef _MIDL_USE_GUIDDEF_
-
-#ifndef INITGUID
-#define INITGUID
-#include <guiddef.h>
-#undef INITGUID
-#else
-#include <guiddef.h>
-#endif
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
-
-#else // !_MIDL_USE_GUIDDEF_
-
-#ifndef __IID_DEFINED__
-#define __IID_DEFINED__
-
-typedef struct _IID
-{
- unsigned long x;
- unsigned short s1;
- unsigned short s2;
- unsigned char c[8];
-} IID;
-
-#endif // __IID_DEFINED__
-
-#ifndef CLSID_DEFINED
-#define CLSID_DEFINED
-typedef IID CLSID;
-#endif // CLSID_DEFINED
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
-
-#endif !_MIDL_USE_GUIDDEF_
-
-MIDL_DEFINE_GUID(IID, LIBID_IAccessible2Lib,0xc974e070,0x3787,0x490a,0x87,0xb0,0xe3,0x33,0xb0,0x6c,0xa1,0xe2);
-
-#undef MIDL_DEFINE_GUID
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/src/3rdparty/iaccessible2/generated/amd64/dlldata.c b/src/3rdparty/iaccessible2/generated/amd64/dlldata.c
index e1e15a1fc0..1685d8340a 100644
--- a/src/3rdparty/iaccessible2/generated/amd64/dlldata.c
+++ b/src/3rdparty/iaccessible2/generated/amd64/dlldata.c
@@ -19,38 +19,12 @@
extern "C" {
#endif
-EXTERN_PROXY_FILE( Accessible2 )
-EXTERN_PROXY_FILE( AccessibleAction )
-EXTERN_PROXY_FILE( AccessibleApplication )
-EXTERN_PROXY_FILE( AccessibleComponent )
-EXTERN_PROXY_FILE( AccessibleEditableText )
-EXTERN_PROXY_FILE( AccessibleHyperlink )
-EXTERN_PROXY_FILE( AccessibleHypertext )
-EXTERN_PROXY_FILE( AccessibleImage )
-EXTERN_PROXY_FILE( AccessibleRelation )
-EXTERN_PROXY_FILE( AccessibleTable )
-EXTERN_PROXY_FILE( AccessibleTable2 )
-EXTERN_PROXY_FILE( AccessibleTableCell )
-EXTERN_PROXY_FILE( AccessibleText )
-EXTERN_PROXY_FILE( AccessibleValue )
+EXTERN_PROXY_FILE( ia2_api_all )
PROXYFILE_LIST_START
/* Start of list */
- REFERENCE_PROXY_FILE( Accessible2 ),
- REFERENCE_PROXY_FILE( AccessibleAction ),
- REFERENCE_PROXY_FILE( AccessibleApplication ),
- REFERENCE_PROXY_FILE( AccessibleComponent ),
- REFERENCE_PROXY_FILE( AccessibleEditableText ),
- REFERENCE_PROXY_FILE( AccessibleHyperlink ),
- REFERENCE_PROXY_FILE( AccessibleHypertext ),
- REFERENCE_PROXY_FILE( AccessibleImage ),
- REFERENCE_PROXY_FILE( AccessibleRelation ),
- REFERENCE_PROXY_FILE( AccessibleTable ),
- REFERENCE_PROXY_FILE( AccessibleTable2 ),
- REFERENCE_PROXY_FILE( AccessibleTableCell ),
- REFERENCE_PROXY_FILE( AccessibleText ),
- REFERENCE_PROXY_FILE( AccessibleValue ),
+ REFERENCE_PROXY_FILE( ia2_api_all ),
/* End of list */
PROXYFILE_LIST_END
diff --git a/src/3rdparty/iaccessible2/generated/amd64/ia2_api_all.h b/src/3rdparty/iaccessible2/generated/amd64/ia2_api_all.h
new file mode 100644
index 0000000000..4f7b7d07d7
--- /dev/null
+++ b/src/3rdparty/iaccessible2/generated/amd64/ia2_api_all.h
@@ -0,0 +1,4667 @@
+
+
+/* this ALWAYS GENERATED file contains the definitions for the interfaces */
+
+
+ /* File created by MIDL compiler version 7.00.0555 */
+/* at Mon Aug 11 14:34:44 2014
+ */
+/* Compiler settings for ia2_api_all.idl:
+ Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
+ protocol : dce , ms_ext, c_ext, robust
+ error checks: allocation ref bounds_check enum stub_data
+ VC __declspec() decoration level:
+ __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+ DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+/* @@MIDL_FILE_HEADING( ) */
+
+#pragma warning( disable: 4049 ) /* more than 64k source lines */
+
+
+/* verify that the <rpcndr.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+
+#include "rpc.h"
+#include "rpcndr.h"
+
+#ifndef __RPCNDR_H_VERSION__
+#error this stub requires an updated version of <rpcndr.h>
+#endif // __RPCNDR_H_VERSION__
+
+#ifndef COM_NO_WINDOWS_H
+#include "windows.h"
+#include "ole2.h"
+#endif /*COM_NO_WINDOWS_H*/
+
+#ifndef __ia2_api_all_h__
+#define __ia2_api_all_h__
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#pragma once
+#endif
+
+/* Forward Declarations */
+
+#ifndef __IAccessibleRelation_FWD_DEFINED__
+#define __IAccessibleRelation_FWD_DEFINED__
+typedef interface IAccessibleRelation IAccessibleRelation;
+#endif /* __IAccessibleRelation_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleAction_FWD_DEFINED__
+#define __IAccessibleAction_FWD_DEFINED__
+typedef interface IAccessibleAction IAccessibleAction;
+#endif /* __IAccessibleAction_FWD_DEFINED__ */
+
+
+#ifndef __IAccessible2_FWD_DEFINED__
+#define __IAccessible2_FWD_DEFINED__
+typedef interface IAccessible2 IAccessible2;
+#endif /* __IAccessible2_FWD_DEFINED__ */
+
+
+#ifndef __IAccessible2_2_FWD_DEFINED__
+#define __IAccessible2_2_FWD_DEFINED__
+typedef interface IAccessible2_2 IAccessible2_2;
+#endif /* __IAccessible2_2_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleComponent_FWD_DEFINED__
+#define __IAccessibleComponent_FWD_DEFINED__
+typedef interface IAccessibleComponent IAccessibleComponent;
+#endif /* __IAccessibleComponent_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleValue_FWD_DEFINED__
+#define __IAccessibleValue_FWD_DEFINED__
+typedef interface IAccessibleValue IAccessibleValue;
+#endif /* __IAccessibleValue_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleText_FWD_DEFINED__
+#define __IAccessibleText_FWD_DEFINED__
+typedef interface IAccessibleText IAccessibleText;
+#endif /* __IAccessibleText_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleText2_FWD_DEFINED__
+#define __IAccessibleText2_FWD_DEFINED__
+typedef interface IAccessibleText2 IAccessibleText2;
+#endif /* __IAccessibleText2_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleEditableText_FWD_DEFINED__
+#define __IAccessibleEditableText_FWD_DEFINED__
+typedef interface IAccessibleEditableText IAccessibleEditableText;
+#endif /* __IAccessibleEditableText_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleHyperlink_FWD_DEFINED__
+#define __IAccessibleHyperlink_FWD_DEFINED__
+typedef interface IAccessibleHyperlink IAccessibleHyperlink;
+#endif /* __IAccessibleHyperlink_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleHypertext_FWD_DEFINED__
+#define __IAccessibleHypertext_FWD_DEFINED__
+typedef interface IAccessibleHypertext IAccessibleHypertext;
+#endif /* __IAccessibleHypertext_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleHypertext2_FWD_DEFINED__
+#define __IAccessibleHypertext2_FWD_DEFINED__
+typedef interface IAccessibleHypertext2 IAccessibleHypertext2;
+#endif /* __IAccessibleHypertext2_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleTable_FWD_DEFINED__
+#define __IAccessibleTable_FWD_DEFINED__
+typedef interface IAccessibleTable IAccessibleTable;
+#endif /* __IAccessibleTable_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleTable2_FWD_DEFINED__
+#define __IAccessibleTable2_FWD_DEFINED__
+typedef interface IAccessibleTable2 IAccessibleTable2;
+#endif /* __IAccessibleTable2_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleTableCell_FWD_DEFINED__
+#define __IAccessibleTableCell_FWD_DEFINED__
+typedef interface IAccessibleTableCell IAccessibleTableCell;
+#endif /* __IAccessibleTableCell_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleImage_FWD_DEFINED__
+#define __IAccessibleImage_FWD_DEFINED__
+typedef interface IAccessibleImage IAccessibleImage;
+#endif /* __IAccessibleImage_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleApplication_FWD_DEFINED__
+#define __IAccessibleApplication_FWD_DEFINED__
+typedef interface IAccessibleApplication IAccessibleApplication;
+#endif /* __IAccessibleApplication_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleDocument_FWD_DEFINED__
+#define __IAccessibleDocument_FWD_DEFINED__
+typedef interface IAccessibleDocument IAccessibleDocument;
+#endif /* __IAccessibleDocument_FWD_DEFINED__ */
+
+
+#ifndef __IAccessible2_FWD_DEFINED__
+#define __IAccessible2_FWD_DEFINED__
+typedef interface IAccessible2 IAccessible2;
+#endif /* __IAccessible2_FWD_DEFINED__ */
+
+
+#ifndef __IAccessible2_2_FWD_DEFINED__
+#define __IAccessible2_2_FWD_DEFINED__
+typedef interface IAccessible2_2 IAccessible2_2;
+#endif /* __IAccessible2_2_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleAction_FWD_DEFINED__
+#define __IAccessibleAction_FWD_DEFINED__
+typedef interface IAccessibleAction IAccessibleAction;
+#endif /* __IAccessibleAction_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleApplication_FWD_DEFINED__
+#define __IAccessibleApplication_FWD_DEFINED__
+typedef interface IAccessibleApplication IAccessibleApplication;
+#endif /* __IAccessibleApplication_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleComponent_FWD_DEFINED__
+#define __IAccessibleComponent_FWD_DEFINED__
+typedef interface IAccessibleComponent IAccessibleComponent;
+#endif /* __IAccessibleComponent_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleDocument_FWD_DEFINED__
+#define __IAccessibleDocument_FWD_DEFINED__
+typedef interface IAccessibleDocument IAccessibleDocument;
+#endif /* __IAccessibleDocument_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleEditableText_FWD_DEFINED__
+#define __IAccessibleEditableText_FWD_DEFINED__
+typedef interface IAccessibleEditableText IAccessibleEditableText;
+#endif /* __IAccessibleEditableText_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleHyperlink_FWD_DEFINED__
+#define __IAccessibleHyperlink_FWD_DEFINED__
+typedef interface IAccessibleHyperlink IAccessibleHyperlink;
+#endif /* __IAccessibleHyperlink_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleText_FWD_DEFINED__
+#define __IAccessibleText_FWD_DEFINED__
+typedef interface IAccessibleText IAccessibleText;
+#endif /* __IAccessibleText_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleHypertext_FWD_DEFINED__
+#define __IAccessibleHypertext_FWD_DEFINED__
+typedef interface IAccessibleHypertext IAccessibleHypertext;
+#endif /* __IAccessibleHypertext_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleHypertext2_FWD_DEFINED__
+#define __IAccessibleHypertext2_FWD_DEFINED__
+typedef interface IAccessibleHypertext2 IAccessibleHypertext2;
+#endif /* __IAccessibleHypertext2_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleImage_FWD_DEFINED__
+#define __IAccessibleImage_FWD_DEFINED__
+typedef interface IAccessibleImage IAccessibleImage;
+#endif /* __IAccessibleImage_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleRelation_FWD_DEFINED__
+#define __IAccessibleRelation_FWD_DEFINED__
+typedef interface IAccessibleRelation IAccessibleRelation;
+#endif /* __IAccessibleRelation_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleTable_FWD_DEFINED__
+#define __IAccessibleTable_FWD_DEFINED__
+typedef interface IAccessibleTable IAccessibleTable;
+#endif /* __IAccessibleTable_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleTable2_FWD_DEFINED__
+#define __IAccessibleTable2_FWD_DEFINED__
+typedef interface IAccessibleTable2 IAccessibleTable2;
+#endif /* __IAccessibleTable2_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleTableCell_FWD_DEFINED__
+#define __IAccessibleTableCell_FWD_DEFINED__
+typedef interface IAccessibleTableCell IAccessibleTableCell;
+#endif /* __IAccessibleTableCell_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleText2_FWD_DEFINED__
+#define __IAccessibleText2_FWD_DEFINED__
+typedef interface IAccessibleText2 IAccessibleText2;
+#endif /* __IAccessibleText2_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleValue_FWD_DEFINED__
+#define __IAccessibleValue_FWD_DEFINED__
+typedef interface IAccessibleValue IAccessibleValue;
+#endif /* __IAccessibleValue_FWD_DEFINED__ */
+
+
+/* header files for imported files */
+#include "objidl.h"
+#include "oaidl.h"
+#include "oleacc.h"
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+
+/* interface __MIDL_itf_ia2_api_all_0000_0000 */
+/* [local] */
+
+
+enum IA2ScrollType
+ { IA2_SCROLL_TYPE_TOP_LEFT = 0,
+ IA2_SCROLL_TYPE_BOTTOM_RIGHT = ( IA2_SCROLL_TYPE_TOP_LEFT + 1 ) ,
+ IA2_SCROLL_TYPE_TOP_EDGE = ( IA2_SCROLL_TYPE_BOTTOM_RIGHT + 1 ) ,
+ IA2_SCROLL_TYPE_BOTTOM_EDGE = ( IA2_SCROLL_TYPE_TOP_EDGE + 1 ) ,
+ IA2_SCROLL_TYPE_LEFT_EDGE = ( IA2_SCROLL_TYPE_BOTTOM_EDGE + 1 ) ,
+ IA2_SCROLL_TYPE_RIGHT_EDGE = ( IA2_SCROLL_TYPE_LEFT_EDGE + 1 ) ,
+ IA2_SCROLL_TYPE_ANYWHERE = ( IA2_SCROLL_TYPE_RIGHT_EDGE + 1 )
+ } ;
+
+enum IA2CoordinateType
+ { IA2_COORDTYPE_SCREEN_RELATIVE = 0,
+ IA2_COORDTYPE_PARENT_RELATIVE = ( IA2_COORDTYPE_SCREEN_RELATIVE + 1 )
+ } ;
+
+enum IA2TextSpecialOffsets
+ { IA2_TEXT_OFFSET_LENGTH = -1,
+ IA2_TEXT_OFFSET_CARET = -2
+ } ;
+
+enum IA2TableModelChangeType
+ { IA2_TABLE_MODEL_CHANGE_INSERT = 0,
+ IA2_TABLE_MODEL_CHANGE_DELETE = ( IA2_TABLE_MODEL_CHANGE_INSERT + 1 ) ,
+ IA2_TABLE_MODEL_CHANGE_UPDATE = ( IA2_TABLE_MODEL_CHANGE_DELETE + 1 )
+ } ;
+typedef struct IA2TableModelChange
+ {
+ enum IA2TableModelChangeType type;
+ long firstRow;
+ long lastRow;
+ long firstColumn;
+ long lastColumn;
+ } IA2TableModelChange;
+
+#define IA2_RELATION_CONTAINING_APPLICATION ( L"containingApplication" )
+
+#define IA2_RELATION_CONTAINING_DOCUMENT ( L"containingDocument" )
+
+#define IA2_RELATION_CONTAINING_TAB_PANE ( L"containingTabPane" )
+
+#define IA2_RELATION_CONTAINING_WINDOW ( L"containingWindow" )
+
+#define IA2_RELATION_CONTROLLED_BY ( L"controlledBy" )
+
+#define IA2_RELATION_CONTROLLER_FOR ( L"controllerFor" )
+
+#define IA2_RELATION_DESCRIBED_BY ( L"describedBy" )
+
+#define IA2_RELATION_DESCRIPTION_FOR ( L"descriptionFor" )
+
+#define IA2_RELATION_EMBEDDED_BY ( L"embeddedBy" )
+
+#define IA2_RELATION_EMBEDS ( L"embeds" )
+
+#define IA2_RELATION_FLOWS_FROM ( L"flowsFrom" )
+
+#define IA2_RELATION_FLOWS_TO ( L"flowsTo" )
+
+#define IA2_RELATION_LABEL_FOR ( L"labelFor" )
+
+#define IA2_RELATION_LABELED_BY ( L"labelledBy" )
+
+#define IA2_RELATION_LABELLED_BY ( L"labelledBy" )
+
+#define IA2_RELATION_MEMBER_OF ( L"memberOf" )
+
+#define IA2_RELATION_NEXT_TABBABLE ( L"nextTabbable" )
+
+#define IA2_RELATION_NODE_CHILD_OF ( L"nodeChildOf" )
+
+#define IA2_RELATION_NODE_PARENT_OF ( L"nodeParentOf" )
+
+#define IA2_RELATION_PARENT_WINDOW_OF ( L"parentWindowOf" )
+
+#define IA2_RELATION_POPUP_FOR ( L"popupFor" )
+
+#define IA2_RELATION_PREVIOUS_TABBABLE ( L"previousTabbable" )
+
+#define IA2_RELATION_SUBWINDOW_OF ( L"subwindowOf" )
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0000_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0000_v0_0_s_ifspec;
+
+#ifndef __IAccessibleRelation_INTERFACE_DEFINED__
+#define __IAccessibleRelation_INTERFACE_DEFINED__
+
+/* interface IAccessibleRelation */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessibleRelation;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("7CDF86EE-C3DA-496a-BDA4-281B336E1FDC")
+ IAccessibleRelation : public IUnknown
+ {
+ public:
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_relationType(
+ /* [retval][out] */ BSTR *relationType) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_localizedRelationType(
+ /* [retval][out] */ BSTR *localizedRelationType) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nTargets(
+ /* [retval][out] */ long *nTargets) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_target(
+ /* [in] */ long targetIndex,
+ /* [retval][out] */ IUnknown **target) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_targets(
+ /* [in] */ long maxTargets,
+ /* [length_is][size_is][out] */ IUnknown **targets,
+ /* [retval][out] */ long *nTargets) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessibleRelationVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessibleRelation * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessibleRelation * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessibleRelation * This);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relationType )(
+ IAccessibleRelation * This,
+ /* [retval][out] */ BSTR *relationType);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedRelationType )(
+ IAccessibleRelation * This,
+ /* [retval][out] */ BSTR *localizedRelationType);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nTargets )(
+ IAccessibleRelation * This,
+ /* [retval][out] */ long *nTargets);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_target )(
+ IAccessibleRelation * This,
+ /* [in] */ long targetIndex,
+ /* [retval][out] */ IUnknown **target);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_targets )(
+ IAccessibleRelation * This,
+ /* [in] */ long maxTargets,
+ /* [length_is][size_is][out] */ IUnknown **targets,
+ /* [retval][out] */ long *nTargets);
+
+ END_INTERFACE
+ } IAccessibleRelationVtbl;
+
+ interface IAccessibleRelation
+ {
+ CONST_VTBL struct IAccessibleRelationVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessibleRelation_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessibleRelation_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessibleRelation_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessibleRelation_get_relationType(This,relationType) \
+ ( (This)->lpVtbl -> get_relationType(This,relationType) )
+
+#define IAccessibleRelation_get_localizedRelationType(This,localizedRelationType) \
+ ( (This)->lpVtbl -> get_localizedRelationType(This,localizedRelationType) )
+
+#define IAccessibleRelation_get_nTargets(This,nTargets) \
+ ( (This)->lpVtbl -> get_nTargets(This,nTargets) )
+
+#define IAccessibleRelation_get_target(This,targetIndex,target) \
+ ( (This)->lpVtbl -> get_target(This,targetIndex,target) )
+
+#define IAccessibleRelation_get_targets(This,maxTargets,targets,nTargets) \
+ ( (This)->lpVtbl -> get_targets(This,maxTargets,targets,nTargets) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessibleRelation_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_ia2_api_all_0000_0001 */
+/* [local] */
+
+
+enum IA2Actions
+ { IA2_ACTION_OPEN = -1,
+ IA2_ACTION_COMPLETE = -2,
+ IA2_ACTION_CLOSE = -3
+ } ;
+
+
+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0001_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0001_v0_0_s_ifspec;
+
+#ifndef __IAccessibleAction_INTERFACE_DEFINED__
+#define __IAccessibleAction_INTERFACE_DEFINED__
+
+/* interface IAccessibleAction */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessibleAction;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("B70D9F59-3B5A-4dba-AB9E-22012F607DF5")
+ IAccessibleAction : public IUnknown
+ {
+ public:
+ virtual HRESULT STDMETHODCALLTYPE nActions(
+ /* [retval][out] */ long *nActions) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE doAction(
+ /* [in] */ long actionIndex) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_description(
+ /* [in] */ long actionIndex,
+ /* [retval][out] */ BSTR *description) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_keyBinding(
+ /* [in] */ long actionIndex,
+ /* [in] */ long nMaxBindings,
+ /* [length_is][length_is][size_is][size_is][out] */ BSTR **keyBindings,
+ /* [retval][out] */ long *nBindings) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_name(
+ /* [in] */ long actionIndex,
+ /* [retval][out] */ BSTR *name) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_localizedName(
+ /* [in] */ long actionIndex,
+ /* [retval][out] */ BSTR *localizedName) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessibleActionVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessibleAction * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessibleAction * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessibleAction * This);
+
+ HRESULT ( STDMETHODCALLTYPE *nActions )(
+ IAccessibleAction * This,
+ /* [retval][out] */ long *nActions);
+
+ HRESULT ( STDMETHODCALLTYPE *doAction )(
+ IAccessibleAction * This,
+ /* [in] */ long actionIndex);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_description )(
+ IAccessibleAction * This,
+ /* [in] */ long actionIndex,
+ /* [retval][out] */ BSTR *description);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_keyBinding )(
+ IAccessibleAction * This,
+ /* [in] */ long actionIndex,
+ /* [in] */ long nMaxBindings,
+ /* [length_is][length_is][size_is][size_is][out] */ BSTR **keyBindings,
+ /* [retval][out] */ long *nBindings);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_name )(
+ IAccessibleAction * This,
+ /* [in] */ long actionIndex,
+ /* [retval][out] */ BSTR *name);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedName )(
+ IAccessibleAction * This,
+ /* [in] */ long actionIndex,
+ /* [retval][out] */ BSTR *localizedName);
+
+ END_INTERFACE
+ } IAccessibleActionVtbl;
+
+ interface IAccessibleAction
+ {
+ CONST_VTBL struct IAccessibleActionVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessibleAction_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessibleAction_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessibleAction_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessibleAction_nActions(This,nActions) \
+ ( (This)->lpVtbl -> nActions(This,nActions) )
+
+#define IAccessibleAction_doAction(This,actionIndex) \
+ ( (This)->lpVtbl -> doAction(This,actionIndex) )
+
+#define IAccessibleAction_get_description(This,actionIndex,description) \
+ ( (This)->lpVtbl -> get_description(This,actionIndex,description) )
+
+#define IAccessibleAction_get_keyBinding(This,actionIndex,nMaxBindings,keyBindings,nBindings) \
+ ( (This)->lpVtbl -> get_keyBinding(This,actionIndex,nMaxBindings,keyBindings,nBindings) )
+
+#define IAccessibleAction_get_name(This,actionIndex,name) \
+ ( (This)->lpVtbl -> get_name(This,actionIndex,name) )
+
+#define IAccessibleAction_get_localizedName(This,actionIndex,localizedName) \
+ ( (This)->lpVtbl -> get_localizedName(This,actionIndex,localizedName) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessibleAction_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_ia2_api_all_0000_0002 */
+/* [local] */
+
+
+enum IA2Role
+ { IA2_ROLE_UNKNOWN = 0,
+ IA2_ROLE_CANVAS = 0x401,
+ IA2_ROLE_CAPTION = ( IA2_ROLE_CANVAS + 1 ) ,
+ IA2_ROLE_CHECK_MENU_ITEM = ( IA2_ROLE_CAPTION + 1 ) ,
+ IA2_ROLE_COLOR_CHOOSER = ( IA2_ROLE_CHECK_MENU_ITEM + 1 ) ,
+ IA2_ROLE_DATE_EDITOR = ( IA2_ROLE_COLOR_CHOOSER + 1 ) ,
+ IA2_ROLE_DESKTOP_ICON = ( IA2_ROLE_DATE_EDITOR + 1 ) ,
+ IA2_ROLE_DESKTOP_PANE = ( IA2_ROLE_DESKTOP_ICON + 1 ) ,
+ IA2_ROLE_DIRECTORY_PANE = ( IA2_ROLE_DESKTOP_PANE + 1 ) ,
+ IA2_ROLE_EDITBAR = ( IA2_ROLE_DIRECTORY_PANE + 1 ) ,
+ IA2_ROLE_EMBEDDED_OBJECT = ( IA2_ROLE_EDITBAR + 1 ) ,
+ IA2_ROLE_ENDNOTE = ( IA2_ROLE_EMBEDDED_OBJECT + 1 ) ,
+ IA2_ROLE_FILE_CHOOSER = ( IA2_ROLE_ENDNOTE + 1 ) ,
+ IA2_ROLE_FONT_CHOOSER = ( IA2_ROLE_FILE_CHOOSER + 1 ) ,
+ IA2_ROLE_FOOTER = ( IA2_ROLE_FONT_CHOOSER + 1 ) ,
+ IA2_ROLE_FOOTNOTE = ( IA2_ROLE_FOOTER + 1 ) ,
+ IA2_ROLE_FORM = ( IA2_ROLE_FOOTNOTE + 1 ) ,
+ IA2_ROLE_FRAME = ( IA2_ROLE_FORM + 1 ) ,
+ IA2_ROLE_GLASS_PANE = ( IA2_ROLE_FRAME + 1 ) ,
+ IA2_ROLE_HEADER = ( IA2_ROLE_GLASS_PANE + 1 ) ,
+ IA2_ROLE_HEADING = ( IA2_ROLE_HEADER + 1 ) ,
+ IA2_ROLE_ICON = ( IA2_ROLE_HEADING + 1 ) ,
+ IA2_ROLE_IMAGE_MAP = ( IA2_ROLE_ICON + 1 ) ,
+ IA2_ROLE_INPUT_METHOD_WINDOW = ( IA2_ROLE_IMAGE_MAP + 1 ) ,
+ IA2_ROLE_INTERNAL_FRAME = ( IA2_ROLE_INPUT_METHOD_WINDOW + 1 ) ,
+ IA2_ROLE_LABEL = ( IA2_ROLE_INTERNAL_FRAME + 1 ) ,
+ IA2_ROLE_LAYERED_PANE = ( IA2_ROLE_LABEL + 1 ) ,
+ IA2_ROLE_NOTE = ( IA2_ROLE_LAYERED_PANE + 1 ) ,
+ IA2_ROLE_OPTION_PANE = ( IA2_ROLE_NOTE + 1 ) ,
+ IA2_ROLE_PAGE = ( IA2_ROLE_OPTION_PANE + 1 ) ,
+ IA2_ROLE_PARAGRAPH = ( IA2_ROLE_PAGE + 1 ) ,
+ IA2_ROLE_RADIO_MENU_ITEM = ( IA2_ROLE_PARAGRAPH + 1 ) ,
+ IA2_ROLE_REDUNDANT_OBJECT = ( IA2_ROLE_RADIO_MENU_ITEM + 1 ) ,
+ IA2_ROLE_ROOT_PANE = ( IA2_ROLE_REDUNDANT_OBJECT + 1 ) ,
+ IA2_ROLE_RULER = ( IA2_ROLE_ROOT_PANE + 1 ) ,
+ IA2_ROLE_SCROLL_PANE = ( IA2_ROLE_RULER + 1 ) ,
+ IA2_ROLE_SECTION = ( IA2_ROLE_SCROLL_PANE + 1 ) ,
+ IA2_ROLE_SHAPE = ( IA2_ROLE_SECTION + 1 ) ,
+ IA2_ROLE_SPLIT_PANE = ( IA2_ROLE_SHAPE + 1 ) ,
+ IA2_ROLE_TEAR_OFF_MENU = ( IA2_ROLE_SPLIT_PANE + 1 ) ,
+ IA2_ROLE_TERMINAL = ( IA2_ROLE_TEAR_OFF_MENU + 1 ) ,
+ IA2_ROLE_TEXT_FRAME = ( IA2_ROLE_TERMINAL + 1 ) ,
+ IA2_ROLE_TOGGLE_BUTTON = ( IA2_ROLE_TEXT_FRAME + 1 ) ,
+ IA2_ROLE_VIEW_PORT = ( IA2_ROLE_TOGGLE_BUTTON + 1 ) ,
+ IA2_ROLE_COMPLEMENTARY_CONTENT = ( IA2_ROLE_VIEW_PORT + 1 )
+ } ;
+typedef long AccessibleStates;
+
+
+enum IA2States
+ { IA2_STATE_ACTIVE = 0x1,
+ IA2_STATE_ARMED = 0x2,
+ IA2_STATE_DEFUNCT = 0x4,
+ IA2_STATE_EDITABLE = 0x8,
+ IA2_STATE_HORIZONTAL = 0x10,
+ IA2_STATE_ICONIFIED = 0x20,
+ IA2_STATE_INVALID_ENTRY = 0x40,
+ IA2_STATE_MANAGES_DESCENDANTS = 0x80,
+ IA2_STATE_MODAL = 0x100,
+ IA2_STATE_MULTI_LINE = 0x200,
+ IA2_STATE_OPAQUE = 0x400,
+ IA2_STATE_REQUIRED = 0x800,
+ IA2_STATE_SELECTABLE_TEXT = 0x1000,
+ IA2_STATE_SINGLE_LINE = 0x2000,
+ IA2_STATE_STALE = 0x4000,
+ IA2_STATE_SUPPORTS_AUTOCOMPLETION = 0x8000,
+ IA2_STATE_TRANSIENT = 0x10000,
+ IA2_STATE_VERTICAL = 0x20000,
+ IA2_STATE_CHECKABLE = 0x40000,
+ IA2_STATE_PINNED = 0x80000
+ } ;
+typedef struct IA2Locale
+ {
+ BSTR language;
+ BSTR country;
+ BSTR variant;
+ } IA2Locale;
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0002_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0002_v0_0_s_ifspec;
+
+#ifndef __IAccessible2_INTERFACE_DEFINED__
+#define __IAccessible2_INTERFACE_DEFINED__
+
+/* interface IAccessible2 */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessible2;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("E89F726E-C4F4-4c19-BB19-B647D7FA8478")
+ IAccessible2 : public IAccessible
+ {
+ public:
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nRelations(
+ /* [retval][out] */ long *nRelations) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_relation(
+ /* [in] */ long relationIndex,
+ /* [retval][out] */ IAccessibleRelation **relation) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_relations(
+ /* [in] */ long maxRelations,
+ /* [length_is][size_is][out] */ IAccessibleRelation **relations,
+ /* [retval][out] */ long *nRelations) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE role(
+ /* [retval][out] */ long *role) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE scrollTo(
+ /* [in] */ enum IA2ScrollType scrollType) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE scrollToPoint(
+ /* [in] */ enum IA2CoordinateType coordinateType,
+ /* [in] */ long x,
+ /* [in] */ long y) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_groupPosition(
+ /* [out] */ long *groupLevel,
+ /* [out] */ long *similarItemsInGroup,
+ /* [retval][out] */ long *positionInGroup) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_states(
+ /* [retval][out] */ AccessibleStates *states) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_extendedRole(
+ /* [retval][out] */ BSTR *extendedRole) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_localizedExtendedRole(
+ /* [retval][out] */ BSTR *localizedExtendedRole) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nExtendedStates(
+ /* [retval][out] */ long *nExtendedStates) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_extendedStates(
+ /* [in] */ long maxExtendedStates,
+ /* [length_is][length_is][size_is][size_is][out] */ BSTR **extendedStates,
+ /* [retval][out] */ long *nExtendedStates) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_localizedExtendedStates(
+ /* [in] */ long maxLocalizedExtendedStates,
+ /* [length_is][length_is][size_is][size_is][out] */ BSTR **localizedExtendedStates,
+ /* [retval][out] */ long *nLocalizedExtendedStates) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_uniqueID(
+ /* [retval][out] */ long *uniqueID) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_windowHandle(
+ /* [retval][out] */ HWND *windowHandle) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_indexInParent(
+ /* [retval][out] */ long *indexInParent) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_locale(
+ /* [retval][out] */ IA2Locale *locale) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_attributes(
+ /* [retval][out] */ BSTR *attributes) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessible2Vtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessible2 * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessible2 * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessible2 * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IAccessible2 * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IAccessible2 * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IAccessible2 * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [range][in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IAccessible2 * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accParent )(
+ IAccessible2 * This,
+ /* [retval][out] */ IDispatch **ppdispParent);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accChildCount )(
+ IAccessible2 * This,
+ /* [retval][out] */ long *pcountChildren);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accChild )(
+ IAccessible2 * This,
+ /* [in] */ VARIANT varChild,
+ /* [retval][out] */ IDispatch **ppdispChild);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accName )(
+ IAccessible2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ BSTR *pszName);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accValue )(
+ IAccessible2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ BSTR *pszValue);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accDescription )(
+ IAccessible2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ BSTR *pszDescription);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accRole )(
+ IAccessible2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ VARIANT *pvarRole);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accState )(
+ IAccessible2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ VARIANT *pvarState);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accHelp )(
+ IAccessible2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ BSTR *pszHelp);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accHelpTopic )(
+ IAccessible2 * This,
+ /* [out] */ BSTR *pszHelpFile,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ long *pidTopic);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accKeyboardShortcut )(
+ IAccessible2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ BSTR *pszKeyboardShortcut);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accFocus )(
+ IAccessible2 * This,
+ /* [retval][out] */ VARIANT *pvarChild);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accSelection )(
+ IAccessible2 * This,
+ /* [retval][out] */ VARIANT *pvarChildren);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accDefaultAction )(
+ IAccessible2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ BSTR *pszDefaultAction);
+
+ /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accSelect )(
+ IAccessible2 * This,
+ /* [in] */ long flagsSelect,
+ /* [optional][in] */ VARIANT varChild);
+
+ /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accLocation )(
+ IAccessible2 * This,
+ /* [out] */ long *pxLeft,
+ /* [out] */ long *pyTop,
+ /* [out] */ long *pcxWidth,
+ /* [out] */ long *pcyHeight,
+ /* [optional][in] */ VARIANT varChild);
+
+ /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accNavigate )(
+ IAccessible2 * This,
+ /* [in] */ long navDir,
+ /* [optional][in] */ VARIANT varStart,
+ /* [retval][out] */ VARIANT *pvarEndUpAt);
+
+ /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accHitTest )(
+ IAccessible2 * This,
+ /* [in] */ long xLeft,
+ /* [in] */ long yTop,
+ /* [retval][out] */ VARIANT *pvarChild);
+
+ /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accDoDefaultAction )(
+ IAccessible2 * This,
+ /* [optional][in] */ VARIANT varChild);
+
+ /* [id][propput][hidden] */ HRESULT ( STDMETHODCALLTYPE *put_accName )(
+ IAccessible2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [in] */ BSTR szName);
+
+ /* [id][propput][hidden] */ HRESULT ( STDMETHODCALLTYPE *put_accValue )(
+ IAccessible2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [in] */ BSTR szValue);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nRelations )(
+ IAccessible2 * This,
+ /* [retval][out] */ long *nRelations);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relation )(
+ IAccessible2 * This,
+ /* [in] */ long relationIndex,
+ /* [retval][out] */ IAccessibleRelation **relation);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relations )(
+ IAccessible2 * This,
+ /* [in] */ long maxRelations,
+ /* [length_is][size_is][out] */ IAccessibleRelation **relations,
+ /* [retval][out] */ long *nRelations);
+
+ HRESULT ( STDMETHODCALLTYPE *role )(
+ IAccessible2 * This,
+ /* [retval][out] */ long *role);
+
+ HRESULT ( STDMETHODCALLTYPE *scrollTo )(
+ IAccessible2 * This,
+ /* [in] */ enum IA2ScrollType scrollType);
+
+ HRESULT ( STDMETHODCALLTYPE *scrollToPoint )(
+ IAccessible2 * This,
+ /* [in] */ enum IA2CoordinateType coordinateType,
+ /* [in] */ long x,
+ /* [in] */ long y);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_groupPosition )(
+ IAccessible2 * This,
+ /* [out] */ long *groupLevel,
+ /* [out] */ long *similarItemsInGroup,
+ /* [retval][out] */ long *positionInGroup);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_states )(
+ IAccessible2 * This,
+ /* [retval][out] */ AccessibleStates *states);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_extendedRole )(
+ IAccessible2 * This,
+ /* [retval][out] */ BSTR *extendedRole);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedExtendedRole )(
+ IAccessible2 * This,
+ /* [retval][out] */ BSTR *localizedExtendedRole);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nExtendedStates )(
+ IAccessible2 * This,
+ /* [retval][out] */ long *nExtendedStates);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_extendedStates )(
+ IAccessible2 * This,
+ /* [in] */ long maxExtendedStates,
+ /* [length_is][length_is][size_is][size_is][out] */ BSTR **extendedStates,
+ /* [retval][out] */ long *nExtendedStates);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedExtendedStates )(
+ IAccessible2 * This,
+ /* [in] */ long maxLocalizedExtendedStates,
+ /* [length_is][length_is][size_is][size_is][out] */ BSTR **localizedExtendedStates,
+ /* [retval][out] */ long *nLocalizedExtendedStates);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_uniqueID )(
+ IAccessible2 * This,
+ /* [retval][out] */ long *uniqueID);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_windowHandle )(
+ IAccessible2 * This,
+ /* [retval][out] */ HWND *windowHandle);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_indexInParent )(
+ IAccessible2 * This,
+ /* [retval][out] */ long *indexInParent);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_locale )(
+ IAccessible2 * This,
+ /* [retval][out] */ IA2Locale *locale);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attributes )(
+ IAccessible2 * This,
+ /* [retval][out] */ BSTR *attributes);
+
+ END_INTERFACE
+ } IAccessible2Vtbl;
+
+ interface IAccessible2
+ {
+ CONST_VTBL struct IAccessible2Vtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessible2_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessible2_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessible2_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessible2_GetTypeInfoCount(This,pctinfo) \
+ ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
+
+#define IAccessible2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
+
+#define IAccessible2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
+
+#define IAccessible2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
+
+
+#define IAccessible2_get_accParent(This,ppdispParent) \
+ ( (This)->lpVtbl -> get_accParent(This,ppdispParent) )
+
+#define IAccessible2_get_accChildCount(This,pcountChildren) \
+ ( (This)->lpVtbl -> get_accChildCount(This,pcountChildren) )
+
+#define IAccessible2_get_accChild(This,varChild,ppdispChild) \
+ ( (This)->lpVtbl -> get_accChild(This,varChild,ppdispChild) )
+
+#define IAccessible2_get_accName(This,varChild,pszName) \
+ ( (This)->lpVtbl -> get_accName(This,varChild,pszName) )
+
+#define IAccessible2_get_accValue(This,varChild,pszValue) \
+ ( (This)->lpVtbl -> get_accValue(This,varChild,pszValue) )
+
+#define IAccessible2_get_accDescription(This,varChild,pszDescription) \
+ ( (This)->lpVtbl -> get_accDescription(This,varChild,pszDescription) )
+
+#define IAccessible2_get_accRole(This,varChild,pvarRole) \
+ ( (This)->lpVtbl -> get_accRole(This,varChild,pvarRole) )
+
+#define IAccessible2_get_accState(This,varChild,pvarState) \
+ ( (This)->lpVtbl -> get_accState(This,varChild,pvarState) )
+
+#define IAccessible2_get_accHelp(This,varChild,pszHelp) \
+ ( (This)->lpVtbl -> get_accHelp(This,varChild,pszHelp) )
+
+#define IAccessible2_get_accHelpTopic(This,pszHelpFile,varChild,pidTopic) \
+ ( (This)->lpVtbl -> get_accHelpTopic(This,pszHelpFile,varChild,pidTopic) )
+
+#define IAccessible2_get_accKeyboardShortcut(This,varChild,pszKeyboardShortcut) \
+ ( (This)->lpVtbl -> get_accKeyboardShortcut(This,varChild,pszKeyboardShortcut) )
+
+#define IAccessible2_get_accFocus(This,pvarChild) \
+ ( (This)->lpVtbl -> get_accFocus(This,pvarChild) )
+
+#define IAccessible2_get_accSelection(This,pvarChildren) \
+ ( (This)->lpVtbl -> get_accSelection(This,pvarChildren) )
+
+#define IAccessible2_get_accDefaultAction(This,varChild,pszDefaultAction) \
+ ( (This)->lpVtbl -> get_accDefaultAction(This,varChild,pszDefaultAction) )
+
+#define IAccessible2_accSelect(This,flagsSelect,varChild) \
+ ( (This)->lpVtbl -> accSelect(This,flagsSelect,varChild) )
+
+#define IAccessible2_accLocation(This,pxLeft,pyTop,pcxWidth,pcyHeight,varChild) \
+ ( (This)->lpVtbl -> accLocation(This,pxLeft,pyTop,pcxWidth,pcyHeight,varChild) )
+
+#define IAccessible2_accNavigate(This,navDir,varStart,pvarEndUpAt) \
+ ( (This)->lpVtbl -> accNavigate(This,navDir,varStart,pvarEndUpAt) )
+
+#define IAccessible2_accHitTest(This,xLeft,yTop,pvarChild) \
+ ( (This)->lpVtbl -> accHitTest(This,xLeft,yTop,pvarChild) )
+
+#define IAccessible2_accDoDefaultAction(This,varChild) \
+ ( (This)->lpVtbl -> accDoDefaultAction(This,varChild) )
+
+#define IAccessible2_put_accName(This,varChild,szName) \
+ ( (This)->lpVtbl -> put_accName(This,varChild,szName) )
+
+#define IAccessible2_put_accValue(This,varChild,szValue) \
+ ( (This)->lpVtbl -> put_accValue(This,varChild,szValue) )
+
+
+#define IAccessible2_get_nRelations(This,nRelations) \
+ ( (This)->lpVtbl -> get_nRelations(This,nRelations) )
+
+#define IAccessible2_get_relation(This,relationIndex,relation) \
+ ( (This)->lpVtbl -> get_relation(This,relationIndex,relation) )
+
+#define IAccessible2_get_relations(This,maxRelations,relations,nRelations) \
+ ( (This)->lpVtbl -> get_relations(This,maxRelations,relations,nRelations) )
+
+#define IAccessible2_role(This,role) \
+ ( (This)->lpVtbl -> role(This,role) )
+
+#define IAccessible2_scrollTo(This,scrollType) \
+ ( (This)->lpVtbl -> scrollTo(This,scrollType) )
+
+#define IAccessible2_scrollToPoint(This,coordinateType,x,y) \
+ ( (This)->lpVtbl -> scrollToPoint(This,coordinateType,x,y) )
+
+#define IAccessible2_get_groupPosition(This,groupLevel,similarItemsInGroup,positionInGroup) \
+ ( (This)->lpVtbl -> get_groupPosition(This,groupLevel,similarItemsInGroup,positionInGroup) )
+
+#define IAccessible2_get_states(This,states) \
+ ( (This)->lpVtbl -> get_states(This,states) )
+
+#define IAccessible2_get_extendedRole(This,extendedRole) \
+ ( (This)->lpVtbl -> get_extendedRole(This,extendedRole) )
+
+#define IAccessible2_get_localizedExtendedRole(This,localizedExtendedRole) \
+ ( (This)->lpVtbl -> get_localizedExtendedRole(This,localizedExtendedRole) )
+
+#define IAccessible2_get_nExtendedStates(This,nExtendedStates) \
+ ( (This)->lpVtbl -> get_nExtendedStates(This,nExtendedStates) )
+
+#define IAccessible2_get_extendedStates(This,maxExtendedStates,extendedStates,nExtendedStates) \
+ ( (This)->lpVtbl -> get_extendedStates(This,maxExtendedStates,extendedStates,nExtendedStates) )
+
+#define IAccessible2_get_localizedExtendedStates(This,maxLocalizedExtendedStates,localizedExtendedStates,nLocalizedExtendedStates) \
+ ( (This)->lpVtbl -> get_localizedExtendedStates(This,maxLocalizedExtendedStates,localizedExtendedStates,nLocalizedExtendedStates) )
+
+#define IAccessible2_get_uniqueID(This,uniqueID) \
+ ( (This)->lpVtbl -> get_uniqueID(This,uniqueID) )
+
+#define IAccessible2_get_windowHandle(This,windowHandle) \
+ ( (This)->lpVtbl -> get_windowHandle(This,windowHandle) )
+
+#define IAccessible2_get_indexInParent(This,indexInParent) \
+ ( (This)->lpVtbl -> get_indexInParent(This,indexInParent) )
+
+#define IAccessible2_get_locale(This,locale) \
+ ( (This)->lpVtbl -> get_locale(This,locale) )
+
+#define IAccessible2_get_attributes(This,attributes) \
+ ( (This)->lpVtbl -> get_attributes(This,attributes) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessible2_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAccessible2_2_INTERFACE_DEFINED__
+#define __IAccessible2_2_INTERFACE_DEFINED__
+
+/* interface IAccessible2_2 */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessible2_2;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("6C9430E9-299D-4E6F-BD01-A82A1E88D3FF")
+ IAccessible2_2 : public IAccessible2
+ {
+ public:
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_attribute(
+ /* [in] */ BSTR name,
+ /* [retval][out] */ VARIANT *attribute) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_accessibleWithCaret(
+ /* [out] */ IUnknown **accessible,
+ /* [retval][out] */ long *caretOffset) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_relationTargetsOfType(
+ /* [in] */ BSTR type,
+ /* [in] */ long maxTargets,
+ /* [size_is][size_is][out] */ IUnknown ***targets,
+ /* [retval][out] */ long *nTargets) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessible2_2Vtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessible2_2 * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessible2_2 * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessible2_2 * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IAccessible2_2 * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IAccessible2_2 * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IAccessible2_2 * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [range][in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IAccessible2_2 * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accParent )(
+ IAccessible2_2 * This,
+ /* [retval][out] */ IDispatch **ppdispParent);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accChildCount )(
+ IAccessible2_2 * This,
+ /* [retval][out] */ long *pcountChildren);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accChild )(
+ IAccessible2_2 * This,
+ /* [in] */ VARIANT varChild,
+ /* [retval][out] */ IDispatch **ppdispChild);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accName )(
+ IAccessible2_2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ BSTR *pszName);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accValue )(
+ IAccessible2_2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ BSTR *pszValue);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accDescription )(
+ IAccessible2_2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ BSTR *pszDescription);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accRole )(
+ IAccessible2_2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ VARIANT *pvarRole);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accState )(
+ IAccessible2_2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ VARIANT *pvarState);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accHelp )(
+ IAccessible2_2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ BSTR *pszHelp);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accHelpTopic )(
+ IAccessible2_2 * This,
+ /* [out] */ BSTR *pszHelpFile,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ long *pidTopic);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accKeyboardShortcut )(
+ IAccessible2_2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ BSTR *pszKeyboardShortcut);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accFocus )(
+ IAccessible2_2 * This,
+ /* [retval][out] */ VARIANT *pvarChild);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accSelection )(
+ IAccessible2_2 * This,
+ /* [retval][out] */ VARIANT *pvarChildren);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accDefaultAction )(
+ IAccessible2_2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ BSTR *pszDefaultAction);
+
+ /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accSelect )(
+ IAccessible2_2 * This,
+ /* [in] */ long flagsSelect,
+ /* [optional][in] */ VARIANT varChild);
+
+ /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accLocation )(
+ IAccessible2_2 * This,
+ /* [out] */ long *pxLeft,
+ /* [out] */ long *pyTop,
+ /* [out] */ long *pcxWidth,
+ /* [out] */ long *pcyHeight,
+ /* [optional][in] */ VARIANT varChild);
+
+ /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accNavigate )(
+ IAccessible2_2 * This,
+ /* [in] */ long navDir,
+ /* [optional][in] */ VARIANT varStart,
+ /* [retval][out] */ VARIANT *pvarEndUpAt);
+
+ /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accHitTest )(
+ IAccessible2_2 * This,
+ /* [in] */ long xLeft,
+ /* [in] */ long yTop,
+ /* [retval][out] */ VARIANT *pvarChild);
+
+ /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accDoDefaultAction )(
+ IAccessible2_2 * This,
+ /* [optional][in] */ VARIANT varChild);
+
+ /* [id][propput][hidden] */ HRESULT ( STDMETHODCALLTYPE *put_accName )(
+ IAccessible2_2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [in] */ BSTR szName);
+
+ /* [id][propput][hidden] */ HRESULT ( STDMETHODCALLTYPE *put_accValue )(
+ IAccessible2_2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [in] */ BSTR szValue);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nRelations )(
+ IAccessible2_2 * This,
+ /* [retval][out] */ long *nRelations);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relation )(
+ IAccessible2_2 * This,
+ /* [in] */ long relationIndex,
+ /* [retval][out] */ IAccessibleRelation **relation);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relations )(
+ IAccessible2_2 * This,
+ /* [in] */ long maxRelations,
+ /* [length_is][size_is][out] */ IAccessibleRelation **relations,
+ /* [retval][out] */ long *nRelations);
+
+ HRESULT ( STDMETHODCALLTYPE *role )(
+ IAccessible2_2 * This,
+ /* [retval][out] */ long *role);
+
+ HRESULT ( STDMETHODCALLTYPE *scrollTo )(
+ IAccessible2_2 * This,
+ /* [in] */ enum IA2ScrollType scrollType);
+
+ HRESULT ( STDMETHODCALLTYPE *scrollToPoint )(
+ IAccessible2_2 * This,
+ /* [in] */ enum IA2CoordinateType coordinateType,
+ /* [in] */ long x,
+ /* [in] */ long y);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_groupPosition )(
+ IAccessible2_2 * This,
+ /* [out] */ long *groupLevel,
+ /* [out] */ long *similarItemsInGroup,
+ /* [retval][out] */ long *positionInGroup);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_states )(
+ IAccessible2_2 * This,
+ /* [retval][out] */ AccessibleStates *states);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_extendedRole )(
+ IAccessible2_2 * This,
+ /* [retval][out] */ BSTR *extendedRole);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedExtendedRole )(
+ IAccessible2_2 * This,
+ /* [retval][out] */ BSTR *localizedExtendedRole);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nExtendedStates )(
+ IAccessible2_2 * This,
+ /* [retval][out] */ long *nExtendedStates);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_extendedStates )(
+ IAccessible2_2 * This,
+ /* [in] */ long maxExtendedStates,
+ /* [length_is][length_is][size_is][size_is][out] */ BSTR **extendedStates,
+ /* [retval][out] */ long *nExtendedStates);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedExtendedStates )(
+ IAccessible2_2 * This,
+ /* [in] */ long maxLocalizedExtendedStates,
+ /* [length_is][length_is][size_is][size_is][out] */ BSTR **localizedExtendedStates,
+ /* [retval][out] */ long *nLocalizedExtendedStates);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_uniqueID )(
+ IAccessible2_2 * This,
+ /* [retval][out] */ long *uniqueID);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_windowHandle )(
+ IAccessible2_2 * This,
+ /* [retval][out] */ HWND *windowHandle);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_indexInParent )(
+ IAccessible2_2 * This,
+ /* [retval][out] */ long *indexInParent);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_locale )(
+ IAccessible2_2 * This,
+ /* [retval][out] */ IA2Locale *locale);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attributes )(
+ IAccessible2_2 * This,
+ /* [retval][out] */ BSTR *attributes);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attribute )(
+ IAccessible2_2 * This,
+ /* [in] */ BSTR name,
+ /* [retval][out] */ VARIANT *attribute);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_accessibleWithCaret )(
+ IAccessible2_2 * This,
+ /* [out] */ IUnknown **accessible,
+ /* [retval][out] */ long *caretOffset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relationTargetsOfType )(
+ IAccessible2_2 * This,
+ /* [in] */ BSTR type,
+ /* [in] */ long maxTargets,
+ /* [size_is][size_is][out] */ IUnknown ***targets,
+ /* [retval][out] */ long *nTargets);
+
+ END_INTERFACE
+ } IAccessible2_2Vtbl;
+
+ interface IAccessible2_2
+ {
+ CONST_VTBL struct IAccessible2_2Vtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessible2_2_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessible2_2_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessible2_2_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessible2_2_GetTypeInfoCount(This,pctinfo) \
+ ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
+
+#define IAccessible2_2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
+
+#define IAccessible2_2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
+
+#define IAccessible2_2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
+
+
+#define IAccessible2_2_get_accParent(This,ppdispParent) \
+ ( (This)->lpVtbl -> get_accParent(This,ppdispParent) )
+
+#define IAccessible2_2_get_accChildCount(This,pcountChildren) \
+ ( (This)->lpVtbl -> get_accChildCount(This,pcountChildren) )
+
+#define IAccessible2_2_get_accChild(This,varChild,ppdispChild) \
+ ( (This)->lpVtbl -> get_accChild(This,varChild,ppdispChild) )
+
+#define IAccessible2_2_get_accName(This,varChild,pszName) \
+ ( (This)->lpVtbl -> get_accName(This,varChild,pszName) )
+
+#define IAccessible2_2_get_accValue(This,varChild,pszValue) \
+ ( (This)->lpVtbl -> get_accValue(This,varChild,pszValue) )
+
+#define IAccessible2_2_get_accDescription(This,varChild,pszDescription) \
+ ( (This)->lpVtbl -> get_accDescription(This,varChild,pszDescription) )
+
+#define IAccessible2_2_get_accRole(This,varChild,pvarRole) \
+ ( (This)->lpVtbl -> get_accRole(This,varChild,pvarRole) )
+
+#define IAccessible2_2_get_accState(This,varChild,pvarState) \
+ ( (This)->lpVtbl -> get_accState(This,varChild,pvarState) )
+
+#define IAccessible2_2_get_accHelp(This,varChild,pszHelp) \
+ ( (This)->lpVtbl -> get_accHelp(This,varChild,pszHelp) )
+
+#define IAccessible2_2_get_accHelpTopic(This,pszHelpFile,varChild,pidTopic) \
+ ( (This)->lpVtbl -> get_accHelpTopic(This,pszHelpFile,varChild,pidTopic) )
+
+#define IAccessible2_2_get_accKeyboardShortcut(This,varChild,pszKeyboardShortcut) \
+ ( (This)->lpVtbl -> get_accKeyboardShortcut(This,varChild,pszKeyboardShortcut) )
+
+#define IAccessible2_2_get_accFocus(This,pvarChild) \
+ ( (This)->lpVtbl -> get_accFocus(This,pvarChild) )
+
+#define IAccessible2_2_get_accSelection(This,pvarChildren) \
+ ( (This)->lpVtbl -> get_accSelection(This,pvarChildren) )
+
+#define IAccessible2_2_get_accDefaultAction(This,varChild,pszDefaultAction) \
+ ( (This)->lpVtbl -> get_accDefaultAction(This,varChild,pszDefaultAction) )
+
+#define IAccessible2_2_accSelect(This,flagsSelect,varChild) \
+ ( (This)->lpVtbl -> accSelect(This,flagsSelect,varChild) )
+
+#define IAccessible2_2_accLocation(This,pxLeft,pyTop,pcxWidth,pcyHeight,varChild) \
+ ( (This)->lpVtbl -> accLocation(This,pxLeft,pyTop,pcxWidth,pcyHeight,varChild) )
+
+#define IAccessible2_2_accNavigate(This,navDir,varStart,pvarEndUpAt) \
+ ( (This)->lpVtbl -> accNavigate(This,navDir,varStart,pvarEndUpAt) )
+
+#define IAccessible2_2_accHitTest(This,xLeft,yTop,pvarChild) \
+ ( (This)->lpVtbl -> accHitTest(This,xLeft,yTop,pvarChild) )
+
+#define IAccessible2_2_accDoDefaultAction(This,varChild) \
+ ( (This)->lpVtbl -> accDoDefaultAction(This,varChild) )
+
+#define IAccessible2_2_put_accName(This,varChild,szName) \
+ ( (This)->lpVtbl -> put_accName(This,varChild,szName) )
+
+#define IAccessible2_2_put_accValue(This,varChild,szValue) \
+ ( (This)->lpVtbl -> put_accValue(This,varChild,szValue) )
+
+
+#define IAccessible2_2_get_nRelations(This,nRelations) \
+ ( (This)->lpVtbl -> get_nRelations(This,nRelations) )
+
+#define IAccessible2_2_get_relation(This,relationIndex,relation) \
+ ( (This)->lpVtbl -> get_relation(This,relationIndex,relation) )
+
+#define IAccessible2_2_get_relations(This,maxRelations,relations,nRelations) \
+ ( (This)->lpVtbl -> get_relations(This,maxRelations,relations,nRelations) )
+
+#define IAccessible2_2_role(This,role) \
+ ( (This)->lpVtbl -> role(This,role) )
+
+#define IAccessible2_2_scrollTo(This,scrollType) \
+ ( (This)->lpVtbl -> scrollTo(This,scrollType) )
+
+#define IAccessible2_2_scrollToPoint(This,coordinateType,x,y) \
+ ( (This)->lpVtbl -> scrollToPoint(This,coordinateType,x,y) )
+
+#define IAccessible2_2_get_groupPosition(This,groupLevel,similarItemsInGroup,positionInGroup) \
+ ( (This)->lpVtbl -> get_groupPosition(This,groupLevel,similarItemsInGroup,positionInGroup) )
+
+#define IAccessible2_2_get_states(This,states) \
+ ( (This)->lpVtbl -> get_states(This,states) )
+
+#define IAccessible2_2_get_extendedRole(This,extendedRole) \
+ ( (This)->lpVtbl -> get_extendedRole(This,extendedRole) )
+
+#define IAccessible2_2_get_localizedExtendedRole(This,localizedExtendedRole) \
+ ( (This)->lpVtbl -> get_localizedExtendedRole(This,localizedExtendedRole) )
+
+#define IAccessible2_2_get_nExtendedStates(This,nExtendedStates) \
+ ( (This)->lpVtbl -> get_nExtendedStates(This,nExtendedStates) )
+
+#define IAccessible2_2_get_extendedStates(This,maxExtendedStates,extendedStates,nExtendedStates) \
+ ( (This)->lpVtbl -> get_extendedStates(This,maxExtendedStates,extendedStates,nExtendedStates) )
+
+#define IAccessible2_2_get_localizedExtendedStates(This,maxLocalizedExtendedStates,localizedExtendedStates,nLocalizedExtendedStates) \
+ ( (This)->lpVtbl -> get_localizedExtendedStates(This,maxLocalizedExtendedStates,localizedExtendedStates,nLocalizedExtendedStates) )
+
+#define IAccessible2_2_get_uniqueID(This,uniqueID) \
+ ( (This)->lpVtbl -> get_uniqueID(This,uniqueID) )
+
+#define IAccessible2_2_get_windowHandle(This,windowHandle) \
+ ( (This)->lpVtbl -> get_windowHandle(This,windowHandle) )
+
+#define IAccessible2_2_get_indexInParent(This,indexInParent) \
+ ( (This)->lpVtbl -> get_indexInParent(This,indexInParent) )
+
+#define IAccessible2_2_get_locale(This,locale) \
+ ( (This)->lpVtbl -> get_locale(This,locale) )
+
+#define IAccessible2_2_get_attributes(This,attributes) \
+ ( (This)->lpVtbl -> get_attributes(This,attributes) )
+
+
+#define IAccessible2_2_get_attribute(This,name,attribute) \
+ ( (This)->lpVtbl -> get_attribute(This,name,attribute) )
+
+#define IAccessible2_2_get_accessibleWithCaret(This,accessible,caretOffset) \
+ ( (This)->lpVtbl -> get_accessibleWithCaret(This,accessible,caretOffset) )
+
+#define IAccessible2_2_get_relationTargetsOfType(This,type,maxTargets,targets,nTargets) \
+ ( (This)->lpVtbl -> get_relationTargetsOfType(This,type,maxTargets,targets,nTargets) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessible2_2_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_ia2_api_all_0000_0004 */
+/* [local] */
+
+typedef long IA2Color;
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0004_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0004_v0_0_s_ifspec;
+
+#ifndef __IAccessibleComponent_INTERFACE_DEFINED__
+#define __IAccessibleComponent_INTERFACE_DEFINED__
+
+/* interface IAccessibleComponent */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessibleComponent;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("1546D4B0-4C98-4bda-89AE-9A64748BDDE4")
+ IAccessibleComponent : public IUnknown
+ {
+ public:
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_locationInParent(
+ /* [out] */ long *x,
+ /* [retval][out] */ long *y) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_foreground(
+ /* [retval][out] */ IA2Color *foreground) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_background(
+ /* [retval][out] */ IA2Color *background) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessibleComponentVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessibleComponent * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessibleComponent * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessibleComponent * This);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_locationInParent )(
+ IAccessibleComponent * This,
+ /* [out] */ long *x,
+ /* [retval][out] */ long *y);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_foreground )(
+ IAccessibleComponent * This,
+ /* [retval][out] */ IA2Color *foreground);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_background )(
+ IAccessibleComponent * This,
+ /* [retval][out] */ IA2Color *background);
+
+ END_INTERFACE
+ } IAccessibleComponentVtbl;
+
+ interface IAccessibleComponent
+ {
+ CONST_VTBL struct IAccessibleComponentVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessibleComponent_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessibleComponent_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessibleComponent_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessibleComponent_get_locationInParent(This,x,y) \
+ ( (This)->lpVtbl -> get_locationInParent(This,x,y) )
+
+#define IAccessibleComponent_get_foreground(This,foreground) \
+ ( (This)->lpVtbl -> get_foreground(This,foreground) )
+
+#define IAccessibleComponent_get_background(This,background) \
+ ( (This)->lpVtbl -> get_background(This,background) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessibleComponent_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAccessibleValue_INTERFACE_DEFINED__
+#define __IAccessibleValue_INTERFACE_DEFINED__
+
+/* interface IAccessibleValue */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessibleValue;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("35855B5B-C566-4fd0-A7B1-E65465600394")
+ IAccessibleValue : public IUnknown
+ {
+ public:
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_currentValue(
+ /* [retval][out] */ VARIANT *currentValue) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE setCurrentValue(
+ /* [in] */ VARIANT value) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_maximumValue(
+ /* [retval][out] */ VARIANT *maximumValue) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_minimumValue(
+ /* [retval][out] */ VARIANT *minimumValue) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessibleValueVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessibleValue * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessibleValue * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessibleValue * This);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_currentValue )(
+ IAccessibleValue * This,
+ /* [retval][out] */ VARIANT *currentValue);
+
+ HRESULT ( STDMETHODCALLTYPE *setCurrentValue )(
+ IAccessibleValue * This,
+ /* [in] */ VARIANT value);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_maximumValue )(
+ IAccessibleValue * This,
+ /* [retval][out] */ VARIANT *maximumValue);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_minimumValue )(
+ IAccessibleValue * This,
+ /* [retval][out] */ VARIANT *minimumValue);
+
+ END_INTERFACE
+ } IAccessibleValueVtbl;
+
+ interface IAccessibleValue
+ {
+ CONST_VTBL struct IAccessibleValueVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessibleValue_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessibleValue_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessibleValue_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessibleValue_get_currentValue(This,currentValue) \
+ ( (This)->lpVtbl -> get_currentValue(This,currentValue) )
+
+#define IAccessibleValue_setCurrentValue(This,value) \
+ ( (This)->lpVtbl -> setCurrentValue(This,value) )
+
+#define IAccessibleValue_get_maximumValue(This,maximumValue) \
+ ( (This)->lpVtbl -> get_maximumValue(This,maximumValue) )
+
+#define IAccessibleValue_get_minimumValue(This,minimumValue) \
+ ( (This)->lpVtbl -> get_minimumValue(This,minimumValue) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessibleValue_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_ia2_api_all_0000_0006 */
+/* [local] */
+
+typedef struct IA2TextSegment
+ {
+ BSTR text;
+ long start;
+ long end;
+ } IA2TextSegment;
+
+
+enum IA2TextBoundaryType
+ { IA2_TEXT_BOUNDARY_CHAR = 0,
+ IA2_TEXT_BOUNDARY_WORD = ( IA2_TEXT_BOUNDARY_CHAR + 1 ) ,
+ IA2_TEXT_BOUNDARY_SENTENCE = ( IA2_TEXT_BOUNDARY_WORD + 1 ) ,
+ IA2_TEXT_BOUNDARY_PARAGRAPH = ( IA2_TEXT_BOUNDARY_SENTENCE + 1 ) ,
+ IA2_TEXT_BOUNDARY_LINE = ( IA2_TEXT_BOUNDARY_PARAGRAPH + 1 ) ,
+ IA2_TEXT_BOUNDARY_ALL = ( IA2_TEXT_BOUNDARY_LINE + 1 )
+ } ;
+
+
+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0006_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0006_v0_0_s_ifspec;
+
+#ifndef __IAccessibleText_INTERFACE_DEFINED__
+#define __IAccessibleText_INTERFACE_DEFINED__
+
+/* interface IAccessibleText */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessibleText;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("24FD2FFB-3AAD-4a08-8335-A3AD89C0FB4B")
+ IAccessibleText : public IUnknown
+ {
+ public:
+ virtual HRESULT STDMETHODCALLTYPE addSelection(
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_attributes(
+ /* [in] */ long offset,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *textAttributes) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_caretOffset(
+ /* [retval][out] */ long *offset) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_characterExtents(
+ /* [in] */ long offset,
+ /* [in] */ enum IA2CoordinateType coordType,
+ /* [out] */ long *x,
+ /* [out] */ long *y,
+ /* [out] */ long *width,
+ /* [retval][out] */ long *height) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelections(
+ /* [retval][out] */ long *nSelections) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_offsetAtPoint(
+ /* [in] */ long x,
+ /* [in] */ long y,
+ /* [in] */ enum IA2CoordinateType coordType,
+ /* [retval][out] */ long *offset) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selection(
+ /* [in] */ long selectionIndex,
+ /* [out] */ long *startOffset,
+ /* [retval][out] */ long *endOffset) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_text(
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset,
+ /* [retval][out] */ BSTR *text) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_textBeforeOffset(
+ /* [in] */ long offset,
+ /* [in] */ enum IA2TextBoundaryType boundaryType,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *text) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_textAfterOffset(
+ /* [in] */ long offset,
+ /* [in] */ enum IA2TextBoundaryType boundaryType,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *text) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_textAtOffset(
+ /* [in] */ long offset,
+ /* [in] */ enum IA2TextBoundaryType boundaryType,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *text) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE removeSelection(
+ /* [in] */ long selectionIndex) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE setCaretOffset(
+ /* [in] */ long offset) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE setSelection(
+ /* [in] */ long selectionIndex,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nCharacters(
+ /* [retval][out] */ long *nCharacters) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE scrollSubstringTo(
+ /* [in] */ long startIndex,
+ /* [in] */ long endIndex,
+ /* [in] */ enum IA2ScrollType scrollType) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE scrollSubstringToPoint(
+ /* [in] */ long startIndex,
+ /* [in] */ long endIndex,
+ /* [in] */ enum IA2CoordinateType coordinateType,
+ /* [in] */ long x,
+ /* [in] */ long y) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_newText(
+ /* [retval][out] */ IA2TextSegment *newText) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_oldText(
+ /* [retval][out] */ IA2TextSegment *oldText) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessibleTextVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessibleText * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessibleText * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessibleText * This);
+
+ HRESULT ( STDMETHODCALLTYPE *addSelection )(
+ IAccessibleText * This,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attributes )(
+ IAccessibleText * This,
+ /* [in] */ long offset,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *textAttributes);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_caretOffset )(
+ IAccessibleText * This,
+ /* [retval][out] */ long *offset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_characterExtents )(
+ IAccessibleText * This,
+ /* [in] */ long offset,
+ /* [in] */ enum IA2CoordinateType coordType,
+ /* [out] */ long *x,
+ /* [out] */ long *y,
+ /* [out] */ long *width,
+ /* [retval][out] */ long *height);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelections )(
+ IAccessibleText * This,
+ /* [retval][out] */ long *nSelections);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_offsetAtPoint )(
+ IAccessibleText * This,
+ /* [in] */ long x,
+ /* [in] */ long y,
+ /* [in] */ enum IA2CoordinateType coordType,
+ /* [retval][out] */ long *offset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selection )(
+ IAccessibleText * This,
+ /* [in] */ long selectionIndex,
+ /* [out] */ long *startOffset,
+ /* [retval][out] */ long *endOffset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_text )(
+ IAccessibleText * This,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset,
+ /* [retval][out] */ BSTR *text);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textBeforeOffset )(
+ IAccessibleText * This,
+ /* [in] */ long offset,
+ /* [in] */ enum IA2TextBoundaryType boundaryType,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *text);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textAfterOffset )(
+ IAccessibleText * This,
+ /* [in] */ long offset,
+ /* [in] */ enum IA2TextBoundaryType boundaryType,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *text);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textAtOffset )(
+ IAccessibleText * This,
+ /* [in] */ long offset,
+ /* [in] */ enum IA2TextBoundaryType boundaryType,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *text);
+
+ HRESULT ( STDMETHODCALLTYPE *removeSelection )(
+ IAccessibleText * This,
+ /* [in] */ long selectionIndex);
+
+ HRESULT ( STDMETHODCALLTYPE *setCaretOffset )(
+ IAccessibleText * This,
+ /* [in] */ long offset);
+
+ HRESULT ( STDMETHODCALLTYPE *setSelection )(
+ IAccessibleText * This,
+ /* [in] */ long selectionIndex,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nCharacters )(
+ IAccessibleText * This,
+ /* [retval][out] */ long *nCharacters);
+
+ HRESULT ( STDMETHODCALLTYPE *scrollSubstringTo )(
+ IAccessibleText * This,
+ /* [in] */ long startIndex,
+ /* [in] */ long endIndex,
+ /* [in] */ enum IA2ScrollType scrollType);
+
+ HRESULT ( STDMETHODCALLTYPE *scrollSubstringToPoint )(
+ IAccessibleText * This,
+ /* [in] */ long startIndex,
+ /* [in] */ long endIndex,
+ /* [in] */ enum IA2CoordinateType coordinateType,
+ /* [in] */ long x,
+ /* [in] */ long y);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_newText )(
+ IAccessibleText * This,
+ /* [retval][out] */ IA2TextSegment *newText);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_oldText )(
+ IAccessibleText * This,
+ /* [retval][out] */ IA2TextSegment *oldText);
+
+ END_INTERFACE
+ } IAccessibleTextVtbl;
+
+ interface IAccessibleText
+ {
+ CONST_VTBL struct IAccessibleTextVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessibleText_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessibleText_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessibleText_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessibleText_addSelection(This,startOffset,endOffset) \
+ ( (This)->lpVtbl -> addSelection(This,startOffset,endOffset) )
+
+#define IAccessibleText_get_attributes(This,offset,startOffset,endOffset,textAttributes) \
+ ( (This)->lpVtbl -> get_attributes(This,offset,startOffset,endOffset,textAttributes) )
+
+#define IAccessibleText_get_caretOffset(This,offset) \
+ ( (This)->lpVtbl -> get_caretOffset(This,offset) )
+
+#define IAccessibleText_get_characterExtents(This,offset,coordType,x,y,width,height) \
+ ( (This)->lpVtbl -> get_characterExtents(This,offset,coordType,x,y,width,height) )
+
+#define IAccessibleText_get_nSelections(This,nSelections) \
+ ( (This)->lpVtbl -> get_nSelections(This,nSelections) )
+
+#define IAccessibleText_get_offsetAtPoint(This,x,y,coordType,offset) \
+ ( (This)->lpVtbl -> get_offsetAtPoint(This,x,y,coordType,offset) )
+
+#define IAccessibleText_get_selection(This,selectionIndex,startOffset,endOffset) \
+ ( (This)->lpVtbl -> get_selection(This,selectionIndex,startOffset,endOffset) )
+
+#define IAccessibleText_get_text(This,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> get_text(This,startOffset,endOffset,text) )
+
+#define IAccessibleText_get_textBeforeOffset(This,offset,boundaryType,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> get_textBeforeOffset(This,offset,boundaryType,startOffset,endOffset,text) )
+
+#define IAccessibleText_get_textAfterOffset(This,offset,boundaryType,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> get_textAfterOffset(This,offset,boundaryType,startOffset,endOffset,text) )
+
+#define IAccessibleText_get_textAtOffset(This,offset,boundaryType,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> get_textAtOffset(This,offset,boundaryType,startOffset,endOffset,text) )
+
+#define IAccessibleText_removeSelection(This,selectionIndex) \
+ ( (This)->lpVtbl -> removeSelection(This,selectionIndex) )
+
+#define IAccessibleText_setCaretOffset(This,offset) \
+ ( (This)->lpVtbl -> setCaretOffset(This,offset) )
+
+#define IAccessibleText_setSelection(This,selectionIndex,startOffset,endOffset) \
+ ( (This)->lpVtbl -> setSelection(This,selectionIndex,startOffset,endOffset) )
+
+#define IAccessibleText_get_nCharacters(This,nCharacters) \
+ ( (This)->lpVtbl -> get_nCharacters(This,nCharacters) )
+
+#define IAccessibleText_scrollSubstringTo(This,startIndex,endIndex,scrollType) \
+ ( (This)->lpVtbl -> scrollSubstringTo(This,startIndex,endIndex,scrollType) )
+
+#define IAccessibleText_scrollSubstringToPoint(This,startIndex,endIndex,coordinateType,x,y) \
+ ( (This)->lpVtbl -> scrollSubstringToPoint(This,startIndex,endIndex,coordinateType,x,y) )
+
+#define IAccessibleText_get_newText(This,newText) \
+ ( (This)->lpVtbl -> get_newText(This,newText) )
+
+#define IAccessibleText_get_oldText(This,oldText) \
+ ( (This)->lpVtbl -> get_oldText(This,oldText) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessibleText_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAccessibleText2_INTERFACE_DEFINED__
+#define __IAccessibleText2_INTERFACE_DEFINED__
+
+/* interface IAccessibleText2 */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessibleText2;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("9690A9CC-5C80-4DF5-852E-2D5AE4189A54")
+ IAccessibleText2 : public IAccessibleText
+ {
+ public:
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_attributeRange(
+ /* [in] */ long offset,
+ /* [in] */ BSTR filter,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *attributeValues) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessibleText2Vtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessibleText2 * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessibleText2 * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessibleText2 * This);
+
+ HRESULT ( STDMETHODCALLTYPE *addSelection )(
+ IAccessibleText2 * This,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attributes )(
+ IAccessibleText2 * This,
+ /* [in] */ long offset,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *textAttributes);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_caretOffset )(
+ IAccessibleText2 * This,
+ /* [retval][out] */ long *offset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_characterExtents )(
+ IAccessibleText2 * This,
+ /* [in] */ long offset,
+ /* [in] */ enum IA2CoordinateType coordType,
+ /* [out] */ long *x,
+ /* [out] */ long *y,
+ /* [out] */ long *width,
+ /* [retval][out] */ long *height);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelections )(
+ IAccessibleText2 * This,
+ /* [retval][out] */ long *nSelections);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_offsetAtPoint )(
+ IAccessibleText2 * This,
+ /* [in] */ long x,
+ /* [in] */ long y,
+ /* [in] */ enum IA2CoordinateType coordType,
+ /* [retval][out] */ long *offset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selection )(
+ IAccessibleText2 * This,
+ /* [in] */ long selectionIndex,
+ /* [out] */ long *startOffset,
+ /* [retval][out] */ long *endOffset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_text )(
+ IAccessibleText2 * This,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset,
+ /* [retval][out] */ BSTR *text);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textBeforeOffset )(
+ IAccessibleText2 * This,
+ /* [in] */ long offset,
+ /* [in] */ enum IA2TextBoundaryType boundaryType,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *text);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textAfterOffset )(
+ IAccessibleText2 * This,
+ /* [in] */ long offset,
+ /* [in] */ enum IA2TextBoundaryType boundaryType,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *text);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textAtOffset )(
+ IAccessibleText2 * This,
+ /* [in] */ long offset,
+ /* [in] */ enum IA2TextBoundaryType boundaryType,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *text);
+
+ HRESULT ( STDMETHODCALLTYPE *removeSelection )(
+ IAccessibleText2 * This,
+ /* [in] */ long selectionIndex);
+
+ HRESULT ( STDMETHODCALLTYPE *setCaretOffset )(
+ IAccessibleText2 * This,
+ /* [in] */ long offset);
+
+ HRESULT ( STDMETHODCALLTYPE *setSelection )(
+ IAccessibleText2 * This,
+ /* [in] */ long selectionIndex,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nCharacters )(
+ IAccessibleText2 * This,
+ /* [retval][out] */ long *nCharacters);
+
+ HRESULT ( STDMETHODCALLTYPE *scrollSubstringTo )(
+ IAccessibleText2 * This,
+ /* [in] */ long startIndex,
+ /* [in] */ long endIndex,
+ /* [in] */ enum IA2ScrollType scrollType);
+
+ HRESULT ( STDMETHODCALLTYPE *scrollSubstringToPoint )(
+ IAccessibleText2 * This,
+ /* [in] */ long startIndex,
+ /* [in] */ long endIndex,
+ /* [in] */ enum IA2CoordinateType coordinateType,
+ /* [in] */ long x,
+ /* [in] */ long y);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_newText )(
+ IAccessibleText2 * This,
+ /* [retval][out] */ IA2TextSegment *newText);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_oldText )(
+ IAccessibleText2 * This,
+ /* [retval][out] */ IA2TextSegment *oldText);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attributeRange )(
+ IAccessibleText2 * This,
+ /* [in] */ long offset,
+ /* [in] */ BSTR filter,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *attributeValues);
+
+ END_INTERFACE
+ } IAccessibleText2Vtbl;
+
+ interface IAccessibleText2
+ {
+ CONST_VTBL struct IAccessibleText2Vtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessibleText2_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessibleText2_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessibleText2_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessibleText2_addSelection(This,startOffset,endOffset) \
+ ( (This)->lpVtbl -> addSelection(This,startOffset,endOffset) )
+
+#define IAccessibleText2_get_attributes(This,offset,startOffset,endOffset,textAttributes) \
+ ( (This)->lpVtbl -> get_attributes(This,offset,startOffset,endOffset,textAttributes) )
+
+#define IAccessibleText2_get_caretOffset(This,offset) \
+ ( (This)->lpVtbl -> get_caretOffset(This,offset) )
+
+#define IAccessibleText2_get_characterExtents(This,offset,coordType,x,y,width,height) \
+ ( (This)->lpVtbl -> get_characterExtents(This,offset,coordType,x,y,width,height) )
+
+#define IAccessibleText2_get_nSelections(This,nSelections) \
+ ( (This)->lpVtbl -> get_nSelections(This,nSelections) )
+
+#define IAccessibleText2_get_offsetAtPoint(This,x,y,coordType,offset) \
+ ( (This)->lpVtbl -> get_offsetAtPoint(This,x,y,coordType,offset) )
+
+#define IAccessibleText2_get_selection(This,selectionIndex,startOffset,endOffset) \
+ ( (This)->lpVtbl -> get_selection(This,selectionIndex,startOffset,endOffset) )
+
+#define IAccessibleText2_get_text(This,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> get_text(This,startOffset,endOffset,text) )
+
+#define IAccessibleText2_get_textBeforeOffset(This,offset,boundaryType,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> get_textBeforeOffset(This,offset,boundaryType,startOffset,endOffset,text) )
+
+#define IAccessibleText2_get_textAfterOffset(This,offset,boundaryType,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> get_textAfterOffset(This,offset,boundaryType,startOffset,endOffset,text) )
+
+#define IAccessibleText2_get_textAtOffset(This,offset,boundaryType,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> get_textAtOffset(This,offset,boundaryType,startOffset,endOffset,text) )
+
+#define IAccessibleText2_removeSelection(This,selectionIndex) \
+ ( (This)->lpVtbl -> removeSelection(This,selectionIndex) )
+
+#define IAccessibleText2_setCaretOffset(This,offset) \
+ ( (This)->lpVtbl -> setCaretOffset(This,offset) )
+
+#define IAccessibleText2_setSelection(This,selectionIndex,startOffset,endOffset) \
+ ( (This)->lpVtbl -> setSelection(This,selectionIndex,startOffset,endOffset) )
+
+#define IAccessibleText2_get_nCharacters(This,nCharacters) \
+ ( (This)->lpVtbl -> get_nCharacters(This,nCharacters) )
+
+#define IAccessibleText2_scrollSubstringTo(This,startIndex,endIndex,scrollType) \
+ ( (This)->lpVtbl -> scrollSubstringTo(This,startIndex,endIndex,scrollType) )
+
+#define IAccessibleText2_scrollSubstringToPoint(This,startIndex,endIndex,coordinateType,x,y) \
+ ( (This)->lpVtbl -> scrollSubstringToPoint(This,startIndex,endIndex,coordinateType,x,y) )
+
+#define IAccessibleText2_get_newText(This,newText) \
+ ( (This)->lpVtbl -> get_newText(This,newText) )
+
+#define IAccessibleText2_get_oldText(This,oldText) \
+ ( (This)->lpVtbl -> get_oldText(This,oldText) )
+
+
+#define IAccessibleText2_get_attributeRange(This,offset,filter,startOffset,endOffset,attributeValues) \
+ ( (This)->lpVtbl -> get_attributeRange(This,offset,filter,startOffset,endOffset,attributeValues) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessibleText2_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAccessibleEditableText_INTERFACE_DEFINED__
+#define __IAccessibleEditableText_INTERFACE_DEFINED__
+
+/* interface IAccessibleEditableText */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessibleEditableText;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("A59AA09A-7011-4b65-939D-32B1FB5547E3")
+ IAccessibleEditableText : public IUnknown
+ {
+ public:
+ virtual HRESULT STDMETHODCALLTYPE copyText(
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE deleteText(
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE insertText(
+ /* [in] */ long offset,
+ /* [in] */ BSTR *text) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE cutText(
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE pasteText(
+ /* [in] */ long offset) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE replaceText(
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset,
+ /* [in] */ BSTR *text) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE setAttributes(
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset,
+ /* [in] */ BSTR *attributes) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessibleEditableTextVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessibleEditableText * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessibleEditableText * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessibleEditableText * This);
+
+ HRESULT ( STDMETHODCALLTYPE *copyText )(
+ IAccessibleEditableText * This,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset);
+
+ HRESULT ( STDMETHODCALLTYPE *deleteText )(
+ IAccessibleEditableText * This,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset);
+
+ HRESULT ( STDMETHODCALLTYPE *insertText )(
+ IAccessibleEditableText * This,
+ /* [in] */ long offset,
+ /* [in] */ BSTR *text);
+
+ HRESULT ( STDMETHODCALLTYPE *cutText )(
+ IAccessibleEditableText * This,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset);
+
+ HRESULT ( STDMETHODCALLTYPE *pasteText )(
+ IAccessibleEditableText * This,
+ /* [in] */ long offset);
+
+ HRESULT ( STDMETHODCALLTYPE *replaceText )(
+ IAccessibleEditableText * This,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset,
+ /* [in] */ BSTR *text);
+
+ HRESULT ( STDMETHODCALLTYPE *setAttributes )(
+ IAccessibleEditableText * This,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset,
+ /* [in] */ BSTR *attributes);
+
+ END_INTERFACE
+ } IAccessibleEditableTextVtbl;
+
+ interface IAccessibleEditableText
+ {
+ CONST_VTBL struct IAccessibleEditableTextVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessibleEditableText_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessibleEditableText_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessibleEditableText_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessibleEditableText_copyText(This,startOffset,endOffset) \
+ ( (This)->lpVtbl -> copyText(This,startOffset,endOffset) )
+
+#define IAccessibleEditableText_deleteText(This,startOffset,endOffset) \
+ ( (This)->lpVtbl -> deleteText(This,startOffset,endOffset) )
+
+#define IAccessibleEditableText_insertText(This,offset,text) \
+ ( (This)->lpVtbl -> insertText(This,offset,text) )
+
+#define IAccessibleEditableText_cutText(This,startOffset,endOffset) \
+ ( (This)->lpVtbl -> cutText(This,startOffset,endOffset) )
+
+#define IAccessibleEditableText_pasteText(This,offset) \
+ ( (This)->lpVtbl -> pasteText(This,offset) )
+
+#define IAccessibleEditableText_replaceText(This,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> replaceText(This,startOffset,endOffset,text) )
+
+#define IAccessibleEditableText_setAttributes(This,startOffset,endOffset,attributes) \
+ ( (This)->lpVtbl -> setAttributes(This,startOffset,endOffset,attributes) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessibleEditableText_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAccessibleHyperlink_INTERFACE_DEFINED__
+#define __IAccessibleHyperlink_INTERFACE_DEFINED__
+
+/* interface IAccessibleHyperlink */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessibleHyperlink;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("01C20F2B-3DD2-400f-949F-AD00BDAB1D41")
+ IAccessibleHyperlink : public IAccessibleAction
+ {
+ public:
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_anchor(
+ /* [in] */ long index,
+ /* [retval][out] */ VARIANT *anchor) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_anchorTarget(
+ /* [in] */ long index,
+ /* [retval][out] */ VARIANT *anchorTarget) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_startIndex(
+ /* [retval][out] */ long *index) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_endIndex(
+ /* [retval][out] */ long *index) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_valid(
+ /* [retval][out] */ boolean *valid) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessibleHyperlinkVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessibleHyperlink * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessibleHyperlink * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessibleHyperlink * This);
+
+ HRESULT ( STDMETHODCALLTYPE *nActions )(
+ IAccessibleHyperlink * This,
+ /* [retval][out] */ long *nActions);
+
+ HRESULT ( STDMETHODCALLTYPE *doAction )(
+ IAccessibleHyperlink * This,
+ /* [in] */ long actionIndex);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_description )(
+ IAccessibleHyperlink * This,
+ /* [in] */ long actionIndex,
+ /* [retval][out] */ BSTR *description);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_keyBinding )(
+ IAccessibleHyperlink * This,
+ /* [in] */ long actionIndex,
+ /* [in] */ long nMaxBindings,
+ /* [length_is][length_is][size_is][size_is][out] */ BSTR **keyBindings,
+ /* [retval][out] */ long *nBindings);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_name )(
+ IAccessibleHyperlink * This,
+ /* [in] */ long actionIndex,
+ /* [retval][out] */ BSTR *name);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedName )(
+ IAccessibleHyperlink * This,
+ /* [in] */ long actionIndex,
+ /* [retval][out] */ BSTR *localizedName);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_anchor )(
+ IAccessibleHyperlink * This,
+ /* [in] */ long index,
+ /* [retval][out] */ VARIANT *anchor);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_anchorTarget )(
+ IAccessibleHyperlink * This,
+ /* [in] */ long index,
+ /* [retval][out] */ VARIANT *anchorTarget);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_startIndex )(
+ IAccessibleHyperlink * This,
+ /* [retval][out] */ long *index);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_endIndex )(
+ IAccessibleHyperlink * This,
+ /* [retval][out] */ long *index);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_valid )(
+ IAccessibleHyperlink * This,
+ /* [retval][out] */ boolean *valid);
+
+ END_INTERFACE
+ } IAccessibleHyperlinkVtbl;
+
+ interface IAccessibleHyperlink
+ {
+ CONST_VTBL struct IAccessibleHyperlinkVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessibleHyperlink_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessibleHyperlink_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessibleHyperlink_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessibleHyperlink_nActions(This,nActions) \
+ ( (This)->lpVtbl -> nActions(This,nActions) )
+
+#define IAccessibleHyperlink_doAction(This,actionIndex) \
+ ( (This)->lpVtbl -> doAction(This,actionIndex) )
+
+#define IAccessibleHyperlink_get_description(This,actionIndex,description) \
+ ( (This)->lpVtbl -> get_description(This,actionIndex,description) )
+
+#define IAccessibleHyperlink_get_keyBinding(This,actionIndex,nMaxBindings,keyBindings,nBindings) \
+ ( (This)->lpVtbl -> get_keyBinding(This,actionIndex,nMaxBindings,keyBindings,nBindings) )
+
+#define IAccessibleHyperlink_get_name(This,actionIndex,name) \
+ ( (This)->lpVtbl -> get_name(This,actionIndex,name) )
+
+#define IAccessibleHyperlink_get_localizedName(This,actionIndex,localizedName) \
+ ( (This)->lpVtbl -> get_localizedName(This,actionIndex,localizedName) )
+
+
+#define IAccessibleHyperlink_get_anchor(This,index,anchor) \
+ ( (This)->lpVtbl -> get_anchor(This,index,anchor) )
+
+#define IAccessibleHyperlink_get_anchorTarget(This,index,anchorTarget) \
+ ( (This)->lpVtbl -> get_anchorTarget(This,index,anchorTarget) )
+
+#define IAccessibleHyperlink_get_startIndex(This,index) \
+ ( (This)->lpVtbl -> get_startIndex(This,index) )
+
+#define IAccessibleHyperlink_get_endIndex(This,index) \
+ ( (This)->lpVtbl -> get_endIndex(This,index) )
+
+#define IAccessibleHyperlink_get_valid(This,valid) \
+ ( (This)->lpVtbl -> get_valid(This,valid) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessibleHyperlink_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAccessibleHypertext_INTERFACE_DEFINED__
+#define __IAccessibleHypertext_INTERFACE_DEFINED__
+
+/* interface IAccessibleHypertext */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessibleHypertext;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("6B4F8BBF-F1F2-418a-B35E-A195BC4103B9")
+ IAccessibleHypertext : public IAccessibleText
+ {
+ public:
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nHyperlinks(
+ /* [retval][out] */ long *hyperlinkCount) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_hyperlink(
+ /* [in] */ long index,
+ /* [retval][out] */ IAccessibleHyperlink **hyperlink) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_hyperlinkIndex(
+ /* [in] */ long charIndex,
+ /* [retval][out] */ long *hyperlinkIndex) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessibleHypertextVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessibleHypertext * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessibleHypertext * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessibleHypertext * This);
+
+ HRESULT ( STDMETHODCALLTYPE *addSelection )(
+ IAccessibleHypertext * This,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attributes )(
+ IAccessibleHypertext * This,
+ /* [in] */ long offset,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *textAttributes);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_caretOffset )(
+ IAccessibleHypertext * This,
+ /* [retval][out] */ long *offset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_characterExtents )(
+ IAccessibleHypertext * This,
+ /* [in] */ long offset,
+ /* [in] */ enum IA2CoordinateType coordType,
+ /* [out] */ long *x,
+ /* [out] */ long *y,
+ /* [out] */ long *width,
+ /* [retval][out] */ long *height);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelections )(
+ IAccessibleHypertext * This,
+ /* [retval][out] */ long *nSelections);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_offsetAtPoint )(
+ IAccessibleHypertext * This,
+ /* [in] */ long x,
+ /* [in] */ long y,
+ /* [in] */ enum IA2CoordinateType coordType,
+ /* [retval][out] */ long *offset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selection )(
+ IAccessibleHypertext * This,
+ /* [in] */ long selectionIndex,
+ /* [out] */ long *startOffset,
+ /* [retval][out] */ long *endOffset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_text )(
+ IAccessibleHypertext * This,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset,
+ /* [retval][out] */ BSTR *text);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textBeforeOffset )(
+ IAccessibleHypertext * This,
+ /* [in] */ long offset,
+ /* [in] */ enum IA2TextBoundaryType boundaryType,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *text);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textAfterOffset )(
+ IAccessibleHypertext * This,
+ /* [in] */ long offset,
+ /* [in] */ enum IA2TextBoundaryType boundaryType,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *text);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textAtOffset )(
+ IAccessibleHypertext * This,
+ /* [in] */ long offset,
+ /* [in] */ enum IA2TextBoundaryType boundaryType,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *text);
+
+ HRESULT ( STDMETHODCALLTYPE *removeSelection )(
+ IAccessibleHypertext * This,
+ /* [in] */ long selectionIndex);
+
+ HRESULT ( STDMETHODCALLTYPE *setCaretOffset )(
+ IAccessibleHypertext * This,
+ /* [in] */ long offset);
+
+ HRESULT ( STDMETHODCALLTYPE *setSelection )(
+ IAccessibleHypertext * This,
+ /* [in] */ long selectionIndex,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nCharacters )(
+ IAccessibleHypertext * This,
+ /* [retval][out] */ long *nCharacters);
+
+ HRESULT ( STDMETHODCALLTYPE *scrollSubstringTo )(
+ IAccessibleHypertext * This,
+ /* [in] */ long startIndex,
+ /* [in] */ long endIndex,
+ /* [in] */ enum IA2ScrollType scrollType);
+
+ HRESULT ( STDMETHODCALLTYPE *scrollSubstringToPoint )(
+ IAccessibleHypertext * This,
+ /* [in] */ long startIndex,
+ /* [in] */ long endIndex,
+ /* [in] */ enum IA2CoordinateType coordinateType,
+ /* [in] */ long x,
+ /* [in] */ long y);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_newText )(
+ IAccessibleHypertext * This,
+ /* [retval][out] */ IA2TextSegment *newText);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_oldText )(
+ IAccessibleHypertext * This,
+ /* [retval][out] */ IA2TextSegment *oldText);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nHyperlinks )(
+ IAccessibleHypertext * This,
+ /* [retval][out] */ long *hyperlinkCount);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_hyperlink )(
+ IAccessibleHypertext * This,
+ /* [in] */ long index,
+ /* [retval][out] */ IAccessibleHyperlink **hyperlink);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_hyperlinkIndex )(
+ IAccessibleHypertext * This,
+ /* [in] */ long charIndex,
+ /* [retval][out] */ long *hyperlinkIndex);
+
+ END_INTERFACE
+ } IAccessibleHypertextVtbl;
+
+ interface IAccessibleHypertext
+ {
+ CONST_VTBL struct IAccessibleHypertextVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessibleHypertext_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessibleHypertext_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessibleHypertext_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessibleHypertext_addSelection(This,startOffset,endOffset) \
+ ( (This)->lpVtbl -> addSelection(This,startOffset,endOffset) )
+
+#define IAccessibleHypertext_get_attributes(This,offset,startOffset,endOffset,textAttributes) \
+ ( (This)->lpVtbl -> get_attributes(This,offset,startOffset,endOffset,textAttributes) )
+
+#define IAccessibleHypertext_get_caretOffset(This,offset) \
+ ( (This)->lpVtbl -> get_caretOffset(This,offset) )
+
+#define IAccessibleHypertext_get_characterExtents(This,offset,coordType,x,y,width,height) \
+ ( (This)->lpVtbl -> get_characterExtents(This,offset,coordType,x,y,width,height) )
+
+#define IAccessibleHypertext_get_nSelections(This,nSelections) \
+ ( (This)->lpVtbl -> get_nSelections(This,nSelections) )
+
+#define IAccessibleHypertext_get_offsetAtPoint(This,x,y,coordType,offset) \
+ ( (This)->lpVtbl -> get_offsetAtPoint(This,x,y,coordType,offset) )
+
+#define IAccessibleHypertext_get_selection(This,selectionIndex,startOffset,endOffset) \
+ ( (This)->lpVtbl -> get_selection(This,selectionIndex,startOffset,endOffset) )
+
+#define IAccessibleHypertext_get_text(This,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> get_text(This,startOffset,endOffset,text) )
+
+#define IAccessibleHypertext_get_textBeforeOffset(This,offset,boundaryType,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> get_textBeforeOffset(This,offset,boundaryType,startOffset,endOffset,text) )
+
+#define IAccessibleHypertext_get_textAfterOffset(This,offset,boundaryType,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> get_textAfterOffset(This,offset,boundaryType,startOffset,endOffset,text) )
+
+#define IAccessibleHypertext_get_textAtOffset(This,offset,boundaryType,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> get_textAtOffset(This,offset,boundaryType,startOffset,endOffset,text) )
+
+#define IAccessibleHypertext_removeSelection(This,selectionIndex) \
+ ( (This)->lpVtbl -> removeSelection(This,selectionIndex) )
+
+#define IAccessibleHypertext_setCaretOffset(This,offset) \
+ ( (This)->lpVtbl -> setCaretOffset(This,offset) )
+
+#define IAccessibleHypertext_setSelection(This,selectionIndex,startOffset,endOffset) \
+ ( (This)->lpVtbl -> setSelection(This,selectionIndex,startOffset,endOffset) )
+
+#define IAccessibleHypertext_get_nCharacters(This,nCharacters) \
+ ( (This)->lpVtbl -> get_nCharacters(This,nCharacters) )
+
+#define IAccessibleHypertext_scrollSubstringTo(This,startIndex,endIndex,scrollType) \
+ ( (This)->lpVtbl -> scrollSubstringTo(This,startIndex,endIndex,scrollType) )
+
+#define IAccessibleHypertext_scrollSubstringToPoint(This,startIndex,endIndex,coordinateType,x,y) \
+ ( (This)->lpVtbl -> scrollSubstringToPoint(This,startIndex,endIndex,coordinateType,x,y) )
+
+#define IAccessibleHypertext_get_newText(This,newText) \
+ ( (This)->lpVtbl -> get_newText(This,newText) )
+
+#define IAccessibleHypertext_get_oldText(This,oldText) \
+ ( (This)->lpVtbl -> get_oldText(This,oldText) )
+
+
+#define IAccessibleHypertext_get_nHyperlinks(This,hyperlinkCount) \
+ ( (This)->lpVtbl -> get_nHyperlinks(This,hyperlinkCount) )
+
+#define IAccessibleHypertext_get_hyperlink(This,index,hyperlink) \
+ ( (This)->lpVtbl -> get_hyperlink(This,index,hyperlink) )
+
+#define IAccessibleHypertext_get_hyperlinkIndex(This,charIndex,hyperlinkIndex) \
+ ( (This)->lpVtbl -> get_hyperlinkIndex(This,charIndex,hyperlinkIndex) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessibleHypertext_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAccessibleHypertext2_INTERFACE_DEFINED__
+#define __IAccessibleHypertext2_INTERFACE_DEFINED__
+
+/* interface IAccessibleHypertext2 */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessibleHypertext2;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("CF64D89F-8287-4B44-8501-A827453A6077")
+ IAccessibleHypertext2 : public IAccessibleHypertext
+ {
+ public:
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_hyperlinks(
+ /* [size_is][size_is][out] */ IAccessibleHyperlink ***hyperlinks,
+ /* [retval][out] */ long *nHyperlinks) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessibleHypertext2Vtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessibleHypertext2 * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessibleHypertext2 * This);
+
+ HRESULT ( STDMETHODCALLTYPE *addSelection )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attributes )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ long offset,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *textAttributes);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_caretOffset )(
+ IAccessibleHypertext2 * This,
+ /* [retval][out] */ long *offset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_characterExtents )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ long offset,
+ /* [in] */ enum IA2CoordinateType coordType,
+ /* [out] */ long *x,
+ /* [out] */ long *y,
+ /* [out] */ long *width,
+ /* [retval][out] */ long *height);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelections )(
+ IAccessibleHypertext2 * This,
+ /* [retval][out] */ long *nSelections);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_offsetAtPoint )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ long x,
+ /* [in] */ long y,
+ /* [in] */ enum IA2CoordinateType coordType,
+ /* [retval][out] */ long *offset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selection )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ long selectionIndex,
+ /* [out] */ long *startOffset,
+ /* [retval][out] */ long *endOffset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_text )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset,
+ /* [retval][out] */ BSTR *text);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textBeforeOffset )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ long offset,
+ /* [in] */ enum IA2TextBoundaryType boundaryType,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *text);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textAfterOffset )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ long offset,
+ /* [in] */ enum IA2TextBoundaryType boundaryType,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *text);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textAtOffset )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ long offset,
+ /* [in] */ enum IA2TextBoundaryType boundaryType,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *text);
+
+ HRESULT ( STDMETHODCALLTYPE *removeSelection )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ long selectionIndex);
+
+ HRESULT ( STDMETHODCALLTYPE *setCaretOffset )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ long offset);
+
+ HRESULT ( STDMETHODCALLTYPE *setSelection )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ long selectionIndex,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nCharacters )(
+ IAccessibleHypertext2 * This,
+ /* [retval][out] */ long *nCharacters);
+
+ HRESULT ( STDMETHODCALLTYPE *scrollSubstringTo )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ long startIndex,
+ /* [in] */ long endIndex,
+ /* [in] */ enum IA2ScrollType scrollType);
+
+ HRESULT ( STDMETHODCALLTYPE *scrollSubstringToPoint )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ long startIndex,
+ /* [in] */ long endIndex,
+ /* [in] */ enum IA2CoordinateType coordinateType,
+ /* [in] */ long x,
+ /* [in] */ long y);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_newText )(
+ IAccessibleHypertext2 * This,
+ /* [retval][out] */ IA2TextSegment *newText);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_oldText )(
+ IAccessibleHypertext2 * This,
+ /* [retval][out] */ IA2TextSegment *oldText);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nHyperlinks )(
+ IAccessibleHypertext2 * This,
+ /* [retval][out] */ long *hyperlinkCount);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_hyperlink )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ long index,
+ /* [retval][out] */ IAccessibleHyperlink **hyperlink);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_hyperlinkIndex )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ long charIndex,
+ /* [retval][out] */ long *hyperlinkIndex);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_hyperlinks )(
+ IAccessibleHypertext2 * This,
+ /* [size_is][size_is][out] */ IAccessibleHyperlink ***hyperlinks,
+ /* [retval][out] */ long *nHyperlinks);
+
+ END_INTERFACE
+ } IAccessibleHypertext2Vtbl;
+
+ interface IAccessibleHypertext2
+ {
+ CONST_VTBL struct IAccessibleHypertext2Vtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessibleHypertext2_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessibleHypertext2_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessibleHypertext2_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessibleHypertext2_addSelection(This,startOffset,endOffset) \
+ ( (This)->lpVtbl -> addSelection(This,startOffset,endOffset) )
+
+#define IAccessibleHypertext2_get_attributes(This,offset,startOffset,endOffset,textAttributes) \
+ ( (This)->lpVtbl -> get_attributes(This,offset,startOffset,endOffset,textAttributes) )
+
+#define IAccessibleHypertext2_get_caretOffset(This,offset) \
+ ( (This)->lpVtbl -> get_caretOffset(This,offset) )
+
+#define IAccessibleHypertext2_get_characterExtents(This,offset,coordType,x,y,width,height) \
+ ( (This)->lpVtbl -> get_characterExtents(This,offset,coordType,x,y,width,height) )
+
+#define IAccessibleHypertext2_get_nSelections(This,nSelections) \
+ ( (This)->lpVtbl -> get_nSelections(This,nSelections) )
+
+#define IAccessibleHypertext2_get_offsetAtPoint(This,x,y,coordType,offset) \
+ ( (This)->lpVtbl -> get_offsetAtPoint(This,x,y,coordType,offset) )
+
+#define IAccessibleHypertext2_get_selection(This,selectionIndex,startOffset,endOffset) \
+ ( (This)->lpVtbl -> get_selection(This,selectionIndex,startOffset,endOffset) )
+
+#define IAccessibleHypertext2_get_text(This,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> get_text(This,startOffset,endOffset,text) )
+
+#define IAccessibleHypertext2_get_textBeforeOffset(This,offset,boundaryType,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> get_textBeforeOffset(This,offset,boundaryType,startOffset,endOffset,text) )
+
+#define IAccessibleHypertext2_get_textAfterOffset(This,offset,boundaryType,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> get_textAfterOffset(This,offset,boundaryType,startOffset,endOffset,text) )
+
+#define IAccessibleHypertext2_get_textAtOffset(This,offset,boundaryType,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> get_textAtOffset(This,offset,boundaryType,startOffset,endOffset,text) )
+
+#define IAccessibleHypertext2_removeSelection(This,selectionIndex) \
+ ( (This)->lpVtbl -> removeSelection(This,selectionIndex) )
+
+#define IAccessibleHypertext2_setCaretOffset(This,offset) \
+ ( (This)->lpVtbl -> setCaretOffset(This,offset) )
+
+#define IAccessibleHypertext2_setSelection(This,selectionIndex,startOffset,endOffset) \
+ ( (This)->lpVtbl -> setSelection(This,selectionIndex,startOffset,endOffset) )
+
+#define IAccessibleHypertext2_get_nCharacters(This,nCharacters) \
+ ( (This)->lpVtbl -> get_nCharacters(This,nCharacters) )
+
+#define IAccessibleHypertext2_scrollSubstringTo(This,startIndex,endIndex,scrollType) \
+ ( (This)->lpVtbl -> scrollSubstringTo(This,startIndex,endIndex,scrollType) )
+
+#define IAccessibleHypertext2_scrollSubstringToPoint(This,startIndex,endIndex,coordinateType,x,y) \
+ ( (This)->lpVtbl -> scrollSubstringToPoint(This,startIndex,endIndex,coordinateType,x,y) )
+
+#define IAccessibleHypertext2_get_newText(This,newText) \
+ ( (This)->lpVtbl -> get_newText(This,newText) )
+
+#define IAccessibleHypertext2_get_oldText(This,oldText) \
+ ( (This)->lpVtbl -> get_oldText(This,oldText) )
+
+
+#define IAccessibleHypertext2_get_nHyperlinks(This,hyperlinkCount) \
+ ( (This)->lpVtbl -> get_nHyperlinks(This,hyperlinkCount) )
+
+#define IAccessibleHypertext2_get_hyperlink(This,index,hyperlink) \
+ ( (This)->lpVtbl -> get_hyperlink(This,index,hyperlink) )
+
+#define IAccessibleHypertext2_get_hyperlinkIndex(This,charIndex,hyperlinkIndex) \
+ ( (This)->lpVtbl -> get_hyperlinkIndex(This,charIndex,hyperlinkIndex) )
+
+
+#define IAccessibleHypertext2_get_hyperlinks(This,hyperlinks,nHyperlinks) \
+ ( (This)->lpVtbl -> get_hyperlinks(This,hyperlinks,nHyperlinks) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessibleHypertext2_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAccessibleTable_INTERFACE_DEFINED__
+#define __IAccessibleTable_INTERFACE_DEFINED__
+
+/* interface IAccessibleTable */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessibleTable;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("35AD8070-C20C-4fb4-B094-F4F7275DD469")
+ IAccessibleTable : public IUnknown
+ {
+ public:
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_accessibleAt(
+ /* [in] */ long row,
+ /* [in] */ long column,
+ /* [retval][out] */ IUnknown **accessible) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_caption(
+ /* [retval][out] */ IUnknown **accessible) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_childIndex(
+ /* [in] */ long rowIndex,
+ /* [in] */ long columnIndex,
+ /* [retval][out] */ long *cellIndex) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnDescription(
+ /* [in] */ long column,
+ /* [retval][out] */ BSTR *description) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnExtentAt(
+ /* [in] */ long row,
+ /* [in] */ long column,
+ /* [retval][out] */ long *nColumnsSpanned) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnHeader(
+ /* [out] */ IAccessibleTable **accessibleTable,
+ /* [retval][out] */ long *startingRowIndex) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnIndex(
+ /* [in] */ long cellIndex,
+ /* [retval][out] */ long *columnIndex) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nColumns(
+ /* [retval][out] */ long *columnCount) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nRows(
+ /* [retval][out] */ long *rowCount) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelectedChildren(
+ /* [retval][out] */ long *cellCount) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelectedColumns(
+ /* [retval][out] */ long *columnCount) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelectedRows(
+ /* [retval][out] */ long *rowCount) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowDescription(
+ /* [in] */ long row,
+ /* [retval][out] */ BSTR *description) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowExtentAt(
+ /* [in] */ long row,
+ /* [in] */ long column,
+ /* [retval][out] */ long *nRowsSpanned) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowHeader(
+ /* [out] */ IAccessibleTable **accessibleTable,
+ /* [retval][out] */ long *startingColumnIndex) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowIndex(
+ /* [in] */ long cellIndex,
+ /* [retval][out] */ long *rowIndex) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selectedChildren(
+ /* [in] */ long maxChildren,
+ /* [length_is][length_is][size_is][size_is][out] */ long **children,
+ /* [retval][out] */ long *nChildren) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selectedColumns(
+ /* [in] */ long maxColumns,
+ /* [length_is][length_is][size_is][size_is][out] */ long **columns,
+ /* [retval][out] */ long *nColumns) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selectedRows(
+ /* [in] */ long maxRows,
+ /* [length_is][length_is][size_is][size_is][out] */ long **rows,
+ /* [retval][out] */ long *nRows) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_summary(
+ /* [retval][out] */ IUnknown **accessible) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isColumnSelected(
+ /* [in] */ long column,
+ /* [retval][out] */ boolean *isSelected) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isRowSelected(
+ /* [in] */ long row,
+ /* [retval][out] */ boolean *isSelected) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isSelected(
+ /* [in] */ long row,
+ /* [in] */ long column,
+ /* [retval][out] */ boolean *isSelected) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE selectRow(
+ /* [in] */ long row) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE selectColumn(
+ /* [in] */ long column) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE unselectRow(
+ /* [in] */ long row) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE unselectColumn(
+ /* [in] */ long column) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowColumnExtentsAtIndex(
+ /* [in] */ long index,
+ /* [out] */ long *row,
+ /* [out] */ long *column,
+ /* [out] */ long *rowExtents,
+ /* [out] */ long *columnExtents,
+ /* [retval][out] */ boolean *isSelected) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_modelChange(
+ /* [retval][out] */ IA2TableModelChange *modelChange) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessibleTableVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessibleTable * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessibleTable * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessibleTable * This);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_accessibleAt )(
+ IAccessibleTable * This,
+ /* [in] */ long row,
+ /* [in] */ long column,
+ /* [retval][out] */ IUnknown **accessible);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_caption )(
+ IAccessibleTable * This,
+ /* [retval][out] */ IUnknown **accessible);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_childIndex )(
+ IAccessibleTable * This,
+ /* [in] */ long rowIndex,
+ /* [in] */ long columnIndex,
+ /* [retval][out] */ long *cellIndex);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnDescription )(
+ IAccessibleTable * This,
+ /* [in] */ long column,
+ /* [retval][out] */ BSTR *description);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnExtentAt )(
+ IAccessibleTable * This,
+ /* [in] */ long row,
+ /* [in] */ long column,
+ /* [retval][out] */ long *nColumnsSpanned);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnHeader )(
+ IAccessibleTable * This,
+ /* [out] */ IAccessibleTable **accessibleTable,
+ /* [retval][out] */ long *startingRowIndex);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnIndex )(
+ IAccessibleTable * This,
+ /* [in] */ long cellIndex,
+ /* [retval][out] */ long *columnIndex);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nColumns )(
+ IAccessibleTable * This,
+ /* [retval][out] */ long *columnCount);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nRows )(
+ IAccessibleTable * This,
+ /* [retval][out] */ long *rowCount);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelectedChildren )(
+ IAccessibleTable * This,
+ /* [retval][out] */ long *cellCount);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelectedColumns )(
+ IAccessibleTable * This,
+ /* [retval][out] */ long *columnCount);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelectedRows )(
+ IAccessibleTable * This,
+ /* [retval][out] */ long *rowCount);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowDescription )(
+ IAccessibleTable * This,
+ /* [in] */ long row,
+ /* [retval][out] */ BSTR *description);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowExtentAt )(
+ IAccessibleTable * This,
+ /* [in] */ long row,
+ /* [in] */ long column,
+ /* [retval][out] */ long *nRowsSpanned);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowHeader )(
+ IAccessibleTable * This,
+ /* [out] */ IAccessibleTable **accessibleTable,
+ /* [retval][out] */ long *startingColumnIndex);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowIndex )(
+ IAccessibleTable * This,
+ /* [in] */ long cellIndex,
+ /* [retval][out] */ long *rowIndex);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectedChildren )(
+ IAccessibleTable * This,
+ /* [in] */ long maxChildren,
+ /* [length_is][length_is][size_is][size_is][out] */ long **children,
+ /* [retval][out] */ long *nChildren);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectedColumns )(
+ IAccessibleTable * This,
+ /* [in] */ long maxColumns,
+ /* [length_is][length_is][size_is][size_is][out] */ long **columns,
+ /* [retval][out] */ long *nColumns);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectedRows )(
+ IAccessibleTable * This,
+ /* [in] */ long maxRows,
+ /* [length_is][length_is][size_is][size_is][out] */ long **rows,
+ /* [retval][out] */ long *nRows);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_summary )(
+ IAccessibleTable * This,
+ /* [retval][out] */ IUnknown **accessible);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isColumnSelected )(
+ IAccessibleTable * This,
+ /* [in] */ long column,
+ /* [retval][out] */ boolean *isSelected);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isRowSelected )(
+ IAccessibleTable * This,
+ /* [in] */ long row,
+ /* [retval][out] */ boolean *isSelected);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isSelected )(
+ IAccessibleTable * This,
+ /* [in] */ long row,
+ /* [in] */ long column,
+ /* [retval][out] */ boolean *isSelected);
+
+ HRESULT ( STDMETHODCALLTYPE *selectRow )(
+ IAccessibleTable * This,
+ /* [in] */ long row);
+
+ HRESULT ( STDMETHODCALLTYPE *selectColumn )(
+ IAccessibleTable * This,
+ /* [in] */ long column);
+
+ HRESULT ( STDMETHODCALLTYPE *unselectRow )(
+ IAccessibleTable * This,
+ /* [in] */ long row);
+
+ HRESULT ( STDMETHODCALLTYPE *unselectColumn )(
+ IAccessibleTable * This,
+ /* [in] */ long column);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowColumnExtentsAtIndex )(
+ IAccessibleTable * This,
+ /* [in] */ long index,
+ /* [out] */ long *row,
+ /* [out] */ long *column,
+ /* [out] */ long *rowExtents,
+ /* [out] */ long *columnExtents,
+ /* [retval][out] */ boolean *isSelected);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_modelChange )(
+ IAccessibleTable * This,
+ /* [retval][out] */ IA2TableModelChange *modelChange);
+
+ END_INTERFACE
+ } IAccessibleTableVtbl;
+
+ interface IAccessibleTable
+ {
+ CONST_VTBL struct IAccessibleTableVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessibleTable_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessibleTable_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessibleTable_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessibleTable_get_accessibleAt(This,row,column,accessible) \
+ ( (This)->lpVtbl -> get_accessibleAt(This,row,column,accessible) )
+
+#define IAccessibleTable_get_caption(This,accessible) \
+ ( (This)->lpVtbl -> get_caption(This,accessible) )
+
+#define IAccessibleTable_get_childIndex(This,rowIndex,columnIndex,cellIndex) \
+ ( (This)->lpVtbl -> get_childIndex(This,rowIndex,columnIndex,cellIndex) )
+
+#define IAccessibleTable_get_columnDescription(This,column,description) \
+ ( (This)->lpVtbl -> get_columnDescription(This,column,description) )
+
+#define IAccessibleTable_get_columnExtentAt(This,row,column,nColumnsSpanned) \
+ ( (This)->lpVtbl -> get_columnExtentAt(This,row,column,nColumnsSpanned) )
+
+#define IAccessibleTable_get_columnHeader(This,accessibleTable,startingRowIndex) \
+ ( (This)->lpVtbl -> get_columnHeader(This,accessibleTable,startingRowIndex) )
+
+#define IAccessibleTable_get_columnIndex(This,cellIndex,columnIndex) \
+ ( (This)->lpVtbl -> get_columnIndex(This,cellIndex,columnIndex) )
+
+#define IAccessibleTable_get_nColumns(This,columnCount) \
+ ( (This)->lpVtbl -> get_nColumns(This,columnCount) )
+
+#define IAccessibleTable_get_nRows(This,rowCount) \
+ ( (This)->lpVtbl -> get_nRows(This,rowCount) )
+
+#define IAccessibleTable_get_nSelectedChildren(This,cellCount) \
+ ( (This)->lpVtbl -> get_nSelectedChildren(This,cellCount) )
+
+#define IAccessibleTable_get_nSelectedColumns(This,columnCount) \
+ ( (This)->lpVtbl -> get_nSelectedColumns(This,columnCount) )
+
+#define IAccessibleTable_get_nSelectedRows(This,rowCount) \
+ ( (This)->lpVtbl -> get_nSelectedRows(This,rowCount) )
+
+#define IAccessibleTable_get_rowDescription(This,row,description) \
+ ( (This)->lpVtbl -> get_rowDescription(This,row,description) )
+
+#define IAccessibleTable_get_rowExtentAt(This,row,column,nRowsSpanned) \
+ ( (This)->lpVtbl -> get_rowExtentAt(This,row,column,nRowsSpanned) )
+
+#define IAccessibleTable_get_rowHeader(This,accessibleTable,startingColumnIndex) \
+ ( (This)->lpVtbl -> get_rowHeader(This,accessibleTable,startingColumnIndex) )
+
+#define IAccessibleTable_get_rowIndex(This,cellIndex,rowIndex) \
+ ( (This)->lpVtbl -> get_rowIndex(This,cellIndex,rowIndex) )
+
+#define IAccessibleTable_get_selectedChildren(This,maxChildren,children,nChildren) \
+ ( (This)->lpVtbl -> get_selectedChildren(This,maxChildren,children,nChildren) )
+
+#define IAccessibleTable_get_selectedColumns(This,maxColumns,columns,nColumns) \
+ ( (This)->lpVtbl -> get_selectedColumns(This,maxColumns,columns,nColumns) )
+
+#define IAccessibleTable_get_selectedRows(This,maxRows,rows,nRows) \
+ ( (This)->lpVtbl -> get_selectedRows(This,maxRows,rows,nRows) )
+
+#define IAccessibleTable_get_summary(This,accessible) \
+ ( (This)->lpVtbl -> get_summary(This,accessible) )
+
+#define IAccessibleTable_get_isColumnSelected(This,column,isSelected) \
+ ( (This)->lpVtbl -> get_isColumnSelected(This,column,isSelected) )
+
+#define IAccessibleTable_get_isRowSelected(This,row,isSelected) \
+ ( (This)->lpVtbl -> get_isRowSelected(This,row,isSelected) )
+
+#define IAccessibleTable_get_isSelected(This,row,column,isSelected) \
+ ( (This)->lpVtbl -> get_isSelected(This,row,column,isSelected) )
+
+#define IAccessibleTable_selectRow(This,row) \
+ ( (This)->lpVtbl -> selectRow(This,row) )
+
+#define IAccessibleTable_selectColumn(This,column) \
+ ( (This)->lpVtbl -> selectColumn(This,column) )
+
+#define IAccessibleTable_unselectRow(This,row) \
+ ( (This)->lpVtbl -> unselectRow(This,row) )
+
+#define IAccessibleTable_unselectColumn(This,column) \
+ ( (This)->lpVtbl -> unselectColumn(This,column) )
+
+#define IAccessibleTable_get_rowColumnExtentsAtIndex(This,index,row,column,rowExtents,columnExtents,isSelected) \
+ ( (This)->lpVtbl -> get_rowColumnExtentsAtIndex(This,index,row,column,rowExtents,columnExtents,isSelected) )
+
+#define IAccessibleTable_get_modelChange(This,modelChange) \
+ ( (This)->lpVtbl -> get_modelChange(This,modelChange) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessibleTable_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAccessibleTable2_INTERFACE_DEFINED__
+#define __IAccessibleTable2_INTERFACE_DEFINED__
+
+/* interface IAccessibleTable2 */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessibleTable2;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("6167f295-06f0-4cdd-a1fa-02e25153d869")
+ IAccessibleTable2 : public IUnknown
+ {
+ public:
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_cellAt(
+ /* [in] */ long row,
+ /* [in] */ long column,
+ /* [retval][out] */ IUnknown **cell) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_caption(
+ /* [retval][out] */ IUnknown **accessible) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnDescription(
+ /* [in] */ long column,
+ /* [retval][out] */ BSTR *description) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nColumns(
+ /* [retval][out] */ long *columnCount) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nRows(
+ /* [retval][out] */ long *rowCount) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelectedCells(
+ /* [retval][out] */ long *cellCount) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelectedColumns(
+ /* [retval][out] */ long *columnCount) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelectedRows(
+ /* [retval][out] */ long *rowCount) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowDescription(
+ /* [in] */ long row,
+ /* [retval][out] */ BSTR *description) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selectedCells(
+ /* [size_is][size_is][out] */ IUnknown ***cells,
+ /* [retval][out] */ long *nSelectedCells) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selectedColumns(
+ /* [size_is][size_is][out] */ long **selectedColumns,
+ /* [retval][out] */ long *nColumns) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selectedRows(
+ /* [size_is][size_is][out] */ long **selectedRows,
+ /* [retval][out] */ long *nRows) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_summary(
+ /* [retval][out] */ IUnknown **accessible) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isColumnSelected(
+ /* [in] */ long column,
+ /* [retval][out] */ boolean *isSelected) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isRowSelected(
+ /* [in] */ long row,
+ /* [retval][out] */ boolean *isSelected) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE selectRow(
+ /* [in] */ long row) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE selectColumn(
+ /* [in] */ long column) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE unselectRow(
+ /* [in] */ long row) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE unselectColumn(
+ /* [in] */ long column) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_modelChange(
+ /* [retval][out] */ IA2TableModelChange *modelChange) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessibleTable2Vtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessibleTable2 * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessibleTable2 * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessibleTable2 * This);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_cellAt )(
+ IAccessibleTable2 * This,
+ /* [in] */ long row,
+ /* [in] */ long column,
+ /* [retval][out] */ IUnknown **cell);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_caption )(
+ IAccessibleTable2 * This,
+ /* [retval][out] */ IUnknown **accessible);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnDescription )(
+ IAccessibleTable2 * This,
+ /* [in] */ long column,
+ /* [retval][out] */ BSTR *description);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nColumns )(
+ IAccessibleTable2 * This,
+ /* [retval][out] */ long *columnCount);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nRows )(
+ IAccessibleTable2 * This,
+ /* [retval][out] */ long *rowCount);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelectedCells )(
+ IAccessibleTable2 * This,
+ /* [retval][out] */ long *cellCount);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelectedColumns )(
+ IAccessibleTable2 * This,
+ /* [retval][out] */ long *columnCount);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelectedRows )(
+ IAccessibleTable2 * This,
+ /* [retval][out] */ long *rowCount);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowDescription )(
+ IAccessibleTable2 * This,
+ /* [in] */ long row,
+ /* [retval][out] */ BSTR *description);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectedCells )(
+ IAccessibleTable2 * This,
+ /* [size_is][size_is][out] */ IUnknown ***cells,
+ /* [retval][out] */ long *nSelectedCells);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectedColumns )(
+ IAccessibleTable2 * This,
+ /* [size_is][size_is][out] */ long **selectedColumns,
+ /* [retval][out] */ long *nColumns);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectedRows )(
+ IAccessibleTable2 * This,
+ /* [size_is][size_is][out] */ long **selectedRows,
+ /* [retval][out] */ long *nRows);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_summary )(
+ IAccessibleTable2 * This,
+ /* [retval][out] */ IUnknown **accessible);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isColumnSelected )(
+ IAccessibleTable2 * This,
+ /* [in] */ long column,
+ /* [retval][out] */ boolean *isSelected);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isRowSelected )(
+ IAccessibleTable2 * This,
+ /* [in] */ long row,
+ /* [retval][out] */ boolean *isSelected);
+
+ HRESULT ( STDMETHODCALLTYPE *selectRow )(
+ IAccessibleTable2 * This,
+ /* [in] */ long row);
+
+ HRESULT ( STDMETHODCALLTYPE *selectColumn )(
+ IAccessibleTable2 * This,
+ /* [in] */ long column);
+
+ HRESULT ( STDMETHODCALLTYPE *unselectRow )(
+ IAccessibleTable2 * This,
+ /* [in] */ long row);
+
+ HRESULT ( STDMETHODCALLTYPE *unselectColumn )(
+ IAccessibleTable2 * This,
+ /* [in] */ long column);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_modelChange )(
+ IAccessibleTable2 * This,
+ /* [retval][out] */ IA2TableModelChange *modelChange);
+
+ END_INTERFACE
+ } IAccessibleTable2Vtbl;
+
+ interface IAccessibleTable2
+ {
+ CONST_VTBL struct IAccessibleTable2Vtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessibleTable2_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessibleTable2_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessibleTable2_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessibleTable2_get_cellAt(This,row,column,cell) \
+ ( (This)->lpVtbl -> get_cellAt(This,row,column,cell) )
+
+#define IAccessibleTable2_get_caption(This,accessible) \
+ ( (This)->lpVtbl -> get_caption(This,accessible) )
+
+#define IAccessibleTable2_get_columnDescription(This,column,description) \
+ ( (This)->lpVtbl -> get_columnDescription(This,column,description) )
+
+#define IAccessibleTable2_get_nColumns(This,columnCount) \
+ ( (This)->lpVtbl -> get_nColumns(This,columnCount) )
+
+#define IAccessibleTable2_get_nRows(This,rowCount) \
+ ( (This)->lpVtbl -> get_nRows(This,rowCount) )
+
+#define IAccessibleTable2_get_nSelectedCells(This,cellCount) \
+ ( (This)->lpVtbl -> get_nSelectedCells(This,cellCount) )
+
+#define IAccessibleTable2_get_nSelectedColumns(This,columnCount) \
+ ( (This)->lpVtbl -> get_nSelectedColumns(This,columnCount) )
+
+#define IAccessibleTable2_get_nSelectedRows(This,rowCount) \
+ ( (This)->lpVtbl -> get_nSelectedRows(This,rowCount) )
+
+#define IAccessibleTable2_get_rowDescription(This,row,description) \
+ ( (This)->lpVtbl -> get_rowDescription(This,row,description) )
+
+#define IAccessibleTable2_get_selectedCells(This,cells,nSelectedCells) \
+ ( (This)->lpVtbl -> get_selectedCells(This,cells,nSelectedCells) )
+
+#define IAccessibleTable2_get_selectedColumns(This,selectedColumns,nColumns) \
+ ( (This)->lpVtbl -> get_selectedColumns(This,selectedColumns,nColumns) )
+
+#define IAccessibleTable2_get_selectedRows(This,selectedRows,nRows) \
+ ( (This)->lpVtbl -> get_selectedRows(This,selectedRows,nRows) )
+
+#define IAccessibleTable2_get_summary(This,accessible) \
+ ( (This)->lpVtbl -> get_summary(This,accessible) )
+
+#define IAccessibleTable2_get_isColumnSelected(This,column,isSelected) \
+ ( (This)->lpVtbl -> get_isColumnSelected(This,column,isSelected) )
+
+#define IAccessibleTable2_get_isRowSelected(This,row,isSelected) \
+ ( (This)->lpVtbl -> get_isRowSelected(This,row,isSelected) )
+
+#define IAccessibleTable2_selectRow(This,row) \
+ ( (This)->lpVtbl -> selectRow(This,row) )
+
+#define IAccessibleTable2_selectColumn(This,column) \
+ ( (This)->lpVtbl -> selectColumn(This,column) )
+
+#define IAccessibleTable2_unselectRow(This,row) \
+ ( (This)->lpVtbl -> unselectRow(This,row) )
+
+#define IAccessibleTable2_unselectColumn(This,column) \
+ ( (This)->lpVtbl -> unselectColumn(This,column) )
+
+#define IAccessibleTable2_get_modelChange(This,modelChange) \
+ ( (This)->lpVtbl -> get_modelChange(This,modelChange) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessibleTable2_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAccessibleTableCell_INTERFACE_DEFINED__
+#define __IAccessibleTableCell_INTERFACE_DEFINED__
+
+/* interface IAccessibleTableCell */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessibleTableCell;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("594116B1-C99F-4847-AD06-0A7A86ECE645")
+ IAccessibleTableCell : public IUnknown
+ {
+ public:
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnExtent(
+ /* [retval][out] */ long *nColumnsSpanned) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnHeaderCells(
+ /* [size_is][size_is][out] */ IUnknown ***cellAccessibles,
+ /* [retval][out] */ long *nColumnHeaderCells) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnIndex(
+ /* [retval][out] */ long *columnIndex) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowExtent(
+ /* [retval][out] */ long *nRowsSpanned) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowHeaderCells(
+ /* [size_is][size_is][out] */ IUnknown ***cellAccessibles,
+ /* [retval][out] */ long *nRowHeaderCells) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowIndex(
+ /* [retval][out] */ long *rowIndex) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isSelected(
+ /* [retval][out] */ boolean *isSelected) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowColumnExtents(
+ /* [out] */ long *row,
+ /* [out] */ long *column,
+ /* [out] */ long *rowExtents,
+ /* [out] */ long *columnExtents,
+ /* [retval][out] */ boolean *isSelected) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_table(
+ /* [retval][out] */ IUnknown **table) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessibleTableCellVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessibleTableCell * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessibleTableCell * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessibleTableCell * This);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnExtent )(
+ IAccessibleTableCell * This,
+ /* [retval][out] */ long *nColumnsSpanned);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnHeaderCells )(
+ IAccessibleTableCell * This,
+ /* [size_is][size_is][out] */ IUnknown ***cellAccessibles,
+ /* [retval][out] */ long *nColumnHeaderCells);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnIndex )(
+ IAccessibleTableCell * This,
+ /* [retval][out] */ long *columnIndex);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowExtent )(
+ IAccessibleTableCell * This,
+ /* [retval][out] */ long *nRowsSpanned);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowHeaderCells )(
+ IAccessibleTableCell * This,
+ /* [size_is][size_is][out] */ IUnknown ***cellAccessibles,
+ /* [retval][out] */ long *nRowHeaderCells);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowIndex )(
+ IAccessibleTableCell * This,
+ /* [retval][out] */ long *rowIndex);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isSelected )(
+ IAccessibleTableCell * This,
+ /* [retval][out] */ boolean *isSelected);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowColumnExtents )(
+ IAccessibleTableCell * This,
+ /* [out] */ long *row,
+ /* [out] */ long *column,
+ /* [out] */ long *rowExtents,
+ /* [out] */ long *columnExtents,
+ /* [retval][out] */ boolean *isSelected);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_table )(
+ IAccessibleTableCell * This,
+ /* [retval][out] */ IUnknown **table);
+
+ END_INTERFACE
+ } IAccessibleTableCellVtbl;
+
+ interface IAccessibleTableCell
+ {
+ CONST_VTBL struct IAccessibleTableCellVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessibleTableCell_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessibleTableCell_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessibleTableCell_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessibleTableCell_get_columnExtent(This,nColumnsSpanned) \
+ ( (This)->lpVtbl -> get_columnExtent(This,nColumnsSpanned) )
+
+#define IAccessibleTableCell_get_columnHeaderCells(This,cellAccessibles,nColumnHeaderCells) \
+ ( (This)->lpVtbl -> get_columnHeaderCells(This,cellAccessibles,nColumnHeaderCells) )
+
+#define IAccessibleTableCell_get_columnIndex(This,columnIndex) \
+ ( (This)->lpVtbl -> get_columnIndex(This,columnIndex) )
+
+#define IAccessibleTableCell_get_rowExtent(This,nRowsSpanned) \
+ ( (This)->lpVtbl -> get_rowExtent(This,nRowsSpanned) )
+
+#define IAccessibleTableCell_get_rowHeaderCells(This,cellAccessibles,nRowHeaderCells) \
+ ( (This)->lpVtbl -> get_rowHeaderCells(This,cellAccessibles,nRowHeaderCells) )
+
+#define IAccessibleTableCell_get_rowIndex(This,rowIndex) \
+ ( (This)->lpVtbl -> get_rowIndex(This,rowIndex) )
+
+#define IAccessibleTableCell_get_isSelected(This,isSelected) \
+ ( (This)->lpVtbl -> get_isSelected(This,isSelected) )
+
+#define IAccessibleTableCell_get_rowColumnExtents(This,row,column,rowExtents,columnExtents,isSelected) \
+ ( (This)->lpVtbl -> get_rowColumnExtents(This,row,column,rowExtents,columnExtents,isSelected) )
+
+#define IAccessibleTableCell_get_table(This,table) \
+ ( (This)->lpVtbl -> get_table(This,table) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessibleTableCell_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAccessibleImage_INTERFACE_DEFINED__
+#define __IAccessibleImage_INTERFACE_DEFINED__
+
+/* interface IAccessibleImage */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessibleImage;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("FE5ABB3D-615E-4f7b-909F-5F0EDA9E8DDE")
+ IAccessibleImage : public IUnknown
+ {
+ public:
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_description(
+ /* [retval][out] */ BSTR *description) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_imagePosition(
+ /* [in] */ enum IA2CoordinateType coordinateType,
+ /* [out] */ long *x,
+ /* [retval][out] */ long *y) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_imageSize(
+ /* [out] */ long *height,
+ /* [retval][out] */ long *width) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessibleImageVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessibleImage * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessibleImage * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessibleImage * This);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_description )(
+ IAccessibleImage * This,
+ /* [retval][out] */ BSTR *description);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_imagePosition )(
+ IAccessibleImage * This,
+ /* [in] */ enum IA2CoordinateType coordinateType,
+ /* [out] */ long *x,
+ /* [retval][out] */ long *y);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_imageSize )(
+ IAccessibleImage * This,
+ /* [out] */ long *height,
+ /* [retval][out] */ long *width);
+
+ END_INTERFACE
+ } IAccessibleImageVtbl;
+
+ interface IAccessibleImage
+ {
+ CONST_VTBL struct IAccessibleImageVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessibleImage_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessibleImage_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessibleImage_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessibleImage_get_description(This,description) \
+ ( (This)->lpVtbl -> get_description(This,description) )
+
+#define IAccessibleImage_get_imagePosition(This,coordinateType,x,y) \
+ ( (This)->lpVtbl -> get_imagePosition(This,coordinateType,x,y) )
+
+#define IAccessibleImage_get_imageSize(This,height,width) \
+ ( (This)->lpVtbl -> get_imageSize(This,height,width) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessibleImage_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_ia2_api_all_0000_0016 */
+/* [local] */
+
+
+enum IA2EventID
+ { IA2_EVENT_ACTION_CHANGED = 0x101,
+ IA2_EVENT_ACTIVE_DECENDENT_CHANGED = ( IA2_EVENT_ACTION_CHANGED + 1 ) ,
+ IA2_EVENT_ACTIVE_DESCENDANT_CHANGED = IA2_EVENT_ACTIVE_DECENDENT_CHANGED,
+ IA2_EVENT_DOCUMENT_ATTRIBUTE_CHANGED = ( IA2_EVENT_ACTIVE_DESCENDANT_CHANGED + 1 ) ,
+ IA2_EVENT_DOCUMENT_CONTENT_CHANGED = ( IA2_EVENT_DOCUMENT_ATTRIBUTE_CHANGED + 1 ) ,
+ IA2_EVENT_DOCUMENT_LOAD_COMPLETE = ( IA2_EVENT_DOCUMENT_CONTENT_CHANGED + 1 ) ,
+ IA2_EVENT_DOCUMENT_LOAD_STOPPED = ( IA2_EVENT_DOCUMENT_LOAD_COMPLETE + 1 ) ,
+ IA2_EVENT_DOCUMENT_RELOAD = ( IA2_EVENT_DOCUMENT_LOAD_STOPPED + 1 ) ,
+ IA2_EVENT_HYPERLINK_END_INDEX_CHANGED = ( IA2_EVENT_DOCUMENT_RELOAD + 1 ) ,
+ IA2_EVENT_HYPERLINK_NUMBER_OF_ANCHORS_CHANGED = ( IA2_EVENT_HYPERLINK_END_INDEX_CHANGED + 1 ) ,
+ IA2_EVENT_HYPERLINK_SELECTED_LINK_CHANGED = ( IA2_EVENT_HYPERLINK_NUMBER_OF_ANCHORS_CHANGED + 1 ) ,
+ IA2_EVENT_HYPERTEXT_LINK_ACTIVATED = ( IA2_EVENT_HYPERLINK_SELECTED_LINK_CHANGED + 1 ) ,
+ IA2_EVENT_HYPERTEXT_LINK_SELECTED = ( IA2_EVENT_HYPERTEXT_LINK_ACTIVATED + 1 ) ,
+ IA2_EVENT_HYPERLINK_START_INDEX_CHANGED = ( IA2_EVENT_HYPERTEXT_LINK_SELECTED + 1 ) ,
+ IA2_EVENT_HYPERTEXT_CHANGED = ( IA2_EVENT_HYPERLINK_START_INDEX_CHANGED + 1 ) ,
+ IA2_EVENT_HYPERTEXT_NLINKS_CHANGED = ( IA2_EVENT_HYPERTEXT_CHANGED + 1 ) ,
+ IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED = ( IA2_EVENT_HYPERTEXT_NLINKS_CHANGED + 1 ) ,
+ IA2_EVENT_PAGE_CHANGED = ( IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED + 1 ) ,
+ IA2_EVENT_SECTION_CHANGED = ( IA2_EVENT_PAGE_CHANGED + 1 ) ,
+ IA2_EVENT_TABLE_CAPTION_CHANGED = ( IA2_EVENT_SECTION_CHANGED + 1 ) ,
+ IA2_EVENT_TABLE_COLUMN_DESCRIPTION_CHANGED = ( IA2_EVENT_TABLE_CAPTION_CHANGED + 1 ) ,
+ IA2_EVENT_TABLE_COLUMN_HEADER_CHANGED = ( IA2_EVENT_TABLE_COLUMN_DESCRIPTION_CHANGED + 1 ) ,
+ IA2_EVENT_TABLE_MODEL_CHANGED = ( IA2_EVENT_TABLE_COLUMN_HEADER_CHANGED + 1 ) ,
+ IA2_EVENT_TABLE_ROW_DESCRIPTION_CHANGED = ( IA2_EVENT_TABLE_MODEL_CHANGED + 1 ) ,
+ IA2_EVENT_TABLE_ROW_HEADER_CHANGED = ( IA2_EVENT_TABLE_ROW_DESCRIPTION_CHANGED + 1 ) ,
+ IA2_EVENT_TABLE_SUMMARY_CHANGED = ( IA2_EVENT_TABLE_ROW_HEADER_CHANGED + 1 ) ,
+ IA2_EVENT_TEXT_ATTRIBUTE_CHANGED = ( IA2_EVENT_TABLE_SUMMARY_CHANGED + 1 ) ,
+ IA2_EVENT_TEXT_CARET_MOVED = ( IA2_EVENT_TEXT_ATTRIBUTE_CHANGED + 1 ) ,
+ IA2_EVENT_TEXT_CHANGED = ( IA2_EVENT_TEXT_CARET_MOVED + 1 ) ,
+ IA2_EVENT_TEXT_COLUMN_CHANGED = ( IA2_EVENT_TEXT_CHANGED + 1 ) ,
+ IA2_EVENT_TEXT_INSERTED = ( IA2_EVENT_TEXT_COLUMN_CHANGED + 1 ) ,
+ IA2_EVENT_TEXT_REMOVED = ( IA2_EVENT_TEXT_INSERTED + 1 ) ,
+ IA2_EVENT_TEXT_UPDATED = ( IA2_EVENT_TEXT_REMOVED + 1 ) ,
+ IA2_EVENT_TEXT_SELECTION_CHANGED = ( IA2_EVENT_TEXT_UPDATED + 1 ) ,
+ IA2_EVENT_VISIBLE_DATA_CHANGED = ( IA2_EVENT_TEXT_SELECTION_CHANGED + 1 )
+ } ;
+
+
+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0016_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0016_v0_0_s_ifspec;
+
+#ifndef __IAccessibleApplication_INTERFACE_DEFINED__
+#define __IAccessibleApplication_INTERFACE_DEFINED__
+
+/* interface IAccessibleApplication */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessibleApplication;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("D49DED83-5B25-43F4-9B95-93B44595979E")
+ IAccessibleApplication : public IUnknown
+ {
+ public:
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_appName(
+ /* [retval][out] */ BSTR *name) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_appVersion(
+ /* [retval][out] */ BSTR *version) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_toolkitName(
+ /* [retval][out] */ BSTR *name) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_toolkitVersion(
+ /* [retval][out] */ BSTR *version) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessibleApplicationVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessibleApplication * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessibleApplication * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessibleApplication * This);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_appName )(
+ IAccessibleApplication * This,
+ /* [retval][out] */ BSTR *name);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_appVersion )(
+ IAccessibleApplication * This,
+ /* [retval][out] */ BSTR *version);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_toolkitName )(
+ IAccessibleApplication * This,
+ /* [retval][out] */ BSTR *name);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_toolkitVersion )(
+ IAccessibleApplication * This,
+ /* [retval][out] */ BSTR *version);
+
+ END_INTERFACE
+ } IAccessibleApplicationVtbl;
+
+ interface IAccessibleApplication
+ {
+ CONST_VTBL struct IAccessibleApplicationVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessibleApplication_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessibleApplication_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessibleApplication_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessibleApplication_get_appName(This,name) \
+ ( (This)->lpVtbl -> get_appName(This,name) )
+
+#define IAccessibleApplication_get_appVersion(This,version) \
+ ( (This)->lpVtbl -> get_appVersion(This,version) )
+
+#define IAccessibleApplication_get_toolkitName(This,name) \
+ ( (This)->lpVtbl -> get_toolkitName(This,name) )
+
+#define IAccessibleApplication_get_toolkitVersion(This,version) \
+ ( (This)->lpVtbl -> get_toolkitVersion(This,version) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessibleApplication_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAccessibleDocument_INTERFACE_DEFINED__
+#define __IAccessibleDocument_INTERFACE_DEFINED__
+
+/* interface IAccessibleDocument */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessibleDocument;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("C48C7FCF-4AB5-4056-AFA6-902D6E1D1149")
+ IAccessibleDocument : public IUnknown
+ {
+ public:
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_anchorTarget(
+ /* [retval][out] */ IUnknown **accessible) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessibleDocumentVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessibleDocument * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessibleDocument * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessibleDocument * This);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_anchorTarget )(
+ IAccessibleDocument * This,
+ /* [retval][out] */ IUnknown **accessible);
+
+ END_INTERFACE
+ } IAccessibleDocumentVtbl;
+
+ interface IAccessibleDocument
+ {
+ CONST_VTBL struct IAccessibleDocumentVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessibleDocument_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessibleDocument_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessibleDocument_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessibleDocument_get_anchorTarget(This,accessible) \
+ ( (This)->lpVtbl -> get_anchorTarget(This,accessible) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessibleDocument_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_ia2_api_all_0000_0018 */
+/* [local] */
+
+
+// Type Library Definitions
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0018_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0018_v0_0_s_ifspec;
+
+
+#ifndef __IAccessible2Lib_LIBRARY_DEFINED__
+#define __IAccessible2Lib_LIBRARY_DEFINED__
+
+/* library IAccessible2Lib */
+/* [hidden][version][helpstring][uuid] */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+EXTERN_C const IID LIBID_IAccessible2Lib;
+#endif /* __IAccessible2Lib_LIBRARY_DEFINED__ */
+
+/* Additional Prototypes for ALL interfaces */
+
+unsigned long __RPC_USER BSTR_UserSize( unsigned long *, unsigned long , BSTR * );
+unsigned char * __RPC_USER BSTR_UserMarshal( unsigned long *, unsigned char *, BSTR * );
+unsigned char * __RPC_USER BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * );
+void __RPC_USER BSTR_UserFree( unsigned long *, BSTR * );
+
+unsigned long __RPC_USER HWND_UserSize( unsigned long *, unsigned long , HWND * );
+unsigned char * __RPC_USER HWND_UserMarshal( unsigned long *, unsigned char *, HWND * );
+unsigned char * __RPC_USER HWND_UserUnmarshal(unsigned long *, unsigned char *, HWND * );
+void __RPC_USER HWND_UserFree( unsigned long *, HWND * );
+
+unsigned long __RPC_USER VARIANT_UserSize( unsigned long *, unsigned long , VARIANT * );
+unsigned char * __RPC_USER VARIANT_UserMarshal( unsigned long *, unsigned char *, VARIANT * );
+unsigned char * __RPC_USER VARIANT_UserUnmarshal(unsigned long *, unsigned char *, VARIANT * );
+void __RPC_USER VARIANT_UserFree( unsigned long *, VARIANT * );
+
+/* end of Additional Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+
diff --git a/src/3rdparty/iaccessible2/generated/amd64/ia2_api_all.tlb b/src/3rdparty/iaccessible2/generated/amd64/ia2_api_all.tlb
new file mode 100644
index 0000000000..7d0b47e312
--- /dev/null
+++ b/src/3rdparty/iaccessible2/generated/amd64/ia2_api_all.tlb
Binary files differ
diff --git a/src/3rdparty/iaccessible2/generated/amd64/ia2_api_all_i.c b/src/3rdparty/iaccessible2/generated/amd64/ia2_api_all_i.c
new file mode 100644
index 0000000000..e04a5dcb69
--- /dev/null
+++ b/src/3rdparty/iaccessible2/generated/amd64/ia2_api_all_i.c
@@ -0,0 +1,133 @@
+
+
+/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
+
+/* link this file in with the server and any clients */
+
+
+ /* File created by MIDL compiler version 7.00.0555 */
+/* at Mon Aug 11 14:34:44 2014
+ */
+/* Compiler settings for ia2_api_all.idl:
+ Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
+ protocol : dce , ms_ext, c_ext, robust
+ error checks: allocation ref bounds_check enum stub_data
+ VC __declspec() decoration level:
+ __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+ DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+/* @@MIDL_FILE_HEADING( ) */
+
+#pragma warning( disable: 4049 ) /* more than 64k source lines */
+
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifdef _MIDL_USE_GUIDDEF_
+
+#ifndef INITGUID
+#define INITGUID
+#include <guiddef.h>
+#undef INITGUID
+#else
+#include <guiddef.h>
+#endif
+
+#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
+ DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
+
+#else // !_MIDL_USE_GUIDDEF_
+
+#ifndef __IID_DEFINED__
+#define __IID_DEFINED__
+
+typedef struct _IID
+{
+ unsigned long x;
+ unsigned short s1;
+ unsigned short s2;
+ unsigned char c[8];
+} IID;
+
+#endif // __IID_DEFINED__
+
+#ifndef CLSID_DEFINED
+#define CLSID_DEFINED
+typedef IID CLSID;
+#endif // CLSID_DEFINED
+
+#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
+ const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
+
+#endif !_MIDL_USE_GUIDDEF_
+
+MIDL_DEFINE_GUID(IID, IID_IAccessibleRelation,0x7CDF86EE,0xC3DA,0x496a,0xBD,0xA4,0x28,0x1B,0x33,0x6E,0x1F,0xDC);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessibleAction,0xB70D9F59,0x3B5A,0x4dba,0xAB,0x9E,0x22,0x01,0x2F,0x60,0x7D,0xF5);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessible2,0xE89F726E,0xC4F4,0x4c19,0xBB,0x19,0xB6,0x47,0xD7,0xFA,0x84,0x78);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessible2_2,0x6C9430E9,0x299D,0x4E6F,0xBD,0x01,0xA8,0x2A,0x1E,0x88,0xD3,0xFF);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessibleComponent,0x1546D4B0,0x4C98,0x4bda,0x89,0xAE,0x9A,0x64,0x74,0x8B,0xDD,0xE4);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessibleValue,0x35855B5B,0xC566,0x4fd0,0xA7,0xB1,0xE6,0x54,0x65,0x60,0x03,0x94);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessibleText,0x24FD2FFB,0x3AAD,0x4a08,0x83,0x35,0xA3,0xAD,0x89,0xC0,0xFB,0x4B);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessibleText2,0x9690A9CC,0x5C80,0x4DF5,0x85,0x2E,0x2D,0x5A,0xE4,0x18,0x9A,0x54);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessibleEditableText,0xA59AA09A,0x7011,0x4b65,0x93,0x9D,0x32,0xB1,0xFB,0x55,0x47,0xE3);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessibleHyperlink,0x01C20F2B,0x3DD2,0x400f,0x94,0x9F,0xAD,0x00,0xBD,0xAB,0x1D,0x41);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessibleHypertext,0x6B4F8BBF,0xF1F2,0x418a,0xB3,0x5E,0xA1,0x95,0xBC,0x41,0x03,0xB9);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessibleHypertext2,0xCF64D89F,0x8287,0x4B44,0x85,0x01,0xA8,0x27,0x45,0x3A,0x60,0x77);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessibleTable,0x35AD8070,0xC20C,0x4fb4,0xB0,0x94,0xF4,0xF7,0x27,0x5D,0xD4,0x69);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessibleTable2,0x6167f295,0x06f0,0x4cdd,0xa1,0xfa,0x02,0xe2,0x51,0x53,0xd8,0x69);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessibleTableCell,0x594116B1,0xC99F,0x4847,0xAD,0x06,0x0A,0x7A,0x86,0xEC,0xE6,0x45);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessibleImage,0xFE5ABB3D,0x615E,0x4f7b,0x90,0x9F,0x5F,0x0E,0xDA,0x9E,0x8D,0xDE);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessibleApplication,0xD49DED83,0x5B25,0x43F4,0x9B,0x95,0x93,0xB4,0x45,0x95,0x97,0x9E);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessibleDocument,0xC48C7FCF,0x4AB5,0x4056,0xAF,0xA6,0x90,0x2D,0x6E,0x1D,0x11,0x49);
+
+
+MIDL_DEFINE_GUID(IID, LIBID_IAccessible2Lib,0xCE3F726E,0xD1D3,0x44FE,0xB9,0x95,0xFF,0x1D,0xB3,0xB4,0x8B,0x2B);
+
+#undef MIDL_DEFINE_GUID
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
diff --git a/src/3rdparty/iaccessible2/generated/amd64/ia2_api_all_p.c b/src/3rdparty/iaccessible2/generated/amd64/ia2_api_all_p.c
new file mode 100644
index 0000000000..f869a631b2
--- /dev/null
+++ b/src/3rdparty/iaccessible2/generated/amd64/ia2_api_all_p.c
@@ -0,0 +1,7867 @@
+
+
+/* this ALWAYS GENERATED file contains the proxy stub code */
+
+
+ /* File created by MIDL compiler version 7.00.0555 */
+/* at Mon Aug 11 14:34:44 2014
+ */
+/* Compiler settings for ia2_api_all.idl:
+ Oicf, W1, Zp8, env=Win64 (32b run), target_arch=AMD64 7.00.0555
+ protocol : dce , ms_ext, c_ext, robust
+ error checks: allocation ref bounds_check enum stub_data
+ VC __declspec() decoration level:
+ __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+ DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+/* @@MIDL_FILE_HEADING( ) */
+
+#if defined(_M_AMD64)
+
+
+#pragma warning( disable: 4049 ) /* more than 64k source lines */
+#if _MSC_VER >= 1200
+#pragma warning(push)
+#endif
+
+#pragma warning( disable: 4211 ) /* redefine extern to static */
+#pragma warning( disable: 4232 ) /* dllimport identity*/
+#pragma warning( disable: 4024 ) /* array to pointer mapping*/
+#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */
+
+#define USE_STUBLESS_PROXY
+
+
+/* verify that the <rpcproxy.h> version is high enough to compile this file*/
+#ifndef __REDQ_RPCPROXY_H_VERSION__
+#define __REQUIRED_RPCPROXY_H_VERSION__ 475
+#endif
+
+
+#include "rpcproxy.h"
+#ifndef __RPCPROXY_H_VERSION__
+#error this stub requires an updated version of <rpcproxy.h>
+#endif /* __RPCPROXY_H_VERSION__ */
+
+
+#include "ia2_api_all.h"
+
+#define TYPE_FORMAT_STRING_SIZE 1467
+#define PROC_FORMAT_STRING_SIZE 5445
+#define EXPR_FORMAT_STRING_SIZE 1
+#define TRANSMIT_AS_TABLE_SIZE 0
+#define WIRE_MARSHAL_TABLE_SIZE 3
+
+typedef struct _ia2_api_all_MIDL_TYPE_FORMAT_STRING
+ {
+ short Pad;
+ unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
+ } ia2_api_all_MIDL_TYPE_FORMAT_STRING;
+
+typedef struct _ia2_api_all_MIDL_PROC_FORMAT_STRING
+ {
+ short Pad;
+ unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
+ } ia2_api_all_MIDL_PROC_FORMAT_STRING;
+
+typedef struct _ia2_api_all_MIDL_EXPR_FORMAT_STRING
+ {
+ long Pad;
+ unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
+ } ia2_api_all_MIDL_EXPR_FORMAT_STRING;
+
+
+static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
+{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
+
+
+extern const ia2_api_all_MIDL_TYPE_FORMAT_STRING ia2_api_all__MIDL_TypeFormatString;
+extern const ia2_api_all_MIDL_PROC_FORMAT_STRING ia2_api_all__MIDL_ProcFormatString;
+extern const ia2_api_all_MIDL_EXPR_FORMAT_STRING ia2_api_all__MIDL_ExprFormatString;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessibleRelation_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessibleRelation_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessibleAction_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessibleAction_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessible2_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessible2_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessible2_2_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessible2_2_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessibleComponent_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessibleComponent_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessibleValue_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessibleValue_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessibleText_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessibleText_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessibleText2_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessibleText2_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessibleEditableText_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessibleEditableText_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessibleHyperlink_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessibleHyperlink_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessibleHypertext_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessibleHypertext_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessibleHypertext2_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessibleHypertext2_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessibleTable_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessibleTable_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessibleTable2_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessibleTable2_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessibleTableCell_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessibleTableCell_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessibleImage_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessibleImage_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessibleApplication_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessibleApplication_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessibleDocument_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessibleDocument_ProxyInfo;
+
+
+extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ];
+
+#if !defined(__RPC_WIN64__)
+#error Invalid build platform for this stub.
+#endif
+
+static const ia2_api_all_MIDL_PROC_FORMAT_STRING ia2_api_all__MIDL_ProcFormatString =
+ {
+ 0,
+ {
+
+ /* Procedure get_appName */
+
+
+ /* Procedure get_description */
+
+
+ /* Procedure get_relationType */
+
+ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2 */ NdrFcLong( 0x0 ), /* 0 */
+/* 6 */ NdrFcShort( 0x3 ), /* 3 */
+/* 8 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 10 */ NdrFcShort( 0x0 ), /* 0 */
+/* 12 */ NdrFcShort( 0x8 ), /* 8 */
+/* 14 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 16 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 18 */ NdrFcShort( 0x1 ), /* 1 */
+/* 20 */ NdrFcShort( 0x0 ), /* 0 */
+/* 22 */ NdrFcShort( 0x0 ), /* 0 */
+/* 24 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter name */
+
+
+ /* Parameter description */
+
+
+ /* Parameter relationType */
+
+/* 26 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 28 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 30 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+
+ /* Return value */
+
+
+ /* Return value */
+
+/* 32 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 34 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 36 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_appVersion */
+
+
+ /* Procedure get_localizedRelationType */
+
+/* 38 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 40 */ NdrFcLong( 0x0 ), /* 0 */
+/* 44 */ NdrFcShort( 0x4 ), /* 4 */
+/* 46 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 48 */ NdrFcShort( 0x0 ), /* 0 */
+/* 50 */ NdrFcShort( 0x8 ), /* 8 */
+/* 52 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 54 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 56 */ NdrFcShort( 0x1 ), /* 1 */
+/* 58 */ NdrFcShort( 0x0 ), /* 0 */
+/* 60 */ NdrFcShort( 0x0 ), /* 0 */
+/* 62 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter version */
+
+
+ /* Parameter localizedRelationType */
+
+/* 64 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 66 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 68 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+
+ /* Return value */
+
+/* 70 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 72 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 74 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_columnIndex */
+
+
+ /* Procedure get_caretOffset */
+
+
+ /* Procedure get_background */
+
+
+ /* Procedure get_nTargets */
+
+/* 76 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 78 */ NdrFcLong( 0x0 ), /* 0 */
+/* 82 */ NdrFcShort( 0x5 ), /* 5 */
+/* 84 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 86 */ NdrFcShort( 0x0 ), /* 0 */
+/* 88 */ NdrFcShort( 0x24 ), /* 36 */
+/* 90 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 92 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 94 */ NdrFcShort( 0x0 ), /* 0 */
+/* 96 */ NdrFcShort( 0x0 ), /* 0 */
+/* 98 */ NdrFcShort( 0x0 ), /* 0 */
+/* 100 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter columnIndex */
+
+
+ /* Parameter offset */
+
+
+ /* Parameter background */
+
+
+ /* Parameter nTargets */
+
+/* 102 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 104 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 106 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+
+ /* Return value */
+
+
+ /* Return value */
+
+
+ /* Return value */
+
+/* 108 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 110 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 112 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_target */
+
+/* 114 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 116 */ NdrFcLong( 0x0 ), /* 0 */
+/* 120 */ NdrFcShort( 0x6 ), /* 6 */
+/* 122 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 124 */ NdrFcShort( 0x8 ), /* 8 */
+/* 126 */ NdrFcShort( 0x8 ), /* 8 */
+/* 128 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 130 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 132 */ NdrFcShort( 0x0 ), /* 0 */
+/* 134 */ NdrFcShort( 0x0 ), /* 0 */
+/* 136 */ NdrFcShort( 0x0 ), /* 0 */
+/* 138 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter targetIndex */
+
+/* 140 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 142 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 144 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter target */
+
+/* 146 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
+/* 148 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 150 */ NdrFcShort( 0x2e ), /* Type Offset=46 */
+
+ /* Return value */
+
+/* 152 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 154 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 156 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_targets */
+
+/* 158 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 160 */ NdrFcLong( 0x0 ), /* 0 */
+/* 164 */ NdrFcShort( 0x7 ), /* 7 */
+/* 166 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
+/* 168 */ NdrFcShort( 0x8 ), /* 8 */
+/* 170 */ NdrFcShort( 0x24 ), /* 36 */
+/* 172 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x4, /* 4 */
+/* 174 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 176 */ NdrFcShort( 0x1 ), /* 1 */
+/* 178 */ NdrFcShort( 0x0 ), /* 0 */
+/* 180 */ NdrFcShort( 0x0 ), /* 0 */
+/* 182 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter maxTargets */
+
+/* 184 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 186 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 188 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter targets */
+
+/* 190 */ NdrFcShort( 0x113 ), /* Flags: must size, must free, out, simple ref, */
+/* 192 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 194 */ NdrFcShort( 0x48 ), /* Type Offset=72 */
+
+ /* Parameter nTargets */
+
+/* 196 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 198 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 200 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 202 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 204 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 206 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_columnExtent */
+
+
+ /* Procedure nActions */
+
+/* 208 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 210 */ NdrFcLong( 0x0 ), /* 0 */
+/* 214 */ NdrFcShort( 0x3 ), /* 3 */
+/* 216 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 218 */ NdrFcShort( 0x0 ), /* 0 */
+/* 220 */ NdrFcShort( 0x24 ), /* 36 */
+/* 222 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 224 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 226 */ NdrFcShort( 0x0 ), /* 0 */
+/* 228 */ NdrFcShort( 0x0 ), /* 0 */
+/* 230 */ NdrFcShort( 0x0 ), /* 0 */
+/* 232 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter nColumnsSpanned */
+
+
+ /* Parameter nActions */
+
+/* 234 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 236 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 238 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+
+ /* Return value */
+
+/* 240 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 242 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 244 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure doAction */
+
+/* 246 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 248 */ NdrFcLong( 0x0 ), /* 0 */
+/* 252 */ NdrFcShort( 0x4 ), /* 4 */
+/* 254 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 256 */ NdrFcShort( 0x8 ), /* 8 */
+/* 258 */ NdrFcShort( 0x8 ), /* 8 */
+/* 260 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 262 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 264 */ NdrFcShort( 0x0 ), /* 0 */
+/* 266 */ NdrFcShort( 0x0 ), /* 0 */
+/* 268 */ NdrFcShort( 0x0 ), /* 0 */
+/* 270 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter actionIndex */
+
+/* 272 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 274 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 276 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 278 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 280 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 282 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_columnDescription */
+
+
+ /* Procedure get_description */
+
+/* 284 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 286 */ NdrFcLong( 0x0 ), /* 0 */
+/* 290 */ NdrFcShort( 0x5 ), /* 5 */
+/* 292 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 294 */ NdrFcShort( 0x8 ), /* 8 */
+/* 296 */ NdrFcShort( 0x8 ), /* 8 */
+/* 298 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 300 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 302 */ NdrFcShort( 0x1 ), /* 1 */
+/* 304 */ NdrFcShort( 0x0 ), /* 0 */
+/* 306 */ NdrFcShort( 0x0 ), /* 0 */
+/* 308 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter column */
+
+
+ /* Parameter actionIndex */
+
+/* 310 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 312 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 314 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter description */
+
+
+ /* Parameter description */
+
+/* 316 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 318 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 320 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+
+ /* Return value */
+
+/* 322 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 324 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 326 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_keyBinding */
+
+/* 328 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 330 */ NdrFcLong( 0x0 ), /* 0 */
+/* 334 */ NdrFcShort( 0x6 ), /* 6 */
+/* 336 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */
+/* 338 */ NdrFcShort( 0x10 ), /* 16 */
+/* 340 */ NdrFcShort( 0x24 ), /* 36 */
+/* 342 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x5, /* 5 */
+/* 344 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 346 */ NdrFcShort( 0x1 ), /* 1 */
+/* 348 */ NdrFcShort( 0x0 ), /* 0 */
+/* 350 */ NdrFcShort( 0x0 ), /* 0 */
+/* 352 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter actionIndex */
+
+/* 354 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 356 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 358 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter nMaxBindings */
+
+/* 360 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 362 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 364 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter keyBindings */
+
+/* 366 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
+/* 368 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 370 */ NdrFcShort( 0x5e ), /* Type Offset=94 */
+
+ /* Parameter nBindings */
+
+/* 372 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 374 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 376 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 378 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 380 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
+/* 382 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_name */
+
+/* 384 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 386 */ NdrFcLong( 0x0 ), /* 0 */
+/* 390 */ NdrFcShort( 0x7 ), /* 7 */
+/* 392 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 394 */ NdrFcShort( 0x8 ), /* 8 */
+/* 396 */ NdrFcShort( 0x8 ), /* 8 */
+/* 398 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 400 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 402 */ NdrFcShort( 0x1 ), /* 1 */
+/* 404 */ NdrFcShort( 0x0 ), /* 0 */
+/* 406 */ NdrFcShort( 0x0 ), /* 0 */
+/* 408 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter actionIndex */
+
+/* 410 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 412 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 414 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter name */
+
+/* 416 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 418 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 420 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+/* 422 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 424 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 426 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_localizedName */
+
+/* 428 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 430 */ NdrFcLong( 0x0 ), /* 0 */
+/* 434 */ NdrFcShort( 0x8 ), /* 8 */
+/* 436 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 438 */ NdrFcShort( 0x8 ), /* 8 */
+/* 440 */ NdrFcShort( 0x8 ), /* 8 */
+/* 442 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 444 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 446 */ NdrFcShort( 0x1 ), /* 1 */
+/* 448 */ NdrFcShort( 0x0 ), /* 0 */
+/* 450 */ NdrFcShort( 0x0 ), /* 0 */
+/* 452 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter actionIndex */
+
+/* 454 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 456 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 458 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter localizedName */
+
+/* 460 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 462 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 464 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+/* 466 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 468 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 470 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_nRelations */
+
+/* 472 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 474 */ NdrFcLong( 0x0 ), /* 0 */
+/* 478 */ NdrFcShort( 0x1c ), /* 28 */
+/* 480 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 482 */ NdrFcShort( 0x0 ), /* 0 */
+/* 484 */ NdrFcShort( 0x24 ), /* 36 */
+/* 486 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 488 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 490 */ NdrFcShort( 0x0 ), /* 0 */
+/* 492 */ NdrFcShort( 0x0 ), /* 0 */
+/* 494 */ NdrFcShort( 0x0 ), /* 0 */
+/* 496 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter nRelations */
+
+/* 498 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 500 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 502 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 504 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 506 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 508 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_relation */
+
+/* 510 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 512 */ NdrFcLong( 0x0 ), /* 0 */
+/* 516 */ NdrFcShort( 0x1d ), /* 29 */
+/* 518 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 520 */ NdrFcShort( 0x8 ), /* 8 */
+/* 522 */ NdrFcShort( 0x8 ), /* 8 */
+/* 524 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 526 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 528 */ NdrFcShort( 0x0 ), /* 0 */
+/* 530 */ NdrFcShort( 0x0 ), /* 0 */
+/* 532 */ NdrFcShort( 0x0 ), /* 0 */
+/* 534 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter relationIndex */
+
+/* 536 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 538 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 540 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter relation */
+
+/* 542 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
+/* 544 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 546 */ NdrFcShort( 0x7c ), /* Type Offset=124 */
+
+ /* Return value */
+
+/* 548 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 550 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 552 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_relations */
+
+/* 554 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 556 */ NdrFcLong( 0x0 ), /* 0 */
+/* 560 */ NdrFcShort( 0x1e ), /* 30 */
+/* 562 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
+/* 564 */ NdrFcShort( 0x8 ), /* 8 */
+/* 566 */ NdrFcShort( 0x24 ), /* 36 */
+/* 568 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x4, /* 4 */
+/* 570 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 572 */ NdrFcShort( 0x1 ), /* 1 */
+/* 574 */ NdrFcShort( 0x0 ), /* 0 */
+/* 576 */ NdrFcShort( 0x0 ), /* 0 */
+/* 578 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter maxRelations */
+
+/* 580 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 582 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 584 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter relations */
+
+/* 586 */ NdrFcShort( 0x113 ), /* Flags: must size, must free, out, simple ref, */
+/* 588 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 590 */ NdrFcShort( 0x96 ), /* Type Offset=150 */
+
+ /* Parameter nRelations */
+
+/* 592 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 594 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 596 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 598 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 600 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 602 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure role */
+
+/* 604 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 606 */ NdrFcLong( 0x0 ), /* 0 */
+/* 610 */ NdrFcShort( 0x1f ), /* 31 */
+/* 612 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 614 */ NdrFcShort( 0x0 ), /* 0 */
+/* 616 */ NdrFcShort( 0x24 ), /* 36 */
+/* 618 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 620 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 622 */ NdrFcShort( 0x0 ), /* 0 */
+/* 624 */ NdrFcShort( 0x0 ), /* 0 */
+/* 626 */ NdrFcShort( 0x0 ), /* 0 */
+/* 628 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter role */
+
+/* 630 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 632 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 634 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 636 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 638 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 640 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure scrollTo */
+
+/* 642 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 644 */ NdrFcLong( 0x0 ), /* 0 */
+/* 648 */ NdrFcShort( 0x20 ), /* 32 */
+/* 650 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 652 */ NdrFcShort( 0x6 ), /* 6 */
+/* 654 */ NdrFcShort( 0x8 ), /* 8 */
+/* 656 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 658 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 660 */ NdrFcShort( 0x0 ), /* 0 */
+/* 662 */ NdrFcShort( 0x0 ), /* 0 */
+/* 664 */ NdrFcShort( 0x0 ), /* 0 */
+/* 666 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter scrollType */
+
+/* 668 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 670 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 672 */ 0xd, /* FC_ENUM16 */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 674 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 676 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 678 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure scrollToPoint */
+
+/* 680 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 682 */ NdrFcLong( 0x0 ), /* 0 */
+/* 686 */ NdrFcShort( 0x21 ), /* 33 */
+/* 688 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
+/* 690 */ NdrFcShort( 0x16 ), /* 22 */
+/* 692 */ NdrFcShort( 0x8 ), /* 8 */
+/* 694 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x4, /* 4 */
+/* 696 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 698 */ NdrFcShort( 0x0 ), /* 0 */
+/* 700 */ NdrFcShort( 0x0 ), /* 0 */
+/* 702 */ NdrFcShort( 0x0 ), /* 0 */
+/* 704 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter coordinateType */
+
+/* 706 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 708 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 710 */ 0xd, /* FC_ENUM16 */
+ 0x0, /* 0 */
+
+ /* Parameter x */
+
+/* 712 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 714 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 716 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter y */
+
+/* 718 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 720 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 722 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 724 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 726 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 728 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_groupPosition */
+
+/* 730 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 732 */ NdrFcLong( 0x0 ), /* 0 */
+/* 736 */ NdrFcShort( 0x22 ), /* 34 */
+/* 738 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
+/* 740 */ NdrFcShort( 0x0 ), /* 0 */
+/* 742 */ NdrFcShort( 0x5c ), /* 92 */
+/* 744 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x4, /* 4 */
+/* 746 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 748 */ NdrFcShort( 0x0 ), /* 0 */
+/* 750 */ NdrFcShort( 0x0 ), /* 0 */
+/* 752 */ NdrFcShort( 0x0 ), /* 0 */
+/* 754 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter groupLevel */
+
+/* 756 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 758 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 760 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter similarItemsInGroup */
+
+/* 762 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 764 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 766 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter positionInGroup */
+
+/* 768 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 770 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 772 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 774 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 776 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 778 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_states */
+
+/* 780 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 782 */ NdrFcLong( 0x0 ), /* 0 */
+/* 786 */ NdrFcShort( 0x23 ), /* 35 */
+/* 788 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 790 */ NdrFcShort( 0x0 ), /* 0 */
+/* 792 */ NdrFcShort( 0x24 ), /* 36 */
+/* 794 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 796 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 798 */ NdrFcShort( 0x0 ), /* 0 */
+/* 800 */ NdrFcShort( 0x0 ), /* 0 */
+/* 802 */ NdrFcShort( 0x0 ), /* 0 */
+/* 804 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter states */
+
+/* 806 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 808 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 810 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 812 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 814 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 816 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_extendedRole */
+
+/* 818 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 820 */ NdrFcLong( 0x0 ), /* 0 */
+/* 824 */ NdrFcShort( 0x24 ), /* 36 */
+/* 826 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 828 */ NdrFcShort( 0x0 ), /* 0 */
+/* 830 */ NdrFcShort( 0x8 ), /* 8 */
+/* 832 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 834 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 836 */ NdrFcShort( 0x1 ), /* 1 */
+/* 838 */ NdrFcShort( 0x0 ), /* 0 */
+/* 840 */ NdrFcShort( 0x0 ), /* 0 */
+/* 842 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter extendedRole */
+
+/* 844 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 846 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 848 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+/* 850 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 852 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 854 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_localizedExtendedRole */
+
+/* 856 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 858 */ NdrFcLong( 0x0 ), /* 0 */
+/* 862 */ NdrFcShort( 0x25 ), /* 37 */
+/* 864 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 866 */ NdrFcShort( 0x0 ), /* 0 */
+/* 868 */ NdrFcShort( 0x8 ), /* 8 */
+/* 870 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 872 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 874 */ NdrFcShort( 0x1 ), /* 1 */
+/* 876 */ NdrFcShort( 0x0 ), /* 0 */
+/* 878 */ NdrFcShort( 0x0 ), /* 0 */
+/* 880 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter localizedExtendedRole */
+
+/* 882 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 884 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 886 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+/* 888 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 890 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 892 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_nExtendedStates */
+
+/* 894 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 896 */ NdrFcLong( 0x0 ), /* 0 */
+/* 900 */ NdrFcShort( 0x26 ), /* 38 */
+/* 902 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 904 */ NdrFcShort( 0x0 ), /* 0 */
+/* 906 */ NdrFcShort( 0x24 ), /* 36 */
+/* 908 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 910 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 912 */ NdrFcShort( 0x0 ), /* 0 */
+/* 914 */ NdrFcShort( 0x0 ), /* 0 */
+/* 916 */ NdrFcShort( 0x0 ), /* 0 */
+/* 918 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter nExtendedStates */
+
+/* 920 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 922 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 924 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 926 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 928 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 930 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_extendedStates */
+
+/* 932 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 934 */ NdrFcLong( 0x0 ), /* 0 */
+/* 938 */ NdrFcShort( 0x27 ), /* 39 */
+/* 940 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
+/* 942 */ NdrFcShort( 0x8 ), /* 8 */
+/* 944 */ NdrFcShort( 0x24 ), /* 36 */
+/* 946 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x4, /* 4 */
+/* 948 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 950 */ NdrFcShort( 0x1 ), /* 1 */
+/* 952 */ NdrFcShort( 0x0 ), /* 0 */
+/* 954 */ NdrFcShort( 0x0 ), /* 0 */
+/* 956 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter maxExtendedStates */
+
+/* 958 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 960 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 962 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter extendedStates */
+
+/* 964 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
+/* 966 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 968 */ NdrFcShort( 0xac ), /* Type Offset=172 */
+
+ /* Parameter nExtendedStates */
+
+/* 970 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 972 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 974 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 976 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 978 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 980 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_localizedExtendedStates */
+
+/* 982 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 984 */ NdrFcLong( 0x0 ), /* 0 */
+/* 988 */ NdrFcShort( 0x28 ), /* 40 */
+/* 990 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
+/* 992 */ NdrFcShort( 0x8 ), /* 8 */
+/* 994 */ NdrFcShort( 0x24 ), /* 36 */
+/* 996 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x4, /* 4 */
+/* 998 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 1000 */ NdrFcShort( 0x1 ), /* 1 */
+/* 1002 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1004 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1006 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter maxLocalizedExtendedStates */
+
+/* 1008 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 1010 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 1012 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter localizedExtendedStates */
+
+/* 1014 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
+/* 1016 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 1018 */ NdrFcShort( 0xac ), /* Type Offset=172 */
+
+ /* Parameter nLocalizedExtendedStates */
+
+/* 1020 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1022 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 1024 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 1026 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1028 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 1030 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_uniqueID */
+
+/* 1032 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1034 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1038 */ NdrFcShort( 0x29 ), /* 41 */
+/* 1040 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 1042 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1044 */ NdrFcShort( 0x24 ), /* 36 */
+/* 1046 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 1048 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 1050 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1052 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1054 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1056 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter uniqueID */
+
+/* 1058 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1060 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 1062 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 1064 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1066 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 1068 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_windowHandle */
+
+/* 1070 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1072 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1076 */ NdrFcShort( 0x2a ), /* 42 */
+/* 1078 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 1080 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1082 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1084 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 1086 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 1088 */ NdrFcShort( 0x1 ), /* 1 */
+/* 1090 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1092 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1094 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter windowHandle */
+
+/* 1096 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 1098 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 1100 */ NdrFcShort( 0xe6 ), /* Type Offset=230 */
+
+ /* Return value */
+
+/* 1102 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1104 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 1106 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_indexInParent */
+
+/* 1108 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1110 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1114 */ NdrFcShort( 0x2b ), /* 43 */
+/* 1116 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 1118 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1120 */ NdrFcShort( 0x24 ), /* 36 */
+/* 1122 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 1124 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 1126 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1128 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1130 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1132 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter indexInParent */
+
+/* 1134 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1136 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 1138 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 1140 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1142 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 1144 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_locale */
+
+/* 1146 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1148 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1152 */ NdrFcShort( 0x2c ), /* 44 */
+/* 1154 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 1156 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1158 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1160 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 1162 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 1164 */ NdrFcShort( 0x1 ), /* 1 */
+/* 1166 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1168 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1170 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter locale */
+
+/* 1172 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */
+/* 1174 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 1176 */ NdrFcShort( 0xf4 ), /* Type Offset=244 */
+
+ /* Return value */
+
+/* 1178 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1180 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 1182 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_attributes */
+
+/* 1184 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1186 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1190 */ NdrFcShort( 0x2d ), /* 45 */
+/* 1192 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 1194 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1196 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1198 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 1200 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 1202 */ NdrFcShort( 0x1 ), /* 1 */
+/* 1204 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1206 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1208 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter attributes */
+
+/* 1210 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 1212 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 1214 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+/* 1216 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1218 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 1220 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_attribute */
+
+/* 1222 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1224 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1228 */ NdrFcShort( 0x2e ), /* 46 */
+/* 1230 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 1232 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1234 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1236 */ 0x47, /* Oi2 Flags: srv must size, clt must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 1238 */ 0xa, /* 10 */
+ 0x7, /* Ext Flags: new corr desc, clt corr check, srv corr check, */
+/* 1240 */ NdrFcShort( 0x1 ), /* 1 */
+/* 1242 */ NdrFcShort( 0x1 ), /* 1 */
+/* 1244 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1246 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter name */
+
+/* 1248 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */
+/* 1250 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 1252 */ NdrFcShort( 0x10e ), /* Type Offset=270 */
+
+ /* Parameter attribute */
+
+/* 1254 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */
+/* 1256 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 1258 */ NdrFcShort( 0x4bc ), /* Type Offset=1212 */
+
+ /* Return value */
+
+/* 1260 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1262 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 1264 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_accessibleWithCaret */
+
+/* 1266 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1268 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1272 */ NdrFcShort( 0x2f ), /* 47 */
+/* 1274 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 1276 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1278 */ NdrFcShort( 0x24 ), /* 36 */
+/* 1280 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 1282 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 1284 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1286 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1288 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1290 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter accessible */
+
+/* 1292 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
+/* 1294 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 1296 */ NdrFcShort( 0x2e ), /* Type Offset=46 */
+
+ /* Parameter caretOffset */
+
+/* 1298 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1300 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 1302 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 1304 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1306 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 1308 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_relationTargetsOfType */
+
+/* 1310 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1312 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1316 */ NdrFcShort( 0x30 ), /* 48 */
+/* 1318 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */
+/* 1320 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1322 */ NdrFcShort( 0x24 ), /* 36 */
+/* 1324 */ 0x47, /* Oi2 Flags: srv must size, clt must size, has return, has ext, */
+ 0x5, /* 5 */
+/* 1326 */ 0xa, /* 10 */
+ 0x7, /* Ext Flags: new corr desc, clt corr check, srv corr check, */
+/* 1328 */ NdrFcShort( 0x1 ), /* 1 */
+/* 1330 */ NdrFcShort( 0x1 ), /* 1 */
+/* 1332 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1334 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter type */
+
+/* 1336 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */
+/* 1338 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 1340 */ NdrFcShort( 0x10e ), /* Type Offset=270 */
+
+ /* Parameter maxTargets */
+
+/* 1342 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 1344 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 1346 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter targets */
+
+/* 1348 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
+/* 1350 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 1352 */ NdrFcShort( 0x4c6 ), /* Type Offset=1222 */
+
+ /* Parameter nTargets */
+
+/* 1354 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1356 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 1358 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 1360 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1362 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
+/* 1364 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_locationInParent */
+
+/* 1366 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1368 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1372 */ NdrFcShort( 0x3 ), /* 3 */
+/* 1374 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 1376 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1378 */ NdrFcShort( 0x40 ), /* 64 */
+/* 1380 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x3, /* 3 */
+/* 1382 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 1384 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1386 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1388 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1390 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter x */
+
+/* 1392 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1394 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 1396 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter y */
+
+/* 1398 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1400 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 1402 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 1404 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1406 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 1408 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_foreground */
+
+/* 1410 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1412 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1416 */ NdrFcShort( 0x4 ), /* 4 */
+/* 1418 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 1420 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1422 */ NdrFcShort( 0x24 ), /* 36 */
+/* 1424 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 1426 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 1428 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1430 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1432 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1434 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter foreground */
+
+/* 1436 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1438 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 1440 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 1442 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1444 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 1446 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_currentValue */
+
+/* 1448 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1450 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1454 */ NdrFcShort( 0x3 ), /* 3 */
+/* 1456 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 1458 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1460 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1462 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 1464 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 1466 */ NdrFcShort( 0x1 ), /* 1 */
+/* 1468 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1470 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1472 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter currentValue */
+
+/* 1474 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */
+/* 1476 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 1478 */ NdrFcShort( 0x4bc ), /* Type Offset=1212 */
+
+ /* Return value */
+
+/* 1480 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1482 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 1484 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure setCurrentValue */
+
+/* 1486 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1488 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1492 */ NdrFcShort( 0x4 ), /* 4 */
+/* 1494 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 1496 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1498 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1500 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 1502 */ 0xa, /* 10 */
+ 0x85, /* Ext Flags: new corr desc, srv corr check, has big amd64 byval param */
+/* 1504 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1506 */ NdrFcShort( 0x1 ), /* 1 */
+/* 1508 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1510 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter value */
+
+/* 1512 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */
+/* 1514 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 1516 */ NdrFcShort( 0x4ec ), /* Type Offset=1260 */
+
+ /* Return value */
+
+/* 1518 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1520 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 1522 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_maximumValue */
+
+/* 1524 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1526 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1530 */ NdrFcShort( 0x5 ), /* 5 */
+/* 1532 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 1534 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1536 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1538 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 1540 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 1542 */ NdrFcShort( 0x1 ), /* 1 */
+/* 1544 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1546 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1548 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter maximumValue */
+
+/* 1550 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */
+/* 1552 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 1554 */ NdrFcShort( 0x4bc ), /* Type Offset=1212 */
+
+ /* Return value */
+
+/* 1556 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1558 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 1560 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_minimumValue */
+
+/* 1562 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1564 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1568 */ NdrFcShort( 0x6 ), /* 6 */
+/* 1570 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 1572 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1574 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1576 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 1578 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 1580 */ NdrFcShort( 0x1 ), /* 1 */
+/* 1582 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1584 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1586 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter minimumValue */
+
+/* 1588 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */
+/* 1590 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 1592 */ NdrFcShort( 0x4bc ), /* Type Offset=1212 */
+
+ /* Return value */
+
+/* 1594 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1596 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 1598 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure copyText */
+
+
+ /* Procedure addSelection */
+
+/* 1600 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1602 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1606 */ NdrFcShort( 0x3 ), /* 3 */
+/* 1608 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 1610 */ NdrFcShort( 0x10 ), /* 16 */
+/* 1612 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1614 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x3, /* 3 */
+/* 1616 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 1618 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1620 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1622 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1624 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter startOffset */
+
+
+ /* Parameter startOffset */
+
+/* 1626 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 1628 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 1630 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter endOffset */
+
+
+ /* Parameter endOffset */
+
+/* 1632 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 1634 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 1636 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+
+ /* Return value */
+
+/* 1638 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1640 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 1642 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_attributes */
+
+/* 1644 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1646 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1650 */ NdrFcShort( 0x4 ), /* 4 */
+/* 1652 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */
+/* 1654 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1656 */ NdrFcShort( 0x40 ), /* 64 */
+/* 1658 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x5, /* 5 */
+/* 1660 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 1662 */ NdrFcShort( 0x1 ), /* 1 */
+/* 1664 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1666 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1668 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter offset */
+
+/* 1670 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 1672 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 1674 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter startOffset */
+
+/* 1676 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1678 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 1680 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter endOffset */
+
+/* 1682 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1684 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 1686 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter textAttributes */
+
+/* 1688 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 1690 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 1692 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+/* 1694 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1696 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
+/* 1698 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_characterExtents */
+
+/* 1700 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1702 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1706 */ NdrFcShort( 0x6 ), /* 6 */
+/* 1708 */ NdrFcShort( 0x40 ), /* X64 Stack size/offset = 64 */
+/* 1710 */ NdrFcShort( 0xe ), /* 14 */
+/* 1712 */ NdrFcShort( 0x78 ), /* 120 */
+/* 1714 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x7, /* 7 */
+/* 1716 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 1718 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1720 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1722 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1724 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter offset */
+
+/* 1726 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 1728 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 1730 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter coordType */
+
+/* 1732 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 1734 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 1736 */ 0xd, /* FC_ENUM16 */
+ 0x0, /* 0 */
+
+ /* Parameter x */
+
+/* 1738 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1740 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 1742 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter y */
+
+/* 1744 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1746 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 1748 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter width */
+
+/* 1750 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1752 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
+/* 1754 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter height */
+
+/* 1756 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1758 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */
+/* 1760 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 1762 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1764 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */
+/* 1766 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_nRows */
+
+
+ /* Procedure get_nSelections */
+
+/* 1768 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1770 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1774 */ NdrFcShort( 0x7 ), /* 7 */
+/* 1776 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 1778 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1780 */ NdrFcShort( 0x24 ), /* 36 */
+/* 1782 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 1784 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 1786 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1788 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1790 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1792 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter rowCount */
+
+
+ /* Parameter nSelections */
+
+/* 1794 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1796 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 1798 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+
+ /* Return value */
+
+/* 1800 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1802 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 1804 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_offsetAtPoint */
+
+/* 1806 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1808 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1812 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1814 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */
+/* 1816 */ NdrFcShort( 0x16 ), /* 22 */
+/* 1818 */ NdrFcShort( 0x24 ), /* 36 */
+/* 1820 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x5, /* 5 */
+/* 1822 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 1824 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1826 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1828 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1830 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter x */
+
+/* 1832 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 1834 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 1836 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter y */
+
+/* 1838 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 1840 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 1842 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter coordType */
+
+/* 1844 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 1846 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 1848 */ 0xd, /* FC_ENUM16 */
+ 0x0, /* 0 */
+
+ /* Parameter offset */
+
+/* 1850 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1852 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 1854 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 1856 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1858 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
+/* 1860 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_selection */
+
+/* 1862 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1864 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1868 */ NdrFcShort( 0x9 ), /* 9 */
+/* 1870 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
+/* 1872 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1874 */ NdrFcShort( 0x40 ), /* 64 */
+/* 1876 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x4, /* 4 */
+/* 1878 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 1880 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1882 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1884 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1886 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter selectionIndex */
+
+/* 1888 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 1890 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 1892 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter startOffset */
+
+/* 1894 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1896 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 1898 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter endOffset */
+
+/* 1900 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1902 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 1904 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 1906 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1908 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 1910 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_text */
+
+/* 1912 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1914 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1918 */ NdrFcShort( 0xa ), /* 10 */
+/* 1920 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
+/* 1922 */ NdrFcShort( 0x10 ), /* 16 */
+/* 1924 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1926 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x4, /* 4 */
+/* 1928 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 1930 */ NdrFcShort( 0x1 ), /* 1 */
+/* 1932 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1934 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1936 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter startOffset */
+
+/* 1938 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 1940 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 1942 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter endOffset */
+
+/* 1944 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 1946 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 1948 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter text */
+
+/* 1950 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 1952 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 1954 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+/* 1956 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1958 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 1960 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_textBeforeOffset */
+
+/* 1962 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1964 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1968 */ NdrFcShort( 0xb ), /* 11 */
+/* 1970 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */
+/* 1972 */ NdrFcShort( 0xe ), /* 14 */
+/* 1974 */ NdrFcShort( 0x40 ), /* 64 */
+/* 1976 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x6, /* 6 */
+/* 1978 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 1980 */ NdrFcShort( 0x1 ), /* 1 */
+/* 1982 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1984 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1986 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter offset */
+
+/* 1988 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 1990 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 1992 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter boundaryType */
+
+/* 1994 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 1996 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 1998 */ 0xd, /* FC_ENUM16 */
+ 0x0, /* 0 */
+
+ /* Parameter startOffset */
+
+/* 2000 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 2002 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 2004 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter endOffset */
+
+/* 2006 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 2008 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 2010 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter text */
+
+/* 2012 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 2014 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
+/* 2016 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+/* 2018 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2020 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */
+/* 2022 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_textAfterOffset */
+
+/* 2024 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2026 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2030 */ NdrFcShort( 0xc ), /* 12 */
+/* 2032 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */
+/* 2034 */ NdrFcShort( 0xe ), /* 14 */
+/* 2036 */ NdrFcShort( 0x40 ), /* 64 */
+/* 2038 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x6, /* 6 */
+/* 2040 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 2042 */ NdrFcShort( 0x1 ), /* 1 */
+/* 2044 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2046 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2048 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter offset */
+
+/* 2050 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2052 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 2054 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter boundaryType */
+
+/* 2056 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2058 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 2060 */ 0xd, /* FC_ENUM16 */
+ 0x0, /* 0 */
+
+ /* Parameter startOffset */
+
+/* 2062 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 2064 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 2066 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter endOffset */
+
+/* 2068 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 2070 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 2072 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter text */
+
+/* 2074 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 2076 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
+/* 2078 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+/* 2080 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2082 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */
+/* 2084 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_textAtOffset */
+
+/* 2086 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2088 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2092 */ NdrFcShort( 0xd ), /* 13 */
+/* 2094 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */
+/* 2096 */ NdrFcShort( 0xe ), /* 14 */
+/* 2098 */ NdrFcShort( 0x40 ), /* 64 */
+/* 2100 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x6, /* 6 */
+/* 2102 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 2104 */ NdrFcShort( 0x1 ), /* 1 */
+/* 2106 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2108 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2110 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter offset */
+
+/* 2112 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2114 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 2116 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter boundaryType */
+
+/* 2118 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2120 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 2122 */ 0xd, /* FC_ENUM16 */
+ 0x0, /* 0 */
+
+ /* Parameter startOffset */
+
+/* 2124 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 2126 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 2128 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter endOffset */
+
+/* 2130 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 2132 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 2134 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter text */
+
+/* 2136 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 2138 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
+/* 2140 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+/* 2142 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2144 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */
+/* 2146 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure removeSelection */
+
+/* 2148 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2150 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2154 */ NdrFcShort( 0xe ), /* 14 */
+/* 2156 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 2158 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2160 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2162 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 2164 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 2166 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2168 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2170 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2172 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter selectionIndex */
+
+/* 2174 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2176 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 2178 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 2180 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2182 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 2184 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure setCaretOffset */
+
+/* 2186 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2188 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2192 */ NdrFcShort( 0xf ), /* 15 */
+/* 2194 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 2196 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2198 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2200 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 2202 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 2204 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2206 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2208 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2210 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter offset */
+
+/* 2212 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2214 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 2216 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 2218 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2220 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 2222 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure setSelection */
+
+/* 2224 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2226 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2230 */ NdrFcShort( 0x10 ), /* 16 */
+/* 2232 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
+/* 2234 */ NdrFcShort( 0x18 ), /* 24 */
+/* 2236 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2238 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x4, /* 4 */
+/* 2240 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 2242 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2244 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2246 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2248 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter selectionIndex */
+
+/* 2250 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2252 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 2254 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter startOffset */
+
+/* 2256 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2258 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 2260 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter endOffset */
+
+/* 2262 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2264 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 2266 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 2268 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2270 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 2272 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_nCharacters */
+
+/* 2274 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2276 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2280 */ NdrFcShort( 0x11 ), /* 17 */
+/* 2282 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 2284 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2286 */ NdrFcShort( 0x24 ), /* 36 */
+/* 2288 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 2290 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 2292 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2294 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2296 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2298 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter nCharacters */
+
+/* 2300 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 2302 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 2304 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 2306 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2308 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 2310 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure scrollSubstringTo */
+
+/* 2312 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2314 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2318 */ NdrFcShort( 0x12 ), /* 18 */
+/* 2320 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
+/* 2322 */ NdrFcShort( 0x16 ), /* 22 */
+/* 2324 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2326 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x4, /* 4 */
+/* 2328 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 2330 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2332 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2334 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2336 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter startIndex */
+
+/* 2338 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2340 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 2342 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter endIndex */
+
+/* 2344 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2346 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 2348 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter scrollType */
+
+/* 2350 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2352 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 2354 */ 0xd, /* FC_ENUM16 */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 2356 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2358 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 2360 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure scrollSubstringToPoint */
+
+/* 2362 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2364 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2368 */ NdrFcShort( 0x13 ), /* 19 */
+/* 2370 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */
+/* 2372 */ NdrFcShort( 0x26 ), /* 38 */
+/* 2374 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2376 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x6, /* 6 */
+/* 2378 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 2380 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2382 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2384 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2386 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter startIndex */
+
+/* 2388 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2390 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 2392 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter endIndex */
+
+/* 2394 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2396 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 2398 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter coordinateType */
+
+/* 2400 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2402 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 2404 */ 0xd, /* FC_ENUM16 */
+ 0x0, /* 0 */
+
+ /* Parameter x */
+
+/* 2406 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2408 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 2410 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter y */
+
+/* 2412 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2414 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
+/* 2416 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 2418 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2420 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */
+/* 2422 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_newText */
+
+/* 2424 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2426 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2430 */ NdrFcShort( 0x14 ), /* 20 */
+/* 2432 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 2434 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2436 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2438 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 2440 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 2442 */ NdrFcShort( 0x1 ), /* 1 */
+/* 2444 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2446 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2448 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter newText */
+
+/* 2450 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */
+/* 2452 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 2454 */ NdrFcShort( 0x4fa ), /* Type Offset=1274 */
+
+ /* Return value */
+
+/* 2456 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2458 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 2460 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_oldText */
+
+/* 2462 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2464 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2468 */ NdrFcShort( 0x15 ), /* 21 */
+/* 2470 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 2472 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2474 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2476 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 2478 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 2480 */ NdrFcShort( 0x1 ), /* 1 */
+/* 2482 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2484 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2486 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter oldText */
+
+/* 2488 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */
+/* 2490 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 2492 */ NdrFcShort( 0x4fa ), /* Type Offset=1274 */
+
+ /* Return value */
+
+/* 2494 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2496 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 2498 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_attributeRange */
+
+/* 2500 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2502 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2506 */ NdrFcShort( 0x16 ), /* 22 */
+/* 2508 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */
+/* 2510 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2512 */ NdrFcShort( 0x40 ), /* 64 */
+/* 2514 */ 0x47, /* Oi2 Flags: srv must size, clt must size, has return, has ext, */
+ 0x6, /* 6 */
+/* 2516 */ 0xa, /* 10 */
+ 0x7, /* Ext Flags: new corr desc, clt corr check, srv corr check, */
+/* 2518 */ NdrFcShort( 0x1 ), /* 1 */
+/* 2520 */ NdrFcShort( 0x1 ), /* 1 */
+/* 2522 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2524 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter offset */
+
+/* 2526 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2528 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 2530 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter filter */
+
+/* 2532 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */
+/* 2534 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 2536 */ NdrFcShort( 0x10e ), /* Type Offset=270 */
+
+ /* Parameter startOffset */
+
+/* 2538 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 2540 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 2542 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter endOffset */
+
+/* 2544 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 2546 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 2548 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter attributeValues */
+
+/* 2550 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 2552 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
+/* 2554 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+/* 2556 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2558 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */
+/* 2560 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure deleteText */
+
+/* 2562 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2564 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2568 */ NdrFcShort( 0x4 ), /* 4 */
+/* 2570 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 2572 */ NdrFcShort( 0x10 ), /* 16 */
+/* 2574 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2576 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x3, /* 3 */
+/* 2578 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 2580 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2582 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2584 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2586 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter startOffset */
+
+/* 2588 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2590 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 2592 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter endOffset */
+
+/* 2594 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2596 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 2598 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 2600 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2602 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 2604 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure insertText */
+
+/* 2606 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2608 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2612 */ NdrFcShort( 0x5 ), /* 5 */
+/* 2614 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 2616 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2618 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2620 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 2622 */ 0xa, /* 10 */
+ 0x5, /* Ext Flags: new corr desc, srv corr check, */
+/* 2624 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2626 */ NdrFcShort( 0x1 ), /* 1 */
+/* 2628 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2630 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter offset */
+
+/* 2632 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2634 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 2636 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter text */
+
+/* 2638 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */
+/* 2640 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 2642 */ NdrFcShort( 0x10e ), /* Type Offset=270 */
+
+ /* Return value */
+
+/* 2644 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2646 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 2648 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure cutText */
+
+/* 2650 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2652 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2656 */ NdrFcShort( 0x6 ), /* 6 */
+/* 2658 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 2660 */ NdrFcShort( 0x10 ), /* 16 */
+/* 2662 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2664 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x3, /* 3 */
+/* 2666 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 2668 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2670 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2672 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2674 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter startOffset */
+
+/* 2676 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2678 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 2680 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter endOffset */
+
+/* 2682 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2684 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 2686 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 2688 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2690 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 2692 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure pasteText */
+
+/* 2694 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2696 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2700 */ NdrFcShort( 0x7 ), /* 7 */
+/* 2702 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 2704 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2706 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2708 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 2710 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 2712 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2714 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2716 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2718 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter offset */
+
+/* 2720 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2722 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 2724 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 2726 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2728 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 2730 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure replaceText */
+
+/* 2732 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2734 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2738 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2740 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
+/* 2742 */ NdrFcShort( 0x10 ), /* 16 */
+/* 2744 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2746 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */
+ 0x4, /* 4 */
+/* 2748 */ 0xa, /* 10 */
+ 0x5, /* Ext Flags: new corr desc, srv corr check, */
+/* 2750 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2752 */ NdrFcShort( 0x1 ), /* 1 */
+/* 2754 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2756 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter startOffset */
+
+/* 2758 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2760 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 2762 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter endOffset */
+
+/* 2764 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2766 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 2768 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter text */
+
+/* 2770 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */
+/* 2772 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 2774 */ NdrFcShort( 0x10e ), /* Type Offset=270 */
+
+ /* Return value */
+
+/* 2776 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2778 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 2780 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure setAttributes */
+
+/* 2782 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2784 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2788 */ NdrFcShort( 0x9 ), /* 9 */
+/* 2790 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
+/* 2792 */ NdrFcShort( 0x10 ), /* 16 */
+/* 2794 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2796 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */
+ 0x4, /* 4 */
+/* 2798 */ 0xa, /* 10 */
+ 0x5, /* Ext Flags: new corr desc, srv corr check, */
+/* 2800 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2802 */ NdrFcShort( 0x1 ), /* 1 */
+/* 2804 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2806 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter startOffset */
+
+/* 2808 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2810 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 2812 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter endOffset */
+
+/* 2814 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2816 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 2818 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter attributes */
+
+/* 2820 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */
+/* 2822 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 2824 */ NdrFcShort( 0x10e ), /* Type Offset=270 */
+
+ /* Return value */
+
+/* 2826 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2828 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 2830 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_anchor */
+
+/* 2832 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2834 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2838 */ NdrFcShort( 0x9 ), /* 9 */
+/* 2840 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 2842 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2844 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2846 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 2848 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 2850 */ NdrFcShort( 0x1 ), /* 1 */
+/* 2852 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2854 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2856 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter index */
+
+/* 2858 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2860 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 2862 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter anchor */
+
+/* 2864 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */
+/* 2866 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 2868 */ NdrFcShort( 0x4bc ), /* Type Offset=1212 */
+
+ /* Return value */
+
+/* 2870 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2872 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 2874 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_anchorTarget */
+
+/* 2876 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2878 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2882 */ NdrFcShort( 0xa ), /* 10 */
+/* 2884 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 2886 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2888 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2890 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 2892 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 2894 */ NdrFcShort( 0x1 ), /* 1 */
+/* 2896 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2898 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2900 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter index */
+
+/* 2902 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2904 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 2906 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter anchorTarget */
+
+/* 2908 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */
+/* 2910 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 2912 */ NdrFcShort( 0x4bc ), /* Type Offset=1212 */
+
+ /* Return value */
+
+/* 2914 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2916 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 2918 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_nRows */
+
+
+ /* Procedure get_startIndex */
+
+/* 2920 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2922 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2926 */ NdrFcShort( 0xb ), /* 11 */
+/* 2928 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 2930 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2932 */ NdrFcShort( 0x24 ), /* 36 */
+/* 2934 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 2936 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 2938 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2940 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2942 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2944 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter rowCount */
+
+
+ /* Parameter index */
+
+/* 2946 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 2948 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 2950 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+
+ /* Return value */
+
+/* 2952 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2954 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 2956 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_nSelectedChildren */
+
+
+ /* Procedure get_endIndex */
+
+/* 2958 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2960 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2964 */ NdrFcShort( 0xc ), /* 12 */
+/* 2966 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 2968 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2970 */ NdrFcShort( 0x24 ), /* 36 */
+/* 2972 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 2974 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 2976 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2978 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2980 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2982 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter cellCount */
+
+
+ /* Parameter index */
+
+/* 2984 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 2986 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 2988 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+
+ /* Return value */
+
+/* 2990 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2992 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 2994 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_valid */
+
+/* 2996 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2998 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3002 */ NdrFcShort( 0xd ), /* 13 */
+/* 3004 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 3006 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3008 */ NdrFcShort( 0x21 ), /* 33 */
+/* 3010 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 3012 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3014 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3016 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3018 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3020 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter valid */
+
+/* 3022 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3024 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 3026 */ 0x3, /* FC_SMALL */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3028 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3030 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 3032 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_nHyperlinks */
+
+/* 3034 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3036 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3040 */ NdrFcShort( 0x16 ), /* 22 */
+/* 3042 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 3044 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3046 */ NdrFcShort( 0x24 ), /* 36 */
+/* 3048 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 3050 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3052 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3054 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3056 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3058 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter hyperlinkCount */
+
+/* 3060 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3062 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 3064 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3066 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3068 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 3070 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_hyperlink */
+
+/* 3072 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3074 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3078 */ NdrFcShort( 0x17 ), /* 23 */
+/* 3080 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 3082 */ NdrFcShort( 0x8 ), /* 8 */
+/* 3084 */ NdrFcShort( 0x8 ), /* 8 */
+/* 3086 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 3088 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3090 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3092 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3094 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3096 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter index */
+
+/* 3098 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3100 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 3102 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter hyperlink */
+
+/* 3104 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
+/* 3106 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 3108 */ NdrFcShort( 0x512 ), /* Type Offset=1298 */
+
+ /* Return value */
+
+/* 3110 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3112 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 3114 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_hyperlinkIndex */
+
+/* 3116 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3118 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3122 */ NdrFcShort( 0x18 ), /* 24 */
+/* 3124 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 3126 */ NdrFcShort( 0x8 ), /* 8 */
+/* 3128 */ NdrFcShort( 0x24 ), /* 36 */
+/* 3130 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x3, /* 3 */
+/* 3132 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3134 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3136 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3138 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3140 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter charIndex */
+
+/* 3142 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3144 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 3146 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter hyperlinkIndex */
+
+/* 3148 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3150 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 3152 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3154 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3156 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 3158 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_hyperlinks */
+
+/* 3160 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3162 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3166 */ NdrFcShort( 0x19 ), /* 25 */
+/* 3168 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 3170 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3172 */ NdrFcShort( 0x24 ), /* 36 */
+/* 3174 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 3176 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 3178 */ NdrFcShort( 0x1 ), /* 1 */
+/* 3180 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3182 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3184 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter hyperlinks */
+
+/* 3186 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
+/* 3188 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 3190 */ NdrFcShort( 0x528 ), /* Type Offset=1320 */
+
+ /* Parameter nHyperlinks */
+
+/* 3192 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3194 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 3196 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3198 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3200 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 3202 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_cellAt */
+
+
+ /* Procedure get_accessibleAt */
+
+/* 3204 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3206 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3210 */ NdrFcShort( 0x3 ), /* 3 */
+/* 3212 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
+/* 3214 */ NdrFcShort( 0x10 ), /* 16 */
+/* 3216 */ NdrFcShort( 0x8 ), /* 8 */
+/* 3218 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x4, /* 4 */
+/* 3220 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3222 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3224 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3226 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3228 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter row */
+
+
+ /* Parameter row */
+
+/* 3230 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3232 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 3234 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter column */
+
+
+ /* Parameter column */
+
+/* 3236 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3238 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 3240 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter cell */
+
+
+ /* Parameter accessible */
+
+/* 3242 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
+/* 3244 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 3246 */ NdrFcShort( 0x2e ), /* Type Offset=46 */
+
+ /* Return value */
+
+
+ /* Return value */
+
+/* 3248 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3250 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 3252 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_caption */
+
+
+ /* Procedure get_caption */
+
+/* 3254 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3256 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3260 */ NdrFcShort( 0x4 ), /* 4 */
+/* 3262 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 3264 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3266 */ NdrFcShort( 0x8 ), /* 8 */
+/* 3268 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 3270 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3272 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3274 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3276 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3278 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter accessible */
+
+
+ /* Parameter accessible */
+
+/* 3280 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
+/* 3282 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 3284 */ NdrFcShort( 0x2e ), /* Type Offset=46 */
+
+ /* Return value */
+
+
+ /* Return value */
+
+/* 3286 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3288 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 3290 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_childIndex */
+
+/* 3292 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3294 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3298 */ NdrFcShort( 0x5 ), /* 5 */
+/* 3300 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
+/* 3302 */ NdrFcShort( 0x10 ), /* 16 */
+/* 3304 */ NdrFcShort( 0x24 ), /* 36 */
+/* 3306 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x4, /* 4 */
+/* 3308 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3310 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3312 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3314 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3316 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter rowIndex */
+
+/* 3318 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3320 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 3322 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter columnIndex */
+
+/* 3324 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3326 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 3328 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter cellIndex */
+
+/* 3330 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3332 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 3334 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3336 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3338 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 3340 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_columnDescription */
+
+/* 3342 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3344 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3348 */ NdrFcShort( 0x6 ), /* 6 */
+/* 3350 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 3352 */ NdrFcShort( 0x8 ), /* 8 */
+/* 3354 */ NdrFcShort( 0x8 ), /* 8 */
+/* 3356 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 3358 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 3360 */ NdrFcShort( 0x1 ), /* 1 */
+/* 3362 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3364 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3366 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter column */
+
+/* 3368 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3370 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 3372 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter description */
+
+/* 3374 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 3376 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 3378 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+/* 3380 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3382 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 3384 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_columnExtentAt */
+
+/* 3386 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3388 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3392 */ NdrFcShort( 0x7 ), /* 7 */
+/* 3394 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
+/* 3396 */ NdrFcShort( 0x10 ), /* 16 */
+/* 3398 */ NdrFcShort( 0x24 ), /* 36 */
+/* 3400 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x4, /* 4 */
+/* 3402 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3404 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3406 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3408 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3410 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter row */
+
+/* 3412 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3414 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 3416 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter column */
+
+/* 3418 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3420 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 3422 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter nColumnsSpanned */
+
+/* 3424 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3426 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 3428 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3430 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3432 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 3434 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_columnHeader */
+
+/* 3436 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3438 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3442 */ NdrFcShort( 0x8 ), /* 8 */
+/* 3444 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 3446 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3448 */ NdrFcShort( 0x24 ), /* 36 */
+/* 3450 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 3452 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3454 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3456 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3458 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3460 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter accessibleTable */
+
+/* 3462 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
+/* 3464 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 3466 */ NdrFcShort( 0x546 ), /* Type Offset=1350 */
+
+ /* Parameter startingRowIndex */
+
+/* 3468 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3470 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 3472 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3474 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3476 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 3478 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_columnIndex */
+
+/* 3480 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3482 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3486 */ NdrFcShort( 0x9 ), /* 9 */
+/* 3488 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 3490 */ NdrFcShort( 0x8 ), /* 8 */
+/* 3492 */ NdrFcShort( 0x24 ), /* 36 */
+/* 3494 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x3, /* 3 */
+/* 3496 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3498 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3500 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3502 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3504 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter cellIndex */
+
+/* 3506 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3508 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 3510 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter columnIndex */
+
+/* 3512 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3514 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 3516 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3518 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3520 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 3522 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_nSelectedRows */
+
+
+ /* Procedure get_nColumns */
+
+/* 3524 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3526 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3530 */ NdrFcShort( 0xa ), /* 10 */
+/* 3532 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 3534 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3536 */ NdrFcShort( 0x24 ), /* 36 */
+/* 3538 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 3540 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3542 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3544 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3546 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3548 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter rowCount */
+
+
+ /* Parameter columnCount */
+
+/* 3550 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3552 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 3554 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+
+ /* Return value */
+
+/* 3556 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3558 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 3560 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_nSelectedColumns */
+
+/* 3562 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3564 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3568 */ NdrFcShort( 0xd ), /* 13 */
+/* 3570 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 3572 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3574 */ NdrFcShort( 0x24 ), /* 36 */
+/* 3576 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 3578 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3580 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3582 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3584 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3586 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter columnCount */
+
+/* 3588 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3590 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 3592 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3594 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3596 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 3598 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_nSelectedRows */
+
+/* 3600 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3602 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3606 */ NdrFcShort( 0xe ), /* 14 */
+/* 3608 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 3610 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3612 */ NdrFcShort( 0x24 ), /* 36 */
+/* 3614 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 3616 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3618 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3620 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3622 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3624 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter rowCount */
+
+/* 3626 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3628 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 3630 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3632 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3634 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 3636 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_rowDescription */
+
+/* 3638 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3640 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3644 */ NdrFcShort( 0xf ), /* 15 */
+/* 3646 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 3648 */ NdrFcShort( 0x8 ), /* 8 */
+/* 3650 */ NdrFcShort( 0x8 ), /* 8 */
+/* 3652 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 3654 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 3656 */ NdrFcShort( 0x1 ), /* 1 */
+/* 3658 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3660 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3662 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter row */
+
+/* 3664 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3666 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 3668 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter description */
+
+/* 3670 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 3672 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 3674 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+/* 3676 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3678 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 3680 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_rowExtentAt */
+
+/* 3682 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3684 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3688 */ NdrFcShort( 0x10 ), /* 16 */
+/* 3690 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
+/* 3692 */ NdrFcShort( 0x10 ), /* 16 */
+/* 3694 */ NdrFcShort( 0x24 ), /* 36 */
+/* 3696 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x4, /* 4 */
+/* 3698 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3700 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3702 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3704 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3706 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter row */
+
+/* 3708 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3710 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 3712 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter column */
+
+/* 3714 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3716 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 3718 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter nRowsSpanned */
+
+/* 3720 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3722 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 3724 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3726 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3728 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 3730 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_rowHeader */
+
+/* 3732 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3734 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3738 */ NdrFcShort( 0x11 ), /* 17 */
+/* 3740 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 3742 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3744 */ NdrFcShort( 0x24 ), /* 36 */
+/* 3746 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 3748 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3750 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3752 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3754 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3756 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter accessibleTable */
+
+/* 3758 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
+/* 3760 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 3762 */ NdrFcShort( 0x546 ), /* Type Offset=1350 */
+
+ /* Parameter startingColumnIndex */
+
+/* 3764 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3766 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 3768 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3770 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3772 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 3774 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_rowIndex */
+
+/* 3776 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3778 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3782 */ NdrFcShort( 0x12 ), /* 18 */
+/* 3784 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 3786 */ NdrFcShort( 0x8 ), /* 8 */
+/* 3788 */ NdrFcShort( 0x24 ), /* 36 */
+/* 3790 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x3, /* 3 */
+/* 3792 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3794 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3796 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3798 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3800 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter cellIndex */
+
+/* 3802 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3804 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 3806 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter rowIndex */
+
+/* 3808 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3810 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 3812 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3814 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3816 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 3818 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_selectedChildren */
+
+/* 3820 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3822 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3826 */ NdrFcShort( 0x13 ), /* 19 */
+/* 3828 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
+/* 3830 */ NdrFcShort( 0x8 ), /* 8 */
+/* 3832 */ NdrFcShort( 0x24 ), /* 36 */
+/* 3834 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x4, /* 4 */
+/* 3836 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 3838 */ NdrFcShort( 0x1 ), /* 1 */
+/* 3840 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3842 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3844 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter maxChildren */
+
+/* 3846 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3848 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 3850 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter children */
+
+/* 3852 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
+/* 3854 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 3856 */ NdrFcShort( 0x55c ), /* Type Offset=1372 */
+
+ /* Parameter nChildren */
+
+/* 3858 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3860 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 3862 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3864 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3866 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 3868 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_selectedColumns */
+
+/* 3870 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3872 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3876 */ NdrFcShort( 0x14 ), /* 20 */
+/* 3878 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
+/* 3880 */ NdrFcShort( 0x8 ), /* 8 */
+/* 3882 */ NdrFcShort( 0x24 ), /* 36 */
+/* 3884 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x4, /* 4 */
+/* 3886 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 3888 */ NdrFcShort( 0x1 ), /* 1 */
+/* 3890 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3892 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3894 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter maxColumns */
+
+/* 3896 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3898 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 3900 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter columns */
+
+/* 3902 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
+/* 3904 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 3906 */ NdrFcShort( 0x55c ), /* Type Offset=1372 */
+
+ /* Parameter nColumns */
+
+/* 3908 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3910 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 3912 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3914 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3916 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 3918 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_selectedRows */
+
+/* 3920 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3922 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3926 */ NdrFcShort( 0x15 ), /* 21 */
+/* 3928 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
+/* 3930 */ NdrFcShort( 0x8 ), /* 8 */
+/* 3932 */ NdrFcShort( 0x24 ), /* 36 */
+/* 3934 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x4, /* 4 */
+/* 3936 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 3938 */ NdrFcShort( 0x1 ), /* 1 */
+/* 3940 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3942 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3944 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter maxRows */
+
+/* 3946 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3948 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 3950 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter rows */
+
+/* 3952 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
+/* 3954 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 3956 */ NdrFcShort( 0x55c ), /* Type Offset=1372 */
+
+ /* Parameter nRows */
+
+/* 3958 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3960 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 3962 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3964 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3966 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 3968 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_summary */
+
+/* 3970 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3972 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3976 */ NdrFcShort( 0x16 ), /* 22 */
+/* 3978 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 3980 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3982 */ NdrFcShort( 0x8 ), /* 8 */
+/* 3984 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 3986 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3988 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3990 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3992 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3994 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter accessible */
+
+/* 3996 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
+/* 3998 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 4000 */ NdrFcShort( 0x2e ), /* Type Offset=46 */
+
+ /* Return value */
+
+/* 4002 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4004 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 4006 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_isColumnSelected */
+
+/* 4008 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4010 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4014 */ NdrFcShort( 0x17 ), /* 23 */
+/* 4016 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 4018 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4020 */ NdrFcShort( 0x21 ), /* 33 */
+/* 4022 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x3, /* 3 */
+/* 4024 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4026 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4028 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4030 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4032 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter column */
+
+/* 4034 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 4036 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 4038 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter isSelected */
+
+/* 4040 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4042 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 4044 */ 0x3, /* FC_SMALL */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4046 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4048 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 4050 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_isRowSelected */
+
+/* 4052 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4054 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4058 */ NdrFcShort( 0x18 ), /* 24 */
+/* 4060 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 4062 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4064 */ NdrFcShort( 0x21 ), /* 33 */
+/* 4066 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x3, /* 3 */
+/* 4068 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4070 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4072 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4074 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4076 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter row */
+
+/* 4078 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 4080 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 4082 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter isSelected */
+
+/* 4084 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4086 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 4088 */ 0x3, /* FC_SMALL */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4090 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4092 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 4094 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_isSelected */
+
+/* 4096 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4098 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4102 */ NdrFcShort( 0x19 ), /* 25 */
+/* 4104 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
+/* 4106 */ NdrFcShort( 0x10 ), /* 16 */
+/* 4108 */ NdrFcShort( 0x21 ), /* 33 */
+/* 4110 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x4, /* 4 */
+/* 4112 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4114 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4116 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4118 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4120 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter row */
+
+/* 4122 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 4124 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 4126 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter column */
+
+/* 4128 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 4130 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 4132 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter isSelected */
+
+/* 4134 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4136 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 4138 */ 0x3, /* FC_SMALL */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4140 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4142 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 4144 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure selectRow */
+
+/* 4146 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4148 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4152 */ NdrFcShort( 0x1a ), /* 26 */
+/* 4154 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 4156 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4158 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4160 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 4162 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4164 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4166 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4168 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4170 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter row */
+
+/* 4172 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 4174 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 4176 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4178 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4180 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 4182 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure selectColumn */
+
+/* 4184 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4186 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4190 */ NdrFcShort( 0x1b ), /* 27 */
+/* 4192 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 4194 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4196 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4198 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 4200 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4202 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4204 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4206 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4208 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter column */
+
+/* 4210 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 4212 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 4214 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4216 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4218 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 4220 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure unselectRow */
+
+/* 4222 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4224 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4228 */ NdrFcShort( 0x1c ), /* 28 */
+/* 4230 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 4232 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4234 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4236 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 4238 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4240 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4242 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4244 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4246 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter row */
+
+/* 4248 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 4250 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 4252 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4254 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4256 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 4258 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure unselectColumn */
+
+/* 4260 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4262 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4266 */ NdrFcShort( 0x1d ), /* 29 */
+/* 4268 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 4270 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4272 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4274 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 4276 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4278 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4280 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4282 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4284 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter column */
+
+/* 4286 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 4288 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 4290 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4292 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4294 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 4296 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_rowColumnExtentsAtIndex */
+
+/* 4298 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4300 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4304 */ NdrFcShort( 0x1e ), /* 30 */
+/* 4306 */ NdrFcShort( 0x40 ), /* X64 Stack size/offset = 64 */
+/* 4308 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4310 */ NdrFcShort( 0x91 ), /* 145 */
+/* 4312 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x7, /* 7 */
+/* 4314 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4316 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4318 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4320 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4322 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter index */
+
+/* 4324 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 4326 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 4328 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter row */
+
+/* 4330 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4332 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 4334 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter column */
+
+/* 4336 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4338 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 4340 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter rowExtents */
+
+/* 4342 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4344 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 4346 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter columnExtents */
+
+/* 4348 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4350 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
+/* 4352 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter isSelected */
+
+/* 4354 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4356 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */
+/* 4358 */ 0x3, /* FC_SMALL */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4360 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4362 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */
+/* 4364 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_modelChange */
+
+/* 4366 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4368 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4372 */ NdrFcShort( 0x1f ), /* 31 */
+/* 4374 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 4376 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4378 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4380 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 4382 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4384 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4386 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4388 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4390 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter modelChange */
+
+/* 4392 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */
+/* 4394 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 4396 */ NdrFcShort( 0x57a ), /* Type Offset=1402 */
+
+ /* Return value */
+
+/* 4398 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4400 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 4402 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_rowExtent */
+
+
+ /* Procedure get_nColumns */
+
+/* 4404 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4406 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4410 */ NdrFcShort( 0x6 ), /* 6 */
+/* 4412 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 4414 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4416 */ NdrFcShort( 0x24 ), /* 36 */
+/* 4418 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 4420 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4422 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4424 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4426 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4428 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter nRowsSpanned */
+
+
+ /* Parameter columnCount */
+
+/* 4430 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4432 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 4434 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+
+ /* Return value */
+
+/* 4436 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4438 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 4440 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_rowIndex */
+
+
+ /* Procedure get_nSelectedCells */
+
+/* 4442 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4444 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4448 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4450 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 4452 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4454 */ NdrFcShort( 0x24 ), /* 36 */
+/* 4456 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 4458 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4460 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4462 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4464 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4466 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter rowIndex */
+
+
+ /* Parameter cellCount */
+
+/* 4468 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4470 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 4472 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+
+ /* Return value */
+
+/* 4474 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4476 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 4478 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_nSelectedColumns */
+
+/* 4480 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4482 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4486 */ NdrFcShort( 0x9 ), /* 9 */
+/* 4488 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 4490 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4492 */ NdrFcShort( 0x24 ), /* 36 */
+/* 4494 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 4496 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4498 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4500 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4502 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4504 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter columnCount */
+
+/* 4506 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4508 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 4510 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4512 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4514 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 4516 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_rowDescription */
+
+/* 4518 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4520 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4524 */ NdrFcShort( 0xb ), /* 11 */
+/* 4526 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 4528 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4530 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4532 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 4534 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 4536 */ NdrFcShort( 0x1 ), /* 1 */
+/* 4538 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4540 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4542 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter row */
+
+/* 4544 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 4546 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 4548 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter description */
+
+/* 4550 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 4552 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 4554 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+/* 4556 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4558 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 4560 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_selectedCells */
+
+/* 4562 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4564 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4568 */ NdrFcShort( 0xc ), /* 12 */
+/* 4570 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 4572 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4574 */ NdrFcShort( 0x24 ), /* 36 */
+/* 4576 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 4578 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 4580 */ NdrFcShort( 0x1 ), /* 1 */
+/* 4582 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4584 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4586 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter cells */
+
+/* 4588 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
+/* 4590 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 4592 */ NdrFcShort( 0x588 ), /* Type Offset=1416 */
+
+ /* Parameter nSelectedCells */
+
+/* 4594 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4596 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 4598 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4600 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4602 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 4604 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_selectedColumns */
+
+/* 4606 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4608 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4612 */ NdrFcShort( 0xd ), /* 13 */
+/* 4614 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 4616 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4618 */ NdrFcShort( 0x24 ), /* 36 */
+/* 4620 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 4622 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 4624 */ NdrFcShort( 0x1 ), /* 1 */
+/* 4626 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4628 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4630 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter selectedColumns */
+
+/* 4632 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
+/* 4634 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 4636 */ NdrFcShort( 0x5a6 ), /* Type Offset=1446 */
+
+ /* Parameter nColumns */
+
+/* 4638 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4640 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 4642 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4644 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4646 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 4648 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_selectedRows */
+
+/* 4650 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4652 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4656 */ NdrFcShort( 0xe ), /* 14 */
+/* 4658 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 4660 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4662 */ NdrFcShort( 0x24 ), /* 36 */
+/* 4664 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 4666 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 4668 */ NdrFcShort( 0x1 ), /* 1 */
+/* 4670 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4672 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4674 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter selectedRows */
+
+/* 4676 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
+/* 4678 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 4680 */ NdrFcShort( 0x5a6 ), /* Type Offset=1446 */
+
+ /* Parameter nRows */
+
+/* 4682 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4684 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 4686 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4688 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4690 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 4692 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_summary */
+
+/* 4694 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4696 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4700 */ NdrFcShort( 0xf ), /* 15 */
+/* 4702 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 4704 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4706 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4708 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 4710 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4712 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4714 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4716 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4718 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter accessible */
+
+/* 4720 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
+/* 4722 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 4724 */ NdrFcShort( 0x2e ), /* Type Offset=46 */
+
+ /* Return value */
+
+/* 4726 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4728 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 4730 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_isColumnSelected */
+
+/* 4732 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4734 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4738 */ NdrFcShort( 0x10 ), /* 16 */
+/* 4740 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 4742 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4744 */ NdrFcShort( 0x21 ), /* 33 */
+/* 4746 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x3, /* 3 */
+/* 4748 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4750 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4752 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4754 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4756 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter column */
+
+/* 4758 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 4760 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 4762 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter isSelected */
+
+/* 4764 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4766 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 4768 */ 0x3, /* FC_SMALL */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4770 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4772 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 4774 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_isRowSelected */
+
+/* 4776 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4778 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4782 */ NdrFcShort( 0x11 ), /* 17 */
+/* 4784 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 4786 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4788 */ NdrFcShort( 0x21 ), /* 33 */
+/* 4790 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x3, /* 3 */
+/* 4792 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4794 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4796 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4798 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4800 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter row */
+
+/* 4802 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 4804 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 4806 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter isSelected */
+
+/* 4808 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4810 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 4812 */ 0x3, /* FC_SMALL */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4814 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4816 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 4818 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure selectRow */
+
+/* 4820 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4822 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4826 */ NdrFcShort( 0x12 ), /* 18 */
+/* 4828 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 4830 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4832 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4834 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 4836 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4838 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4840 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4842 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4844 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter row */
+
+/* 4846 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 4848 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 4850 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4852 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4854 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 4856 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure selectColumn */
+
+/* 4858 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4860 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4864 */ NdrFcShort( 0x13 ), /* 19 */
+/* 4866 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 4868 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4870 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4872 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 4874 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4876 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4878 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4880 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4882 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter column */
+
+/* 4884 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 4886 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 4888 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4890 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4892 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 4894 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure unselectRow */
+
+/* 4896 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4898 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4902 */ NdrFcShort( 0x14 ), /* 20 */
+/* 4904 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 4906 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4908 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4910 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 4912 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4914 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4916 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4918 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4920 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter row */
+
+/* 4922 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 4924 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 4926 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4928 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4930 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 4932 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure unselectColumn */
+
+/* 4934 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4936 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4940 */ NdrFcShort( 0x15 ), /* 21 */
+/* 4942 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 4944 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4946 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4948 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 4950 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4952 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4954 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4956 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4958 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter column */
+
+/* 4960 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 4962 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 4964 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4966 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4968 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 4970 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_modelChange */
+
+/* 4972 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4974 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4978 */ NdrFcShort( 0x16 ), /* 22 */
+/* 4980 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 4982 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4984 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4986 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 4988 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4990 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4992 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4994 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4996 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter modelChange */
+
+/* 4998 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */
+/* 5000 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 5002 */ NdrFcShort( 0x57a ), /* Type Offset=1402 */
+
+ /* Return value */
+
+/* 5004 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 5006 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 5008 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_columnHeaderCells */
+
+/* 5010 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 5012 */ NdrFcLong( 0x0 ), /* 0 */
+/* 5016 */ NdrFcShort( 0x4 ), /* 4 */
+/* 5018 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 5020 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5022 */ NdrFcShort( 0x24 ), /* 36 */
+/* 5024 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 5026 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 5028 */ NdrFcShort( 0x1 ), /* 1 */
+/* 5030 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5032 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5034 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter cellAccessibles */
+
+/* 5036 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
+/* 5038 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 5040 */ NdrFcShort( 0x588 ), /* Type Offset=1416 */
+
+ /* Parameter nColumnHeaderCells */
+
+/* 5042 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 5044 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 5046 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 5048 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 5050 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 5052 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_rowHeaderCells */
+
+/* 5054 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 5056 */ NdrFcLong( 0x0 ), /* 0 */
+/* 5060 */ NdrFcShort( 0x7 ), /* 7 */
+/* 5062 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 5064 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5066 */ NdrFcShort( 0x24 ), /* 36 */
+/* 5068 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 5070 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 5072 */ NdrFcShort( 0x1 ), /* 1 */
+/* 5074 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5076 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5078 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter cellAccessibles */
+
+/* 5080 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
+/* 5082 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 5084 */ NdrFcShort( 0x588 ), /* Type Offset=1416 */
+
+ /* Parameter nRowHeaderCells */
+
+/* 5086 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 5088 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 5090 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 5092 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 5094 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 5096 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_isSelected */
+
+/* 5098 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 5100 */ NdrFcLong( 0x0 ), /* 0 */
+/* 5104 */ NdrFcShort( 0x9 ), /* 9 */
+/* 5106 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 5108 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5110 */ NdrFcShort( 0x21 ), /* 33 */
+/* 5112 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 5114 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 5116 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5118 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5120 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5122 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter isSelected */
+
+/* 5124 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 5126 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 5128 */ 0x3, /* FC_SMALL */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 5130 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 5132 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 5134 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_rowColumnExtents */
+
+/* 5136 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 5138 */ NdrFcLong( 0x0 ), /* 0 */
+/* 5142 */ NdrFcShort( 0xa ), /* 10 */
+/* 5144 */ NdrFcShort( 0x38 ), /* X64 Stack size/offset = 56 */
+/* 5146 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5148 */ NdrFcShort( 0x91 ), /* 145 */
+/* 5150 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x6, /* 6 */
+/* 5152 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 5154 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5156 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5158 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5160 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter row */
+
+/* 5162 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 5164 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 5166 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter column */
+
+/* 5168 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 5170 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 5172 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter rowExtents */
+
+/* 5174 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 5176 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 5178 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter columnExtents */
+
+/* 5180 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 5182 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 5184 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter isSelected */
+
+/* 5186 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 5188 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
+/* 5190 */ 0x3, /* FC_SMALL */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 5192 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 5194 */ NdrFcShort( 0x30 ), /* X64 Stack size/offset = 48 */
+/* 5196 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_table */
+
+/* 5198 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 5200 */ NdrFcLong( 0x0 ), /* 0 */
+/* 5204 */ NdrFcShort( 0xb ), /* 11 */
+/* 5206 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 5208 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5210 */ NdrFcShort( 0x8 ), /* 8 */
+/* 5212 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 5214 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 5216 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5218 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5220 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5222 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter table */
+
+/* 5224 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
+/* 5226 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 5228 */ NdrFcShort( 0x2e ), /* Type Offset=46 */
+
+ /* Return value */
+
+/* 5230 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 5232 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 5234 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_imagePosition */
+
+/* 5236 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 5238 */ NdrFcLong( 0x0 ), /* 0 */
+/* 5242 */ NdrFcShort( 0x4 ), /* 4 */
+/* 5244 */ NdrFcShort( 0x28 ), /* X64 Stack size/offset = 40 */
+/* 5246 */ NdrFcShort( 0x6 ), /* 6 */
+/* 5248 */ NdrFcShort( 0x40 ), /* 64 */
+/* 5250 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x4, /* 4 */
+/* 5252 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 5254 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5256 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5258 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5260 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter coordinateType */
+
+/* 5262 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 5264 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 5266 */ 0xd, /* FC_ENUM16 */
+ 0x0, /* 0 */
+
+ /* Parameter x */
+
+/* 5268 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 5270 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 5272 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter y */
+
+/* 5274 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 5276 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 5278 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 5280 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 5282 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 5284 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_imageSize */
+
+/* 5286 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 5288 */ NdrFcLong( 0x0 ), /* 0 */
+/* 5292 */ NdrFcShort( 0x5 ), /* 5 */
+/* 5294 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 5296 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5298 */ NdrFcShort( 0x40 ), /* 64 */
+/* 5300 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x3, /* 3 */
+/* 5302 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 5304 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5306 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5308 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5310 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter height */
+
+/* 5312 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 5314 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 5316 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter width */
+
+/* 5318 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 5320 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 5322 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 5324 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 5326 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 5328 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_toolkitName */
+
+/* 5330 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 5332 */ NdrFcLong( 0x0 ), /* 0 */
+/* 5336 */ NdrFcShort( 0x5 ), /* 5 */
+/* 5338 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 5340 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5342 */ NdrFcShort( 0x8 ), /* 8 */
+/* 5344 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 5346 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 5348 */ NdrFcShort( 0x1 ), /* 1 */
+/* 5350 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5352 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5354 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter name */
+
+/* 5356 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 5358 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 5360 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+/* 5362 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 5364 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 5366 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_toolkitVersion */
+
+/* 5368 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 5370 */ NdrFcLong( 0x0 ), /* 0 */
+/* 5374 */ NdrFcShort( 0x6 ), /* 6 */
+/* 5376 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 5378 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5380 */ NdrFcShort( 0x8 ), /* 8 */
+/* 5382 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 5384 */ 0xa, /* 10 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 5386 */ NdrFcShort( 0x1 ), /* 1 */
+/* 5388 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5390 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5392 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter version */
+
+/* 5394 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 5396 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 5398 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+/* 5400 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 5402 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 5404 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_anchorTarget */
+
+/* 5406 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 5408 */ NdrFcLong( 0x0 ), /* 0 */
+/* 5412 */ NdrFcShort( 0x3 ), /* 3 */
+/* 5414 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 5416 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5418 */ NdrFcShort( 0x8 ), /* 8 */
+/* 5420 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 5422 */ 0xa, /* 10 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 5424 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5426 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5428 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5430 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter accessible */
+
+/* 5432 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
+/* 5434 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 5436 */ NdrFcShort( 0x2e ), /* Type Offset=46 */
+
+ /* Return value */
+
+/* 5438 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 5440 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 5442 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ 0x0
+ }
+ };
+
+static const ia2_api_all_MIDL_TYPE_FORMAT_STRING ia2_api_all__MIDL_TypeFormatString =
+ {
+ 0,
+ {
+ NdrFcShort( 0x0 ), /* 0 */
+/* 2 */
+ 0x11, 0x4, /* FC_RP [alloced_on_stack] */
+/* 4 */ NdrFcShort( 0x1c ), /* Offset= 28 (32) */
+/* 6 */
+ 0x13, 0x0, /* FC_OP */
+/* 8 */ NdrFcShort( 0xe ), /* Offset= 14 (22) */
+/* 10 */
+ 0x1b, /* FC_CARRAY */
+ 0x1, /* 1 */
+/* 12 */ NdrFcShort( 0x2 ), /* 2 */
+/* 14 */ 0x9, /* Corr desc: FC_ULONG */
+ 0x0, /* */
+/* 16 */ NdrFcShort( 0xfffc ), /* -4 */
+/* 18 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 20 */ 0x6, /* FC_SHORT */
+ 0x5b, /* FC_END */
+/* 22 */
+ 0x17, /* FC_CSTRUCT */
+ 0x3, /* 3 */
+/* 24 */ NdrFcShort( 0x8 ), /* 8 */
+/* 26 */ NdrFcShort( 0xfff0 ), /* Offset= -16 (10) */
+/* 28 */ 0x8, /* FC_LONG */
+ 0x8, /* FC_LONG */
+/* 30 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 32 */ 0xb4, /* FC_USER_MARSHAL */
+ 0x83, /* 131 */
+/* 34 */ NdrFcShort( 0x0 ), /* 0 */
+/* 36 */ NdrFcShort( 0x8 ), /* 8 */
+/* 38 */ NdrFcShort( 0x0 ), /* 0 */
+/* 40 */ NdrFcShort( 0xffde ), /* Offset= -34 (6) */
+/* 42 */
+ 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
+/* 44 */ 0x8, /* FC_LONG */
+ 0x5c, /* FC_PAD */
+/* 46 */
+ 0x11, 0x10, /* FC_RP [pointer_deref] */
+/* 48 */ NdrFcShort( 0x2 ), /* Offset= 2 (50) */
+/* 50 */
+ 0x2f, /* FC_IP */
+ 0x5a, /* FC_CONSTANT_IID */
+/* 52 */ NdrFcLong( 0x0 ), /* 0 */
+/* 56 */ NdrFcShort( 0x0 ), /* 0 */
+/* 58 */ NdrFcShort( 0x0 ), /* 0 */
+/* 60 */ 0xc0, /* 192 */
+ 0x0, /* 0 */
+/* 62 */ 0x0, /* 0 */
+ 0x0, /* 0 */
+/* 64 */ 0x0, /* 0 */
+ 0x0, /* 0 */
+/* 66 */ 0x0, /* 0 */
+ 0x46, /* 70 */
+/* 68 */
+ 0x11, 0x0, /* FC_RP */
+/* 70 */ NdrFcShort( 0x2 ), /* Offset= 2 (72) */
+/* 72 */
+ 0x21, /* FC_BOGUS_ARRAY */
+ 0x3, /* 3 */
+/* 74 */ NdrFcShort( 0x0 ), /* 0 */
+/* 76 */ 0x28, /* Corr desc: parameter, FC_LONG */
+ 0x0, /* */
+/* 78 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 80 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 82 */ 0x28, /* Corr desc: parameter, FC_LONG */
+ 0x54, /* FC_DEREFERENCE */
+/* 84 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 86 */ NdrFcShort( 0x0 ), /* Corr flags: */
+/* 88 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 90 */ NdrFcShort( 0xffd8 ), /* Offset= -40 (50) */
+/* 92 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 94 */
+ 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */
+/* 96 */ NdrFcShort( 0x2 ), /* Offset= 2 (98) */
+/* 98 */
+ 0x13, 0x0, /* FC_OP */
+/* 100 */ NdrFcShort( 0x2 ), /* Offset= 2 (102) */
+/* 102 */
+ 0x21, /* FC_BOGUS_ARRAY */
+ 0x3, /* 3 */
+/* 104 */ NdrFcShort( 0x0 ), /* 0 */
+/* 106 */ 0x28, /* Corr desc: parameter, FC_LONG */
+ 0x0, /* */
+/* 108 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 110 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 112 */ 0x28, /* Corr desc: parameter, FC_LONG */
+ 0x54, /* FC_DEREFERENCE */
+/* 114 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 116 */ NdrFcShort( 0x0 ), /* Corr flags: */
+/* 118 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 120 */ NdrFcShort( 0xffa8 ), /* Offset= -88 (32) */
+/* 122 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 124 */
+ 0x11, 0x10, /* FC_RP [pointer_deref] */
+/* 126 */ NdrFcShort( 0x2 ), /* Offset= 2 (128) */
+/* 128 */
+ 0x2f, /* FC_IP */
+ 0x5a, /* FC_CONSTANT_IID */
+/* 130 */ NdrFcLong( 0x7cdf86ee ), /* 2095023854 */
+/* 134 */ NdrFcShort( 0xc3da ), /* -15398 */
+/* 136 */ NdrFcShort( 0x496a ), /* 18794 */
+/* 138 */ 0xbd, /* 189 */
+ 0xa4, /* 164 */
+/* 140 */ 0x28, /* 40 */
+ 0x1b, /* 27 */
+/* 142 */ 0x33, /* 51 */
+ 0x6e, /* 110 */
+/* 144 */ 0x1f, /* 31 */
+ 0xdc, /* 220 */
+/* 146 */
+ 0x11, 0x0, /* FC_RP */
+/* 148 */ NdrFcShort( 0x2 ), /* Offset= 2 (150) */
+/* 150 */
+ 0x21, /* FC_BOGUS_ARRAY */
+ 0x3, /* 3 */
+/* 152 */ NdrFcShort( 0x0 ), /* 0 */
+/* 154 */ 0x28, /* Corr desc: parameter, FC_LONG */
+ 0x0, /* */
+/* 156 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 158 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 160 */ 0x28, /* Corr desc: parameter, FC_LONG */
+ 0x54, /* FC_DEREFERENCE */
+/* 162 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 164 */ NdrFcShort( 0x0 ), /* Corr flags: */
+/* 166 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 168 */ NdrFcShort( 0xffd8 ), /* Offset= -40 (128) */
+/* 170 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 172 */
+ 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */
+/* 174 */ NdrFcShort( 0x2 ), /* Offset= 2 (176) */
+/* 176 */
+ 0x13, 0x0, /* FC_OP */
+/* 178 */ NdrFcShort( 0x2 ), /* Offset= 2 (180) */
+/* 180 */
+ 0x21, /* FC_BOGUS_ARRAY */
+ 0x3, /* 3 */
+/* 182 */ NdrFcShort( 0x0 ), /* 0 */
+/* 184 */ 0x28, /* Corr desc: parameter, FC_LONG */
+ 0x0, /* */
+/* 186 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 188 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 190 */ 0x28, /* Corr desc: parameter, FC_LONG */
+ 0x54, /* FC_DEREFERENCE */
+/* 192 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 194 */ NdrFcShort( 0x0 ), /* Corr flags: */
+/* 196 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 198 */ NdrFcShort( 0xff5a ), /* Offset= -166 (32) */
+/* 200 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 202 */
+ 0x11, 0x4, /* FC_RP [alloced_on_stack] */
+/* 204 */ NdrFcShort( 0x1a ), /* Offset= 26 (230) */
+/* 206 */
+ 0x13, 0x0, /* FC_OP */
+/* 208 */ NdrFcShort( 0x2 ), /* Offset= 2 (210) */
+/* 210 */
+ 0x2a, /* FC_ENCAPSULATED_UNION */
+ 0x48, /* 72 */
+/* 212 */ NdrFcShort( 0x4 ), /* 4 */
+/* 214 */ NdrFcShort( 0x2 ), /* 2 */
+/* 216 */ NdrFcLong( 0x48746457 ), /* 1215587415 */
+/* 220 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
+/* 222 */ NdrFcLong( 0x52746457 ), /* 1383359575 */
+/* 226 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
+/* 228 */ NdrFcShort( 0xffff ), /* Offset= -1 (227) */
+/* 230 */ 0xb4, /* FC_USER_MARSHAL */
+ 0x83, /* 131 */
+/* 232 */ NdrFcShort( 0x1 ), /* 1 */
+/* 234 */ NdrFcShort( 0x8 ), /* 8 */
+/* 236 */ NdrFcShort( 0x0 ), /* 0 */
+/* 238 */ NdrFcShort( 0xffe0 ), /* Offset= -32 (206) */
+/* 240 */
+ 0x11, 0x4, /* FC_RP [alloced_on_stack] */
+/* 242 */ NdrFcShort( 0x2 ), /* Offset= 2 (244) */
+/* 244 */
+ 0x1a, /* FC_BOGUS_STRUCT */
+ 0x3, /* 3 */
+/* 246 */ NdrFcShort( 0x18 ), /* 24 */
+/* 248 */ NdrFcShort( 0x0 ), /* 0 */
+/* 250 */ NdrFcShort( 0x0 ), /* Offset= 0 (250) */
+/* 252 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 254 */ NdrFcShort( 0xff22 ), /* Offset= -222 (32) */
+/* 256 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 258 */ NdrFcShort( 0xff1e ), /* Offset= -226 (32) */
+/* 260 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 262 */ NdrFcShort( 0xff1a ), /* Offset= -230 (32) */
+/* 264 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 266 */
+ 0x12, 0x0, /* FC_UP */
+/* 268 */ NdrFcShort( 0xff0a ), /* Offset= -246 (22) */
+/* 270 */ 0xb4, /* FC_USER_MARSHAL */
+ 0x83, /* 131 */
+/* 272 */ NdrFcShort( 0x0 ), /* 0 */
+/* 274 */ NdrFcShort( 0x8 ), /* 8 */
+/* 276 */ NdrFcShort( 0x0 ), /* 0 */
+/* 278 */ NdrFcShort( 0xfff4 ), /* Offset= -12 (266) */
+/* 280 */
+ 0x11, 0x4, /* FC_RP [alloced_on_stack] */
+/* 282 */ NdrFcShort( 0x3a2 ), /* Offset= 930 (1212) */
+/* 284 */
+ 0x13, 0x0, /* FC_OP */
+/* 286 */ NdrFcShort( 0x38a ), /* Offset= 906 (1192) */
+/* 288 */
+ 0x2b, /* FC_NON_ENCAPSULATED_UNION */
+ 0x9, /* FC_ULONG */
+/* 290 */ 0x7, /* Corr desc: FC_USHORT */
+ 0x0, /* */
+/* 292 */ NdrFcShort( 0xfff8 ), /* -8 */
+/* 294 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 296 */ NdrFcShort( 0x2 ), /* Offset= 2 (298) */
+/* 298 */ NdrFcShort( 0x10 ), /* 16 */
+/* 300 */ NdrFcShort( 0x2f ), /* 47 */
+/* 302 */ NdrFcLong( 0x14 ), /* 20 */
+/* 306 */ NdrFcShort( 0x800b ), /* Simple arm type: FC_HYPER */
+/* 308 */ NdrFcLong( 0x3 ), /* 3 */
+/* 312 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
+/* 314 */ NdrFcLong( 0x11 ), /* 17 */
+/* 318 */ NdrFcShort( 0x8001 ), /* Simple arm type: FC_BYTE */
+/* 320 */ NdrFcLong( 0x2 ), /* 2 */
+/* 324 */ NdrFcShort( 0x8006 ), /* Simple arm type: FC_SHORT */
+/* 326 */ NdrFcLong( 0x4 ), /* 4 */
+/* 330 */ NdrFcShort( 0x800a ), /* Simple arm type: FC_FLOAT */
+/* 332 */ NdrFcLong( 0x5 ), /* 5 */
+/* 336 */ NdrFcShort( 0x800c ), /* Simple arm type: FC_DOUBLE */
+/* 338 */ NdrFcLong( 0xb ), /* 11 */
+/* 342 */ NdrFcShort( 0x8006 ), /* Simple arm type: FC_SHORT */
+/* 344 */ NdrFcLong( 0xa ), /* 10 */
+/* 348 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
+/* 350 */ NdrFcLong( 0x6 ), /* 6 */
+/* 354 */ NdrFcShort( 0xe8 ), /* Offset= 232 (586) */
+/* 356 */ NdrFcLong( 0x7 ), /* 7 */
+/* 360 */ NdrFcShort( 0x800c ), /* Simple arm type: FC_DOUBLE */
+/* 362 */ NdrFcLong( 0x8 ), /* 8 */
+/* 366 */ NdrFcShort( 0xfe98 ), /* Offset= -360 (6) */
+/* 368 */ NdrFcLong( 0xd ), /* 13 */
+/* 372 */ NdrFcShort( 0xfebe ), /* Offset= -322 (50) */
+/* 374 */ NdrFcLong( 0x9 ), /* 9 */
+/* 378 */ NdrFcShort( 0xd6 ), /* Offset= 214 (592) */
+/* 380 */ NdrFcLong( 0x2000 ), /* 8192 */
+/* 384 */ NdrFcShort( 0xe2 ), /* Offset= 226 (610) */
+/* 386 */ NdrFcLong( 0x24 ), /* 36 */
+/* 390 */ NdrFcShort( 0x2d8 ), /* Offset= 728 (1118) */
+/* 392 */ NdrFcLong( 0x4024 ), /* 16420 */
+/* 396 */ NdrFcShort( 0x2d2 ), /* Offset= 722 (1118) */
+/* 398 */ NdrFcLong( 0x4011 ), /* 16401 */
+/* 402 */ NdrFcShort( 0x2d0 ), /* Offset= 720 (1122) */
+/* 404 */ NdrFcLong( 0x4002 ), /* 16386 */
+/* 408 */ NdrFcShort( 0x2ce ), /* Offset= 718 (1126) */
+/* 410 */ NdrFcLong( 0x4003 ), /* 16387 */
+/* 414 */ NdrFcShort( 0x2cc ), /* Offset= 716 (1130) */
+/* 416 */ NdrFcLong( 0x4014 ), /* 16404 */
+/* 420 */ NdrFcShort( 0x2ca ), /* Offset= 714 (1134) */
+/* 422 */ NdrFcLong( 0x4004 ), /* 16388 */
+/* 426 */ NdrFcShort( 0x2c8 ), /* Offset= 712 (1138) */
+/* 428 */ NdrFcLong( 0x4005 ), /* 16389 */
+/* 432 */ NdrFcShort( 0x2c6 ), /* Offset= 710 (1142) */
+/* 434 */ NdrFcLong( 0x400b ), /* 16395 */
+/* 438 */ NdrFcShort( 0x2b0 ), /* Offset= 688 (1126) */
+/* 440 */ NdrFcLong( 0x400a ), /* 16394 */
+/* 444 */ NdrFcShort( 0x2ae ), /* Offset= 686 (1130) */
+/* 446 */ NdrFcLong( 0x4006 ), /* 16390 */
+/* 450 */ NdrFcShort( 0x2b8 ), /* Offset= 696 (1146) */
+/* 452 */ NdrFcLong( 0x4007 ), /* 16391 */
+/* 456 */ NdrFcShort( 0x2ae ), /* Offset= 686 (1142) */
+/* 458 */ NdrFcLong( 0x4008 ), /* 16392 */
+/* 462 */ NdrFcShort( 0x2b0 ), /* Offset= 688 (1150) */
+/* 464 */ NdrFcLong( 0x400d ), /* 16397 */
+/* 468 */ NdrFcShort( 0x2ae ), /* Offset= 686 (1154) */
+/* 470 */ NdrFcLong( 0x4009 ), /* 16393 */
+/* 474 */ NdrFcShort( 0x2ac ), /* Offset= 684 (1158) */
+/* 476 */ NdrFcLong( 0x6000 ), /* 24576 */
+/* 480 */ NdrFcShort( 0x2aa ), /* Offset= 682 (1162) */
+/* 482 */ NdrFcLong( 0x400c ), /* 16396 */
+/* 486 */ NdrFcShort( 0x2a8 ), /* Offset= 680 (1166) */
+/* 488 */ NdrFcLong( 0x10 ), /* 16 */
+/* 492 */ NdrFcShort( 0x8002 ), /* Simple arm type: FC_CHAR */
+/* 494 */ NdrFcLong( 0x12 ), /* 18 */
+/* 498 */ NdrFcShort( 0x8006 ), /* Simple arm type: FC_SHORT */
+/* 500 */ NdrFcLong( 0x13 ), /* 19 */
+/* 504 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
+/* 506 */ NdrFcLong( 0x15 ), /* 21 */
+/* 510 */ NdrFcShort( 0x800b ), /* Simple arm type: FC_HYPER */
+/* 512 */ NdrFcLong( 0x16 ), /* 22 */
+/* 516 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
+/* 518 */ NdrFcLong( 0x17 ), /* 23 */
+/* 522 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
+/* 524 */ NdrFcLong( 0xe ), /* 14 */
+/* 528 */ NdrFcShort( 0x286 ), /* Offset= 646 (1174) */
+/* 530 */ NdrFcLong( 0x400e ), /* 16398 */
+/* 534 */ NdrFcShort( 0x28a ), /* Offset= 650 (1184) */
+/* 536 */ NdrFcLong( 0x4010 ), /* 16400 */
+/* 540 */ NdrFcShort( 0x288 ), /* Offset= 648 (1188) */
+/* 542 */ NdrFcLong( 0x4012 ), /* 16402 */
+/* 546 */ NdrFcShort( 0x244 ), /* Offset= 580 (1126) */
+/* 548 */ NdrFcLong( 0x4013 ), /* 16403 */
+/* 552 */ NdrFcShort( 0x242 ), /* Offset= 578 (1130) */
+/* 554 */ NdrFcLong( 0x4015 ), /* 16405 */
+/* 558 */ NdrFcShort( 0x240 ), /* Offset= 576 (1134) */
+/* 560 */ NdrFcLong( 0x4016 ), /* 16406 */
+/* 564 */ NdrFcShort( 0x236 ), /* Offset= 566 (1130) */
+/* 566 */ NdrFcLong( 0x4017 ), /* 16407 */
+/* 570 */ NdrFcShort( 0x230 ), /* Offset= 560 (1130) */
+/* 572 */ NdrFcLong( 0x0 ), /* 0 */
+/* 576 */ NdrFcShort( 0x0 ), /* Offset= 0 (576) */
+/* 578 */ NdrFcLong( 0x1 ), /* 1 */
+/* 582 */ NdrFcShort( 0x0 ), /* Offset= 0 (582) */
+/* 584 */ NdrFcShort( 0xffff ), /* Offset= -1 (583) */
+/* 586 */
+ 0x15, /* FC_STRUCT */
+ 0x7, /* 7 */
+/* 588 */ NdrFcShort( 0x8 ), /* 8 */
+/* 590 */ 0xb, /* FC_HYPER */
+ 0x5b, /* FC_END */
+/* 592 */
+ 0x2f, /* FC_IP */
+ 0x5a, /* FC_CONSTANT_IID */
+/* 594 */ NdrFcLong( 0x20400 ), /* 132096 */
+/* 598 */ NdrFcShort( 0x0 ), /* 0 */
+/* 600 */ NdrFcShort( 0x0 ), /* 0 */
+/* 602 */ 0xc0, /* 192 */
+ 0x0, /* 0 */
+/* 604 */ 0x0, /* 0 */
+ 0x0, /* 0 */
+/* 606 */ 0x0, /* 0 */
+ 0x0, /* 0 */
+/* 608 */ 0x0, /* 0 */
+ 0x46, /* 70 */
+/* 610 */
+ 0x13, 0x10, /* FC_OP [pointer_deref] */
+/* 612 */ NdrFcShort( 0x2 ), /* Offset= 2 (614) */
+/* 614 */
+ 0x13, 0x0, /* FC_OP */
+/* 616 */ NdrFcShort( 0x1e4 ), /* Offset= 484 (1100) */
+/* 618 */
+ 0x2a, /* FC_ENCAPSULATED_UNION */
+ 0x89, /* 137 */
+/* 620 */ NdrFcShort( 0x20 ), /* 32 */
+/* 622 */ NdrFcShort( 0xa ), /* 10 */
+/* 624 */ NdrFcLong( 0x8 ), /* 8 */
+/* 628 */ NdrFcShort( 0x50 ), /* Offset= 80 (708) */
+/* 630 */ NdrFcLong( 0xd ), /* 13 */
+/* 634 */ NdrFcShort( 0x70 ), /* Offset= 112 (746) */
+/* 636 */ NdrFcLong( 0x9 ), /* 9 */
+/* 640 */ NdrFcShort( 0x90 ), /* Offset= 144 (784) */
+/* 642 */ NdrFcLong( 0xc ), /* 12 */
+/* 646 */ NdrFcShort( 0xb0 ), /* Offset= 176 (822) */
+/* 648 */ NdrFcLong( 0x24 ), /* 36 */
+/* 652 */ NdrFcShort( 0x102 ), /* Offset= 258 (910) */
+/* 654 */ NdrFcLong( 0x800d ), /* 32781 */
+/* 658 */ NdrFcShort( 0x11e ), /* Offset= 286 (944) */
+/* 660 */ NdrFcLong( 0x10 ), /* 16 */
+/* 664 */ NdrFcShort( 0x138 ), /* Offset= 312 (976) */
+/* 666 */ NdrFcLong( 0x2 ), /* 2 */
+/* 670 */ NdrFcShort( 0x14e ), /* Offset= 334 (1004) */
+/* 672 */ NdrFcLong( 0x3 ), /* 3 */
+/* 676 */ NdrFcShort( 0x164 ), /* Offset= 356 (1032) */
+/* 678 */ NdrFcLong( 0x14 ), /* 20 */
+/* 682 */ NdrFcShort( 0x17a ), /* Offset= 378 (1060) */
+/* 684 */ NdrFcShort( 0xffff ), /* Offset= -1 (683) */
+/* 686 */
+ 0x21, /* FC_BOGUS_ARRAY */
+ 0x3, /* 3 */
+/* 688 */ NdrFcShort( 0x0 ), /* 0 */
+/* 690 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
+ 0x0, /* */
+/* 692 */ NdrFcShort( 0x0 ), /* 0 */
+/* 694 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 696 */ NdrFcLong( 0xffffffff ), /* -1 */
+/* 700 */ NdrFcShort( 0x0 ), /* Corr flags: */
+/* 702 */
+ 0x13, 0x0, /* FC_OP */
+/* 704 */ NdrFcShort( 0xfd56 ), /* Offset= -682 (22) */
+/* 706 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 708 */
+ 0x1a, /* FC_BOGUS_STRUCT */
+ 0x3, /* 3 */
+/* 710 */ NdrFcShort( 0x10 ), /* 16 */
+/* 712 */ NdrFcShort( 0x0 ), /* 0 */
+/* 714 */ NdrFcShort( 0x6 ), /* Offset= 6 (720) */
+/* 716 */ 0x8, /* FC_LONG */
+ 0x40, /* FC_STRUCTPAD4 */
+/* 718 */ 0x36, /* FC_POINTER */
+ 0x5b, /* FC_END */
+/* 720 */
+ 0x11, 0x0, /* FC_RP */
+/* 722 */ NdrFcShort( 0xffdc ), /* Offset= -36 (686) */
+/* 724 */
+ 0x21, /* FC_BOGUS_ARRAY */
+ 0x3, /* 3 */
+/* 726 */ NdrFcShort( 0x0 ), /* 0 */
+/* 728 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
+ 0x0, /* */
+/* 730 */ NdrFcShort( 0x0 ), /* 0 */
+/* 732 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 734 */ NdrFcLong( 0xffffffff ), /* -1 */
+/* 738 */ NdrFcShort( 0x0 ), /* Corr flags: */
+/* 740 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 742 */ NdrFcShort( 0xfd4c ), /* Offset= -692 (50) */
+/* 744 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 746 */
+ 0x1a, /* FC_BOGUS_STRUCT */
+ 0x3, /* 3 */
+/* 748 */ NdrFcShort( 0x10 ), /* 16 */
+/* 750 */ NdrFcShort( 0x0 ), /* 0 */
+/* 752 */ NdrFcShort( 0x6 ), /* Offset= 6 (758) */
+/* 754 */ 0x8, /* FC_LONG */
+ 0x40, /* FC_STRUCTPAD4 */
+/* 756 */ 0x36, /* FC_POINTER */
+ 0x5b, /* FC_END */
+/* 758 */
+ 0x11, 0x0, /* FC_RP */
+/* 760 */ NdrFcShort( 0xffdc ), /* Offset= -36 (724) */
+/* 762 */
+ 0x21, /* FC_BOGUS_ARRAY */
+ 0x3, /* 3 */
+/* 764 */ NdrFcShort( 0x0 ), /* 0 */
+/* 766 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
+ 0x0, /* */
+/* 768 */ NdrFcShort( 0x0 ), /* 0 */
+/* 770 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 772 */ NdrFcLong( 0xffffffff ), /* -1 */
+/* 776 */ NdrFcShort( 0x0 ), /* Corr flags: */
+/* 778 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 780 */ NdrFcShort( 0xff44 ), /* Offset= -188 (592) */
+/* 782 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 784 */
+ 0x1a, /* FC_BOGUS_STRUCT */
+ 0x3, /* 3 */
+/* 786 */ NdrFcShort( 0x10 ), /* 16 */
+/* 788 */ NdrFcShort( 0x0 ), /* 0 */
+/* 790 */ NdrFcShort( 0x6 ), /* Offset= 6 (796) */
+/* 792 */ 0x8, /* FC_LONG */
+ 0x40, /* FC_STRUCTPAD4 */
+/* 794 */ 0x36, /* FC_POINTER */
+ 0x5b, /* FC_END */
+/* 796 */
+ 0x11, 0x0, /* FC_RP */
+/* 798 */ NdrFcShort( 0xffdc ), /* Offset= -36 (762) */
+/* 800 */
+ 0x21, /* FC_BOGUS_ARRAY */
+ 0x3, /* 3 */
+/* 802 */ NdrFcShort( 0x0 ), /* 0 */
+/* 804 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
+ 0x0, /* */
+/* 806 */ NdrFcShort( 0x0 ), /* 0 */
+/* 808 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 810 */ NdrFcLong( 0xffffffff ), /* -1 */
+/* 814 */ NdrFcShort( 0x0 ), /* Corr flags: */
+/* 816 */
+ 0x13, 0x0, /* FC_OP */
+/* 818 */ NdrFcShort( 0x176 ), /* Offset= 374 (1192) */
+/* 820 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 822 */
+ 0x1a, /* FC_BOGUS_STRUCT */
+ 0x3, /* 3 */
+/* 824 */ NdrFcShort( 0x10 ), /* 16 */
+/* 826 */ NdrFcShort( 0x0 ), /* 0 */
+/* 828 */ NdrFcShort( 0x6 ), /* Offset= 6 (834) */
+/* 830 */ 0x8, /* FC_LONG */
+ 0x40, /* FC_STRUCTPAD4 */
+/* 832 */ 0x36, /* FC_POINTER */
+ 0x5b, /* FC_END */
+/* 834 */
+ 0x11, 0x0, /* FC_RP */
+/* 836 */ NdrFcShort( 0xffdc ), /* Offset= -36 (800) */
+/* 838 */
+ 0x2f, /* FC_IP */
+ 0x5a, /* FC_CONSTANT_IID */
+/* 840 */ NdrFcLong( 0x2f ), /* 47 */
+/* 844 */ NdrFcShort( 0x0 ), /* 0 */
+/* 846 */ NdrFcShort( 0x0 ), /* 0 */
+/* 848 */ 0xc0, /* 192 */
+ 0x0, /* 0 */
+/* 850 */ 0x0, /* 0 */
+ 0x0, /* 0 */
+/* 852 */ 0x0, /* 0 */
+ 0x0, /* 0 */
+/* 854 */ 0x0, /* 0 */
+ 0x46, /* 70 */
+/* 856 */
+ 0x1b, /* FC_CARRAY */
+ 0x0, /* 0 */
+/* 858 */ NdrFcShort( 0x1 ), /* 1 */
+/* 860 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
+ 0x0, /* */
+/* 862 */ NdrFcShort( 0x4 ), /* 4 */
+/* 864 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 866 */ 0x1, /* FC_BYTE */
+ 0x5b, /* FC_END */
+/* 868 */
+ 0x1a, /* FC_BOGUS_STRUCT */
+ 0x3, /* 3 */
+/* 870 */ NdrFcShort( 0x18 ), /* 24 */
+/* 872 */ NdrFcShort( 0x0 ), /* 0 */
+/* 874 */ NdrFcShort( 0xa ), /* Offset= 10 (884) */
+/* 876 */ 0x8, /* FC_LONG */
+ 0x8, /* FC_LONG */
+/* 878 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 880 */ NdrFcShort( 0xffd6 ), /* Offset= -42 (838) */
+/* 882 */ 0x36, /* FC_POINTER */
+ 0x5b, /* FC_END */
+/* 884 */
+ 0x13, 0x0, /* FC_OP */
+/* 886 */ NdrFcShort( 0xffe2 ), /* Offset= -30 (856) */
+/* 888 */
+ 0x21, /* FC_BOGUS_ARRAY */
+ 0x3, /* 3 */
+/* 890 */ NdrFcShort( 0x0 ), /* 0 */
+/* 892 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
+ 0x0, /* */
+/* 894 */ NdrFcShort( 0x0 ), /* 0 */
+/* 896 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 898 */ NdrFcLong( 0xffffffff ), /* -1 */
+/* 902 */ NdrFcShort( 0x0 ), /* Corr flags: */
+/* 904 */
+ 0x13, 0x0, /* FC_OP */
+/* 906 */ NdrFcShort( 0xffda ), /* Offset= -38 (868) */
+/* 908 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 910 */
+ 0x1a, /* FC_BOGUS_STRUCT */
+ 0x3, /* 3 */
+/* 912 */ NdrFcShort( 0x10 ), /* 16 */
+/* 914 */ NdrFcShort( 0x0 ), /* 0 */
+/* 916 */ NdrFcShort( 0x6 ), /* Offset= 6 (922) */
+/* 918 */ 0x8, /* FC_LONG */
+ 0x40, /* FC_STRUCTPAD4 */
+/* 920 */ 0x36, /* FC_POINTER */
+ 0x5b, /* FC_END */
+/* 922 */
+ 0x11, 0x0, /* FC_RP */
+/* 924 */ NdrFcShort( 0xffdc ), /* Offset= -36 (888) */
+/* 926 */
+ 0x1d, /* FC_SMFARRAY */
+ 0x0, /* 0 */
+/* 928 */ NdrFcShort( 0x8 ), /* 8 */
+/* 930 */ 0x1, /* FC_BYTE */
+ 0x5b, /* FC_END */
+/* 932 */
+ 0x15, /* FC_STRUCT */
+ 0x3, /* 3 */
+/* 934 */ NdrFcShort( 0x10 ), /* 16 */
+/* 936 */ 0x8, /* FC_LONG */
+ 0x6, /* FC_SHORT */
+/* 938 */ 0x6, /* FC_SHORT */
+ 0x4c, /* FC_EMBEDDED_COMPLEX */
+/* 940 */ 0x0, /* 0 */
+ NdrFcShort( 0xfff1 ), /* Offset= -15 (926) */
+ 0x5b, /* FC_END */
+/* 944 */
+ 0x1a, /* FC_BOGUS_STRUCT */
+ 0x3, /* 3 */
+/* 946 */ NdrFcShort( 0x20 ), /* 32 */
+/* 948 */ NdrFcShort( 0x0 ), /* 0 */
+/* 950 */ NdrFcShort( 0xa ), /* Offset= 10 (960) */
+/* 952 */ 0x8, /* FC_LONG */
+ 0x40, /* FC_STRUCTPAD4 */
+/* 954 */ 0x36, /* FC_POINTER */
+ 0x4c, /* FC_EMBEDDED_COMPLEX */
+/* 956 */ 0x0, /* 0 */
+ NdrFcShort( 0xffe7 ), /* Offset= -25 (932) */
+ 0x5b, /* FC_END */
+/* 960 */
+ 0x11, 0x0, /* FC_RP */
+/* 962 */ NdrFcShort( 0xff12 ), /* Offset= -238 (724) */
+/* 964 */
+ 0x1b, /* FC_CARRAY */
+ 0x0, /* 0 */
+/* 966 */ NdrFcShort( 0x1 ), /* 1 */
+/* 968 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
+ 0x0, /* */
+/* 970 */ NdrFcShort( 0x0 ), /* 0 */
+/* 972 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 974 */ 0x1, /* FC_BYTE */
+ 0x5b, /* FC_END */
+/* 976 */
+ 0x1a, /* FC_BOGUS_STRUCT */
+ 0x3, /* 3 */
+/* 978 */ NdrFcShort( 0x10 ), /* 16 */
+/* 980 */ NdrFcShort( 0x0 ), /* 0 */
+/* 982 */ NdrFcShort( 0x6 ), /* Offset= 6 (988) */
+/* 984 */ 0x8, /* FC_LONG */
+ 0x40, /* FC_STRUCTPAD4 */
+/* 986 */ 0x36, /* FC_POINTER */
+ 0x5b, /* FC_END */
+/* 988 */
+ 0x13, 0x0, /* FC_OP */
+/* 990 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (964) */
+/* 992 */
+ 0x1b, /* FC_CARRAY */
+ 0x1, /* 1 */
+/* 994 */ NdrFcShort( 0x2 ), /* 2 */
+/* 996 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
+ 0x0, /* */
+/* 998 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1000 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 1002 */ 0x6, /* FC_SHORT */
+ 0x5b, /* FC_END */
+/* 1004 */
+ 0x1a, /* FC_BOGUS_STRUCT */
+ 0x3, /* 3 */
+/* 1006 */ NdrFcShort( 0x10 ), /* 16 */
+/* 1008 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1010 */ NdrFcShort( 0x6 ), /* Offset= 6 (1016) */
+/* 1012 */ 0x8, /* FC_LONG */
+ 0x40, /* FC_STRUCTPAD4 */
+/* 1014 */ 0x36, /* FC_POINTER */
+ 0x5b, /* FC_END */
+/* 1016 */
+ 0x13, 0x0, /* FC_OP */
+/* 1018 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (992) */
+/* 1020 */
+ 0x1b, /* FC_CARRAY */
+ 0x3, /* 3 */
+/* 1022 */ NdrFcShort( 0x4 ), /* 4 */
+/* 1024 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
+ 0x0, /* */
+/* 1026 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1028 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 1030 */ 0x8, /* FC_LONG */
+ 0x5b, /* FC_END */
+/* 1032 */
+ 0x1a, /* FC_BOGUS_STRUCT */
+ 0x3, /* 3 */
+/* 1034 */ NdrFcShort( 0x10 ), /* 16 */
+/* 1036 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1038 */ NdrFcShort( 0x6 ), /* Offset= 6 (1044) */
+/* 1040 */ 0x8, /* FC_LONG */
+ 0x40, /* FC_STRUCTPAD4 */
+/* 1042 */ 0x36, /* FC_POINTER */
+ 0x5b, /* FC_END */
+/* 1044 */
+ 0x13, 0x0, /* FC_OP */
+/* 1046 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (1020) */
+/* 1048 */
+ 0x1b, /* FC_CARRAY */
+ 0x7, /* 7 */
+/* 1050 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1052 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
+ 0x0, /* */
+/* 1054 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1056 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 1058 */ 0xb, /* FC_HYPER */
+ 0x5b, /* FC_END */
+/* 1060 */
+ 0x1a, /* FC_BOGUS_STRUCT */
+ 0x3, /* 3 */
+/* 1062 */ NdrFcShort( 0x10 ), /* 16 */
+/* 1064 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1066 */ NdrFcShort( 0x6 ), /* Offset= 6 (1072) */
+/* 1068 */ 0x8, /* FC_LONG */
+ 0x40, /* FC_STRUCTPAD4 */
+/* 1070 */ 0x36, /* FC_POINTER */
+ 0x5b, /* FC_END */
+/* 1072 */
+ 0x13, 0x0, /* FC_OP */
+/* 1074 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (1048) */
+/* 1076 */
+ 0x15, /* FC_STRUCT */
+ 0x3, /* 3 */
+/* 1078 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1080 */ 0x8, /* FC_LONG */
+ 0x8, /* FC_LONG */
+/* 1082 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 1084 */
+ 0x1b, /* FC_CARRAY */
+ 0x3, /* 3 */
+/* 1086 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1088 */ 0x7, /* Corr desc: FC_USHORT */
+ 0x0, /* */
+/* 1090 */ NdrFcShort( 0xffc8 ), /* -56 */
+/* 1092 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 1094 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 1096 */ NdrFcShort( 0xffec ), /* Offset= -20 (1076) */
+/* 1098 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 1100 */
+ 0x1a, /* FC_BOGUS_STRUCT */
+ 0x3, /* 3 */
+/* 1102 */ NdrFcShort( 0x38 ), /* 56 */
+/* 1104 */ NdrFcShort( 0xffec ), /* Offset= -20 (1084) */
+/* 1106 */ NdrFcShort( 0x0 ), /* Offset= 0 (1106) */
+/* 1108 */ 0x6, /* FC_SHORT */
+ 0x6, /* FC_SHORT */
+/* 1110 */ 0x8, /* FC_LONG */
+ 0x8, /* FC_LONG */
+/* 1112 */ 0x40, /* FC_STRUCTPAD4 */
+ 0x4c, /* FC_EMBEDDED_COMPLEX */
+/* 1114 */ 0x0, /* 0 */
+ NdrFcShort( 0xfe0f ), /* Offset= -497 (618) */
+ 0x5b, /* FC_END */
+/* 1118 */
+ 0x13, 0x0, /* FC_OP */
+/* 1120 */ NdrFcShort( 0xff04 ), /* Offset= -252 (868) */
+/* 1122 */
+ 0x13, 0x8, /* FC_OP [simple_pointer] */
+/* 1124 */ 0x1, /* FC_BYTE */
+ 0x5c, /* FC_PAD */
+/* 1126 */
+ 0x13, 0x8, /* FC_OP [simple_pointer] */
+/* 1128 */ 0x6, /* FC_SHORT */
+ 0x5c, /* FC_PAD */
+/* 1130 */
+ 0x13, 0x8, /* FC_OP [simple_pointer] */
+/* 1132 */ 0x8, /* FC_LONG */
+ 0x5c, /* FC_PAD */
+/* 1134 */
+ 0x13, 0x8, /* FC_OP [simple_pointer] */
+/* 1136 */ 0xb, /* FC_HYPER */
+ 0x5c, /* FC_PAD */
+/* 1138 */
+ 0x13, 0x8, /* FC_OP [simple_pointer] */
+/* 1140 */ 0xa, /* FC_FLOAT */
+ 0x5c, /* FC_PAD */
+/* 1142 */
+ 0x13, 0x8, /* FC_OP [simple_pointer] */
+/* 1144 */ 0xc, /* FC_DOUBLE */
+ 0x5c, /* FC_PAD */
+/* 1146 */
+ 0x13, 0x0, /* FC_OP */
+/* 1148 */ NdrFcShort( 0xfdce ), /* Offset= -562 (586) */
+/* 1150 */
+ 0x13, 0x10, /* FC_OP [pointer_deref] */
+/* 1152 */ NdrFcShort( 0xfb86 ), /* Offset= -1146 (6) */
+/* 1154 */
+ 0x13, 0x10, /* FC_OP [pointer_deref] */
+/* 1156 */ NdrFcShort( 0xfbae ), /* Offset= -1106 (50) */
+/* 1158 */
+ 0x13, 0x10, /* FC_OP [pointer_deref] */
+/* 1160 */ NdrFcShort( 0xfdc8 ), /* Offset= -568 (592) */
+/* 1162 */
+ 0x13, 0x10, /* FC_OP [pointer_deref] */
+/* 1164 */ NdrFcShort( 0xfdd6 ), /* Offset= -554 (610) */
+/* 1166 */
+ 0x13, 0x10, /* FC_OP [pointer_deref] */
+/* 1168 */ NdrFcShort( 0x2 ), /* Offset= 2 (1170) */
+/* 1170 */
+ 0x13, 0x0, /* FC_OP */
+/* 1172 */ NdrFcShort( 0x14 ), /* Offset= 20 (1192) */
+/* 1174 */
+ 0x15, /* FC_STRUCT */
+ 0x7, /* 7 */
+/* 1176 */ NdrFcShort( 0x10 ), /* 16 */
+/* 1178 */ 0x6, /* FC_SHORT */
+ 0x1, /* FC_BYTE */
+/* 1180 */ 0x1, /* FC_BYTE */
+ 0x8, /* FC_LONG */
+/* 1182 */ 0xb, /* FC_HYPER */
+ 0x5b, /* FC_END */
+/* 1184 */
+ 0x13, 0x0, /* FC_OP */
+/* 1186 */ NdrFcShort( 0xfff4 ), /* Offset= -12 (1174) */
+/* 1188 */
+ 0x13, 0x8, /* FC_OP [simple_pointer] */
+/* 1190 */ 0x2, /* FC_CHAR */
+ 0x5c, /* FC_PAD */
+/* 1192 */
+ 0x1a, /* FC_BOGUS_STRUCT */
+ 0x7, /* 7 */
+/* 1194 */ NdrFcShort( 0x20 ), /* 32 */
+/* 1196 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1198 */ NdrFcShort( 0x0 ), /* Offset= 0 (1198) */
+/* 1200 */ 0x8, /* FC_LONG */
+ 0x8, /* FC_LONG */
+/* 1202 */ 0x6, /* FC_SHORT */
+ 0x6, /* FC_SHORT */
+/* 1204 */ 0x6, /* FC_SHORT */
+ 0x6, /* FC_SHORT */
+/* 1206 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 1208 */ NdrFcShort( 0xfc68 ), /* Offset= -920 (288) */
+/* 1210 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 1212 */ 0xb4, /* FC_USER_MARSHAL */
+ 0x83, /* 131 */
+/* 1214 */ NdrFcShort( 0x2 ), /* 2 */
+/* 1216 */ NdrFcShort( 0x18 ), /* 24 */
+/* 1218 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1220 */ NdrFcShort( 0xfc58 ), /* Offset= -936 (284) */
+/* 1222 */
+ 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */
+/* 1224 */ NdrFcShort( 0x2 ), /* Offset= 2 (1226) */
+/* 1226 */
+ 0x13, 0x0, /* FC_OP */
+/* 1228 */ NdrFcShort( 0x2 ), /* Offset= 2 (1230) */
+/* 1230 */
+ 0x21, /* FC_BOGUS_ARRAY */
+ 0x3, /* 3 */
+/* 1232 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1234 */ 0x28, /* Corr desc: parameter, FC_LONG */
+ 0x54, /* FC_DEREFERENCE */
+/* 1236 */ NdrFcShort( 0x20 ), /* X64 Stack size/offset = 32 */
+/* 1238 */ NdrFcShort( 0x0 ), /* Corr flags: */
+/* 1240 */ NdrFcLong( 0xffffffff ), /* -1 */
+/* 1244 */ NdrFcShort( 0x0 ), /* Corr flags: */
+/* 1246 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 1248 */ NdrFcShort( 0xfb52 ), /* Offset= -1198 (50) */
+/* 1250 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 1252 */
+ 0x11, 0x0, /* FC_RP */
+/* 1254 */ NdrFcShort( 0x6 ), /* Offset= 6 (1260) */
+/* 1256 */
+ 0x12, 0x0, /* FC_UP */
+/* 1258 */ NdrFcShort( 0xffbe ), /* Offset= -66 (1192) */
+/* 1260 */ 0xb4, /* FC_USER_MARSHAL */
+ 0x83, /* 131 */
+/* 1262 */ NdrFcShort( 0x2 ), /* 2 */
+/* 1264 */ NdrFcShort( 0x18 ), /* 24 */
+/* 1266 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1268 */ NdrFcShort( 0xfff4 ), /* Offset= -12 (1256) */
+/* 1270 */
+ 0x11, 0x4, /* FC_RP [alloced_on_stack] */
+/* 1272 */ NdrFcShort( 0x2 ), /* Offset= 2 (1274) */
+/* 1274 */
+ 0x1a, /* FC_BOGUS_STRUCT */
+ 0x3, /* 3 */
+/* 1276 */ NdrFcShort( 0x10 ), /* 16 */
+/* 1278 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1280 */ NdrFcShort( 0x0 ), /* Offset= 0 (1280) */
+/* 1282 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 1284 */ NdrFcShort( 0xfb1c ), /* Offset= -1252 (32) */
+/* 1286 */ 0x8, /* FC_LONG */
+ 0x8, /* FC_LONG */
+/* 1288 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 1290 */
+ 0x11, 0x0, /* FC_RP */
+/* 1292 */ NdrFcShort( 0xfc02 ), /* Offset= -1022 (270) */
+/* 1294 */
+ 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
+/* 1296 */ 0x3, /* FC_SMALL */
+ 0x5c, /* FC_PAD */
+/* 1298 */
+ 0x11, 0x10, /* FC_RP [pointer_deref] */
+/* 1300 */ NdrFcShort( 0x2 ), /* Offset= 2 (1302) */
+/* 1302 */
+ 0x2f, /* FC_IP */
+ 0x5a, /* FC_CONSTANT_IID */
+/* 1304 */ NdrFcLong( 0x1c20f2b ), /* 29495083 */
+/* 1308 */ NdrFcShort( 0x3dd2 ), /* 15826 */
+/* 1310 */ NdrFcShort( 0x400f ), /* 16399 */
+/* 1312 */ 0x94, /* 148 */
+ 0x9f, /* 159 */
+/* 1314 */ 0xad, /* 173 */
+ 0x0, /* 0 */
+/* 1316 */ 0xbd, /* 189 */
+ 0xab, /* 171 */
+/* 1318 */ 0x1d, /* 29 */
+ 0x41, /* 65 */
+/* 1320 */
+ 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */
+/* 1322 */ NdrFcShort( 0x2 ), /* Offset= 2 (1324) */
+/* 1324 */
+ 0x13, 0x0, /* FC_OP */
+/* 1326 */ NdrFcShort( 0x2 ), /* Offset= 2 (1328) */
+/* 1328 */
+ 0x21, /* FC_BOGUS_ARRAY */
+ 0x3, /* 3 */
+/* 1330 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1332 */ 0x28, /* Corr desc: parameter, FC_LONG */
+ 0x54, /* FC_DEREFERENCE */
+/* 1334 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 1336 */ NdrFcShort( 0x0 ), /* Corr flags: */
+/* 1338 */ NdrFcLong( 0xffffffff ), /* -1 */
+/* 1342 */ NdrFcShort( 0x0 ), /* Corr flags: */
+/* 1344 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 1346 */ NdrFcShort( 0xffd4 ), /* Offset= -44 (1302) */
+/* 1348 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 1350 */
+ 0x11, 0x10, /* FC_RP [pointer_deref] */
+/* 1352 */ NdrFcShort( 0x2 ), /* Offset= 2 (1354) */
+/* 1354 */
+ 0x2f, /* FC_IP */
+ 0x5a, /* FC_CONSTANT_IID */
+/* 1356 */ NdrFcLong( 0x35ad8070 ), /* 900563056 */
+/* 1360 */ NdrFcShort( 0xc20c ), /* -15860 */
+/* 1362 */ NdrFcShort( 0x4fb4 ), /* 20404 */
+/* 1364 */ 0xb0, /* 176 */
+ 0x94, /* 148 */
+/* 1366 */ 0xf4, /* 244 */
+ 0xf7, /* 247 */
+/* 1368 */ 0x27, /* 39 */
+ 0x5d, /* 93 */
+/* 1370 */ 0xd4, /* 212 */
+ 0x69, /* 105 */
+/* 1372 */
+ 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */
+/* 1374 */ NdrFcShort( 0x2 ), /* Offset= 2 (1376) */
+/* 1376 */
+ 0x13, 0x0, /* FC_OP */
+/* 1378 */ NdrFcShort( 0x2 ), /* Offset= 2 (1380) */
+/* 1380 */
+ 0x1c, /* FC_CVARRAY */
+ 0x3, /* 3 */
+/* 1382 */ NdrFcShort( 0x4 ), /* 4 */
+/* 1384 */ 0x28, /* Corr desc: parameter, FC_LONG */
+ 0x0, /* */
+/* 1386 */ NdrFcShort( 0x8 ), /* X64 Stack size/offset = 8 */
+/* 1388 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 1390 */ 0x28, /* Corr desc: parameter, FC_LONG */
+ 0x54, /* FC_DEREFERENCE */
+/* 1392 */ NdrFcShort( 0x18 ), /* X64 Stack size/offset = 24 */
+/* 1394 */ NdrFcShort( 0x0 ), /* Corr flags: */
+/* 1396 */ 0x8, /* FC_LONG */
+ 0x5b, /* FC_END */
+/* 1398 */
+ 0x11, 0x4, /* FC_RP [alloced_on_stack] */
+/* 1400 */ NdrFcShort( 0x2 ), /* Offset= 2 (1402) */
+/* 1402 */
+ 0x1a, /* FC_BOGUS_STRUCT */
+ 0x3, /* 3 */
+/* 1404 */ NdrFcShort( 0x14 ), /* 20 */
+/* 1406 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1408 */ NdrFcShort( 0x0 ), /* Offset= 0 (1408) */
+/* 1410 */ 0xd, /* FC_ENUM16 */
+ 0x8, /* FC_LONG */
+/* 1412 */ 0x8, /* FC_LONG */
+ 0x8, /* FC_LONG */
+/* 1414 */ 0x8, /* FC_LONG */
+ 0x5b, /* FC_END */
+/* 1416 */
+ 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */
+/* 1418 */ NdrFcShort( 0x2 ), /* Offset= 2 (1420) */
+/* 1420 */
+ 0x13, 0x0, /* FC_OP */
+/* 1422 */ NdrFcShort( 0x2 ), /* Offset= 2 (1424) */
+/* 1424 */
+ 0x21, /* FC_BOGUS_ARRAY */
+ 0x3, /* 3 */
+/* 1426 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1428 */ 0x28, /* Corr desc: parameter, FC_LONG */
+ 0x54, /* FC_DEREFERENCE */
+/* 1430 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 1432 */ NdrFcShort( 0x0 ), /* Corr flags: */
+/* 1434 */ NdrFcLong( 0xffffffff ), /* -1 */
+/* 1438 */ NdrFcShort( 0x0 ), /* Corr flags: */
+/* 1440 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 1442 */ NdrFcShort( 0xfa90 ), /* Offset= -1392 (50) */
+/* 1444 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 1446 */
+ 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */
+/* 1448 */ NdrFcShort( 0x2 ), /* Offset= 2 (1450) */
+/* 1450 */
+ 0x13, 0x0, /* FC_OP */
+/* 1452 */ NdrFcShort( 0x2 ), /* Offset= 2 (1454) */
+/* 1454 */
+ 0x1b, /* FC_CARRAY */
+ 0x3, /* 3 */
+/* 1456 */ NdrFcShort( 0x4 ), /* 4 */
+/* 1458 */ 0x28, /* Corr desc: parameter, FC_LONG */
+ 0x54, /* FC_DEREFERENCE */
+/* 1460 */ NdrFcShort( 0x10 ), /* X64 Stack size/offset = 16 */
+/* 1462 */ NdrFcShort( 0x0 ), /* Corr flags: */
+/* 1464 */ 0x8, /* FC_LONG */
+ 0x5b, /* FC_END */
+
+ 0x0
+ }
+ };
+
+static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ] =
+ {
+
+ {
+ BSTR_UserSize
+ ,BSTR_UserMarshal
+ ,BSTR_UserUnmarshal
+ ,BSTR_UserFree
+ },
+ {
+ HWND_UserSize
+ ,HWND_UserMarshal
+ ,HWND_UserUnmarshal
+ ,HWND_UserFree
+ },
+ {
+ VARIANT_UserSize
+ ,VARIANT_UserMarshal
+ ,VARIANT_UserUnmarshal
+ ,VARIANT_UserFree
+ }
+
+ };
+
+
+
+/* Standard interface: __MIDL_itf_ia2_api_all_0000_0000, ver. 0.0,
+ GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */
+
+
+/* Object interface: IUnknown, ver. 0.0,
+ GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
+
+
+/* Object interface: IAccessibleRelation, ver. 0.0,
+ GUID={0x7CDF86EE,0xC3DA,0x496a,{0xBD,0xA4,0x28,0x1B,0x33,0x6E,0x1F,0xDC}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessibleRelation_FormatStringOffsetTable[] =
+ {
+ 0,
+ 38,
+ 76,
+ 114,
+ 158
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessibleRelation_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleRelation_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessibleRelation_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleRelation_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(8) _IAccessibleRelationProxyVtbl =
+{
+ &IAccessibleRelation_ProxyInfo,
+ &IID_IAccessibleRelation,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ (void *) (INT_PTR) -1 /* IAccessibleRelation::get_relationType */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleRelation::get_localizedRelationType */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleRelation::get_nTargets */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleRelation::get_target */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleRelation::get_targets */
+};
+
+const CInterfaceStubVtbl _IAccessibleRelationStubVtbl =
+{
+ &IID_IAccessibleRelation,
+ &IAccessibleRelation_ServerInfo,
+ 8,
+ 0, /* pure interpreted */
+ CStdStubBuffer_METHODS
+};
+
+
+/* Standard interface: __MIDL_itf_ia2_api_all_0000_0001, ver. 0.0,
+ GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */
+
+
+/* Object interface: IAccessibleAction, ver. 0.0,
+ GUID={0xB70D9F59,0x3B5A,0x4dba,{0xAB,0x9E,0x22,0x01,0x2F,0x60,0x7D,0xF5}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessibleAction_FormatStringOffsetTable[] =
+ {
+ 208,
+ 246,
+ 284,
+ 328,
+ 384,
+ 428
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessibleAction_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleAction_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessibleAction_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleAction_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(9) _IAccessibleActionProxyVtbl =
+{
+ &IAccessibleAction_ProxyInfo,
+ &IID_IAccessibleAction,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ (void *) (INT_PTR) -1 /* IAccessibleAction::nActions */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleAction::doAction */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleAction::get_description */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleAction::get_keyBinding */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleAction::get_name */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleAction::get_localizedName */
+};
+
+const CInterfaceStubVtbl _IAccessibleActionStubVtbl =
+{
+ &IID_IAccessibleAction,
+ &IAccessibleAction_ServerInfo,
+ 9,
+ 0, /* pure interpreted */
+ CStdStubBuffer_METHODS
+};
+
+
+/* Standard interface: __MIDL_itf_ia2_api_all_0000_0002, ver. 0.0,
+ GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */
+
+
+/* Object interface: IDispatch, ver. 0.0,
+ GUID={0x00020400,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
+
+
+/* Object interface: IAccessible, ver. 0.0,
+ GUID={0x618736e0,0x3c3d,0x11cf,{0x81,0x0c,0x00,0xaa,0x00,0x38,0x9b,0x71}} */
+
+
+/* Object interface: IAccessible2, ver. 0.0,
+ GUID={0xE89F726E,0xC4F4,0x4c19,{0xBB,0x19,0xB6,0x47,0xD7,0xFA,0x84,0x78}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessible2_FormatStringOffsetTable[] =
+ {
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ 472,
+ 510,
+ 554,
+ 604,
+ 642,
+ 680,
+ 730,
+ 780,
+ 818,
+ 856,
+ 894,
+ 932,
+ 982,
+ 1032,
+ 1070,
+ 1108,
+ 1146,
+ 1184
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessible2_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessible2_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessible2_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessible2_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(46) _IAccessible2ProxyVtbl =
+{
+ &IAccessible2_ProxyInfo,
+ &IID_IAccessible2,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ 0 /* IDispatch::GetTypeInfoCount */ ,
+ 0 /* IDispatch::GetTypeInfo */ ,
+ 0 /* IDispatch::GetIDsOfNames */ ,
+ 0 /* IDispatch_Invoke_Proxy */ ,
+ 0 /* IAccessible::get_accParent */ ,
+ 0 /* IAccessible::get_accChildCount */ ,
+ 0 /* IAccessible::get_accChild */ ,
+ 0 /* IAccessible::get_accName */ ,
+ 0 /* IAccessible::get_accValue */ ,
+ 0 /* IAccessible::get_accDescription */ ,
+ 0 /* IAccessible::get_accRole */ ,
+ 0 /* IAccessible::get_accState */ ,
+ 0 /* IAccessible::get_accHelp */ ,
+ 0 /* IAccessible::get_accHelpTopic */ ,
+ 0 /* IAccessible::get_accKeyboardShortcut */ ,
+ 0 /* IAccessible::get_accFocus */ ,
+ 0 /* IAccessible::get_accSelection */ ,
+ 0 /* IAccessible::get_accDefaultAction */ ,
+ 0 /* IAccessible::accSelect */ ,
+ 0 /* IAccessible::accLocation */ ,
+ 0 /* IAccessible::accNavigate */ ,
+ 0 /* IAccessible::accHitTest */ ,
+ 0 /* IAccessible::accDoDefaultAction */ ,
+ 0 /* IAccessible::put_accName */ ,
+ 0 /* IAccessible::put_accValue */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_nRelations */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_relation */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_relations */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::role */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::scrollTo */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::scrollToPoint */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_groupPosition */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_states */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_extendedRole */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_localizedExtendedRole */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_nExtendedStates */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_extendedStates */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_localizedExtendedStates */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_uniqueID */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_windowHandle */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_indexInParent */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_locale */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_attributes */
+};
+
+
+static const PRPC_STUB_FUNCTION IAccessible2_table[] =
+{
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2
+};
+
+CInterfaceStubVtbl _IAccessible2StubVtbl =
+{
+ &IID_IAccessible2,
+ &IAccessible2_ServerInfo,
+ 46,
+ &IAccessible2_table[-3],
+ CStdStubBuffer_DELEGATING_METHODS
+};
+
+
+/* Object interface: IAccessible2_2, ver. 0.0,
+ GUID={0x6C9430E9,0x299D,0x4E6F,{0xBD,0x01,0xA8,0x2A,0x1E,0x88,0xD3,0xFF}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessible2_2_FormatStringOffsetTable[] =
+ {
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ 472,
+ 510,
+ 554,
+ 604,
+ 642,
+ 680,
+ 730,
+ 780,
+ 818,
+ 856,
+ 894,
+ 932,
+ 982,
+ 1032,
+ 1070,
+ 1108,
+ 1146,
+ 1184,
+ 1222,
+ 1266,
+ 1310
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessible2_2_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessible2_2_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessible2_2_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessible2_2_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(49) _IAccessible2_2ProxyVtbl =
+{
+ &IAccessible2_2_ProxyInfo,
+ &IID_IAccessible2_2,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ 0 /* IDispatch::GetTypeInfoCount */ ,
+ 0 /* IDispatch::GetTypeInfo */ ,
+ 0 /* IDispatch::GetIDsOfNames */ ,
+ 0 /* IDispatch_Invoke_Proxy */ ,
+ 0 /* IAccessible::get_accParent */ ,
+ 0 /* IAccessible::get_accChildCount */ ,
+ 0 /* IAccessible::get_accChild */ ,
+ 0 /* IAccessible::get_accName */ ,
+ 0 /* IAccessible::get_accValue */ ,
+ 0 /* IAccessible::get_accDescription */ ,
+ 0 /* IAccessible::get_accRole */ ,
+ 0 /* IAccessible::get_accState */ ,
+ 0 /* IAccessible::get_accHelp */ ,
+ 0 /* IAccessible::get_accHelpTopic */ ,
+ 0 /* IAccessible::get_accKeyboardShortcut */ ,
+ 0 /* IAccessible::get_accFocus */ ,
+ 0 /* IAccessible::get_accSelection */ ,
+ 0 /* IAccessible::get_accDefaultAction */ ,
+ 0 /* IAccessible::accSelect */ ,
+ 0 /* IAccessible::accLocation */ ,
+ 0 /* IAccessible::accNavigate */ ,
+ 0 /* IAccessible::accHitTest */ ,
+ 0 /* IAccessible::accDoDefaultAction */ ,
+ 0 /* IAccessible::put_accName */ ,
+ 0 /* IAccessible::put_accValue */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_nRelations */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_relation */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_relations */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::role */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::scrollTo */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::scrollToPoint */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_groupPosition */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_states */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_extendedRole */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_localizedExtendedRole */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_nExtendedStates */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_extendedStates */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_localizedExtendedStates */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_uniqueID */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_windowHandle */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_indexInParent */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_locale */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_attributes */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2_2::get_attribute */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2_2::get_accessibleWithCaret */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2_2::get_relationTargetsOfType */
+};
+
+
+static const PRPC_STUB_FUNCTION IAccessible2_2_table[] =
+{
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2
+};
+
+CInterfaceStubVtbl _IAccessible2_2StubVtbl =
+{
+ &IID_IAccessible2_2,
+ &IAccessible2_2_ServerInfo,
+ 49,
+ &IAccessible2_2_table[-3],
+ CStdStubBuffer_DELEGATING_METHODS
+};
+
+
+/* Standard interface: __MIDL_itf_ia2_api_all_0000_0004, ver. 0.0,
+ GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */
+
+
+/* Object interface: IAccessibleComponent, ver. 0.0,
+ GUID={0x1546D4B0,0x4C98,0x4bda,{0x89,0xAE,0x9A,0x64,0x74,0x8B,0xDD,0xE4}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessibleComponent_FormatStringOffsetTable[] =
+ {
+ 1366,
+ 1410,
+ 76
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessibleComponent_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleComponent_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessibleComponent_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleComponent_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(6) _IAccessibleComponentProxyVtbl =
+{
+ &IAccessibleComponent_ProxyInfo,
+ &IID_IAccessibleComponent,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ (void *) (INT_PTR) -1 /* IAccessibleComponent::get_locationInParent */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleComponent::get_foreground */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleComponent::get_background */
+};
+
+const CInterfaceStubVtbl _IAccessibleComponentStubVtbl =
+{
+ &IID_IAccessibleComponent,
+ &IAccessibleComponent_ServerInfo,
+ 6,
+ 0, /* pure interpreted */
+ CStdStubBuffer_METHODS
+};
+
+
+/* Object interface: IAccessibleValue, ver. 0.0,
+ GUID={0x35855B5B,0xC566,0x4fd0,{0xA7,0xB1,0xE6,0x54,0x65,0x60,0x03,0x94}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessibleValue_FormatStringOffsetTable[] =
+ {
+ 1448,
+ 1486,
+ 1524,
+ 1562
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessibleValue_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleValue_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessibleValue_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleValue_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(7) _IAccessibleValueProxyVtbl =
+{
+ &IAccessibleValue_ProxyInfo,
+ &IID_IAccessibleValue,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ (void *) (INT_PTR) -1 /* IAccessibleValue::get_currentValue */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleValue::setCurrentValue */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleValue::get_maximumValue */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleValue::get_minimumValue */
+};
+
+const CInterfaceStubVtbl _IAccessibleValueStubVtbl =
+{
+ &IID_IAccessibleValue,
+ &IAccessibleValue_ServerInfo,
+ 7,
+ 0, /* pure interpreted */
+ CStdStubBuffer_METHODS
+};
+
+
+/* Standard interface: __MIDL_itf_ia2_api_all_0000_0006, ver. 0.0,
+ GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */
+
+
+/* Object interface: IAccessibleText, ver. 0.0,
+ GUID={0x24FD2FFB,0x3AAD,0x4a08,{0x83,0x35,0xA3,0xAD,0x89,0xC0,0xFB,0x4B}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessibleText_FormatStringOffsetTable[] =
+ {
+ 1600,
+ 1644,
+ 76,
+ 1700,
+ 1768,
+ 1806,
+ 1862,
+ 1912,
+ 1962,
+ 2024,
+ 2086,
+ 2148,
+ 2186,
+ 2224,
+ 2274,
+ 2312,
+ 2362,
+ 2424,
+ 2462
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessibleText_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleText_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessibleText_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleText_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(22) _IAccessibleTextProxyVtbl =
+{
+ &IAccessibleText_ProxyInfo,
+ &IID_IAccessibleText,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::addSelection */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_attributes */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_caretOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_characterExtents */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_nSelections */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_offsetAtPoint */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_selection */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_text */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_textBeforeOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_textAfterOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_textAtOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::removeSelection */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::setCaretOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::setSelection */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_nCharacters */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::scrollSubstringTo */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::scrollSubstringToPoint */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_newText */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_oldText */
+};
+
+const CInterfaceStubVtbl _IAccessibleTextStubVtbl =
+{
+ &IID_IAccessibleText,
+ &IAccessibleText_ServerInfo,
+ 22,
+ 0, /* pure interpreted */
+ CStdStubBuffer_METHODS
+};
+
+
+/* Object interface: IAccessibleText2, ver. 0.0,
+ GUID={0x9690A9CC,0x5C80,0x4DF5,{0x85,0x2E,0x2D,0x5A,0xE4,0x18,0x9A,0x54}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessibleText2_FormatStringOffsetTable[] =
+ {
+ 1600,
+ 1644,
+ 76,
+ 1700,
+ 1768,
+ 1806,
+ 1862,
+ 1912,
+ 1962,
+ 2024,
+ 2086,
+ 2148,
+ 2186,
+ 2224,
+ 2274,
+ 2312,
+ 2362,
+ 2424,
+ 2462,
+ 2500
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessibleText2_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleText2_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessibleText2_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleText2_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(23) _IAccessibleText2ProxyVtbl =
+{
+ &IAccessibleText2_ProxyInfo,
+ &IID_IAccessibleText2,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::addSelection */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_attributes */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_caretOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_characterExtents */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_nSelections */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_offsetAtPoint */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_selection */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_text */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_textBeforeOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_textAfterOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_textAtOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::removeSelection */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::setCaretOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::setSelection */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_nCharacters */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::scrollSubstringTo */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::scrollSubstringToPoint */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_newText */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_oldText */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText2::get_attributeRange */
+};
+
+const CInterfaceStubVtbl _IAccessibleText2StubVtbl =
+{
+ &IID_IAccessibleText2,
+ &IAccessibleText2_ServerInfo,
+ 23,
+ 0, /* pure interpreted */
+ CStdStubBuffer_METHODS
+};
+
+
+/* Object interface: IAccessibleEditableText, ver. 0.0,
+ GUID={0xA59AA09A,0x7011,0x4b65,{0x93,0x9D,0x32,0xB1,0xFB,0x55,0x47,0xE3}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessibleEditableText_FormatStringOffsetTable[] =
+ {
+ 1600,
+ 2562,
+ 2606,
+ 2650,
+ 2694,
+ 2732,
+ 2782
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessibleEditableText_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleEditableText_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessibleEditableText_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleEditableText_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(10) _IAccessibleEditableTextProxyVtbl =
+{
+ &IAccessibleEditableText_ProxyInfo,
+ &IID_IAccessibleEditableText,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ (void *) (INT_PTR) -1 /* IAccessibleEditableText::copyText */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleEditableText::deleteText */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleEditableText::insertText */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleEditableText::cutText */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleEditableText::pasteText */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleEditableText::replaceText */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleEditableText::setAttributes */
+};
+
+const CInterfaceStubVtbl _IAccessibleEditableTextStubVtbl =
+{
+ &IID_IAccessibleEditableText,
+ &IAccessibleEditableText_ServerInfo,
+ 10,
+ 0, /* pure interpreted */
+ CStdStubBuffer_METHODS
+};
+
+
+/* Object interface: IAccessibleHyperlink, ver. 0.0,
+ GUID={0x01C20F2B,0x3DD2,0x400f,{0x94,0x9F,0xAD,0x00,0xBD,0xAB,0x1D,0x41}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessibleHyperlink_FormatStringOffsetTable[] =
+ {
+ 208,
+ 246,
+ 284,
+ 328,
+ 384,
+ 428,
+ 2832,
+ 2876,
+ 2920,
+ 2958,
+ 2996
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessibleHyperlink_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleHyperlink_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessibleHyperlink_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleHyperlink_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(14) _IAccessibleHyperlinkProxyVtbl =
+{
+ &IAccessibleHyperlink_ProxyInfo,
+ &IID_IAccessibleHyperlink,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ (void *) (INT_PTR) -1 /* IAccessibleAction::nActions */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleAction::doAction */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleAction::get_description */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleAction::get_keyBinding */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleAction::get_name */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleAction::get_localizedName */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleHyperlink::get_anchor */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleHyperlink::get_anchorTarget */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleHyperlink::get_startIndex */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleHyperlink::get_endIndex */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleHyperlink::get_valid */
+};
+
+const CInterfaceStubVtbl _IAccessibleHyperlinkStubVtbl =
+{
+ &IID_IAccessibleHyperlink,
+ &IAccessibleHyperlink_ServerInfo,
+ 14,
+ 0, /* pure interpreted */
+ CStdStubBuffer_METHODS
+};
+
+
+/* Object interface: IAccessibleHypertext, ver. 0.0,
+ GUID={0x6B4F8BBF,0xF1F2,0x418a,{0xB3,0x5E,0xA1,0x95,0xBC,0x41,0x03,0xB9}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessibleHypertext_FormatStringOffsetTable[] =
+ {
+ 1600,
+ 1644,
+ 76,
+ 1700,
+ 1768,
+ 1806,
+ 1862,
+ 1912,
+ 1962,
+ 2024,
+ 2086,
+ 2148,
+ 2186,
+ 2224,
+ 2274,
+ 2312,
+ 2362,
+ 2424,
+ 2462,
+ 3034,
+ 3072,
+ 3116
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessibleHypertext_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleHypertext_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessibleHypertext_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleHypertext_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(25) _IAccessibleHypertextProxyVtbl =
+{
+ &IAccessibleHypertext_ProxyInfo,
+ &IID_IAccessibleHypertext,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::addSelection */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_attributes */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_caretOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_characterExtents */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_nSelections */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_offsetAtPoint */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_selection */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_text */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_textBeforeOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_textAfterOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_textAtOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::removeSelection */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::setCaretOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::setSelection */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_nCharacters */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::scrollSubstringTo */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::scrollSubstringToPoint */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_newText */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_oldText */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleHypertext::get_nHyperlinks */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleHypertext::get_hyperlink */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleHypertext::get_hyperlinkIndex */
+};
+
+const CInterfaceStubVtbl _IAccessibleHypertextStubVtbl =
+{
+ &IID_IAccessibleHypertext,
+ &IAccessibleHypertext_ServerInfo,
+ 25,
+ 0, /* pure interpreted */
+ CStdStubBuffer_METHODS
+};
+
+
+/* Object interface: IAccessibleHypertext2, ver. 0.0,
+ GUID={0xCF64D89F,0x8287,0x4B44,{0x85,0x01,0xA8,0x27,0x45,0x3A,0x60,0x77}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessibleHypertext2_FormatStringOffsetTable[] =
+ {
+ 1600,
+ 1644,
+ 76,
+ 1700,
+ 1768,
+ 1806,
+ 1862,
+ 1912,
+ 1962,
+ 2024,
+ 2086,
+ 2148,
+ 2186,
+ 2224,
+ 2274,
+ 2312,
+ 2362,
+ 2424,
+ 2462,
+ 3034,
+ 3072,
+ 3116,
+ 3160
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessibleHypertext2_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleHypertext2_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessibleHypertext2_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleHypertext2_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(26) _IAccessibleHypertext2ProxyVtbl =
+{
+ &IAccessibleHypertext2_ProxyInfo,
+ &IID_IAccessibleHypertext2,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::addSelection */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_attributes */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_caretOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_characterExtents */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_nSelections */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_offsetAtPoint */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_selection */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_text */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_textBeforeOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_textAfterOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_textAtOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::removeSelection */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::setCaretOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::setSelection */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_nCharacters */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::scrollSubstringTo */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::scrollSubstringToPoint */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_newText */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_oldText */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleHypertext::get_nHyperlinks */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleHypertext::get_hyperlink */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleHypertext::get_hyperlinkIndex */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleHypertext2::get_hyperlinks */
+};
+
+const CInterfaceStubVtbl _IAccessibleHypertext2StubVtbl =
+{
+ &IID_IAccessibleHypertext2,
+ &IAccessibleHypertext2_ServerInfo,
+ 26,
+ 0, /* pure interpreted */
+ CStdStubBuffer_METHODS
+};
+
+
+/* Object interface: IAccessibleTable, ver. 0.0,
+ GUID={0x35AD8070,0xC20C,0x4fb4,{0xB0,0x94,0xF4,0xF7,0x27,0x5D,0xD4,0x69}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessibleTable_FormatStringOffsetTable[] =
+ {
+ 3204,
+ 3254,
+ 3292,
+ 3342,
+ 3386,
+ 3436,
+ 3480,
+ 3524,
+ 2920,
+ 2958,
+ 3562,
+ 3600,
+ 3638,
+ 3682,
+ 3732,
+ 3776,
+ 3820,
+ 3870,
+ 3920,
+ 3970,
+ 4008,
+ 4052,
+ 4096,
+ 4146,
+ 4184,
+ 4222,
+ 4260,
+ 4298,
+ 4366
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessibleTable_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleTable_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessibleTable_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleTable_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(32) _IAccessibleTableProxyVtbl =
+{
+ &IAccessibleTable_ProxyInfo,
+ &IID_IAccessibleTable,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_accessibleAt */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_caption */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_childIndex */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_columnDescription */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_columnExtentAt */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_columnHeader */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_columnIndex */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_nColumns */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_nRows */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_nSelectedChildren */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_nSelectedColumns */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_nSelectedRows */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_rowDescription */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_rowExtentAt */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_rowHeader */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_rowIndex */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_selectedChildren */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_selectedColumns */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_selectedRows */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_summary */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_isColumnSelected */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_isRowSelected */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_isSelected */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::selectRow */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::selectColumn */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::unselectRow */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::unselectColumn */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_rowColumnExtentsAtIndex */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_modelChange */
+};
+
+const CInterfaceStubVtbl _IAccessibleTableStubVtbl =
+{
+ &IID_IAccessibleTable,
+ &IAccessibleTable_ServerInfo,
+ 32,
+ 0, /* pure interpreted */
+ CStdStubBuffer_METHODS
+};
+
+
+/* Object interface: IAccessibleTable2, ver. 0.0,
+ GUID={0x6167f295,0x06f0,0x4cdd,{0xa1,0xfa,0x02,0xe2,0x51,0x53,0xd8,0x69}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessibleTable2_FormatStringOffsetTable[] =
+ {
+ 3204,
+ 3254,
+ 284,
+ 4404,
+ 1768,
+ 4442,
+ 4480,
+ 3524,
+ 4518,
+ 4562,
+ 4606,
+ 4650,
+ 4694,
+ 4732,
+ 4776,
+ 4820,
+ 4858,
+ 4896,
+ 4934,
+ 4972
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessibleTable2_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleTable2_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessibleTable2_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleTable2_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(23) _IAccessibleTable2ProxyVtbl =
+{
+ &IAccessibleTable2_ProxyInfo,
+ &IID_IAccessibleTable2,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::get_cellAt */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::get_caption */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::get_columnDescription */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::get_nColumns */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::get_nRows */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::get_nSelectedCells */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::get_nSelectedColumns */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::get_nSelectedRows */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::get_rowDescription */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::get_selectedCells */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::get_selectedColumns */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::get_selectedRows */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::get_summary */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::get_isColumnSelected */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::get_isRowSelected */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::selectRow */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::selectColumn */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::unselectRow */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::unselectColumn */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::get_modelChange */
+};
+
+const CInterfaceStubVtbl _IAccessibleTable2StubVtbl =
+{
+ &IID_IAccessibleTable2,
+ &IAccessibleTable2_ServerInfo,
+ 23,
+ 0, /* pure interpreted */
+ CStdStubBuffer_METHODS
+};
+
+
+/* Object interface: IAccessibleTableCell, ver. 0.0,
+ GUID={0x594116B1,0xC99F,0x4847,{0xAD,0x06,0x0A,0x7A,0x86,0xEC,0xE6,0x45}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessibleTableCell_FormatStringOffsetTable[] =
+ {
+ 208,
+ 5010,
+ 76,
+ 4404,
+ 5054,
+ 4442,
+ 5098,
+ 5136,
+ 5198
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessibleTableCell_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleTableCell_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessibleTableCell_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleTableCell_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(12) _IAccessibleTableCellProxyVtbl =
+{
+ &IAccessibleTableCell_ProxyInfo,
+ &IID_IAccessibleTableCell,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_columnExtent */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_columnHeaderCells */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_columnIndex */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_rowExtent */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_rowHeaderCells */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_rowIndex */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_isSelected */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_rowColumnExtents */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_table */
+};
+
+const CInterfaceStubVtbl _IAccessibleTableCellStubVtbl =
+{
+ &IID_IAccessibleTableCell,
+ &IAccessibleTableCell_ServerInfo,
+ 12,
+ 0, /* pure interpreted */
+ CStdStubBuffer_METHODS
+};
+
+
+/* Object interface: IAccessibleImage, ver. 0.0,
+ GUID={0xFE5ABB3D,0x615E,0x4f7b,{0x90,0x9F,0x5F,0x0E,0xDA,0x9E,0x8D,0xDE}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessibleImage_FormatStringOffsetTable[] =
+ {
+ 0,
+ 5236,
+ 5286
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessibleImage_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleImage_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessibleImage_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleImage_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(6) _IAccessibleImageProxyVtbl =
+{
+ &IAccessibleImage_ProxyInfo,
+ &IID_IAccessibleImage,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ (void *) (INT_PTR) -1 /* IAccessibleImage::get_description */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleImage::get_imagePosition */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleImage::get_imageSize */
+};
+
+const CInterfaceStubVtbl _IAccessibleImageStubVtbl =
+{
+ &IID_IAccessibleImage,
+ &IAccessibleImage_ServerInfo,
+ 6,
+ 0, /* pure interpreted */
+ CStdStubBuffer_METHODS
+};
+
+
+/* Standard interface: __MIDL_itf_ia2_api_all_0000_0016, ver. 0.0,
+ GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */
+
+
+/* Object interface: IAccessibleApplication, ver. 0.0,
+ GUID={0xD49DED83,0x5B25,0x43F4,{0x9B,0x95,0x93,0xB4,0x45,0x95,0x97,0x9E}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessibleApplication_FormatStringOffsetTable[] =
+ {
+ 0,
+ 38,
+ 5330,
+ 5368
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessibleApplication_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleApplication_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessibleApplication_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleApplication_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(7) _IAccessibleApplicationProxyVtbl =
+{
+ &IAccessibleApplication_ProxyInfo,
+ &IID_IAccessibleApplication,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ (void *) (INT_PTR) -1 /* IAccessibleApplication::get_appName */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleApplication::get_appVersion */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleApplication::get_toolkitName */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleApplication::get_toolkitVersion */
+};
+
+const CInterfaceStubVtbl _IAccessibleApplicationStubVtbl =
+{
+ &IID_IAccessibleApplication,
+ &IAccessibleApplication_ServerInfo,
+ 7,
+ 0, /* pure interpreted */
+ CStdStubBuffer_METHODS
+};
+
+
+/* Object interface: IAccessibleDocument, ver. 0.0,
+ GUID={0xC48C7FCF,0x4AB5,0x4056,{0xAF,0xA6,0x90,0x2D,0x6E,0x1D,0x11,0x49}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessibleDocument_FormatStringOffsetTable[] =
+ {
+ 5406
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessibleDocument_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleDocument_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessibleDocument_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleDocument_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(4) _IAccessibleDocumentProxyVtbl =
+{
+ &IAccessibleDocument_ProxyInfo,
+ &IID_IAccessibleDocument,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ (void *) (INT_PTR) -1 /* IAccessibleDocument::get_anchorTarget */
+};
+
+const CInterfaceStubVtbl _IAccessibleDocumentStubVtbl =
+{
+ &IID_IAccessibleDocument,
+ &IAccessibleDocument_ServerInfo,
+ 4,
+ 0, /* pure interpreted */
+ CStdStubBuffer_METHODS
+};
+
+
+/* Standard interface: __MIDL_itf_ia2_api_all_0000_0018, ver. 0.0,
+ GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */
+
+static const MIDL_STUB_DESC Object_StubDesc =
+ {
+ 0,
+ NdrOleAllocate,
+ NdrOleFree,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ ia2_api_all__MIDL_TypeFormatString.Format,
+ 1, /* -error bounds_check flag */
+ 0x50002, /* Ndr library version */
+ 0,
+ 0x700022b, /* MIDL Version 7.0.555 */
+ 0,
+ UserMarshalRoutines,
+ 0, /* notify & notify_flag routine table */
+ 0x1, /* MIDL flag */
+ 0, /* cs routines */
+ 0, /* proxy/server info */
+ 0
+ };
+
+const CInterfaceProxyVtbl * const _ia2_api_all_ProxyVtblList[] =
+{
+ ( CInterfaceProxyVtbl *) &_IAccessibleHyperlinkProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessibleImageProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessibleActionProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessibleValueProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessible2ProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessibleTableProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessibleApplicationProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessibleTable2ProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessibleEditableTextProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessibleHypertext2ProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessibleComponentProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessibleTableCellProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessibleHypertextProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessibleText2ProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessibleDocumentProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessible2_2ProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessibleRelationProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessibleTextProxyVtbl,
+ 0
+};
+
+const CInterfaceStubVtbl * const _ia2_api_all_StubVtblList[] =
+{
+ ( CInterfaceStubVtbl *) &_IAccessibleHyperlinkStubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessibleImageStubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessibleActionStubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessibleValueStubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessible2StubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessibleTableStubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessibleApplicationStubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessibleTable2StubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessibleEditableTextStubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessibleHypertext2StubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessibleComponentStubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessibleTableCellStubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessibleHypertextStubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessibleText2StubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessibleDocumentStubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessible2_2StubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessibleRelationStubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessibleTextStubVtbl,
+ 0
+};
+
+PCInterfaceName const _ia2_api_all_InterfaceNamesList[] =
+{
+ "IAccessibleHyperlink",
+ "IAccessibleImage",
+ "IAccessibleAction",
+ "IAccessibleValue",
+ "IAccessible2",
+ "IAccessibleTable",
+ "IAccessibleApplication",
+ "IAccessibleTable2",
+ "IAccessibleEditableText",
+ "IAccessibleHypertext2",
+ "IAccessibleComponent",
+ "IAccessibleTableCell",
+ "IAccessibleHypertext",
+ "IAccessibleText2",
+ "IAccessibleDocument",
+ "IAccessible2_2",
+ "IAccessibleRelation",
+ "IAccessibleText",
+ 0
+};
+
+const IID * const _ia2_api_all_BaseIIDList[] =
+{
+ 0,
+ 0,
+ 0,
+ 0,
+ &IID_IAccessible,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ &IID_IAccessible,
+ 0,
+ 0,
+ 0
+};
+
+
+#define _ia2_api_all_CHECK_IID(n) IID_GENERIC_CHECK_IID( _ia2_api_all, pIID, n)
+
+int __stdcall _ia2_api_all_IID_Lookup( const IID * pIID, int * pIndex )
+{
+ IID_BS_LOOKUP_SETUP
+
+ IID_BS_LOOKUP_INITIAL_TEST( _ia2_api_all, 18, 16 )
+ IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 8 )
+ IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 4 )
+ IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 2 )
+ IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 1 )
+ IID_BS_LOOKUP_RETURN_RESULT( _ia2_api_all, 18, *pIndex )
+
+}
+
+const ExtendedProxyFileInfo ia2_api_all_ProxyFileInfo =
+{
+ (PCInterfaceProxyVtblList *) & _ia2_api_all_ProxyVtblList,
+ (PCInterfaceStubVtblList *) & _ia2_api_all_StubVtblList,
+ (const PCInterfaceName * ) & _ia2_api_all_InterfaceNamesList,
+ (const IID ** ) & _ia2_api_all_BaseIIDList,
+ & _ia2_api_all_IID_Lookup,
+ 18,
+ 2,
+ 0, /* table of [async_uuid] interfaces */
+ 0, /* Filler1 */
+ 0, /* Filler2 */
+ 0 /* Filler3 */
+};
+#if _MSC_VER >= 1200
+#pragma warning(pop)
+#endif
+
+
+#endif /* defined(_M_AMD64)*/
+
diff --git a/src/3rdparty/iaccessible2/generated/x86/Accessible2.h b/src/3rdparty/iaccessible2/generated/x86/Accessible2.h
deleted file mode 100644
index dcf13c0d32..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/Accessible2.h
+++ /dev/null
@@ -1,585 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:51 2012
- */
-/* Compiler settings for Accessible2.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-#ifndef COM_NO_WINDOWS_H
-#include "windows.h"
-#include "ole2.h"
-#endif /*COM_NO_WINDOWS_H*/
-
-#ifndef __Accessible2_h__
-#define __Accessible2_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifndef __IAccessible2_FWD_DEFINED__
-#define __IAccessible2_FWD_DEFINED__
-typedef interface IAccessible2 IAccessible2;
-#endif /* __IAccessible2_FWD_DEFINED__ */
-
-
-/* header files for imported files */
-#include "objidl.h"
-#include "oaidl.h"
-#include "oleacc.h"
-#include "AccessibleRelation.h"
-#include "AccessibleStates.h"
-#include "IA2CommonTypes.h"
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-/* interface __MIDL_itf_Accessible2_0000_0000 */
-/* [local] */
-
-typedef struct IA2Locale
- {
- BSTR language;
- BSTR country;
- BSTR variant;
- } IA2Locale;
-
-
-
-extern RPC_IF_HANDLE __MIDL_itf_Accessible2_0000_0000_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_Accessible2_0000_0000_v0_0_s_ifspec;
-
-#ifndef __IAccessible2_INTERFACE_DEFINED__
-#define __IAccessible2_INTERFACE_DEFINED__
-
-/* interface IAccessible2 */
-/* [uuid][object] */
-
-
-EXTERN_C const IID IID_IAccessible2;
-
-#if defined(__cplusplus) && !defined(CINTERFACE)
-
- MIDL_INTERFACE("E89F726E-C4F4-4c19-BB19-B647D7FA8478")
- IAccessible2 : public IAccessible
- {
- public:
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nRelations(
- /* [retval][out] */ long *nRelations) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_relation(
- /* [in] */ long relationIndex,
- /* [retval][out] */ IAccessibleRelation **relation) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_relations(
- /* [in] */ long maxRelations,
- /* [length_is][size_is][out] */ IAccessibleRelation **relations,
- /* [retval][out] */ long *nRelations) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE role(
- /* [retval][out] */ long *role) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE scrollTo(
- /* [in] */ enum IA2ScrollType scrollType) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE scrollToPoint(
- /* [in] */ enum IA2CoordinateType coordinateType,
- /* [in] */ long x,
- /* [in] */ long y) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_groupPosition(
- /* [out] */ long *groupLevel,
- /* [out] */ long *similarItemsInGroup,
- /* [retval][out] */ long *positionInGroup) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_states(
- /* [retval][out] */ AccessibleStates *states) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_extendedRole(
- /* [retval][out] */ BSTR *extendedRole) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_localizedExtendedRole(
- /* [retval][out] */ BSTR *localizedExtendedRole) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nExtendedStates(
- /* [retval][out] */ long *nExtendedStates) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_extendedStates(
- /* [in] */ long maxExtendedStates,
- /* [length_is][length_is][size_is][size_is][out] */ BSTR **extendedStates,
- /* [retval][out] */ long *nExtendedStates) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_localizedExtendedStates(
- /* [in] */ long maxLocalizedExtendedStates,
- /* [length_is][length_is][size_is][size_is][out] */ BSTR **localizedExtendedStates,
- /* [retval][out] */ long *nLocalizedExtendedStates) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_uniqueID(
- /* [retval][out] */ long *uniqueID) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_windowHandle(
- /* [retval][out] */ HWND *windowHandle) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_indexInParent(
- /* [retval][out] */ long *indexInParent) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_locale(
- /* [retval][out] */ IA2Locale *locale) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_attributes(
- /* [retval][out] */ BSTR *attributes) = 0;
-
- };
-
-#else /* C style interface */
-
- typedef struct IAccessible2Vtbl
- {
- BEGIN_INTERFACE
-
- HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
- IAccessible2 * This,
- /* [in] */ REFIID riid,
- /* [annotation][iid_is][out] */
- __RPC__deref_out void **ppvObject);
-
- ULONG ( STDMETHODCALLTYPE *AddRef )(
- IAccessible2 * This);
-
- ULONG ( STDMETHODCALLTYPE *Release )(
- IAccessible2 * This);
-
- HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
- IAccessible2 * This,
- /* [out] */ UINT *pctinfo);
-
- HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
- IAccessible2 * This,
- /* [in] */ UINT iTInfo,
- /* [in] */ LCID lcid,
- /* [out] */ ITypeInfo **ppTInfo);
-
- HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
- IAccessible2 * This,
- /* [in] */ REFIID riid,
- /* [size_is][in] */ LPOLESTR *rgszNames,
- /* [range][in] */ UINT cNames,
- /* [in] */ LCID lcid,
- /* [size_is][out] */ DISPID *rgDispId);
-
- /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
- IAccessible2 * This,
- /* [in] */ DISPID dispIdMember,
- /* [in] */ REFIID riid,
- /* [in] */ LCID lcid,
- /* [in] */ WORD wFlags,
- /* [out][in] */ DISPPARAMS *pDispParams,
- /* [out] */ VARIANT *pVarResult,
- /* [out] */ EXCEPINFO *pExcepInfo,
- /* [out] */ UINT *puArgErr);
-
- /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accParent )(
- IAccessible2 * This,
- /* [retval][out] */ IDispatch **ppdispParent);
-
- /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accChildCount )(
- IAccessible2 * This,
- /* [retval][out] */ long *pcountChildren);
-
- /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accChild )(
- IAccessible2 * This,
- /* [in] */ VARIANT varChild,
- /* [retval][out] */ IDispatch **ppdispChild);
-
- /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accName )(
- IAccessible2 * This,
- /* [optional][in] */ VARIANT varChild,
- /* [retval][out] */ BSTR *pszName);
-
- /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accValue )(
- IAccessible2 * This,
- /* [optional][in] */ VARIANT varChild,
- /* [retval][out] */ BSTR *pszValue);
-
- /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accDescription )(
- IAccessible2 * This,
- /* [optional][in] */ VARIANT varChild,
- /* [retval][out] */ BSTR *pszDescription);
-
- /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accRole )(
- IAccessible2 * This,
- /* [optional][in] */ VARIANT varChild,
- /* [retval][out] */ VARIANT *pvarRole);
-
- /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accState )(
- IAccessible2 * This,
- /* [optional][in] */ VARIANT varChild,
- /* [retval][out] */ VARIANT *pvarState);
-
- /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accHelp )(
- IAccessible2 * This,
- /* [optional][in] */ VARIANT varChild,
- /* [retval][out] */ BSTR *pszHelp);
-
- /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accHelpTopic )(
- IAccessible2 * This,
- /* [out] */ BSTR *pszHelpFile,
- /* [optional][in] */ VARIANT varChild,
- /* [retval][out] */ long *pidTopic);
-
- /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accKeyboardShortcut )(
- IAccessible2 * This,
- /* [optional][in] */ VARIANT varChild,
- /* [retval][out] */ BSTR *pszKeyboardShortcut);
-
- /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accFocus )(
- IAccessible2 * This,
- /* [retval][out] */ VARIANT *pvarChild);
-
- /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accSelection )(
- IAccessible2 * This,
- /* [retval][out] */ VARIANT *pvarChildren);
-
- /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accDefaultAction )(
- IAccessible2 * This,
- /* [optional][in] */ VARIANT varChild,
- /* [retval][out] */ BSTR *pszDefaultAction);
-
- /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accSelect )(
- IAccessible2 * This,
- /* [in] */ long flagsSelect,
- /* [optional][in] */ VARIANT varChild);
-
- /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accLocation )(
- IAccessible2 * This,
- /* [out] */ long *pxLeft,
- /* [out] */ long *pyTop,
- /* [out] */ long *pcxWidth,
- /* [out] */ long *pcyHeight,
- /* [optional][in] */ VARIANT varChild);
-
- /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accNavigate )(
- IAccessible2 * This,
- /* [in] */ long navDir,
- /* [optional][in] */ VARIANT varStart,
- /* [retval][out] */ VARIANT *pvarEndUpAt);
-
- /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accHitTest )(
- IAccessible2 * This,
- /* [in] */ long xLeft,
- /* [in] */ long yTop,
- /* [retval][out] */ VARIANT *pvarChild);
-
- /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accDoDefaultAction )(
- IAccessible2 * This,
- /* [optional][in] */ VARIANT varChild);
-
- /* [id][propput][hidden] */ HRESULT ( STDMETHODCALLTYPE *put_accName )(
- IAccessible2 * This,
- /* [optional][in] */ VARIANT varChild,
- /* [in] */ BSTR szName);
-
- /* [id][propput][hidden] */ HRESULT ( STDMETHODCALLTYPE *put_accValue )(
- IAccessible2 * This,
- /* [optional][in] */ VARIANT varChild,
- /* [in] */ BSTR szValue);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nRelations )(
- IAccessible2 * This,
- /* [retval][out] */ long *nRelations);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relation )(
- IAccessible2 * This,
- /* [in] */ long relationIndex,
- /* [retval][out] */ IAccessibleRelation **relation);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relations )(
- IAccessible2 * This,
- /* [in] */ long maxRelations,
- /* [length_is][size_is][out] */ IAccessibleRelation **relations,
- /* [retval][out] */ long *nRelations);
-
- HRESULT ( STDMETHODCALLTYPE *role )(
- IAccessible2 * This,
- /* [retval][out] */ long *role);
-
- HRESULT ( STDMETHODCALLTYPE *scrollTo )(
- IAccessible2 * This,
- /* [in] */ enum IA2ScrollType scrollType);
-
- HRESULT ( STDMETHODCALLTYPE *scrollToPoint )(
- IAccessible2 * This,
- /* [in] */ enum IA2CoordinateType coordinateType,
- /* [in] */ long x,
- /* [in] */ long y);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_groupPosition )(
- IAccessible2 * This,
- /* [out] */ long *groupLevel,
- /* [out] */ long *similarItemsInGroup,
- /* [retval][out] */ long *positionInGroup);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_states )(
- IAccessible2 * This,
- /* [retval][out] */ AccessibleStates *states);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_extendedRole )(
- IAccessible2 * This,
- /* [retval][out] */ BSTR *extendedRole);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedExtendedRole )(
- IAccessible2 * This,
- /* [retval][out] */ BSTR *localizedExtendedRole);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nExtendedStates )(
- IAccessible2 * This,
- /* [retval][out] */ long *nExtendedStates);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_extendedStates )(
- IAccessible2 * This,
- /* [in] */ long maxExtendedStates,
- /* [length_is][length_is][size_is][size_is][out] */ BSTR **extendedStates,
- /* [retval][out] */ long *nExtendedStates);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedExtendedStates )(
- IAccessible2 * This,
- /* [in] */ long maxLocalizedExtendedStates,
- /* [length_is][length_is][size_is][size_is][out] */ BSTR **localizedExtendedStates,
- /* [retval][out] */ long *nLocalizedExtendedStates);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_uniqueID )(
- IAccessible2 * This,
- /* [retval][out] */ long *uniqueID);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_windowHandle )(
- IAccessible2 * This,
- /* [retval][out] */ HWND *windowHandle);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_indexInParent )(
- IAccessible2 * This,
- /* [retval][out] */ long *indexInParent);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_locale )(
- IAccessible2 * This,
- /* [retval][out] */ IA2Locale *locale);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attributes )(
- IAccessible2 * This,
- /* [retval][out] */ BSTR *attributes);
-
- END_INTERFACE
- } IAccessible2Vtbl;
-
- interface IAccessible2
- {
- CONST_VTBL struct IAccessible2Vtbl *lpVtbl;
- };
-
-
-
-#ifdef COBJMACROS
-
-
-#define IAccessible2_QueryInterface(This,riid,ppvObject) \
- ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
-
-#define IAccessible2_AddRef(This) \
- ( (This)->lpVtbl -> AddRef(This) )
-
-#define IAccessible2_Release(This) \
- ( (This)->lpVtbl -> Release(This) )
-
-
-#define IAccessible2_GetTypeInfoCount(This,pctinfo) \
- ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
-
-#define IAccessible2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
- ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
-
-#define IAccessible2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
- ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
-
-#define IAccessible2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
- ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
-
-
-#define IAccessible2_get_accParent(This,ppdispParent) \
- ( (This)->lpVtbl -> get_accParent(This,ppdispParent) )
-
-#define IAccessible2_get_accChildCount(This,pcountChildren) \
- ( (This)->lpVtbl -> get_accChildCount(This,pcountChildren) )
-
-#define IAccessible2_get_accChild(This,varChild,ppdispChild) \
- ( (This)->lpVtbl -> get_accChild(This,varChild,ppdispChild) )
-
-#define IAccessible2_get_accName(This,varChild,pszName) \
- ( (This)->lpVtbl -> get_accName(This,varChild,pszName) )
-
-#define IAccessible2_get_accValue(This,varChild,pszValue) \
- ( (This)->lpVtbl -> get_accValue(This,varChild,pszValue) )
-
-#define IAccessible2_get_accDescription(This,varChild,pszDescription) \
- ( (This)->lpVtbl -> get_accDescription(This,varChild,pszDescription) )
-
-#define IAccessible2_get_accRole(This,varChild,pvarRole) \
- ( (This)->lpVtbl -> get_accRole(This,varChild,pvarRole) )
-
-#define IAccessible2_get_accState(This,varChild,pvarState) \
- ( (This)->lpVtbl -> get_accState(This,varChild,pvarState) )
-
-#define IAccessible2_get_accHelp(This,varChild,pszHelp) \
- ( (This)->lpVtbl -> get_accHelp(This,varChild,pszHelp) )
-
-#define IAccessible2_get_accHelpTopic(This,pszHelpFile,varChild,pidTopic) \
- ( (This)->lpVtbl -> get_accHelpTopic(This,pszHelpFile,varChild,pidTopic) )
-
-#define IAccessible2_get_accKeyboardShortcut(This,varChild,pszKeyboardShortcut) \
- ( (This)->lpVtbl -> get_accKeyboardShortcut(This,varChild,pszKeyboardShortcut) )
-
-#define IAccessible2_get_accFocus(This,pvarChild) \
- ( (This)->lpVtbl -> get_accFocus(This,pvarChild) )
-
-#define IAccessible2_get_accSelection(This,pvarChildren) \
- ( (This)->lpVtbl -> get_accSelection(This,pvarChildren) )
-
-#define IAccessible2_get_accDefaultAction(This,varChild,pszDefaultAction) \
- ( (This)->lpVtbl -> get_accDefaultAction(This,varChild,pszDefaultAction) )
-
-#define IAccessible2_accSelect(This,flagsSelect,varChild) \
- ( (This)->lpVtbl -> accSelect(This,flagsSelect,varChild) )
-
-#define IAccessible2_accLocation(This,pxLeft,pyTop,pcxWidth,pcyHeight,varChild) \
- ( (This)->lpVtbl -> accLocation(This,pxLeft,pyTop,pcxWidth,pcyHeight,varChild) )
-
-#define IAccessible2_accNavigate(This,navDir,varStart,pvarEndUpAt) \
- ( (This)->lpVtbl -> accNavigate(This,navDir,varStart,pvarEndUpAt) )
-
-#define IAccessible2_accHitTest(This,xLeft,yTop,pvarChild) \
- ( (This)->lpVtbl -> accHitTest(This,xLeft,yTop,pvarChild) )
-
-#define IAccessible2_accDoDefaultAction(This,varChild) \
- ( (This)->lpVtbl -> accDoDefaultAction(This,varChild) )
-
-#define IAccessible2_put_accName(This,varChild,szName) \
- ( (This)->lpVtbl -> put_accName(This,varChild,szName) )
-
-#define IAccessible2_put_accValue(This,varChild,szValue) \
- ( (This)->lpVtbl -> put_accValue(This,varChild,szValue) )
-
-
-#define IAccessible2_get_nRelations(This,nRelations) \
- ( (This)->lpVtbl -> get_nRelations(This,nRelations) )
-
-#define IAccessible2_get_relation(This,relationIndex,relation) \
- ( (This)->lpVtbl -> get_relation(This,relationIndex,relation) )
-
-#define IAccessible2_get_relations(This,maxRelations,relations,nRelations) \
- ( (This)->lpVtbl -> get_relations(This,maxRelations,relations,nRelations) )
-
-#define IAccessible2_role(This,role) \
- ( (This)->lpVtbl -> role(This,role) )
-
-#define IAccessible2_scrollTo(This,scrollType) \
- ( (This)->lpVtbl -> scrollTo(This,scrollType) )
-
-#define IAccessible2_scrollToPoint(This,coordinateType,x,y) \
- ( (This)->lpVtbl -> scrollToPoint(This,coordinateType,x,y) )
-
-#define IAccessible2_get_groupPosition(This,groupLevel,similarItemsInGroup,positionInGroup) \
- ( (This)->lpVtbl -> get_groupPosition(This,groupLevel,similarItemsInGroup,positionInGroup) )
-
-#define IAccessible2_get_states(This,states) \
- ( (This)->lpVtbl -> get_states(This,states) )
-
-#define IAccessible2_get_extendedRole(This,extendedRole) \
- ( (This)->lpVtbl -> get_extendedRole(This,extendedRole) )
-
-#define IAccessible2_get_localizedExtendedRole(This,localizedExtendedRole) \
- ( (This)->lpVtbl -> get_localizedExtendedRole(This,localizedExtendedRole) )
-
-#define IAccessible2_get_nExtendedStates(This,nExtendedStates) \
- ( (This)->lpVtbl -> get_nExtendedStates(This,nExtendedStates) )
-
-#define IAccessible2_get_extendedStates(This,maxExtendedStates,extendedStates,nExtendedStates) \
- ( (This)->lpVtbl -> get_extendedStates(This,maxExtendedStates,extendedStates,nExtendedStates) )
-
-#define IAccessible2_get_localizedExtendedStates(This,maxLocalizedExtendedStates,localizedExtendedStates,nLocalizedExtendedStates) \
- ( (This)->lpVtbl -> get_localizedExtendedStates(This,maxLocalizedExtendedStates,localizedExtendedStates,nLocalizedExtendedStates) )
-
-#define IAccessible2_get_uniqueID(This,uniqueID) \
- ( (This)->lpVtbl -> get_uniqueID(This,uniqueID) )
-
-#define IAccessible2_get_windowHandle(This,windowHandle) \
- ( (This)->lpVtbl -> get_windowHandle(This,windowHandle) )
-
-#define IAccessible2_get_indexInParent(This,indexInParent) \
- ( (This)->lpVtbl -> get_indexInParent(This,indexInParent) )
-
-#define IAccessible2_get_locale(This,locale) \
- ( (This)->lpVtbl -> get_locale(This,locale) )
-
-#define IAccessible2_get_attributes(This,attributes) \
- ( (This)->lpVtbl -> get_attributes(This,attributes) )
-
-#endif /* COBJMACROS */
-
-
-#endif /* C style interface */
-
-
-
-
-#endif /* __IAccessible2_INTERFACE_DEFINED__ */
-
-
-/* Additional Prototypes for ALL interfaces */
-
-unsigned long __RPC_USER BSTR_UserSize( unsigned long *, unsigned long , BSTR * );
-unsigned char * __RPC_USER BSTR_UserMarshal( unsigned long *, unsigned char *, BSTR * );
-unsigned char * __RPC_USER BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * );
-void __RPC_USER BSTR_UserFree( unsigned long *, BSTR * );
-
-unsigned long __RPC_USER HWND_UserSize( unsigned long *, unsigned long , HWND * );
-unsigned char * __RPC_USER HWND_UserMarshal( unsigned long *, unsigned char *, HWND * );
-unsigned char * __RPC_USER HWND_UserUnmarshal(unsigned long *, unsigned char *, HWND * );
-void __RPC_USER HWND_UserFree( unsigned long *, HWND * );
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/Accessible2_i.c b/src/3rdparty/iaccessible2/generated/x86/Accessible2_i.c
deleted file mode 100644
index df0f94063e..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/Accessible2_i.c
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
-
-/* link this file in with the server and any clients */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:51 2012
- */
-/* Compiler settings for Accessible2.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#include <rpc.h>
-#include <rpcndr.h>
-
-#ifdef _MIDL_USE_GUIDDEF_
-
-#ifndef INITGUID
-#define INITGUID
-#include <guiddef.h>
-#undef INITGUID
-#else
-#include <guiddef.h>
-#endif
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
-
-#else // !_MIDL_USE_GUIDDEF_
-
-#ifndef __IID_DEFINED__
-#define __IID_DEFINED__
-
-typedef struct _IID
-{
- unsigned long x;
- unsigned short s1;
- unsigned short s2;
- unsigned char c[8];
-} IID;
-
-#endif // __IID_DEFINED__
-
-#ifndef CLSID_DEFINED
-#define CLSID_DEFINED
-typedef IID CLSID;
-#endif // CLSID_DEFINED
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
-
-#endif !_MIDL_USE_GUIDDEF_
-
-MIDL_DEFINE_GUID(IID, IID_IAccessible2,0xE89F726E,0xC4F4,0x4c19,0xBB,0x19,0xB6,0x47,0xD7,0xFA,0x84,0x78);
-
-#undef MIDL_DEFINE_GUID
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/Accessible2_p.c b/src/3rdparty/iaccessible2/generated/x86/Accessible2_p.c
deleted file mode 100644
index abb5883868..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/Accessible2_p.c
+++ /dev/null
@@ -1,1190 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the proxy stub code */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:51 2012
- */
-/* Compiler settings for Accessible2.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#if !defined(_M_IA64) && !defined(_M_AMD64)
-
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-#if _MSC_VER >= 1200
-#pragma warning(push)
-#endif
-
-#pragma warning( disable: 4211 ) /* redefine extern to static */
-#pragma warning( disable: 4232 ) /* dllimport identity*/
-#pragma warning( disable: 4024 ) /* array to pointer mapping*/
-#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */
-#pragma warning( disable: 4100 ) /* unreferenced arguments in x86 call */
-
-#pragma optimize("", off )
-
-#define USE_STUBLESS_PROXY
-
-
-/* verify that the <rpcproxy.h> version is high enough to compile this file*/
-#ifndef __REDQ_RPCPROXY_H_VERSION__
-#define __REQUIRED_RPCPROXY_H_VERSION__ 475
-#endif
-
-
-#include "rpcproxy.h"
-#ifndef __RPCPROXY_H_VERSION__
-#error this stub requires an updated version of <rpcproxy.h>
-#endif /* __RPCPROXY_H_VERSION__ */
-
-
-#include "Accessible2.h"
-
-#define TYPE_FORMAT_STRING_SIZE 189
-#define PROC_FORMAT_STRING_SIZE 715
-#define EXPR_FORMAT_STRING_SIZE 1
-#define TRANSMIT_AS_TABLE_SIZE 0
-#define WIRE_MARSHAL_TABLE_SIZE 2
-
-typedef struct _Accessible2_MIDL_TYPE_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
- } Accessible2_MIDL_TYPE_FORMAT_STRING;
-
-typedef struct _Accessible2_MIDL_PROC_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
- } Accessible2_MIDL_PROC_FORMAT_STRING;
-
-typedef struct _Accessible2_MIDL_EXPR_FORMAT_STRING
- {
- long Pad;
- unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
- } Accessible2_MIDL_EXPR_FORMAT_STRING;
-
-
-static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
-{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
-
-
-extern const Accessible2_MIDL_TYPE_FORMAT_STRING Accessible2__MIDL_TypeFormatString;
-extern const Accessible2_MIDL_PROC_FORMAT_STRING Accessible2__MIDL_ProcFormatString;
-extern const Accessible2_MIDL_EXPR_FORMAT_STRING Accessible2__MIDL_ExprFormatString;
-
-
-extern const MIDL_STUB_DESC Object_StubDesc;
-
-
-extern const MIDL_SERVER_INFO IAccessible2_ServerInfo;
-extern const MIDL_STUBLESS_PROXY_INFO IAccessible2_ProxyInfo;
-
-
-extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ];
-
-#if !defined(__RPC_WIN32__)
-#error Invalid build platform for this stub.
-#endif
-
-#if !(TARGET_IS_NT50_OR_LATER)
-#error You need Windows 2000 or later to run this stub because it uses these features:
-#error /robust command line switch.
-#error However, your C/C++ compilation flags indicate you intend to run this app on earlier systems.
-#error This app will fail with the RPC_X_WRONG_STUB_VERSION error.
-#endif
-
-
-static const Accessible2_MIDL_PROC_FORMAT_STRING Accessible2__MIDL_ProcFormatString =
- {
- 0,
- {
-
- /* Procedure get_nRelations */
-
- 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 2 */ NdrFcLong( 0x0 ), /* 0 */
-/* 6 */ NdrFcShort( 0x1c ), /* 28 */
-/* 8 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 10 */ NdrFcShort( 0x0 ), /* 0 */
-/* 12 */ NdrFcShort( 0x24 ), /* 36 */
-/* 14 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 16 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 18 */ NdrFcShort( 0x0 ), /* 0 */
-/* 20 */ NdrFcShort( 0x0 ), /* 0 */
-/* 22 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter nRelations */
-
-/* 24 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 26 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 28 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 30 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 32 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 34 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_relation */
-
-/* 36 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 38 */ NdrFcLong( 0x0 ), /* 0 */
-/* 42 */ NdrFcShort( 0x1d ), /* 29 */
-/* 44 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 46 */ NdrFcShort( 0x8 ), /* 8 */
-/* 48 */ NdrFcShort( 0x8 ), /* 8 */
-/* 50 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 52 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 54 */ NdrFcShort( 0x0 ), /* 0 */
-/* 56 */ NdrFcShort( 0x0 ), /* 0 */
-/* 58 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter relationIndex */
-
-/* 60 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 62 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 64 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter relation */
-
-/* 66 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
-/* 68 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 70 */ NdrFcShort( 0x6 ), /* Type Offset=6 */
-
- /* Return value */
-
-/* 72 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 74 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 76 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_relations */
-
-/* 78 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 80 */ NdrFcLong( 0x0 ), /* 0 */
-/* 84 */ NdrFcShort( 0x1e ), /* 30 */
-/* 86 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
-/* 88 */ NdrFcShort( 0x8 ), /* 8 */
-/* 90 */ NdrFcShort( 0x24 ), /* 36 */
-/* 92 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x4, /* 4 */
-/* 94 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 96 */ NdrFcShort( 0x1 ), /* 1 */
-/* 98 */ NdrFcShort( 0x0 ), /* 0 */
-/* 100 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter maxRelations */
-
-/* 102 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 104 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 106 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter relations */
-
-/* 108 */ NdrFcShort( 0x113 ), /* Flags: must size, must free, out, simple ref, */
-/* 110 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 112 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
-
- /* Parameter nRelations */
-
-/* 114 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 116 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 118 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 120 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 122 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 124 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure role */
-
-/* 126 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 128 */ NdrFcLong( 0x0 ), /* 0 */
-/* 132 */ NdrFcShort( 0x1f ), /* 31 */
-/* 134 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 136 */ NdrFcShort( 0x0 ), /* 0 */
-/* 138 */ NdrFcShort( 0x24 ), /* 36 */
-/* 140 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 142 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 144 */ NdrFcShort( 0x0 ), /* 0 */
-/* 146 */ NdrFcShort( 0x0 ), /* 0 */
-/* 148 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter role */
-
-/* 150 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 152 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 154 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 156 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 158 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 160 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure scrollTo */
-
-/* 162 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 164 */ NdrFcLong( 0x0 ), /* 0 */
-/* 168 */ NdrFcShort( 0x20 ), /* 32 */
-/* 170 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 172 */ NdrFcShort( 0x6 ), /* 6 */
-/* 174 */ NdrFcShort( 0x8 ), /* 8 */
-/* 176 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 178 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 180 */ NdrFcShort( 0x0 ), /* 0 */
-/* 182 */ NdrFcShort( 0x0 ), /* 0 */
-/* 184 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter scrollType */
-
-/* 186 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 188 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 190 */ 0xd, /* FC_ENUM16 */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 192 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 194 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 196 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure scrollToPoint */
-
-/* 198 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 200 */ NdrFcLong( 0x0 ), /* 0 */
-/* 204 */ NdrFcShort( 0x21 ), /* 33 */
-/* 206 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
-/* 208 */ NdrFcShort( 0x16 ), /* 22 */
-/* 210 */ NdrFcShort( 0x8 ), /* 8 */
-/* 212 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x4, /* 4 */
-/* 214 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 216 */ NdrFcShort( 0x0 ), /* 0 */
-/* 218 */ NdrFcShort( 0x0 ), /* 0 */
-/* 220 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter coordinateType */
-
-/* 222 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 224 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 226 */ 0xd, /* FC_ENUM16 */
- 0x0, /* 0 */
-
- /* Parameter x */
-
-/* 228 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 230 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 232 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter y */
-
-/* 234 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 236 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 238 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 240 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 242 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 244 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_groupPosition */
-
-/* 246 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 248 */ NdrFcLong( 0x0 ), /* 0 */
-/* 252 */ NdrFcShort( 0x22 ), /* 34 */
-/* 254 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
-/* 256 */ NdrFcShort( 0x0 ), /* 0 */
-/* 258 */ NdrFcShort( 0x5c ), /* 92 */
-/* 260 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x4, /* 4 */
-/* 262 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 264 */ NdrFcShort( 0x0 ), /* 0 */
-/* 266 */ NdrFcShort( 0x0 ), /* 0 */
-/* 268 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter groupLevel */
-
-/* 270 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 272 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 274 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter similarItemsInGroup */
-
-/* 276 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 278 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 280 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter positionInGroup */
-
-/* 282 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 284 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 286 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 288 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 290 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 292 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_states */
-
-/* 294 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 296 */ NdrFcLong( 0x0 ), /* 0 */
-/* 300 */ NdrFcShort( 0x23 ), /* 35 */
-/* 302 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 304 */ NdrFcShort( 0x0 ), /* 0 */
-/* 306 */ NdrFcShort( 0x24 ), /* 36 */
-/* 308 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 310 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 312 */ NdrFcShort( 0x0 ), /* 0 */
-/* 314 */ NdrFcShort( 0x0 ), /* 0 */
-/* 316 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter states */
-
-/* 318 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 320 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 322 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 324 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 326 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 328 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_extendedRole */
-
-/* 330 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 332 */ NdrFcLong( 0x0 ), /* 0 */
-/* 336 */ NdrFcShort( 0x24 ), /* 36 */
-/* 338 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 340 */ NdrFcShort( 0x0 ), /* 0 */
-/* 342 */ NdrFcShort( 0x8 ), /* 8 */
-/* 344 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 346 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 348 */ NdrFcShort( 0x1 ), /* 1 */
-/* 350 */ NdrFcShort( 0x0 ), /* 0 */
-/* 352 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter extendedRole */
-
-/* 354 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 356 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 358 */ NdrFcShort( 0x54 ), /* Type Offset=84 */
-
- /* Return value */
-
-/* 360 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 362 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 364 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_localizedExtendedRole */
-
-/* 366 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 368 */ NdrFcLong( 0x0 ), /* 0 */
-/* 372 */ NdrFcShort( 0x25 ), /* 37 */
-/* 374 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 376 */ NdrFcShort( 0x0 ), /* 0 */
-/* 378 */ NdrFcShort( 0x8 ), /* 8 */
-/* 380 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 382 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 384 */ NdrFcShort( 0x1 ), /* 1 */
-/* 386 */ NdrFcShort( 0x0 ), /* 0 */
-/* 388 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter localizedExtendedRole */
-
-/* 390 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 392 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 394 */ NdrFcShort( 0x54 ), /* Type Offset=84 */
-
- /* Return value */
-
-/* 396 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 398 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 400 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_nExtendedStates */
-
-/* 402 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 404 */ NdrFcLong( 0x0 ), /* 0 */
-/* 408 */ NdrFcShort( 0x26 ), /* 38 */
-/* 410 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 412 */ NdrFcShort( 0x0 ), /* 0 */
-/* 414 */ NdrFcShort( 0x24 ), /* 36 */
-/* 416 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 418 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 420 */ NdrFcShort( 0x0 ), /* 0 */
-/* 422 */ NdrFcShort( 0x0 ), /* 0 */
-/* 424 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter nExtendedStates */
-
-/* 426 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 428 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 430 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 432 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 434 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 436 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_extendedStates */
-
-/* 438 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 440 */ NdrFcLong( 0x0 ), /* 0 */
-/* 444 */ NdrFcShort( 0x27 ), /* 39 */
-/* 446 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
-/* 448 */ NdrFcShort( 0x8 ), /* 8 */
-/* 450 */ NdrFcShort( 0x24 ), /* 36 */
-/* 452 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x4, /* 4 */
-/* 454 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 456 */ NdrFcShort( 0x1 ), /* 1 */
-/* 458 */ NdrFcShort( 0x0 ), /* 0 */
-/* 460 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter maxExtendedStates */
-
-/* 462 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 464 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 466 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter extendedStates */
-
-/* 468 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
-/* 470 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 472 */ NdrFcShort( 0x5e ), /* Type Offset=94 */
-
- /* Parameter nExtendedStates */
-
-/* 474 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 476 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 478 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 480 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 482 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 484 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_localizedExtendedStates */
-
-/* 486 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 488 */ NdrFcLong( 0x0 ), /* 0 */
-/* 492 */ NdrFcShort( 0x28 ), /* 40 */
-/* 494 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
-/* 496 */ NdrFcShort( 0x8 ), /* 8 */
-/* 498 */ NdrFcShort( 0x24 ), /* 36 */
-/* 500 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x4, /* 4 */
-/* 502 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 504 */ NdrFcShort( 0x1 ), /* 1 */
-/* 506 */ NdrFcShort( 0x0 ), /* 0 */
-/* 508 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter maxLocalizedExtendedStates */
-
-/* 510 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 512 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 514 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter localizedExtendedStates */
-
-/* 516 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
-/* 518 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 520 */ NdrFcShort( 0x5e ), /* Type Offset=94 */
-
- /* Parameter nLocalizedExtendedStates */
-
-/* 522 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 524 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 526 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 528 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 530 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 532 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_uniqueID */
-
-/* 534 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 536 */ NdrFcLong( 0x0 ), /* 0 */
-/* 540 */ NdrFcShort( 0x29 ), /* 41 */
-/* 542 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 544 */ NdrFcShort( 0x0 ), /* 0 */
-/* 546 */ NdrFcShort( 0x24 ), /* 36 */
-/* 548 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 550 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 552 */ NdrFcShort( 0x0 ), /* 0 */
-/* 554 */ NdrFcShort( 0x0 ), /* 0 */
-/* 556 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter uniqueID */
-
-/* 558 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 560 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 562 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 564 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 566 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 568 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_windowHandle */
-
-/* 570 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 572 */ NdrFcLong( 0x0 ), /* 0 */
-/* 576 */ NdrFcShort( 0x2a ), /* 42 */
-/* 578 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 580 */ NdrFcShort( 0x0 ), /* 0 */
-/* 582 */ NdrFcShort( 0x8 ), /* 8 */
-/* 584 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 586 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 588 */ NdrFcShort( 0x1 ), /* 1 */
-/* 590 */ NdrFcShort( 0x0 ), /* 0 */
-/* 592 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter windowHandle */
-
-/* 594 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 596 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 598 */ NdrFcShort( 0x98 ), /* Type Offset=152 */
-
- /* Return value */
-
-/* 600 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 602 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 604 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_indexInParent */
-
-/* 606 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 608 */ NdrFcLong( 0x0 ), /* 0 */
-/* 612 */ NdrFcShort( 0x2b ), /* 43 */
-/* 614 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 616 */ NdrFcShort( 0x0 ), /* 0 */
-/* 618 */ NdrFcShort( 0x24 ), /* 36 */
-/* 620 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 622 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 624 */ NdrFcShort( 0x0 ), /* 0 */
-/* 626 */ NdrFcShort( 0x0 ), /* 0 */
-/* 628 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter indexInParent */
-
-/* 630 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 632 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 634 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 636 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 638 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 640 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_locale */
-
-/* 642 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 644 */ NdrFcLong( 0x0 ), /* 0 */
-/* 648 */ NdrFcShort( 0x2c ), /* 44 */
-/* 650 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 652 */ NdrFcShort( 0x0 ), /* 0 */
-/* 654 */ NdrFcShort( 0x8 ), /* 8 */
-/* 656 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 658 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 660 */ NdrFcShort( 0x1 ), /* 1 */
-/* 662 */ NdrFcShort( 0x0 ), /* 0 */
-/* 664 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter locale */
-
-/* 666 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */
-/* 668 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 670 */ NdrFcShort( 0xa6 ), /* Type Offset=166 */
-
- /* Return value */
-
-/* 672 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 674 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 676 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_attributes */
-
-/* 678 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 680 */ NdrFcLong( 0x0 ), /* 0 */
-/* 684 */ NdrFcShort( 0x2d ), /* 45 */
-/* 686 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 688 */ NdrFcShort( 0x0 ), /* 0 */
-/* 690 */ NdrFcShort( 0x8 ), /* 8 */
-/* 692 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 694 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 696 */ NdrFcShort( 0x1 ), /* 1 */
-/* 698 */ NdrFcShort( 0x0 ), /* 0 */
-/* 700 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter attributes */
-
-/* 702 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 704 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 706 */ NdrFcShort( 0x54 ), /* Type Offset=84 */
-
- /* Return value */
-
-/* 708 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 710 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 712 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- 0x0
- }
- };
-
-static const Accessible2_MIDL_TYPE_FORMAT_STRING Accessible2__MIDL_TypeFormatString =
- {
- 0,
- {
- NdrFcShort( 0x0 ), /* 0 */
-/* 2 */
- 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
-/* 4 */ 0x8, /* FC_LONG */
- 0x5c, /* FC_PAD */
-/* 6 */
- 0x11, 0x10, /* FC_RP [pointer_deref] */
-/* 8 */ NdrFcShort( 0x2 ), /* Offset= 2 (10) */
-/* 10 */
- 0x2f, /* FC_IP */
- 0x5a, /* FC_CONSTANT_IID */
-/* 12 */ NdrFcLong( 0x7cdf86ee ), /* 2095023854 */
-/* 16 */ NdrFcShort( 0xc3da ), /* -15398 */
-/* 18 */ NdrFcShort( 0x496a ), /* 18794 */
-/* 20 */ 0xbd, /* 189 */
- 0xa4, /* 164 */
-/* 22 */ 0x28, /* 40 */
- 0x1b, /* 27 */
-/* 24 */ 0x33, /* 51 */
- 0x6e, /* 110 */
-/* 26 */ 0x1f, /* 31 */
- 0xdc, /* 220 */
-/* 28 */
- 0x11, 0x0, /* FC_RP */
-/* 30 */ NdrFcShort( 0x2 ), /* Offset= 2 (32) */
-/* 32 */
- 0x21, /* FC_BOGUS_ARRAY */
- 0x3, /* 3 */
-/* 34 */ NdrFcShort( 0x0 ), /* 0 */
-/* 36 */ 0x28, /* Corr desc: parameter, FC_LONG */
- 0x0, /* */
-/* 38 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 40 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 42 */ 0x28, /* Corr desc: parameter, FC_LONG */
- 0x54, /* FC_DEREFERENCE */
-/* 44 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 46 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 48 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 50 */ NdrFcShort( 0xffd8 ), /* Offset= -40 (10) */
-/* 52 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 54 */
- 0x11, 0x4, /* FC_RP [alloced_on_stack] */
-/* 56 */ NdrFcShort( 0x1c ), /* Offset= 28 (84) */
-/* 58 */
- 0x13, 0x0, /* FC_OP */
-/* 60 */ NdrFcShort( 0xe ), /* Offset= 14 (74) */
-/* 62 */
- 0x1b, /* FC_CARRAY */
- 0x1, /* 1 */
-/* 64 */ NdrFcShort( 0x2 ), /* 2 */
-/* 66 */ 0x9, /* Corr desc: FC_ULONG */
- 0x0, /* */
-/* 68 */ NdrFcShort( 0xfffc ), /* -4 */
-/* 70 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 72 */ 0x6, /* FC_SHORT */
- 0x5b, /* FC_END */
-/* 74 */
- 0x17, /* FC_CSTRUCT */
- 0x3, /* 3 */
-/* 76 */ NdrFcShort( 0x8 ), /* 8 */
-/* 78 */ NdrFcShort( 0xfff0 ), /* Offset= -16 (62) */
-/* 80 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 82 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 84 */ 0xb4, /* FC_USER_MARSHAL */
- 0x83, /* 131 */
-/* 86 */ NdrFcShort( 0x0 ), /* 0 */
-/* 88 */ NdrFcShort( 0x4 ), /* 4 */
-/* 90 */ NdrFcShort( 0x0 ), /* 0 */
-/* 92 */ NdrFcShort( 0xffde ), /* Offset= -34 (58) */
-/* 94 */
- 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */
-/* 96 */ NdrFcShort( 0x2 ), /* Offset= 2 (98) */
-/* 98 */
- 0x13, 0x0, /* FC_OP */
-/* 100 */ NdrFcShort( 0x2 ), /* Offset= 2 (102) */
-/* 102 */
- 0x21, /* FC_BOGUS_ARRAY */
- 0x3, /* 3 */
-/* 104 */ NdrFcShort( 0x0 ), /* 0 */
-/* 106 */ 0x28, /* Corr desc: parameter, FC_LONG */
- 0x0, /* */
-/* 108 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 110 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 112 */ 0x28, /* Corr desc: parameter, FC_LONG */
- 0x54, /* FC_DEREFERENCE */
-/* 114 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 116 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 118 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 120 */ NdrFcShort( 0xffdc ), /* Offset= -36 (84) */
-/* 122 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 124 */
- 0x11, 0x4, /* FC_RP [alloced_on_stack] */
-/* 126 */ NdrFcShort( 0x1a ), /* Offset= 26 (152) */
-/* 128 */
- 0x13, 0x0, /* FC_OP */
-/* 130 */ NdrFcShort( 0x2 ), /* Offset= 2 (132) */
-/* 132 */
- 0x2a, /* FC_ENCAPSULATED_UNION */
- 0x48, /* 72 */
-/* 134 */ NdrFcShort( 0x4 ), /* 4 */
-/* 136 */ NdrFcShort( 0x2 ), /* 2 */
-/* 138 */ NdrFcLong( 0x48746457 ), /* 1215587415 */
-/* 142 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
-/* 144 */ NdrFcLong( 0x52746457 ), /* 1383359575 */
-/* 148 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
-/* 150 */ NdrFcShort( 0xffff ), /* Offset= -1 (149) */
-/* 152 */ 0xb4, /* FC_USER_MARSHAL */
- 0x83, /* 131 */
-/* 154 */ NdrFcShort( 0x1 ), /* 1 */
-/* 156 */ NdrFcShort( 0x4 ), /* 4 */
-/* 158 */ NdrFcShort( 0x0 ), /* 0 */
-/* 160 */ NdrFcShort( 0xffe0 ), /* Offset= -32 (128) */
-/* 162 */
- 0x11, 0x4, /* FC_RP [alloced_on_stack] */
-/* 164 */ NdrFcShort( 0x2 ), /* Offset= 2 (166) */
-/* 166 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 168 */ NdrFcShort( 0xc ), /* 12 */
-/* 170 */ NdrFcShort( 0x0 ), /* 0 */
-/* 172 */ NdrFcShort( 0x0 ), /* Offset= 0 (172) */
-/* 174 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 176 */ NdrFcShort( 0xffa4 ), /* Offset= -92 (84) */
-/* 178 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 180 */ NdrFcShort( 0xffa0 ), /* Offset= -96 (84) */
-/* 182 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 184 */ NdrFcShort( 0xff9c ), /* Offset= -100 (84) */
-/* 186 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-
- 0x0
- }
- };
-
-static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ] =
- {
-
- {
- BSTR_UserSize
- ,BSTR_UserMarshal
- ,BSTR_UserUnmarshal
- ,BSTR_UserFree
- },
- {
- HWND_UserSize
- ,HWND_UserMarshal
- ,HWND_UserUnmarshal
- ,HWND_UserFree
- }
-
- };
-
-
-
-/* Standard interface: __MIDL_itf_Accessible2_0000_0000, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */
-
-
-/* Object interface: IUnknown, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
-
-
-/* Object interface: IDispatch, ver. 0.0,
- GUID={0x00020400,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
-
-
-/* Object interface: IAccessible, ver. 0.0,
- GUID={0x618736e0,0x3c3d,0x11cf,{0x81,0x0c,0x00,0xaa,0x00,0x38,0x9b,0x71}} */
-
-
-/* Object interface: IAccessible2, ver. 0.0,
- GUID={0xE89F726E,0xC4F4,0x4c19,{0xBB,0x19,0xB6,0x47,0xD7,0xFA,0x84,0x78}} */
-
-#pragma code_seg(".orpc")
-static const unsigned short IAccessible2_FormatStringOffsetTable[] =
- {
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- 0,
- 36,
- 78,
- 126,
- 162,
- 198,
- 246,
- 294,
- 330,
- 366,
- 402,
- 438,
- 486,
- 534,
- 570,
- 606,
- 642,
- 678
- };
-
-static const MIDL_STUBLESS_PROXY_INFO IAccessible2_ProxyInfo =
- {
- &Object_StubDesc,
- Accessible2__MIDL_ProcFormatString.Format,
- &IAccessible2_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0
- };
-
-
-static const MIDL_SERVER_INFO IAccessible2_ServerInfo =
- {
- &Object_StubDesc,
- 0,
- Accessible2__MIDL_ProcFormatString.Format,
- &IAccessible2_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0,
- 0};
-CINTERFACE_PROXY_VTABLE(46) _IAccessible2ProxyVtbl =
-{
- &IAccessible2_ProxyInfo,
- &IID_IAccessible2,
- IUnknown_QueryInterface_Proxy,
- IUnknown_AddRef_Proxy,
- IUnknown_Release_Proxy ,
- 0 /* IDispatch::GetTypeInfoCount */ ,
- 0 /* IDispatch::GetTypeInfo */ ,
- 0 /* IDispatch::GetIDsOfNames */ ,
- 0 /* IDispatch_Invoke_Proxy */ ,
- 0 /* IAccessible::get_accParent */ ,
- 0 /* IAccessible::get_accChildCount */ ,
- 0 /* IAccessible::get_accChild */ ,
- 0 /* IAccessible::get_accName */ ,
- 0 /* IAccessible::get_accValue */ ,
- 0 /* IAccessible::get_accDescription */ ,
- 0 /* IAccessible::get_accRole */ ,
- 0 /* IAccessible::get_accState */ ,
- 0 /* IAccessible::get_accHelp */ ,
- 0 /* IAccessible::get_accHelpTopic */ ,
- 0 /* IAccessible::get_accKeyboardShortcut */ ,
- 0 /* IAccessible::get_accFocus */ ,
- 0 /* IAccessible::get_accSelection */ ,
- 0 /* IAccessible::get_accDefaultAction */ ,
- 0 /* IAccessible::accSelect */ ,
- 0 /* IAccessible::accLocation */ ,
- 0 /* IAccessible::accNavigate */ ,
- 0 /* IAccessible::accHitTest */ ,
- 0 /* IAccessible::accDoDefaultAction */ ,
- 0 /* IAccessible::put_accName */ ,
- 0 /* IAccessible::put_accValue */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::get_nRelations */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::get_relation */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::get_relations */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::role */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::scrollTo */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::scrollToPoint */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::get_groupPosition */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::get_states */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::get_extendedRole */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::get_localizedExtendedRole */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::get_nExtendedStates */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::get_extendedStates */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::get_localizedExtendedStates */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::get_uniqueID */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::get_windowHandle */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::get_indexInParent */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::get_locale */ ,
- (void *) (INT_PTR) -1 /* IAccessible2::get_attributes */
-};
-
-
-static const PRPC_STUB_FUNCTION IAccessible2_table[] =
-{
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2
-};
-
-CInterfaceStubVtbl _IAccessible2StubVtbl =
-{
- &IID_IAccessible2,
- &IAccessible2_ServerInfo,
- 46,
- &IAccessible2_table[-3],
- CStdStubBuffer_DELEGATING_METHODS
-};
-
-static const MIDL_STUB_DESC Object_StubDesc =
- {
- 0,
- NdrOleAllocate,
- NdrOleFree,
- 0,
- 0,
- 0,
- 0,
- 0,
- Accessible2__MIDL_TypeFormatString.Format,
- 1, /* -error bounds_check flag */
- 0x50002, /* Ndr library version */
- 0,
- 0x700022b, /* MIDL Version 7.0.555 */
- 0,
- UserMarshalRoutines,
- 0, /* notify & notify_flag routine table */
- 0x1, /* MIDL flag */
- 0, /* cs routines */
- 0, /* proxy/server info */
- 0
- };
-
-const CInterfaceProxyVtbl * const _Accessible2_ProxyVtblList[] =
-{
- ( CInterfaceProxyVtbl *) &_IAccessible2ProxyVtbl,
- 0
-};
-
-const CInterfaceStubVtbl * const _Accessible2_StubVtblList[] =
-{
- ( CInterfaceStubVtbl *) &_IAccessible2StubVtbl,
- 0
-};
-
-PCInterfaceName const _Accessible2_InterfaceNamesList[] =
-{
- "IAccessible2",
- 0
-};
-
-const IID * const _Accessible2_BaseIIDList[] =
-{
- &IID_IAccessible,
- 0
-};
-
-
-#define _Accessible2_CHECK_IID(n) IID_GENERIC_CHECK_IID( _Accessible2, pIID, n)
-
-int __stdcall _Accessible2_IID_Lookup( const IID * pIID, int * pIndex )
-{
-
- if(!_Accessible2_CHECK_IID(0))
- {
- *pIndex = 0;
- return 1;
- }
-
- return 0;
-}
-
-const ExtendedProxyFileInfo Accessible2_ProxyFileInfo =
-{
- (PCInterfaceProxyVtblList *) & _Accessible2_ProxyVtblList,
- (PCInterfaceStubVtblList *) & _Accessible2_StubVtblList,
- (const PCInterfaceName * ) & _Accessible2_InterfaceNamesList,
- (const IID ** ) & _Accessible2_BaseIIDList,
- & _Accessible2_IID_Lookup,
- 1,
- 2,
- 0, /* table of [async_uuid] interfaces */
- 0, /* Filler1 */
- 0, /* Filler2 */
- 0 /* Filler3 */
-};
-#pragma optimize("", on )
-#if _MSC_VER >= 1200
-#pragma warning(pop)
-#endif
-
-
-#endif /* !defined(_M_IA64) && !defined(_M_AMD64)*/
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleAction.h b/src/3rdparty/iaccessible2/generated/x86/AccessibleAction.h
deleted file mode 100644
index c1ebabb899..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleAction.h
+++ /dev/null
@@ -1,220 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:51 2012
- */
-/* Compiler settings for AccessibleAction.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-#ifndef COM_NO_WINDOWS_H
-#include "windows.h"
-#include "ole2.h"
-#endif /*COM_NO_WINDOWS_H*/
-
-#ifndef __AccessibleAction_h__
-#define __AccessibleAction_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifndef __IAccessibleAction_FWD_DEFINED__
-#define __IAccessibleAction_FWD_DEFINED__
-typedef interface IAccessibleAction IAccessibleAction;
-#endif /* __IAccessibleAction_FWD_DEFINED__ */
-
-
-/* header files for imported files */
-#include "objidl.h"
-#include "oaidl.h"
-#include "oleacc.h"
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#ifndef __IAccessibleAction_INTERFACE_DEFINED__
-#define __IAccessibleAction_INTERFACE_DEFINED__
-
-/* interface IAccessibleAction */
-/* [uuid][object] */
-
-
-EXTERN_C const IID IID_IAccessibleAction;
-
-#if defined(__cplusplus) && !defined(CINTERFACE)
-
- MIDL_INTERFACE("B70D9F59-3B5A-4dba-AB9E-22012F607DF5")
- IAccessibleAction : public IUnknown
- {
- public:
- virtual HRESULT STDMETHODCALLTYPE nActions(
- /* [retval][out] */ long *nActions) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE doAction(
- /* [in] */ long actionIndex) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_description(
- /* [in] */ long actionIndex,
- /* [retval][out] */ BSTR *description) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_keyBinding(
- /* [in] */ long actionIndex,
- /* [in] */ long nMaxBindings,
- /* [length_is][length_is][size_is][size_is][out] */ BSTR **keyBindings,
- /* [retval][out] */ long *nBindings) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_name(
- /* [in] */ long actionIndex,
- /* [retval][out] */ BSTR *name) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_localizedName(
- /* [in] */ long actionIndex,
- /* [retval][out] */ BSTR *localizedName) = 0;
-
- };
-
-#else /* C style interface */
-
- typedef struct IAccessibleActionVtbl
- {
- BEGIN_INTERFACE
-
- HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
- IAccessibleAction * This,
- /* [in] */ REFIID riid,
- /* [annotation][iid_is][out] */
- __RPC__deref_out void **ppvObject);
-
- ULONG ( STDMETHODCALLTYPE *AddRef )(
- IAccessibleAction * This);
-
- ULONG ( STDMETHODCALLTYPE *Release )(
- IAccessibleAction * This);
-
- HRESULT ( STDMETHODCALLTYPE *nActions )(
- IAccessibleAction * This,
- /* [retval][out] */ long *nActions);
-
- HRESULT ( STDMETHODCALLTYPE *doAction )(
- IAccessibleAction * This,
- /* [in] */ long actionIndex);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_description )(
- IAccessibleAction * This,
- /* [in] */ long actionIndex,
- /* [retval][out] */ BSTR *description);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_keyBinding )(
- IAccessibleAction * This,
- /* [in] */ long actionIndex,
- /* [in] */ long nMaxBindings,
- /* [length_is][length_is][size_is][size_is][out] */ BSTR **keyBindings,
- /* [retval][out] */ long *nBindings);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_name )(
- IAccessibleAction * This,
- /* [in] */ long actionIndex,
- /* [retval][out] */ BSTR *name);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedName )(
- IAccessibleAction * This,
- /* [in] */ long actionIndex,
- /* [retval][out] */ BSTR *localizedName);
-
- END_INTERFACE
- } IAccessibleActionVtbl;
-
- interface IAccessibleAction
- {
- CONST_VTBL struct IAccessibleActionVtbl *lpVtbl;
- };
-
-
-
-#ifdef COBJMACROS
-
-
-#define IAccessibleAction_QueryInterface(This,riid,ppvObject) \
- ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
-
-#define IAccessibleAction_AddRef(This) \
- ( (This)->lpVtbl -> AddRef(This) )
-
-#define IAccessibleAction_Release(This) \
- ( (This)->lpVtbl -> Release(This) )
-
-
-#define IAccessibleAction_nActions(This,nActions) \
- ( (This)->lpVtbl -> nActions(This,nActions) )
-
-#define IAccessibleAction_doAction(This,actionIndex) \
- ( (This)->lpVtbl -> doAction(This,actionIndex) )
-
-#define IAccessibleAction_get_description(This,actionIndex,description) \
- ( (This)->lpVtbl -> get_description(This,actionIndex,description) )
-
-#define IAccessibleAction_get_keyBinding(This,actionIndex,nMaxBindings,keyBindings,nBindings) \
- ( (This)->lpVtbl -> get_keyBinding(This,actionIndex,nMaxBindings,keyBindings,nBindings) )
-
-#define IAccessibleAction_get_name(This,actionIndex,name) \
- ( (This)->lpVtbl -> get_name(This,actionIndex,name) )
-
-#define IAccessibleAction_get_localizedName(This,actionIndex,localizedName) \
- ( (This)->lpVtbl -> get_localizedName(This,actionIndex,localizedName) )
-
-#endif /* COBJMACROS */
-
-
-#endif /* C style interface */
-
-
-
-
-#endif /* __IAccessibleAction_INTERFACE_DEFINED__ */
-
-
-/* Additional Prototypes for ALL interfaces */
-
-unsigned long __RPC_USER BSTR_UserSize( unsigned long *, unsigned long , BSTR * );
-unsigned char * __RPC_USER BSTR_UserMarshal( unsigned long *, unsigned char *, BSTR * );
-unsigned char * __RPC_USER BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * );
-void __RPC_USER BSTR_UserFree( unsigned long *, BSTR * );
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleAction_i.c b/src/3rdparty/iaccessible2/generated/x86/AccessibleAction_i.c
deleted file mode 100644
index ea097ef5d6..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleAction_i.c
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
-
-/* link this file in with the server and any clients */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:51 2012
- */
-/* Compiler settings for AccessibleAction.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#include <rpc.h>
-#include <rpcndr.h>
-
-#ifdef _MIDL_USE_GUIDDEF_
-
-#ifndef INITGUID
-#define INITGUID
-#include <guiddef.h>
-#undef INITGUID
-#else
-#include <guiddef.h>
-#endif
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
-
-#else // !_MIDL_USE_GUIDDEF_
-
-#ifndef __IID_DEFINED__
-#define __IID_DEFINED__
-
-typedef struct _IID
-{
- unsigned long x;
- unsigned short s1;
- unsigned short s2;
- unsigned char c[8];
-} IID;
-
-#endif // __IID_DEFINED__
-
-#ifndef CLSID_DEFINED
-#define CLSID_DEFINED
-typedef IID CLSID;
-#endif // CLSID_DEFINED
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
-
-#endif !_MIDL_USE_GUIDDEF_
-
-MIDL_DEFINE_GUID(IID, IID_IAccessibleAction,0xB70D9F59,0x3B5A,0x4dba,0xAB,0x9E,0x22,0x01,0x2F,0x60,0x7D,0xF5);
-
-#undef MIDL_DEFINE_GUID
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleAction_p.c b/src/3rdparty/iaccessible2/generated/x86/AccessibleAction_p.c
deleted file mode 100644
index 41854575bd..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleAction_p.c
+++ /dev/null
@@ -1,563 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the proxy stub code */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:51 2012
- */
-/* Compiler settings for AccessibleAction.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#if !defined(_M_IA64) && !defined(_M_AMD64)
-
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-#if _MSC_VER >= 1200
-#pragma warning(push)
-#endif
-
-#pragma warning( disable: 4211 ) /* redefine extern to static */
-#pragma warning( disable: 4232 ) /* dllimport identity*/
-#pragma warning( disable: 4024 ) /* array to pointer mapping*/
-#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */
-#pragma warning( disable: 4100 ) /* unreferenced arguments in x86 call */
-
-#pragma optimize("", off )
-
-#define USE_STUBLESS_PROXY
-
-
-/* verify that the <rpcproxy.h> version is high enough to compile this file*/
-#ifndef __REDQ_RPCPROXY_H_VERSION__
-#define __REQUIRED_RPCPROXY_H_VERSION__ 475
-#endif
-
-
-#include "rpcproxy.h"
-#ifndef __RPCPROXY_H_VERSION__
-#error this stub requires an updated version of <rpcproxy.h>
-#endif /* __RPCPROXY_H_VERSION__ */
-
-
-#include "AccessibleAction.h"
-
-#define TYPE_FORMAT_STRING_SIZE 77
-#define PROC_FORMAT_STRING_SIZE 253
-#define EXPR_FORMAT_STRING_SIZE 1
-#define TRANSMIT_AS_TABLE_SIZE 0
-#define WIRE_MARSHAL_TABLE_SIZE 1
-
-typedef struct _AccessibleAction_MIDL_TYPE_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
- } AccessibleAction_MIDL_TYPE_FORMAT_STRING;
-
-typedef struct _AccessibleAction_MIDL_PROC_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
- } AccessibleAction_MIDL_PROC_FORMAT_STRING;
-
-typedef struct _AccessibleAction_MIDL_EXPR_FORMAT_STRING
- {
- long Pad;
- unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
- } AccessibleAction_MIDL_EXPR_FORMAT_STRING;
-
-
-static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
-{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
-
-
-extern const AccessibleAction_MIDL_TYPE_FORMAT_STRING AccessibleAction__MIDL_TypeFormatString;
-extern const AccessibleAction_MIDL_PROC_FORMAT_STRING AccessibleAction__MIDL_ProcFormatString;
-extern const AccessibleAction_MIDL_EXPR_FORMAT_STRING AccessibleAction__MIDL_ExprFormatString;
-
-
-extern const MIDL_STUB_DESC Object_StubDesc;
-
-
-extern const MIDL_SERVER_INFO IAccessibleAction_ServerInfo;
-extern const MIDL_STUBLESS_PROXY_INFO IAccessibleAction_ProxyInfo;
-
-
-extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ];
-
-#if !defined(__RPC_WIN32__)
-#error Invalid build platform for this stub.
-#endif
-
-#if !(TARGET_IS_NT50_OR_LATER)
-#error You need Windows 2000 or later to run this stub because it uses these features:
-#error /robust command line switch.
-#error However, your C/C++ compilation flags indicate you intend to run this app on earlier systems.
-#error This app will fail with the RPC_X_WRONG_STUB_VERSION error.
-#endif
-
-
-static const AccessibleAction_MIDL_PROC_FORMAT_STRING AccessibleAction__MIDL_ProcFormatString =
- {
- 0,
- {
-
- /* Procedure nActions */
-
- 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 2 */ NdrFcLong( 0x0 ), /* 0 */
-/* 6 */ NdrFcShort( 0x3 ), /* 3 */
-/* 8 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 10 */ NdrFcShort( 0x0 ), /* 0 */
-/* 12 */ NdrFcShort( 0x24 ), /* 36 */
-/* 14 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 16 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 18 */ NdrFcShort( 0x0 ), /* 0 */
-/* 20 */ NdrFcShort( 0x0 ), /* 0 */
-/* 22 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter nActions */
-
-/* 24 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 26 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 28 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 30 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 32 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 34 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure doAction */
-
-/* 36 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 38 */ NdrFcLong( 0x0 ), /* 0 */
-/* 42 */ NdrFcShort( 0x4 ), /* 4 */
-/* 44 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 46 */ NdrFcShort( 0x8 ), /* 8 */
-/* 48 */ NdrFcShort( 0x8 ), /* 8 */
-/* 50 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 52 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 54 */ NdrFcShort( 0x0 ), /* 0 */
-/* 56 */ NdrFcShort( 0x0 ), /* 0 */
-/* 58 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter actionIndex */
-
-/* 60 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 62 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 64 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 66 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 68 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 70 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_description */
-
-/* 72 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 74 */ NdrFcLong( 0x0 ), /* 0 */
-/* 78 */ NdrFcShort( 0x5 ), /* 5 */
-/* 80 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 82 */ NdrFcShort( 0x8 ), /* 8 */
-/* 84 */ NdrFcShort( 0x8 ), /* 8 */
-/* 86 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 88 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 90 */ NdrFcShort( 0x1 ), /* 1 */
-/* 92 */ NdrFcShort( 0x0 ), /* 0 */
-/* 94 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter actionIndex */
-
-/* 96 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 98 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 100 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter description */
-
-/* 102 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 104 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 106 */ NdrFcShort( 0x24 ), /* Type Offset=36 */
-
- /* Return value */
-
-/* 108 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 110 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 112 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_keyBinding */
-
-/* 114 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 116 */ NdrFcLong( 0x0 ), /* 0 */
-/* 120 */ NdrFcShort( 0x6 ), /* 6 */
-/* 122 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */
-/* 124 */ NdrFcShort( 0x10 ), /* 16 */
-/* 126 */ NdrFcShort( 0x24 ), /* 36 */
-/* 128 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x5, /* 5 */
-/* 130 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 132 */ NdrFcShort( 0x1 ), /* 1 */
-/* 134 */ NdrFcShort( 0x0 ), /* 0 */
-/* 136 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter actionIndex */
-
-/* 138 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 140 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 142 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter nMaxBindings */
-
-/* 144 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 146 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 148 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter keyBindings */
-
-/* 150 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
-/* 152 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 154 */ NdrFcShort( 0x2e ), /* Type Offset=46 */
-
- /* Parameter nBindings */
-
-/* 156 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 158 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 160 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 162 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 164 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
-/* 166 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_name */
-
-/* 168 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 170 */ NdrFcLong( 0x0 ), /* 0 */
-/* 174 */ NdrFcShort( 0x7 ), /* 7 */
-/* 176 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 178 */ NdrFcShort( 0x8 ), /* 8 */
-/* 180 */ NdrFcShort( 0x8 ), /* 8 */
-/* 182 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 184 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 186 */ NdrFcShort( 0x1 ), /* 1 */
-/* 188 */ NdrFcShort( 0x0 ), /* 0 */
-/* 190 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter actionIndex */
-
-/* 192 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 194 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 196 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter name */
-
-/* 198 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 200 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 202 */ NdrFcShort( 0x24 ), /* Type Offset=36 */
-
- /* Return value */
-
-/* 204 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 206 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 208 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_localizedName */
-
-/* 210 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 212 */ NdrFcLong( 0x0 ), /* 0 */
-/* 216 */ NdrFcShort( 0x8 ), /* 8 */
-/* 218 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 220 */ NdrFcShort( 0x8 ), /* 8 */
-/* 222 */ NdrFcShort( 0x8 ), /* 8 */
-/* 224 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 226 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 228 */ NdrFcShort( 0x1 ), /* 1 */
-/* 230 */ NdrFcShort( 0x0 ), /* 0 */
-/* 232 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter actionIndex */
-
-/* 234 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 236 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 238 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter localizedName */
-
-/* 240 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 242 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 244 */ NdrFcShort( 0x24 ), /* Type Offset=36 */
-
- /* Return value */
-
-/* 246 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 248 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 250 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- 0x0
- }
- };
-
-static const AccessibleAction_MIDL_TYPE_FORMAT_STRING AccessibleAction__MIDL_TypeFormatString =
- {
- 0,
- {
- NdrFcShort( 0x0 ), /* 0 */
-/* 2 */
- 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
-/* 4 */ 0x8, /* FC_LONG */
- 0x5c, /* FC_PAD */
-/* 6 */
- 0x11, 0x4, /* FC_RP [alloced_on_stack] */
-/* 8 */ NdrFcShort( 0x1c ), /* Offset= 28 (36) */
-/* 10 */
- 0x13, 0x0, /* FC_OP */
-/* 12 */ NdrFcShort( 0xe ), /* Offset= 14 (26) */
-/* 14 */
- 0x1b, /* FC_CARRAY */
- 0x1, /* 1 */
-/* 16 */ NdrFcShort( 0x2 ), /* 2 */
-/* 18 */ 0x9, /* Corr desc: FC_ULONG */
- 0x0, /* */
-/* 20 */ NdrFcShort( 0xfffc ), /* -4 */
-/* 22 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 24 */ 0x6, /* FC_SHORT */
- 0x5b, /* FC_END */
-/* 26 */
- 0x17, /* FC_CSTRUCT */
- 0x3, /* 3 */
-/* 28 */ NdrFcShort( 0x8 ), /* 8 */
-/* 30 */ NdrFcShort( 0xfff0 ), /* Offset= -16 (14) */
-/* 32 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 34 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 36 */ 0xb4, /* FC_USER_MARSHAL */
- 0x83, /* 131 */
-/* 38 */ NdrFcShort( 0x0 ), /* 0 */
-/* 40 */ NdrFcShort( 0x4 ), /* 4 */
-/* 42 */ NdrFcShort( 0x0 ), /* 0 */
-/* 44 */ NdrFcShort( 0xffde ), /* Offset= -34 (10) */
-/* 46 */
- 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */
-/* 48 */ NdrFcShort( 0x2 ), /* Offset= 2 (50) */
-/* 50 */
- 0x13, 0x0, /* FC_OP */
-/* 52 */ NdrFcShort( 0x2 ), /* Offset= 2 (54) */
-/* 54 */
- 0x21, /* FC_BOGUS_ARRAY */
- 0x3, /* 3 */
-/* 56 */ NdrFcShort( 0x0 ), /* 0 */
-/* 58 */ 0x28, /* Corr desc: parameter, FC_LONG */
- 0x0, /* */
-/* 60 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 62 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 64 */ 0x28, /* Corr desc: parameter, FC_LONG */
- 0x54, /* FC_DEREFERENCE */
-/* 66 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 68 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 70 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 72 */ NdrFcShort( 0xffdc ), /* Offset= -36 (36) */
-/* 74 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-
- 0x0
- }
- };
-
-static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ] =
- {
-
- {
- BSTR_UserSize
- ,BSTR_UserMarshal
- ,BSTR_UserUnmarshal
- ,BSTR_UserFree
- }
-
- };
-
-
-
-/* Object interface: IUnknown, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
-
-
-/* Object interface: IAccessibleAction, ver. 0.0,
- GUID={0xB70D9F59,0x3B5A,0x4dba,{0xAB,0x9E,0x22,0x01,0x2F,0x60,0x7D,0xF5}} */
-
-#pragma code_seg(".orpc")
-static const unsigned short IAccessibleAction_FormatStringOffsetTable[] =
- {
- 0,
- 36,
- 72,
- 114,
- 168,
- 210
- };
-
-static const MIDL_STUBLESS_PROXY_INFO IAccessibleAction_ProxyInfo =
- {
- &Object_StubDesc,
- AccessibleAction__MIDL_ProcFormatString.Format,
- &IAccessibleAction_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0
- };
-
-
-static const MIDL_SERVER_INFO IAccessibleAction_ServerInfo =
- {
- &Object_StubDesc,
- 0,
- AccessibleAction__MIDL_ProcFormatString.Format,
- &IAccessibleAction_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0,
- 0};
-CINTERFACE_PROXY_VTABLE(9) _IAccessibleActionProxyVtbl =
-{
- &IAccessibleAction_ProxyInfo,
- &IID_IAccessibleAction,
- IUnknown_QueryInterface_Proxy,
- IUnknown_AddRef_Proxy,
- IUnknown_Release_Proxy ,
- (void *) (INT_PTR) -1 /* IAccessibleAction::nActions */ ,
- (void *) (INT_PTR) -1 /* IAccessibleAction::doAction */ ,
- (void *) (INT_PTR) -1 /* IAccessibleAction::get_description */ ,
- (void *) (INT_PTR) -1 /* IAccessibleAction::get_keyBinding */ ,
- (void *) (INT_PTR) -1 /* IAccessibleAction::get_name */ ,
- (void *) (INT_PTR) -1 /* IAccessibleAction::get_localizedName */
-};
-
-const CInterfaceStubVtbl _IAccessibleActionStubVtbl =
-{
- &IID_IAccessibleAction,
- &IAccessibleAction_ServerInfo,
- 9,
- 0, /* pure interpreted */
- CStdStubBuffer_METHODS
-};
-
-static const MIDL_STUB_DESC Object_StubDesc =
- {
- 0,
- NdrOleAllocate,
- NdrOleFree,
- 0,
- 0,
- 0,
- 0,
- 0,
- AccessibleAction__MIDL_TypeFormatString.Format,
- 1, /* -error bounds_check flag */
- 0x50002, /* Ndr library version */
- 0,
- 0x700022b, /* MIDL Version 7.0.555 */
- 0,
- UserMarshalRoutines,
- 0, /* notify & notify_flag routine table */
- 0x1, /* MIDL flag */
- 0, /* cs routines */
- 0, /* proxy/server info */
- 0
- };
-
-const CInterfaceProxyVtbl * const _AccessibleAction_ProxyVtblList[] =
-{
- ( CInterfaceProxyVtbl *) &_IAccessibleActionProxyVtbl,
- 0
-};
-
-const CInterfaceStubVtbl * const _AccessibleAction_StubVtblList[] =
-{
- ( CInterfaceStubVtbl *) &_IAccessibleActionStubVtbl,
- 0
-};
-
-PCInterfaceName const _AccessibleAction_InterfaceNamesList[] =
-{
- "IAccessibleAction",
- 0
-};
-
-
-#define _AccessibleAction_CHECK_IID(n) IID_GENERIC_CHECK_IID( _AccessibleAction, pIID, n)
-
-int __stdcall _AccessibleAction_IID_Lookup( const IID * pIID, int * pIndex )
-{
-
- if(!_AccessibleAction_CHECK_IID(0))
- {
- *pIndex = 0;
- return 1;
- }
-
- return 0;
-}
-
-const ExtendedProxyFileInfo AccessibleAction_ProxyFileInfo =
-{
- (PCInterfaceProxyVtblList *) & _AccessibleAction_ProxyVtblList,
- (PCInterfaceStubVtblList *) & _AccessibleAction_StubVtblList,
- (const PCInterfaceName * ) & _AccessibleAction_InterfaceNamesList,
- 0, /* no delegation */
- & _AccessibleAction_IID_Lookup,
- 1,
- 2,
- 0, /* table of [async_uuid] interfaces */
- 0, /* Filler1 */
- 0, /* Filler2 */
- 0 /* Filler3 */
-};
-#pragma optimize("", on )
-#if _MSC_VER >= 1200
-#pragma warning(pop)
-#endif
-
-
-#endif /* !defined(_M_IA64) && !defined(_M_AMD64)*/
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleApplication.h b/src/3rdparty/iaccessible2/generated/x86/AccessibleApplication.h
deleted file mode 100644
index e14096869c..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleApplication.h
+++ /dev/null
@@ -1,188 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:52 2012
- */
-/* Compiler settings for AccessibleApplication.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-#ifndef COM_NO_WINDOWS_H
-#include "windows.h"
-#include "ole2.h"
-#endif /*COM_NO_WINDOWS_H*/
-
-#ifndef __AccessibleApplication_h__
-#define __AccessibleApplication_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifndef __IAccessibleApplication_FWD_DEFINED__
-#define __IAccessibleApplication_FWD_DEFINED__
-typedef interface IAccessibleApplication IAccessibleApplication;
-#endif /* __IAccessibleApplication_FWD_DEFINED__ */
-
-
-/* header files for imported files */
-#include "objidl.h"
-#include "oaidl.h"
-#include "oleacc.h"
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#ifndef __IAccessibleApplication_INTERFACE_DEFINED__
-#define __IAccessibleApplication_INTERFACE_DEFINED__
-
-/* interface IAccessibleApplication */
-/* [uuid][object] */
-
-
-EXTERN_C const IID IID_IAccessibleApplication;
-
-#if defined(__cplusplus) && !defined(CINTERFACE)
-
- MIDL_INTERFACE("D49DED83-5B25-43F4-9B95-93B44595979E")
- IAccessibleApplication : public IUnknown
- {
- public:
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_appName(
- /* [retval][out] */ BSTR *name) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_appVersion(
- /* [retval][out] */ BSTR *version) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_toolkitName(
- /* [retval][out] */ BSTR *name) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_toolkitVersion(
- /* [retval][out] */ BSTR *version) = 0;
-
- };
-
-#else /* C style interface */
-
- typedef struct IAccessibleApplicationVtbl
- {
- BEGIN_INTERFACE
-
- HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
- IAccessibleApplication * This,
- /* [in] */ REFIID riid,
- /* [annotation][iid_is][out] */
- __RPC__deref_out void **ppvObject);
-
- ULONG ( STDMETHODCALLTYPE *AddRef )(
- IAccessibleApplication * This);
-
- ULONG ( STDMETHODCALLTYPE *Release )(
- IAccessibleApplication * This);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_appName )(
- IAccessibleApplication * This,
- /* [retval][out] */ BSTR *name);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_appVersion )(
- IAccessibleApplication * This,
- /* [retval][out] */ BSTR *version);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_toolkitName )(
- IAccessibleApplication * This,
- /* [retval][out] */ BSTR *name);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_toolkitVersion )(
- IAccessibleApplication * This,
- /* [retval][out] */ BSTR *version);
-
- END_INTERFACE
- } IAccessibleApplicationVtbl;
-
- interface IAccessibleApplication
- {
- CONST_VTBL struct IAccessibleApplicationVtbl *lpVtbl;
- };
-
-
-
-#ifdef COBJMACROS
-
-
-#define IAccessibleApplication_QueryInterface(This,riid,ppvObject) \
- ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
-
-#define IAccessibleApplication_AddRef(This) \
- ( (This)->lpVtbl -> AddRef(This) )
-
-#define IAccessibleApplication_Release(This) \
- ( (This)->lpVtbl -> Release(This) )
-
-
-#define IAccessibleApplication_get_appName(This,name) \
- ( (This)->lpVtbl -> get_appName(This,name) )
-
-#define IAccessibleApplication_get_appVersion(This,version) \
- ( (This)->lpVtbl -> get_appVersion(This,version) )
-
-#define IAccessibleApplication_get_toolkitName(This,name) \
- ( (This)->lpVtbl -> get_toolkitName(This,name) )
-
-#define IAccessibleApplication_get_toolkitVersion(This,version) \
- ( (This)->lpVtbl -> get_toolkitVersion(This,version) )
-
-#endif /* COBJMACROS */
-
-
-#endif /* C style interface */
-
-
-
-
-#endif /* __IAccessibleApplication_INTERFACE_DEFINED__ */
-
-
-/* Additional Prototypes for ALL interfaces */
-
-unsigned long __RPC_USER BSTR_UserSize( unsigned long *, unsigned long , BSTR * );
-unsigned char * __RPC_USER BSTR_UserMarshal( unsigned long *, unsigned char *, BSTR * );
-unsigned char * __RPC_USER BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * );
-void __RPC_USER BSTR_UserFree( unsigned long *, BSTR * );
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleApplication_i.c b/src/3rdparty/iaccessible2/generated/x86/AccessibleApplication_i.c
deleted file mode 100644
index daa0c1f7d3..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleApplication_i.c
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
-
-/* link this file in with the server and any clients */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:52 2012
- */
-/* Compiler settings for AccessibleApplication.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#include <rpc.h>
-#include <rpcndr.h>
-
-#ifdef _MIDL_USE_GUIDDEF_
-
-#ifndef INITGUID
-#define INITGUID
-#include <guiddef.h>
-#undef INITGUID
-#else
-#include <guiddef.h>
-#endif
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
-
-#else // !_MIDL_USE_GUIDDEF_
-
-#ifndef __IID_DEFINED__
-#define __IID_DEFINED__
-
-typedef struct _IID
-{
- unsigned long x;
- unsigned short s1;
- unsigned short s2;
- unsigned char c[8];
-} IID;
-
-#endif // __IID_DEFINED__
-
-#ifndef CLSID_DEFINED
-#define CLSID_DEFINED
-typedef IID CLSID;
-#endif // CLSID_DEFINED
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
-
-#endif !_MIDL_USE_GUIDDEF_
-
-MIDL_DEFINE_GUID(IID, IID_IAccessibleApplication,0xD49DED83,0x5B25,0x43F4,0x9B,0x95,0x93,0xB4,0x45,0x95,0x97,0x9E);
-
-#undef MIDL_DEFINE_GUID
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleApplication_p.c b/src/3rdparty/iaccessible2/generated/x86/AccessibleApplication_p.c
deleted file mode 100644
index 4e51a63fff..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleApplication_p.c
+++ /dev/null
@@ -1,428 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the proxy stub code */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:52 2012
- */
-/* Compiler settings for AccessibleApplication.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#if !defined(_M_IA64) && !defined(_M_AMD64)
-
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-#if _MSC_VER >= 1200
-#pragma warning(push)
-#endif
-
-#pragma warning( disable: 4211 ) /* redefine extern to static */
-#pragma warning( disable: 4232 ) /* dllimport identity*/
-#pragma warning( disable: 4024 ) /* array to pointer mapping*/
-#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */
-#pragma warning( disable: 4100 ) /* unreferenced arguments in x86 call */
-
-#pragma optimize("", off )
-
-#define USE_STUBLESS_PROXY
-
-
-/* verify that the <rpcproxy.h> version is high enough to compile this file*/
-#ifndef __REDQ_RPCPROXY_H_VERSION__
-#define __REQUIRED_RPCPROXY_H_VERSION__ 475
-#endif
-
-
-#include "rpcproxy.h"
-#ifndef __RPCPROXY_H_VERSION__
-#error this stub requires an updated version of <rpcproxy.h>
-#endif /* __RPCPROXY_H_VERSION__ */
-
-
-#include "AccessibleApplication.h"
-
-#define TYPE_FORMAT_STRING_SIZE 43
-#define PROC_FORMAT_STRING_SIZE 145
-#define EXPR_FORMAT_STRING_SIZE 1
-#define TRANSMIT_AS_TABLE_SIZE 0
-#define WIRE_MARSHAL_TABLE_SIZE 1
-
-typedef struct _AccessibleApplication_MIDL_TYPE_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
- } AccessibleApplication_MIDL_TYPE_FORMAT_STRING;
-
-typedef struct _AccessibleApplication_MIDL_PROC_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
- } AccessibleApplication_MIDL_PROC_FORMAT_STRING;
-
-typedef struct _AccessibleApplication_MIDL_EXPR_FORMAT_STRING
- {
- long Pad;
- unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
- } AccessibleApplication_MIDL_EXPR_FORMAT_STRING;
-
-
-static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
-{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
-
-
-extern const AccessibleApplication_MIDL_TYPE_FORMAT_STRING AccessibleApplication__MIDL_TypeFormatString;
-extern const AccessibleApplication_MIDL_PROC_FORMAT_STRING AccessibleApplication__MIDL_ProcFormatString;
-extern const AccessibleApplication_MIDL_EXPR_FORMAT_STRING AccessibleApplication__MIDL_ExprFormatString;
-
-
-extern const MIDL_STUB_DESC Object_StubDesc;
-
-
-extern const MIDL_SERVER_INFO IAccessibleApplication_ServerInfo;
-extern const MIDL_STUBLESS_PROXY_INFO IAccessibleApplication_ProxyInfo;
-
-
-extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ];
-
-#if !defined(__RPC_WIN32__)
-#error Invalid build platform for this stub.
-#endif
-
-#if !(TARGET_IS_NT50_OR_LATER)
-#error You need Windows 2000 or later to run this stub because it uses these features:
-#error /robust command line switch.
-#error However, your C/C++ compilation flags indicate you intend to run this app on earlier systems.
-#error This app will fail with the RPC_X_WRONG_STUB_VERSION error.
-#endif
-
-
-static const AccessibleApplication_MIDL_PROC_FORMAT_STRING AccessibleApplication__MIDL_ProcFormatString =
- {
- 0,
- {
-
- /* Procedure get_appName */
-
- 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 2 */ NdrFcLong( 0x0 ), /* 0 */
-/* 6 */ NdrFcShort( 0x3 ), /* 3 */
-/* 8 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 10 */ NdrFcShort( 0x0 ), /* 0 */
-/* 12 */ NdrFcShort( 0x8 ), /* 8 */
-/* 14 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 16 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 18 */ NdrFcShort( 0x1 ), /* 1 */
-/* 20 */ NdrFcShort( 0x0 ), /* 0 */
-/* 22 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter name */
-
-/* 24 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 26 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 28 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
-
- /* Return value */
-
-/* 30 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 32 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 34 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_appVersion */
-
-/* 36 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 38 */ NdrFcLong( 0x0 ), /* 0 */
-/* 42 */ NdrFcShort( 0x4 ), /* 4 */
-/* 44 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 46 */ NdrFcShort( 0x0 ), /* 0 */
-/* 48 */ NdrFcShort( 0x8 ), /* 8 */
-/* 50 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 52 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 54 */ NdrFcShort( 0x1 ), /* 1 */
-/* 56 */ NdrFcShort( 0x0 ), /* 0 */
-/* 58 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter version */
-
-/* 60 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 62 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 64 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
-
- /* Return value */
-
-/* 66 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 68 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 70 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_toolkitName */
-
-/* 72 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 74 */ NdrFcLong( 0x0 ), /* 0 */
-/* 78 */ NdrFcShort( 0x5 ), /* 5 */
-/* 80 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 82 */ NdrFcShort( 0x0 ), /* 0 */
-/* 84 */ NdrFcShort( 0x8 ), /* 8 */
-/* 86 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 88 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 90 */ NdrFcShort( 0x1 ), /* 1 */
-/* 92 */ NdrFcShort( 0x0 ), /* 0 */
-/* 94 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter name */
-
-/* 96 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 98 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 100 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
-
- /* Return value */
-
-/* 102 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 104 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 106 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_toolkitVersion */
-
-/* 108 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 110 */ NdrFcLong( 0x0 ), /* 0 */
-/* 114 */ NdrFcShort( 0x6 ), /* 6 */
-/* 116 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 118 */ NdrFcShort( 0x0 ), /* 0 */
-/* 120 */ NdrFcShort( 0x8 ), /* 8 */
-/* 122 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 124 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 126 */ NdrFcShort( 0x1 ), /* 1 */
-/* 128 */ NdrFcShort( 0x0 ), /* 0 */
-/* 130 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter version */
-
-/* 132 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 134 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 136 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
-
- /* Return value */
-
-/* 138 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 140 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 142 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- 0x0
- }
- };
-
-static const AccessibleApplication_MIDL_TYPE_FORMAT_STRING AccessibleApplication__MIDL_TypeFormatString =
- {
- 0,
- {
- NdrFcShort( 0x0 ), /* 0 */
-/* 2 */
- 0x11, 0x4, /* FC_RP [alloced_on_stack] */
-/* 4 */ NdrFcShort( 0x1c ), /* Offset= 28 (32) */
-/* 6 */
- 0x13, 0x0, /* FC_OP */
-/* 8 */ NdrFcShort( 0xe ), /* Offset= 14 (22) */
-/* 10 */
- 0x1b, /* FC_CARRAY */
- 0x1, /* 1 */
-/* 12 */ NdrFcShort( 0x2 ), /* 2 */
-/* 14 */ 0x9, /* Corr desc: FC_ULONG */
- 0x0, /* */
-/* 16 */ NdrFcShort( 0xfffc ), /* -4 */
-/* 18 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 20 */ 0x6, /* FC_SHORT */
- 0x5b, /* FC_END */
-/* 22 */
- 0x17, /* FC_CSTRUCT */
- 0x3, /* 3 */
-/* 24 */ NdrFcShort( 0x8 ), /* 8 */
-/* 26 */ NdrFcShort( 0xfff0 ), /* Offset= -16 (10) */
-/* 28 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 30 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 32 */ 0xb4, /* FC_USER_MARSHAL */
- 0x83, /* 131 */
-/* 34 */ NdrFcShort( 0x0 ), /* 0 */
-/* 36 */ NdrFcShort( 0x4 ), /* 4 */
-/* 38 */ NdrFcShort( 0x0 ), /* 0 */
-/* 40 */ NdrFcShort( 0xffde ), /* Offset= -34 (6) */
-
- 0x0
- }
- };
-
-static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ] =
- {
-
- {
- BSTR_UserSize
- ,BSTR_UserMarshal
- ,BSTR_UserUnmarshal
- ,BSTR_UserFree
- }
-
- };
-
-
-
-/* Object interface: IUnknown, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
-
-
-/* Object interface: IAccessibleApplication, ver. 0.0,
- GUID={0xD49DED83,0x5B25,0x43F4,{0x9B,0x95,0x93,0xB4,0x45,0x95,0x97,0x9E}} */
-
-#pragma code_seg(".orpc")
-static const unsigned short IAccessibleApplication_FormatStringOffsetTable[] =
- {
- 0,
- 36,
- 72,
- 108
- };
-
-static const MIDL_STUBLESS_PROXY_INFO IAccessibleApplication_ProxyInfo =
- {
- &Object_StubDesc,
- AccessibleApplication__MIDL_ProcFormatString.Format,
- &IAccessibleApplication_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0
- };
-
-
-static const MIDL_SERVER_INFO IAccessibleApplication_ServerInfo =
- {
- &Object_StubDesc,
- 0,
- AccessibleApplication__MIDL_ProcFormatString.Format,
- &IAccessibleApplication_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0,
- 0};
-CINTERFACE_PROXY_VTABLE(7) _IAccessibleApplicationProxyVtbl =
-{
- &IAccessibleApplication_ProxyInfo,
- &IID_IAccessibleApplication,
- IUnknown_QueryInterface_Proxy,
- IUnknown_AddRef_Proxy,
- IUnknown_Release_Proxy ,
- (void *) (INT_PTR) -1 /* IAccessibleApplication::get_appName */ ,
- (void *) (INT_PTR) -1 /* IAccessibleApplication::get_appVersion */ ,
- (void *) (INT_PTR) -1 /* IAccessibleApplication::get_toolkitName */ ,
- (void *) (INT_PTR) -1 /* IAccessibleApplication::get_toolkitVersion */
-};
-
-const CInterfaceStubVtbl _IAccessibleApplicationStubVtbl =
-{
- &IID_IAccessibleApplication,
- &IAccessibleApplication_ServerInfo,
- 7,
- 0, /* pure interpreted */
- CStdStubBuffer_METHODS
-};
-
-static const MIDL_STUB_DESC Object_StubDesc =
- {
- 0,
- NdrOleAllocate,
- NdrOleFree,
- 0,
- 0,
- 0,
- 0,
- 0,
- AccessibleApplication__MIDL_TypeFormatString.Format,
- 1, /* -error bounds_check flag */
- 0x50002, /* Ndr library version */
- 0,
- 0x700022b, /* MIDL Version 7.0.555 */
- 0,
- UserMarshalRoutines,
- 0, /* notify & notify_flag routine table */
- 0x1, /* MIDL flag */
- 0, /* cs routines */
- 0, /* proxy/server info */
- 0
- };
-
-const CInterfaceProxyVtbl * const _AccessibleApplication_ProxyVtblList[] =
-{
- ( CInterfaceProxyVtbl *) &_IAccessibleApplicationProxyVtbl,
- 0
-};
-
-const CInterfaceStubVtbl * const _AccessibleApplication_StubVtblList[] =
-{
- ( CInterfaceStubVtbl *) &_IAccessibleApplicationStubVtbl,
- 0
-};
-
-PCInterfaceName const _AccessibleApplication_InterfaceNamesList[] =
-{
- "IAccessibleApplication",
- 0
-};
-
-
-#define _AccessibleApplication_CHECK_IID(n) IID_GENERIC_CHECK_IID( _AccessibleApplication, pIID, n)
-
-int __stdcall _AccessibleApplication_IID_Lookup( const IID * pIID, int * pIndex )
-{
-
- if(!_AccessibleApplication_CHECK_IID(0))
- {
- *pIndex = 0;
- return 1;
- }
-
- return 0;
-}
-
-const ExtendedProxyFileInfo AccessibleApplication_ProxyFileInfo =
-{
- (PCInterfaceProxyVtblList *) & _AccessibleApplication_ProxyVtblList,
- (PCInterfaceStubVtblList *) & _AccessibleApplication_StubVtblList,
- (const PCInterfaceName * ) & _AccessibleApplication_InterfaceNamesList,
- 0, /* no delegation */
- & _AccessibleApplication_IID_Lookup,
- 1,
- 2,
- 0, /* table of [async_uuid] interfaces */
- 0, /* Filler1 */
- 0, /* Filler2 */
- 0 /* Filler3 */
-};
-#pragma optimize("", on )
-#if _MSC_VER >= 1200
-#pragma warning(pop)
-#endif
-
-
-#endif /* !defined(_M_IA64) && !defined(_M_AMD64)*/
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleComponent.h b/src/3rdparty/iaccessible2/generated/x86/AccessibleComponent.h
deleted file mode 100644
index a5d6fa625b..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleComponent.h
+++ /dev/null
@@ -1,185 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:52 2012
- */
-/* Compiler settings for AccessibleComponent.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-#ifndef COM_NO_WINDOWS_H
-#include "windows.h"
-#include "ole2.h"
-#endif /*COM_NO_WINDOWS_H*/
-
-#ifndef __AccessibleComponent_h__
-#define __AccessibleComponent_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifndef __IAccessibleComponent_FWD_DEFINED__
-#define __IAccessibleComponent_FWD_DEFINED__
-typedef interface IAccessibleComponent IAccessibleComponent;
-#endif /* __IAccessibleComponent_FWD_DEFINED__ */
-
-
-/* header files for imported files */
-#include "objidl.h"
-#include "oaidl.h"
-#include "oleacc.h"
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-/* interface __MIDL_itf_AccessibleComponent_0000_0000 */
-/* [local] */
-
-typedef long IA2Color;
-
-
-
-extern RPC_IF_HANDLE __MIDL_itf_AccessibleComponent_0000_0000_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_AccessibleComponent_0000_0000_v0_0_s_ifspec;
-
-#ifndef __IAccessibleComponent_INTERFACE_DEFINED__
-#define __IAccessibleComponent_INTERFACE_DEFINED__
-
-/* interface IAccessibleComponent */
-/* [uuid][object] */
-
-
-EXTERN_C const IID IID_IAccessibleComponent;
-
-#if defined(__cplusplus) && !defined(CINTERFACE)
-
- MIDL_INTERFACE("1546D4B0-4C98-4bda-89AE-9A64748BDDE4")
- IAccessibleComponent : public IUnknown
- {
- public:
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_locationInParent(
- /* [out] */ long *x,
- /* [retval][out] */ long *y) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_foreground(
- /* [retval][out] */ IA2Color *foreground) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_background(
- /* [retval][out] */ IA2Color *background) = 0;
-
- };
-
-#else /* C style interface */
-
- typedef struct IAccessibleComponentVtbl
- {
- BEGIN_INTERFACE
-
- HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
- IAccessibleComponent * This,
- /* [in] */ REFIID riid,
- /* [annotation][iid_is][out] */
- __RPC__deref_out void **ppvObject);
-
- ULONG ( STDMETHODCALLTYPE *AddRef )(
- IAccessibleComponent * This);
-
- ULONG ( STDMETHODCALLTYPE *Release )(
- IAccessibleComponent * This);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_locationInParent )(
- IAccessibleComponent * This,
- /* [out] */ long *x,
- /* [retval][out] */ long *y);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_foreground )(
- IAccessibleComponent * This,
- /* [retval][out] */ IA2Color *foreground);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_background )(
- IAccessibleComponent * This,
- /* [retval][out] */ IA2Color *background);
-
- END_INTERFACE
- } IAccessibleComponentVtbl;
-
- interface IAccessibleComponent
- {
- CONST_VTBL struct IAccessibleComponentVtbl *lpVtbl;
- };
-
-
-
-#ifdef COBJMACROS
-
-
-#define IAccessibleComponent_QueryInterface(This,riid,ppvObject) \
- ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
-
-#define IAccessibleComponent_AddRef(This) \
- ( (This)->lpVtbl -> AddRef(This) )
-
-#define IAccessibleComponent_Release(This) \
- ( (This)->lpVtbl -> Release(This) )
-
-
-#define IAccessibleComponent_get_locationInParent(This,x,y) \
- ( (This)->lpVtbl -> get_locationInParent(This,x,y) )
-
-#define IAccessibleComponent_get_foreground(This,foreground) \
- ( (This)->lpVtbl -> get_foreground(This,foreground) )
-
-#define IAccessibleComponent_get_background(This,background) \
- ( (This)->lpVtbl -> get_background(This,background) )
-
-#endif /* COBJMACROS */
-
-
-#endif /* C style interface */
-
-
-
-
-#endif /* __IAccessibleComponent_INTERFACE_DEFINED__ */
-
-
-/* Additional Prototypes for ALL interfaces */
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleComponent_i.c b/src/3rdparty/iaccessible2/generated/x86/AccessibleComponent_i.c
deleted file mode 100644
index b48fee274b..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleComponent_i.c
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
-
-/* link this file in with the server and any clients */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:52 2012
- */
-/* Compiler settings for AccessibleComponent.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#include <rpc.h>
-#include <rpcndr.h>
-
-#ifdef _MIDL_USE_GUIDDEF_
-
-#ifndef INITGUID
-#define INITGUID
-#include <guiddef.h>
-#undef INITGUID
-#else
-#include <guiddef.h>
-#endif
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
-
-#else // !_MIDL_USE_GUIDDEF_
-
-#ifndef __IID_DEFINED__
-#define __IID_DEFINED__
-
-typedef struct _IID
-{
- unsigned long x;
- unsigned short s1;
- unsigned short s2;
- unsigned char c[8];
-} IID;
-
-#endif // __IID_DEFINED__
-
-#ifndef CLSID_DEFINED
-#define CLSID_DEFINED
-typedef IID CLSID;
-#endif // CLSID_DEFINED
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
-
-#endif !_MIDL_USE_GUIDDEF_
-
-MIDL_DEFINE_GUID(IID, IID_IAccessibleComponent,0x1546D4B0,0x4C98,0x4bda,0x89,0xAE,0x9A,0x64,0x74,0x8B,0xDD,0xE4);
-
-#undef MIDL_DEFINE_GUID
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleComponent_p.c b/src/3rdparty/iaccessible2/generated/x86/AccessibleComponent_p.c
deleted file mode 100644
index 23230ff0ac..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleComponent_p.c
+++ /dev/null
@@ -1,369 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the proxy stub code */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:52 2012
- */
-/* Compiler settings for AccessibleComponent.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#if !defined(_M_IA64) && !defined(_M_AMD64)
-
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-#if _MSC_VER >= 1200
-#pragma warning(push)
-#endif
-
-#pragma warning( disable: 4211 ) /* redefine extern to static */
-#pragma warning( disable: 4232 ) /* dllimport identity*/
-#pragma warning( disable: 4024 ) /* array to pointer mapping*/
-#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */
-#pragma warning( disable: 4100 ) /* unreferenced arguments in x86 call */
-
-#pragma optimize("", off )
-
-#define USE_STUBLESS_PROXY
-
-
-/* verify that the <rpcproxy.h> version is high enough to compile this file*/
-#ifndef __REDQ_RPCPROXY_H_VERSION__
-#define __REQUIRED_RPCPROXY_H_VERSION__ 475
-#endif
-
-
-#include "rpcproxy.h"
-#ifndef __RPCPROXY_H_VERSION__
-#error this stub requires an updated version of <rpcproxy.h>
-#endif /* __RPCPROXY_H_VERSION__ */
-
-
-#include "AccessibleComponent.h"
-
-#define TYPE_FORMAT_STRING_SIZE 7
-#define PROC_FORMAT_STRING_SIZE 115
-#define EXPR_FORMAT_STRING_SIZE 1
-#define TRANSMIT_AS_TABLE_SIZE 0
-#define WIRE_MARSHAL_TABLE_SIZE 0
-
-typedef struct _AccessibleComponent_MIDL_TYPE_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
- } AccessibleComponent_MIDL_TYPE_FORMAT_STRING;
-
-typedef struct _AccessibleComponent_MIDL_PROC_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
- } AccessibleComponent_MIDL_PROC_FORMAT_STRING;
-
-typedef struct _AccessibleComponent_MIDL_EXPR_FORMAT_STRING
- {
- long Pad;
- unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
- } AccessibleComponent_MIDL_EXPR_FORMAT_STRING;
-
-
-static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
-{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
-
-
-extern const AccessibleComponent_MIDL_TYPE_FORMAT_STRING AccessibleComponent__MIDL_TypeFormatString;
-extern const AccessibleComponent_MIDL_PROC_FORMAT_STRING AccessibleComponent__MIDL_ProcFormatString;
-extern const AccessibleComponent_MIDL_EXPR_FORMAT_STRING AccessibleComponent__MIDL_ExprFormatString;
-
-
-extern const MIDL_STUB_DESC Object_StubDesc;
-
-
-extern const MIDL_SERVER_INFO IAccessibleComponent_ServerInfo;
-extern const MIDL_STUBLESS_PROXY_INFO IAccessibleComponent_ProxyInfo;
-
-
-
-#if !defined(__RPC_WIN32__)
-#error Invalid build platform for this stub.
-#endif
-
-#if !(TARGET_IS_NT50_OR_LATER)
-#error You need Windows 2000 or later to run this stub because it uses these features:
-#error /robust command line switch.
-#error However, your C/C++ compilation flags indicate you intend to run this app on earlier systems.
-#error This app will fail with the RPC_X_WRONG_STUB_VERSION error.
-#endif
-
-
-static const AccessibleComponent_MIDL_PROC_FORMAT_STRING AccessibleComponent__MIDL_ProcFormatString =
- {
- 0,
- {
-
- /* Procedure get_locationInParent */
-
- 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 2 */ NdrFcLong( 0x0 ), /* 0 */
-/* 6 */ NdrFcShort( 0x3 ), /* 3 */
-/* 8 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 10 */ NdrFcShort( 0x0 ), /* 0 */
-/* 12 */ NdrFcShort( 0x40 ), /* 64 */
-/* 14 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x3, /* 3 */
-/* 16 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 18 */ NdrFcShort( 0x0 ), /* 0 */
-/* 20 */ NdrFcShort( 0x0 ), /* 0 */
-/* 22 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter x */
-
-/* 24 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 26 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 28 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter y */
-
-/* 30 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 32 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 34 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 36 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 38 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 40 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_foreground */
-
-/* 42 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 44 */ NdrFcLong( 0x0 ), /* 0 */
-/* 48 */ NdrFcShort( 0x4 ), /* 4 */
-/* 50 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 52 */ NdrFcShort( 0x0 ), /* 0 */
-/* 54 */ NdrFcShort( 0x24 ), /* 36 */
-/* 56 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 58 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 60 */ NdrFcShort( 0x0 ), /* 0 */
-/* 62 */ NdrFcShort( 0x0 ), /* 0 */
-/* 64 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter foreground */
-
-/* 66 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 68 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 70 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 72 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 74 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 76 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_background */
-
-/* 78 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 80 */ NdrFcLong( 0x0 ), /* 0 */
-/* 84 */ NdrFcShort( 0x5 ), /* 5 */
-/* 86 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 88 */ NdrFcShort( 0x0 ), /* 0 */
-/* 90 */ NdrFcShort( 0x24 ), /* 36 */
-/* 92 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 94 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 96 */ NdrFcShort( 0x0 ), /* 0 */
-/* 98 */ NdrFcShort( 0x0 ), /* 0 */
-/* 100 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter background */
-
-/* 102 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 104 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 106 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 108 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 110 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 112 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- 0x0
- }
- };
-
-static const AccessibleComponent_MIDL_TYPE_FORMAT_STRING AccessibleComponent__MIDL_TypeFormatString =
- {
- 0,
- {
- NdrFcShort( 0x0 ), /* 0 */
-/* 2 */
- 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
-/* 4 */ 0x8, /* FC_LONG */
- 0x5c, /* FC_PAD */
-
- 0x0
- }
- };
-
-
-/* Standard interface: __MIDL_itf_AccessibleComponent_0000_0000, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */
-
-
-/* Object interface: IUnknown, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
-
-
-/* Object interface: IAccessibleComponent, ver. 0.0,
- GUID={0x1546D4B0,0x4C98,0x4bda,{0x89,0xAE,0x9A,0x64,0x74,0x8B,0xDD,0xE4}} */
-
-#pragma code_seg(".orpc")
-static const unsigned short IAccessibleComponent_FormatStringOffsetTable[] =
- {
- 0,
- 42,
- 78
- };
-
-static const MIDL_STUBLESS_PROXY_INFO IAccessibleComponent_ProxyInfo =
- {
- &Object_StubDesc,
- AccessibleComponent__MIDL_ProcFormatString.Format,
- &IAccessibleComponent_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0
- };
-
-
-static const MIDL_SERVER_INFO IAccessibleComponent_ServerInfo =
- {
- &Object_StubDesc,
- 0,
- AccessibleComponent__MIDL_ProcFormatString.Format,
- &IAccessibleComponent_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0,
- 0};
-CINTERFACE_PROXY_VTABLE(6) _IAccessibleComponentProxyVtbl =
-{
- &IAccessibleComponent_ProxyInfo,
- &IID_IAccessibleComponent,
- IUnknown_QueryInterface_Proxy,
- IUnknown_AddRef_Proxy,
- IUnknown_Release_Proxy ,
- (void *) (INT_PTR) -1 /* IAccessibleComponent::get_locationInParent */ ,
- (void *) (INT_PTR) -1 /* IAccessibleComponent::get_foreground */ ,
- (void *) (INT_PTR) -1 /* IAccessibleComponent::get_background */
-};
-
-const CInterfaceStubVtbl _IAccessibleComponentStubVtbl =
-{
- &IID_IAccessibleComponent,
- &IAccessibleComponent_ServerInfo,
- 6,
- 0, /* pure interpreted */
- CStdStubBuffer_METHODS
-};
-
-static const MIDL_STUB_DESC Object_StubDesc =
- {
- 0,
- NdrOleAllocate,
- NdrOleFree,
- 0,
- 0,
- 0,
- 0,
- 0,
- AccessibleComponent__MIDL_TypeFormatString.Format,
- 1, /* -error bounds_check flag */
- 0x50002, /* Ndr library version */
- 0,
- 0x700022b, /* MIDL Version 7.0.555 */
- 0,
- 0,
- 0, /* notify & notify_flag routine table */
- 0x1, /* MIDL flag */
- 0, /* cs routines */
- 0, /* proxy/server info */
- 0
- };
-
-const CInterfaceProxyVtbl * const _AccessibleComponent_ProxyVtblList[] =
-{
- ( CInterfaceProxyVtbl *) &_IAccessibleComponentProxyVtbl,
- 0
-};
-
-const CInterfaceStubVtbl * const _AccessibleComponent_StubVtblList[] =
-{
- ( CInterfaceStubVtbl *) &_IAccessibleComponentStubVtbl,
- 0
-};
-
-PCInterfaceName const _AccessibleComponent_InterfaceNamesList[] =
-{
- "IAccessibleComponent",
- 0
-};
-
-
-#define _AccessibleComponent_CHECK_IID(n) IID_GENERIC_CHECK_IID( _AccessibleComponent, pIID, n)
-
-int __stdcall _AccessibleComponent_IID_Lookup( const IID * pIID, int * pIndex )
-{
-
- if(!_AccessibleComponent_CHECK_IID(0))
- {
- *pIndex = 0;
- return 1;
- }
-
- return 0;
-}
-
-const ExtendedProxyFileInfo AccessibleComponent_ProxyFileInfo =
-{
- (PCInterfaceProxyVtblList *) & _AccessibleComponent_ProxyVtblList,
- (PCInterfaceStubVtblList *) & _AccessibleComponent_StubVtblList,
- (const PCInterfaceName * ) & _AccessibleComponent_InterfaceNamesList,
- 0, /* no delegation */
- & _AccessibleComponent_IID_Lookup,
- 1,
- 2,
- 0, /* table of [async_uuid] interfaces */
- 0, /* Filler1 */
- 0, /* Filler2 */
- 0 /* Filler3 */
-};
-#pragma optimize("", on )
-#if _MSC_VER >= 1200
-#pragma warning(pop)
-#endif
-
-
-#endif /* !defined(_M_IA64) && !defined(_M_AMD64)*/
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleEditableText.h b/src/3rdparty/iaccessible2/generated/x86/AccessibleEditableText.h
deleted file mode 100644
index 3afeefbac0..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleEditableText.h
+++ /dev/null
@@ -1,235 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:53 2012
- */
-/* Compiler settings for AccessibleEditableText.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-#ifndef COM_NO_WINDOWS_H
-#include "windows.h"
-#include "ole2.h"
-#endif /*COM_NO_WINDOWS_H*/
-
-#ifndef __AccessibleEditableText_h__
-#define __AccessibleEditableText_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifndef __IAccessibleEditableText_FWD_DEFINED__
-#define __IAccessibleEditableText_FWD_DEFINED__
-typedef interface IAccessibleEditableText IAccessibleEditableText;
-#endif /* __IAccessibleEditableText_FWD_DEFINED__ */
-
-
-/* header files for imported files */
-#include "objidl.h"
-#include "oaidl.h"
-#include "oleacc.h"
-#include "IA2CommonTypes.h"
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#ifndef __IAccessibleEditableText_INTERFACE_DEFINED__
-#define __IAccessibleEditableText_INTERFACE_DEFINED__
-
-/* interface IAccessibleEditableText */
-/* [uuid][object] */
-
-
-EXTERN_C const IID IID_IAccessibleEditableText;
-
-#if defined(__cplusplus) && !defined(CINTERFACE)
-
- MIDL_INTERFACE("A59AA09A-7011-4b65-939D-32B1FB5547E3")
- IAccessibleEditableText : public IUnknown
- {
- public:
- virtual HRESULT STDMETHODCALLTYPE copyText(
- /* [in] */ long startOffset,
- /* [in] */ long endOffset) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE deleteText(
- /* [in] */ long startOffset,
- /* [in] */ long endOffset) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE insertText(
- /* [in] */ long offset,
- /* [in] */ BSTR *text) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE cutText(
- /* [in] */ long startOffset,
- /* [in] */ long endOffset) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE pasteText(
- /* [in] */ long offset) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE replaceText(
- /* [in] */ long startOffset,
- /* [in] */ long endOffset,
- /* [in] */ BSTR *text) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE setAttributes(
- /* [in] */ long startOffset,
- /* [in] */ long endOffset,
- /* [in] */ BSTR *attributes) = 0;
-
- };
-
-#else /* C style interface */
-
- typedef struct IAccessibleEditableTextVtbl
- {
- BEGIN_INTERFACE
-
- HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
- IAccessibleEditableText * This,
- /* [in] */ REFIID riid,
- /* [annotation][iid_is][out] */
- __RPC__deref_out void **ppvObject);
-
- ULONG ( STDMETHODCALLTYPE *AddRef )(
- IAccessibleEditableText * This);
-
- ULONG ( STDMETHODCALLTYPE *Release )(
- IAccessibleEditableText * This);
-
- HRESULT ( STDMETHODCALLTYPE *copyText )(
- IAccessibleEditableText * This,
- /* [in] */ long startOffset,
- /* [in] */ long endOffset);
-
- HRESULT ( STDMETHODCALLTYPE *deleteText )(
- IAccessibleEditableText * This,
- /* [in] */ long startOffset,
- /* [in] */ long endOffset);
-
- HRESULT ( STDMETHODCALLTYPE *insertText )(
- IAccessibleEditableText * This,
- /* [in] */ long offset,
- /* [in] */ BSTR *text);
-
- HRESULT ( STDMETHODCALLTYPE *cutText )(
- IAccessibleEditableText * This,
- /* [in] */ long startOffset,
- /* [in] */ long endOffset);
-
- HRESULT ( STDMETHODCALLTYPE *pasteText )(
- IAccessibleEditableText * This,
- /* [in] */ long offset);
-
- HRESULT ( STDMETHODCALLTYPE *replaceText )(
- IAccessibleEditableText * This,
- /* [in] */ long startOffset,
- /* [in] */ long endOffset,
- /* [in] */ BSTR *text);
-
- HRESULT ( STDMETHODCALLTYPE *setAttributes )(
- IAccessibleEditableText * This,
- /* [in] */ long startOffset,
- /* [in] */ long endOffset,
- /* [in] */ BSTR *attributes);
-
- END_INTERFACE
- } IAccessibleEditableTextVtbl;
-
- interface IAccessibleEditableText
- {
- CONST_VTBL struct IAccessibleEditableTextVtbl *lpVtbl;
- };
-
-
-
-#ifdef COBJMACROS
-
-
-#define IAccessibleEditableText_QueryInterface(This,riid,ppvObject) \
- ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
-
-#define IAccessibleEditableText_AddRef(This) \
- ( (This)->lpVtbl -> AddRef(This) )
-
-#define IAccessibleEditableText_Release(This) \
- ( (This)->lpVtbl -> Release(This) )
-
-
-#define IAccessibleEditableText_copyText(This,startOffset,endOffset) \
- ( (This)->lpVtbl -> copyText(This,startOffset,endOffset) )
-
-#define IAccessibleEditableText_deleteText(This,startOffset,endOffset) \
- ( (This)->lpVtbl -> deleteText(This,startOffset,endOffset) )
-
-#define IAccessibleEditableText_insertText(This,offset,text) \
- ( (This)->lpVtbl -> insertText(This,offset,text) )
-
-#define IAccessibleEditableText_cutText(This,startOffset,endOffset) \
- ( (This)->lpVtbl -> cutText(This,startOffset,endOffset) )
-
-#define IAccessibleEditableText_pasteText(This,offset) \
- ( (This)->lpVtbl -> pasteText(This,offset) )
-
-#define IAccessibleEditableText_replaceText(This,startOffset,endOffset,text) \
- ( (This)->lpVtbl -> replaceText(This,startOffset,endOffset,text) )
-
-#define IAccessibleEditableText_setAttributes(This,startOffset,endOffset,attributes) \
- ( (This)->lpVtbl -> setAttributes(This,startOffset,endOffset,attributes) )
-
-#endif /* COBJMACROS */
-
-
-#endif /* C style interface */
-
-
-
-
-#endif /* __IAccessibleEditableText_INTERFACE_DEFINED__ */
-
-
-/* Additional Prototypes for ALL interfaces */
-
-unsigned long __RPC_USER BSTR_UserSize( unsigned long *, unsigned long , BSTR * );
-unsigned char * __RPC_USER BSTR_UserMarshal( unsigned long *, unsigned char *, BSTR * );
-unsigned char * __RPC_USER BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * );
-void __RPC_USER BSTR_UserFree( unsigned long *, BSTR * );
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleEditableText_i.c b/src/3rdparty/iaccessible2/generated/x86/AccessibleEditableText_i.c
deleted file mode 100644
index c578bf5078..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleEditableText_i.c
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
-
-/* link this file in with the server and any clients */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:53 2012
- */
-/* Compiler settings for AccessibleEditableText.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#include <rpc.h>
-#include <rpcndr.h>
-
-#ifdef _MIDL_USE_GUIDDEF_
-
-#ifndef INITGUID
-#define INITGUID
-#include <guiddef.h>
-#undef INITGUID
-#else
-#include <guiddef.h>
-#endif
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
-
-#else // !_MIDL_USE_GUIDDEF_
-
-#ifndef __IID_DEFINED__
-#define __IID_DEFINED__
-
-typedef struct _IID
-{
- unsigned long x;
- unsigned short s1;
- unsigned short s2;
- unsigned char c[8];
-} IID;
-
-#endif // __IID_DEFINED__
-
-#ifndef CLSID_DEFINED
-#define CLSID_DEFINED
-typedef IID CLSID;
-#endif // CLSID_DEFINED
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
-
-#endif !_MIDL_USE_GUIDDEF_
-
-MIDL_DEFINE_GUID(IID, IID_IAccessibleEditableText,0xA59AA09A,0x7011,0x4b65,0x93,0x9D,0x32,0xB1,0xFB,0x55,0x47,0xE3);
-
-#undef MIDL_DEFINE_GUID
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleEditableText_p.c b/src/3rdparty/iaccessible2/generated/x86/AccessibleEditableText_p.c
deleted file mode 100644
index 28d1e4b333..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleEditableText_p.c
+++ /dev/null
@@ -1,584 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the proxy stub code */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:53 2012
- */
-/* Compiler settings for AccessibleEditableText.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#if !defined(_M_IA64) && !defined(_M_AMD64)
-
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-#if _MSC_VER >= 1200
-#pragma warning(push)
-#endif
-
-#pragma warning( disable: 4211 ) /* redefine extern to static */
-#pragma warning( disable: 4232 ) /* dllimport identity*/
-#pragma warning( disable: 4024 ) /* array to pointer mapping*/
-#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */
-#pragma warning( disable: 4100 ) /* unreferenced arguments in x86 call */
-
-#pragma optimize("", off )
-
-#define USE_STUBLESS_PROXY
-
-
-/* verify that the <rpcproxy.h> version is high enough to compile this file*/
-#ifndef __REDQ_RPCPROXY_H_VERSION__
-#define __REQUIRED_RPCPROXY_H_VERSION__ 475
-#endif
-
-
-#include "rpcproxy.h"
-#ifndef __RPCPROXY_H_VERSION__
-#error this stub requires an updated version of <rpcproxy.h>
-#endif /* __RPCPROXY_H_VERSION__ */
-
-
-#include "AccessibleEditableText.h"
-
-#define TYPE_FORMAT_STRING_SIZE 43
-#define PROC_FORMAT_STRING_SIZE 301
-#define EXPR_FORMAT_STRING_SIZE 1
-#define TRANSMIT_AS_TABLE_SIZE 0
-#define WIRE_MARSHAL_TABLE_SIZE 1
-
-typedef struct _AccessibleEditableText_MIDL_TYPE_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
- } AccessibleEditableText_MIDL_TYPE_FORMAT_STRING;
-
-typedef struct _AccessibleEditableText_MIDL_PROC_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
- } AccessibleEditableText_MIDL_PROC_FORMAT_STRING;
-
-typedef struct _AccessibleEditableText_MIDL_EXPR_FORMAT_STRING
- {
- long Pad;
- unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
- } AccessibleEditableText_MIDL_EXPR_FORMAT_STRING;
-
-
-static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
-{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
-
-
-extern const AccessibleEditableText_MIDL_TYPE_FORMAT_STRING AccessibleEditableText__MIDL_TypeFormatString;
-extern const AccessibleEditableText_MIDL_PROC_FORMAT_STRING AccessibleEditableText__MIDL_ProcFormatString;
-extern const AccessibleEditableText_MIDL_EXPR_FORMAT_STRING AccessibleEditableText__MIDL_ExprFormatString;
-
-
-extern const MIDL_STUB_DESC Object_StubDesc;
-
-
-extern const MIDL_SERVER_INFO IAccessibleEditableText_ServerInfo;
-extern const MIDL_STUBLESS_PROXY_INFO IAccessibleEditableText_ProxyInfo;
-
-
-extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ];
-
-#if !defined(__RPC_WIN32__)
-#error Invalid build platform for this stub.
-#endif
-
-#if !(TARGET_IS_NT50_OR_LATER)
-#error You need Windows 2000 or later to run this stub because it uses these features:
-#error /robust command line switch.
-#error However, your C/C++ compilation flags indicate you intend to run this app on earlier systems.
-#error This app will fail with the RPC_X_WRONG_STUB_VERSION error.
-#endif
-
-
-static const AccessibleEditableText_MIDL_PROC_FORMAT_STRING AccessibleEditableText__MIDL_ProcFormatString =
- {
- 0,
- {
-
- /* Procedure copyText */
-
- 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 2 */ NdrFcLong( 0x0 ), /* 0 */
-/* 6 */ NdrFcShort( 0x3 ), /* 3 */
-/* 8 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 10 */ NdrFcShort( 0x10 ), /* 16 */
-/* 12 */ NdrFcShort( 0x8 ), /* 8 */
-/* 14 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x3, /* 3 */
-/* 16 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 18 */ NdrFcShort( 0x0 ), /* 0 */
-/* 20 */ NdrFcShort( 0x0 ), /* 0 */
-/* 22 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter startOffset */
-
-/* 24 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 26 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 28 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter endOffset */
-
-/* 30 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 32 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 34 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 36 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 38 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 40 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure deleteText */
-
-/* 42 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 44 */ NdrFcLong( 0x0 ), /* 0 */
-/* 48 */ NdrFcShort( 0x4 ), /* 4 */
-/* 50 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 52 */ NdrFcShort( 0x10 ), /* 16 */
-/* 54 */ NdrFcShort( 0x8 ), /* 8 */
-/* 56 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x3, /* 3 */
-/* 58 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 60 */ NdrFcShort( 0x0 ), /* 0 */
-/* 62 */ NdrFcShort( 0x0 ), /* 0 */
-/* 64 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter startOffset */
-
-/* 66 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 68 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 70 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter endOffset */
-
-/* 72 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 74 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 76 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 78 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 80 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 82 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure insertText */
-
-/* 84 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 86 */ NdrFcLong( 0x0 ), /* 0 */
-/* 90 */ NdrFcShort( 0x5 ), /* 5 */
-/* 92 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 94 */ NdrFcShort( 0x8 ), /* 8 */
-/* 96 */ NdrFcShort( 0x8 ), /* 8 */
-/* 98 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */
- 0x3, /* 3 */
-/* 100 */ 0x8, /* 8 */
- 0x5, /* Ext Flags: new corr desc, srv corr check, */
-/* 102 */ NdrFcShort( 0x0 ), /* 0 */
-/* 104 */ NdrFcShort( 0x1 ), /* 1 */
-/* 106 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter offset */
-
-/* 108 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 110 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 112 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter text */
-
-/* 114 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */
-/* 116 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 118 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
-
- /* Return value */
-
-/* 120 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 122 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 124 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure cutText */
-
-/* 126 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 128 */ NdrFcLong( 0x0 ), /* 0 */
-/* 132 */ NdrFcShort( 0x6 ), /* 6 */
-/* 134 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 136 */ NdrFcShort( 0x10 ), /* 16 */
-/* 138 */ NdrFcShort( 0x8 ), /* 8 */
-/* 140 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x3, /* 3 */
-/* 142 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 144 */ NdrFcShort( 0x0 ), /* 0 */
-/* 146 */ NdrFcShort( 0x0 ), /* 0 */
-/* 148 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter startOffset */
-
-/* 150 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 152 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 154 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter endOffset */
-
-/* 156 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 158 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 160 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 162 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 164 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 166 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure pasteText */
-
-/* 168 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 170 */ NdrFcLong( 0x0 ), /* 0 */
-/* 174 */ NdrFcShort( 0x7 ), /* 7 */
-/* 176 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 178 */ NdrFcShort( 0x8 ), /* 8 */
-/* 180 */ NdrFcShort( 0x8 ), /* 8 */
-/* 182 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 184 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 186 */ NdrFcShort( 0x0 ), /* 0 */
-/* 188 */ NdrFcShort( 0x0 ), /* 0 */
-/* 190 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter offset */
-
-/* 192 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 194 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 196 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 198 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 200 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 202 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure replaceText */
-
-/* 204 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 206 */ NdrFcLong( 0x0 ), /* 0 */
-/* 210 */ NdrFcShort( 0x8 ), /* 8 */
-/* 212 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
-/* 214 */ NdrFcShort( 0x10 ), /* 16 */
-/* 216 */ NdrFcShort( 0x8 ), /* 8 */
-/* 218 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */
- 0x4, /* 4 */
-/* 220 */ 0x8, /* 8 */
- 0x5, /* Ext Flags: new corr desc, srv corr check, */
-/* 222 */ NdrFcShort( 0x0 ), /* 0 */
-/* 224 */ NdrFcShort( 0x1 ), /* 1 */
-/* 226 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter startOffset */
-
-/* 228 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 230 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 232 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter endOffset */
-
-/* 234 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 236 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 238 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter text */
-
-/* 240 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */
-/* 242 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 244 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
-
- /* Return value */
-
-/* 246 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 248 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 250 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure setAttributes */
-
-/* 252 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 254 */ NdrFcLong( 0x0 ), /* 0 */
-/* 258 */ NdrFcShort( 0x9 ), /* 9 */
-/* 260 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
-/* 262 */ NdrFcShort( 0x10 ), /* 16 */
-/* 264 */ NdrFcShort( 0x8 ), /* 8 */
-/* 266 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */
- 0x4, /* 4 */
-/* 268 */ 0x8, /* 8 */
- 0x5, /* Ext Flags: new corr desc, srv corr check, */
-/* 270 */ NdrFcShort( 0x0 ), /* 0 */
-/* 272 */ NdrFcShort( 0x1 ), /* 1 */
-/* 274 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter startOffset */
-
-/* 276 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 278 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 280 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter endOffset */
-
-/* 282 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 284 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 286 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter attributes */
-
-/* 288 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */
-/* 290 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 292 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
-
- /* Return value */
-
-/* 294 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 296 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 298 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- 0x0
- }
- };
-
-static const AccessibleEditableText_MIDL_TYPE_FORMAT_STRING AccessibleEditableText__MIDL_TypeFormatString =
- {
- 0,
- {
- NdrFcShort( 0x0 ), /* 0 */
-/* 2 */
- 0x11, 0x0, /* FC_RP */
-/* 4 */ NdrFcShort( 0x1c ), /* Offset= 28 (32) */
-/* 6 */
- 0x12, 0x0, /* FC_UP */
-/* 8 */ NdrFcShort( 0xe ), /* Offset= 14 (22) */
-/* 10 */
- 0x1b, /* FC_CARRAY */
- 0x1, /* 1 */
-/* 12 */ NdrFcShort( 0x2 ), /* 2 */
-/* 14 */ 0x9, /* Corr desc: FC_ULONG */
- 0x0, /* */
-/* 16 */ NdrFcShort( 0xfffc ), /* -4 */
-/* 18 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 20 */ 0x6, /* FC_SHORT */
- 0x5b, /* FC_END */
-/* 22 */
- 0x17, /* FC_CSTRUCT */
- 0x3, /* 3 */
-/* 24 */ NdrFcShort( 0x8 ), /* 8 */
-/* 26 */ NdrFcShort( 0xfff0 ), /* Offset= -16 (10) */
-/* 28 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 30 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 32 */ 0xb4, /* FC_USER_MARSHAL */
- 0x83, /* 131 */
-/* 34 */ NdrFcShort( 0x0 ), /* 0 */
-/* 36 */ NdrFcShort( 0x4 ), /* 4 */
-/* 38 */ NdrFcShort( 0x0 ), /* 0 */
-/* 40 */ NdrFcShort( 0xffde ), /* Offset= -34 (6) */
-
- 0x0
- }
- };
-
-static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ] =
- {
-
- {
- BSTR_UserSize
- ,BSTR_UserMarshal
- ,BSTR_UserUnmarshal
- ,BSTR_UserFree
- }
-
- };
-
-
-
-/* Object interface: IUnknown, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
-
-
-/* Object interface: IAccessibleEditableText, ver. 0.0,
- GUID={0xA59AA09A,0x7011,0x4b65,{0x93,0x9D,0x32,0xB1,0xFB,0x55,0x47,0xE3}} */
-
-#pragma code_seg(".orpc")
-static const unsigned short IAccessibleEditableText_FormatStringOffsetTable[] =
- {
- 0,
- 42,
- 84,
- 126,
- 168,
- 204,
- 252
- };
-
-static const MIDL_STUBLESS_PROXY_INFO IAccessibleEditableText_ProxyInfo =
- {
- &Object_StubDesc,
- AccessibleEditableText__MIDL_ProcFormatString.Format,
- &IAccessibleEditableText_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0
- };
-
-
-static const MIDL_SERVER_INFO IAccessibleEditableText_ServerInfo =
- {
- &Object_StubDesc,
- 0,
- AccessibleEditableText__MIDL_ProcFormatString.Format,
- &IAccessibleEditableText_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0,
- 0};
-CINTERFACE_PROXY_VTABLE(10) _IAccessibleEditableTextProxyVtbl =
-{
- &IAccessibleEditableText_ProxyInfo,
- &IID_IAccessibleEditableText,
- IUnknown_QueryInterface_Proxy,
- IUnknown_AddRef_Proxy,
- IUnknown_Release_Proxy ,
- (void *) (INT_PTR) -1 /* IAccessibleEditableText::copyText */ ,
- (void *) (INT_PTR) -1 /* IAccessibleEditableText::deleteText */ ,
- (void *) (INT_PTR) -1 /* IAccessibleEditableText::insertText */ ,
- (void *) (INT_PTR) -1 /* IAccessibleEditableText::cutText */ ,
- (void *) (INT_PTR) -1 /* IAccessibleEditableText::pasteText */ ,
- (void *) (INT_PTR) -1 /* IAccessibleEditableText::replaceText */ ,
- (void *) (INT_PTR) -1 /* IAccessibleEditableText::setAttributes */
-};
-
-const CInterfaceStubVtbl _IAccessibleEditableTextStubVtbl =
-{
- &IID_IAccessibleEditableText,
- &IAccessibleEditableText_ServerInfo,
- 10,
- 0, /* pure interpreted */
- CStdStubBuffer_METHODS
-};
-
-static const MIDL_STUB_DESC Object_StubDesc =
- {
- 0,
- NdrOleAllocate,
- NdrOleFree,
- 0,
- 0,
- 0,
- 0,
- 0,
- AccessibleEditableText__MIDL_TypeFormatString.Format,
- 1, /* -error bounds_check flag */
- 0x50002, /* Ndr library version */
- 0,
- 0x700022b, /* MIDL Version 7.0.555 */
- 0,
- UserMarshalRoutines,
- 0, /* notify & notify_flag routine table */
- 0x1, /* MIDL flag */
- 0, /* cs routines */
- 0, /* proxy/server info */
- 0
- };
-
-const CInterfaceProxyVtbl * const _AccessibleEditableText_ProxyVtblList[] =
-{
- ( CInterfaceProxyVtbl *) &_IAccessibleEditableTextProxyVtbl,
- 0
-};
-
-const CInterfaceStubVtbl * const _AccessibleEditableText_StubVtblList[] =
-{
- ( CInterfaceStubVtbl *) &_IAccessibleEditableTextStubVtbl,
- 0
-};
-
-PCInterfaceName const _AccessibleEditableText_InterfaceNamesList[] =
-{
- "IAccessibleEditableText",
- 0
-};
-
-
-#define _AccessibleEditableText_CHECK_IID(n) IID_GENERIC_CHECK_IID( _AccessibleEditableText, pIID, n)
-
-int __stdcall _AccessibleEditableText_IID_Lookup( const IID * pIID, int * pIndex )
-{
-
- if(!_AccessibleEditableText_CHECK_IID(0))
- {
- *pIndex = 0;
- return 1;
- }
-
- return 0;
-}
-
-const ExtendedProxyFileInfo AccessibleEditableText_ProxyFileInfo =
-{
- (PCInterfaceProxyVtblList *) & _AccessibleEditableText_ProxyVtblList,
- (PCInterfaceStubVtblList *) & _AccessibleEditableText_StubVtblList,
- (const PCInterfaceName * ) & _AccessibleEditableText_InterfaceNamesList,
- 0, /* no delegation */
- & _AccessibleEditableText_IID_Lookup,
- 1,
- 2,
- 0, /* table of [async_uuid] interfaces */
- 0, /* Filler1 */
- 0, /* Filler2 */
- 0 /* Filler3 */
-};
-#pragma optimize("", on )
-#if _MSC_VER >= 1200
-#pragma warning(pop)
-#endif
-
-
-#endif /* !defined(_M_IA64) && !defined(_M_AMD64)*/
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleEventID.h b/src/3rdparty/iaccessible2/generated/x86/AccessibleEventID.h
deleted file mode 100644
index 252375d0c6..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleEventID.h
+++ /dev/null
@@ -1,105 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:53 2012
- */
-/* Compiler settings for AccessibleEventID.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-
-#ifndef __AccessibleEventID_h__
-#define __AccessibleEventID_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-/* interface __MIDL_itf_AccessibleEventID_0000_0000 */
-/* [local] */
-
-
-enum IA2EventID
- { IA2_EVENT_ACTION_CHANGED = 0x101,
- IA2_EVENT_ACTIVE_DECENDENT_CHANGED = ( IA2_EVENT_ACTION_CHANGED + 1 ) ,
- IA2_EVENT_ACTIVE_DESCENDANT_CHANGED = IA2_EVENT_ACTIVE_DECENDENT_CHANGED,
- IA2_EVENT_DOCUMENT_ATTRIBUTE_CHANGED = ( IA2_EVENT_ACTIVE_DESCENDANT_CHANGED + 1 ) ,
- IA2_EVENT_DOCUMENT_CONTENT_CHANGED = ( IA2_EVENT_DOCUMENT_ATTRIBUTE_CHANGED + 1 ) ,
- IA2_EVENT_DOCUMENT_LOAD_COMPLETE = ( IA2_EVENT_DOCUMENT_CONTENT_CHANGED + 1 ) ,
- IA2_EVENT_DOCUMENT_LOAD_STOPPED = ( IA2_EVENT_DOCUMENT_LOAD_COMPLETE + 1 ) ,
- IA2_EVENT_DOCUMENT_RELOAD = ( IA2_EVENT_DOCUMENT_LOAD_STOPPED + 1 ) ,
- IA2_EVENT_HYPERLINK_END_INDEX_CHANGED = ( IA2_EVENT_DOCUMENT_RELOAD + 1 ) ,
- IA2_EVENT_HYPERLINK_NUMBER_OF_ANCHORS_CHANGED = ( IA2_EVENT_HYPERLINK_END_INDEX_CHANGED + 1 ) ,
- IA2_EVENT_HYPERLINK_SELECTED_LINK_CHANGED = ( IA2_EVENT_HYPERLINK_NUMBER_OF_ANCHORS_CHANGED + 1 ) ,
- IA2_EVENT_HYPERTEXT_LINK_ACTIVATED = ( IA2_EVENT_HYPERLINK_SELECTED_LINK_CHANGED + 1 ) ,
- IA2_EVENT_HYPERTEXT_LINK_SELECTED = ( IA2_EVENT_HYPERTEXT_LINK_ACTIVATED + 1 ) ,
- IA2_EVENT_HYPERLINK_START_INDEX_CHANGED = ( IA2_EVENT_HYPERTEXT_LINK_SELECTED + 1 ) ,
- IA2_EVENT_HYPERTEXT_CHANGED = ( IA2_EVENT_HYPERLINK_START_INDEX_CHANGED + 1 ) ,
- IA2_EVENT_HYPERTEXT_NLINKS_CHANGED = ( IA2_EVENT_HYPERTEXT_CHANGED + 1 ) ,
- IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED = ( IA2_EVENT_HYPERTEXT_NLINKS_CHANGED + 1 ) ,
- IA2_EVENT_PAGE_CHANGED = ( IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED + 1 ) ,
- IA2_EVENT_SECTION_CHANGED = ( IA2_EVENT_PAGE_CHANGED + 1 ) ,
- IA2_EVENT_TABLE_CAPTION_CHANGED = ( IA2_EVENT_SECTION_CHANGED + 1 ) ,
- IA2_EVENT_TABLE_COLUMN_DESCRIPTION_CHANGED = ( IA2_EVENT_TABLE_CAPTION_CHANGED + 1 ) ,
- IA2_EVENT_TABLE_COLUMN_HEADER_CHANGED = ( IA2_EVENT_TABLE_COLUMN_DESCRIPTION_CHANGED + 1 ) ,
- IA2_EVENT_TABLE_MODEL_CHANGED = ( IA2_EVENT_TABLE_COLUMN_HEADER_CHANGED + 1 ) ,
- IA2_EVENT_TABLE_ROW_DESCRIPTION_CHANGED = ( IA2_EVENT_TABLE_MODEL_CHANGED + 1 ) ,
- IA2_EVENT_TABLE_ROW_HEADER_CHANGED = ( IA2_EVENT_TABLE_ROW_DESCRIPTION_CHANGED + 1 ) ,
- IA2_EVENT_TABLE_SUMMARY_CHANGED = ( IA2_EVENT_TABLE_ROW_HEADER_CHANGED + 1 ) ,
- IA2_EVENT_TEXT_ATTRIBUTE_CHANGED = ( IA2_EVENT_TABLE_SUMMARY_CHANGED + 1 ) ,
- IA2_EVENT_TEXT_CARET_MOVED = ( IA2_EVENT_TEXT_ATTRIBUTE_CHANGED + 1 ) ,
- IA2_EVENT_TEXT_CHANGED = ( IA2_EVENT_TEXT_CARET_MOVED + 1 ) ,
- IA2_EVENT_TEXT_COLUMN_CHANGED = ( IA2_EVENT_TEXT_CHANGED + 1 ) ,
- IA2_EVENT_TEXT_INSERTED = ( IA2_EVENT_TEXT_COLUMN_CHANGED + 1 ) ,
- IA2_EVENT_TEXT_REMOVED = ( IA2_EVENT_TEXT_INSERTED + 1 ) ,
- IA2_EVENT_TEXT_UPDATED = ( IA2_EVENT_TEXT_REMOVED + 1 ) ,
- IA2_EVENT_TEXT_SELECTION_CHANGED = ( IA2_EVENT_TEXT_UPDATED + 1 ) ,
- IA2_EVENT_VISIBLE_DATA_CHANGED = ( IA2_EVENT_TEXT_SELECTION_CHANGED + 1 )
- } ;
-
-
-extern RPC_IF_HANDLE __MIDL_itf_AccessibleEventID_0000_0000_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_AccessibleEventID_0000_0000_v0_0_s_ifspec;
-
-/* Additional Prototypes for ALL interfaces */
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleHyperlink.h b/src/3rdparty/iaccessible2/generated/x86/AccessibleHyperlink.h
deleted file mode 100644
index 858e6bbd9a..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleHyperlink.h
+++ /dev/null
@@ -1,252 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:53 2012
- */
-/* Compiler settings for AccessibleHyperlink.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-#ifndef COM_NO_WINDOWS_H
-#include "windows.h"
-#include "ole2.h"
-#endif /*COM_NO_WINDOWS_H*/
-
-#ifndef __AccessibleHyperlink_h__
-#define __AccessibleHyperlink_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifndef __IAccessibleHyperlink_FWD_DEFINED__
-#define __IAccessibleHyperlink_FWD_DEFINED__
-typedef interface IAccessibleHyperlink IAccessibleHyperlink;
-#endif /* __IAccessibleHyperlink_FWD_DEFINED__ */
-
-
-/* header files for imported files */
-#include "objidl.h"
-#include "oaidl.h"
-#include "oleacc.h"
-#include "AccessibleAction.h"
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#ifndef __IAccessibleHyperlink_INTERFACE_DEFINED__
-#define __IAccessibleHyperlink_INTERFACE_DEFINED__
-
-/* interface IAccessibleHyperlink */
-/* [uuid][object] */
-
-
-EXTERN_C const IID IID_IAccessibleHyperlink;
-
-#if defined(__cplusplus) && !defined(CINTERFACE)
-
- MIDL_INTERFACE("01C20F2B-3DD2-400f-949F-AD00BDAB1D41")
- IAccessibleHyperlink : public IAccessibleAction
- {
- public:
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_anchor(
- /* [in] */ long index,
- /* [retval][out] */ VARIANT *anchor) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_anchorTarget(
- /* [in] */ long index,
- /* [retval][out] */ VARIANT *anchorTarget) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_startIndex(
- /* [retval][out] */ long *index) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_endIndex(
- /* [retval][out] */ long *index) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_valid(
- /* [retval][out] */ boolean *valid) = 0;
-
- };
-
-#else /* C style interface */
-
- typedef struct IAccessibleHyperlinkVtbl
- {
- BEGIN_INTERFACE
-
- HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
- IAccessibleHyperlink * This,
- /* [in] */ REFIID riid,
- /* [annotation][iid_is][out] */
- __RPC__deref_out void **ppvObject);
-
- ULONG ( STDMETHODCALLTYPE *AddRef )(
- IAccessibleHyperlink * This);
-
- ULONG ( STDMETHODCALLTYPE *Release )(
- IAccessibleHyperlink * This);
-
- HRESULT ( STDMETHODCALLTYPE *nActions )(
- IAccessibleHyperlink * This,
- /* [retval][out] */ long *nActions);
-
- HRESULT ( STDMETHODCALLTYPE *doAction )(
- IAccessibleHyperlink * This,
- /* [in] */ long actionIndex);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_description )(
- IAccessibleHyperlink * This,
- /* [in] */ long actionIndex,
- /* [retval][out] */ BSTR *description);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_keyBinding )(
- IAccessibleHyperlink * This,
- /* [in] */ long actionIndex,
- /* [in] */ long nMaxBindings,
- /* [length_is][length_is][size_is][size_is][out] */ BSTR **keyBindings,
- /* [retval][out] */ long *nBindings);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_name )(
- IAccessibleHyperlink * This,
- /* [in] */ long actionIndex,
- /* [retval][out] */ BSTR *name);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedName )(
- IAccessibleHyperlink * This,
- /* [in] */ long actionIndex,
- /* [retval][out] */ BSTR *localizedName);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_anchor )(
- IAccessibleHyperlink * This,
- /* [in] */ long index,
- /* [retval][out] */ VARIANT *anchor);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_anchorTarget )(
- IAccessibleHyperlink * This,
- /* [in] */ long index,
- /* [retval][out] */ VARIANT *anchorTarget);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_startIndex )(
- IAccessibleHyperlink * This,
- /* [retval][out] */ long *index);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_endIndex )(
- IAccessibleHyperlink * This,
- /* [retval][out] */ long *index);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_valid )(
- IAccessibleHyperlink * This,
- /* [retval][out] */ boolean *valid);
-
- END_INTERFACE
- } IAccessibleHyperlinkVtbl;
-
- interface IAccessibleHyperlink
- {
- CONST_VTBL struct IAccessibleHyperlinkVtbl *lpVtbl;
- };
-
-
-
-#ifdef COBJMACROS
-
-
-#define IAccessibleHyperlink_QueryInterface(This,riid,ppvObject) \
- ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
-
-#define IAccessibleHyperlink_AddRef(This) \
- ( (This)->lpVtbl -> AddRef(This) )
-
-#define IAccessibleHyperlink_Release(This) \
- ( (This)->lpVtbl -> Release(This) )
-
-
-#define IAccessibleHyperlink_nActions(This,nActions) \
- ( (This)->lpVtbl -> nActions(This,nActions) )
-
-#define IAccessibleHyperlink_doAction(This,actionIndex) \
- ( (This)->lpVtbl -> doAction(This,actionIndex) )
-
-#define IAccessibleHyperlink_get_description(This,actionIndex,description) \
- ( (This)->lpVtbl -> get_description(This,actionIndex,description) )
-
-#define IAccessibleHyperlink_get_keyBinding(This,actionIndex,nMaxBindings,keyBindings,nBindings) \
- ( (This)->lpVtbl -> get_keyBinding(This,actionIndex,nMaxBindings,keyBindings,nBindings) )
-
-#define IAccessibleHyperlink_get_name(This,actionIndex,name) \
- ( (This)->lpVtbl -> get_name(This,actionIndex,name) )
-
-#define IAccessibleHyperlink_get_localizedName(This,actionIndex,localizedName) \
- ( (This)->lpVtbl -> get_localizedName(This,actionIndex,localizedName) )
-
-
-#define IAccessibleHyperlink_get_anchor(This,index,anchor) \
- ( (This)->lpVtbl -> get_anchor(This,index,anchor) )
-
-#define IAccessibleHyperlink_get_anchorTarget(This,index,anchorTarget) \
- ( (This)->lpVtbl -> get_anchorTarget(This,index,anchorTarget) )
-
-#define IAccessibleHyperlink_get_startIndex(This,index) \
- ( (This)->lpVtbl -> get_startIndex(This,index) )
-
-#define IAccessibleHyperlink_get_endIndex(This,index) \
- ( (This)->lpVtbl -> get_endIndex(This,index) )
-
-#define IAccessibleHyperlink_get_valid(This,valid) \
- ( (This)->lpVtbl -> get_valid(This,valid) )
-
-#endif /* COBJMACROS */
-
-
-#endif /* C style interface */
-
-
-
-
-#endif /* __IAccessibleHyperlink_INTERFACE_DEFINED__ */
-
-
-/* Additional Prototypes for ALL interfaces */
-
-unsigned long __RPC_USER VARIANT_UserSize( unsigned long *, unsigned long , VARIANT * );
-unsigned char * __RPC_USER VARIANT_UserMarshal( unsigned long *, unsigned char *, VARIANT * );
-unsigned char * __RPC_USER VARIANT_UserUnmarshal(unsigned long *, unsigned char *, VARIANT * );
-void __RPC_USER VARIANT_UserFree( unsigned long *, VARIANT * );
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleHyperlink_i.c b/src/3rdparty/iaccessible2/generated/x86/AccessibleHyperlink_i.c
deleted file mode 100644
index ef0921fe4c..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleHyperlink_i.c
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
-
-/* link this file in with the server and any clients */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:53 2012
- */
-/* Compiler settings for AccessibleHyperlink.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#include <rpc.h>
-#include <rpcndr.h>
-
-#ifdef _MIDL_USE_GUIDDEF_
-
-#ifndef INITGUID
-#define INITGUID
-#include <guiddef.h>
-#undef INITGUID
-#else
-#include <guiddef.h>
-#endif
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
-
-#else // !_MIDL_USE_GUIDDEF_
-
-#ifndef __IID_DEFINED__
-#define __IID_DEFINED__
-
-typedef struct _IID
-{
- unsigned long x;
- unsigned short s1;
- unsigned short s2;
- unsigned char c[8];
-} IID;
-
-#endif // __IID_DEFINED__
-
-#ifndef CLSID_DEFINED
-#define CLSID_DEFINED
-typedef IID CLSID;
-#endif // CLSID_DEFINED
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
-
-#endif !_MIDL_USE_GUIDDEF_
-
-MIDL_DEFINE_GUID(IID, IID_IAccessibleHyperlink,0x01C20F2B,0x3DD2,0x400f,0x94,0x9F,0xAD,0x00,0xBD,0xAB,0x1D,0x41);
-
-#undef MIDL_DEFINE_GUID
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleHyperlink_p.c b/src/3rdparty/iaccessible2/generated/x86/AccessibleHyperlink_p.c
deleted file mode 100644
index c608123261..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleHyperlink_p.c
+++ /dev/null
@@ -1,1191 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the proxy stub code */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:53 2012
- */
-/* Compiler settings for AccessibleHyperlink.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#if !defined(_M_IA64) && !defined(_M_AMD64)
-
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-#if _MSC_VER >= 1200
-#pragma warning(push)
-#endif
-
-#pragma warning( disable: 4211 ) /* redefine extern to static */
-#pragma warning( disable: 4232 ) /* dllimport identity*/
-#pragma warning( disable: 4024 ) /* array to pointer mapping*/
-#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */
-#pragma warning( disable: 4100 ) /* unreferenced arguments in x86 call */
-
-#pragma optimize("", off )
-
-#define USE_STUBLESS_PROXY
-
-
-/* verify that the <rpcproxy.h> version is high enough to compile this file*/
-#ifndef __REDQ_RPCPROXY_H_VERSION__
-#define __REQUIRED_RPCPROXY_H_VERSION__ 475
-#endif
-
-
-#include "rpcproxy.h"
-#ifndef __RPCPROXY_H_VERSION__
-#error this stub requires an updated version of <rpcproxy.h>
-#endif /* __RPCPROXY_H_VERSION__ */
-
-
-#include "AccessibleHyperlink.h"
-
-#define TYPE_FORMAT_STRING_SIZE 1047
-#define PROC_FORMAT_STRING_SIZE 193
-#define EXPR_FORMAT_STRING_SIZE 1
-#define TRANSMIT_AS_TABLE_SIZE 0
-#define WIRE_MARSHAL_TABLE_SIZE 1
-
-typedef struct _AccessibleHyperlink_MIDL_TYPE_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
- } AccessibleHyperlink_MIDL_TYPE_FORMAT_STRING;
-
-typedef struct _AccessibleHyperlink_MIDL_PROC_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
- } AccessibleHyperlink_MIDL_PROC_FORMAT_STRING;
-
-typedef struct _AccessibleHyperlink_MIDL_EXPR_FORMAT_STRING
- {
- long Pad;
- unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
- } AccessibleHyperlink_MIDL_EXPR_FORMAT_STRING;
-
-
-static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
-{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
-
-
-extern const AccessibleHyperlink_MIDL_TYPE_FORMAT_STRING AccessibleHyperlink__MIDL_TypeFormatString;
-extern const AccessibleHyperlink_MIDL_PROC_FORMAT_STRING AccessibleHyperlink__MIDL_ProcFormatString;
-extern const AccessibleHyperlink_MIDL_EXPR_FORMAT_STRING AccessibleHyperlink__MIDL_ExprFormatString;
-
-
-extern const MIDL_STUB_DESC Object_StubDesc;
-
-
-extern const MIDL_SERVER_INFO IAccessibleHyperlink_ServerInfo;
-extern const MIDL_STUBLESS_PROXY_INFO IAccessibleHyperlink_ProxyInfo;
-
-
-extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ];
-
-#if !defined(__RPC_WIN32__)
-#error Invalid build platform for this stub.
-#endif
-
-#if !(TARGET_IS_NT50_OR_LATER)
-#error You need Windows 2000 or later to run this stub because it uses these features:
-#error /robust command line switch.
-#error However, your C/C++ compilation flags indicate you intend to run this app on earlier systems.
-#error This app will fail with the RPC_X_WRONG_STUB_VERSION error.
-#endif
-
-
-static const AccessibleHyperlink_MIDL_PROC_FORMAT_STRING AccessibleHyperlink__MIDL_ProcFormatString =
- {
- 0,
- {
-
- /* Procedure get_anchor */
-
- 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 2 */ NdrFcLong( 0x0 ), /* 0 */
-/* 6 */ NdrFcShort( 0x9 ), /* 9 */
-/* 8 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 10 */ NdrFcShort( 0x8 ), /* 8 */
-/* 12 */ NdrFcShort( 0x8 ), /* 8 */
-/* 14 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 16 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 18 */ NdrFcShort( 0x1 ), /* 1 */
-/* 20 */ NdrFcShort( 0x0 ), /* 0 */
-/* 22 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter index */
-
-/* 24 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 26 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 28 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter anchor */
-
-/* 30 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */
-/* 32 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 34 */ NdrFcShort( 0x404 ), /* Type Offset=1028 */
-
- /* Return value */
-
-/* 36 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 38 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 40 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_anchorTarget */
-
-/* 42 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 44 */ NdrFcLong( 0x0 ), /* 0 */
-/* 48 */ NdrFcShort( 0xa ), /* 10 */
-/* 50 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 52 */ NdrFcShort( 0x8 ), /* 8 */
-/* 54 */ NdrFcShort( 0x8 ), /* 8 */
-/* 56 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 58 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 60 */ NdrFcShort( 0x1 ), /* 1 */
-/* 62 */ NdrFcShort( 0x0 ), /* 0 */
-/* 64 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter index */
-
-/* 66 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 68 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 70 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter anchorTarget */
-
-/* 72 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */
-/* 74 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 76 */ NdrFcShort( 0x404 ), /* Type Offset=1028 */
-
- /* Return value */
-
-/* 78 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 80 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 82 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_startIndex */
-
-/* 84 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 86 */ NdrFcLong( 0x0 ), /* 0 */
-/* 90 */ NdrFcShort( 0xb ), /* 11 */
-/* 92 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 94 */ NdrFcShort( 0x0 ), /* 0 */
-/* 96 */ NdrFcShort( 0x24 ), /* 36 */
-/* 98 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 100 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 102 */ NdrFcShort( 0x0 ), /* 0 */
-/* 104 */ NdrFcShort( 0x0 ), /* 0 */
-/* 106 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter index */
-
-/* 108 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 110 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 112 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 114 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 116 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 118 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_endIndex */
-
-/* 120 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 122 */ NdrFcLong( 0x0 ), /* 0 */
-/* 126 */ NdrFcShort( 0xc ), /* 12 */
-/* 128 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 130 */ NdrFcShort( 0x0 ), /* 0 */
-/* 132 */ NdrFcShort( 0x24 ), /* 36 */
-/* 134 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 136 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 138 */ NdrFcShort( 0x0 ), /* 0 */
-/* 140 */ NdrFcShort( 0x0 ), /* 0 */
-/* 142 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter index */
-
-/* 144 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 146 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 148 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 150 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 152 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 154 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_valid */
-
-/* 156 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 158 */ NdrFcLong( 0x0 ), /* 0 */
-/* 162 */ NdrFcShort( 0xd ), /* 13 */
-/* 164 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 166 */ NdrFcShort( 0x0 ), /* 0 */
-/* 168 */ NdrFcShort( 0x21 ), /* 33 */
-/* 170 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 172 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 174 */ NdrFcShort( 0x0 ), /* 0 */
-/* 176 */ NdrFcShort( 0x0 ), /* 0 */
-/* 178 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter valid */
-
-/* 180 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 182 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 184 */ 0x3, /* FC_SMALL */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 186 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 188 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 190 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- 0x0
- }
- };
-
-static const AccessibleHyperlink_MIDL_TYPE_FORMAT_STRING AccessibleHyperlink__MIDL_TypeFormatString =
- {
- 0,
- {
- NdrFcShort( 0x0 ), /* 0 */
-/* 2 */
- 0x11, 0x4, /* FC_RP [alloced_on_stack] */
-/* 4 */ NdrFcShort( 0x400 ), /* Offset= 1024 (1028) */
-/* 6 */
- 0x13, 0x0, /* FC_OP */
-/* 8 */ NdrFcShort( 0x3e8 ), /* Offset= 1000 (1008) */
-/* 10 */
- 0x2b, /* FC_NON_ENCAPSULATED_UNION */
- 0x9, /* FC_ULONG */
-/* 12 */ 0x7, /* Corr desc: FC_USHORT */
- 0x0, /* */
-/* 14 */ NdrFcShort( 0xfff8 ), /* -8 */
-/* 16 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 18 */ NdrFcShort( 0x2 ), /* Offset= 2 (20) */
-/* 20 */ NdrFcShort( 0x10 ), /* 16 */
-/* 22 */ NdrFcShort( 0x2f ), /* 47 */
-/* 24 */ NdrFcLong( 0x14 ), /* 20 */
-/* 28 */ NdrFcShort( 0x800b ), /* Simple arm type: FC_HYPER */
-/* 30 */ NdrFcLong( 0x3 ), /* 3 */
-/* 34 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
-/* 36 */ NdrFcLong( 0x11 ), /* 17 */
-/* 40 */ NdrFcShort( 0x8001 ), /* Simple arm type: FC_BYTE */
-/* 42 */ NdrFcLong( 0x2 ), /* 2 */
-/* 46 */ NdrFcShort( 0x8006 ), /* Simple arm type: FC_SHORT */
-/* 48 */ NdrFcLong( 0x4 ), /* 4 */
-/* 52 */ NdrFcShort( 0x800a ), /* Simple arm type: FC_FLOAT */
-/* 54 */ NdrFcLong( 0x5 ), /* 5 */
-/* 58 */ NdrFcShort( 0x800c ), /* Simple arm type: FC_DOUBLE */
-/* 60 */ NdrFcLong( 0xb ), /* 11 */
-/* 64 */ NdrFcShort( 0x8006 ), /* Simple arm type: FC_SHORT */
-/* 66 */ NdrFcLong( 0xa ), /* 10 */
-/* 70 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
-/* 72 */ NdrFcLong( 0x6 ), /* 6 */
-/* 76 */ NdrFcShort( 0xe8 ), /* Offset= 232 (308) */
-/* 78 */ NdrFcLong( 0x7 ), /* 7 */
-/* 82 */ NdrFcShort( 0x800c ), /* Simple arm type: FC_DOUBLE */
-/* 84 */ NdrFcLong( 0x8 ), /* 8 */
-/* 88 */ NdrFcShort( 0xe2 ), /* Offset= 226 (314) */
-/* 90 */ NdrFcLong( 0xd ), /* 13 */
-/* 94 */ NdrFcShort( 0xf6 ), /* Offset= 246 (340) */
-/* 96 */ NdrFcLong( 0x9 ), /* 9 */
-/* 100 */ NdrFcShort( 0x102 ), /* Offset= 258 (358) */
-/* 102 */ NdrFcLong( 0x2000 ), /* 8192 */
-/* 106 */ NdrFcShort( 0x10e ), /* Offset= 270 (376) */
-/* 108 */ NdrFcLong( 0x24 ), /* 36 */
-/* 112 */ NdrFcShort( 0x336 ), /* Offset= 822 (934) */
-/* 114 */ NdrFcLong( 0x4024 ), /* 16420 */
-/* 118 */ NdrFcShort( 0x330 ), /* Offset= 816 (934) */
-/* 120 */ NdrFcLong( 0x4011 ), /* 16401 */
-/* 124 */ NdrFcShort( 0x32e ), /* Offset= 814 (938) */
-/* 126 */ NdrFcLong( 0x4002 ), /* 16386 */
-/* 130 */ NdrFcShort( 0x32c ), /* Offset= 812 (942) */
-/* 132 */ NdrFcLong( 0x4003 ), /* 16387 */
-/* 136 */ NdrFcShort( 0x32a ), /* Offset= 810 (946) */
-/* 138 */ NdrFcLong( 0x4014 ), /* 16404 */
-/* 142 */ NdrFcShort( 0x328 ), /* Offset= 808 (950) */
-/* 144 */ NdrFcLong( 0x4004 ), /* 16388 */
-/* 148 */ NdrFcShort( 0x326 ), /* Offset= 806 (954) */
-/* 150 */ NdrFcLong( 0x4005 ), /* 16389 */
-/* 154 */ NdrFcShort( 0x324 ), /* Offset= 804 (958) */
-/* 156 */ NdrFcLong( 0x400b ), /* 16395 */
-/* 160 */ NdrFcShort( 0x30e ), /* Offset= 782 (942) */
-/* 162 */ NdrFcLong( 0x400a ), /* 16394 */
-/* 166 */ NdrFcShort( 0x30c ), /* Offset= 780 (946) */
-/* 168 */ NdrFcLong( 0x4006 ), /* 16390 */
-/* 172 */ NdrFcShort( 0x316 ), /* Offset= 790 (962) */
-/* 174 */ NdrFcLong( 0x4007 ), /* 16391 */
-/* 178 */ NdrFcShort( 0x30c ), /* Offset= 780 (958) */
-/* 180 */ NdrFcLong( 0x4008 ), /* 16392 */
-/* 184 */ NdrFcShort( 0x30e ), /* Offset= 782 (966) */
-/* 186 */ NdrFcLong( 0x400d ), /* 16397 */
-/* 190 */ NdrFcShort( 0x30c ), /* Offset= 780 (970) */
-/* 192 */ NdrFcLong( 0x4009 ), /* 16393 */
-/* 196 */ NdrFcShort( 0x30a ), /* Offset= 778 (974) */
-/* 198 */ NdrFcLong( 0x6000 ), /* 24576 */
-/* 202 */ NdrFcShort( 0x308 ), /* Offset= 776 (978) */
-/* 204 */ NdrFcLong( 0x400c ), /* 16396 */
-/* 208 */ NdrFcShort( 0x306 ), /* Offset= 774 (982) */
-/* 210 */ NdrFcLong( 0x10 ), /* 16 */
-/* 214 */ NdrFcShort( 0x8002 ), /* Simple arm type: FC_CHAR */
-/* 216 */ NdrFcLong( 0x12 ), /* 18 */
-/* 220 */ NdrFcShort( 0x8006 ), /* Simple arm type: FC_SHORT */
-/* 222 */ NdrFcLong( 0x13 ), /* 19 */
-/* 226 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
-/* 228 */ NdrFcLong( 0x15 ), /* 21 */
-/* 232 */ NdrFcShort( 0x800b ), /* Simple arm type: FC_HYPER */
-/* 234 */ NdrFcLong( 0x16 ), /* 22 */
-/* 238 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
-/* 240 */ NdrFcLong( 0x17 ), /* 23 */
-/* 244 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
-/* 246 */ NdrFcLong( 0xe ), /* 14 */
-/* 250 */ NdrFcShort( 0x2e4 ), /* Offset= 740 (990) */
-/* 252 */ NdrFcLong( 0x400e ), /* 16398 */
-/* 256 */ NdrFcShort( 0x2e8 ), /* Offset= 744 (1000) */
-/* 258 */ NdrFcLong( 0x4010 ), /* 16400 */
-/* 262 */ NdrFcShort( 0x2e6 ), /* Offset= 742 (1004) */
-/* 264 */ NdrFcLong( 0x4012 ), /* 16402 */
-/* 268 */ NdrFcShort( 0x2a2 ), /* Offset= 674 (942) */
-/* 270 */ NdrFcLong( 0x4013 ), /* 16403 */
-/* 274 */ NdrFcShort( 0x2a0 ), /* Offset= 672 (946) */
-/* 276 */ NdrFcLong( 0x4015 ), /* 16405 */
-/* 280 */ NdrFcShort( 0x29e ), /* Offset= 670 (950) */
-/* 282 */ NdrFcLong( 0x4016 ), /* 16406 */
-/* 286 */ NdrFcShort( 0x294 ), /* Offset= 660 (946) */
-/* 288 */ NdrFcLong( 0x4017 ), /* 16407 */
-/* 292 */ NdrFcShort( 0x28e ), /* Offset= 654 (946) */
-/* 294 */ NdrFcLong( 0x0 ), /* 0 */
-/* 298 */ NdrFcShort( 0x0 ), /* Offset= 0 (298) */
-/* 300 */ NdrFcLong( 0x1 ), /* 1 */
-/* 304 */ NdrFcShort( 0x0 ), /* Offset= 0 (304) */
-/* 306 */ NdrFcShort( 0xffff ), /* Offset= -1 (305) */
-/* 308 */
- 0x15, /* FC_STRUCT */
- 0x7, /* 7 */
-/* 310 */ NdrFcShort( 0x8 ), /* 8 */
-/* 312 */ 0xb, /* FC_HYPER */
- 0x5b, /* FC_END */
-/* 314 */
- 0x13, 0x0, /* FC_OP */
-/* 316 */ NdrFcShort( 0xe ), /* Offset= 14 (330) */
-/* 318 */
- 0x1b, /* FC_CARRAY */
- 0x1, /* 1 */
-/* 320 */ NdrFcShort( 0x2 ), /* 2 */
-/* 322 */ 0x9, /* Corr desc: FC_ULONG */
- 0x0, /* */
-/* 324 */ NdrFcShort( 0xfffc ), /* -4 */
-/* 326 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 328 */ 0x6, /* FC_SHORT */
- 0x5b, /* FC_END */
-/* 330 */
- 0x17, /* FC_CSTRUCT */
- 0x3, /* 3 */
-/* 332 */ NdrFcShort( 0x8 ), /* 8 */
-/* 334 */ NdrFcShort( 0xfff0 ), /* Offset= -16 (318) */
-/* 336 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 338 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 340 */
- 0x2f, /* FC_IP */
- 0x5a, /* FC_CONSTANT_IID */
-/* 342 */ NdrFcLong( 0x0 ), /* 0 */
-/* 346 */ NdrFcShort( 0x0 ), /* 0 */
-/* 348 */ NdrFcShort( 0x0 ), /* 0 */
-/* 350 */ 0xc0, /* 192 */
- 0x0, /* 0 */
-/* 352 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 354 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 356 */ 0x0, /* 0 */
- 0x46, /* 70 */
-/* 358 */
- 0x2f, /* FC_IP */
- 0x5a, /* FC_CONSTANT_IID */
-/* 360 */ NdrFcLong( 0x20400 ), /* 132096 */
-/* 364 */ NdrFcShort( 0x0 ), /* 0 */
-/* 366 */ NdrFcShort( 0x0 ), /* 0 */
-/* 368 */ 0xc0, /* 192 */
- 0x0, /* 0 */
-/* 370 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 372 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 374 */ 0x0, /* 0 */
- 0x46, /* 70 */
-/* 376 */
- 0x13, 0x10, /* FC_OP [pointer_deref] */
-/* 378 */ NdrFcShort( 0x2 ), /* Offset= 2 (380) */
-/* 380 */
- 0x13, 0x0, /* FC_OP */
-/* 382 */ NdrFcShort( 0x216 ), /* Offset= 534 (916) */
-/* 384 */
- 0x2a, /* FC_ENCAPSULATED_UNION */
- 0x49, /* 73 */
-/* 386 */ NdrFcShort( 0x18 ), /* 24 */
-/* 388 */ NdrFcShort( 0xa ), /* 10 */
-/* 390 */ NdrFcLong( 0x8 ), /* 8 */
-/* 394 */ NdrFcShort( 0x5a ), /* Offset= 90 (484) */
-/* 396 */ NdrFcLong( 0xd ), /* 13 */
-/* 400 */ NdrFcShort( 0x7e ), /* Offset= 126 (526) */
-/* 402 */ NdrFcLong( 0x9 ), /* 9 */
-/* 406 */ NdrFcShort( 0x9e ), /* Offset= 158 (564) */
-/* 408 */ NdrFcLong( 0xc ), /* 12 */
-/* 412 */ NdrFcShort( 0xc8 ), /* Offset= 200 (612) */
-/* 414 */ NdrFcLong( 0x24 ), /* 36 */
-/* 418 */ NdrFcShort( 0x124 ), /* Offset= 292 (710) */
-/* 420 */ NdrFcLong( 0x800d ), /* 32781 */
-/* 424 */ NdrFcShort( 0x140 ), /* Offset= 320 (744) */
-/* 426 */ NdrFcLong( 0x10 ), /* 16 */
-/* 430 */ NdrFcShort( 0x15a ), /* Offset= 346 (776) */
-/* 432 */ NdrFcLong( 0x2 ), /* 2 */
-/* 436 */ NdrFcShort( 0x174 ), /* Offset= 372 (808) */
-/* 438 */ NdrFcLong( 0x3 ), /* 3 */
-/* 442 */ NdrFcShort( 0x18e ), /* Offset= 398 (840) */
-/* 444 */ NdrFcLong( 0x14 ), /* 20 */
-/* 448 */ NdrFcShort( 0x1a8 ), /* Offset= 424 (872) */
-/* 450 */ NdrFcShort( 0xffff ), /* Offset= -1 (449) */
-/* 452 */
- 0x1b, /* FC_CARRAY */
- 0x3, /* 3 */
-/* 454 */ NdrFcShort( 0x4 ), /* 4 */
-/* 456 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 458 */ NdrFcShort( 0x0 ), /* 0 */
-/* 460 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 462 */
- 0x4b, /* FC_PP */
- 0x5c, /* FC_PAD */
-/* 464 */
- 0x48, /* FC_VARIABLE_REPEAT */
- 0x49, /* FC_FIXED_OFFSET */
-/* 466 */ NdrFcShort( 0x4 ), /* 4 */
-/* 468 */ NdrFcShort( 0x0 ), /* 0 */
-/* 470 */ NdrFcShort( 0x1 ), /* 1 */
-/* 472 */ NdrFcShort( 0x0 ), /* 0 */
-/* 474 */ NdrFcShort( 0x0 ), /* 0 */
-/* 476 */ 0x13, 0x0, /* FC_OP */
-/* 478 */ NdrFcShort( 0xff6c ), /* Offset= -148 (330) */
-/* 480 */
- 0x5b, /* FC_END */
-
- 0x8, /* FC_LONG */
-/* 482 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 484 */
- 0x16, /* FC_PSTRUCT */
- 0x3, /* 3 */
-/* 486 */ NdrFcShort( 0x8 ), /* 8 */
-/* 488 */
- 0x4b, /* FC_PP */
- 0x5c, /* FC_PAD */
-/* 490 */
- 0x46, /* FC_NO_REPEAT */
- 0x5c, /* FC_PAD */
-/* 492 */ NdrFcShort( 0x4 ), /* 4 */
-/* 494 */ NdrFcShort( 0x4 ), /* 4 */
-/* 496 */ 0x11, 0x0, /* FC_RP */
-/* 498 */ NdrFcShort( 0xffd2 ), /* Offset= -46 (452) */
-/* 500 */
- 0x5b, /* FC_END */
-
- 0x8, /* FC_LONG */
-/* 502 */ 0x8, /* FC_LONG */
- 0x5b, /* FC_END */
-/* 504 */
- 0x21, /* FC_BOGUS_ARRAY */
- 0x3, /* 3 */
-/* 506 */ NdrFcShort( 0x0 ), /* 0 */
-/* 508 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 510 */ NdrFcShort( 0x0 ), /* 0 */
-/* 512 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 514 */ NdrFcLong( 0xffffffff ), /* -1 */
-/* 518 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 520 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 522 */ NdrFcShort( 0xff4a ), /* Offset= -182 (340) */
-/* 524 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 526 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 528 */ NdrFcShort( 0x8 ), /* 8 */
-/* 530 */ NdrFcShort( 0x0 ), /* 0 */
-/* 532 */ NdrFcShort( 0x6 ), /* Offset= 6 (538) */
-/* 534 */ 0x8, /* FC_LONG */
- 0x36, /* FC_POINTER */
-/* 536 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 538 */
- 0x11, 0x0, /* FC_RP */
-/* 540 */ NdrFcShort( 0xffdc ), /* Offset= -36 (504) */
-/* 542 */
- 0x21, /* FC_BOGUS_ARRAY */
- 0x3, /* 3 */
-/* 544 */ NdrFcShort( 0x0 ), /* 0 */
-/* 546 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 548 */ NdrFcShort( 0x0 ), /* 0 */
-/* 550 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 552 */ NdrFcLong( 0xffffffff ), /* -1 */
-/* 556 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 558 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 560 */ NdrFcShort( 0xff36 ), /* Offset= -202 (358) */
-/* 562 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 564 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 566 */ NdrFcShort( 0x8 ), /* 8 */
-/* 568 */ NdrFcShort( 0x0 ), /* 0 */
-/* 570 */ NdrFcShort( 0x6 ), /* Offset= 6 (576) */
-/* 572 */ 0x8, /* FC_LONG */
- 0x36, /* FC_POINTER */
-/* 574 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 576 */
- 0x11, 0x0, /* FC_RP */
-/* 578 */ NdrFcShort( 0xffdc ), /* Offset= -36 (542) */
-/* 580 */
- 0x1b, /* FC_CARRAY */
- 0x3, /* 3 */
-/* 582 */ NdrFcShort( 0x4 ), /* 4 */
-/* 584 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 586 */ NdrFcShort( 0x0 ), /* 0 */
-/* 588 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 590 */
- 0x4b, /* FC_PP */
- 0x5c, /* FC_PAD */
-/* 592 */
- 0x48, /* FC_VARIABLE_REPEAT */
- 0x49, /* FC_FIXED_OFFSET */
-/* 594 */ NdrFcShort( 0x4 ), /* 4 */
-/* 596 */ NdrFcShort( 0x0 ), /* 0 */
-/* 598 */ NdrFcShort( 0x1 ), /* 1 */
-/* 600 */ NdrFcShort( 0x0 ), /* 0 */
-/* 602 */ NdrFcShort( 0x0 ), /* 0 */
-/* 604 */ 0x13, 0x0, /* FC_OP */
-/* 606 */ NdrFcShort( 0x192 ), /* Offset= 402 (1008) */
-/* 608 */
- 0x5b, /* FC_END */
-
- 0x8, /* FC_LONG */
-/* 610 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 612 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 614 */ NdrFcShort( 0x8 ), /* 8 */
-/* 616 */ NdrFcShort( 0x0 ), /* 0 */
-/* 618 */ NdrFcShort( 0x6 ), /* Offset= 6 (624) */
-/* 620 */ 0x8, /* FC_LONG */
- 0x36, /* FC_POINTER */
-/* 622 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 624 */
- 0x11, 0x0, /* FC_RP */
-/* 626 */ NdrFcShort( 0xffd2 ), /* Offset= -46 (580) */
-/* 628 */
- 0x2f, /* FC_IP */
- 0x5a, /* FC_CONSTANT_IID */
-/* 630 */ NdrFcLong( 0x2f ), /* 47 */
-/* 634 */ NdrFcShort( 0x0 ), /* 0 */
-/* 636 */ NdrFcShort( 0x0 ), /* 0 */
-/* 638 */ 0xc0, /* 192 */
- 0x0, /* 0 */
-/* 640 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 642 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 644 */ 0x0, /* 0 */
- 0x46, /* 70 */
-/* 646 */
- 0x1b, /* FC_CARRAY */
- 0x0, /* 0 */
-/* 648 */ NdrFcShort( 0x1 ), /* 1 */
-/* 650 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 652 */ NdrFcShort( 0x4 ), /* 4 */
-/* 654 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 656 */ 0x1, /* FC_BYTE */
- 0x5b, /* FC_END */
-/* 658 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 660 */ NdrFcShort( 0x10 ), /* 16 */
-/* 662 */ NdrFcShort( 0x0 ), /* 0 */
-/* 664 */ NdrFcShort( 0xa ), /* Offset= 10 (674) */
-/* 666 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 668 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 670 */ NdrFcShort( 0xffd6 ), /* Offset= -42 (628) */
-/* 672 */ 0x36, /* FC_POINTER */
- 0x5b, /* FC_END */
-/* 674 */
- 0x13, 0x0, /* FC_OP */
-/* 676 */ NdrFcShort( 0xffe2 ), /* Offset= -30 (646) */
-/* 678 */
- 0x1b, /* FC_CARRAY */
- 0x3, /* 3 */
-/* 680 */ NdrFcShort( 0x4 ), /* 4 */
-/* 682 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 684 */ NdrFcShort( 0x0 ), /* 0 */
-/* 686 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 688 */
- 0x4b, /* FC_PP */
- 0x5c, /* FC_PAD */
-/* 690 */
- 0x48, /* FC_VARIABLE_REPEAT */
- 0x49, /* FC_FIXED_OFFSET */
-/* 692 */ NdrFcShort( 0x4 ), /* 4 */
-/* 694 */ NdrFcShort( 0x0 ), /* 0 */
-/* 696 */ NdrFcShort( 0x1 ), /* 1 */
-/* 698 */ NdrFcShort( 0x0 ), /* 0 */
-/* 700 */ NdrFcShort( 0x0 ), /* 0 */
-/* 702 */ 0x13, 0x0, /* FC_OP */
-/* 704 */ NdrFcShort( 0xffd2 ), /* Offset= -46 (658) */
-/* 706 */
- 0x5b, /* FC_END */
-
- 0x8, /* FC_LONG */
-/* 708 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 710 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 712 */ NdrFcShort( 0x8 ), /* 8 */
-/* 714 */ NdrFcShort( 0x0 ), /* 0 */
-/* 716 */ NdrFcShort( 0x6 ), /* Offset= 6 (722) */
-/* 718 */ 0x8, /* FC_LONG */
- 0x36, /* FC_POINTER */
-/* 720 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 722 */
- 0x11, 0x0, /* FC_RP */
-/* 724 */ NdrFcShort( 0xffd2 ), /* Offset= -46 (678) */
-/* 726 */
- 0x1d, /* FC_SMFARRAY */
- 0x0, /* 0 */
-/* 728 */ NdrFcShort( 0x8 ), /* 8 */
-/* 730 */ 0x1, /* FC_BYTE */
- 0x5b, /* FC_END */
-/* 732 */
- 0x15, /* FC_STRUCT */
- 0x3, /* 3 */
-/* 734 */ NdrFcShort( 0x10 ), /* 16 */
-/* 736 */ 0x8, /* FC_LONG */
- 0x6, /* FC_SHORT */
-/* 738 */ 0x6, /* FC_SHORT */
- 0x4c, /* FC_EMBEDDED_COMPLEX */
-/* 740 */ 0x0, /* 0 */
- NdrFcShort( 0xfff1 ), /* Offset= -15 (726) */
- 0x5b, /* FC_END */
-/* 744 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 746 */ NdrFcShort( 0x18 ), /* 24 */
-/* 748 */ NdrFcShort( 0x0 ), /* 0 */
-/* 750 */ NdrFcShort( 0xa ), /* Offset= 10 (760) */
-/* 752 */ 0x8, /* FC_LONG */
- 0x36, /* FC_POINTER */
-/* 754 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 756 */ NdrFcShort( 0xffe8 ), /* Offset= -24 (732) */
-/* 758 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 760 */
- 0x11, 0x0, /* FC_RP */
-/* 762 */ NdrFcShort( 0xfefe ), /* Offset= -258 (504) */
-/* 764 */
- 0x1b, /* FC_CARRAY */
- 0x0, /* 0 */
-/* 766 */ NdrFcShort( 0x1 ), /* 1 */
-/* 768 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 770 */ NdrFcShort( 0x0 ), /* 0 */
-/* 772 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 774 */ 0x1, /* FC_BYTE */
- 0x5b, /* FC_END */
-/* 776 */
- 0x16, /* FC_PSTRUCT */
- 0x3, /* 3 */
-/* 778 */ NdrFcShort( 0x8 ), /* 8 */
-/* 780 */
- 0x4b, /* FC_PP */
- 0x5c, /* FC_PAD */
-/* 782 */
- 0x46, /* FC_NO_REPEAT */
- 0x5c, /* FC_PAD */
-/* 784 */ NdrFcShort( 0x4 ), /* 4 */
-/* 786 */ NdrFcShort( 0x4 ), /* 4 */
-/* 788 */ 0x13, 0x0, /* FC_OP */
-/* 790 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (764) */
-/* 792 */
- 0x5b, /* FC_END */
-
- 0x8, /* FC_LONG */
-/* 794 */ 0x8, /* FC_LONG */
- 0x5b, /* FC_END */
-/* 796 */
- 0x1b, /* FC_CARRAY */
- 0x1, /* 1 */
-/* 798 */ NdrFcShort( 0x2 ), /* 2 */
-/* 800 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 802 */ NdrFcShort( 0x0 ), /* 0 */
-/* 804 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 806 */ 0x6, /* FC_SHORT */
- 0x5b, /* FC_END */
-/* 808 */
- 0x16, /* FC_PSTRUCT */
- 0x3, /* 3 */
-/* 810 */ NdrFcShort( 0x8 ), /* 8 */
-/* 812 */
- 0x4b, /* FC_PP */
- 0x5c, /* FC_PAD */
-/* 814 */
- 0x46, /* FC_NO_REPEAT */
- 0x5c, /* FC_PAD */
-/* 816 */ NdrFcShort( 0x4 ), /* 4 */
-/* 818 */ NdrFcShort( 0x4 ), /* 4 */
-/* 820 */ 0x13, 0x0, /* FC_OP */
-/* 822 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (796) */
-/* 824 */
- 0x5b, /* FC_END */
-
- 0x8, /* FC_LONG */
-/* 826 */ 0x8, /* FC_LONG */
- 0x5b, /* FC_END */
-/* 828 */
- 0x1b, /* FC_CARRAY */
- 0x3, /* 3 */
-/* 830 */ NdrFcShort( 0x4 ), /* 4 */
-/* 832 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 834 */ NdrFcShort( 0x0 ), /* 0 */
-/* 836 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 838 */ 0x8, /* FC_LONG */
- 0x5b, /* FC_END */
-/* 840 */
- 0x16, /* FC_PSTRUCT */
- 0x3, /* 3 */
-/* 842 */ NdrFcShort( 0x8 ), /* 8 */
-/* 844 */
- 0x4b, /* FC_PP */
- 0x5c, /* FC_PAD */
-/* 846 */
- 0x46, /* FC_NO_REPEAT */
- 0x5c, /* FC_PAD */
-/* 848 */ NdrFcShort( 0x4 ), /* 4 */
-/* 850 */ NdrFcShort( 0x4 ), /* 4 */
-/* 852 */ 0x13, 0x0, /* FC_OP */
-/* 854 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (828) */
-/* 856 */
- 0x5b, /* FC_END */
-
- 0x8, /* FC_LONG */
-/* 858 */ 0x8, /* FC_LONG */
- 0x5b, /* FC_END */
-/* 860 */
- 0x1b, /* FC_CARRAY */
- 0x7, /* 7 */
-/* 862 */ NdrFcShort( 0x8 ), /* 8 */
-/* 864 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 866 */ NdrFcShort( 0x0 ), /* 0 */
-/* 868 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 870 */ 0xb, /* FC_HYPER */
- 0x5b, /* FC_END */
-/* 872 */
- 0x16, /* FC_PSTRUCT */
- 0x3, /* 3 */
-/* 874 */ NdrFcShort( 0x8 ), /* 8 */
-/* 876 */
- 0x4b, /* FC_PP */
- 0x5c, /* FC_PAD */
-/* 878 */
- 0x46, /* FC_NO_REPEAT */
- 0x5c, /* FC_PAD */
-/* 880 */ NdrFcShort( 0x4 ), /* 4 */
-/* 882 */ NdrFcShort( 0x4 ), /* 4 */
-/* 884 */ 0x13, 0x0, /* FC_OP */
-/* 886 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (860) */
-/* 888 */
- 0x5b, /* FC_END */
-
- 0x8, /* FC_LONG */
-/* 890 */ 0x8, /* FC_LONG */
- 0x5b, /* FC_END */
-/* 892 */
- 0x15, /* FC_STRUCT */
- 0x3, /* 3 */
-/* 894 */ NdrFcShort( 0x8 ), /* 8 */
-/* 896 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 898 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 900 */
- 0x1b, /* FC_CARRAY */
- 0x3, /* 3 */
-/* 902 */ NdrFcShort( 0x8 ), /* 8 */
-/* 904 */ 0x7, /* Corr desc: FC_USHORT */
- 0x0, /* */
-/* 906 */ NdrFcShort( 0xffd8 ), /* -40 */
-/* 908 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 910 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 912 */ NdrFcShort( 0xffec ), /* Offset= -20 (892) */
-/* 914 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 916 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 918 */ NdrFcShort( 0x28 ), /* 40 */
-/* 920 */ NdrFcShort( 0xffec ), /* Offset= -20 (900) */
-/* 922 */ NdrFcShort( 0x0 ), /* Offset= 0 (922) */
-/* 924 */ 0x6, /* FC_SHORT */
- 0x6, /* FC_SHORT */
-/* 926 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 928 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 930 */ NdrFcShort( 0xfdde ), /* Offset= -546 (384) */
-/* 932 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 934 */
- 0x13, 0x0, /* FC_OP */
-/* 936 */ NdrFcShort( 0xfeea ), /* Offset= -278 (658) */
-/* 938 */
- 0x13, 0x8, /* FC_OP [simple_pointer] */
-/* 940 */ 0x1, /* FC_BYTE */
- 0x5c, /* FC_PAD */
-/* 942 */
- 0x13, 0x8, /* FC_OP [simple_pointer] */
-/* 944 */ 0x6, /* FC_SHORT */
- 0x5c, /* FC_PAD */
-/* 946 */
- 0x13, 0x8, /* FC_OP [simple_pointer] */
-/* 948 */ 0x8, /* FC_LONG */
- 0x5c, /* FC_PAD */
-/* 950 */
- 0x13, 0x8, /* FC_OP [simple_pointer] */
-/* 952 */ 0xb, /* FC_HYPER */
- 0x5c, /* FC_PAD */
-/* 954 */
- 0x13, 0x8, /* FC_OP [simple_pointer] */
-/* 956 */ 0xa, /* FC_FLOAT */
- 0x5c, /* FC_PAD */
-/* 958 */
- 0x13, 0x8, /* FC_OP [simple_pointer] */
-/* 960 */ 0xc, /* FC_DOUBLE */
- 0x5c, /* FC_PAD */
-/* 962 */
- 0x13, 0x0, /* FC_OP */
-/* 964 */ NdrFcShort( 0xfd70 ), /* Offset= -656 (308) */
-/* 966 */
- 0x13, 0x10, /* FC_OP [pointer_deref] */
-/* 968 */ NdrFcShort( 0xfd72 ), /* Offset= -654 (314) */
-/* 970 */
- 0x13, 0x10, /* FC_OP [pointer_deref] */
-/* 972 */ NdrFcShort( 0xfd88 ), /* Offset= -632 (340) */
-/* 974 */
- 0x13, 0x10, /* FC_OP [pointer_deref] */
-/* 976 */ NdrFcShort( 0xfd96 ), /* Offset= -618 (358) */
-/* 978 */
- 0x13, 0x10, /* FC_OP [pointer_deref] */
-/* 980 */ NdrFcShort( 0xfda4 ), /* Offset= -604 (376) */
-/* 982 */
- 0x13, 0x10, /* FC_OP [pointer_deref] */
-/* 984 */ NdrFcShort( 0x2 ), /* Offset= 2 (986) */
-/* 986 */
- 0x13, 0x0, /* FC_OP */
-/* 988 */ NdrFcShort( 0x14 ), /* Offset= 20 (1008) */
-/* 990 */
- 0x15, /* FC_STRUCT */
- 0x7, /* 7 */
-/* 992 */ NdrFcShort( 0x10 ), /* 16 */
-/* 994 */ 0x6, /* FC_SHORT */
- 0x1, /* FC_BYTE */
-/* 996 */ 0x1, /* FC_BYTE */
- 0x8, /* FC_LONG */
-/* 998 */ 0xb, /* FC_HYPER */
- 0x5b, /* FC_END */
-/* 1000 */
- 0x13, 0x0, /* FC_OP */
-/* 1002 */ NdrFcShort( 0xfff4 ), /* Offset= -12 (990) */
-/* 1004 */
- 0x13, 0x8, /* FC_OP [simple_pointer] */
-/* 1006 */ 0x2, /* FC_CHAR */
- 0x5c, /* FC_PAD */
-/* 1008 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x7, /* 7 */
-/* 1010 */ NdrFcShort( 0x20 ), /* 32 */
-/* 1012 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1014 */ NdrFcShort( 0x0 ), /* Offset= 0 (1014) */
-/* 1016 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 1018 */ 0x6, /* FC_SHORT */
- 0x6, /* FC_SHORT */
-/* 1020 */ 0x6, /* FC_SHORT */
- 0x6, /* FC_SHORT */
-/* 1022 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 1024 */ NdrFcShort( 0xfc0a ), /* Offset= -1014 (10) */
-/* 1026 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 1028 */ 0xb4, /* FC_USER_MARSHAL */
- 0x83, /* 131 */
-/* 1030 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1032 */ NdrFcShort( 0x10 ), /* 16 */
-/* 1034 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1036 */ NdrFcShort( 0xfbfa ), /* Offset= -1030 (6) */
-/* 1038 */
- 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
-/* 1040 */ 0x8, /* FC_LONG */
- 0x5c, /* FC_PAD */
-/* 1042 */
- 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
-/* 1044 */ 0x3, /* FC_SMALL */
- 0x5c, /* FC_PAD */
-
- 0x0
- }
- };
-
-static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ] =
- {
-
- {
- VARIANT_UserSize
- ,VARIANT_UserMarshal
- ,VARIANT_UserUnmarshal
- ,VARIANT_UserFree
- }
-
- };
-
-
-
-/* Object interface: IUnknown, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
-
-
-/* Object interface: IAccessibleAction, ver. 0.0,
- GUID={0xB70D9F59,0x3B5A,0x4dba,{0xAB,0x9E,0x22,0x01,0x2F,0x60,0x7D,0xF5}} */
-
-
-/* Object interface: IAccessibleHyperlink, ver. 0.0,
- GUID={0x01C20F2B,0x3DD2,0x400f,{0x94,0x9F,0xAD,0x00,0xBD,0xAB,0x1D,0x41}} */
-
-#pragma code_seg(".orpc")
-static const unsigned short IAccessibleHyperlink_FormatStringOffsetTable[] =
- {
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- 0,
- 42,
- 84,
- 120,
- 156
- };
-
-static const MIDL_STUBLESS_PROXY_INFO IAccessibleHyperlink_ProxyInfo =
- {
- &Object_StubDesc,
- AccessibleHyperlink__MIDL_ProcFormatString.Format,
- &IAccessibleHyperlink_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0
- };
-
-
-static const MIDL_SERVER_INFO IAccessibleHyperlink_ServerInfo =
- {
- &Object_StubDesc,
- 0,
- AccessibleHyperlink__MIDL_ProcFormatString.Format,
- &IAccessibleHyperlink_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0,
- 0};
-CINTERFACE_PROXY_VTABLE(14) _IAccessibleHyperlinkProxyVtbl =
-{
- &IAccessibleHyperlink_ProxyInfo,
- &IID_IAccessibleHyperlink,
- IUnknown_QueryInterface_Proxy,
- IUnknown_AddRef_Proxy,
- IUnknown_Release_Proxy ,
- 0 /* IAccessibleAction::nActions */ ,
- 0 /* IAccessibleAction::doAction */ ,
- 0 /* IAccessibleAction::get_description */ ,
- 0 /* IAccessibleAction::get_keyBinding */ ,
- 0 /* IAccessibleAction::get_name */ ,
- 0 /* IAccessibleAction::get_localizedName */ ,
- (void *) (INT_PTR) -1 /* IAccessibleHyperlink::get_anchor */ ,
- (void *) (INT_PTR) -1 /* IAccessibleHyperlink::get_anchorTarget */ ,
- (void *) (INT_PTR) -1 /* IAccessibleHyperlink::get_startIndex */ ,
- (void *) (INT_PTR) -1 /* IAccessibleHyperlink::get_endIndex */ ,
- (void *) (INT_PTR) -1 /* IAccessibleHyperlink::get_valid */
-};
-
-
-static const PRPC_STUB_FUNCTION IAccessibleHyperlink_table[] =
-{
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2
-};
-
-CInterfaceStubVtbl _IAccessibleHyperlinkStubVtbl =
-{
- &IID_IAccessibleHyperlink,
- &IAccessibleHyperlink_ServerInfo,
- 14,
- &IAccessibleHyperlink_table[-3],
- CStdStubBuffer_DELEGATING_METHODS
-};
-
-static const MIDL_STUB_DESC Object_StubDesc =
- {
- 0,
- NdrOleAllocate,
- NdrOleFree,
- 0,
- 0,
- 0,
- 0,
- 0,
- AccessibleHyperlink__MIDL_TypeFormatString.Format,
- 1, /* -error bounds_check flag */
- 0x50002, /* Ndr library version */
- 0,
- 0x700022b, /* MIDL Version 7.0.555 */
- 0,
- UserMarshalRoutines,
- 0, /* notify & notify_flag routine table */
- 0x1, /* MIDL flag */
- 0, /* cs routines */
- 0, /* proxy/server info */
- 0
- };
-
-const CInterfaceProxyVtbl * const _AccessibleHyperlink_ProxyVtblList[] =
-{
- ( CInterfaceProxyVtbl *) &_IAccessibleHyperlinkProxyVtbl,
- 0
-};
-
-const CInterfaceStubVtbl * const _AccessibleHyperlink_StubVtblList[] =
-{
- ( CInterfaceStubVtbl *) &_IAccessibleHyperlinkStubVtbl,
- 0
-};
-
-PCInterfaceName const _AccessibleHyperlink_InterfaceNamesList[] =
-{
- "IAccessibleHyperlink",
- 0
-};
-
-const IID * const _AccessibleHyperlink_BaseIIDList[] =
-{
- &IID_IAccessibleAction,
- 0
-};
-
-
-#define _AccessibleHyperlink_CHECK_IID(n) IID_GENERIC_CHECK_IID( _AccessibleHyperlink, pIID, n)
-
-int __stdcall _AccessibleHyperlink_IID_Lookup( const IID * pIID, int * pIndex )
-{
-
- if(!_AccessibleHyperlink_CHECK_IID(0))
- {
- *pIndex = 0;
- return 1;
- }
-
- return 0;
-}
-
-const ExtendedProxyFileInfo AccessibleHyperlink_ProxyFileInfo =
-{
- (PCInterfaceProxyVtblList *) & _AccessibleHyperlink_ProxyVtblList,
- (PCInterfaceStubVtblList *) & _AccessibleHyperlink_StubVtblList,
- (const PCInterfaceName * ) & _AccessibleHyperlink_InterfaceNamesList,
- (const IID ** ) & _AccessibleHyperlink_BaseIIDList,
- & _AccessibleHyperlink_IID_Lookup,
- 1,
- 2,
- 0, /* table of [async_uuid] interfaces */
- 0, /* Filler1 */
- 0, /* Filler2 */
- 0 /* Filler3 */
-};
-#pragma optimize("", on )
-#if _MSC_VER >= 1200
-#pragma warning(pop)
-#endif
-
-
-#endif /* !defined(_M_IA64) && !defined(_M_AMD64)*/
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleHypertext.h b/src/3rdparty/iaccessible2/generated/x86/AccessibleHypertext.h
deleted file mode 100644
index 180fb394b6..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleHypertext.h
+++ /dev/null
@@ -1,349 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:53 2012
- */
-/* Compiler settings for AccessibleHypertext.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-#ifndef COM_NO_WINDOWS_H
-#include "windows.h"
-#include "ole2.h"
-#endif /*COM_NO_WINDOWS_H*/
-
-#ifndef __AccessibleHypertext_h__
-#define __AccessibleHypertext_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifndef __IAccessibleHypertext_FWD_DEFINED__
-#define __IAccessibleHypertext_FWD_DEFINED__
-typedef interface IAccessibleHypertext IAccessibleHypertext;
-#endif /* __IAccessibleHypertext_FWD_DEFINED__ */
-
-
-/* header files for imported files */
-#include "objidl.h"
-#include "oaidl.h"
-#include "oleacc.h"
-#include "AccessibleText.h"
-#include "AccessibleHyperlink.h"
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#ifndef __IAccessibleHypertext_INTERFACE_DEFINED__
-#define __IAccessibleHypertext_INTERFACE_DEFINED__
-
-/* interface IAccessibleHypertext */
-/* [uuid][object] */
-
-
-EXTERN_C const IID IID_IAccessibleHypertext;
-
-#if defined(__cplusplus) && !defined(CINTERFACE)
-
- MIDL_INTERFACE("6B4F8BBF-F1F2-418a-B35E-A195BC4103B9")
- IAccessibleHypertext : public IAccessibleText
- {
- public:
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nHyperlinks(
- /* [retval][out] */ long *hyperlinkCount) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_hyperlink(
- /* [in] */ long index,
- /* [retval][out] */ IAccessibleHyperlink **hyperlink) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_hyperlinkIndex(
- /* [in] */ long charIndex,
- /* [retval][out] */ long *hyperlinkIndex) = 0;
-
- };
-
-#else /* C style interface */
-
- typedef struct IAccessibleHypertextVtbl
- {
- BEGIN_INTERFACE
-
- HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
- IAccessibleHypertext * This,
- /* [in] */ REFIID riid,
- /* [annotation][iid_is][out] */
- __RPC__deref_out void **ppvObject);
-
- ULONG ( STDMETHODCALLTYPE *AddRef )(
- IAccessibleHypertext * This);
-
- ULONG ( STDMETHODCALLTYPE *Release )(
- IAccessibleHypertext * This);
-
- HRESULT ( STDMETHODCALLTYPE *addSelection )(
- IAccessibleHypertext * This,
- /* [in] */ long startOffset,
- /* [in] */ long endOffset);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attributes )(
- IAccessibleHypertext * This,
- /* [in] */ long offset,
- /* [out] */ long *startOffset,
- /* [out] */ long *endOffset,
- /* [retval][out] */ BSTR *textAttributes);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_caretOffset )(
- IAccessibleHypertext * This,
- /* [retval][out] */ long *offset);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_characterExtents )(
- IAccessibleHypertext * This,
- /* [in] */ long offset,
- /* [in] */ enum IA2CoordinateType coordType,
- /* [out] */ long *x,
- /* [out] */ long *y,
- /* [out] */ long *width,
- /* [retval][out] */ long *height);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelections )(
- IAccessibleHypertext * This,
- /* [retval][out] */ long *nSelections);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_offsetAtPoint )(
- IAccessibleHypertext * This,
- /* [in] */ long x,
- /* [in] */ long y,
- /* [in] */ enum IA2CoordinateType coordType,
- /* [retval][out] */ long *offset);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selection )(
- IAccessibleHypertext * This,
- /* [in] */ long selectionIndex,
- /* [out] */ long *startOffset,
- /* [retval][out] */ long *endOffset);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_text )(
- IAccessibleHypertext * This,
- /* [in] */ long startOffset,
- /* [in] */ long endOffset,
- /* [retval][out] */ BSTR *text);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textBeforeOffset )(
- IAccessibleHypertext * This,
- /* [in] */ long offset,
- /* [in] */ enum IA2TextBoundaryType boundaryType,
- /* [out] */ long *startOffset,
- /* [out] */ long *endOffset,
- /* [retval][out] */ BSTR *text);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textAfterOffset )(
- IAccessibleHypertext * This,
- /* [in] */ long offset,
- /* [in] */ enum IA2TextBoundaryType boundaryType,
- /* [out] */ long *startOffset,
- /* [out] */ long *endOffset,
- /* [retval][out] */ BSTR *text);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textAtOffset )(
- IAccessibleHypertext * This,
- /* [in] */ long offset,
- /* [in] */ enum IA2TextBoundaryType boundaryType,
- /* [out] */ long *startOffset,
- /* [out] */ long *endOffset,
- /* [retval][out] */ BSTR *text);
-
- HRESULT ( STDMETHODCALLTYPE *removeSelection )(
- IAccessibleHypertext * This,
- /* [in] */ long selectionIndex);
-
- HRESULT ( STDMETHODCALLTYPE *setCaretOffset )(
- IAccessibleHypertext * This,
- /* [in] */ long offset);
-
- HRESULT ( STDMETHODCALLTYPE *setSelection )(
- IAccessibleHypertext * This,
- /* [in] */ long selectionIndex,
- /* [in] */ long startOffset,
- /* [in] */ long endOffset);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nCharacters )(
- IAccessibleHypertext * This,
- /* [retval][out] */ long *nCharacters);
-
- HRESULT ( STDMETHODCALLTYPE *scrollSubstringTo )(
- IAccessibleHypertext * This,
- /* [in] */ long startIndex,
- /* [in] */ long endIndex,
- /* [in] */ enum IA2ScrollType scrollType);
-
- HRESULT ( STDMETHODCALLTYPE *scrollSubstringToPoint )(
- IAccessibleHypertext * This,
- /* [in] */ long startIndex,
- /* [in] */ long endIndex,
- /* [in] */ enum IA2CoordinateType coordinateType,
- /* [in] */ long x,
- /* [in] */ long y);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_newText )(
- IAccessibleHypertext * This,
- /* [retval][out] */ IA2TextSegment *newText);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_oldText )(
- IAccessibleHypertext * This,
- /* [retval][out] */ IA2TextSegment *oldText);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nHyperlinks )(
- IAccessibleHypertext * This,
- /* [retval][out] */ long *hyperlinkCount);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_hyperlink )(
- IAccessibleHypertext * This,
- /* [in] */ long index,
- /* [retval][out] */ IAccessibleHyperlink **hyperlink);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_hyperlinkIndex )(
- IAccessibleHypertext * This,
- /* [in] */ long charIndex,
- /* [retval][out] */ long *hyperlinkIndex);
-
- END_INTERFACE
- } IAccessibleHypertextVtbl;
-
- interface IAccessibleHypertext
- {
- CONST_VTBL struct IAccessibleHypertextVtbl *lpVtbl;
- };
-
-
-
-#ifdef COBJMACROS
-
-
-#define IAccessibleHypertext_QueryInterface(This,riid,ppvObject) \
- ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
-
-#define IAccessibleHypertext_AddRef(This) \
- ( (This)->lpVtbl -> AddRef(This) )
-
-#define IAccessibleHypertext_Release(This) \
- ( (This)->lpVtbl -> Release(This) )
-
-
-#define IAccessibleHypertext_addSelection(This,startOffset,endOffset) \
- ( (This)->lpVtbl -> addSelection(This,startOffset,endOffset) )
-
-#define IAccessibleHypertext_get_attributes(This,offset,startOffset,endOffset,textAttributes) \
- ( (This)->lpVtbl -> get_attributes(This,offset,startOffset,endOffset,textAttributes) )
-
-#define IAccessibleHypertext_get_caretOffset(This,offset) \
- ( (This)->lpVtbl -> get_caretOffset(This,offset) )
-
-#define IAccessibleHypertext_get_characterExtents(This,offset,coordType,x,y,width,height) \
- ( (This)->lpVtbl -> get_characterExtents(This,offset,coordType,x,y,width,height) )
-
-#define IAccessibleHypertext_get_nSelections(This,nSelections) \
- ( (This)->lpVtbl -> get_nSelections(This,nSelections) )
-
-#define IAccessibleHypertext_get_offsetAtPoint(This,x,y,coordType,offset) \
- ( (This)->lpVtbl -> get_offsetAtPoint(This,x,y,coordType,offset) )
-
-#define IAccessibleHypertext_get_selection(This,selectionIndex,startOffset,endOffset) \
- ( (This)->lpVtbl -> get_selection(This,selectionIndex,startOffset,endOffset) )
-
-#define IAccessibleHypertext_get_text(This,startOffset,endOffset,text) \
- ( (This)->lpVtbl -> get_text(This,startOffset,endOffset,text) )
-
-#define IAccessibleHypertext_get_textBeforeOffset(This,offset,boundaryType,startOffset,endOffset,text) \
- ( (This)->lpVtbl -> get_textBeforeOffset(This,offset,boundaryType,startOffset,endOffset,text) )
-
-#define IAccessibleHypertext_get_textAfterOffset(This,offset,boundaryType,startOffset,endOffset,text) \
- ( (This)->lpVtbl -> get_textAfterOffset(This,offset,boundaryType,startOffset,endOffset,text) )
-
-#define IAccessibleHypertext_get_textAtOffset(This,offset,boundaryType,startOffset,endOffset,text) \
- ( (This)->lpVtbl -> get_textAtOffset(This,offset,boundaryType,startOffset,endOffset,text) )
-
-#define IAccessibleHypertext_removeSelection(This,selectionIndex) \
- ( (This)->lpVtbl -> removeSelection(This,selectionIndex) )
-
-#define IAccessibleHypertext_setCaretOffset(This,offset) \
- ( (This)->lpVtbl -> setCaretOffset(This,offset) )
-
-#define IAccessibleHypertext_setSelection(This,selectionIndex,startOffset,endOffset) \
- ( (This)->lpVtbl -> setSelection(This,selectionIndex,startOffset,endOffset) )
-
-#define IAccessibleHypertext_get_nCharacters(This,nCharacters) \
- ( (This)->lpVtbl -> get_nCharacters(This,nCharacters) )
-
-#define IAccessibleHypertext_scrollSubstringTo(This,startIndex,endIndex,scrollType) \
- ( (This)->lpVtbl -> scrollSubstringTo(This,startIndex,endIndex,scrollType) )
-
-#define IAccessibleHypertext_scrollSubstringToPoint(This,startIndex,endIndex,coordinateType,x,y) \
- ( (This)->lpVtbl -> scrollSubstringToPoint(This,startIndex,endIndex,coordinateType,x,y) )
-
-#define IAccessibleHypertext_get_newText(This,newText) \
- ( (This)->lpVtbl -> get_newText(This,newText) )
-
-#define IAccessibleHypertext_get_oldText(This,oldText) \
- ( (This)->lpVtbl -> get_oldText(This,oldText) )
-
-
-#define IAccessibleHypertext_get_nHyperlinks(This,hyperlinkCount) \
- ( (This)->lpVtbl -> get_nHyperlinks(This,hyperlinkCount) )
-
-#define IAccessibleHypertext_get_hyperlink(This,index,hyperlink) \
- ( (This)->lpVtbl -> get_hyperlink(This,index,hyperlink) )
-
-#define IAccessibleHypertext_get_hyperlinkIndex(This,charIndex,hyperlinkIndex) \
- ( (This)->lpVtbl -> get_hyperlinkIndex(This,charIndex,hyperlinkIndex) )
-
-#endif /* COBJMACROS */
-
-
-#endif /* C style interface */
-
-
-
-
-#endif /* __IAccessibleHypertext_INTERFACE_DEFINED__ */
-
-
-/* Additional Prototypes for ALL interfaces */
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleHypertext_i.c b/src/3rdparty/iaccessible2/generated/x86/AccessibleHypertext_i.c
deleted file mode 100644
index e6edec9fe7..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleHypertext_i.c
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
-
-/* link this file in with the server and any clients */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:53 2012
- */
-/* Compiler settings for AccessibleHypertext.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#include <rpc.h>
-#include <rpcndr.h>
-
-#ifdef _MIDL_USE_GUIDDEF_
-
-#ifndef INITGUID
-#define INITGUID
-#include <guiddef.h>
-#undef INITGUID
-#else
-#include <guiddef.h>
-#endif
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
-
-#else // !_MIDL_USE_GUIDDEF_
-
-#ifndef __IID_DEFINED__
-#define __IID_DEFINED__
-
-typedef struct _IID
-{
- unsigned long x;
- unsigned short s1;
- unsigned short s2;
- unsigned char c[8];
-} IID;
-
-#endif // __IID_DEFINED__
-
-#ifndef CLSID_DEFINED
-#define CLSID_DEFINED
-typedef IID CLSID;
-#endif // CLSID_DEFINED
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
-
-#endif !_MIDL_USE_GUIDDEF_
-
-MIDL_DEFINE_GUID(IID, IID_IAccessibleHypertext,0x6B4F8BBF,0xF1F2,0x418a,0xB3,0x5E,0xA1,0x95,0xBC,0x41,0x03,0xB9);
-
-#undef MIDL_DEFINE_GUID
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleHypertext_p.c b/src/3rdparty/iaccessible2/generated/x86/AccessibleHypertext_p.c
deleted file mode 100644
index 40eddde608..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleHypertext_p.c
+++ /dev/null
@@ -1,463 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the proxy stub code */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:53 2012
- */
-/* Compiler settings for AccessibleHypertext.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#if !defined(_M_IA64) && !defined(_M_AMD64)
-
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-#if _MSC_VER >= 1200
-#pragma warning(push)
-#endif
-
-#pragma warning( disable: 4211 ) /* redefine extern to static */
-#pragma warning( disable: 4232 ) /* dllimport identity*/
-#pragma warning( disable: 4024 ) /* array to pointer mapping*/
-#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */
-#pragma warning( disable: 4100 ) /* unreferenced arguments in x86 call */
-
-#pragma optimize("", off )
-
-#define USE_STUBLESS_PROXY
-
-
-/* verify that the <rpcproxy.h> version is high enough to compile this file*/
-#ifndef __REDQ_RPCPROXY_H_VERSION__
-#define __REQUIRED_RPCPROXY_H_VERSION__ 475
-#endif
-
-
-#include "rpcproxy.h"
-#ifndef __RPCPROXY_H_VERSION__
-#error this stub requires an updated version of <rpcproxy.h>
-#endif /* __RPCPROXY_H_VERSION__ */
-
-
-#include "AccessibleHypertext.h"
-
-#define TYPE_FORMAT_STRING_SIZE 29
-#define PROC_FORMAT_STRING_SIZE 121
-#define EXPR_FORMAT_STRING_SIZE 1
-#define TRANSMIT_AS_TABLE_SIZE 0
-#define WIRE_MARSHAL_TABLE_SIZE 0
-
-typedef struct _AccessibleHypertext_MIDL_TYPE_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
- } AccessibleHypertext_MIDL_TYPE_FORMAT_STRING;
-
-typedef struct _AccessibleHypertext_MIDL_PROC_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
- } AccessibleHypertext_MIDL_PROC_FORMAT_STRING;
-
-typedef struct _AccessibleHypertext_MIDL_EXPR_FORMAT_STRING
- {
- long Pad;
- unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
- } AccessibleHypertext_MIDL_EXPR_FORMAT_STRING;
-
-
-static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
-{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
-
-
-extern const AccessibleHypertext_MIDL_TYPE_FORMAT_STRING AccessibleHypertext__MIDL_TypeFormatString;
-extern const AccessibleHypertext_MIDL_PROC_FORMAT_STRING AccessibleHypertext__MIDL_ProcFormatString;
-extern const AccessibleHypertext_MIDL_EXPR_FORMAT_STRING AccessibleHypertext__MIDL_ExprFormatString;
-
-
-extern const MIDL_STUB_DESC Object_StubDesc;
-
-
-extern const MIDL_SERVER_INFO IAccessibleHypertext_ServerInfo;
-extern const MIDL_STUBLESS_PROXY_INFO IAccessibleHypertext_ProxyInfo;
-
-
-
-#if !defined(__RPC_WIN32__)
-#error Invalid build platform for this stub.
-#endif
-
-#if !(TARGET_IS_NT50_OR_LATER)
-#error You need Windows 2000 or later to run this stub because it uses these features:
-#error /robust command line switch.
-#error However, your C/C++ compilation flags indicate you intend to run this app on earlier systems.
-#error This app will fail with the RPC_X_WRONG_STUB_VERSION error.
-#endif
-
-
-static const AccessibleHypertext_MIDL_PROC_FORMAT_STRING AccessibleHypertext__MIDL_ProcFormatString =
- {
- 0,
- {
-
- /* Procedure get_nHyperlinks */
-
- 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 2 */ NdrFcLong( 0x0 ), /* 0 */
-/* 6 */ NdrFcShort( 0x16 ), /* 22 */
-/* 8 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 10 */ NdrFcShort( 0x0 ), /* 0 */
-/* 12 */ NdrFcShort( 0x24 ), /* 36 */
-/* 14 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 16 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 18 */ NdrFcShort( 0x0 ), /* 0 */
-/* 20 */ NdrFcShort( 0x0 ), /* 0 */
-/* 22 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter hyperlinkCount */
-
-/* 24 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 26 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 28 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 30 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 32 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 34 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_hyperlink */
-
-/* 36 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 38 */ NdrFcLong( 0x0 ), /* 0 */
-/* 42 */ NdrFcShort( 0x17 ), /* 23 */
-/* 44 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 46 */ NdrFcShort( 0x8 ), /* 8 */
-/* 48 */ NdrFcShort( 0x8 ), /* 8 */
-/* 50 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 52 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 54 */ NdrFcShort( 0x0 ), /* 0 */
-/* 56 */ NdrFcShort( 0x0 ), /* 0 */
-/* 58 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter index */
-
-/* 60 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 62 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 64 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter hyperlink */
-
-/* 66 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
-/* 68 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 70 */ NdrFcShort( 0x6 ), /* Type Offset=6 */
-
- /* Return value */
-
-/* 72 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 74 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 76 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_hyperlinkIndex */
-
-/* 78 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 80 */ NdrFcLong( 0x0 ), /* 0 */
-/* 84 */ NdrFcShort( 0x18 ), /* 24 */
-/* 86 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 88 */ NdrFcShort( 0x8 ), /* 8 */
-/* 90 */ NdrFcShort( 0x24 ), /* 36 */
-/* 92 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x3, /* 3 */
-/* 94 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 96 */ NdrFcShort( 0x0 ), /* 0 */
-/* 98 */ NdrFcShort( 0x0 ), /* 0 */
-/* 100 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter charIndex */
-
-/* 102 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 104 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 106 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter hyperlinkIndex */
-
-/* 108 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 110 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 112 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 114 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 116 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 118 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- 0x0
- }
- };
-
-static const AccessibleHypertext_MIDL_TYPE_FORMAT_STRING AccessibleHypertext__MIDL_TypeFormatString =
- {
- 0,
- {
- NdrFcShort( 0x0 ), /* 0 */
-/* 2 */
- 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
-/* 4 */ 0x8, /* FC_LONG */
- 0x5c, /* FC_PAD */
-/* 6 */
- 0x11, 0x10, /* FC_RP [pointer_deref] */
-/* 8 */ NdrFcShort( 0x2 ), /* Offset= 2 (10) */
-/* 10 */
- 0x2f, /* FC_IP */
- 0x5a, /* FC_CONSTANT_IID */
-/* 12 */ NdrFcLong( 0x1c20f2b ), /* 29495083 */
-/* 16 */ NdrFcShort( 0x3dd2 ), /* 15826 */
-/* 18 */ NdrFcShort( 0x400f ), /* 16399 */
-/* 20 */ 0x94, /* 148 */
- 0x9f, /* 159 */
-/* 22 */ 0xad, /* 173 */
- 0x0, /* 0 */
-/* 24 */ 0xbd, /* 189 */
- 0xab, /* 171 */
-/* 26 */ 0x1d, /* 29 */
- 0x41, /* 65 */
-
- 0x0
- }
- };
-
-
-/* Object interface: IUnknown, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
-
-
-/* Object interface: IAccessibleText, ver. 0.0,
- GUID={0x24FD2FFB,0x3AAD,0x4a08,{0x83,0x35,0xA3,0xAD,0x89,0xC0,0xFB,0x4B}} */
-
-
-/* Object interface: IAccessibleHypertext, ver. 0.0,
- GUID={0x6B4F8BBF,0xF1F2,0x418a,{0xB3,0x5E,0xA1,0x95,0xBC,0x41,0x03,0xB9}} */
-
-#pragma code_seg(".orpc")
-static const unsigned short IAccessibleHypertext_FormatStringOffsetTable[] =
- {
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- (unsigned short) -1,
- 0,
- 36,
- 78
- };
-
-static const MIDL_STUBLESS_PROXY_INFO IAccessibleHypertext_ProxyInfo =
- {
- &Object_StubDesc,
- AccessibleHypertext__MIDL_ProcFormatString.Format,
- &IAccessibleHypertext_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0
- };
-
-
-static const MIDL_SERVER_INFO IAccessibleHypertext_ServerInfo =
- {
- &Object_StubDesc,
- 0,
- AccessibleHypertext__MIDL_ProcFormatString.Format,
- &IAccessibleHypertext_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0,
- 0};
-CINTERFACE_PROXY_VTABLE(25) _IAccessibleHypertextProxyVtbl =
-{
- &IAccessibleHypertext_ProxyInfo,
- &IID_IAccessibleHypertext,
- IUnknown_QueryInterface_Proxy,
- IUnknown_AddRef_Proxy,
- IUnknown_Release_Proxy ,
- 0 /* IAccessibleText::addSelection */ ,
- 0 /* IAccessibleText::get_attributes */ ,
- 0 /* IAccessibleText::get_caretOffset */ ,
- 0 /* IAccessibleText::get_characterExtents */ ,
- 0 /* IAccessibleText::get_nSelections */ ,
- 0 /* IAccessibleText::get_offsetAtPoint */ ,
- 0 /* IAccessibleText::get_selection */ ,
- 0 /* IAccessibleText::get_text */ ,
- 0 /* IAccessibleText::get_textBeforeOffset */ ,
- 0 /* IAccessibleText::get_textAfterOffset */ ,
- 0 /* IAccessibleText::get_textAtOffset */ ,
- 0 /* IAccessibleText::removeSelection */ ,
- 0 /* IAccessibleText::setCaretOffset */ ,
- 0 /* IAccessibleText::setSelection */ ,
- 0 /* IAccessibleText::get_nCharacters */ ,
- 0 /* IAccessibleText::scrollSubstringTo */ ,
- 0 /* IAccessibleText::scrollSubstringToPoint */ ,
- 0 /* IAccessibleText::get_newText */ ,
- 0 /* IAccessibleText::get_oldText */ ,
- (void *) (INT_PTR) -1 /* IAccessibleHypertext::get_nHyperlinks */ ,
- (void *) (INT_PTR) -1 /* IAccessibleHypertext::get_hyperlink */ ,
- (void *) (INT_PTR) -1 /* IAccessibleHypertext::get_hyperlinkIndex */
-};
-
-
-static const PRPC_STUB_FUNCTION IAccessibleHypertext_table[] =
-{
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- STUB_FORWARDING_FUNCTION,
- NdrStubCall2,
- NdrStubCall2,
- NdrStubCall2
-};
-
-CInterfaceStubVtbl _IAccessibleHypertextStubVtbl =
-{
- &IID_IAccessibleHypertext,
- &IAccessibleHypertext_ServerInfo,
- 25,
- &IAccessibleHypertext_table[-3],
- CStdStubBuffer_DELEGATING_METHODS
-};
-
-static const MIDL_STUB_DESC Object_StubDesc =
- {
- 0,
- NdrOleAllocate,
- NdrOleFree,
- 0,
- 0,
- 0,
- 0,
- 0,
- AccessibleHypertext__MIDL_TypeFormatString.Format,
- 1, /* -error bounds_check flag */
- 0x50002, /* Ndr library version */
- 0,
- 0x700022b, /* MIDL Version 7.0.555 */
- 0,
- 0,
- 0, /* notify & notify_flag routine table */
- 0x1, /* MIDL flag */
- 0, /* cs routines */
- 0, /* proxy/server info */
- 0
- };
-
-const CInterfaceProxyVtbl * const _AccessibleHypertext_ProxyVtblList[] =
-{
- ( CInterfaceProxyVtbl *) &_IAccessibleHypertextProxyVtbl,
- 0
-};
-
-const CInterfaceStubVtbl * const _AccessibleHypertext_StubVtblList[] =
-{
- ( CInterfaceStubVtbl *) &_IAccessibleHypertextStubVtbl,
- 0
-};
-
-PCInterfaceName const _AccessibleHypertext_InterfaceNamesList[] =
-{
- "IAccessibleHypertext",
- 0
-};
-
-const IID * const _AccessibleHypertext_BaseIIDList[] =
-{
- &IID_IAccessibleText,
- 0
-};
-
-
-#define _AccessibleHypertext_CHECK_IID(n) IID_GENERIC_CHECK_IID( _AccessibleHypertext, pIID, n)
-
-int __stdcall _AccessibleHypertext_IID_Lookup( const IID * pIID, int * pIndex )
-{
-
- if(!_AccessibleHypertext_CHECK_IID(0))
- {
- *pIndex = 0;
- return 1;
- }
-
- return 0;
-}
-
-const ExtendedProxyFileInfo AccessibleHypertext_ProxyFileInfo =
-{
- (PCInterfaceProxyVtblList *) & _AccessibleHypertext_ProxyVtblList,
- (PCInterfaceStubVtblList *) & _AccessibleHypertext_StubVtblList,
- (const PCInterfaceName * ) & _AccessibleHypertext_InterfaceNamesList,
- (const IID ** ) & _AccessibleHypertext_BaseIIDList,
- & _AccessibleHypertext_IID_Lookup,
- 1,
- 2,
- 0, /* table of [async_uuid] interfaces */
- 0, /* Filler1 */
- 0, /* Filler2 */
- 0 /* Filler3 */
-};
-#pragma optimize("", on )
-#if _MSC_VER >= 1200
-#pragma warning(pop)
-#endif
-
-
-#endif /* !defined(_M_IA64) && !defined(_M_AMD64)*/
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleImage.h b/src/3rdparty/iaccessible2/generated/x86/AccessibleImage.h
deleted file mode 100644
index d240bb6156..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleImage.h
+++ /dev/null
@@ -1,185 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:53 2012
- */
-/* Compiler settings for AccessibleImage.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-#ifndef COM_NO_WINDOWS_H
-#include "windows.h"
-#include "ole2.h"
-#endif /*COM_NO_WINDOWS_H*/
-
-#ifndef __AccessibleImage_h__
-#define __AccessibleImage_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifndef __IAccessibleImage_FWD_DEFINED__
-#define __IAccessibleImage_FWD_DEFINED__
-typedef interface IAccessibleImage IAccessibleImage;
-#endif /* __IAccessibleImage_FWD_DEFINED__ */
-
-
-/* header files for imported files */
-#include "objidl.h"
-#include "oaidl.h"
-#include "oleacc.h"
-#include "IA2CommonTypes.h"
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#ifndef __IAccessibleImage_INTERFACE_DEFINED__
-#define __IAccessibleImage_INTERFACE_DEFINED__
-
-/* interface IAccessibleImage */
-/* [uuid][object] */
-
-
-EXTERN_C const IID IID_IAccessibleImage;
-
-#if defined(__cplusplus) && !defined(CINTERFACE)
-
- MIDL_INTERFACE("FE5ABB3D-615E-4f7b-909F-5F0EDA9E8DDE")
- IAccessibleImage : public IUnknown
- {
- public:
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_description(
- /* [retval][out] */ BSTR *description) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_imagePosition(
- /* [in] */ enum IA2CoordinateType coordinateType,
- /* [out] */ long *x,
- /* [retval][out] */ long *y) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_imageSize(
- /* [out] */ long *height,
- /* [retval][out] */ long *width) = 0;
-
- };
-
-#else /* C style interface */
-
- typedef struct IAccessibleImageVtbl
- {
- BEGIN_INTERFACE
-
- HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
- IAccessibleImage * This,
- /* [in] */ REFIID riid,
- /* [annotation][iid_is][out] */
- __RPC__deref_out void **ppvObject);
-
- ULONG ( STDMETHODCALLTYPE *AddRef )(
- IAccessibleImage * This);
-
- ULONG ( STDMETHODCALLTYPE *Release )(
- IAccessibleImage * This);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_description )(
- IAccessibleImage * This,
- /* [retval][out] */ BSTR *description);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_imagePosition )(
- IAccessibleImage * This,
- /* [in] */ enum IA2CoordinateType coordinateType,
- /* [out] */ long *x,
- /* [retval][out] */ long *y);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_imageSize )(
- IAccessibleImage * This,
- /* [out] */ long *height,
- /* [retval][out] */ long *width);
-
- END_INTERFACE
- } IAccessibleImageVtbl;
-
- interface IAccessibleImage
- {
- CONST_VTBL struct IAccessibleImageVtbl *lpVtbl;
- };
-
-
-
-#ifdef COBJMACROS
-
-
-#define IAccessibleImage_QueryInterface(This,riid,ppvObject) \
- ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
-
-#define IAccessibleImage_AddRef(This) \
- ( (This)->lpVtbl -> AddRef(This) )
-
-#define IAccessibleImage_Release(This) \
- ( (This)->lpVtbl -> Release(This) )
-
-
-#define IAccessibleImage_get_description(This,description) \
- ( (This)->lpVtbl -> get_description(This,description) )
-
-#define IAccessibleImage_get_imagePosition(This,coordinateType,x,y) \
- ( (This)->lpVtbl -> get_imagePosition(This,coordinateType,x,y) )
-
-#define IAccessibleImage_get_imageSize(This,height,width) \
- ( (This)->lpVtbl -> get_imageSize(This,height,width) )
-
-#endif /* COBJMACROS */
-
-
-#endif /* C style interface */
-
-
-
-
-#endif /* __IAccessibleImage_INTERFACE_DEFINED__ */
-
-
-/* Additional Prototypes for ALL interfaces */
-
-unsigned long __RPC_USER BSTR_UserSize( unsigned long *, unsigned long , BSTR * );
-unsigned char * __RPC_USER BSTR_UserMarshal( unsigned long *, unsigned char *, BSTR * );
-unsigned char * __RPC_USER BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * );
-void __RPC_USER BSTR_UserFree( unsigned long *, BSTR * );
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleImage_i.c b/src/3rdparty/iaccessible2/generated/x86/AccessibleImage_i.c
deleted file mode 100644
index 37fa8696d1..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleImage_i.c
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
-
-/* link this file in with the server and any clients */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:53 2012
- */
-/* Compiler settings for AccessibleImage.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#include <rpc.h>
-#include <rpcndr.h>
-
-#ifdef _MIDL_USE_GUIDDEF_
-
-#ifndef INITGUID
-#define INITGUID
-#include <guiddef.h>
-#undef INITGUID
-#else
-#include <guiddef.h>
-#endif
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
-
-#else // !_MIDL_USE_GUIDDEF_
-
-#ifndef __IID_DEFINED__
-#define __IID_DEFINED__
-
-typedef struct _IID
-{
- unsigned long x;
- unsigned short s1;
- unsigned short s2;
- unsigned char c[8];
-} IID;
-
-#endif // __IID_DEFINED__
-
-#ifndef CLSID_DEFINED
-#define CLSID_DEFINED
-typedef IID CLSID;
-#endif // CLSID_DEFINED
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
-
-#endif !_MIDL_USE_GUIDDEF_
-
-MIDL_DEFINE_GUID(IID, IID_IAccessibleImage,0xFE5ABB3D,0x615E,0x4f7b,0x90,0x9F,0x5F,0x0E,0xDA,0x9E,0x8D,0xDE);
-
-#undef MIDL_DEFINE_GUID
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleImage_p.c b/src/3rdparty/iaccessible2/generated/x86/AccessibleImage_p.c
deleted file mode 100644
index daa8af2e29..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleImage_p.c
+++ /dev/null
@@ -1,423 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the proxy stub code */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:53 2012
- */
-/* Compiler settings for AccessibleImage.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#if !defined(_M_IA64) && !defined(_M_AMD64)
-
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-#if _MSC_VER >= 1200
-#pragma warning(push)
-#endif
-
-#pragma warning( disable: 4211 ) /* redefine extern to static */
-#pragma warning( disable: 4232 ) /* dllimport identity*/
-#pragma warning( disable: 4024 ) /* array to pointer mapping*/
-#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */
-#pragma warning( disable: 4100 ) /* unreferenced arguments in x86 call */
-
-#pragma optimize("", off )
-
-#define USE_STUBLESS_PROXY
-
-
-/* verify that the <rpcproxy.h> version is high enough to compile this file*/
-#ifndef __REDQ_RPCPROXY_H_VERSION__
-#define __REQUIRED_RPCPROXY_H_VERSION__ 475
-#endif
-
-
-#include "rpcproxy.h"
-#ifndef __RPCPROXY_H_VERSION__
-#error this stub requires an updated version of <rpcproxy.h>
-#endif /* __RPCPROXY_H_VERSION__ */
-
-
-#include "AccessibleImage.h"
-
-#define TYPE_FORMAT_STRING_SIZE 47
-#define PROC_FORMAT_STRING_SIZE 127
-#define EXPR_FORMAT_STRING_SIZE 1
-#define TRANSMIT_AS_TABLE_SIZE 0
-#define WIRE_MARSHAL_TABLE_SIZE 1
-
-typedef struct _AccessibleImage_MIDL_TYPE_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
- } AccessibleImage_MIDL_TYPE_FORMAT_STRING;
-
-typedef struct _AccessibleImage_MIDL_PROC_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
- } AccessibleImage_MIDL_PROC_FORMAT_STRING;
-
-typedef struct _AccessibleImage_MIDL_EXPR_FORMAT_STRING
- {
- long Pad;
- unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
- } AccessibleImage_MIDL_EXPR_FORMAT_STRING;
-
-
-static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
-{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
-
-
-extern const AccessibleImage_MIDL_TYPE_FORMAT_STRING AccessibleImage__MIDL_TypeFormatString;
-extern const AccessibleImage_MIDL_PROC_FORMAT_STRING AccessibleImage__MIDL_ProcFormatString;
-extern const AccessibleImage_MIDL_EXPR_FORMAT_STRING AccessibleImage__MIDL_ExprFormatString;
-
-
-extern const MIDL_STUB_DESC Object_StubDesc;
-
-
-extern const MIDL_SERVER_INFO IAccessibleImage_ServerInfo;
-extern const MIDL_STUBLESS_PROXY_INFO IAccessibleImage_ProxyInfo;
-
-
-extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ];
-
-#if !defined(__RPC_WIN32__)
-#error Invalid build platform for this stub.
-#endif
-
-#if !(TARGET_IS_NT50_OR_LATER)
-#error You need Windows 2000 or later to run this stub because it uses these features:
-#error /robust command line switch.
-#error However, your C/C++ compilation flags indicate you intend to run this app on earlier systems.
-#error This app will fail with the RPC_X_WRONG_STUB_VERSION error.
-#endif
-
-
-static const AccessibleImage_MIDL_PROC_FORMAT_STRING AccessibleImage__MIDL_ProcFormatString =
- {
- 0,
- {
-
- /* Procedure get_description */
-
- 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 2 */ NdrFcLong( 0x0 ), /* 0 */
-/* 6 */ NdrFcShort( 0x3 ), /* 3 */
-/* 8 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 10 */ NdrFcShort( 0x0 ), /* 0 */
-/* 12 */ NdrFcShort( 0x8 ), /* 8 */
-/* 14 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 16 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 18 */ NdrFcShort( 0x1 ), /* 1 */
-/* 20 */ NdrFcShort( 0x0 ), /* 0 */
-/* 22 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter description */
-
-/* 24 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 26 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 28 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
-
- /* Return value */
-
-/* 30 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 32 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 34 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_imagePosition */
-
-/* 36 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 38 */ NdrFcLong( 0x0 ), /* 0 */
-/* 42 */ NdrFcShort( 0x4 ), /* 4 */
-/* 44 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
-/* 46 */ NdrFcShort( 0x6 ), /* 6 */
-/* 48 */ NdrFcShort( 0x40 ), /* 64 */
-/* 50 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x4, /* 4 */
-/* 52 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 54 */ NdrFcShort( 0x0 ), /* 0 */
-/* 56 */ NdrFcShort( 0x0 ), /* 0 */
-/* 58 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter coordinateType */
-
-/* 60 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 62 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 64 */ 0xd, /* FC_ENUM16 */
- 0x0, /* 0 */
-
- /* Parameter x */
-
-/* 66 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 68 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 70 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter y */
-
-/* 72 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 74 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 76 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 78 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 80 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 82 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_imageSize */
-
-/* 84 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 86 */ NdrFcLong( 0x0 ), /* 0 */
-/* 90 */ NdrFcShort( 0x5 ), /* 5 */
-/* 92 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 94 */ NdrFcShort( 0x0 ), /* 0 */
-/* 96 */ NdrFcShort( 0x40 ), /* 64 */
-/* 98 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x3, /* 3 */
-/* 100 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 102 */ NdrFcShort( 0x0 ), /* 0 */
-/* 104 */ NdrFcShort( 0x0 ), /* 0 */
-/* 106 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter height */
-
-/* 108 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 110 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 112 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter width */
-
-/* 114 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 116 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 118 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 120 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 122 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 124 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- 0x0
- }
- };
-
-static const AccessibleImage_MIDL_TYPE_FORMAT_STRING AccessibleImage__MIDL_TypeFormatString =
- {
- 0,
- {
- NdrFcShort( 0x0 ), /* 0 */
-/* 2 */
- 0x11, 0x4, /* FC_RP [alloced_on_stack] */
-/* 4 */ NdrFcShort( 0x1c ), /* Offset= 28 (32) */
-/* 6 */
- 0x13, 0x0, /* FC_OP */
-/* 8 */ NdrFcShort( 0xe ), /* Offset= 14 (22) */
-/* 10 */
- 0x1b, /* FC_CARRAY */
- 0x1, /* 1 */
-/* 12 */ NdrFcShort( 0x2 ), /* 2 */
-/* 14 */ 0x9, /* Corr desc: FC_ULONG */
- 0x0, /* */
-/* 16 */ NdrFcShort( 0xfffc ), /* -4 */
-/* 18 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 20 */ 0x6, /* FC_SHORT */
- 0x5b, /* FC_END */
-/* 22 */
- 0x17, /* FC_CSTRUCT */
- 0x3, /* 3 */
-/* 24 */ NdrFcShort( 0x8 ), /* 8 */
-/* 26 */ NdrFcShort( 0xfff0 ), /* Offset= -16 (10) */
-/* 28 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 30 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 32 */ 0xb4, /* FC_USER_MARSHAL */
- 0x83, /* 131 */
-/* 34 */ NdrFcShort( 0x0 ), /* 0 */
-/* 36 */ NdrFcShort( 0x4 ), /* 4 */
-/* 38 */ NdrFcShort( 0x0 ), /* 0 */
-/* 40 */ NdrFcShort( 0xffde ), /* Offset= -34 (6) */
-/* 42 */
- 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
-/* 44 */ 0x8, /* FC_LONG */
- 0x5c, /* FC_PAD */
-
- 0x0
- }
- };
-
-static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ] =
- {
-
- {
- BSTR_UserSize
- ,BSTR_UserMarshal
- ,BSTR_UserUnmarshal
- ,BSTR_UserFree
- }
-
- };
-
-
-
-/* Object interface: IUnknown, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
-
-
-/* Object interface: IAccessibleImage, ver. 0.0,
- GUID={0xFE5ABB3D,0x615E,0x4f7b,{0x90,0x9F,0x5F,0x0E,0xDA,0x9E,0x8D,0xDE}} */
-
-#pragma code_seg(".orpc")
-static const unsigned short IAccessibleImage_FormatStringOffsetTable[] =
- {
- 0,
- 36,
- 84
- };
-
-static const MIDL_STUBLESS_PROXY_INFO IAccessibleImage_ProxyInfo =
- {
- &Object_StubDesc,
- AccessibleImage__MIDL_ProcFormatString.Format,
- &IAccessibleImage_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0
- };
-
-
-static const MIDL_SERVER_INFO IAccessibleImage_ServerInfo =
- {
- &Object_StubDesc,
- 0,
- AccessibleImage__MIDL_ProcFormatString.Format,
- &IAccessibleImage_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0,
- 0};
-CINTERFACE_PROXY_VTABLE(6) _IAccessibleImageProxyVtbl =
-{
- &IAccessibleImage_ProxyInfo,
- &IID_IAccessibleImage,
- IUnknown_QueryInterface_Proxy,
- IUnknown_AddRef_Proxy,
- IUnknown_Release_Proxy ,
- (void *) (INT_PTR) -1 /* IAccessibleImage::get_description */ ,
- (void *) (INT_PTR) -1 /* IAccessibleImage::get_imagePosition */ ,
- (void *) (INT_PTR) -1 /* IAccessibleImage::get_imageSize */
-};
-
-const CInterfaceStubVtbl _IAccessibleImageStubVtbl =
-{
- &IID_IAccessibleImage,
- &IAccessibleImage_ServerInfo,
- 6,
- 0, /* pure interpreted */
- CStdStubBuffer_METHODS
-};
-
-static const MIDL_STUB_DESC Object_StubDesc =
- {
- 0,
- NdrOleAllocate,
- NdrOleFree,
- 0,
- 0,
- 0,
- 0,
- 0,
- AccessibleImage__MIDL_TypeFormatString.Format,
- 1, /* -error bounds_check flag */
- 0x50002, /* Ndr library version */
- 0,
- 0x700022b, /* MIDL Version 7.0.555 */
- 0,
- UserMarshalRoutines,
- 0, /* notify & notify_flag routine table */
- 0x1, /* MIDL flag */
- 0, /* cs routines */
- 0, /* proxy/server info */
- 0
- };
-
-const CInterfaceProxyVtbl * const _AccessibleImage_ProxyVtblList[] =
-{
- ( CInterfaceProxyVtbl *) &_IAccessibleImageProxyVtbl,
- 0
-};
-
-const CInterfaceStubVtbl * const _AccessibleImage_StubVtblList[] =
-{
- ( CInterfaceStubVtbl *) &_IAccessibleImageStubVtbl,
- 0
-};
-
-PCInterfaceName const _AccessibleImage_InterfaceNamesList[] =
-{
- "IAccessibleImage",
- 0
-};
-
-
-#define _AccessibleImage_CHECK_IID(n) IID_GENERIC_CHECK_IID( _AccessibleImage, pIID, n)
-
-int __stdcall _AccessibleImage_IID_Lookup( const IID * pIID, int * pIndex )
-{
-
- if(!_AccessibleImage_CHECK_IID(0))
- {
- *pIndex = 0;
- return 1;
- }
-
- return 0;
-}
-
-const ExtendedProxyFileInfo AccessibleImage_ProxyFileInfo =
-{
- (PCInterfaceProxyVtblList *) & _AccessibleImage_ProxyVtblList,
- (PCInterfaceStubVtblList *) & _AccessibleImage_StubVtblList,
- (const PCInterfaceName * ) & _AccessibleImage_InterfaceNamesList,
- 0, /* no delegation */
- & _AccessibleImage_IID_Lookup,
- 1,
- 2,
- 0, /* table of [async_uuid] interfaces */
- 0, /* Filler1 */
- 0, /* Filler2 */
- 0 /* Filler3 */
-};
-#pragma optimize("", on )
-#if _MSC_VER >= 1200
-#pragma warning(pop)
-#endif
-
-
-#endif /* !defined(_M_IA64) && !defined(_M_AMD64)*/
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleRelation.h b/src/3rdparty/iaccessible2/generated/x86/AccessibleRelation.h
deleted file mode 100644
index b24908a421..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleRelation.h
+++ /dev/null
@@ -1,244 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:54 2012
- */
-/* Compiler settings for AccessibleRelation.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-#ifndef COM_NO_WINDOWS_H
-#include "windows.h"
-#include "ole2.h"
-#endif /*COM_NO_WINDOWS_H*/
-
-#ifndef __AccessibleRelation_h__
-#define __AccessibleRelation_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifndef __IAccessibleRelation_FWD_DEFINED__
-#define __IAccessibleRelation_FWD_DEFINED__
-typedef interface IAccessibleRelation IAccessibleRelation;
-#endif /* __IAccessibleRelation_FWD_DEFINED__ */
-
-
-/* header files for imported files */
-#include "objidl.h"
-#include "oaidl.h"
-#include "oleacc.h"
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-/* interface __MIDL_itf_AccessibleRelation_0000_0000 */
-/* [local] */
-
-#define IA2_RELATION_CONTROLLED_BY ( L"controlledBy" )
-
-#define IA2_RELATION_CONTROLLER_FOR ( L"controllerFor" )
-
-#define IA2_RELATION_DESCRIBED_BY ( L"describedBy" )
-
-#define IA2_RELATION_DESCRIPTION_FOR ( L"descriptionFor" )
-
-#define IA2_RELATION_EMBEDDED_BY ( L"embeddedBy" )
-
-#define IA2_RELATION_EMBEDS ( L"embeds" )
-
-#define IA2_RELATION_FLOWS_FROM ( L"flowsFrom" )
-
-#define IA2_RELATION_FLOWS_TO ( L"flowsTo" )
-
-#define IA2_RELATION_LABEL_FOR ( L"labelFor" )
-
-#define IA2_RELATION_LABELED_BY ( L"labelledBy" )
-
-#define IA2_RELATION_LABELLED_BY ( L"labelledBy" )
-
-#define IA2_RELATION_MEMBER_OF ( L"memberOf" )
-
-#define IA2_RELATION_NODE_CHILD_OF ( L"nodeChildOf" )
-
-#define IA2_RELATION_PARENT_WINDOW_OF ( L"parentWindowOf" )
-
-#define IA2_RELATION_POPUP_FOR ( L"popupFor" )
-
-#define IA2_RELATION_SUBWINDOW_OF ( L"subwindowOf" )
-
-
-
-extern RPC_IF_HANDLE __MIDL_itf_AccessibleRelation_0000_0000_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_AccessibleRelation_0000_0000_v0_0_s_ifspec;
-
-#ifndef __IAccessibleRelation_INTERFACE_DEFINED__
-#define __IAccessibleRelation_INTERFACE_DEFINED__
-
-/* interface IAccessibleRelation */
-/* [uuid][object] */
-
-
-EXTERN_C const IID IID_IAccessibleRelation;
-
-#if defined(__cplusplus) && !defined(CINTERFACE)
-
- MIDL_INTERFACE("7CDF86EE-C3DA-496a-BDA4-281B336E1FDC")
- IAccessibleRelation : public IUnknown
- {
- public:
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_relationType(
- /* [retval][out] */ BSTR *relationType) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_localizedRelationType(
- /* [retval][out] */ BSTR *localizedRelationType) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nTargets(
- /* [retval][out] */ long *nTargets) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_target(
- /* [in] */ long targetIndex,
- /* [retval][out] */ IUnknown **target) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_targets(
- /* [in] */ long maxTargets,
- /* [length_is][size_is][out] */ IUnknown **targets,
- /* [retval][out] */ long *nTargets) = 0;
-
- };
-
-#else /* C style interface */
-
- typedef struct IAccessibleRelationVtbl
- {
- BEGIN_INTERFACE
-
- HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
- IAccessibleRelation * This,
- /* [in] */ REFIID riid,
- /* [annotation][iid_is][out] */
- __RPC__deref_out void **ppvObject);
-
- ULONG ( STDMETHODCALLTYPE *AddRef )(
- IAccessibleRelation * This);
-
- ULONG ( STDMETHODCALLTYPE *Release )(
- IAccessibleRelation * This);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relationType )(
- IAccessibleRelation * This,
- /* [retval][out] */ BSTR *relationType);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedRelationType )(
- IAccessibleRelation * This,
- /* [retval][out] */ BSTR *localizedRelationType);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nTargets )(
- IAccessibleRelation * This,
- /* [retval][out] */ long *nTargets);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_target )(
- IAccessibleRelation * This,
- /* [in] */ long targetIndex,
- /* [retval][out] */ IUnknown **target);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_targets )(
- IAccessibleRelation * This,
- /* [in] */ long maxTargets,
- /* [length_is][size_is][out] */ IUnknown **targets,
- /* [retval][out] */ long *nTargets);
-
- END_INTERFACE
- } IAccessibleRelationVtbl;
-
- interface IAccessibleRelation
- {
- CONST_VTBL struct IAccessibleRelationVtbl *lpVtbl;
- };
-
-
-
-#ifdef COBJMACROS
-
-
-#define IAccessibleRelation_QueryInterface(This,riid,ppvObject) \
- ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
-
-#define IAccessibleRelation_AddRef(This) \
- ( (This)->lpVtbl -> AddRef(This) )
-
-#define IAccessibleRelation_Release(This) \
- ( (This)->lpVtbl -> Release(This) )
-
-
-#define IAccessibleRelation_get_relationType(This,relationType) \
- ( (This)->lpVtbl -> get_relationType(This,relationType) )
-
-#define IAccessibleRelation_get_localizedRelationType(This,localizedRelationType) \
- ( (This)->lpVtbl -> get_localizedRelationType(This,localizedRelationType) )
-
-#define IAccessibleRelation_get_nTargets(This,nTargets) \
- ( (This)->lpVtbl -> get_nTargets(This,nTargets) )
-
-#define IAccessibleRelation_get_target(This,targetIndex,target) \
- ( (This)->lpVtbl -> get_target(This,targetIndex,target) )
-
-#define IAccessibleRelation_get_targets(This,maxTargets,targets,nTargets) \
- ( (This)->lpVtbl -> get_targets(This,maxTargets,targets,nTargets) )
-
-#endif /* COBJMACROS */
-
-
-#endif /* C style interface */
-
-
-
-
-#endif /* __IAccessibleRelation_INTERFACE_DEFINED__ */
-
-
-/* Additional Prototypes for ALL interfaces */
-
-unsigned long __RPC_USER BSTR_UserSize( unsigned long *, unsigned long , BSTR * );
-unsigned char * __RPC_USER BSTR_UserMarshal( unsigned long *, unsigned char *, BSTR * );
-unsigned char * __RPC_USER BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * );
-void __RPC_USER BSTR_UserFree( unsigned long *, BSTR * );
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleRelation_i.c b/src/3rdparty/iaccessible2/generated/x86/AccessibleRelation_i.c
deleted file mode 100644
index 58c8b78be7..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleRelation_i.c
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
-
-/* link this file in with the server and any clients */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:54 2012
- */
-/* Compiler settings for AccessibleRelation.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#include <rpc.h>
-#include <rpcndr.h>
-
-#ifdef _MIDL_USE_GUIDDEF_
-
-#ifndef INITGUID
-#define INITGUID
-#include <guiddef.h>
-#undef INITGUID
-#else
-#include <guiddef.h>
-#endif
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
-
-#else // !_MIDL_USE_GUIDDEF_
-
-#ifndef __IID_DEFINED__
-#define __IID_DEFINED__
-
-typedef struct _IID
-{
- unsigned long x;
- unsigned short s1;
- unsigned short s2;
- unsigned char c[8];
-} IID;
-
-#endif // __IID_DEFINED__
-
-#ifndef CLSID_DEFINED
-#define CLSID_DEFINED
-typedef IID CLSID;
-#endif // CLSID_DEFINED
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
-
-#endif !_MIDL_USE_GUIDDEF_
-
-MIDL_DEFINE_GUID(IID, IID_IAccessibleRelation,0x7CDF86EE,0xC3DA,0x496a,0xBD,0xA4,0x28,0x1B,0x33,0x6E,0x1F,0xDC);
-
-#undef MIDL_DEFINE_GUID
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleRelation_p.c b/src/3rdparty/iaccessible2/generated/x86/AccessibleRelation_p.c
deleted file mode 100644
index a3a6cbd632..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleRelation_p.c
+++ /dev/null
@@ -1,527 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the proxy stub code */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:54 2012
- */
-/* Compiler settings for AccessibleRelation.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#if !defined(_M_IA64) && !defined(_M_AMD64)
-
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-#if _MSC_VER >= 1200
-#pragma warning(push)
-#endif
-
-#pragma warning( disable: 4211 ) /* redefine extern to static */
-#pragma warning( disable: 4232 ) /* dllimport identity*/
-#pragma warning( disable: 4024 ) /* array to pointer mapping*/
-#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */
-#pragma warning( disable: 4100 ) /* unreferenced arguments in x86 call */
-
-#pragma optimize("", off )
-
-#define USE_STUBLESS_PROXY
-
-
-/* verify that the <rpcproxy.h> version is high enough to compile this file*/
-#ifndef __REDQ_RPCPROXY_H_VERSION__
-#define __REQUIRED_RPCPROXY_H_VERSION__ 475
-#endif
-
-
-#include "rpcproxy.h"
-#ifndef __RPCPROXY_H_VERSION__
-#error this stub requires an updated version of <rpcproxy.h>
-#endif /* __RPCPROXY_H_VERSION__ */
-
-
-#include "AccessibleRelation.h"
-
-#define TYPE_FORMAT_STRING_SIZE 95
-#define PROC_FORMAT_STRING_SIZE 199
-#define EXPR_FORMAT_STRING_SIZE 1
-#define TRANSMIT_AS_TABLE_SIZE 0
-#define WIRE_MARSHAL_TABLE_SIZE 1
-
-typedef struct _AccessibleRelation_MIDL_TYPE_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
- } AccessibleRelation_MIDL_TYPE_FORMAT_STRING;
-
-typedef struct _AccessibleRelation_MIDL_PROC_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
- } AccessibleRelation_MIDL_PROC_FORMAT_STRING;
-
-typedef struct _AccessibleRelation_MIDL_EXPR_FORMAT_STRING
- {
- long Pad;
- unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
- } AccessibleRelation_MIDL_EXPR_FORMAT_STRING;
-
-
-static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
-{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
-
-
-extern const AccessibleRelation_MIDL_TYPE_FORMAT_STRING AccessibleRelation__MIDL_TypeFormatString;
-extern const AccessibleRelation_MIDL_PROC_FORMAT_STRING AccessibleRelation__MIDL_ProcFormatString;
-extern const AccessibleRelation_MIDL_EXPR_FORMAT_STRING AccessibleRelation__MIDL_ExprFormatString;
-
-
-extern const MIDL_STUB_DESC Object_StubDesc;
-
-
-extern const MIDL_SERVER_INFO IAccessibleRelation_ServerInfo;
-extern const MIDL_STUBLESS_PROXY_INFO IAccessibleRelation_ProxyInfo;
-
-
-extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ];
-
-#if !defined(__RPC_WIN32__)
-#error Invalid build platform for this stub.
-#endif
-
-#if !(TARGET_IS_NT50_OR_LATER)
-#error You need Windows 2000 or later to run this stub because it uses these features:
-#error /robust command line switch.
-#error However, your C/C++ compilation flags indicate you intend to run this app on earlier systems.
-#error This app will fail with the RPC_X_WRONG_STUB_VERSION error.
-#endif
-
-
-static const AccessibleRelation_MIDL_PROC_FORMAT_STRING AccessibleRelation__MIDL_ProcFormatString =
- {
- 0,
- {
-
- /* Procedure get_relationType */
-
- 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 2 */ NdrFcLong( 0x0 ), /* 0 */
-/* 6 */ NdrFcShort( 0x3 ), /* 3 */
-/* 8 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 10 */ NdrFcShort( 0x0 ), /* 0 */
-/* 12 */ NdrFcShort( 0x8 ), /* 8 */
-/* 14 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 16 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 18 */ NdrFcShort( 0x1 ), /* 1 */
-/* 20 */ NdrFcShort( 0x0 ), /* 0 */
-/* 22 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter relationType */
-
-/* 24 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 26 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 28 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
-
- /* Return value */
-
-/* 30 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 32 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 34 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_localizedRelationType */
-
-/* 36 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 38 */ NdrFcLong( 0x0 ), /* 0 */
-/* 42 */ NdrFcShort( 0x4 ), /* 4 */
-/* 44 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 46 */ NdrFcShort( 0x0 ), /* 0 */
-/* 48 */ NdrFcShort( 0x8 ), /* 8 */
-/* 50 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 52 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 54 */ NdrFcShort( 0x1 ), /* 1 */
-/* 56 */ NdrFcShort( 0x0 ), /* 0 */
-/* 58 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter localizedRelationType */
-
-/* 60 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 62 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 64 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
-
- /* Return value */
-
-/* 66 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 68 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 70 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_nTargets */
-
-/* 72 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 74 */ NdrFcLong( 0x0 ), /* 0 */
-/* 78 */ NdrFcShort( 0x5 ), /* 5 */
-/* 80 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 82 */ NdrFcShort( 0x0 ), /* 0 */
-/* 84 */ NdrFcShort( 0x24 ), /* 36 */
-/* 86 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 88 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 90 */ NdrFcShort( 0x0 ), /* 0 */
-/* 92 */ NdrFcShort( 0x0 ), /* 0 */
-/* 94 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter nTargets */
-
-/* 96 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 98 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 100 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 102 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 104 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 106 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_target */
-
-/* 108 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 110 */ NdrFcLong( 0x0 ), /* 0 */
-/* 114 */ NdrFcShort( 0x6 ), /* 6 */
-/* 116 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 118 */ NdrFcShort( 0x8 ), /* 8 */
-/* 120 */ NdrFcShort( 0x8 ), /* 8 */
-/* 122 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 124 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 126 */ NdrFcShort( 0x0 ), /* 0 */
-/* 128 */ NdrFcShort( 0x0 ), /* 0 */
-/* 130 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter targetIndex */
-
-/* 132 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 134 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 136 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter target */
-
-/* 138 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
-/* 140 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 142 */ NdrFcShort( 0x2e ), /* Type Offset=46 */
-
- /* Return value */
-
-/* 144 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 146 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 148 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_targets */
-
-/* 150 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 152 */ NdrFcLong( 0x0 ), /* 0 */
-/* 156 */ NdrFcShort( 0x7 ), /* 7 */
-/* 158 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
-/* 160 */ NdrFcShort( 0x8 ), /* 8 */
-/* 162 */ NdrFcShort( 0x24 ), /* 36 */
-/* 164 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x4, /* 4 */
-/* 166 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 168 */ NdrFcShort( 0x1 ), /* 1 */
-/* 170 */ NdrFcShort( 0x0 ), /* 0 */
-/* 172 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter maxTargets */
-
-/* 174 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 176 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 178 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter targets */
-
-/* 180 */ NdrFcShort( 0x113 ), /* Flags: must size, must free, out, simple ref, */
-/* 182 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 184 */ NdrFcShort( 0x48 ), /* Type Offset=72 */
-
- /* Parameter nTargets */
-
-/* 186 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 188 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 190 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 192 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 194 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 196 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- 0x0
- }
- };
-
-static const AccessibleRelation_MIDL_TYPE_FORMAT_STRING AccessibleRelation__MIDL_TypeFormatString =
- {
- 0,
- {
- NdrFcShort( 0x0 ), /* 0 */
-/* 2 */
- 0x11, 0x4, /* FC_RP [alloced_on_stack] */
-/* 4 */ NdrFcShort( 0x1c ), /* Offset= 28 (32) */
-/* 6 */
- 0x13, 0x0, /* FC_OP */
-/* 8 */ NdrFcShort( 0xe ), /* Offset= 14 (22) */
-/* 10 */
- 0x1b, /* FC_CARRAY */
- 0x1, /* 1 */
-/* 12 */ NdrFcShort( 0x2 ), /* 2 */
-/* 14 */ 0x9, /* Corr desc: FC_ULONG */
- 0x0, /* */
-/* 16 */ NdrFcShort( 0xfffc ), /* -4 */
-/* 18 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 20 */ 0x6, /* FC_SHORT */
- 0x5b, /* FC_END */
-/* 22 */
- 0x17, /* FC_CSTRUCT */
- 0x3, /* 3 */
-/* 24 */ NdrFcShort( 0x8 ), /* 8 */
-/* 26 */ NdrFcShort( 0xfff0 ), /* Offset= -16 (10) */
-/* 28 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 30 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 32 */ 0xb4, /* FC_USER_MARSHAL */
- 0x83, /* 131 */
-/* 34 */ NdrFcShort( 0x0 ), /* 0 */
-/* 36 */ NdrFcShort( 0x4 ), /* 4 */
-/* 38 */ NdrFcShort( 0x0 ), /* 0 */
-/* 40 */ NdrFcShort( 0xffde ), /* Offset= -34 (6) */
-/* 42 */
- 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
-/* 44 */ 0x8, /* FC_LONG */
- 0x5c, /* FC_PAD */
-/* 46 */
- 0x11, 0x10, /* FC_RP [pointer_deref] */
-/* 48 */ NdrFcShort( 0x2 ), /* Offset= 2 (50) */
-/* 50 */
- 0x2f, /* FC_IP */
- 0x5a, /* FC_CONSTANT_IID */
-/* 52 */ NdrFcLong( 0x0 ), /* 0 */
-/* 56 */ NdrFcShort( 0x0 ), /* 0 */
-/* 58 */ NdrFcShort( 0x0 ), /* 0 */
-/* 60 */ 0xc0, /* 192 */
- 0x0, /* 0 */
-/* 62 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 64 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 66 */ 0x0, /* 0 */
- 0x46, /* 70 */
-/* 68 */
- 0x11, 0x0, /* FC_RP */
-/* 70 */ NdrFcShort( 0x2 ), /* Offset= 2 (72) */
-/* 72 */
- 0x21, /* FC_BOGUS_ARRAY */
- 0x3, /* 3 */
-/* 74 */ NdrFcShort( 0x0 ), /* 0 */
-/* 76 */ 0x28, /* Corr desc: parameter, FC_LONG */
- 0x0, /* */
-/* 78 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 80 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 82 */ 0x28, /* Corr desc: parameter, FC_LONG */
- 0x54, /* FC_DEREFERENCE */
-/* 84 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 86 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 88 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 90 */ NdrFcShort( 0xffd8 ), /* Offset= -40 (50) */
-/* 92 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-
- 0x0
- }
- };
-
-static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ] =
- {
-
- {
- BSTR_UserSize
- ,BSTR_UserMarshal
- ,BSTR_UserUnmarshal
- ,BSTR_UserFree
- }
-
- };
-
-
-
-/* Standard interface: __MIDL_itf_AccessibleRelation_0000_0000, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */
-
-
-/* Object interface: IUnknown, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
-
-
-/* Object interface: IAccessibleRelation, ver. 0.0,
- GUID={0x7CDF86EE,0xC3DA,0x496a,{0xBD,0xA4,0x28,0x1B,0x33,0x6E,0x1F,0xDC}} */
-
-#pragma code_seg(".orpc")
-static const unsigned short IAccessibleRelation_FormatStringOffsetTable[] =
- {
- 0,
- 36,
- 72,
- 108,
- 150
- };
-
-static const MIDL_STUBLESS_PROXY_INFO IAccessibleRelation_ProxyInfo =
- {
- &Object_StubDesc,
- AccessibleRelation__MIDL_ProcFormatString.Format,
- &IAccessibleRelation_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0
- };
-
-
-static const MIDL_SERVER_INFO IAccessibleRelation_ServerInfo =
- {
- &Object_StubDesc,
- 0,
- AccessibleRelation__MIDL_ProcFormatString.Format,
- &IAccessibleRelation_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0,
- 0};
-CINTERFACE_PROXY_VTABLE(8) _IAccessibleRelationProxyVtbl =
-{
- &IAccessibleRelation_ProxyInfo,
- &IID_IAccessibleRelation,
- IUnknown_QueryInterface_Proxy,
- IUnknown_AddRef_Proxy,
- IUnknown_Release_Proxy ,
- (void *) (INT_PTR) -1 /* IAccessibleRelation::get_relationType */ ,
- (void *) (INT_PTR) -1 /* IAccessibleRelation::get_localizedRelationType */ ,
- (void *) (INT_PTR) -1 /* IAccessibleRelation::get_nTargets */ ,
- (void *) (INT_PTR) -1 /* IAccessibleRelation::get_target */ ,
- (void *) (INT_PTR) -1 /* IAccessibleRelation::get_targets */
-};
-
-const CInterfaceStubVtbl _IAccessibleRelationStubVtbl =
-{
- &IID_IAccessibleRelation,
- &IAccessibleRelation_ServerInfo,
- 8,
- 0, /* pure interpreted */
- CStdStubBuffer_METHODS
-};
-
-static const MIDL_STUB_DESC Object_StubDesc =
- {
- 0,
- NdrOleAllocate,
- NdrOleFree,
- 0,
- 0,
- 0,
- 0,
- 0,
- AccessibleRelation__MIDL_TypeFormatString.Format,
- 1, /* -error bounds_check flag */
- 0x50002, /* Ndr library version */
- 0,
- 0x700022b, /* MIDL Version 7.0.555 */
- 0,
- UserMarshalRoutines,
- 0, /* notify & notify_flag routine table */
- 0x1, /* MIDL flag */
- 0, /* cs routines */
- 0, /* proxy/server info */
- 0
- };
-
-const CInterfaceProxyVtbl * const _AccessibleRelation_ProxyVtblList[] =
-{
- ( CInterfaceProxyVtbl *) &_IAccessibleRelationProxyVtbl,
- 0
-};
-
-const CInterfaceStubVtbl * const _AccessibleRelation_StubVtblList[] =
-{
- ( CInterfaceStubVtbl *) &_IAccessibleRelationStubVtbl,
- 0
-};
-
-PCInterfaceName const _AccessibleRelation_InterfaceNamesList[] =
-{
- "IAccessibleRelation",
- 0
-};
-
-
-#define _AccessibleRelation_CHECK_IID(n) IID_GENERIC_CHECK_IID( _AccessibleRelation, pIID, n)
-
-int __stdcall _AccessibleRelation_IID_Lookup( const IID * pIID, int * pIndex )
-{
-
- if(!_AccessibleRelation_CHECK_IID(0))
- {
- *pIndex = 0;
- return 1;
- }
-
- return 0;
-}
-
-const ExtendedProxyFileInfo AccessibleRelation_ProxyFileInfo =
-{
- (PCInterfaceProxyVtblList *) & _AccessibleRelation_ProxyVtblList,
- (PCInterfaceStubVtblList *) & _AccessibleRelation_StubVtblList,
- (const PCInterfaceName * ) & _AccessibleRelation_InterfaceNamesList,
- 0, /* no delegation */
- & _AccessibleRelation_IID_Lookup,
- 1,
- 2,
- 0, /* table of [async_uuid] interfaces */
- 0, /* Filler1 */
- 0, /* Filler2 */
- 0 /* Filler3 */
-};
-#pragma optimize("", on )
-#if _MSC_VER >= 1200
-#pragma warning(pop)
-#endif
-
-
-#endif /* !defined(_M_IA64) && !defined(_M_AMD64)*/
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleRole.h b/src/3rdparty/iaccessible2/generated/x86/AccessibleRole.h
deleted file mode 100644
index 221d1d00f6..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleRole.h
+++ /dev/null
@@ -1,118 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:54 2012
- */
-/* Compiler settings for AccessibleRole.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-
-#ifndef __AccessibleRole_h__
-#define __AccessibleRole_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-/* header files for imported files */
-#include "objidl.h"
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-/* interface __MIDL_itf_AccessibleRole_0000_0000 */
-/* [local] */
-
-
-enum IA2Role
- { IA2_ROLE_UNKNOWN = 0,
- IA2_ROLE_CANVAS = 0x401,
- IA2_ROLE_CAPTION = ( IA2_ROLE_CANVAS + 1 ) ,
- IA2_ROLE_CHECK_MENU_ITEM = ( IA2_ROLE_CAPTION + 1 ) ,
- IA2_ROLE_COLOR_CHOOSER = ( IA2_ROLE_CHECK_MENU_ITEM + 1 ) ,
- IA2_ROLE_DATE_EDITOR = ( IA2_ROLE_COLOR_CHOOSER + 1 ) ,
- IA2_ROLE_DESKTOP_ICON = ( IA2_ROLE_DATE_EDITOR + 1 ) ,
- IA2_ROLE_DESKTOP_PANE = ( IA2_ROLE_DESKTOP_ICON + 1 ) ,
- IA2_ROLE_DIRECTORY_PANE = ( IA2_ROLE_DESKTOP_PANE + 1 ) ,
- IA2_ROLE_EDITBAR = ( IA2_ROLE_DIRECTORY_PANE + 1 ) ,
- IA2_ROLE_EMBEDDED_OBJECT = ( IA2_ROLE_EDITBAR + 1 ) ,
- IA2_ROLE_ENDNOTE = ( IA2_ROLE_EMBEDDED_OBJECT + 1 ) ,
- IA2_ROLE_FILE_CHOOSER = ( IA2_ROLE_ENDNOTE + 1 ) ,
- IA2_ROLE_FONT_CHOOSER = ( IA2_ROLE_FILE_CHOOSER + 1 ) ,
- IA2_ROLE_FOOTER = ( IA2_ROLE_FONT_CHOOSER + 1 ) ,
- IA2_ROLE_FOOTNOTE = ( IA2_ROLE_FOOTER + 1 ) ,
- IA2_ROLE_FORM = ( IA2_ROLE_FOOTNOTE + 1 ) ,
- IA2_ROLE_FRAME = ( IA2_ROLE_FORM + 1 ) ,
- IA2_ROLE_GLASS_PANE = ( IA2_ROLE_FRAME + 1 ) ,
- IA2_ROLE_HEADER = ( IA2_ROLE_GLASS_PANE + 1 ) ,
- IA2_ROLE_HEADING = ( IA2_ROLE_HEADER + 1 ) ,
- IA2_ROLE_ICON = ( IA2_ROLE_HEADING + 1 ) ,
- IA2_ROLE_IMAGE_MAP = ( IA2_ROLE_ICON + 1 ) ,
- IA2_ROLE_INPUT_METHOD_WINDOW = ( IA2_ROLE_IMAGE_MAP + 1 ) ,
- IA2_ROLE_INTERNAL_FRAME = ( IA2_ROLE_INPUT_METHOD_WINDOW + 1 ) ,
- IA2_ROLE_LABEL = ( IA2_ROLE_INTERNAL_FRAME + 1 ) ,
- IA2_ROLE_LAYERED_PANE = ( IA2_ROLE_LABEL + 1 ) ,
- IA2_ROLE_NOTE = ( IA2_ROLE_LAYERED_PANE + 1 ) ,
- IA2_ROLE_OPTION_PANE = ( IA2_ROLE_NOTE + 1 ) ,
- IA2_ROLE_PAGE = ( IA2_ROLE_OPTION_PANE + 1 ) ,
- IA2_ROLE_PARAGRAPH = ( IA2_ROLE_PAGE + 1 ) ,
- IA2_ROLE_RADIO_MENU_ITEM = ( IA2_ROLE_PARAGRAPH + 1 ) ,
- IA2_ROLE_REDUNDANT_OBJECT = ( IA2_ROLE_RADIO_MENU_ITEM + 1 ) ,
- IA2_ROLE_ROOT_PANE = ( IA2_ROLE_REDUNDANT_OBJECT + 1 ) ,
- IA2_ROLE_RULER = ( IA2_ROLE_ROOT_PANE + 1 ) ,
- IA2_ROLE_SCROLL_PANE = ( IA2_ROLE_RULER + 1 ) ,
- IA2_ROLE_SECTION = ( IA2_ROLE_SCROLL_PANE + 1 ) ,
- IA2_ROLE_SHAPE = ( IA2_ROLE_SECTION + 1 ) ,
- IA2_ROLE_SPLIT_PANE = ( IA2_ROLE_SHAPE + 1 ) ,
- IA2_ROLE_TEAR_OFF_MENU = ( IA2_ROLE_SPLIT_PANE + 1 ) ,
- IA2_ROLE_TERMINAL = ( IA2_ROLE_TEAR_OFF_MENU + 1 ) ,
- IA2_ROLE_TEXT_FRAME = ( IA2_ROLE_TERMINAL + 1 ) ,
- IA2_ROLE_TOGGLE_BUTTON = ( IA2_ROLE_TEXT_FRAME + 1 ) ,
- IA2_ROLE_VIEW_PORT = ( IA2_ROLE_TOGGLE_BUTTON + 1 ) ,
- IA2_ROLE_COMPLEMENTARY_CONTENT = ( IA2_ROLE_VIEW_PORT + 1 )
- } ;
-
-
-extern RPC_IF_HANDLE __MIDL_itf_AccessibleRole_0000_0000_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_AccessibleRole_0000_0000_v0_0_s_ifspec;
-
-/* Additional Prototypes for ALL interfaces */
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleStates.h b/src/3rdparty/iaccessible2/generated/x86/AccessibleStates.h
deleted file mode 100644
index 058d2e548e..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleStates.h
+++ /dev/null
@@ -1,95 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:54 2012
- */
-/* Compiler settings for AccessibleStates.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-
-#ifndef __AccessibleStates_h__
-#define __AccessibleStates_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-/* header files for imported files */
-#include "objidl.h"
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-/* interface __MIDL_itf_AccessibleStates_0000_0000 */
-/* [local] */
-
-typedef long AccessibleStates;
-
-
-enum IA2States
- { IA2_STATE_ACTIVE = 0x1,
- IA2_STATE_ARMED = 0x2,
- IA2_STATE_DEFUNCT = 0x4,
- IA2_STATE_EDITABLE = 0x8,
- IA2_STATE_HORIZONTAL = 0x10,
- IA2_STATE_ICONIFIED = 0x20,
- IA2_STATE_INVALID_ENTRY = 0x40,
- IA2_STATE_MANAGES_DESCENDANTS = 0x80,
- IA2_STATE_MODAL = 0x100,
- IA2_STATE_MULTI_LINE = 0x200,
- IA2_STATE_OPAQUE = 0x400,
- IA2_STATE_REQUIRED = 0x800,
- IA2_STATE_SELECTABLE_TEXT = 0x1000,
- IA2_STATE_SINGLE_LINE = 0x2000,
- IA2_STATE_STALE = 0x4000,
- IA2_STATE_SUPPORTS_AUTOCOMPLETION = 0x8000,
- IA2_STATE_TRANSIENT = 0x10000,
- IA2_STATE_VERTICAL = 0x20000,
- IA2_STATE_CHECKABLE = 0x40000,
- IA2_STATE_PINNED = 0x80000
- } ;
-
-
-extern RPC_IF_HANDLE __MIDL_itf_AccessibleStates_0000_0000_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_AccessibleStates_0000_0000_v0_0_s_ifspec;
-
-/* Additional Prototypes for ALL interfaces */
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleTable.h b/src/3rdparty/iaccessible2/generated/x86/AccessibleTable.h
deleted file mode 100644
index 0f7dd49efc..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleTable.h
+++ /dev/null
@@ -1,497 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:54 2012
- */
-/* Compiler settings for AccessibleTable.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-#ifndef COM_NO_WINDOWS_H
-#include "windows.h"
-#include "ole2.h"
-#endif /*COM_NO_WINDOWS_H*/
-
-#ifndef __AccessibleTable_h__
-#define __AccessibleTable_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifndef __IAccessibleTable_FWD_DEFINED__
-#define __IAccessibleTable_FWD_DEFINED__
-typedef interface IAccessibleTable IAccessibleTable;
-#endif /* __IAccessibleTable_FWD_DEFINED__ */
-
-
-/* header files for imported files */
-#include "objidl.h"
-#include "oaidl.h"
-#include "oleacc.h"
-#include "Accessible2.h"
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#ifndef __IAccessibleTable_INTERFACE_DEFINED__
-#define __IAccessibleTable_INTERFACE_DEFINED__
-
-/* interface IAccessibleTable */
-/* [uuid][object] */
-
-
-EXTERN_C const IID IID_IAccessibleTable;
-
-#if defined(__cplusplus) && !defined(CINTERFACE)
-
- MIDL_INTERFACE("35AD8070-C20C-4fb4-B094-F4F7275DD469")
- IAccessibleTable : public IUnknown
- {
- public:
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_accessibleAt(
- /* [in] */ long row,
- /* [in] */ long column,
- /* [retval][out] */ IUnknown **accessible) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_caption(
- /* [retval][out] */ IUnknown **accessible) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_childIndex(
- /* [in] */ long rowIndex,
- /* [in] */ long columnIndex,
- /* [retval][out] */ long *cellIndex) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnDescription(
- /* [in] */ long column,
- /* [retval][out] */ BSTR *description) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnExtentAt(
- /* [in] */ long row,
- /* [in] */ long column,
- /* [retval][out] */ long *nColumnsSpanned) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnHeader(
- /* [out] */ IAccessibleTable **accessibleTable,
- /* [retval][out] */ long *startingRowIndex) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnIndex(
- /* [in] */ long cellIndex,
- /* [retval][out] */ long *columnIndex) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nColumns(
- /* [retval][out] */ long *columnCount) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nRows(
- /* [retval][out] */ long *rowCount) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelectedChildren(
- /* [retval][out] */ long *cellCount) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelectedColumns(
- /* [retval][out] */ long *columnCount) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelectedRows(
- /* [retval][out] */ long *rowCount) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowDescription(
- /* [in] */ long row,
- /* [retval][out] */ BSTR *description) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowExtentAt(
- /* [in] */ long row,
- /* [in] */ long column,
- /* [retval][out] */ long *nRowsSpanned) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowHeader(
- /* [out] */ IAccessibleTable **accessibleTable,
- /* [retval][out] */ long *startingColumnIndex) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowIndex(
- /* [in] */ long cellIndex,
- /* [retval][out] */ long *rowIndex) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selectedChildren(
- /* [in] */ long maxChildren,
- /* [length_is][length_is][size_is][size_is][out] */ long **children,
- /* [retval][out] */ long *nChildren) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selectedColumns(
- /* [in] */ long maxColumns,
- /* [length_is][length_is][size_is][size_is][out] */ long **columns,
- /* [retval][out] */ long *nColumns) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selectedRows(
- /* [in] */ long maxRows,
- /* [length_is][length_is][size_is][size_is][out] */ long **rows,
- /* [retval][out] */ long *nRows) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_summary(
- /* [retval][out] */ IUnknown **accessible) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isColumnSelected(
- /* [in] */ long column,
- /* [retval][out] */ boolean *isSelected) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isRowSelected(
- /* [in] */ long row,
- /* [retval][out] */ boolean *isSelected) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isSelected(
- /* [in] */ long row,
- /* [in] */ long column,
- /* [retval][out] */ boolean *isSelected) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE selectRow(
- /* [in] */ long row) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE selectColumn(
- /* [in] */ long column) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE unselectRow(
- /* [in] */ long row) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE unselectColumn(
- /* [in] */ long column) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowColumnExtentsAtIndex(
- /* [in] */ long index,
- /* [out] */ long *row,
- /* [out] */ long *column,
- /* [out] */ long *rowExtents,
- /* [out] */ long *columnExtents,
- /* [retval][out] */ boolean *isSelected) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_modelChange(
- /* [retval][out] */ IA2TableModelChange *modelChange) = 0;
-
- };
-
-#else /* C style interface */
-
- typedef struct IAccessibleTableVtbl
- {
- BEGIN_INTERFACE
-
- HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
- IAccessibleTable * This,
- /* [in] */ REFIID riid,
- /* [annotation][iid_is][out] */
- __RPC__deref_out void **ppvObject);
-
- ULONG ( STDMETHODCALLTYPE *AddRef )(
- IAccessibleTable * This);
-
- ULONG ( STDMETHODCALLTYPE *Release )(
- IAccessibleTable * This);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_accessibleAt )(
- IAccessibleTable * This,
- /* [in] */ long row,
- /* [in] */ long column,
- /* [retval][out] */ IUnknown **accessible);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_caption )(
- IAccessibleTable * This,
- /* [retval][out] */ IUnknown **accessible);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_childIndex )(
- IAccessibleTable * This,
- /* [in] */ long rowIndex,
- /* [in] */ long columnIndex,
- /* [retval][out] */ long *cellIndex);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnDescription )(
- IAccessibleTable * This,
- /* [in] */ long column,
- /* [retval][out] */ BSTR *description);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnExtentAt )(
- IAccessibleTable * This,
- /* [in] */ long row,
- /* [in] */ long column,
- /* [retval][out] */ long *nColumnsSpanned);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnHeader )(
- IAccessibleTable * This,
- /* [out] */ IAccessibleTable **accessibleTable,
- /* [retval][out] */ long *startingRowIndex);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnIndex )(
- IAccessibleTable * This,
- /* [in] */ long cellIndex,
- /* [retval][out] */ long *columnIndex);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nColumns )(
- IAccessibleTable * This,
- /* [retval][out] */ long *columnCount);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nRows )(
- IAccessibleTable * This,
- /* [retval][out] */ long *rowCount);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelectedChildren )(
- IAccessibleTable * This,
- /* [retval][out] */ long *cellCount);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelectedColumns )(
- IAccessibleTable * This,
- /* [retval][out] */ long *columnCount);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelectedRows )(
- IAccessibleTable * This,
- /* [retval][out] */ long *rowCount);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowDescription )(
- IAccessibleTable * This,
- /* [in] */ long row,
- /* [retval][out] */ BSTR *description);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowExtentAt )(
- IAccessibleTable * This,
- /* [in] */ long row,
- /* [in] */ long column,
- /* [retval][out] */ long *nRowsSpanned);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowHeader )(
- IAccessibleTable * This,
- /* [out] */ IAccessibleTable **accessibleTable,
- /* [retval][out] */ long *startingColumnIndex);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowIndex )(
- IAccessibleTable * This,
- /* [in] */ long cellIndex,
- /* [retval][out] */ long *rowIndex);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectedChildren )(
- IAccessibleTable * This,
- /* [in] */ long maxChildren,
- /* [length_is][length_is][size_is][size_is][out] */ long **children,
- /* [retval][out] */ long *nChildren);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectedColumns )(
- IAccessibleTable * This,
- /* [in] */ long maxColumns,
- /* [length_is][length_is][size_is][size_is][out] */ long **columns,
- /* [retval][out] */ long *nColumns);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectedRows )(
- IAccessibleTable * This,
- /* [in] */ long maxRows,
- /* [length_is][length_is][size_is][size_is][out] */ long **rows,
- /* [retval][out] */ long *nRows);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_summary )(
- IAccessibleTable * This,
- /* [retval][out] */ IUnknown **accessible);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isColumnSelected )(
- IAccessibleTable * This,
- /* [in] */ long column,
- /* [retval][out] */ boolean *isSelected);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isRowSelected )(
- IAccessibleTable * This,
- /* [in] */ long row,
- /* [retval][out] */ boolean *isSelected);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isSelected )(
- IAccessibleTable * This,
- /* [in] */ long row,
- /* [in] */ long column,
- /* [retval][out] */ boolean *isSelected);
-
- HRESULT ( STDMETHODCALLTYPE *selectRow )(
- IAccessibleTable * This,
- /* [in] */ long row);
-
- HRESULT ( STDMETHODCALLTYPE *selectColumn )(
- IAccessibleTable * This,
- /* [in] */ long column);
-
- HRESULT ( STDMETHODCALLTYPE *unselectRow )(
- IAccessibleTable * This,
- /* [in] */ long row);
-
- HRESULT ( STDMETHODCALLTYPE *unselectColumn )(
- IAccessibleTable * This,
- /* [in] */ long column);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowColumnExtentsAtIndex )(
- IAccessibleTable * This,
- /* [in] */ long index,
- /* [out] */ long *row,
- /* [out] */ long *column,
- /* [out] */ long *rowExtents,
- /* [out] */ long *columnExtents,
- /* [retval][out] */ boolean *isSelected);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_modelChange )(
- IAccessibleTable * This,
- /* [retval][out] */ IA2TableModelChange *modelChange);
-
- END_INTERFACE
- } IAccessibleTableVtbl;
-
- interface IAccessibleTable
- {
- CONST_VTBL struct IAccessibleTableVtbl *lpVtbl;
- };
-
-
-
-#ifdef COBJMACROS
-
-
-#define IAccessibleTable_QueryInterface(This,riid,ppvObject) \
- ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
-
-#define IAccessibleTable_AddRef(This) \
- ( (This)->lpVtbl -> AddRef(This) )
-
-#define IAccessibleTable_Release(This) \
- ( (This)->lpVtbl -> Release(This) )
-
-
-#define IAccessibleTable_get_accessibleAt(This,row,column,accessible) \
- ( (This)->lpVtbl -> get_accessibleAt(This,row,column,accessible) )
-
-#define IAccessibleTable_get_caption(This,accessible) \
- ( (This)->lpVtbl -> get_caption(This,accessible) )
-
-#define IAccessibleTable_get_childIndex(This,rowIndex,columnIndex,cellIndex) \
- ( (This)->lpVtbl -> get_childIndex(This,rowIndex,columnIndex,cellIndex) )
-
-#define IAccessibleTable_get_columnDescription(This,column,description) \
- ( (This)->lpVtbl -> get_columnDescription(This,column,description) )
-
-#define IAccessibleTable_get_columnExtentAt(This,row,column,nColumnsSpanned) \
- ( (This)->lpVtbl -> get_columnExtentAt(This,row,column,nColumnsSpanned) )
-
-#define IAccessibleTable_get_columnHeader(This,accessibleTable,startingRowIndex) \
- ( (This)->lpVtbl -> get_columnHeader(This,accessibleTable,startingRowIndex) )
-
-#define IAccessibleTable_get_columnIndex(This,cellIndex,columnIndex) \
- ( (This)->lpVtbl -> get_columnIndex(This,cellIndex,columnIndex) )
-
-#define IAccessibleTable_get_nColumns(This,columnCount) \
- ( (This)->lpVtbl -> get_nColumns(This,columnCount) )
-
-#define IAccessibleTable_get_nRows(This,rowCount) \
- ( (This)->lpVtbl -> get_nRows(This,rowCount) )
-
-#define IAccessibleTable_get_nSelectedChildren(This,cellCount) \
- ( (This)->lpVtbl -> get_nSelectedChildren(This,cellCount) )
-
-#define IAccessibleTable_get_nSelectedColumns(This,columnCount) \
- ( (This)->lpVtbl -> get_nSelectedColumns(This,columnCount) )
-
-#define IAccessibleTable_get_nSelectedRows(This,rowCount) \
- ( (This)->lpVtbl -> get_nSelectedRows(This,rowCount) )
-
-#define IAccessibleTable_get_rowDescription(This,row,description) \
- ( (This)->lpVtbl -> get_rowDescription(This,row,description) )
-
-#define IAccessibleTable_get_rowExtentAt(This,row,column,nRowsSpanned) \
- ( (This)->lpVtbl -> get_rowExtentAt(This,row,column,nRowsSpanned) )
-
-#define IAccessibleTable_get_rowHeader(This,accessibleTable,startingColumnIndex) \
- ( (This)->lpVtbl -> get_rowHeader(This,accessibleTable,startingColumnIndex) )
-
-#define IAccessibleTable_get_rowIndex(This,cellIndex,rowIndex) \
- ( (This)->lpVtbl -> get_rowIndex(This,cellIndex,rowIndex) )
-
-#define IAccessibleTable_get_selectedChildren(This,maxChildren,children,nChildren) \
- ( (This)->lpVtbl -> get_selectedChildren(This,maxChildren,children,nChildren) )
-
-#define IAccessibleTable_get_selectedColumns(This,maxColumns,columns,nColumns) \
- ( (This)->lpVtbl -> get_selectedColumns(This,maxColumns,columns,nColumns) )
-
-#define IAccessibleTable_get_selectedRows(This,maxRows,rows,nRows) \
- ( (This)->lpVtbl -> get_selectedRows(This,maxRows,rows,nRows) )
-
-#define IAccessibleTable_get_summary(This,accessible) \
- ( (This)->lpVtbl -> get_summary(This,accessible) )
-
-#define IAccessibleTable_get_isColumnSelected(This,column,isSelected) \
- ( (This)->lpVtbl -> get_isColumnSelected(This,column,isSelected) )
-
-#define IAccessibleTable_get_isRowSelected(This,row,isSelected) \
- ( (This)->lpVtbl -> get_isRowSelected(This,row,isSelected) )
-
-#define IAccessibleTable_get_isSelected(This,row,column,isSelected) \
- ( (This)->lpVtbl -> get_isSelected(This,row,column,isSelected) )
-
-#define IAccessibleTable_selectRow(This,row) \
- ( (This)->lpVtbl -> selectRow(This,row) )
-
-#define IAccessibleTable_selectColumn(This,column) \
- ( (This)->lpVtbl -> selectColumn(This,column) )
-
-#define IAccessibleTable_unselectRow(This,row) \
- ( (This)->lpVtbl -> unselectRow(This,row) )
-
-#define IAccessibleTable_unselectColumn(This,column) \
- ( (This)->lpVtbl -> unselectColumn(This,column) )
-
-#define IAccessibleTable_get_rowColumnExtentsAtIndex(This,index,row,column,rowExtents,columnExtents,isSelected) \
- ( (This)->lpVtbl -> get_rowColumnExtentsAtIndex(This,index,row,column,rowExtents,columnExtents,isSelected) )
-
-#define IAccessibleTable_get_modelChange(This,modelChange) \
- ( (This)->lpVtbl -> get_modelChange(This,modelChange) )
-
-#endif /* COBJMACROS */
-
-
-#endif /* C style interface */
-
-
-
-
-#endif /* __IAccessibleTable_INTERFACE_DEFINED__ */
-
-
-/* Additional Prototypes for ALL interfaces */
-
-unsigned long __RPC_USER BSTR_UserSize( unsigned long *, unsigned long , BSTR * );
-unsigned char * __RPC_USER BSTR_UserMarshal( unsigned long *, unsigned char *, BSTR * );
-unsigned char * __RPC_USER BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * );
-void __RPC_USER BSTR_UserFree( unsigned long *, BSTR * );
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleTable2.h b/src/3rdparty/iaccessible2/generated/x86/AccessibleTable2.h
deleted file mode 100644
index d511869de4..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleTable2.h
+++ /dev/null
@@ -1,367 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:55 2012
- */
-/* Compiler settings for AccessibleTable2.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-#ifndef COM_NO_WINDOWS_H
-#include "windows.h"
-#include "ole2.h"
-#endif /*COM_NO_WINDOWS_H*/
-
-#ifndef __AccessibleTable2_h__
-#define __AccessibleTable2_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifndef __IAccessibleTable2_FWD_DEFINED__
-#define __IAccessibleTable2_FWD_DEFINED__
-typedef interface IAccessibleTable2 IAccessibleTable2;
-#endif /* __IAccessibleTable2_FWD_DEFINED__ */
-
-
-/* header files for imported files */
-#include "objidl.h"
-#include "oaidl.h"
-#include "oleacc.h"
-#include "Accessible2.h"
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#ifndef __IAccessibleTable2_INTERFACE_DEFINED__
-#define __IAccessibleTable2_INTERFACE_DEFINED__
-
-/* interface IAccessibleTable2 */
-/* [uuid][object] */
-
-
-EXTERN_C const IID IID_IAccessibleTable2;
-
-#if defined(__cplusplus) && !defined(CINTERFACE)
-
- MIDL_INTERFACE("6167f295-06f0-4cdd-a1fa-02e25153d869")
- IAccessibleTable2 : public IUnknown
- {
- public:
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_cellAt(
- /* [in] */ long row,
- /* [in] */ long column,
- /* [retval][out] */ IUnknown **cell) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_caption(
- /* [retval][out] */ IUnknown **accessible) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnDescription(
- /* [in] */ long column,
- /* [retval][out] */ BSTR *description) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nColumns(
- /* [retval][out] */ long *columnCount) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nRows(
- /* [retval][out] */ long *rowCount) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelectedCells(
- /* [retval][out] */ long *cellCount) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelectedColumns(
- /* [retval][out] */ long *columnCount) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelectedRows(
- /* [retval][out] */ long *rowCount) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowDescription(
- /* [in] */ long row,
- /* [retval][out] */ BSTR *description) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selectedCells(
- /* [size_is][size_is][size_is][out] */ IUnknown ***cells,
- /* [retval][out] */ long *nSelectedCells) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selectedColumns(
- /* [size_is][size_is][out] */ long **selectedColumns,
- /* [retval][out] */ long *nColumns) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selectedRows(
- /* [size_is][size_is][out] */ long **selectedRows,
- /* [retval][out] */ long *nRows) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_summary(
- /* [retval][out] */ IUnknown **accessible) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isColumnSelected(
- /* [in] */ long column,
- /* [retval][out] */ boolean *isSelected) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isRowSelected(
- /* [in] */ long row,
- /* [retval][out] */ boolean *isSelected) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE selectRow(
- /* [in] */ long row) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE selectColumn(
- /* [in] */ long column) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE unselectRow(
- /* [in] */ long row) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE unselectColumn(
- /* [in] */ long column) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_modelChange(
- /* [retval][out] */ IA2TableModelChange *modelChange) = 0;
-
- };
-
-#else /* C style interface */
-
- typedef struct IAccessibleTable2Vtbl
- {
- BEGIN_INTERFACE
-
- HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
- IAccessibleTable2 * This,
- /* [in] */ REFIID riid,
- /* [annotation][iid_is][out] */
- __RPC__deref_out void **ppvObject);
-
- ULONG ( STDMETHODCALLTYPE *AddRef )(
- IAccessibleTable2 * This);
-
- ULONG ( STDMETHODCALLTYPE *Release )(
- IAccessibleTable2 * This);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_cellAt )(
- IAccessibleTable2 * This,
- /* [in] */ long row,
- /* [in] */ long column,
- /* [retval][out] */ IUnknown **cell);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_caption )(
- IAccessibleTable2 * This,
- /* [retval][out] */ IUnknown **accessible);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnDescription )(
- IAccessibleTable2 * This,
- /* [in] */ long column,
- /* [retval][out] */ BSTR *description);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nColumns )(
- IAccessibleTable2 * This,
- /* [retval][out] */ long *columnCount);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nRows )(
- IAccessibleTable2 * This,
- /* [retval][out] */ long *rowCount);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelectedCells )(
- IAccessibleTable2 * This,
- /* [retval][out] */ long *cellCount);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelectedColumns )(
- IAccessibleTable2 * This,
- /* [retval][out] */ long *columnCount);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelectedRows )(
- IAccessibleTable2 * This,
- /* [retval][out] */ long *rowCount);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowDescription )(
- IAccessibleTable2 * This,
- /* [in] */ long row,
- /* [retval][out] */ BSTR *description);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectedCells )(
- IAccessibleTable2 * This,
- /* [size_is][size_is][size_is][out] */ IUnknown ***cells,
- /* [retval][out] */ long *nSelectedCells);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectedColumns )(
- IAccessibleTable2 * This,
- /* [size_is][size_is][out] */ long **selectedColumns,
- /* [retval][out] */ long *nColumns);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectedRows )(
- IAccessibleTable2 * This,
- /* [size_is][size_is][out] */ long **selectedRows,
- /* [retval][out] */ long *nRows);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_summary )(
- IAccessibleTable2 * This,
- /* [retval][out] */ IUnknown **accessible);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isColumnSelected )(
- IAccessibleTable2 * This,
- /* [in] */ long column,
- /* [retval][out] */ boolean *isSelected);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isRowSelected )(
- IAccessibleTable2 * This,
- /* [in] */ long row,
- /* [retval][out] */ boolean *isSelected);
-
- HRESULT ( STDMETHODCALLTYPE *selectRow )(
- IAccessibleTable2 * This,
- /* [in] */ long row);
-
- HRESULT ( STDMETHODCALLTYPE *selectColumn )(
- IAccessibleTable2 * This,
- /* [in] */ long column);
-
- HRESULT ( STDMETHODCALLTYPE *unselectRow )(
- IAccessibleTable2 * This,
- /* [in] */ long row);
-
- HRESULT ( STDMETHODCALLTYPE *unselectColumn )(
- IAccessibleTable2 * This,
- /* [in] */ long column);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_modelChange )(
- IAccessibleTable2 * This,
- /* [retval][out] */ IA2TableModelChange *modelChange);
-
- END_INTERFACE
- } IAccessibleTable2Vtbl;
-
- interface IAccessibleTable2
- {
- CONST_VTBL struct IAccessibleTable2Vtbl *lpVtbl;
- };
-
-
-
-#ifdef COBJMACROS
-
-
-#define IAccessibleTable2_QueryInterface(This,riid,ppvObject) \
- ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
-
-#define IAccessibleTable2_AddRef(This) \
- ( (This)->lpVtbl -> AddRef(This) )
-
-#define IAccessibleTable2_Release(This) \
- ( (This)->lpVtbl -> Release(This) )
-
-
-#define IAccessibleTable2_get_cellAt(This,row,column,cell) \
- ( (This)->lpVtbl -> get_cellAt(This,row,column,cell) )
-
-#define IAccessibleTable2_get_caption(This,accessible) \
- ( (This)->lpVtbl -> get_caption(This,accessible) )
-
-#define IAccessibleTable2_get_columnDescription(This,column,description) \
- ( (This)->lpVtbl -> get_columnDescription(This,column,description) )
-
-#define IAccessibleTable2_get_nColumns(This,columnCount) \
- ( (This)->lpVtbl -> get_nColumns(This,columnCount) )
-
-#define IAccessibleTable2_get_nRows(This,rowCount) \
- ( (This)->lpVtbl -> get_nRows(This,rowCount) )
-
-#define IAccessibleTable2_get_nSelectedCells(This,cellCount) \
- ( (This)->lpVtbl -> get_nSelectedCells(This,cellCount) )
-
-#define IAccessibleTable2_get_nSelectedColumns(This,columnCount) \
- ( (This)->lpVtbl -> get_nSelectedColumns(This,columnCount) )
-
-#define IAccessibleTable2_get_nSelectedRows(This,rowCount) \
- ( (This)->lpVtbl -> get_nSelectedRows(This,rowCount) )
-
-#define IAccessibleTable2_get_rowDescription(This,row,description) \
- ( (This)->lpVtbl -> get_rowDescription(This,row,description) )
-
-#define IAccessibleTable2_get_selectedCells(This,cells,nSelectedCells) \
- ( (This)->lpVtbl -> get_selectedCells(This,cells,nSelectedCells) )
-
-#define IAccessibleTable2_get_selectedColumns(This,selectedColumns,nColumns) \
- ( (This)->lpVtbl -> get_selectedColumns(This,selectedColumns,nColumns) )
-
-#define IAccessibleTable2_get_selectedRows(This,selectedRows,nRows) \
- ( (This)->lpVtbl -> get_selectedRows(This,selectedRows,nRows) )
-
-#define IAccessibleTable2_get_summary(This,accessible) \
- ( (This)->lpVtbl -> get_summary(This,accessible) )
-
-#define IAccessibleTable2_get_isColumnSelected(This,column,isSelected) \
- ( (This)->lpVtbl -> get_isColumnSelected(This,column,isSelected) )
-
-#define IAccessibleTable2_get_isRowSelected(This,row,isSelected) \
- ( (This)->lpVtbl -> get_isRowSelected(This,row,isSelected) )
-
-#define IAccessibleTable2_selectRow(This,row) \
- ( (This)->lpVtbl -> selectRow(This,row) )
-
-#define IAccessibleTable2_selectColumn(This,column) \
- ( (This)->lpVtbl -> selectColumn(This,column) )
-
-#define IAccessibleTable2_unselectRow(This,row) \
- ( (This)->lpVtbl -> unselectRow(This,row) )
-
-#define IAccessibleTable2_unselectColumn(This,column) \
- ( (This)->lpVtbl -> unselectColumn(This,column) )
-
-#define IAccessibleTable2_get_modelChange(This,modelChange) \
- ( (This)->lpVtbl -> get_modelChange(This,modelChange) )
-
-#endif /* COBJMACROS */
-
-
-#endif /* C style interface */
-
-
-
-
-#endif /* __IAccessibleTable2_INTERFACE_DEFINED__ */
-
-
-/* Additional Prototypes for ALL interfaces */
-
-unsigned long __RPC_USER BSTR_UserSize( unsigned long *, unsigned long , BSTR * );
-unsigned char * __RPC_USER BSTR_UserMarshal( unsigned long *, unsigned char *, BSTR * );
-unsigned char * __RPC_USER BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * );
-void __RPC_USER BSTR_UserFree( unsigned long *, BSTR * );
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleTable2_i.c b/src/3rdparty/iaccessible2/generated/x86/AccessibleTable2_i.c
deleted file mode 100644
index f5444155ad..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleTable2_i.c
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
-
-/* link this file in with the server and any clients */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:55 2012
- */
-/* Compiler settings for AccessibleTable2.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#include <rpc.h>
-#include <rpcndr.h>
-
-#ifdef _MIDL_USE_GUIDDEF_
-
-#ifndef INITGUID
-#define INITGUID
-#include <guiddef.h>
-#undef INITGUID
-#else
-#include <guiddef.h>
-#endif
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
-
-#else // !_MIDL_USE_GUIDDEF_
-
-#ifndef __IID_DEFINED__
-#define __IID_DEFINED__
-
-typedef struct _IID
-{
- unsigned long x;
- unsigned short s1;
- unsigned short s2;
- unsigned char c[8];
-} IID;
-
-#endif // __IID_DEFINED__
-
-#ifndef CLSID_DEFINED
-#define CLSID_DEFINED
-typedef IID CLSID;
-#endif // CLSID_DEFINED
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
-
-#endif !_MIDL_USE_GUIDDEF_
-
-MIDL_DEFINE_GUID(IID, IID_IAccessibleTable2,0x6167f295,0x06f0,0x4cdd,0xa1,0xfa,0x02,0xe2,0x51,0x53,0xd8,0x69);
-
-#undef MIDL_DEFINE_GUID
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleTable2_p.c b/src/3rdparty/iaccessible2/generated/x86/AccessibleTable2_p.c
deleted file mode 100644
index f4b782f9dc..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleTable2_p.c
+++ /dev/null
@@ -1,1091 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the proxy stub code */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:55 2012
- */
-/* Compiler settings for AccessibleTable2.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#if !defined(_M_IA64) && !defined(_M_AMD64)
-
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-#if _MSC_VER >= 1200
-#pragma warning(push)
-#endif
-
-#pragma warning( disable: 4211 ) /* redefine extern to static */
-#pragma warning( disable: 4232 ) /* dllimport identity*/
-#pragma warning( disable: 4024 ) /* array to pointer mapping*/
-#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */
-#pragma warning( disable: 4100 ) /* unreferenced arguments in x86 call */
-
-#pragma optimize("", off )
-
-#define USE_STUBLESS_PROXY
-
-
-/* verify that the <rpcproxy.h> version is high enough to compile this file*/
-#ifndef __REDQ_RPCPROXY_H_VERSION__
-#define __REQUIRED_RPCPROXY_H_VERSION__ 475
-#endif
-
-
-#include "rpcproxy.h"
-#ifndef __RPCPROXY_H_VERSION__
-#error this stub requires an updated version of <rpcproxy.h>
-#endif /* __RPCPROXY_H_VERSION__ */
-
-
-#include "AccessibleTable2.h"
-
-#define TYPE_FORMAT_STRING_SIZE 141
-#define PROC_FORMAT_STRING_SIZE 775
-#define EXPR_FORMAT_STRING_SIZE 1
-#define TRANSMIT_AS_TABLE_SIZE 0
-#define WIRE_MARSHAL_TABLE_SIZE 1
-
-typedef struct _AccessibleTable2_MIDL_TYPE_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
- } AccessibleTable2_MIDL_TYPE_FORMAT_STRING;
-
-typedef struct _AccessibleTable2_MIDL_PROC_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
- } AccessibleTable2_MIDL_PROC_FORMAT_STRING;
-
-typedef struct _AccessibleTable2_MIDL_EXPR_FORMAT_STRING
- {
- long Pad;
- unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
- } AccessibleTable2_MIDL_EXPR_FORMAT_STRING;
-
-
-static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
-{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
-
-
-extern const AccessibleTable2_MIDL_TYPE_FORMAT_STRING AccessibleTable2__MIDL_TypeFormatString;
-extern const AccessibleTable2_MIDL_PROC_FORMAT_STRING AccessibleTable2__MIDL_ProcFormatString;
-extern const AccessibleTable2_MIDL_EXPR_FORMAT_STRING AccessibleTable2__MIDL_ExprFormatString;
-
-
-extern const MIDL_STUB_DESC Object_StubDesc;
-
-
-extern const MIDL_SERVER_INFO IAccessibleTable2_ServerInfo;
-extern const MIDL_STUBLESS_PROXY_INFO IAccessibleTable2_ProxyInfo;
-
-
-extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ];
-
-#if !defined(__RPC_WIN32__)
-#error Invalid build platform for this stub.
-#endif
-
-#if !(TARGET_IS_NT50_OR_LATER)
-#error You need Windows 2000 or later to run this stub because it uses these features:
-#error /robust command line switch.
-#error However, your C/C++ compilation flags indicate you intend to run this app on earlier systems.
-#error This app will fail with the RPC_X_WRONG_STUB_VERSION error.
-#endif
-
-
-static const AccessibleTable2_MIDL_PROC_FORMAT_STRING AccessibleTable2__MIDL_ProcFormatString =
- {
- 0,
- {
-
- /* Procedure get_cellAt */
-
- 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 2 */ NdrFcLong( 0x0 ), /* 0 */
-/* 6 */ NdrFcShort( 0x3 ), /* 3 */
-/* 8 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
-/* 10 */ NdrFcShort( 0x10 ), /* 16 */
-/* 12 */ NdrFcShort( 0x8 ), /* 8 */
-/* 14 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x4, /* 4 */
-/* 16 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 18 */ NdrFcShort( 0x0 ), /* 0 */
-/* 20 */ NdrFcShort( 0x0 ), /* 0 */
-/* 22 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter row */
-
-/* 24 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 26 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 28 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter column */
-
-/* 30 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 32 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 34 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter cell */
-
-/* 36 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
-/* 38 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 40 */ NdrFcShort( 0x2 ), /* Type Offset=2 */
-
- /* Return value */
-
-/* 42 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 44 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 46 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_caption */
-
-/* 48 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 50 */ NdrFcLong( 0x0 ), /* 0 */
-/* 54 */ NdrFcShort( 0x4 ), /* 4 */
-/* 56 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 58 */ NdrFcShort( 0x0 ), /* 0 */
-/* 60 */ NdrFcShort( 0x8 ), /* 8 */
-/* 62 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 64 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 66 */ NdrFcShort( 0x0 ), /* 0 */
-/* 68 */ NdrFcShort( 0x0 ), /* 0 */
-/* 70 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter accessible */
-
-/* 72 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
-/* 74 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 76 */ NdrFcShort( 0x2 ), /* Type Offset=2 */
-
- /* Return value */
-
-/* 78 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 80 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 82 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_columnDescription */
-
-/* 84 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 86 */ NdrFcLong( 0x0 ), /* 0 */
-/* 90 */ NdrFcShort( 0x5 ), /* 5 */
-/* 92 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 94 */ NdrFcShort( 0x8 ), /* 8 */
-/* 96 */ NdrFcShort( 0x8 ), /* 8 */
-/* 98 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 100 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 102 */ NdrFcShort( 0x1 ), /* 1 */
-/* 104 */ NdrFcShort( 0x0 ), /* 0 */
-/* 106 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter column */
-
-/* 108 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 110 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 112 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter description */
-
-/* 114 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 116 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 118 */ NdrFcShort( 0x36 ), /* Type Offset=54 */
-
- /* Return value */
-
-/* 120 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 122 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 124 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_nColumns */
-
-/* 126 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 128 */ NdrFcLong( 0x0 ), /* 0 */
-/* 132 */ NdrFcShort( 0x6 ), /* 6 */
-/* 134 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 136 */ NdrFcShort( 0x0 ), /* 0 */
-/* 138 */ NdrFcShort( 0x24 ), /* 36 */
-/* 140 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 142 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 144 */ NdrFcShort( 0x0 ), /* 0 */
-/* 146 */ NdrFcShort( 0x0 ), /* 0 */
-/* 148 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter columnCount */
-
-/* 150 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 152 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 154 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 156 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 158 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 160 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_nRows */
-
-/* 162 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 164 */ NdrFcLong( 0x0 ), /* 0 */
-/* 168 */ NdrFcShort( 0x7 ), /* 7 */
-/* 170 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 172 */ NdrFcShort( 0x0 ), /* 0 */
-/* 174 */ NdrFcShort( 0x24 ), /* 36 */
-/* 176 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 178 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 180 */ NdrFcShort( 0x0 ), /* 0 */
-/* 182 */ NdrFcShort( 0x0 ), /* 0 */
-/* 184 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter rowCount */
-
-/* 186 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 188 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 190 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 192 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 194 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 196 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_nSelectedCells */
-
-/* 198 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 200 */ NdrFcLong( 0x0 ), /* 0 */
-/* 204 */ NdrFcShort( 0x8 ), /* 8 */
-/* 206 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 208 */ NdrFcShort( 0x0 ), /* 0 */
-/* 210 */ NdrFcShort( 0x24 ), /* 36 */
-/* 212 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 214 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 216 */ NdrFcShort( 0x0 ), /* 0 */
-/* 218 */ NdrFcShort( 0x0 ), /* 0 */
-/* 220 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter cellCount */
-
-/* 222 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 224 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 226 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 228 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 230 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 232 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_nSelectedColumns */
-
-/* 234 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 236 */ NdrFcLong( 0x0 ), /* 0 */
-/* 240 */ NdrFcShort( 0x9 ), /* 9 */
-/* 242 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 244 */ NdrFcShort( 0x0 ), /* 0 */
-/* 246 */ NdrFcShort( 0x24 ), /* 36 */
-/* 248 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 250 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 252 */ NdrFcShort( 0x0 ), /* 0 */
-/* 254 */ NdrFcShort( 0x0 ), /* 0 */
-/* 256 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter columnCount */
-
-/* 258 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 260 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 262 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 264 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 266 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 268 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_nSelectedRows */
-
-/* 270 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 272 */ NdrFcLong( 0x0 ), /* 0 */
-/* 276 */ NdrFcShort( 0xa ), /* 10 */
-/* 278 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 280 */ NdrFcShort( 0x0 ), /* 0 */
-/* 282 */ NdrFcShort( 0x24 ), /* 36 */
-/* 284 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 286 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 288 */ NdrFcShort( 0x0 ), /* 0 */
-/* 290 */ NdrFcShort( 0x0 ), /* 0 */
-/* 292 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter rowCount */
-
-/* 294 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 296 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 298 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 300 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 302 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 304 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_rowDescription */
-
-/* 306 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 308 */ NdrFcLong( 0x0 ), /* 0 */
-/* 312 */ NdrFcShort( 0xb ), /* 11 */
-/* 314 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 316 */ NdrFcShort( 0x8 ), /* 8 */
-/* 318 */ NdrFcShort( 0x8 ), /* 8 */
-/* 320 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 322 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 324 */ NdrFcShort( 0x1 ), /* 1 */
-/* 326 */ NdrFcShort( 0x0 ), /* 0 */
-/* 328 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter row */
-
-/* 330 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 332 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 334 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter description */
-
-/* 336 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 338 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 340 */ NdrFcShort( 0x36 ), /* Type Offset=54 */
-
- /* Return value */
-
-/* 342 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 344 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 346 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_selectedCells */
-
-/* 348 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 350 */ NdrFcLong( 0x0 ), /* 0 */
-/* 354 */ NdrFcShort( 0xc ), /* 12 */
-/* 356 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 358 */ NdrFcShort( 0x0 ), /* 0 */
-/* 360 */ NdrFcShort( 0x24 ), /* 36 */
-/* 362 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 364 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 366 */ NdrFcShort( 0x1 ), /* 1 */
-/* 368 */ NdrFcShort( 0x0 ), /* 0 */
-/* 370 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter cells */
-
-/* 372 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
-/* 374 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 376 */ NdrFcShort( 0x44 ), /* Type Offset=68 */
-
- /* Parameter nSelectedCells */
-
-/* 378 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 380 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 382 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 384 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 386 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 388 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_selectedColumns */
-
-/* 390 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 392 */ NdrFcLong( 0x0 ), /* 0 */
-/* 396 */ NdrFcShort( 0xd ), /* 13 */
-/* 398 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 400 */ NdrFcShort( 0x0 ), /* 0 */
-/* 402 */ NdrFcShort( 0x24 ), /* 36 */
-/* 404 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 406 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 408 */ NdrFcShort( 0x1 ), /* 1 */
-/* 410 */ NdrFcShort( 0x0 ), /* 0 */
-/* 412 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter selectedColumns */
-
-/* 414 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
-/* 416 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 418 */ NdrFcShort( 0x62 ), /* Type Offset=98 */
-
- /* Parameter nColumns */
-
-/* 420 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 422 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 424 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 426 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 428 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 430 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_selectedRows */
-
-/* 432 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 434 */ NdrFcLong( 0x0 ), /* 0 */
-/* 438 */ NdrFcShort( 0xe ), /* 14 */
-/* 440 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 442 */ NdrFcShort( 0x0 ), /* 0 */
-/* 444 */ NdrFcShort( 0x24 ), /* 36 */
-/* 446 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 448 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 450 */ NdrFcShort( 0x1 ), /* 1 */
-/* 452 */ NdrFcShort( 0x0 ), /* 0 */
-/* 454 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter selectedRows */
-
-/* 456 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
-/* 458 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 460 */ NdrFcShort( 0x62 ), /* Type Offset=98 */
-
- /* Parameter nRows */
-
-/* 462 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 464 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 466 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 468 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 470 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 472 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_summary */
-
-/* 474 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 476 */ NdrFcLong( 0x0 ), /* 0 */
-/* 480 */ NdrFcShort( 0xf ), /* 15 */
-/* 482 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 484 */ NdrFcShort( 0x0 ), /* 0 */
-/* 486 */ NdrFcShort( 0x8 ), /* 8 */
-/* 488 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 490 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 492 */ NdrFcShort( 0x0 ), /* 0 */
-/* 494 */ NdrFcShort( 0x0 ), /* 0 */
-/* 496 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter accessible */
-
-/* 498 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
-/* 500 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 502 */ NdrFcShort( 0x2 ), /* Type Offset=2 */
-
- /* Return value */
-
-/* 504 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 506 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 508 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_isColumnSelected */
-
-/* 510 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 512 */ NdrFcLong( 0x0 ), /* 0 */
-/* 516 */ NdrFcShort( 0x10 ), /* 16 */
-/* 518 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 520 */ NdrFcShort( 0x8 ), /* 8 */
-/* 522 */ NdrFcShort( 0x21 ), /* 33 */
-/* 524 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x3, /* 3 */
-/* 526 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 528 */ NdrFcShort( 0x0 ), /* 0 */
-/* 530 */ NdrFcShort( 0x0 ), /* 0 */
-/* 532 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter column */
-
-/* 534 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 536 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 538 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter isSelected */
-
-/* 540 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 542 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 544 */ 0x3, /* FC_SMALL */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 546 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 548 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 550 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_isRowSelected */
-
-/* 552 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 554 */ NdrFcLong( 0x0 ), /* 0 */
-/* 558 */ NdrFcShort( 0x11 ), /* 17 */
-/* 560 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 562 */ NdrFcShort( 0x8 ), /* 8 */
-/* 564 */ NdrFcShort( 0x21 ), /* 33 */
-/* 566 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x3, /* 3 */
-/* 568 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 570 */ NdrFcShort( 0x0 ), /* 0 */
-/* 572 */ NdrFcShort( 0x0 ), /* 0 */
-/* 574 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter row */
-
-/* 576 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 578 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 580 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter isSelected */
-
-/* 582 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 584 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 586 */ 0x3, /* FC_SMALL */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 588 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 590 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 592 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure selectRow */
-
-/* 594 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 596 */ NdrFcLong( 0x0 ), /* 0 */
-/* 600 */ NdrFcShort( 0x12 ), /* 18 */
-/* 602 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 604 */ NdrFcShort( 0x8 ), /* 8 */
-/* 606 */ NdrFcShort( 0x8 ), /* 8 */
-/* 608 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 610 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 612 */ NdrFcShort( 0x0 ), /* 0 */
-/* 614 */ NdrFcShort( 0x0 ), /* 0 */
-/* 616 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter row */
-
-/* 618 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 620 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 622 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 624 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 626 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 628 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure selectColumn */
-
-/* 630 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 632 */ NdrFcLong( 0x0 ), /* 0 */
-/* 636 */ NdrFcShort( 0x13 ), /* 19 */
-/* 638 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 640 */ NdrFcShort( 0x8 ), /* 8 */
-/* 642 */ NdrFcShort( 0x8 ), /* 8 */
-/* 644 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 646 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 648 */ NdrFcShort( 0x0 ), /* 0 */
-/* 650 */ NdrFcShort( 0x0 ), /* 0 */
-/* 652 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter column */
-
-/* 654 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 656 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 658 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 660 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 662 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 664 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure unselectRow */
-
-/* 666 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 668 */ NdrFcLong( 0x0 ), /* 0 */
-/* 672 */ NdrFcShort( 0x14 ), /* 20 */
-/* 674 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 676 */ NdrFcShort( 0x8 ), /* 8 */
-/* 678 */ NdrFcShort( 0x8 ), /* 8 */
-/* 680 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 682 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 684 */ NdrFcShort( 0x0 ), /* 0 */
-/* 686 */ NdrFcShort( 0x0 ), /* 0 */
-/* 688 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter row */
-
-/* 690 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 692 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 694 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 696 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 698 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 700 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure unselectColumn */
-
-/* 702 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 704 */ NdrFcLong( 0x0 ), /* 0 */
-/* 708 */ NdrFcShort( 0x15 ), /* 21 */
-/* 710 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 712 */ NdrFcShort( 0x8 ), /* 8 */
-/* 714 */ NdrFcShort( 0x8 ), /* 8 */
-/* 716 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 718 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 720 */ NdrFcShort( 0x0 ), /* 0 */
-/* 722 */ NdrFcShort( 0x0 ), /* 0 */
-/* 724 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter column */
-
-/* 726 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 728 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 730 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 732 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 734 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 736 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_modelChange */
-
-/* 738 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 740 */ NdrFcLong( 0x0 ), /* 0 */
-/* 744 */ NdrFcShort( 0x16 ), /* 22 */
-/* 746 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 748 */ NdrFcShort( 0x0 ), /* 0 */
-/* 750 */ NdrFcShort( 0x8 ), /* 8 */
-/* 752 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 754 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 756 */ NdrFcShort( 0x0 ), /* 0 */
-/* 758 */ NdrFcShort( 0x0 ), /* 0 */
-/* 760 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter modelChange */
-
-/* 762 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */
-/* 764 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 766 */ NdrFcShort( 0x7e ), /* Type Offset=126 */
-
- /* Return value */
-
-/* 768 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 770 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 772 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- 0x0
- }
- };
-
-static const AccessibleTable2_MIDL_TYPE_FORMAT_STRING AccessibleTable2__MIDL_TypeFormatString =
- {
- 0,
- {
- NdrFcShort( 0x0 ), /* 0 */
-/* 2 */
- 0x11, 0x10, /* FC_RP [pointer_deref] */
-/* 4 */ NdrFcShort( 0x2 ), /* Offset= 2 (6) */
-/* 6 */
- 0x2f, /* FC_IP */
- 0x5a, /* FC_CONSTANT_IID */
-/* 8 */ NdrFcLong( 0x0 ), /* 0 */
-/* 12 */ NdrFcShort( 0x0 ), /* 0 */
-/* 14 */ NdrFcShort( 0x0 ), /* 0 */
-/* 16 */ 0xc0, /* 192 */
- 0x0, /* 0 */
-/* 18 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 20 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 22 */ 0x0, /* 0 */
- 0x46, /* 70 */
-/* 24 */
- 0x11, 0x4, /* FC_RP [alloced_on_stack] */
-/* 26 */ NdrFcShort( 0x1c ), /* Offset= 28 (54) */
-/* 28 */
- 0x13, 0x0, /* FC_OP */
-/* 30 */ NdrFcShort( 0xe ), /* Offset= 14 (44) */
-/* 32 */
- 0x1b, /* FC_CARRAY */
- 0x1, /* 1 */
-/* 34 */ NdrFcShort( 0x2 ), /* 2 */
-/* 36 */ 0x9, /* Corr desc: FC_ULONG */
- 0x0, /* */
-/* 38 */ NdrFcShort( 0xfffc ), /* -4 */
-/* 40 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 42 */ 0x6, /* FC_SHORT */
- 0x5b, /* FC_END */
-/* 44 */
- 0x17, /* FC_CSTRUCT */
- 0x3, /* 3 */
-/* 46 */ NdrFcShort( 0x8 ), /* 8 */
-/* 48 */ NdrFcShort( 0xfff0 ), /* Offset= -16 (32) */
-/* 50 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 52 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 54 */ 0xb4, /* FC_USER_MARSHAL */
- 0x83, /* 131 */
-/* 56 */ NdrFcShort( 0x0 ), /* 0 */
-/* 58 */ NdrFcShort( 0x4 ), /* 4 */
-/* 60 */ NdrFcShort( 0x0 ), /* 0 */
-/* 62 */ NdrFcShort( 0xffde ), /* Offset= -34 (28) */
-/* 64 */
- 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
-/* 66 */ 0x8, /* FC_LONG */
- 0x5c, /* FC_PAD */
-/* 68 */
- 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */
-/* 70 */ NdrFcShort( 0x2 ), /* Offset= 2 (72) */
-/* 72 */
- 0x13, 0x0, /* FC_OP */
-/* 74 */ NdrFcShort( 0x2 ), /* Offset= 2 (76) */
-/* 76 */
- 0x21, /* FC_BOGUS_ARRAY */
- 0x3, /* 3 */
-/* 78 */ NdrFcShort( 0x0 ), /* 0 */
-/* 80 */ 0x28, /* Corr desc: parameter, FC_LONG */
- 0x54, /* FC_DEREFERENCE */
-/* 82 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 84 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 86 */ NdrFcLong( 0xffffffff ), /* -1 */
-/* 90 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 92 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 94 */ NdrFcShort( 0xffa8 ), /* Offset= -88 (6) */
-/* 96 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 98 */
- 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */
-/* 100 */ NdrFcShort( 0x2 ), /* Offset= 2 (102) */
-/* 102 */
- 0x13, 0x0, /* FC_OP */
-/* 104 */ NdrFcShort( 0x2 ), /* Offset= 2 (106) */
-/* 106 */
- 0x1b, /* FC_CARRAY */
- 0x3, /* 3 */
-/* 108 */ NdrFcShort( 0x4 ), /* 4 */
-/* 110 */ 0x28, /* Corr desc: parameter, FC_LONG */
- 0x54, /* FC_DEREFERENCE */
-/* 112 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 114 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 116 */ 0x8, /* FC_LONG */
- 0x5b, /* FC_END */
-/* 118 */
- 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
-/* 120 */ 0x3, /* FC_SMALL */
- 0x5c, /* FC_PAD */
-/* 122 */
- 0x11, 0x4, /* FC_RP [alloced_on_stack] */
-/* 124 */ NdrFcShort( 0x2 ), /* Offset= 2 (126) */
-/* 126 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 128 */ NdrFcShort( 0x14 ), /* 20 */
-/* 130 */ NdrFcShort( 0x0 ), /* 0 */
-/* 132 */ NdrFcShort( 0x0 ), /* Offset= 0 (132) */
-/* 134 */ 0xd, /* FC_ENUM16 */
- 0x8, /* FC_LONG */
-/* 136 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 138 */ 0x8, /* FC_LONG */
- 0x5b, /* FC_END */
-
- 0x0
- }
- };
-
-static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ] =
- {
-
- {
- BSTR_UserSize
- ,BSTR_UserMarshal
- ,BSTR_UserUnmarshal
- ,BSTR_UserFree
- }
-
- };
-
-
-
-/* Object interface: IUnknown, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
-
-
-/* Object interface: IAccessibleTable2, ver. 0.0,
- GUID={0x6167f295,0x06f0,0x4cdd,{0xa1,0xfa,0x02,0xe2,0x51,0x53,0xd8,0x69}} */
-
-#pragma code_seg(".orpc")
-static const unsigned short IAccessibleTable2_FormatStringOffsetTable[] =
- {
- 0,
- 48,
- 84,
- 126,
- 162,
- 198,
- 234,
- 270,
- 306,
- 348,
- 390,
- 432,
- 474,
- 510,
- 552,
- 594,
- 630,
- 666,
- 702,
- 738
- };
-
-static const MIDL_STUBLESS_PROXY_INFO IAccessibleTable2_ProxyInfo =
- {
- &Object_StubDesc,
- AccessibleTable2__MIDL_ProcFormatString.Format,
- &IAccessibleTable2_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0
- };
-
-
-static const MIDL_SERVER_INFO IAccessibleTable2_ServerInfo =
- {
- &Object_StubDesc,
- 0,
- AccessibleTable2__MIDL_ProcFormatString.Format,
- &IAccessibleTable2_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0,
- 0};
-CINTERFACE_PROXY_VTABLE(23) _IAccessibleTable2ProxyVtbl =
-{
- &IAccessibleTable2_ProxyInfo,
- &IID_IAccessibleTable2,
- IUnknown_QueryInterface_Proxy,
- IUnknown_AddRef_Proxy,
- IUnknown_Release_Proxy ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::get_cellAt */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::get_caption */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::get_columnDescription */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::get_nColumns */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::get_nRows */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::get_nSelectedCells */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::get_nSelectedColumns */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::get_nSelectedRows */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::get_rowDescription */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::get_selectedCells */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::get_selectedColumns */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::get_selectedRows */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::get_summary */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::get_isColumnSelected */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::get_isRowSelected */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::selectRow */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::selectColumn */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::unselectRow */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::unselectColumn */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable2::get_modelChange */
-};
-
-const CInterfaceStubVtbl _IAccessibleTable2StubVtbl =
-{
- &IID_IAccessibleTable2,
- &IAccessibleTable2_ServerInfo,
- 23,
- 0, /* pure interpreted */
- CStdStubBuffer_METHODS
-};
-
-static const MIDL_STUB_DESC Object_StubDesc =
- {
- 0,
- NdrOleAllocate,
- NdrOleFree,
- 0,
- 0,
- 0,
- 0,
- 0,
- AccessibleTable2__MIDL_TypeFormatString.Format,
- 1, /* -error bounds_check flag */
- 0x50002, /* Ndr library version */
- 0,
- 0x700022b, /* MIDL Version 7.0.555 */
- 0,
- UserMarshalRoutines,
- 0, /* notify & notify_flag routine table */
- 0x1, /* MIDL flag */
- 0, /* cs routines */
- 0, /* proxy/server info */
- 0
- };
-
-const CInterfaceProxyVtbl * const _AccessibleTable2_ProxyVtblList[] =
-{
- ( CInterfaceProxyVtbl *) &_IAccessibleTable2ProxyVtbl,
- 0
-};
-
-const CInterfaceStubVtbl * const _AccessibleTable2_StubVtblList[] =
-{
- ( CInterfaceStubVtbl *) &_IAccessibleTable2StubVtbl,
- 0
-};
-
-PCInterfaceName const _AccessibleTable2_InterfaceNamesList[] =
-{
- "IAccessibleTable2",
- 0
-};
-
-
-#define _AccessibleTable2_CHECK_IID(n) IID_GENERIC_CHECK_IID( _AccessibleTable2, pIID, n)
-
-int __stdcall _AccessibleTable2_IID_Lookup( const IID * pIID, int * pIndex )
-{
-
- if(!_AccessibleTable2_CHECK_IID(0))
- {
- *pIndex = 0;
- return 1;
- }
-
- return 0;
-}
-
-const ExtendedProxyFileInfo AccessibleTable2_ProxyFileInfo =
-{
- (PCInterfaceProxyVtblList *) & _AccessibleTable2_ProxyVtblList,
- (PCInterfaceStubVtblList *) & _AccessibleTable2_StubVtblList,
- (const PCInterfaceName * ) & _AccessibleTable2_InterfaceNamesList,
- 0, /* no delegation */
- & _AccessibleTable2_IID_Lookup,
- 1,
- 2,
- 0, /* table of [async_uuid] interfaces */
- 0, /* Filler1 */
- 0, /* Filler2 */
- 0 /* Filler3 */
-};
-#pragma optimize("", on )
-#if _MSC_VER >= 1200
-#pragma warning(pop)
-#endif
-
-
-#endif /* !defined(_M_IA64) && !defined(_M_AMD64)*/
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleTableCell.h b/src/3rdparty/iaccessible2/generated/x86/AccessibleTableCell.h
deleted file mode 100644
index 621768e149..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleTableCell.h
+++ /dev/null
@@ -1,246 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:55 2012
- */
-/* Compiler settings for AccessibleTableCell.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-#ifndef COM_NO_WINDOWS_H
-#include "windows.h"
-#include "ole2.h"
-#endif /*COM_NO_WINDOWS_H*/
-
-#ifndef __AccessibleTableCell_h__
-#define __AccessibleTableCell_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifndef __IAccessibleTableCell_FWD_DEFINED__
-#define __IAccessibleTableCell_FWD_DEFINED__
-typedef interface IAccessibleTableCell IAccessibleTableCell;
-#endif /* __IAccessibleTableCell_FWD_DEFINED__ */
-
-
-/* header files for imported files */
-#include "objidl.h"
-#include "oaidl.h"
-#include "oleacc.h"
-#include "Accessible2.h"
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#ifndef __IAccessibleTableCell_INTERFACE_DEFINED__
-#define __IAccessibleTableCell_INTERFACE_DEFINED__
-
-/* interface IAccessibleTableCell */
-/* [uuid][object] */
-
-
-EXTERN_C const IID IID_IAccessibleTableCell;
-
-#if defined(__cplusplus) && !defined(CINTERFACE)
-
- MIDL_INTERFACE("594116B1-C99F-4847-AD06-0A7A86ECE645")
- IAccessibleTableCell : public IUnknown
- {
- public:
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnExtent(
- /* [retval][out] */ long *nColumnsSpanned) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnHeaderCells(
- /* [size_is][size_is][size_is][out] */ IUnknown ***cellAccessibles,
- /* [retval][out] */ long *nColumnHeaderCells) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnIndex(
- /* [retval][out] */ long *columnIndex) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowExtent(
- /* [retval][out] */ long *nRowsSpanned) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowHeaderCells(
- /* [size_is][size_is][size_is][out] */ IUnknown ***cellAccessibles,
- /* [retval][out] */ long *nRowHeaderCells) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowIndex(
- /* [retval][out] */ long *rowIndex) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isSelected(
- /* [retval][out] */ boolean *isSelected) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowColumnExtents(
- /* [out] */ long *row,
- /* [out] */ long *column,
- /* [out] */ long *rowExtents,
- /* [out] */ long *columnExtents,
- /* [retval][out] */ boolean *isSelected) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_table(
- /* [retval][out] */ IUnknown **table) = 0;
-
- };
-
-#else /* C style interface */
-
- typedef struct IAccessibleTableCellVtbl
- {
- BEGIN_INTERFACE
-
- HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
- IAccessibleTableCell * This,
- /* [in] */ REFIID riid,
- /* [annotation][iid_is][out] */
- __RPC__deref_out void **ppvObject);
-
- ULONG ( STDMETHODCALLTYPE *AddRef )(
- IAccessibleTableCell * This);
-
- ULONG ( STDMETHODCALLTYPE *Release )(
- IAccessibleTableCell * This);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnExtent )(
- IAccessibleTableCell * This,
- /* [retval][out] */ long *nColumnsSpanned);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnHeaderCells )(
- IAccessibleTableCell * This,
- /* [size_is][size_is][size_is][out] */ IUnknown ***cellAccessibles,
- /* [retval][out] */ long *nColumnHeaderCells);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnIndex )(
- IAccessibleTableCell * This,
- /* [retval][out] */ long *columnIndex);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowExtent )(
- IAccessibleTableCell * This,
- /* [retval][out] */ long *nRowsSpanned);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowHeaderCells )(
- IAccessibleTableCell * This,
- /* [size_is][size_is][size_is][out] */ IUnknown ***cellAccessibles,
- /* [retval][out] */ long *nRowHeaderCells);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowIndex )(
- IAccessibleTableCell * This,
- /* [retval][out] */ long *rowIndex);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isSelected )(
- IAccessibleTableCell * This,
- /* [retval][out] */ boolean *isSelected);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowColumnExtents )(
- IAccessibleTableCell * This,
- /* [out] */ long *row,
- /* [out] */ long *column,
- /* [out] */ long *rowExtents,
- /* [out] */ long *columnExtents,
- /* [retval][out] */ boolean *isSelected);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_table )(
- IAccessibleTableCell * This,
- /* [retval][out] */ IUnknown **table);
-
- END_INTERFACE
- } IAccessibleTableCellVtbl;
-
- interface IAccessibleTableCell
- {
- CONST_VTBL struct IAccessibleTableCellVtbl *lpVtbl;
- };
-
-
-
-#ifdef COBJMACROS
-
-
-#define IAccessibleTableCell_QueryInterface(This,riid,ppvObject) \
- ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
-
-#define IAccessibleTableCell_AddRef(This) \
- ( (This)->lpVtbl -> AddRef(This) )
-
-#define IAccessibleTableCell_Release(This) \
- ( (This)->lpVtbl -> Release(This) )
-
-
-#define IAccessibleTableCell_get_columnExtent(This,nColumnsSpanned) \
- ( (This)->lpVtbl -> get_columnExtent(This,nColumnsSpanned) )
-
-#define IAccessibleTableCell_get_columnHeaderCells(This,cellAccessibles,nColumnHeaderCells) \
- ( (This)->lpVtbl -> get_columnHeaderCells(This,cellAccessibles,nColumnHeaderCells) )
-
-#define IAccessibleTableCell_get_columnIndex(This,columnIndex) \
- ( (This)->lpVtbl -> get_columnIndex(This,columnIndex) )
-
-#define IAccessibleTableCell_get_rowExtent(This,nRowsSpanned) \
- ( (This)->lpVtbl -> get_rowExtent(This,nRowsSpanned) )
-
-#define IAccessibleTableCell_get_rowHeaderCells(This,cellAccessibles,nRowHeaderCells) \
- ( (This)->lpVtbl -> get_rowHeaderCells(This,cellAccessibles,nRowHeaderCells) )
-
-#define IAccessibleTableCell_get_rowIndex(This,rowIndex) \
- ( (This)->lpVtbl -> get_rowIndex(This,rowIndex) )
-
-#define IAccessibleTableCell_get_isSelected(This,isSelected) \
- ( (This)->lpVtbl -> get_isSelected(This,isSelected) )
-
-#define IAccessibleTableCell_get_rowColumnExtents(This,row,column,rowExtents,columnExtents,isSelected) \
- ( (This)->lpVtbl -> get_rowColumnExtents(This,row,column,rowExtents,columnExtents,isSelected) )
-
-#define IAccessibleTableCell_get_table(This,table) \
- ( (This)->lpVtbl -> get_table(This,table) )
-
-#endif /* COBJMACROS */
-
-
-#endif /* C style interface */
-
-
-
-
-#endif /* __IAccessibleTableCell_INTERFACE_DEFINED__ */
-
-
-/* Additional Prototypes for ALL interfaces */
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleTableCell_i.c b/src/3rdparty/iaccessible2/generated/x86/AccessibleTableCell_i.c
deleted file mode 100644
index 4ea10e057d..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleTableCell_i.c
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
-
-/* link this file in with the server and any clients */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:55 2012
- */
-/* Compiler settings for AccessibleTableCell.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#include <rpc.h>
-#include <rpcndr.h>
-
-#ifdef _MIDL_USE_GUIDDEF_
-
-#ifndef INITGUID
-#define INITGUID
-#include <guiddef.h>
-#undef INITGUID
-#else
-#include <guiddef.h>
-#endif
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
-
-#else // !_MIDL_USE_GUIDDEF_
-
-#ifndef __IID_DEFINED__
-#define __IID_DEFINED__
-
-typedef struct _IID
-{
- unsigned long x;
- unsigned short s1;
- unsigned short s2;
- unsigned char c[8];
-} IID;
-
-#endif // __IID_DEFINED__
-
-#ifndef CLSID_DEFINED
-#define CLSID_DEFINED
-typedef IID CLSID;
-#endif // CLSID_DEFINED
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
-
-#endif !_MIDL_USE_GUIDDEF_
-
-MIDL_DEFINE_GUID(IID, IID_IAccessibleTableCell,0x594116B1,0xC99F,0x4847,0xAD,0x06,0x0A,0x7A,0x86,0xEC,0xE6,0x45);
-
-#undef MIDL_DEFINE_GUID
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleTableCell_p.c b/src/3rdparty/iaccessible2/generated/x86/AccessibleTableCell_p.c
deleted file mode 100644
index 2627caaef9..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleTableCell_p.c
+++ /dev/null
@@ -1,637 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the proxy stub code */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:55 2012
- */
-/* Compiler settings for AccessibleTableCell.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#if !defined(_M_IA64) && !defined(_M_AMD64)
-
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-#if _MSC_VER >= 1200
-#pragma warning(push)
-#endif
-
-#pragma warning( disable: 4211 ) /* redefine extern to static */
-#pragma warning( disable: 4232 ) /* dllimport identity*/
-#pragma warning( disable: 4024 ) /* array to pointer mapping*/
-#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */
-#pragma warning( disable: 4100 ) /* unreferenced arguments in x86 call */
-
-#pragma optimize("", off )
-
-#define USE_STUBLESS_PROXY
-
-
-/* verify that the <rpcproxy.h> version is high enough to compile this file*/
-#ifndef __REDQ_RPCPROXY_H_VERSION__
-#define __REQUIRED_RPCPROXY_H_VERSION__ 475
-#endif
-
-
-#include "rpcproxy.h"
-#ifndef __RPCPROXY_H_VERSION__
-#error this stub requires an updated version of <rpcproxy.h>
-#endif /* __RPCPROXY_H_VERSION__ */
-
-
-#include "AccessibleTableCell.h"
-
-#define TYPE_FORMAT_STRING_SIZE 63
-#define PROC_FORMAT_STRING_SIZE 361
-#define EXPR_FORMAT_STRING_SIZE 1
-#define TRANSMIT_AS_TABLE_SIZE 0
-#define WIRE_MARSHAL_TABLE_SIZE 0
-
-typedef struct _AccessibleTableCell_MIDL_TYPE_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
- } AccessibleTableCell_MIDL_TYPE_FORMAT_STRING;
-
-typedef struct _AccessibleTableCell_MIDL_PROC_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
- } AccessibleTableCell_MIDL_PROC_FORMAT_STRING;
-
-typedef struct _AccessibleTableCell_MIDL_EXPR_FORMAT_STRING
- {
- long Pad;
- unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
- } AccessibleTableCell_MIDL_EXPR_FORMAT_STRING;
-
-
-static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
-{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
-
-
-extern const AccessibleTableCell_MIDL_TYPE_FORMAT_STRING AccessibleTableCell__MIDL_TypeFormatString;
-extern const AccessibleTableCell_MIDL_PROC_FORMAT_STRING AccessibleTableCell__MIDL_ProcFormatString;
-extern const AccessibleTableCell_MIDL_EXPR_FORMAT_STRING AccessibleTableCell__MIDL_ExprFormatString;
-
-
-extern const MIDL_STUB_DESC Object_StubDesc;
-
-
-extern const MIDL_SERVER_INFO IAccessibleTableCell_ServerInfo;
-extern const MIDL_STUBLESS_PROXY_INFO IAccessibleTableCell_ProxyInfo;
-
-
-
-#if !defined(__RPC_WIN32__)
-#error Invalid build platform for this stub.
-#endif
-
-#if !(TARGET_IS_NT50_OR_LATER)
-#error You need Windows 2000 or later to run this stub because it uses these features:
-#error /robust command line switch.
-#error However, your C/C++ compilation flags indicate you intend to run this app on earlier systems.
-#error This app will fail with the RPC_X_WRONG_STUB_VERSION error.
-#endif
-
-
-static const AccessibleTableCell_MIDL_PROC_FORMAT_STRING AccessibleTableCell__MIDL_ProcFormatString =
- {
- 0,
- {
-
- /* Procedure get_columnExtent */
-
- 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 2 */ NdrFcLong( 0x0 ), /* 0 */
-/* 6 */ NdrFcShort( 0x3 ), /* 3 */
-/* 8 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 10 */ NdrFcShort( 0x0 ), /* 0 */
-/* 12 */ NdrFcShort( 0x24 ), /* 36 */
-/* 14 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 16 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 18 */ NdrFcShort( 0x0 ), /* 0 */
-/* 20 */ NdrFcShort( 0x0 ), /* 0 */
-/* 22 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter nColumnsSpanned */
-
-/* 24 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 26 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 28 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 30 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 32 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 34 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_columnHeaderCells */
-
-/* 36 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 38 */ NdrFcLong( 0x0 ), /* 0 */
-/* 42 */ NdrFcShort( 0x4 ), /* 4 */
-/* 44 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 46 */ NdrFcShort( 0x0 ), /* 0 */
-/* 48 */ NdrFcShort( 0x24 ), /* 36 */
-/* 50 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 52 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 54 */ NdrFcShort( 0x1 ), /* 1 */
-/* 56 */ NdrFcShort( 0x0 ), /* 0 */
-/* 58 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter cellAccessibles */
-
-/* 60 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
-/* 62 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 64 */ NdrFcShort( 0x6 ), /* Type Offset=6 */
-
- /* Parameter nColumnHeaderCells */
-
-/* 66 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 68 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 70 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 72 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 74 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 76 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_columnIndex */
-
-/* 78 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 80 */ NdrFcLong( 0x0 ), /* 0 */
-/* 84 */ NdrFcShort( 0x5 ), /* 5 */
-/* 86 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 88 */ NdrFcShort( 0x0 ), /* 0 */
-/* 90 */ NdrFcShort( 0x24 ), /* 36 */
-/* 92 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 94 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 96 */ NdrFcShort( 0x0 ), /* 0 */
-/* 98 */ NdrFcShort( 0x0 ), /* 0 */
-/* 100 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter columnIndex */
-
-/* 102 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 104 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 106 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 108 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 110 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 112 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_rowExtent */
-
-/* 114 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 116 */ NdrFcLong( 0x0 ), /* 0 */
-/* 120 */ NdrFcShort( 0x6 ), /* 6 */
-/* 122 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 124 */ NdrFcShort( 0x0 ), /* 0 */
-/* 126 */ NdrFcShort( 0x24 ), /* 36 */
-/* 128 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 130 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 132 */ NdrFcShort( 0x0 ), /* 0 */
-/* 134 */ NdrFcShort( 0x0 ), /* 0 */
-/* 136 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter nRowsSpanned */
-
-/* 138 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 140 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 142 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 144 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 146 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 148 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_rowHeaderCells */
-
-/* 150 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 152 */ NdrFcLong( 0x0 ), /* 0 */
-/* 156 */ NdrFcShort( 0x7 ), /* 7 */
-/* 158 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 160 */ NdrFcShort( 0x0 ), /* 0 */
-/* 162 */ NdrFcShort( 0x24 ), /* 36 */
-/* 164 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 166 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 168 */ NdrFcShort( 0x1 ), /* 1 */
-/* 170 */ NdrFcShort( 0x0 ), /* 0 */
-/* 172 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter cellAccessibles */
-
-/* 174 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
-/* 176 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 178 */ NdrFcShort( 0x6 ), /* Type Offset=6 */
-
- /* Parameter nRowHeaderCells */
-
-/* 180 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 182 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 184 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 186 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 188 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 190 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_rowIndex */
-
-/* 192 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 194 */ NdrFcLong( 0x0 ), /* 0 */
-/* 198 */ NdrFcShort( 0x8 ), /* 8 */
-/* 200 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 202 */ NdrFcShort( 0x0 ), /* 0 */
-/* 204 */ NdrFcShort( 0x24 ), /* 36 */
-/* 206 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 208 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 210 */ NdrFcShort( 0x0 ), /* 0 */
-/* 212 */ NdrFcShort( 0x0 ), /* 0 */
-/* 214 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter rowIndex */
-
-/* 216 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 218 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 220 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 222 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 224 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 226 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_isSelected */
-
-/* 228 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 230 */ NdrFcLong( 0x0 ), /* 0 */
-/* 234 */ NdrFcShort( 0x9 ), /* 9 */
-/* 236 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 238 */ NdrFcShort( 0x0 ), /* 0 */
-/* 240 */ NdrFcShort( 0x21 ), /* 33 */
-/* 242 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 244 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 246 */ NdrFcShort( 0x0 ), /* 0 */
-/* 248 */ NdrFcShort( 0x0 ), /* 0 */
-/* 250 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter isSelected */
-
-/* 252 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 254 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 256 */ 0x3, /* FC_SMALL */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 258 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 260 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 262 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_rowColumnExtents */
-
-/* 264 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 266 */ NdrFcLong( 0x0 ), /* 0 */
-/* 270 */ NdrFcShort( 0xa ), /* 10 */
-/* 272 */ NdrFcShort( 0x1c ), /* x86 Stack size/offset = 28 */
-/* 274 */ NdrFcShort( 0x0 ), /* 0 */
-/* 276 */ NdrFcShort( 0x91 ), /* 145 */
-/* 278 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x6, /* 6 */
-/* 280 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 282 */ NdrFcShort( 0x0 ), /* 0 */
-/* 284 */ NdrFcShort( 0x0 ), /* 0 */
-/* 286 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter row */
-
-/* 288 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 290 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 292 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter column */
-
-/* 294 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 296 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 298 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter rowExtents */
-
-/* 300 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 302 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 304 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter columnExtents */
-
-/* 306 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 308 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 310 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter isSelected */
-
-/* 312 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 314 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
-/* 316 */ 0x3, /* FC_SMALL */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 318 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 320 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */
-/* 322 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_table */
-
-/* 324 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 326 */ NdrFcLong( 0x0 ), /* 0 */
-/* 330 */ NdrFcShort( 0xb ), /* 11 */
-/* 332 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 334 */ NdrFcShort( 0x0 ), /* 0 */
-/* 336 */ NdrFcShort( 0x8 ), /* 8 */
-/* 338 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 340 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 342 */ NdrFcShort( 0x0 ), /* 0 */
-/* 344 */ NdrFcShort( 0x0 ), /* 0 */
-/* 346 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter table */
-
-/* 348 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
-/* 350 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 352 */ NdrFcShort( 0x3a ), /* Type Offset=58 */
-
- /* Return value */
-
-/* 354 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 356 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 358 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- 0x0
- }
- };
-
-static const AccessibleTableCell_MIDL_TYPE_FORMAT_STRING AccessibleTableCell__MIDL_TypeFormatString =
- {
- 0,
- {
- NdrFcShort( 0x0 ), /* 0 */
-/* 2 */
- 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
-/* 4 */ 0x8, /* FC_LONG */
- 0x5c, /* FC_PAD */
-/* 6 */
- 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */
-/* 8 */ NdrFcShort( 0x2 ), /* Offset= 2 (10) */
-/* 10 */
- 0x13, 0x0, /* FC_OP */
-/* 12 */ NdrFcShort( 0x14 ), /* Offset= 20 (32) */
-/* 14 */
- 0x2f, /* FC_IP */
- 0x5a, /* FC_CONSTANT_IID */
-/* 16 */ NdrFcLong( 0x0 ), /* 0 */
-/* 20 */ NdrFcShort( 0x0 ), /* 0 */
-/* 22 */ NdrFcShort( 0x0 ), /* 0 */
-/* 24 */ 0xc0, /* 192 */
- 0x0, /* 0 */
-/* 26 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 28 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 30 */ 0x0, /* 0 */
- 0x46, /* 70 */
-/* 32 */
- 0x21, /* FC_BOGUS_ARRAY */
- 0x3, /* 3 */
-/* 34 */ NdrFcShort( 0x0 ), /* 0 */
-/* 36 */ 0x28, /* Corr desc: parameter, FC_LONG */
- 0x54, /* FC_DEREFERENCE */
-/* 38 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 40 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 42 */ NdrFcLong( 0xffffffff ), /* -1 */
-/* 46 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 48 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 50 */ NdrFcShort( 0xffdc ), /* Offset= -36 (14) */
-/* 52 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 54 */
- 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
-/* 56 */ 0x3, /* FC_SMALL */
- 0x5c, /* FC_PAD */
-/* 58 */
- 0x11, 0x10, /* FC_RP [pointer_deref] */
-/* 60 */ NdrFcShort( 0xffd2 ), /* Offset= -46 (14) */
-
- 0x0
- }
- };
-
-
-/* Object interface: IUnknown, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
-
-
-/* Object interface: IAccessibleTableCell, ver. 0.0,
- GUID={0x594116B1,0xC99F,0x4847,{0xAD,0x06,0x0A,0x7A,0x86,0xEC,0xE6,0x45}} */
-
-#pragma code_seg(".orpc")
-static const unsigned short IAccessibleTableCell_FormatStringOffsetTable[] =
- {
- 0,
- 36,
- 78,
- 114,
- 150,
- 192,
- 228,
- 264,
- 324
- };
-
-static const MIDL_STUBLESS_PROXY_INFO IAccessibleTableCell_ProxyInfo =
- {
- &Object_StubDesc,
- AccessibleTableCell__MIDL_ProcFormatString.Format,
- &IAccessibleTableCell_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0
- };
-
-
-static const MIDL_SERVER_INFO IAccessibleTableCell_ServerInfo =
- {
- &Object_StubDesc,
- 0,
- AccessibleTableCell__MIDL_ProcFormatString.Format,
- &IAccessibleTableCell_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0,
- 0};
-CINTERFACE_PROXY_VTABLE(12) _IAccessibleTableCellProxyVtbl =
-{
- &IAccessibleTableCell_ProxyInfo,
- &IID_IAccessibleTableCell,
- IUnknown_QueryInterface_Proxy,
- IUnknown_AddRef_Proxy,
- IUnknown_Release_Proxy ,
- (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_columnExtent */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_columnHeaderCells */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_columnIndex */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_rowExtent */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_rowHeaderCells */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_rowIndex */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_isSelected */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_rowColumnExtents */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_table */
-};
-
-const CInterfaceStubVtbl _IAccessibleTableCellStubVtbl =
-{
- &IID_IAccessibleTableCell,
- &IAccessibleTableCell_ServerInfo,
- 12,
- 0, /* pure interpreted */
- CStdStubBuffer_METHODS
-};
-
-static const MIDL_STUB_DESC Object_StubDesc =
- {
- 0,
- NdrOleAllocate,
- NdrOleFree,
- 0,
- 0,
- 0,
- 0,
- 0,
- AccessibleTableCell__MIDL_TypeFormatString.Format,
- 1, /* -error bounds_check flag */
- 0x50002, /* Ndr library version */
- 0,
- 0x700022b, /* MIDL Version 7.0.555 */
- 0,
- 0,
- 0, /* notify & notify_flag routine table */
- 0x1, /* MIDL flag */
- 0, /* cs routines */
- 0, /* proxy/server info */
- 0
- };
-
-const CInterfaceProxyVtbl * const _AccessibleTableCell_ProxyVtblList[] =
-{
- ( CInterfaceProxyVtbl *) &_IAccessibleTableCellProxyVtbl,
- 0
-};
-
-const CInterfaceStubVtbl * const _AccessibleTableCell_StubVtblList[] =
-{
- ( CInterfaceStubVtbl *) &_IAccessibleTableCellStubVtbl,
- 0
-};
-
-PCInterfaceName const _AccessibleTableCell_InterfaceNamesList[] =
-{
- "IAccessibleTableCell",
- 0
-};
-
-
-#define _AccessibleTableCell_CHECK_IID(n) IID_GENERIC_CHECK_IID( _AccessibleTableCell, pIID, n)
-
-int __stdcall _AccessibleTableCell_IID_Lookup( const IID * pIID, int * pIndex )
-{
-
- if(!_AccessibleTableCell_CHECK_IID(0))
- {
- *pIndex = 0;
- return 1;
- }
-
- return 0;
-}
-
-const ExtendedProxyFileInfo AccessibleTableCell_ProxyFileInfo =
-{
- (PCInterfaceProxyVtblList *) & _AccessibleTableCell_ProxyVtblList,
- (PCInterfaceStubVtblList *) & _AccessibleTableCell_StubVtblList,
- (const PCInterfaceName * ) & _AccessibleTableCell_InterfaceNamesList,
- 0, /* no delegation */
- & _AccessibleTableCell_IID_Lookup,
- 1,
- 2,
- 0, /* table of [async_uuid] interfaces */
- 0, /* Filler1 */
- 0, /* Filler2 */
- 0 /* Filler3 */
-};
-#pragma optimize("", on )
-#if _MSC_VER >= 1200
-#pragma warning(pop)
-#endif
-
-
-#endif /* !defined(_M_IA64) && !defined(_M_AMD64)*/
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleTable_i.c b/src/3rdparty/iaccessible2/generated/x86/AccessibleTable_i.c
deleted file mode 100644
index 0fa33967ac..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleTable_i.c
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
-
-/* link this file in with the server and any clients */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:54 2012
- */
-/* Compiler settings for AccessibleTable.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#include <rpc.h>
-#include <rpcndr.h>
-
-#ifdef _MIDL_USE_GUIDDEF_
-
-#ifndef INITGUID
-#define INITGUID
-#include <guiddef.h>
-#undef INITGUID
-#else
-#include <guiddef.h>
-#endif
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
-
-#else // !_MIDL_USE_GUIDDEF_
-
-#ifndef __IID_DEFINED__
-#define __IID_DEFINED__
-
-typedef struct _IID
-{
- unsigned long x;
- unsigned short s1;
- unsigned short s2;
- unsigned char c[8];
-} IID;
-
-#endif // __IID_DEFINED__
-
-#ifndef CLSID_DEFINED
-#define CLSID_DEFINED
-typedef IID CLSID;
-#endif // CLSID_DEFINED
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
-
-#endif !_MIDL_USE_GUIDDEF_
-
-MIDL_DEFINE_GUID(IID, IID_IAccessibleTable,0x35AD8070,0xC20C,0x4fb4,0xB0,0x94,0xF4,0xF7,0x27,0x5D,0xD4,0x69);
-
-#undef MIDL_DEFINE_GUID
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleTable_p.c b/src/3rdparty/iaccessible2/generated/x86/AccessibleTable_p.c
deleted file mode 100644
index 9ec9ffdb46..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleTable_p.c
+++ /dev/null
@@ -1,1526 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the proxy stub code */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:54 2012
- */
-/* Compiler settings for AccessibleTable.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#if !defined(_M_IA64) && !defined(_M_AMD64)
-
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-#if _MSC_VER >= 1200
-#pragma warning(push)
-#endif
-
-#pragma warning( disable: 4211 ) /* redefine extern to static */
-#pragma warning( disable: 4232 ) /* dllimport identity*/
-#pragma warning( disable: 4024 ) /* array to pointer mapping*/
-#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */
-#pragma warning( disable: 4100 ) /* unreferenced arguments in x86 call */
-
-#pragma optimize("", off )
-
-#define USE_STUBLESS_PROXY
-
-
-/* verify that the <rpcproxy.h> version is high enough to compile this file*/
-#ifndef __REDQ_RPCPROXY_H_VERSION__
-#define __REQUIRED_RPCPROXY_H_VERSION__ 475
-#endif
-
-
-#include "rpcproxy.h"
-#ifndef __RPCPROXY_H_VERSION__
-#error this stub requires an updated version of <rpcproxy.h>
-#endif /* __RPCPROXY_H_VERSION__ */
-
-
-#include "AccessibleTable.h"
-
-#define TYPE_FORMAT_STRING_SIZE 139
-#define PROC_FORMAT_STRING_SIZE 1219
-#define EXPR_FORMAT_STRING_SIZE 1
-#define TRANSMIT_AS_TABLE_SIZE 0
-#define WIRE_MARSHAL_TABLE_SIZE 1
-
-typedef struct _AccessibleTable_MIDL_TYPE_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
- } AccessibleTable_MIDL_TYPE_FORMAT_STRING;
-
-typedef struct _AccessibleTable_MIDL_PROC_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
- } AccessibleTable_MIDL_PROC_FORMAT_STRING;
-
-typedef struct _AccessibleTable_MIDL_EXPR_FORMAT_STRING
- {
- long Pad;
- unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
- } AccessibleTable_MIDL_EXPR_FORMAT_STRING;
-
-
-static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
-{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
-
-
-extern const AccessibleTable_MIDL_TYPE_FORMAT_STRING AccessibleTable__MIDL_TypeFormatString;
-extern const AccessibleTable_MIDL_PROC_FORMAT_STRING AccessibleTable__MIDL_ProcFormatString;
-extern const AccessibleTable_MIDL_EXPR_FORMAT_STRING AccessibleTable__MIDL_ExprFormatString;
-
-
-extern const MIDL_STUB_DESC Object_StubDesc;
-
-
-extern const MIDL_SERVER_INFO IAccessibleTable_ServerInfo;
-extern const MIDL_STUBLESS_PROXY_INFO IAccessibleTable_ProxyInfo;
-
-
-extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ];
-
-#if !defined(__RPC_WIN32__)
-#error Invalid build platform for this stub.
-#endif
-
-#if !(TARGET_IS_NT50_OR_LATER)
-#error You need Windows 2000 or later to run this stub because it uses these features:
-#error /robust command line switch.
-#error However, your C/C++ compilation flags indicate you intend to run this app on earlier systems.
-#error This app will fail with the RPC_X_WRONG_STUB_VERSION error.
-#endif
-
-
-static const AccessibleTable_MIDL_PROC_FORMAT_STRING AccessibleTable__MIDL_ProcFormatString =
- {
- 0,
- {
-
- /* Procedure get_accessibleAt */
-
- 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 2 */ NdrFcLong( 0x0 ), /* 0 */
-/* 6 */ NdrFcShort( 0x3 ), /* 3 */
-/* 8 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
-/* 10 */ NdrFcShort( 0x10 ), /* 16 */
-/* 12 */ NdrFcShort( 0x8 ), /* 8 */
-/* 14 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x4, /* 4 */
-/* 16 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 18 */ NdrFcShort( 0x0 ), /* 0 */
-/* 20 */ NdrFcShort( 0x0 ), /* 0 */
-/* 22 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter row */
-
-/* 24 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 26 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 28 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter column */
-
-/* 30 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 32 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 34 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter accessible */
-
-/* 36 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
-/* 38 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 40 */ NdrFcShort( 0x2 ), /* Type Offset=2 */
-
- /* Return value */
-
-/* 42 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 44 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 46 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_caption */
-
-/* 48 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 50 */ NdrFcLong( 0x0 ), /* 0 */
-/* 54 */ NdrFcShort( 0x4 ), /* 4 */
-/* 56 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 58 */ NdrFcShort( 0x0 ), /* 0 */
-/* 60 */ NdrFcShort( 0x8 ), /* 8 */
-/* 62 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 64 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 66 */ NdrFcShort( 0x0 ), /* 0 */
-/* 68 */ NdrFcShort( 0x0 ), /* 0 */
-/* 70 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter accessible */
-
-/* 72 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
-/* 74 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 76 */ NdrFcShort( 0x2 ), /* Type Offset=2 */
-
- /* Return value */
-
-/* 78 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 80 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 82 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_childIndex */
-
-/* 84 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 86 */ NdrFcLong( 0x0 ), /* 0 */
-/* 90 */ NdrFcShort( 0x5 ), /* 5 */
-/* 92 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
-/* 94 */ NdrFcShort( 0x10 ), /* 16 */
-/* 96 */ NdrFcShort( 0x24 ), /* 36 */
-/* 98 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x4, /* 4 */
-/* 100 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 102 */ NdrFcShort( 0x0 ), /* 0 */
-/* 104 */ NdrFcShort( 0x0 ), /* 0 */
-/* 106 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter rowIndex */
-
-/* 108 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 110 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 112 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter columnIndex */
-
-/* 114 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 116 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 118 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter cellIndex */
-
-/* 120 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 122 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 124 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 126 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 128 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 130 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_columnDescription */
-
-/* 132 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 134 */ NdrFcLong( 0x0 ), /* 0 */
-/* 138 */ NdrFcShort( 0x6 ), /* 6 */
-/* 140 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 142 */ NdrFcShort( 0x8 ), /* 8 */
-/* 144 */ NdrFcShort( 0x8 ), /* 8 */
-/* 146 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 148 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 150 */ NdrFcShort( 0x1 ), /* 1 */
-/* 152 */ NdrFcShort( 0x0 ), /* 0 */
-/* 154 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter column */
-
-/* 156 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 158 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 160 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter description */
-
-/* 162 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 164 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 166 */ NdrFcShort( 0x3a ), /* Type Offset=58 */
-
- /* Return value */
-
-/* 168 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 170 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 172 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_columnExtentAt */
-
-/* 174 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 176 */ NdrFcLong( 0x0 ), /* 0 */
-/* 180 */ NdrFcShort( 0x7 ), /* 7 */
-/* 182 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
-/* 184 */ NdrFcShort( 0x10 ), /* 16 */
-/* 186 */ NdrFcShort( 0x24 ), /* 36 */
-/* 188 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x4, /* 4 */
-/* 190 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 192 */ NdrFcShort( 0x0 ), /* 0 */
-/* 194 */ NdrFcShort( 0x0 ), /* 0 */
-/* 196 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter row */
-
-/* 198 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 200 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 202 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter column */
-
-/* 204 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 206 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 208 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter nColumnsSpanned */
-
-/* 210 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 212 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 214 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 216 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 218 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 220 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_columnHeader */
-
-/* 222 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 224 */ NdrFcLong( 0x0 ), /* 0 */
-/* 228 */ NdrFcShort( 0x8 ), /* 8 */
-/* 230 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 232 */ NdrFcShort( 0x0 ), /* 0 */
-/* 234 */ NdrFcShort( 0x24 ), /* 36 */
-/* 236 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 238 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 240 */ NdrFcShort( 0x0 ), /* 0 */
-/* 242 */ NdrFcShort( 0x0 ), /* 0 */
-/* 244 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter accessibleTable */
-
-/* 246 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
-/* 248 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 250 */ NdrFcShort( 0x44 ), /* Type Offset=68 */
-
- /* Parameter startingRowIndex */
-
-/* 252 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 254 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 256 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 258 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 260 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 262 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_columnIndex */
-
-/* 264 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 266 */ NdrFcLong( 0x0 ), /* 0 */
-/* 270 */ NdrFcShort( 0x9 ), /* 9 */
-/* 272 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 274 */ NdrFcShort( 0x8 ), /* 8 */
-/* 276 */ NdrFcShort( 0x24 ), /* 36 */
-/* 278 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x3, /* 3 */
-/* 280 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 282 */ NdrFcShort( 0x0 ), /* 0 */
-/* 284 */ NdrFcShort( 0x0 ), /* 0 */
-/* 286 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter cellIndex */
-
-/* 288 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 290 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 292 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter columnIndex */
-
-/* 294 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 296 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 298 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 300 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 302 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 304 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_nColumns */
-
-/* 306 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 308 */ NdrFcLong( 0x0 ), /* 0 */
-/* 312 */ NdrFcShort( 0xa ), /* 10 */
-/* 314 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 316 */ NdrFcShort( 0x0 ), /* 0 */
-/* 318 */ NdrFcShort( 0x24 ), /* 36 */
-/* 320 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 322 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 324 */ NdrFcShort( 0x0 ), /* 0 */
-/* 326 */ NdrFcShort( 0x0 ), /* 0 */
-/* 328 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter columnCount */
-
-/* 330 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 332 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 334 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 336 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 338 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 340 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_nRows */
-
-/* 342 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 344 */ NdrFcLong( 0x0 ), /* 0 */
-/* 348 */ NdrFcShort( 0xb ), /* 11 */
-/* 350 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 352 */ NdrFcShort( 0x0 ), /* 0 */
-/* 354 */ NdrFcShort( 0x24 ), /* 36 */
-/* 356 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 358 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 360 */ NdrFcShort( 0x0 ), /* 0 */
-/* 362 */ NdrFcShort( 0x0 ), /* 0 */
-/* 364 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter rowCount */
-
-/* 366 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 368 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 370 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 372 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 374 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 376 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_nSelectedChildren */
-
-/* 378 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 380 */ NdrFcLong( 0x0 ), /* 0 */
-/* 384 */ NdrFcShort( 0xc ), /* 12 */
-/* 386 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 388 */ NdrFcShort( 0x0 ), /* 0 */
-/* 390 */ NdrFcShort( 0x24 ), /* 36 */
-/* 392 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 394 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 396 */ NdrFcShort( 0x0 ), /* 0 */
-/* 398 */ NdrFcShort( 0x0 ), /* 0 */
-/* 400 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter cellCount */
-
-/* 402 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 404 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 406 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 408 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 410 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 412 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_nSelectedColumns */
-
-/* 414 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 416 */ NdrFcLong( 0x0 ), /* 0 */
-/* 420 */ NdrFcShort( 0xd ), /* 13 */
-/* 422 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 424 */ NdrFcShort( 0x0 ), /* 0 */
-/* 426 */ NdrFcShort( 0x24 ), /* 36 */
-/* 428 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 430 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 432 */ NdrFcShort( 0x0 ), /* 0 */
-/* 434 */ NdrFcShort( 0x0 ), /* 0 */
-/* 436 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter columnCount */
-
-/* 438 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 440 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 442 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 444 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 446 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 448 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_nSelectedRows */
-
-/* 450 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 452 */ NdrFcLong( 0x0 ), /* 0 */
-/* 456 */ NdrFcShort( 0xe ), /* 14 */
-/* 458 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 460 */ NdrFcShort( 0x0 ), /* 0 */
-/* 462 */ NdrFcShort( 0x24 ), /* 36 */
-/* 464 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 466 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 468 */ NdrFcShort( 0x0 ), /* 0 */
-/* 470 */ NdrFcShort( 0x0 ), /* 0 */
-/* 472 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter rowCount */
-
-/* 474 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 476 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 478 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 480 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 482 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 484 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_rowDescription */
-
-/* 486 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 488 */ NdrFcLong( 0x0 ), /* 0 */
-/* 492 */ NdrFcShort( 0xf ), /* 15 */
-/* 494 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 496 */ NdrFcShort( 0x8 ), /* 8 */
-/* 498 */ NdrFcShort( 0x8 ), /* 8 */
-/* 500 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 502 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 504 */ NdrFcShort( 0x1 ), /* 1 */
-/* 506 */ NdrFcShort( 0x0 ), /* 0 */
-/* 508 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter row */
-
-/* 510 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 512 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 514 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter description */
-
-/* 516 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 518 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 520 */ NdrFcShort( 0x3a ), /* Type Offset=58 */
-
- /* Return value */
-
-/* 522 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 524 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 526 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_rowExtentAt */
-
-/* 528 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 530 */ NdrFcLong( 0x0 ), /* 0 */
-/* 534 */ NdrFcShort( 0x10 ), /* 16 */
-/* 536 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
-/* 538 */ NdrFcShort( 0x10 ), /* 16 */
-/* 540 */ NdrFcShort( 0x24 ), /* 36 */
-/* 542 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x4, /* 4 */
-/* 544 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 546 */ NdrFcShort( 0x0 ), /* 0 */
-/* 548 */ NdrFcShort( 0x0 ), /* 0 */
-/* 550 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter row */
-
-/* 552 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 554 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 556 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter column */
-
-/* 558 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 560 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 562 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter nRowsSpanned */
-
-/* 564 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 566 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 568 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 570 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 572 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 574 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_rowHeader */
-
-/* 576 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 578 */ NdrFcLong( 0x0 ), /* 0 */
-/* 582 */ NdrFcShort( 0x11 ), /* 17 */
-/* 584 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 586 */ NdrFcShort( 0x0 ), /* 0 */
-/* 588 */ NdrFcShort( 0x24 ), /* 36 */
-/* 590 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x3, /* 3 */
-/* 592 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 594 */ NdrFcShort( 0x0 ), /* 0 */
-/* 596 */ NdrFcShort( 0x0 ), /* 0 */
-/* 598 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter accessibleTable */
-
-/* 600 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
-/* 602 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 604 */ NdrFcShort( 0x44 ), /* Type Offset=68 */
-
- /* Parameter startingColumnIndex */
-
-/* 606 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 608 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 610 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 612 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 614 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 616 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_rowIndex */
-
-/* 618 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 620 */ NdrFcLong( 0x0 ), /* 0 */
-/* 624 */ NdrFcShort( 0x12 ), /* 18 */
-/* 626 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 628 */ NdrFcShort( 0x8 ), /* 8 */
-/* 630 */ NdrFcShort( 0x24 ), /* 36 */
-/* 632 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x3, /* 3 */
-/* 634 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 636 */ NdrFcShort( 0x0 ), /* 0 */
-/* 638 */ NdrFcShort( 0x0 ), /* 0 */
-/* 640 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter cellIndex */
-
-/* 642 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 644 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 646 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter rowIndex */
-
-/* 648 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 650 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 652 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 654 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 656 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 658 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_selectedChildren */
-
-/* 660 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 662 */ NdrFcLong( 0x0 ), /* 0 */
-/* 666 */ NdrFcShort( 0x13 ), /* 19 */
-/* 668 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
-/* 670 */ NdrFcShort( 0x8 ), /* 8 */
-/* 672 */ NdrFcShort( 0x24 ), /* 36 */
-/* 674 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x4, /* 4 */
-/* 676 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 678 */ NdrFcShort( 0x1 ), /* 1 */
-/* 680 */ NdrFcShort( 0x0 ), /* 0 */
-/* 682 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter maxChildren */
-
-/* 684 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 686 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 688 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter children */
-
-/* 690 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
-/* 692 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 694 */ NdrFcShort( 0x5a ), /* Type Offset=90 */
-
- /* Parameter nChildren */
-
-/* 696 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 698 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 700 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 702 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 704 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 706 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_selectedColumns */
-
-/* 708 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 710 */ NdrFcLong( 0x0 ), /* 0 */
-/* 714 */ NdrFcShort( 0x14 ), /* 20 */
-/* 716 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
-/* 718 */ NdrFcShort( 0x8 ), /* 8 */
-/* 720 */ NdrFcShort( 0x24 ), /* 36 */
-/* 722 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x4, /* 4 */
-/* 724 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 726 */ NdrFcShort( 0x1 ), /* 1 */
-/* 728 */ NdrFcShort( 0x0 ), /* 0 */
-/* 730 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter maxColumns */
-
-/* 732 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 734 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 736 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter columns */
-
-/* 738 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
-/* 740 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 742 */ NdrFcShort( 0x5a ), /* Type Offset=90 */
-
- /* Parameter nColumns */
-
-/* 744 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 746 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 748 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 750 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 752 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 754 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_selectedRows */
-
-/* 756 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 758 */ NdrFcLong( 0x0 ), /* 0 */
-/* 762 */ NdrFcShort( 0x15 ), /* 21 */
-/* 764 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
-/* 766 */ NdrFcShort( 0x8 ), /* 8 */
-/* 768 */ NdrFcShort( 0x24 ), /* 36 */
-/* 770 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x4, /* 4 */
-/* 772 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 774 */ NdrFcShort( 0x1 ), /* 1 */
-/* 776 */ NdrFcShort( 0x0 ), /* 0 */
-/* 778 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter maxRows */
-
-/* 780 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 782 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 784 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter rows */
-
-/* 786 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
-/* 788 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 790 */ NdrFcShort( 0x5a ), /* Type Offset=90 */
-
- /* Parameter nRows */
-
-/* 792 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 794 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 796 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 798 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 800 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 802 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_summary */
-
-/* 804 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 806 */ NdrFcLong( 0x0 ), /* 0 */
-/* 810 */ NdrFcShort( 0x16 ), /* 22 */
-/* 812 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 814 */ NdrFcShort( 0x0 ), /* 0 */
-/* 816 */ NdrFcShort( 0x8 ), /* 8 */
-/* 818 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 820 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 822 */ NdrFcShort( 0x0 ), /* 0 */
-/* 824 */ NdrFcShort( 0x0 ), /* 0 */
-/* 826 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter accessible */
-
-/* 828 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
-/* 830 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 832 */ NdrFcShort( 0x2 ), /* Type Offset=2 */
-
- /* Return value */
-
-/* 834 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 836 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 838 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_isColumnSelected */
-
-/* 840 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 842 */ NdrFcLong( 0x0 ), /* 0 */
-/* 846 */ NdrFcShort( 0x17 ), /* 23 */
-/* 848 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 850 */ NdrFcShort( 0x8 ), /* 8 */
-/* 852 */ NdrFcShort( 0x21 ), /* 33 */
-/* 854 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x3, /* 3 */
-/* 856 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 858 */ NdrFcShort( 0x0 ), /* 0 */
-/* 860 */ NdrFcShort( 0x0 ), /* 0 */
-/* 862 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter column */
-
-/* 864 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 866 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 868 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter isSelected */
-
-/* 870 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 872 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 874 */ 0x3, /* FC_SMALL */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 876 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 878 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 880 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_isRowSelected */
-
-/* 882 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 884 */ NdrFcLong( 0x0 ), /* 0 */
-/* 888 */ NdrFcShort( 0x18 ), /* 24 */
-/* 890 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 892 */ NdrFcShort( 0x8 ), /* 8 */
-/* 894 */ NdrFcShort( 0x21 ), /* 33 */
-/* 896 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x3, /* 3 */
-/* 898 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 900 */ NdrFcShort( 0x0 ), /* 0 */
-/* 902 */ NdrFcShort( 0x0 ), /* 0 */
-/* 904 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter row */
-
-/* 906 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 908 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 910 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter isSelected */
-
-/* 912 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 914 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 916 */ 0x3, /* FC_SMALL */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 918 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 920 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 922 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_isSelected */
-
-/* 924 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 926 */ NdrFcLong( 0x0 ), /* 0 */
-/* 930 */ NdrFcShort( 0x19 ), /* 25 */
-/* 932 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
-/* 934 */ NdrFcShort( 0x10 ), /* 16 */
-/* 936 */ NdrFcShort( 0x21 ), /* 33 */
-/* 938 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x4, /* 4 */
-/* 940 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 942 */ NdrFcShort( 0x0 ), /* 0 */
-/* 944 */ NdrFcShort( 0x0 ), /* 0 */
-/* 946 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter row */
-
-/* 948 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 950 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 952 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter column */
-
-/* 954 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 956 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 958 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter isSelected */
-
-/* 960 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 962 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 964 */ 0x3, /* FC_SMALL */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 966 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 968 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 970 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure selectRow */
-
-/* 972 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 974 */ NdrFcLong( 0x0 ), /* 0 */
-/* 978 */ NdrFcShort( 0x1a ), /* 26 */
-/* 980 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 982 */ NdrFcShort( 0x8 ), /* 8 */
-/* 984 */ NdrFcShort( 0x8 ), /* 8 */
-/* 986 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 988 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 990 */ NdrFcShort( 0x0 ), /* 0 */
-/* 992 */ NdrFcShort( 0x0 ), /* 0 */
-/* 994 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter row */
-
-/* 996 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 998 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 1000 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 1002 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 1004 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 1006 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure selectColumn */
-
-/* 1008 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 1010 */ NdrFcLong( 0x0 ), /* 0 */
-/* 1014 */ NdrFcShort( 0x1b ), /* 27 */
-/* 1016 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 1018 */ NdrFcShort( 0x8 ), /* 8 */
-/* 1020 */ NdrFcShort( 0x8 ), /* 8 */
-/* 1022 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 1024 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 1026 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1028 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1030 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter column */
-
-/* 1032 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 1034 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 1036 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 1038 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 1040 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 1042 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure unselectRow */
-
-/* 1044 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 1046 */ NdrFcLong( 0x0 ), /* 0 */
-/* 1050 */ NdrFcShort( 0x1c ), /* 28 */
-/* 1052 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 1054 */ NdrFcShort( 0x8 ), /* 8 */
-/* 1056 */ NdrFcShort( 0x8 ), /* 8 */
-/* 1058 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 1060 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 1062 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1064 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1066 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter row */
-
-/* 1068 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 1070 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 1072 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 1074 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 1076 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 1078 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure unselectColumn */
-
-/* 1080 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 1082 */ NdrFcLong( 0x0 ), /* 0 */
-/* 1086 */ NdrFcShort( 0x1d ), /* 29 */
-/* 1088 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 1090 */ NdrFcShort( 0x8 ), /* 8 */
-/* 1092 */ NdrFcShort( 0x8 ), /* 8 */
-/* 1094 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 1096 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 1098 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1100 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1102 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter column */
-
-/* 1104 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 1106 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 1108 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 1110 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 1112 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 1114 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_rowColumnExtentsAtIndex */
-
-/* 1116 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 1118 */ NdrFcLong( 0x0 ), /* 0 */
-/* 1122 */ NdrFcShort( 0x1e ), /* 30 */
-/* 1124 */ NdrFcShort( 0x20 ), /* x86 Stack size/offset = 32 */
-/* 1126 */ NdrFcShort( 0x8 ), /* 8 */
-/* 1128 */ NdrFcShort( 0x91 ), /* 145 */
-/* 1130 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x7, /* 7 */
-/* 1132 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 1134 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1136 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1138 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter index */
-
-/* 1140 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 1142 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 1144 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter row */
-
-/* 1146 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 1148 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 1150 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter column */
-
-/* 1152 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 1154 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 1156 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter rowExtents */
-
-/* 1158 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 1160 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 1162 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter columnExtents */
-
-/* 1164 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 1166 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
-/* 1168 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter isSelected */
-
-/* 1170 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 1172 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */
-/* 1174 */ 0x3, /* FC_SMALL */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 1176 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 1178 */ NdrFcShort( 0x1c ), /* x86 Stack size/offset = 28 */
-/* 1180 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_modelChange */
-
-/* 1182 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 1184 */ NdrFcLong( 0x0 ), /* 0 */
-/* 1188 */ NdrFcShort( 0x1f ), /* 31 */
-/* 1190 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 1192 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1194 */ NdrFcShort( 0x8 ), /* 8 */
-/* 1196 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 1198 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 1200 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1202 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1204 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter modelChange */
-
-/* 1206 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */
-/* 1208 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 1210 */ NdrFcShort( 0x7c ), /* Type Offset=124 */
-
- /* Return value */
-
-/* 1212 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 1214 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 1216 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- 0x0
- }
- };
-
-static const AccessibleTable_MIDL_TYPE_FORMAT_STRING AccessibleTable__MIDL_TypeFormatString =
- {
- 0,
- {
- NdrFcShort( 0x0 ), /* 0 */
-/* 2 */
- 0x11, 0x10, /* FC_RP [pointer_deref] */
-/* 4 */ NdrFcShort( 0x2 ), /* Offset= 2 (6) */
-/* 6 */
- 0x2f, /* FC_IP */
- 0x5a, /* FC_CONSTANT_IID */
-/* 8 */ NdrFcLong( 0x0 ), /* 0 */
-/* 12 */ NdrFcShort( 0x0 ), /* 0 */
-/* 14 */ NdrFcShort( 0x0 ), /* 0 */
-/* 16 */ 0xc0, /* 192 */
- 0x0, /* 0 */
-/* 18 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 20 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 22 */ 0x0, /* 0 */
- 0x46, /* 70 */
-/* 24 */
- 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
-/* 26 */ 0x8, /* FC_LONG */
- 0x5c, /* FC_PAD */
-/* 28 */
- 0x11, 0x4, /* FC_RP [alloced_on_stack] */
-/* 30 */ NdrFcShort( 0x1c ), /* Offset= 28 (58) */
-/* 32 */
- 0x13, 0x0, /* FC_OP */
-/* 34 */ NdrFcShort( 0xe ), /* Offset= 14 (48) */
-/* 36 */
- 0x1b, /* FC_CARRAY */
- 0x1, /* 1 */
-/* 38 */ NdrFcShort( 0x2 ), /* 2 */
-/* 40 */ 0x9, /* Corr desc: FC_ULONG */
- 0x0, /* */
-/* 42 */ NdrFcShort( 0xfffc ), /* -4 */
-/* 44 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 46 */ 0x6, /* FC_SHORT */
- 0x5b, /* FC_END */
-/* 48 */
- 0x17, /* FC_CSTRUCT */
- 0x3, /* 3 */
-/* 50 */ NdrFcShort( 0x8 ), /* 8 */
-/* 52 */ NdrFcShort( 0xfff0 ), /* Offset= -16 (36) */
-/* 54 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 56 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 58 */ 0xb4, /* FC_USER_MARSHAL */
- 0x83, /* 131 */
-/* 60 */ NdrFcShort( 0x0 ), /* 0 */
-/* 62 */ NdrFcShort( 0x4 ), /* 4 */
-/* 64 */ NdrFcShort( 0x0 ), /* 0 */
-/* 66 */ NdrFcShort( 0xffde ), /* Offset= -34 (32) */
-/* 68 */
- 0x11, 0x10, /* FC_RP [pointer_deref] */
-/* 70 */ NdrFcShort( 0x2 ), /* Offset= 2 (72) */
-/* 72 */
- 0x2f, /* FC_IP */
- 0x5a, /* FC_CONSTANT_IID */
-/* 74 */ NdrFcLong( 0x35ad8070 ), /* 900563056 */
-/* 78 */ NdrFcShort( 0xc20c ), /* -15860 */
-/* 80 */ NdrFcShort( 0x4fb4 ), /* 20404 */
-/* 82 */ 0xb0, /* 176 */
- 0x94, /* 148 */
-/* 84 */ 0xf4, /* 244 */
- 0xf7, /* 247 */
-/* 86 */ 0x27, /* 39 */
- 0x5d, /* 93 */
-/* 88 */ 0xd4, /* 212 */
- 0x69, /* 105 */
-/* 90 */
- 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */
-/* 92 */ NdrFcShort( 0x2 ), /* Offset= 2 (94) */
-/* 94 */
- 0x13, 0x0, /* FC_OP */
-/* 96 */ NdrFcShort( 0x2 ), /* Offset= 2 (98) */
-/* 98 */
- 0x1c, /* FC_CVARRAY */
- 0x3, /* 3 */
-/* 100 */ NdrFcShort( 0x4 ), /* 4 */
-/* 102 */ 0x28, /* Corr desc: parameter, FC_LONG */
- 0x0, /* */
-/* 104 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 106 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 108 */ 0x28, /* Corr desc: parameter, FC_LONG */
- 0x54, /* FC_DEREFERENCE */
-/* 110 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 112 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 114 */ 0x8, /* FC_LONG */
- 0x5b, /* FC_END */
-/* 116 */
- 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
-/* 118 */ 0x3, /* FC_SMALL */
- 0x5c, /* FC_PAD */
-/* 120 */
- 0x11, 0x4, /* FC_RP [alloced_on_stack] */
-/* 122 */ NdrFcShort( 0x2 ), /* Offset= 2 (124) */
-/* 124 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 126 */ NdrFcShort( 0x14 ), /* 20 */
-/* 128 */ NdrFcShort( 0x0 ), /* 0 */
-/* 130 */ NdrFcShort( 0x0 ), /* Offset= 0 (130) */
-/* 132 */ 0xd, /* FC_ENUM16 */
- 0x8, /* FC_LONG */
-/* 134 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 136 */ 0x8, /* FC_LONG */
- 0x5b, /* FC_END */
-
- 0x0
- }
- };
-
-static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ] =
- {
-
- {
- BSTR_UserSize
- ,BSTR_UserMarshal
- ,BSTR_UserUnmarshal
- ,BSTR_UserFree
- }
-
- };
-
-
-
-/* Object interface: IUnknown, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
-
-
-/* Object interface: IAccessibleTable, ver. 0.0,
- GUID={0x35AD8070,0xC20C,0x4fb4,{0xB0,0x94,0xF4,0xF7,0x27,0x5D,0xD4,0x69}} */
-
-#pragma code_seg(".orpc")
-static const unsigned short IAccessibleTable_FormatStringOffsetTable[] =
- {
- 0,
- 48,
- 84,
- 132,
- 174,
- 222,
- 264,
- 306,
- 342,
- 378,
- 414,
- 450,
- 486,
- 528,
- 576,
- 618,
- 660,
- 708,
- 756,
- 804,
- 840,
- 882,
- 924,
- 972,
- 1008,
- 1044,
- 1080,
- 1116,
- 1182
- };
-
-static const MIDL_STUBLESS_PROXY_INFO IAccessibleTable_ProxyInfo =
- {
- &Object_StubDesc,
- AccessibleTable__MIDL_ProcFormatString.Format,
- &IAccessibleTable_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0
- };
-
-
-static const MIDL_SERVER_INFO IAccessibleTable_ServerInfo =
- {
- &Object_StubDesc,
- 0,
- AccessibleTable__MIDL_ProcFormatString.Format,
- &IAccessibleTable_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0,
- 0};
-CINTERFACE_PROXY_VTABLE(32) _IAccessibleTableProxyVtbl =
-{
- &IAccessibleTable_ProxyInfo,
- &IID_IAccessibleTable,
- IUnknown_QueryInterface_Proxy,
- IUnknown_AddRef_Proxy,
- IUnknown_Release_Proxy ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_accessibleAt */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_caption */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_childIndex */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_columnDescription */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_columnExtentAt */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_columnHeader */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_columnIndex */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_nColumns */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_nRows */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_nSelectedChildren */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_nSelectedColumns */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_nSelectedRows */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_rowDescription */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_rowExtentAt */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_rowHeader */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_rowIndex */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_selectedChildren */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_selectedColumns */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_selectedRows */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_summary */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_isColumnSelected */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_isRowSelected */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_isSelected */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::selectRow */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::selectColumn */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::unselectRow */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::unselectColumn */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_rowColumnExtentsAtIndex */ ,
- (void *) (INT_PTR) -1 /* IAccessibleTable::get_modelChange */
-};
-
-const CInterfaceStubVtbl _IAccessibleTableStubVtbl =
-{
- &IID_IAccessibleTable,
- &IAccessibleTable_ServerInfo,
- 32,
- 0, /* pure interpreted */
- CStdStubBuffer_METHODS
-};
-
-static const MIDL_STUB_DESC Object_StubDesc =
- {
- 0,
- NdrOleAllocate,
- NdrOleFree,
- 0,
- 0,
- 0,
- 0,
- 0,
- AccessibleTable__MIDL_TypeFormatString.Format,
- 1, /* -error bounds_check flag */
- 0x50002, /* Ndr library version */
- 0,
- 0x700022b, /* MIDL Version 7.0.555 */
- 0,
- UserMarshalRoutines,
- 0, /* notify & notify_flag routine table */
- 0x1, /* MIDL flag */
- 0, /* cs routines */
- 0, /* proxy/server info */
- 0
- };
-
-const CInterfaceProxyVtbl * const _AccessibleTable_ProxyVtblList[] =
-{
- ( CInterfaceProxyVtbl *) &_IAccessibleTableProxyVtbl,
- 0
-};
-
-const CInterfaceStubVtbl * const _AccessibleTable_StubVtblList[] =
-{
- ( CInterfaceStubVtbl *) &_IAccessibleTableStubVtbl,
- 0
-};
-
-PCInterfaceName const _AccessibleTable_InterfaceNamesList[] =
-{
- "IAccessibleTable",
- 0
-};
-
-
-#define _AccessibleTable_CHECK_IID(n) IID_GENERIC_CHECK_IID( _AccessibleTable, pIID, n)
-
-int __stdcall _AccessibleTable_IID_Lookup( const IID * pIID, int * pIndex )
-{
-
- if(!_AccessibleTable_CHECK_IID(0))
- {
- *pIndex = 0;
- return 1;
- }
-
- return 0;
-}
-
-const ExtendedProxyFileInfo AccessibleTable_ProxyFileInfo =
-{
- (PCInterfaceProxyVtblList *) & _AccessibleTable_ProxyVtblList,
- (PCInterfaceStubVtblList *) & _AccessibleTable_StubVtblList,
- (const PCInterfaceName * ) & _AccessibleTable_InterfaceNamesList,
- 0, /* no delegation */
- & _AccessibleTable_IID_Lookup,
- 1,
- 2,
- 0, /* table of [async_uuid] interfaces */
- 0, /* Filler1 */
- 0, /* Filler2 */
- 0 /* Filler3 */
-};
-#pragma optimize("", on )
-#if _MSC_VER >= 1200
-#pragma warning(pop)
-#endif
-
-
-#endif /* !defined(_M_IA64) && !defined(_M_AMD64)*/
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleText.h b/src/3rdparty/iaccessible2/generated/x86/AccessibleText.h
deleted file mode 100644
index 4ad53cfa7e..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleText.h
+++ /dev/null
@@ -1,435 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:55 2012
- */
-/* Compiler settings for AccessibleText.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-#ifndef COM_NO_WINDOWS_H
-#include "windows.h"
-#include "ole2.h"
-#endif /*COM_NO_WINDOWS_H*/
-
-#ifndef __AccessibleText_h__
-#define __AccessibleText_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifndef __IAccessibleText_FWD_DEFINED__
-#define __IAccessibleText_FWD_DEFINED__
-typedef interface IAccessibleText IAccessibleText;
-#endif /* __IAccessibleText_FWD_DEFINED__ */
-
-
-/* header files for imported files */
-#include "objidl.h"
-#include "oaidl.h"
-#include "oleacc.h"
-#include "IA2CommonTypes.h"
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-/* interface __MIDL_itf_AccessibleText_0000_0000 */
-/* [local] */
-
-typedef struct IA2TextSegment
- {
- BSTR text;
- long start;
- long end;
- } IA2TextSegment;
-
-
-enum IA2TextBoundaryType
- { IA2_TEXT_BOUNDARY_CHAR = 0,
- IA2_TEXT_BOUNDARY_WORD = ( IA2_TEXT_BOUNDARY_CHAR + 1 ) ,
- IA2_TEXT_BOUNDARY_SENTENCE = ( IA2_TEXT_BOUNDARY_WORD + 1 ) ,
- IA2_TEXT_BOUNDARY_PARAGRAPH = ( IA2_TEXT_BOUNDARY_SENTENCE + 1 ) ,
- IA2_TEXT_BOUNDARY_LINE = ( IA2_TEXT_BOUNDARY_PARAGRAPH + 1 ) ,
- IA2_TEXT_BOUNDARY_ALL = ( IA2_TEXT_BOUNDARY_LINE + 1 )
- } ;
-
-
-extern RPC_IF_HANDLE __MIDL_itf_AccessibleText_0000_0000_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_AccessibleText_0000_0000_v0_0_s_ifspec;
-
-#ifndef __IAccessibleText_INTERFACE_DEFINED__
-#define __IAccessibleText_INTERFACE_DEFINED__
-
-/* interface IAccessibleText */
-/* [uuid][object] */
-
-
-EXTERN_C const IID IID_IAccessibleText;
-
-#if defined(__cplusplus) && !defined(CINTERFACE)
-
- MIDL_INTERFACE("24FD2FFB-3AAD-4a08-8335-A3AD89C0FB4B")
- IAccessibleText : public IUnknown
- {
- public:
- virtual HRESULT STDMETHODCALLTYPE addSelection(
- /* [in] */ long startOffset,
- /* [in] */ long endOffset) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_attributes(
- /* [in] */ long offset,
- /* [out] */ long *startOffset,
- /* [out] */ long *endOffset,
- /* [retval][out] */ BSTR *textAttributes) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_caretOffset(
- /* [retval][out] */ long *offset) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_characterExtents(
- /* [in] */ long offset,
- /* [in] */ enum IA2CoordinateType coordType,
- /* [out] */ long *x,
- /* [out] */ long *y,
- /* [out] */ long *width,
- /* [retval][out] */ long *height) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelections(
- /* [retval][out] */ long *nSelections) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_offsetAtPoint(
- /* [in] */ long x,
- /* [in] */ long y,
- /* [in] */ enum IA2CoordinateType coordType,
- /* [retval][out] */ long *offset) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selection(
- /* [in] */ long selectionIndex,
- /* [out] */ long *startOffset,
- /* [retval][out] */ long *endOffset) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_text(
- /* [in] */ long startOffset,
- /* [in] */ long endOffset,
- /* [retval][out] */ BSTR *text) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_textBeforeOffset(
- /* [in] */ long offset,
- /* [in] */ enum IA2TextBoundaryType boundaryType,
- /* [out] */ long *startOffset,
- /* [out] */ long *endOffset,
- /* [retval][out] */ BSTR *text) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_textAfterOffset(
- /* [in] */ long offset,
- /* [in] */ enum IA2TextBoundaryType boundaryType,
- /* [out] */ long *startOffset,
- /* [out] */ long *endOffset,
- /* [retval][out] */ BSTR *text) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_textAtOffset(
- /* [in] */ long offset,
- /* [in] */ enum IA2TextBoundaryType boundaryType,
- /* [out] */ long *startOffset,
- /* [out] */ long *endOffset,
- /* [retval][out] */ BSTR *text) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE removeSelection(
- /* [in] */ long selectionIndex) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE setCaretOffset(
- /* [in] */ long offset) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE setSelection(
- /* [in] */ long selectionIndex,
- /* [in] */ long startOffset,
- /* [in] */ long endOffset) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nCharacters(
- /* [retval][out] */ long *nCharacters) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE scrollSubstringTo(
- /* [in] */ long startIndex,
- /* [in] */ long endIndex,
- /* [in] */ enum IA2ScrollType scrollType) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE scrollSubstringToPoint(
- /* [in] */ long startIndex,
- /* [in] */ long endIndex,
- /* [in] */ enum IA2CoordinateType coordinateType,
- /* [in] */ long x,
- /* [in] */ long y) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_newText(
- /* [retval][out] */ IA2TextSegment *newText) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_oldText(
- /* [retval][out] */ IA2TextSegment *oldText) = 0;
-
- };
-
-#else /* C style interface */
-
- typedef struct IAccessibleTextVtbl
- {
- BEGIN_INTERFACE
-
- HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
- IAccessibleText * This,
- /* [in] */ REFIID riid,
- /* [annotation][iid_is][out] */
- __RPC__deref_out void **ppvObject);
-
- ULONG ( STDMETHODCALLTYPE *AddRef )(
- IAccessibleText * This);
-
- ULONG ( STDMETHODCALLTYPE *Release )(
- IAccessibleText * This);
-
- HRESULT ( STDMETHODCALLTYPE *addSelection )(
- IAccessibleText * This,
- /* [in] */ long startOffset,
- /* [in] */ long endOffset);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attributes )(
- IAccessibleText * This,
- /* [in] */ long offset,
- /* [out] */ long *startOffset,
- /* [out] */ long *endOffset,
- /* [retval][out] */ BSTR *textAttributes);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_caretOffset )(
- IAccessibleText * This,
- /* [retval][out] */ long *offset);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_characterExtents )(
- IAccessibleText * This,
- /* [in] */ long offset,
- /* [in] */ enum IA2CoordinateType coordType,
- /* [out] */ long *x,
- /* [out] */ long *y,
- /* [out] */ long *width,
- /* [retval][out] */ long *height);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelections )(
- IAccessibleText * This,
- /* [retval][out] */ long *nSelections);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_offsetAtPoint )(
- IAccessibleText * This,
- /* [in] */ long x,
- /* [in] */ long y,
- /* [in] */ enum IA2CoordinateType coordType,
- /* [retval][out] */ long *offset);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selection )(
- IAccessibleText * This,
- /* [in] */ long selectionIndex,
- /* [out] */ long *startOffset,
- /* [retval][out] */ long *endOffset);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_text )(
- IAccessibleText * This,
- /* [in] */ long startOffset,
- /* [in] */ long endOffset,
- /* [retval][out] */ BSTR *text);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textBeforeOffset )(
- IAccessibleText * This,
- /* [in] */ long offset,
- /* [in] */ enum IA2TextBoundaryType boundaryType,
- /* [out] */ long *startOffset,
- /* [out] */ long *endOffset,
- /* [retval][out] */ BSTR *text);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textAfterOffset )(
- IAccessibleText * This,
- /* [in] */ long offset,
- /* [in] */ enum IA2TextBoundaryType boundaryType,
- /* [out] */ long *startOffset,
- /* [out] */ long *endOffset,
- /* [retval][out] */ BSTR *text);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textAtOffset )(
- IAccessibleText * This,
- /* [in] */ long offset,
- /* [in] */ enum IA2TextBoundaryType boundaryType,
- /* [out] */ long *startOffset,
- /* [out] */ long *endOffset,
- /* [retval][out] */ BSTR *text);
-
- HRESULT ( STDMETHODCALLTYPE *removeSelection )(
- IAccessibleText * This,
- /* [in] */ long selectionIndex);
-
- HRESULT ( STDMETHODCALLTYPE *setCaretOffset )(
- IAccessibleText * This,
- /* [in] */ long offset);
-
- HRESULT ( STDMETHODCALLTYPE *setSelection )(
- IAccessibleText * This,
- /* [in] */ long selectionIndex,
- /* [in] */ long startOffset,
- /* [in] */ long endOffset);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nCharacters )(
- IAccessibleText * This,
- /* [retval][out] */ long *nCharacters);
-
- HRESULT ( STDMETHODCALLTYPE *scrollSubstringTo )(
- IAccessibleText * This,
- /* [in] */ long startIndex,
- /* [in] */ long endIndex,
- /* [in] */ enum IA2ScrollType scrollType);
-
- HRESULT ( STDMETHODCALLTYPE *scrollSubstringToPoint )(
- IAccessibleText * This,
- /* [in] */ long startIndex,
- /* [in] */ long endIndex,
- /* [in] */ enum IA2CoordinateType coordinateType,
- /* [in] */ long x,
- /* [in] */ long y);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_newText )(
- IAccessibleText * This,
- /* [retval][out] */ IA2TextSegment *newText);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_oldText )(
- IAccessibleText * This,
- /* [retval][out] */ IA2TextSegment *oldText);
-
- END_INTERFACE
- } IAccessibleTextVtbl;
-
- interface IAccessibleText
- {
- CONST_VTBL struct IAccessibleTextVtbl *lpVtbl;
- };
-
-
-
-#ifdef COBJMACROS
-
-
-#define IAccessibleText_QueryInterface(This,riid,ppvObject) \
- ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
-
-#define IAccessibleText_AddRef(This) \
- ( (This)->lpVtbl -> AddRef(This) )
-
-#define IAccessibleText_Release(This) \
- ( (This)->lpVtbl -> Release(This) )
-
-
-#define IAccessibleText_addSelection(This,startOffset,endOffset) \
- ( (This)->lpVtbl -> addSelection(This,startOffset,endOffset) )
-
-#define IAccessibleText_get_attributes(This,offset,startOffset,endOffset,textAttributes) \
- ( (This)->lpVtbl -> get_attributes(This,offset,startOffset,endOffset,textAttributes) )
-
-#define IAccessibleText_get_caretOffset(This,offset) \
- ( (This)->lpVtbl -> get_caretOffset(This,offset) )
-
-#define IAccessibleText_get_characterExtents(This,offset,coordType,x,y,width,height) \
- ( (This)->lpVtbl -> get_characterExtents(This,offset,coordType,x,y,width,height) )
-
-#define IAccessibleText_get_nSelections(This,nSelections) \
- ( (This)->lpVtbl -> get_nSelections(This,nSelections) )
-
-#define IAccessibleText_get_offsetAtPoint(This,x,y,coordType,offset) \
- ( (This)->lpVtbl -> get_offsetAtPoint(This,x,y,coordType,offset) )
-
-#define IAccessibleText_get_selection(This,selectionIndex,startOffset,endOffset) \
- ( (This)->lpVtbl -> get_selection(This,selectionIndex,startOffset,endOffset) )
-
-#define IAccessibleText_get_text(This,startOffset,endOffset,text) \
- ( (This)->lpVtbl -> get_text(This,startOffset,endOffset,text) )
-
-#define IAccessibleText_get_textBeforeOffset(This,offset,boundaryType,startOffset,endOffset,text) \
- ( (This)->lpVtbl -> get_textBeforeOffset(This,offset,boundaryType,startOffset,endOffset,text) )
-
-#define IAccessibleText_get_textAfterOffset(This,offset,boundaryType,startOffset,endOffset,text) \
- ( (This)->lpVtbl -> get_textAfterOffset(This,offset,boundaryType,startOffset,endOffset,text) )
-
-#define IAccessibleText_get_textAtOffset(This,offset,boundaryType,startOffset,endOffset,text) \
- ( (This)->lpVtbl -> get_textAtOffset(This,offset,boundaryType,startOffset,endOffset,text) )
-
-#define IAccessibleText_removeSelection(This,selectionIndex) \
- ( (This)->lpVtbl -> removeSelection(This,selectionIndex) )
-
-#define IAccessibleText_setCaretOffset(This,offset) \
- ( (This)->lpVtbl -> setCaretOffset(This,offset) )
-
-#define IAccessibleText_setSelection(This,selectionIndex,startOffset,endOffset) \
- ( (This)->lpVtbl -> setSelection(This,selectionIndex,startOffset,endOffset) )
-
-#define IAccessibleText_get_nCharacters(This,nCharacters) \
- ( (This)->lpVtbl -> get_nCharacters(This,nCharacters) )
-
-#define IAccessibleText_scrollSubstringTo(This,startIndex,endIndex,scrollType) \
- ( (This)->lpVtbl -> scrollSubstringTo(This,startIndex,endIndex,scrollType) )
-
-#define IAccessibleText_scrollSubstringToPoint(This,startIndex,endIndex,coordinateType,x,y) \
- ( (This)->lpVtbl -> scrollSubstringToPoint(This,startIndex,endIndex,coordinateType,x,y) )
-
-#define IAccessibleText_get_newText(This,newText) \
- ( (This)->lpVtbl -> get_newText(This,newText) )
-
-#define IAccessibleText_get_oldText(This,oldText) \
- ( (This)->lpVtbl -> get_oldText(This,oldText) )
-
-#endif /* COBJMACROS */
-
-
-#endif /* C style interface */
-
-
-
-
-#endif /* __IAccessibleText_INTERFACE_DEFINED__ */
-
-
-/* Additional Prototypes for ALL interfaces */
-
-unsigned long __RPC_USER BSTR_UserSize( unsigned long *, unsigned long , BSTR * );
-unsigned char * __RPC_USER BSTR_UserMarshal( unsigned long *, unsigned char *, BSTR * );
-unsigned char * __RPC_USER BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * );
-void __RPC_USER BSTR_UserFree( unsigned long *, BSTR * );
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleText_i.c b/src/3rdparty/iaccessible2/generated/x86/AccessibleText_i.c
deleted file mode 100644
index bfa9e763c1..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleText_i.c
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
-
-/* link this file in with the server and any clients */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:55 2012
- */
-/* Compiler settings for AccessibleText.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#include <rpc.h>
-#include <rpcndr.h>
-
-#ifdef _MIDL_USE_GUIDDEF_
-
-#ifndef INITGUID
-#define INITGUID
-#include <guiddef.h>
-#undef INITGUID
-#else
-#include <guiddef.h>
-#endif
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
-
-#else // !_MIDL_USE_GUIDDEF_
-
-#ifndef __IID_DEFINED__
-#define __IID_DEFINED__
-
-typedef struct _IID
-{
- unsigned long x;
- unsigned short s1;
- unsigned short s2;
- unsigned char c[8];
-} IID;
-
-#endif // __IID_DEFINED__
-
-#ifndef CLSID_DEFINED
-#define CLSID_DEFINED
-typedef IID CLSID;
-#endif // CLSID_DEFINED
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
-
-#endif !_MIDL_USE_GUIDDEF_
-
-MIDL_DEFINE_GUID(IID, IID_IAccessibleText,0x24FD2FFB,0x3AAD,0x4a08,0x83,0x35,0xA3,0xAD,0x89,0xC0,0xFB,0x4B);
-
-#undef MIDL_DEFINE_GUID
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleText_p.c b/src/3rdparty/iaccessible2/generated/x86/AccessibleText_p.c
deleted file mode 100644
index ea56621c62..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleText_p.c
+++ /dev/null
@@ -1,1196 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the proxy stub code */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:55 2012
- */
-/* Compiler settings for AccessibleText.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#if !defined(_M_IA64) && !defined(_M_AMD64)
-
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-#if _MSC_VER >= 1200
-#pragma warning(push)
-#endif
-
-#pragma warning( disable: 4211 ) /* redefine extern to static */
-#pragma warning( disable: 4232 ) /* dllimport identity*/
-#pragma warning( disable: 4024 ) /* array to pointer mapping*/
-#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */
-#pragma warning( disable: 4100 ) /* unreferenced arguments in x86 call */
-
-#pragma optimize("", off )
-
-#define USE_STUBLESS_PROXY
-
-
-/* verify that the <rpcproxy.h> version is high enough to compile this file*/
-#ifndef __REDQ_RPCPROXY_H_VERSION__
-#define __REQUIRED_RPCPROXY_H_VERSION__ 475
-#endif
-
-
-#include "rpcproxy.h"
-#ifndef __RPCPROXY_H_VERSION__
-#error this stub requires an updated version of <rpcproxy.h>
-#endif /* __RPCPROXY_H_VERSION__ */
-
-
-#include "AccessibleText.h"
-
-#define TYPE_FORMAT_STRING_SIZE 67
-#define PROC_FORMAT_STRING_SIZE 901
-#define EXPR_FORMAT_STRING_SIZE 1
-#define TRANSMIT_AS_TABLE_SIZE 0
-#define WIRE_MARSHAL_TABLE_SIZE 1
-
-typedef struct _AccessibleText_MIDL_TYPE_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
- } AccessibleText_MIDL_TYPE_FORMAT_STRING;
-
-typedef struct _AccessibleText_MIDL_PROC_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
- } AccessibleText_MIDL_PROC_FORMAT_STRING;
-
-typedef struct _AccessibleText_MIDL_EXPR_FORMAT_STRING
- {
- long Pad;
- unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
- } AccessibleText_MIDL_EXPR_FORMAT_STRING;
-
-
-static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
-{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
-
-
-extern const AccessibleText_MIDL_TYPE_FORMAT_STRING AccessibleText__MIDL_TypeFormatString;
-extern const AccessibleText_MIDL_PROC_FORMAT_STRING AccessibleText__MIDL_ProcFormatString;
-extern const AccessibleText_MIDL_EXPR_FORMAT_STRING AccessibleText__MIDL_ExprFormatString;
-
-
-extern const MIDL_STUB_DESC Object_StubDesc;
-
-
-extern const MIDL_SERVER_INFO IAccessibleText_ServerInfo;
-extern const MIDL_STUBLESS_PROXY_INFO IAccessibleText_ProxyInfo;
-
-
-extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ];
-
-#if !defined(__RPC_WIN32__)
-#error Invalid build platform for this stub.
-#endif
-
-#if !(TARGET_IS_NT50_OR_LATER)
-#error You need Windows 2000 or later to run this stub because it uses these features:
-#error /robust command line switch.
-#error However, your C/C++ compilation flags indicate you intend to run this app on earlier systems.
-#error This app will fail with the RPC_X_WRONG_STUB_VERSION error.
-#endif
-
-
-static const AccessibleText_MIDL_PROC_FORMAT_STRING AccessibleText__MIDL_ProcFormatString =
- {
- 0,
- {
-
- /* Procedure addSelection */
-
- 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 2 */ NdrFcLong( 0x0 ), /* 0 */
-/* 6 */ NdrFcShort( 0x3 ), /* 3 */
-/* 8 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 10 */ NdrFcShort( 0x10 ), /* 16 */
-/* 12 */ NdrFcShort( 0x8 ), /* 8 */
-/* 14 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x3, /* 3 */
-/* 16 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 18 */ NdrFcShort( 0x0 ), /* 0 */
-/* 20 */ NdrFcShort( 0x0 ), /* 0 */
-/* 22 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter startOffset */
-
-/* 24 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 26 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 28 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter endOffset */
-
-/* 30 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 32 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 34 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 36 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 38 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 40 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_attributes */
-
-/* 42 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 44 */ NdrFcLong( 0x0 ), /* 0 */
-/* 48 */ NdrFcShort( 0x4 ), /* 4 */
-/* 50 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */
-/* 52 */ NdrFcShort( 0x8 ), /* 8 */
-/* 54 */ NdrFcShort( 0x40 ), /* 64 */
-/* 56 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x5, /* 5 */
-/* 58 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 60 */ NdrFcShort( 0x1 ), /* 1 */
-/* 62 */ NdrFcShort( 0x0 ), /* 0 */
-/* 64 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter offset */
-
-/* 66 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 68 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 70 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter startOffset */
-
-/* 72 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 74 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 76 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter endOffset */
-
-/* 78 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 80 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 82 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter textAttributes */
-
-/* 84 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 86 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 88 */ NdrFcShort( 0x24 ), /* Type Offset=36 */
-
- /* Return value */
-
-/* 90 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 92 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
-/* 94 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_caretOffset */
-
-/* 96 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 98 */ NdrFcLong( 0x0 ), /* 0 */
-/* 102 */ NdrFcShort( 0x5 ), /* 5 */
-/* 104 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 106 */ NdrFcShort( 0x0 ), /* 0 */
-/* 108 */ NdrFcShort( 0x24 ), /* 36 */
-/* 110 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 112 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 114 */ NdrFcShort( 0x0 ), /* 0 */
-/* 116 */ NdrFcShort( 0x0 ), /* 0 */
-/* 118 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter offset */
-
-/* 120 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 122 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 124 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 126 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 128 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 130 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_characterExtents */
-
-/* 132 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 134 */ NdrFcLong( 0x0 ), /* 0 */
-/* 138 */ NdrFcShort( 0x6 ), /* 6 */
-/* 140 */ NdrFcShort( 0x20 ), /* x86 Stack size/offset = 32 */
-/* 142 */ NdrFcShort( 0xe ), /* 14 */
-/* 144 */ NdrFcShort( 0x78 ), /* 120 */
-/* 146 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x7, /* 7 */
-/* 148 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 150 */ NdrFcShort( 0x0 ), /* 0 */
-/* 152 */ NdrFcShort( 0x0 ), /* 0 */
-/* 154 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter offset */
-
-/* 156 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 158 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 160 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter coordType */
-
-/* 162 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 164 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 166 */ 0xd, /* FC_ENUM16 */
- 0x0, /* 0 */
-
- /* Parameter x */
-
-/* 168 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 170 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 172 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter y */
-
-/* 174 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 176 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 178 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter width */
-
-/* 180 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 182 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
-/* 184 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter height */
-
-/* 186 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 188 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */
-/* 190 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 192 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 194 */ NdrFcShort( 0x1c ), /* x86 Stack size/offset = 28 */
-/* 196 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_nSelections */
-
-/* 198 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 200 */ NdrFcLong( 0x0 ), /* 0 */
-/* 204 */ NdrFcShort( 0x7 ), /* 7 */
-/* 206 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 208 */ NdrFcShort( 0x0 ), /* 0 */
-/* 210 */ NdrFcShort( 0x24 ), /* 36 */
-/* 212 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 214 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 216 */ NdrFcShort( 0x0 ), /* 0 */
-/* 218 */ NdrFcShort( 0x0 ), /* 0 */
-/* 220 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter nSelections */
-
-/* 222 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 224 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 226 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 228 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 230 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 232 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_offsetAtPoint */
-
-/* 234 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 236 */ NdrFcLong( 0x0 ), /* 0 */
-/* 240 */ NdrFcShort( 0x8 ), /* 8 */
-/* 242 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */
-/* 244 */ NdrFcShort( 0x16 ), /* 22 */
-/* 246 */ NdrFcShort( 0x24 ), /* 36 */
-/* 248 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x5, /* 5 */
-/* 250 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 252 */ NdrFcShort( 0x0 ), /* 0 */
-/* 254 */ NdrFcShort( 0x0 ), /* 0 */
-/* 256 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter x */
-
-/* 258 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 260 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 262 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter y */
-
-/* 264 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 266 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 268 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter coordType */
-
-/* 270 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 272 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 274 */ 0xd, /* FC_ENUM16 */
- 0x0, /* 0 */
-
- /* Parameter offset */
-
-/* 276 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 278 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 280 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 282 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 284 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
-/* 286 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_selection */
-
-/* 288 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 290 */ NdrFcLong( 0x0 ), /* 0 */
-/* 294 */ NdrFcShort( 0x9 ), /* 9 */
-/* 296 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
-/* 298 */ NdrFcShort( 0x8 ), /* 8 */
-/* 300 */ NdrFcShort( 0x40 ), /* 64 */
-/* 302 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x4, /* 4 */
-/* 304 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 306 */ NdrFcShort( 0x0 ), /* 0 */
-/* 308 */ NdrFcShort( 0x0 ), /* 0 */
-/* 310 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter selectionIndex */
-
-/* 312 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 314 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 316 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter startOffset */
-
-/* 318 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 320 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 322 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter endOffset */
-
-/* 324 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 326 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 328 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 330 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 332 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 334 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_text */
-
-/* 336 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 338 */ NdrFcLong( 0x0 ), /* 0 */
-/* 342 */ NdrFcShort( 0xa ), /* 10 */
-/* 344 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
-/* 346 */ NdrFcShort( 0x10 ), /* 16 */
-/* 348 */ NdrFcShort( 0x8 ), /* 8 */
-/* 350 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x4, /* 4 */
-/* 352 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 354 */ NdrFcShort( 0x1 ), /* 1 */
-/* 356 */ NdrFcShort( 0x0 ), /* 0 */
-/* 358 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter startOffset */
-
-/* 360 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 362 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 364 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter endOffset */
-
-/* 366 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 368 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 370 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter text */
-
-/* 372 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 374 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 376 */ NdrFcShort( 0x24 ), /* Type Offset=36 */
-
- /* Return value */
-
-/* 378 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 380 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 382 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_textBeforeOffset */
-
-/* 384 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 386 */ NdrFcLong( 0x0 ), /* 0 */
-/* 390 */ NdrFcShort( 0xb ), /* 11 */
-/* 392 */ NdrFcShort( 0x1c ), /* x86 Stack size/offset = 28 */
-/* 394 */ NdrFcShort( 0xe ), /* 14 */
-/* 396 */ NdrFcShort( 0x40 ), /* 64 */
-/* 398 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x6, /* 6 */
-/* 400 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 402 */ NdrFcShort( 0x1 ), /* 1 */
-/* 404 */ NdrFcShort( 0x0 ), /* 0 */
-/* 406 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter offset */
-
-/* 408 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 410 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 412 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter boundaryType */
-
-/* 414 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 416 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 418 */ 0xd, /* FC_ENUM16 */
- 0x0, /* 0 */
-
- /* Parameter startOffset */
-
-/* 420 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 422 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 424 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter endOffset */
-
-/* 426 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 428 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 430 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter text */
-
-/* 432 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 434 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
-/* 436 */ NdrFcShort( 0x24 ), /* Type Offset=36 */
-
- /* Return value */
-
-/* 438 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 440 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */
-/* 442 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_textAfterOffset */
-
-/* 444 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 446 */ NdrFcLong( 0x0 ), /* 0 */
-/* 450 */ NdrFcShort( 0xc ), /* 12 */
-/* 452 */ NdrFcShort( 0x1c ), /* x86 Stack size/offset = 28 */
-/* 454 */ NdrFcShort( 0xe ), /* 14 */
-/* 456 */ NdrFcShort( 0x40 ), /* 64 */
-/* 458 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x6, /* 6 */
-/* 460 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 462 */ NdrFcShort( 0x1 ), /* 1 */
-/* 464 */ NdrFcShort( 0x0 ), /* 0 */
-/* 466 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter offset */
-
-/* 468 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 470 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 472 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter boundaryType */
-
-/* 474 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 476 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 478 */ 0xd, /* FC_ENUM16 */
- 0x0, /* 0 */
-
- /* Parameter startOffset */
-
-/* 480 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 482 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 484 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter endOffset */
-
-/* 486 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 488 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 490 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter text */
-
-/* 492 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 494 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
-/* 496 */ NdrFcShort( 0x24 ), /* Type Offset=36 */
-
- /* Return value */
-
-/* 498 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 500 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */
-/* 502 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_textAtOffset */
-
-/* 504 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 506 */ NdrFcLong( 0x0 ), /* 0 */
-/* 510 */ NdrFcShort( 0xd ), /* 13 */
-/* 512 */ NdrFcShort( 0x1c ), /* x86 Stack size/offset = 28 */
-/* 514 */ NdrFcShort( 0xe ), /* 14 */
-/* 516 */ NdrFcShort( 0x40 ), /* 64 */
-/* 518 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x6, /* 6 */
-/* 520 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 522 */ NdrFcShort( 0x1 ), /* 1 */
-/* 524 */ NdrFcShort( 0x0 ), /* 0 */
-/* 526 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter offset */
-
-/* 528 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 530 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 532 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter boundaryType */
-
-/* 534 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 536 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 538 */ 0xd, /* FC_ENUM16 */
- 0x0, /* 0 */
-
- /* Parameter startOffset */
-
-/* 540 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 542 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 544 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter endOffset */
-
-/* 546 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 548 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 550 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter text */
-
-/* 552 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
-/* 554 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
-/* 556 */ NdrFcShort( 0x24 ), /* Type Offset=36 */
-
- /* Return value */
-
-/* 558 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 560 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */
-/* 562 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure removeSelection */
-
-/* 564 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 566 */ NdrFcLong( 0x0 ), /* 0 */
-/* 570 */ NdrFcShort( 0xe ), /* 14 */
-/* 572 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 574 */ NdrFcShort( 0x8 ), /* 8 */
-/* 576 */ NdrFcShort( 0x8 ), /* 8 */
-/* 578 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 580 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 582 */ NdrFcShort( 0x0 ), /* 0 */
-/* 584 */ NdrFcShort( 0x0 ), /* 0 */
-/* 586 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter selectionIndex */
-
-/* 588 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 590 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 592 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 594 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 596 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 598 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure setCaretOffset */
-
-/* 600 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 602 */ NdrFcLong( 0x0 ), /* 0 */
-/* 606 */ NdrFcShort( 0xf ), /* 15 */
-/* 608 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 610 */ NdrFcShort( 0x8 ), /* 8 */
-/* 612 */ NdrFcShort( 0x8 ), /* 8 */
-/* 614 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 616 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 618 */ NdrFcShort( 0x0 ), /* 0 */
-/* 620 */ NdrFcShort( 0x0 ), /* 0 */
-/* 622 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter offset */
-
-/* 624 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 626 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 628 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 630 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 632 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 634 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure setSelection */
-
-/* 636 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 638 */ NdrFcLong( 0x0 ), /* 0 */
-/* 642 */ NdrFcShort( 0x10 ), /* 16 */
-/* 644 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
-/* 646 */ NdrFcShort( 0x18 ), /* 24 */
-/* 648 */ NdrFcShort( 0x8 ), /* 8 */
-/* 650 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x4, /* 4 */
-/* 652 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 654 */ NdrFcShort( 0x0 ), /* 0 */
-/* 656 */ NdrFcShort( 0x0 ), /* 0 */
-/* 658 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter selectionIndex */
-
-/* 660 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 662 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 664 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter startOffset */
-
-/* 666 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 668 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 670 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter endOffset */
-
-/* 672 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 674 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 676 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 678 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 680 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 682 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_nCharacters */
-
-/* 684 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 686 */ NdrFcLong( 0x0 ), /* 0 */
-/* 690 */ NdrFcShort( 0x11 ), /* 17 */
-/* 692 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 694 */ NdrFcShort( 0x0 ), /* 0 */
-/* 696 */ NdrFcShort( 0x24 ), /* 36 */
-/* 698 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x2, /* 2 */
-/* 700 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 702 */ NdrFcShort( 0x0 ), /* 0 */
-/* 704 */ NdrFcShort( 0x0 ), /* 0 */
-/* 706 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter nCharacters */
-
-/* 708 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
-/* 710 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 712 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 714 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 716 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 718 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure scrollSubstringTo */
-
-/* 720 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 722 */ NdrFcLong( 0x0 ), /* 0 */
-/* 726 */ NdrFcShort( 0x12 ), /* 18 */
-/* 728 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
-/* 730 */ NdrFcShort( 0x16 ), /* 22 */
-/* 732 */ NdrFcShort( 0x8 ), /* 8 */
-/* 734 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x4, /* 4 */
-/* 736 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 738 */ NdrFcShort( 0x0 ), /* 0 */
-/* 740 */ NdrFcShort( 0x0 ), /* 0 */
-/* 742 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter startIndex */
-
-/* 744 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 746 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 748 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter endIndex */
-
-/* 750 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 752 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 754 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter scrollType */
-
-/* 756 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 758 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 760 */ 0xd, /* FC_ENUM16 */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 762 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 764 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 766 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure scrollSubstringToPoint */
-
-/* 768 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 770 */ NdrFcLong( 0x0 ), /* 0 */
-/* 774 */ NdrFcShort( 0x13 ), /* 19 */
-/* 776 */ NdrFcShort( 0x1c ), /* x86 Stack size/offset = 28 */
-/* 778 */ NdrFcShort( 0x26 ), /* 38 */
-/* 780 */ NdrFcShort( 0x8 ), /* 8 */
-/* 782 */ 0x44, /* Oi2 Flags: has return, has ext, */
- 0x6, /* 6 */
-/* 784 */ 0x8, /* 8 */
- 0x1, /* Ext Flags: new corr desc, */
-/* 786 */ NdrFcShort( 0x0 ), /* 0 */
-/* 788 */ NdrFcShort( 0x0 ), /* 0 */
-/* 790 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter startIndex */
-
-/* 792 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 794 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 796 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter endIndex */
-
-/* 798 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 800 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 802 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter coordinateType */
-
-/* 804 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 806 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 808 */ 0xd, /* FC_ENUM16 */
- 0x0, /* 0 */
-
- /* Parameter x */
-
-/* 810 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 812 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
-/* 814 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Parameter y */
-
-/* 816 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
-/* 818 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
-/* 820 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Return value */
-
-/* 822 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 824 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */
-/* 826 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_newText */
-
-/* 828 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 830 */ NdrFcLong( 0x0 ), /* 0 */
-/* 834 */ NdrFcShort( 0x14 ), /* 20 */
-/* 836 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 838 */ NdrFcShort( 0x0 ), /* 0 */
-/* 840 */ NdrFcShort( 0x8 ), /* 8 */
-/* 842 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 844 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 846 */ NdrFcShort( 0x1 ), /* 1 */
-/* 848 */ NdrFcShort( 0x0 ), /* 0 */
-/* 850 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter newText */
-
-/* 852 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */
-/* 854 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 856 */ NdrFcShort( 0x32 ), /* Type Offset=50 */
-
- /* Return value */
-
-/* 858 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 860 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 862 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_oldText */
-
-/* 864 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 866 */ NdrFcLong( 0x0 ), /* 0 */
-/* 870 */ NdrFcShort( 0x15 ), /* 21 */
-/* 872 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 874 */ NdrFcShort( 0x0 ), /* 0 */
-/* 876 */ NdrFcShort( 0x8 ), /* 8 */
-/* 878 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 880 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 882 */ NdrFcShort( 0x1 ), /* 1 */
-/* 884 */ NdrFcShort( 0x0 ), /* 0 */
-/* 886 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter oldText */
-
-/* 888 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */
-/* 890 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 892 */ NdrFcShort( 0x32 ), /* Type Offset=50 */
-
- /* Return value */
-
-/* 894 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 896 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 898 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- 0x0
- }
- };
-
-static const AccessibleText_MIDL_TYPE_FORMAT_STRING AccessibleText__MIDL_TypeFormatString =
- {
- 0,
- {
- NdrFcShort( 0x0 ), /* 0 */
-/* 2 */
- 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
-/* 4 */ 0x8, /* FC_LONG */
- 0x5c, /* FC_PAD */
-/* 6 */
- 0x11, 0x4, /* FC_RP [alloced_on_stack] */
-/* 8 */ NdrFcShort( 0x1c ), /* Offset= 28 (36) */
-/* 10 */
- 0x13, 0x0, /* FC_OP */
-/* 12 */ NdrFcShort( 0xe ), /* Offset= 14 (26) */
-/* 14 */
- 0x1b, /* FC_CARRAY */
- 0x1, /* 1 */
-/* 16 */ NdrFcShort( 0x2 ), /* 2 */
-/* 18 */ 0x9, /* Corr desc: FC_ULONG */
- 0x0, /* */
-/* 20 */ NdrFcShort( 0xfffc ), /* -4 */
-/* 22 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 24 */ 0x6, /* FC_SHORT */
- 0x5b, /* FC_END */
-/* 26 */
- 0x17, /* FC_CSTRUCT */
- 0x3, /* 3 */
-/* 28 */ NdrFcShort( 0x8 ), /* 8 */
-/* 30 */ NdrFcShort( 0xfff0 ), /* Offset= -16 (14) */
-/* 32 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 34 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 36 */ 0xb4, /* FC_USER_MARSHAL */
- 0x83, /* 131 */
-/* 38 */ NdrFcShort( 0x0 ), /* 0 */
-/* 40 */ NdrFcShort( 0x4 ), /* 4 */
-/* 42 */ NdrFcShort( 0x0 ), /* 0 */
-/* 44 */ NdrFcShort( 0xffde ), /* Offset= -34 (10) */
-/* 46 */
- 0x11, 0x4, /* FC_RP [alloced_on_stack] */
-/* 48 */ NdrFcShort( 0x2 ), /* Offset= 2 (50) */
-/* 50 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 52 */ NdrFcShort( 0xc ), /* 12 */
-/* 54 */ NdrFcShort( 0x0 ), /* 0 */
-/* 56 */ NdrFcShort( 0x0 ), /* Offset= 0 (56) */
-/* 58 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 60 */ NdrFcShort( 0xffe8 ), /* Offset= -24 (36) */
-/* 62 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 64 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-
- 0x0
- }
- };
-
-static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ] =
- {
-
- {
- BSTR_UserSize
- ,BSTR_UserMarshal
- ,BSTR_UserUnmarshal
- ,BSTR_UserFree
- }
-
- };
-
-
-
-/* Standard interface: __MIDL_itf_AccessibleText_0000_0000, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */
-
-
-/* Object interface: IUnknown, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
-
-
-/* Object interface: IAccessibleText, ver. 0.0,
- GUID={0x24FD2FFB,0x3AAD,0x4a08,{0x83,0x35,0xA3,0xAD,0x89,0xC0,0xFB,0x4B}} */
-
-#pragma code_seg(".orpc")
-static const unsigned short IAccessibleText_FormatStringOffsetTable[] =
- {
- 0,
- 42,
- 96,
- 132,
- 198,
- 234,
- 288,
- 336,
- 384,
- 444,
- 504,
- 564,
- 600,
- 636,
- 684,
- 720,
- 768,
- 828,
- 864
- };
-
-static const MIDL_STUBLESS_PROXY_INFO IAccessibleText_ProxyInfo =
- {
- &Object_StubDesc,
- AccessibleText__MIDL_ProcFormatString.Format,
- &IAccessibleText_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0
- };
-
-
-static const MIDL_SERVER_INFO IAccessibleText_ServerInfo =
- {
- &Object_StubDesc,
- 0,
- AccessibleText__MIDL_ProcFormatString.Format,
- &IAccessibleText_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0,
- 0};
-CINTERFACE_PROXY_VTABLE(22) _IAccessibleTextProxyVtbl =
-{
- &IAccessibleText_ProxyInfo,
- &IID_IAccessibleText,
- IUnknown_QueryInterface_Proxy,
- IUnknown_AddRef_Proxy,
- IUnknown_Release_Proxy ,
- (void *) (INT_PTR) -1 /* IAccessibleText::addSelection */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::get_attributes */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::get_caretOffset */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::get_characterExtents */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::get_nSelections */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::get_offsetAtPoint */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::get_selection */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::get_text */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::get_textBeforeOffset */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::get_textAfterOffset */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::get_textAtOffset */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::removeSelection */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::setCaretOffset */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::setSelection */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::get_nCharacters */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::scrollSubstringTo */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::scrollSubstringToPoint */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::get_newText */ ,
- (void *) (INT_PTR) -1 /* IAccessibleText::get_oldText */
-};
-
-const CInterfaceStubVtbl _IAccessibleTextStubVtbl =
-{
- &IID_IAccessibleText,
- &IAccessibleText_ServerInfo,
- 22,
- 0, /* pure interpreted */
- CStdStubBuffer_METHODS
-};
-
-static const MIDL_STUB_DESC Object_StubDesc =
- {
- 0,
- NdrOleAllocate,
- NdrOleFree,
- 0,
- 0,
- 0,
- 0,
- 0,
- AccessibleText__MIDL_TypeFormatString.Format,
- 1, /* -error bounds_check flag */
- 0x50002, /* Ndr library version */
- 0,
- 0x700022b, /* MIDL Version 7.0.555 */
- 0,
- UserMarshalRoutines,
- 0, /* notify & notify_flag routine table */
- 0x1, /* MIDL flag */
- 0, /* cs routines */
- 0, /* proxy/server info */
- 0
- };
-
-const CInterfaceProxyVtbl * const _AccessibleText_ProxyVtblList[] =
-{
- ( CInterfaceProxyVtbl *) &_IAccessibleTextProxyVtbl,
- 0
-};
-
-const CInterfaceStubVtbl * const _AccessibleText_StubVtblList[] =
-{
- ( CInterfaceStubVtbl *) &_IAccessibleTextStubVtbl,
- 0
-};
-
-PCInterfaceName const _AccessibleText_InterfaceNamesList[] =
-{
- "IAccessibleText",
- 0
-};
-
-
-#define _AccessibleText_CHECK_IID(n) IID_GENERIC_CHECK_IID( _AccessibleText, pIID, n)
-
-int __stdcall _AccessibleText_IID_Lookup( const IID * pIID, int * pIndex )
-{
-
- if(!_AccessibleText_CHECK_IID(0))
- {
- *pIndex = 0;
- return 1;
- }
-
- return 0;
-}
-
-const ExtendedProxyFileInfo AccessibleText_ProxyFileInfo =
-{
- (PCInterfaceProxyVtblList *) & _AccessibleText_ProxyVtblList,
- (PCInterfaceStubVtblList *) & _AccessibleText_StubVtblList,
- (const PCInterfaceName * ) & _AccessibleText_InterfaceNamesList,
- 0, /* no delegation */
- & _AccessibleText_IID_Lookup,
- 1,
- 2,
- 0, /* table of [async_uuid] interfaces */
- 0, /* Filler1 */
- 0, /* Filler2 */
- 0 /* Filler3 */
-};
-#pragma optimize("", on )
-#if _MSC_VER >= 1200
-#pragma warning(pop)
-#endif
-
-
-#endif /* !defined(_M_IA64) && !defined(_M_AMD64)*/
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleValue.h b/src/3rdparty/iaccessible2/generated/x86/AccessibleValue.h
deleted file mode 100644
index 6ef70c261f..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleValue.h
+++ /dev/null
@@ -1,188 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:55 2012
- */
-/* Compiler settings for AccessibleValue.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-#ifndef COM_NO_WINDOWS_H
-#include "windows.h"
-#include "ole2.h"
-#endif /*COM_NO_WINDOWS_H*/
-
-#ifndef __AccessibleValue_h__
-#define __AccessibleValue_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifndef __IAccessibleValue_FWD_DEFINED__
-#define __IAccessibleValue_FWD_DEFINED__
-typedef interface IAccessibleValue IAccessibleValue;
-#endif /* __IAccessibleValue_FWD_DEFINED__ */
-
-
-/* header files for imported files */
-#include "objidl.h"
-#include "oaidl.h"
-#include "oleacc.h"
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#ifndef __IAccessibleValue_INTERFACE_DEFINED__
-#define __IAccessibleValue_INTERFACE_DEFINED__
-
-/* interface IAccessibleValue */
-/* [uuid][object] */
-
-
-EXTERN_C const IID IID_IAccessibleValue;
-
-#if defined(__cplusplus) && !defined(CINTERFACE)
-
- MIDL_INTERFACE("35855B5B-C566-4fd0-A7B1-E65465600394")
- IAccessibleValue : public IUnknown
- {
- public:
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_currentValue(
- /* [retval][out] */ VARIANT *currentValue) = 0;
-
- virtual HRESULT STDMETHODCALLTYPE setCurrentValue(
- /* [in] */ VARIANT value) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_maximumValue(
- /* [retval][out] */ VARIANT *maximumValue) = 0;
-
- virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_minimumValue(
- /* [retval][out] */ VARIANT *minimumValue) = 0;
-
- };
-
-#else /* C style interface */
-
- typedef struct IAccessibleValueVtbl
- {
- BEGIN_INTERFACE
-
- HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
- IAccessibleValue * This,
- /* [in] */ REFIID riid,
- /* [annotation][iid_is][out] */
- __RPC__deref_out void **ppvObject);
-
- ULONG ( STDMETHODCALLTYPE *AddRef )(
- IAccessibleValue * This);
-
- ULONG ( STDMETHODCALLTYPE *Release )(
- IAccessibleValue * This);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_currentValue )(
- IAccessibleValue * This,
- /* [retval][out] */ VARIANT *currentValue);
-
- HRESULT ( STDMETHODCALLTYPE *setCurrentValue )(
- IAccessibleValue * This,
- /* [in] */ VARIANT value);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_maximumValue )(
- IAccessibleValue * This,
- /* [retval][out] */ VARIANT *maximumValue);
-
- /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_minimumValue )(
- IAccessibleValue * This,
- /* [retval][out] */ VARIANT *minimumValue);
-
- END_INTERFACE
- } IAccessibleValueVtbl;
-
- interface IAccessibleValue
- {
- CONST_VTBL struct IAccessibleValueVtbl *lpVtbl;
- };
-
-
-
-#ifdef COBJMACROS
-
-
-#define IAccessibleValue_QueryInterface(This,riid,ppvObject) \
- ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
-
-#define IAccessibleValue_AddRef(This) \
- ( (This)->lpVtbl -> AddRef(This) )
-
-#define IAccessibleValue_Release(This) \
- ( (This)->lpVtbl -> Release(This) )
-
-
-#define IAccessibleValue_get_currentValue(This,currentValue) \
- ( (This)->lpVtbl -> get_currentValue(This,currentValue) )
-
-#define IAccessibleValue_setCurrentValue(This,value) \
- ( (This)->lpVtbl -> setCurrentValue(This,value) )
-
-#define IAccessibleValue_get_maximumValue(This,maximumValue) \
- ( (This)->lpVtbl -> get_maximumValue(This,maximumValue) )
-
-#define IAccessibleValue_get_minimumValue(This,minimumValue) \
- ( (This)->lpVtbl -> get_minimumValue(This,minimumValue) )
-
-#endif /* COBJMACROS */
-
-
-#endif /* C style interface */
-
-
-
-
-#endif /* __IAccessibleValue_INTERFACE_DEFINED__ */
-
-
-/* Additional Prototypes for ALL interfaces */
-
-unsigned long __RPC_USER VARIANT_UserSize( unsigned long *, unsigned long , VARIANT * );
-unsigned char * __RPC_USER VARIANT_UserMarshal( unsigned long *, unsigned char *, VARIANT * );
-unsigned char * __RPC_USER VARIANT_UserUnmarshal(unsigned long *, unsigned char *, VARIANT * );
-void __RPC_USER VARIANT_UserFree( unsigned long *, VARIANT * );
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleValue_i.c b/src/3rdparty/iaccessible2/generated/x86/AccessibleValue_i.c
deleted file mode 100644
index dffdb123af..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleValue_i.c
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
-
-/* link this file in with the server and any clients */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:55 2012
- */
-/* Compiler settings for AccessibleValue.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#include <rpc.h>
-#include <rpcndr.h>
-
-#ifdef _MIDL_USE_GUIDDEF_
-
-#ifndef INITGUID
-#define INITGUID
-#include <guiddef.h>
-#undef INITGUID
-#else
-#include <guiddef.h>
-#endif
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
-
-#else // !_MIDL_USE_GUIDDEF_
-
-#ifndef __IID_DEFINED__
-#define __IID_DEFINED__
-
-typedef struct _IID
-{
- unsigned long x;
- unsigned short s1;
- unsigned short s2;
- unsigned char c[8];
-} IID;
-
-#endif // __IID_DEFINED__
-
-#ifndef CLSID_DEFINED
-#define CLSID_DEFINED
-typedef IID CLSID;
-#endif // CLSID_DEFINED
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
-
-#endif !_MIDL_USE_GUIDDEF_
-
-MIDL_DEFINE_GUID(IID, IID_IAccessibleValue,0x35855B5B,0xC566,0x4fd0,0xA7,0xB1,0xE6,0x54,0x65,0x60,0x03,0x94);
-
-#undef MIDL_DEFINE_GUID
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/AccessibleValue_p.c b/src/3rdparty/iaccessible2/generated/x86/AccessibleValue_p.c
deleted file mode 100644
index 166e2149b4..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/AccessibleValue_p.c
+++ /dev/null
@@ -1,1105 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the proxy stub code */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:55 2012
- */
-/* Compiler settings for AccessibleValue.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#if !defined(_M_IA64) && !defined(_M_AMD64)
-
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-#if _MSC_VER >= 1200
-#pragma warning(push)
-#endif
-
-#pragma warning( disable: 4211 ) /* redefine extern to static */
-#pragma warning( disable: 4232 ) /* dllimport identity*/
-#pragma warning( disable: 4024 ) /* array to pointer mapping*/
-#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */
-#pragma warning( disable: 4100 ) /* unreferenced arguments in x86 call */
-
-#pragma optimize("", off )
-
-#define USE_STUBLESS_PROXY
-
-
-/* verify that the <rpcproxy.h> version is high enough to compile this file*/
-#ifndef __REDQ_RPCPROXY_H_VERSION__
-#define __REQUIRED_RPCPROXY_H_VERSION__ 475
-#endif
-
-
-#include "rpcproxy.h"
-#ifndef __RPCPROXY_H_VERSION__
-#error this stub requires an updated version of <rpcproxy.h>
-#endif /* __RPCPROXY_H_VERSION__ */
-
-
-#include "AccessibleValue.h"
-
-#define TYPE_FORMAT_STRING_SIZE 1053
-#define PROC_FORMAT_STRING_SIZE 145
-#define EXPR_FORMAT_STRING_SIZE 1
-#define TRANSMIT_AS_TABLE_SIZE 0
-#define WIRE_MARSHAL_TABLE_SIZE 1
-
-typedef struct _AccessibleValue_MIDL_TYPE_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
- } AccessibleValue_MIDL_TYPE_FORMAT_STRING;
-
-typedef struct _AccessibleValue_MIDL_PROC_FORMAT_STRING
- {
- short Pad;
- unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
- } AccessibleValue_MIDL_PROC_FORMAT_STRING;
-
-typedef struct _AccessibleValue_MIDL_EXPR_FORMAT_STRING
- {
- long Pad;
- unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
- } AccessibleValue_MIDL_EXPR_FORMAT_STRING;
-
-
-static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
-{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
-
-
-extern const AccessibleValue_MIDL_TYPE_FORMAT_STRING AccessibleValue__MIDL_TypeFormatString;
-extern const AccessibleValue_MIDL_PROC_FORMAT_STRING AccessibleValue__MIDL_ProcFormatString;
-extern const AccessibleValue_MIDL_EXPR_FORMAT_STRING AccessibleValue__MIDL_ExprFormatString;
-
-
-extern const MIDL_STUB_DESC Object_StubDesc;
-
-
-extern const MIDL_SERVER_INFO IAccessibleValue_ServerInfo;
-extern const MIDL_STUBLESS_PROXY_INFO IAccessibleValue_ProxyInfo;
-
-
-extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ];
-
-#if !defined(__RPC_WIN32__)
-#error Invalid build platform for this stub.
-#endif
-
-#if !(TARGET_IS_NT50_OR_LATER)
-#error You need Windows 2000 or later to run this stub because it uses these features:
-#error /robust command line switch.
-#error However, your C/C++ compilation flags indicate you intend to run this app on earlier systems.
-#error This app will fail with the RPC_X_WRONG_STUB_VERSION error.
-#endif
-
-
-static const AccessibleValue_MIDL_PROC_FORMAT_STRING AccessibleValue__MIDL_ProcFormatString =
- {
- 0,
- {
-
- /* Procedure get_currentValue */
-
- 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 2 */ NdrFcLong( 0x0 ), /* 0 */
-/* 6 */ NdrFcShort( 0x3 ), /* 3 */
-/* 8 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 10 */ NdrFcShort( 0x0 ), /* 0 */
-/* 12 */ NdrFcShort( 0x8 ), /* 8 */
-/* 14 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 16 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 18 */ NdrFcShort( 0x1 ), /* 1 */
-/* 20 */ NdrFcShort( 0x0 ), /* 0 */
-/* 22 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter currentValue */
-
-/* 24 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */
-/* 26 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 28 */ NdrFcShort( 0x404 ), /* Type Offset=1028 */
-
- /* Return value */
-
-/* 30 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 32 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 34 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure setCurrentValue */
-
-/* 36 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 38 */ NdrFcLong( 0x0 ), /* 0 */
-/* 42 */ NdrFcShort( 0x4 ), /* 4 */
-/* 44 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */
-/* 46 */ NdrFcShort( 0x0 ), /* 0 */
-/* 48 */ NdrFcShort( 0x8 ), /* 8 */
-/* 50 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */
- 0x2, /* 2 */
-/* 52 */ 0x8, /* 8 */
- 0x5, /* Ext Flags: new corr desc, srv corr check, */
-/* 54 */ NdrFcShort( 0x0 ), /* 0 */
-/* 56 */ NdrFcShort( 0x1 ), /* 1 */
-/* 58 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter value */
-
-/* 60 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */
-/* 62 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 64 */ NdrFcShort( 0x412 ), /* Type Offset=1042 */
-
- /* Return value */
-
-/* 66 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 68 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
-/* 70 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_maximumValue */
-
-/* 72 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 74 */ NdrFcLong( 0x0 ), /* 0 */
-/* 78 */ NdrFcShort( 0x5 ), /* 5 */
-/* 80 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 82 */ NdrFcShort( 0x0 ), /* 0 */
-/* 84 */ NdrFcShort( 0x8 ), /* 8 */
-/* 86 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 88 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 90 */ NdrFcShort( 0x1 ), /* 1 */
-/* 92 */ NdrFcShort( 0x0 ), /* 0 */
-/* 94 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter maximumValue */
-
-/* 96 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */
-/* 98 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 100 */ NdrFcShort( 0x404 ), /* Type Offset=1028 */
-
- /* Return value */
-
-/* 102 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 104 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 106 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- /* Procedure get_minimumValue */
-
-/* 108 */ 0x33, /* FC_AUTO_HANDLE */
- 0x6c, /* Old Flags: object, Oi2 */
-/* 110 */ NdrFcLong( 0x0 ), /* 0 */
-/* 114 */ NdrFcShort( 0x6 ), /* 6 */
-/* 116 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
-/* 118 */ NdrFcShort( 0x0 ), /* 0 */
-/* 120 */ NdrFcShort( 0x8 ), /* 8 */
-/* 122 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
- 0x2, /* 2 */
-/* 124 */ 0x8, /* 8 */
- 0x3, /* Ext Flags: new corr desc, clt corr check, */
-/* 126 */ NdrFcShort( 0x1 ), /* 1 */
-/* 128 */ NdrFcShort( 0x0 ), /* 0 */
-/* 130 */ NdrFcShort( 0x0 ), /* 0 */
-
- /* Parameter minimumValue */
-
-/* 132 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */
-/* 134 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
-/* 136 */ NdrFcShort( 0x404 ), /* Type Offset=1028 */
-
- /* Return value */
-
-/* 138 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
-/* 140 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
-/* 142 */ 0x8, /* FC_LONG */
- 0x0, /* 0 */
-
- 0x0
- }
- };
-
-static const AccessibleValue_MIDL_TYPE_FORMAT_STRING AccessibleValue__MIDL_TypeFormatString =
- {
- 0,
- {
- NdrFcShort( 0x0 ), /* 0 */
-/* 2 */
- 0x11, 0x4, /* FC_RP [alloced_on_stack] */
-/* 4 */ NdrFcShort( 0x400 ), /* Offset= 1024 (1028) */
-/* 6 */
- 0x13, 0x0, /* FC_OP */
-/* 8 */ NdrFcShort( 0x3e8 ), /* Offset= 1000 (1008) */
-/* 10 */
- 0x2b, /* FC_NON_ENCAPSULATED_UNION */
- 0x9, /* FC_ULONG */
-/* 12 */ 0x7, /* Corr desc: FC_USHORT */
- 0x0, /* */
-/* 14 */ NdrFcShort( 0xfff8 ), /* -8 */
-/* 16 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 18 */ NdrFcShort( 0x2 ), /* Offset= 2 (20) */
-/* 20 */ NdrFcShort( 0x10 ), /* 16 */
-/* 22 */ NdrFcShort( 0x2f ), /* 47 */
-/* 24 */ NdrFcLong( 0x14 ), /* 20 */
-/* 28 */ NdrFcShort( 0x800b ), /* Simple arm type: FC_HYPER */
-/* 30 */ NdrFcLong( 0x3 ), /* 3 */
-/* 34 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
-/* 36 */ NdrFcLong( 0x11 ), /* 17 */
-/* 40 */ NdrFcShort( 0x8001 ), /* Simple arm type: FC_BYTE */
-/* 42 */ NdrFcLong( 0x2 ), /* 2 */
-/* 46 */ NdrFcShort( 0x8006 ), /* Simple arm type: FC_SHORT */
-/* 48 */ NdrFcLong( 0x4 ), /* 4 */
-/* 52 */ NdrFcShort( 0x800a ), /* Simple arm type: FC_FLOAT */
-/* 54 */ NdrFcLong( 0x5 ), /* 5 */
-/* 58 */ NdrFcShort( 0x800c ), /* Simple arm type: FC_DOUBLE */
-/* 60 */ NdrFcLong( 0xb ), /* 11 */
-/* 64 */ NdrFcShort( 0x8006 ), /* Simple arm type: FC_SHORT */
-/* 66 */ NdrFcLong( 0xa ), /* 10 */
-/* 70 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
-/* 72 */ NdrFcLong( 0x6 ), /* 6 */
-/* 76 */ NdrFcShort( 0xe8 ), /* Offset= 232 (308) */
-/* 78 */ NdrFcLong( 0x7 ), /* 7 */
-/* 82 */ NdrFcShort( 0x800c ), /* Simple arm type: FC_DOUBLE */
-/* 84 */ NdrFcLong( 0x8 ), /* 8 */
-/* 88 */ NdrFcShort( 0xe2 ), /* Offset= 226 (314) */
-/* 90 */ NdrFcLong( 0xd ), /* 13 */
-/* 94 */ NdrFcShort( 0xf6 ), /* Offset= 246 (340) */
-/* 96 */ NdrFcLong( 0x9 ), /* 9 */
-/* 100 */ NdrFcShort( 0x102 ), /* Offset= 258 (358) */
-/* 102 */ NdrFcLong( 0x2000 ), /* 8192 */
-/* 106 */ NdrFcShort( 0x10e ), /* Offset= 270 (376) */
-/* 108 */ NdrFcLong( 0x24 ), /* 36 */
-/* 112 */ NdrFcShort( 0x336 ), /* Offset= 822 (934) */
-/* 114 */ NdrFcLong( 0x4024 ), /* 16420 */
-/* 118 */ NdrFcShort( 0x330 ), /* Offset= 816 (934) */
-/* 120 */ NdrFcLong( 0x4011 ), /* 16401 */
-/* 124 */ NdrFcShort( 0x32e ), /* Offset= 814 (938) */
-/* 126 */ NdrFcLong( 0x4002 ), /* 16386 */
-/* 130 */ NdrFcShort( 0x32c ), /* Offset= 812 (942) */
-/* 132 */ NdrFcLong( 0x4003 ), /* 16387 */
-/* 136 */ NdrFcShort( 0x32a ), /* Offset= 810 (946) */
-/* 138 */ NdrFcLong( 0x4014 ), /* 16404 */
-/* 142 */ NdrFcShort( 0x328 ), /* Offset= 808 (950) */
-/* 144 */ NdrFcLong( 0x4004 ), /* 16388 */
-/* 148 */ NdrFcShort( 0x326 ), /* Offset= 806 (954) */
-/* 150 */ NdrFcLong( 0x4005 ), /* 16389 */
-/* 154 */ NdrFcShort( 0x324 ), /* Offset= 804 (958) */
-/* 156 */ NdrFcLong( 0x400b ), /* 16395 */
-/* 160 */ NdrFcShort( 0x30e ), /* Offset= 782 (942) */
-/* 162 */ NdrFcLong( 0x400a ), /* 16394 */
-/* 166 */ NdrFcShort( 0x30c ), /* Offset= 780 (946) */
-/* 168 */ NdrFcLong( 0x4006 ), /* 16390 */
-/* 172 */ NdrFcShort( 0x316 ), /* Offset= 790 (962) */
-/* 174 */ NdrFcLong( 0x4007 ), /* 16391 */
-/* 178 */ NdrFcShort( 0x30c ), /* Offset= 780 (958) */
-/* 180 */ NdrFcLong( 0x4008 ), /* 16392 */
-/* 184 */ NdrFcShort( 0x30e ), /* Offset= 782 (966) */
-/* 186 */ NdrFcLong( 0x400d ), /* 16397 */
-/* 190 */ NdrFcShort( 0x30c ), /* Offset= 780 (970) */
-/* 192 */ NdrFcLong( 0x4009 ), /* 16393 */
-/* 196 */ NdrFcShort( 0x30a ), /* Offset= 778 (974) */
-/* 198 */ NdrFcLong( 0x6000 ), /* 24576 */
-/* 202 */ NdrFcShort( 0x308 ), /* Offset= 776 (978) */
-/* 204 */ NdrFcLong( 0x400c ), /* 16396 */
-/* 208 */ NdrFcShort( 0x306 ), /* Offset= 774 (982) */
-/* 210 */ NdrFcLong( 0x10 ), /* 16 */
-/* 214 */ NdrFcShort( 0x8002 ), /* Simple arm type: FC_CHAR */
-/* 216 */ NdrFcLong( 0x12 ), /* 18 */
-/* 220 */ NdrFcShort( 0x8006 ), /* Simple arm type: FC_SHORT */
-/* 222 */ NdrFcLong( 0x13 ), /* 19 */
-/* 226 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
-/* 228 */ NdrFcLong( 0x15 ), /* 21 */
-/* 232 */ NdrFcShort( 0x800b ), /* Simple arm type: FC_HYPER */
-/* 234 */ NdrFcLong( 0x16 ), /* 22 */
-/* 238 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
-/* 240 */ NdrFcLong( 0x17 ), /* 23 */
-/* 244 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
-/* 246 */ NdrFcLong( 0xe ), /* 14 */
-/* 250 */ NdrFcShort( 0x2e4 ), /* Offset= 740 (990) */
-/* 252 */ NdrFcLong( 0x400e ), /* 16398 */
-/* 256 */ NdrFcShort( 0x2e8 ), /* Offset= 744 (1000) */
-/* 258 */ NdrFcLong( 0x4010 ), /* 16400 */
-/* 262 */ NdrFcShort( 0x2e6 ), /* Offset= 742 (1004) */
-/* 264 */ NdrFcLong( 0x4012 ), /* 16402 */
-/* 268 */ NdrFcShort( 0x2a2 ), /* Offset= 674 (942) */
-/* 270 */ NdrFcLong( 0x4013 ), /* 16403 */
-/* 274 */ NdrFcShort( 0x2a0 ), /* Offset= 672 (946) */
-/* 276 */ NdrFcLong( 0x4015 ), /* 16405 */
-/* 280 */ NdrFcShort( 0x29e ), /* Offset= 670 (950) */
-/* 282 */ NdrFcLong( 0x4016 ), /* 16406 */
-/* 286 */ NdrFcShort( 0x294 ), /* Offset= 660 (946) */
-/* 288 */ NdrFcLong( 0x4017 ), /* 16407 */
-/* 292 */ NdrFcShort( 0x28e ), /* Offset= 654 (946) */
-/* 294 */ NdrFcLong( 0x0 ), /* 0 */
-/* 298 */ NdrFcShort( 0x0 ), /* Offset= 0 (298) */
-/* 300 */ NdrFcLong( 0x1 ), /* 1 */
-/* 304 */ NdrFcShort( 0x0 ), /* Offset= 0 (304) */
-/* 306 */ NdrFcShort( 0xffff ), /* Offset= -1 (305) */
-/* 308 */
- 0x15, /* FC_STRUCT */
- 0x7, /* 7 */
-/* 310 */ NdrFcShort( 0x8 ), /* 8 */
-/* 312 */ 0xb, /* FC_HYPER */
- 0x5b, /* FC_END */
-/* 314 */
- 0x13, 0x0, /* FC_OP */
-/* 316 */ NdrFcShort( 0xe ), /* Offset= 14 (330) */
-/* 318 */
- 0x1b, /* FC_CARRAY */
- 0x1, /* 1 */
-/* 320 */ NdrFcShort( 0x2 ), /* 2 */
-/* 322 */ 0x9, /* Corr desc: FC_ULONG */
- 0x0, /* */
-/* 324 */ NdrFcShort( 0xfffc ), /* -4 */
-/* 326 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 328 */ 0x6, /* FC_SHORT */
- 0x5b, /* FC_END */
-/* 330 */
- 0x17, /* FC_CSTRUCT */
- 0x3, /* 3 */
-/* 332 */ NdrFcShort( 0x8 ), /* 8 */
-/* 334 */ NdrFcShort( 0xfff0 ), /* Offset= -16 (318) */
-/* 336 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 338 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 340 */
- 0x2f, /* FC_IP */
- 0x5a, /* FC_CONSTANT_IID */
-/* 342 */ NdrFcLong( 0x0 ), /* 0 */
-/* 346 */ NdrFcShort( 0x0 ), /* 0 */
-/* 348 */ NdrFcShort( 0x0 ), /* 0 */
-/* 350 */ 0xc0, /* 192 */
- 0x0, /* 0 */
-/* 352 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 354 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 356 */ 0x0, /* 0 */
- 0x46, /* 70 */
-/* 358 */
- 0x2f, /* FC_IP */
- 0x5a, /* FC_CONSTANT_IID */
-/* 360 */ NdrFcLong( 0x20400 ), /* 132096 */
-/* 364 */ NdrFcShort( 0x0 ), /* 0 */
-/* 366 */ NdrFcShort( 0x0 ), /* 0 */
-/* 368 */ 0xc0, /* 192 */
- 0x0, /* 0 */
-/* 370 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 372 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 374 */ 0x0, /* 0 */
- 0x46, /* 70 */
-/* 376 */
- 0x13, 0x10, /* FC_OP [pointer_deref] */
-/* 378 */ NdrFcShort( 0x2 ), /* Offset= 2 (380) */
-/* 380 */
- 0x13, 0x0, /* FC_OP */
-/* 382 */ NdrFcShort( 0x216 ), /* Offset= 534 (916) */
-/* 384 */
- 0x2a, /* FC_ENCAPSULATED_UNION */
- 0x49, /* 73 */
-/* 386 */ NdrFcShort( 0x18 ), /* 24 */
-/* 388 */ NdrFcShort( 0xa ), /* 10 */
-/* 390 */ NdrFcLong( 0x8 ), /* 8 */
-/* 394 */ NdrFcShort( 0x5a ), /* Offset= 90 (484) */
-/* 396 */ NdrFcLong( 0xd ), /* 13 */
-/* 400 */ NdrFcShort( 0x7e ), /* Offset= 126 (526) */
-/* 402 */ NdrFcLong( 0x9 ), /* 9 */
-/* 406 */ NdrFcShort( 0x9e ), /* Offset= 158 (564) */
-/* 408 */ NdrFcLong( 0xc ), /* 12 */
-/* 412 */ NdrFcShort( 0xc8 ), /* Offset= 200 (612) */
-/* 414 */ NdrFcLong( 0x24 ), /* 36 */
-/* 418 */ NdrFcShort( 0x124 ), /* Offset= 292 (710) */
-/* 420 */ NdrFcLong( 0x800d ), /* 32781 */
-/* 424 */ NdrFcShort( 0x140 ), /* Offset= 320 (744) */
-/* 426 */ NdrFcLong( 0x10 ), /* 16 */
-/* 430 */ NdrFcShort( 0x15a ), /* Offset= 346 (776) */
-/* 432 */ NdrFcLong( 0x2 ), /* 2 */
-/* 436 */ NdrFcShort( 0x174 ), /* Offset= 372 (808) */
-/* 438 */ NdrFcLong( 0x3 ), /* 3 */
-/* 442 */ NdrFcShort( 0x18e ), /* Offset= 398 (840) */
-/* 444 */ NdrFcLong( 0x14 ), /* 20 */
-/* 448 */ NdrFcShort( 0x1a8 ), /* Offset= 424 (872) */
-/* 450 */ NdrFcShort( 0xffff ), /* Offset= -1 (449) */
-/* 452 */
- 0x1b, /* FC_CARRAY */
- 0x3, /* 3 */
-/* 454 */ NdrFcShort( 0x4 ), /* 4 */
-/* 456 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 458 */ NdrFcShort( 0x0 ), /* 0 */
-/* 460 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 462 */
- 0x4b, /* FC_PP */
- 0x5c, /* FC_PAD */
-/* 464 */
- 0x48, /* FC_VARIABLE_REPEAT */
- 0x49, /* FC_FIXED_OFFSET */
-/* 466 */ NdrFcShort( 0x4 ), /* 4 */
-/* 468 */ NdrFcShort( 0x0 ), /* 0 */
-/* 470 */ NdrFcShort( 0x1 ), /* 1 */
-/* 472 */ NdrFcShort( 0x0 ), /* 0 */
-/* 474 */ NdrFcShort( 0x0 ), /* 0 */
-/* 476 */ 0x13, 0x0, /* FC_OP */
-/* 478 */ NdrFcShort( 0xff6c ), /* Offset= -148 (330) */
-/* 480 */
- 0x5b, /* FC_END */
-
- 0x8, /* FC_LONG */
-/* 482 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 484 */
- 0x16, /* FC_PSTRUCT */
- 0x3, /* 3 */
-/* 486 */ NdrFcShort( 0x8 ), /* 8 */
-/* 488 */
- 0x4b, /* FC_PP */
- 0x5c, /* FC_PAD */
-/* 490 */
- 0x46, /* FC_NO_REPEAT */
- 0x5c, /* FC_PAD */
-/* 492 */ NdrFcShort( 0x4 ), /* 4 */
-/* 494 */ NdrFcShort( 0x4 ), /* 4 */
-/* 496 */ 0x11, 0x0, /* FC_RP */
-/* 498 */ NdrFcShort( 0xffd2 ), /* Offset= -46 (452) */
-/* 500 */
- 0x5b, /* FC_END */
-
- 0x8, /* FC_LONG */
-/* 502 */ 0x8, /* FC_LONG */
- 0x5b, /* FC_END */
-/* 504 */
- 0x21, /* FC_BOGUS_ARRAY */
- 0x3, /* 3 */
-/* 506 */ NdrFcShort( 0x0 ), /* 0 */
-/* 508 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 510 */ NdrFcShort( 0x0 ), /* 0 */
-/* 512 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 514 */ NdrFcLong( 0xffffffff ), /* -1 */
-/* 518 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 520 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 522 */ NdrFcShort( 0xff4a ), /* Offset= -182 (340) */
-/* 524 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 526 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 528 */ NdrFcShort( 0x8 ), /* 8 */
-/* 530 */ NdrFcShort( 0x0 ), /* 0 */
-/* 532 */ NdrFcShort( 0x6 ), /* Offset= 6 (538) */
-/* 534 */ 0x8, /* FC_LONG */
- 0x36, /* FC_POINTER */
-/* 536 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 538 */
- 0x11, 0x0, /* FC_RP */
-/* 540 */ NdrFcShort( 0xffdc ), /* Offset= -36 (504) */
-/* 542 */
- 0x21, /* FC_BOGUS_ARRAY */
- 0x3, /* 3 */
-/* 544 */ NdrFcShort( 0x0 ), /* 0 */
-/* 546 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 548 */ NdrFcShort( 0x0 ), /* 0 */
-/* 550 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 552 */ NdrFcLong( 0xffffffff ), /* -1 */
-/* 556 */ NdrFcShort( 0x0 ), /* Corr flags: */
-/* 558 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 560 */ NdrFcShort( 0xff36 ), /* Offset= -202 (358) */
-/* 562 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 564 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 566 */ NdrFcShort( 0x8 ), /* 8 */
-/* 568 */ NdrFcShort( 0x0 ), /* 0 */
-/* 570 */ NdrFcShort( 0x6 ), /* Offset= 6 (576) */
-/* 572 */ 0x8, /* FC_LONG */
- 0x36, /* FC_POINTER */
-/* 574 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 576 */
- 0x11, 0x0, /* FC_RP */
-/* 578 */ NdrFcShort( 0xffdc ), /* Offset= -36 (542) */
-/* 580 */
- 0x1b, /* FC_CARRAY */
- 0x3, /* 3 */
-/* 582 */ NdrFcShort( 0x4 ), /* 4 */
-/* 584 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 586 */ NdrFcShort( 0x0 ), /* 0 */
-/* 588 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 590 */
- 0x4b, /* FC_PP */
- 0x5c, /* FC_PAD */
-/* 592 */
- 0x48, /* FC_VARIABLE_REPEAT */
- 0x49, /* FC_FIXED_OFFSET */
-/* 594 */ NdrFcShort( 0x4 ), /* 4 */
-/* 596 */ NdrFcShort( 0x0 ), /* 0 */
-/* 598 */ NdrFcShort( 0x1 ), /* 1 */
-/* 600 */ NdrFcShort( 0x0 ), /* 0 */
-/* 602 */ NdrFcShort( 0x0 ), /* 0 */
-/* 604 */ 0x13, 0x0, /* FC_OP */
-/* 606 */ NdrFcShort( 0x192 ), /* Offset= 402 (1008) */
-/* 608 */
- 0x5b, /* FC_END */
-
- 0x8, /* FC_LONG */
-/* 610 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 612 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 614 */ NdrFcShort( 0x8 ), /* 8 */
-/* 616 */ NdrFcShort( 0x0 ), /* 0 */
-/* 618 */ NdrFcShort( 0x6 ), /* Offset= 6 (624) */
-/* 620 */ 0x8, /* FC_LONG */
- 0x36, /* FC_POINTER */
-/* 622 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 624 */
- 0x11, 0x0, /* FC_RP */
-/* 626 */ NdrFcShort( 0xffd2 ), /* Offset= -46 (580) */
-/* 628 */
- 0x2f, /* FC_IP */
- 0x5a, /* FC_CONSTANT_IID */
-/* 630 */ NdrFcLong( 0x2f ), /* 47 */
-/* 634 */ NdrFcShort( 0x0 ), /* 0 */
-/* 636 */ NdrFcShort( 0x0 ), /* 0 */
-/* 638 */ 0xc0, /* 192 */
- 0x0, /* 0 */
-/* 640 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 642 */ 0x0, /* 0 */
- 0x0, /* 0 */
-/* 644 */ 0x0, /* 0 */
- 0x46, /* 70 */
-/* 646 */
- 0x1b, /* FC_CARRAY */
- 0x0, /* 0 */
-/* 648 */ NdrFcShort( 0x1 ), /* 1 */
-/* 650 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 652 */ NdrFcShort( 0x4 ), /* 4 */
-/* 654 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 656 */ 0x1, /* FC_BYTE */
- 0x5b, /* FC_END */
-/* 658 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 660 */ NdrFcShort( 0x10 ), /* 16 */
-/* 662 */ NdrFcShort( 0x0 ), /* 0 */
-/* 664 */ NdrFcShort( 0xa ), /* Offset= 10 (674) */
-/* 666 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 668 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 670 */ NdrFcShort( 0xffd6 ), /* Offset= -42 (628) */
-/* 672 */ 0x36, /* FC_POINTER */
- 0x5b, /* FC_END */
-/* 674 */
- 0x13, 0x0, /* FC_OP */
-/* 676 */ NdrFcShort( 0xffe2 ), /* Offset= -30 (646) */
-/* 678 */
- 0x1b, /* FC_CARRAY */
- 0x3, /* 3 */
-/* 680 */ NdrFcShort( 0x4 ), /* 4 */
-/* 682 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 684 */ NdrFcShort( 0x0 ), /* 0 */
-/* 686 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 688 */
- 0x4b, /* FC_PP */
- 0x5c, /* FC_PAD */
-/* 690 */
- 0x48, /* FC_VARIABLE_REPEAT */
- 0x49, /* FC_FIXED_OFFSET */
-/* 692 */ NdrFcShort( 0x4 ), /* 4 */
-/* 694 */ NdrFcShort( 0x0 ), /* 0 */
-/* 696 */ NdrFcShort( 0x1 ), /* 1 */
-/* 698 */ NdrFcShort( 0x0 ), /* 0 */
-/* 700 */ NdrFcShort( 0x0 ), /* 0 */
-/* 702 */ 0x13, 0x0, /* FC_OP */
-/* 704 */ NdrFcShort( 0xffd2 ), /* Offset= -46 (658) */
-/* 706 */
- 0x5b, /* FC_END */
-
- 0x8, /* FC_LONG */
-/* 708 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 710 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 712 */ NdrFcShort( 0x8 ), /* 8 */
-/* 714 */ NdrFcShort( 0x0 ), /* 0 */
-/* 716 */ NdrFcShort( 0x6 ), /* Offset= 6 (722) */
-/* 718 */ 0x8, /* FC_LONG */
- 0x36, /* FC_POINTER */
-/* 720 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 722 */
- 0x11, 0x0, /* FC_RP */
-/* 724 */ NdrFcShort( 0xffd2 ), /* Offset= -46 (678) */
-/* 726 */
- 0x1d, /* FC_SMFARRAY */
- 0x0, /* 0 */
-/* 728 */ NdrFcShort( 0x8 ), /* 8 */
-/* 730 */ 0x1, /* FC_BYTE */
- 0x5b, /* FC_END */
-/* 732 */
- 0x15, /* FC_STRUCT */
- 0x3, /* 3 */
-/* 734 */ NdrFcShort( 0x10 ), /* 16 */
-/* 736 */ 0x8, /* FC_LONG */
- 0x6, /* FC_SHORT */
-/* 738 */ 0x6, /* FC_SHORT */
- 0x4c, /* FC_EMBEDDED_COMPLEX */
-/* 740 */ 0x0, /* 0 */
- NdrFcShort( 0xfff1 ), /* Offset= -15 (726) */
- 0x5b, /* FC_END */
-/* 744 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 746 */ NdrFcShort( 0x18 ), /* 24 */
-/* 748 */ NdrFcShort( 0x0 ), /* 0 */
-/* 750 */ NdrFcShort( 0xa ), /* Offset= 10 (760) */
-/* 752 */ 0x8, /* FC_LONG */
- 0x36, /* FC_POINTER */
-/* 754 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 756 */ NdrFcShort( 0xffe8 ), /* Offset= -24 (732) */
-/* 758 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 760 */
- 0x11, 0x0, /* FC_RP */
-/* 762 */ NdrFcShort( 0xfefe ), /* Offset= -258 (504) */
-/* 764 */
- 0x1b, /* FC_CARRAY */
- 0x0, /* 0 */
-/* 766 */ NdrFcShort( 0x1 ), /* 1 */
-/* 768 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 770 */ NdrFcShort( 0x0 ), /* 0 */
-/* 772 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 774 */ 0x1, /* FC_BYTE */
- 0x5b, /* FC_END */
-/* 776 */
- 0x16, /* FC_PSTRUCT */
- 0x3, /* 3 */
-/* 778 */ NdrFcShort( 0x8 ), /* 8 */
-/* 780 */
- 0x4b, /* FC_PP */
- 0x5c, /* FC_PAD */
-/* 782 */
- 0x46, /* FC_NO_REPEAT */
- 0x5c, /* FC_PAD */
-/* 784 */ NdrFcShort( 0x4 ), /* 4 */
-/* 786 */ NdrFcShort( 0x4 ), /* 4 */
-/* 788 */ 0x13, 0x0, /* FC_OP */
-/* 790 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (764) */
-/* 792 */
- 0x5b, /* FC_END */
-
- 0x8, /* FC_LONG */
-/* 794 */ 0x8, /* FC_LONG */
- 0x5b, /* FC_END */
-/* 796 */
- 0x1b, /* FC_CARRAY */
- 0x1, /* 1 */
-/* 798 */ NdrFcShort( 0x2 ), /* 2 */
-/* 800 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 802 */ NdrFcShort( 0x0 ), /* 0 */
-/* 804 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 806 */ 0x6, /* FC_SHORT */
- 0x5b, /* FC_END */
-/* 808 */
- 0x16, /* FC_PSTRUCT */
- 0x3, /* 3 */
-/* 810 */ NdrFcShort( 0x8 ), /* 8 */
-/* 812 */
- 0x4b, /* FC_PP */
- 0x5c, /* FC_PAD */
-/* 814 */
- 0x46, /* FC_NO_REPEAT */
- 0x5c, /* FC_PAD */
-/* 816 */ NdrFcShort( 0x4 ), /* 4 */
-/* 818 */ NdrFcShort( 0x4 ), /* 4 */
-/* 820 */ 0x13, 0x0, /* FC_OP */
-/* 822 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (796) */
-/* 824 */
- 0x5b, /* FC_END */
-
- 0x8, /* FC_LONG */
-/* 826 */ 0x8, /* FC_LONG */
- 0x5b, /* FC_END */
-/* 828 */
- 0x1b, /* FC_CARRAY */
- 0x3, /* 3 */
-/* 830 */ NdrFcShort( 0x4 ), /* 4 */
-/* 832 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 834 */ NdrFcShort( 0x0 ), /* 0 */
-/* 836 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 838 */ 0x8, /* FC_LONG */
- 0x5b, /* FC_END */
-/* 840 */
- 0x16, /* FC_PSTRUCT */
- 0x3, /* 3 */
-/* 842 */ NdrFcShort( 0x8 ), /* 8 */
-/* 844 */
- 0x4b, /* FC_PP */
- 0x5c, /* FC_PAD */
-/* 846 */
- 0x46, /* FC_NO_REPEAT */
- 0x5c, /* FC_PAD */
-/* 848 */ NdrFcShort( 0x4 ), /* 4 */
-/* 850 */ NdrFcShort( 0x4 ), /* 4 */
-/* 852 */ 0x13, 0x0, /* FC_OP */
-/* 854 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (828) */
-/* 856 */
- 0x5b, /* FC_END */
-
- 0x8, /* FC_LONG */
-/* 858 */ 0x8, /* FC_LONG */
- 0x5b, /* FC_END */
-/* 860 */
- 0x1b, /* FC_CARRAY */
- 0x7, /* 7 */
-/* 862 */ NdrFcShort( 0x8 ), /* 8 */
-/* 864 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
- 0x0, /* */
-/* 866 */ NdrFcShort( 0x0 ), /* 0 */
-/* 868 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 870 */ 0xb, /* FC_HYPER */
- 0x5b, /* FC_END */
-/* 872 */
- 0x16, /* FC_PSTRUCT */
- 0x3, /* 3 */
-/* 874 */ NdrFcShort( 0x8 ), /* 8 */
-/* 876 */
- 0x4b, /* FC_PP */
- 0x5c, /* FC_PAD */
-/* 878 */
- 0x46, /* FC_NO_REPEAT */
- 0x5c, /* FC_PAD */
-/* 880 */ NdrFcShort( 0x4 ), /* 4 */
-/* 882 */ NdrFcShort( 0x4 ), /* 4 */
-/* 884 */ 0x13, 0x0, /* FC_OP */
-/* 886 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (860) */
-/* 888 */
- 0x5b, /* FC_END */
-
- 0x8, /* FC_LONG */
-/* 890 */ 0x8, /* FC_LONG */
- 0x5b, /* FC_END */
-/* 892 */
- 0x15, /* FC_STRUCT */
- 0x3, /* 3 */
-/* 894 */ NdrFcShort( 0x8 ), /* 8 */
-/* 896 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 898 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 900 */
- 0x1b, /* FC_CARRAY */
- 0x3, /* 3 */
-/* 902 */ NdrFcShort( 0x8 ), /* 8 */
-/* 904 */ 0x7, /* Corr desc: FC_USHORT */
- 0x0, /* */
-/* 906 */ NdrFcShort( 0xffd8 ), /* -40 */
-/* 908 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
-/* 910 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 912 */ NdrFcShort( 0xffec ), /* Offset= -20 (892) */
-/* 914 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 916 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x3, /* 3 */
-/* 918 */ NdrFcShort( 0x28 ), /* 40 */
-/* 920 */ NdrFcShort( 0xffec ), /* Offset= -20 (900) */
-/* 922 */ NdrFcShort( 0x0 ), /* Offset= 0 (922) */
-/* 924 */ 0x6, /* FC_SHORT */
- 0x6, /* FC_SHORT */
-/* 926 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 928 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 930 */ NdrFcShort( 0xfdde ), /* Offset= -546 (384) */
-/* 932 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 934 */
- 0x13, 0x0, /* FC_OP */
-/* 936 */ NdrFcShort( 0xfeea ), /* Offset= -278 (658) */
-/* 938 */
- 0x13, 0x8, /* FC_OP [simple_pointer] */
-/* 940 */ 0x1, /* FC_BYTE */
- 0x5c, /* FC_PAD */
-/* 942 */
- 0x13, 0x8, /* FC_OP [simple_pointer] */
-/* 944 */ 0x6, /* FC_SHORT */
- 0x5c, /* FC_PAD */
-/* 946 */
- 0x13, 0x8, /* FC_OP [simple_pointer] */
-/* 948 */ 0x8, /* FC_LONG */
- 0x5c, /* FC_PAD */
-/* 950 */
- 0x13, 0x8, /* FC_OP [simple_pointer] */
-/* 952 */ 0xb, /* FC_HYPER */
- 0x5c, /* FC_PAD */
-/* 954 */
- 0x13, 0x8, /* FC_OP [simple_pointer] */
-/* 956 */ 0xa, /* FC_FLOAT */
- 0x5c, /* FC_PAD */
-/* 958 */
- 0x13, 0x8, /* FC_OP [simple_pointer] */
-/* 960 */ 0xc, /* FC_DOUBLE */
- 0x5c, /* FC_PAD */
-/* 962 */
- 0x13, 0x0, /* FC_OP */
-/* 964 */ NdrFcShort( 0xfd70 ), /* Offset= -656 (308) */
-/* 966 */
- 0x13, 0x10, /* FC_OP [pointer_deref] */
-/* 968 */ NdrFcShort( 0xfd72 ), /* Offset= -654 (314) */
-/* 970 */
- 0x13, 0x10, /* FC_OP [pointer_deref] */
-/* 972 */ NdrFcShort( 0xfd88 ), /* Offset= -632 (340) */
-/* 974 */
- 0x13, 0x10, /* FC_OP [pointer_deref] */
-/* 976 */ NdrFcShort( 0xfd96 ), /* Offset= -618 (358) */
-/* 978 */
- 0x13, 0x10, /* FC_OP [pointer_deref] */
-/* 980 */ NdrFcShort( 0xfda4 ), /* Offset= -604 (376) */
-/* 982 */
- 0x13, 0x10, /* FC_OP [pointer_deref] */
-/* 984 */ NdrFcShort( 0x2 ), /* Offset= 2 (986) */
-/* 986 */
- 0x13, 0x0, /* FC_OP */
-/* 988 */ NdrFcShort( 0x14 ), /* Offset= 20 (1008) */
-/* 990 */
- 0x15, /* FC_STRUCT */
- 0x7, /* 7 */
-/* 992 */ NdrFcShort( 0x10 ), /* 16 */
-/* 994 */ 0x6, /* FC_SHORT */
- 0x1, /* FC_BYTE */
-/* 996 */ 0x1, /* FC_BYTE */
- 0x8, /* FC_LONG */
-/* 998 */ 0xb, /* FC_HYPER */
- 0x5b, /* FC_END */
-/* 1000 */
- 0x13, 0x0, /* FC_OP */
-/* 1002 */ NdrFcShort( 0xfff4 ), /* Offset= -12 (990) */
-/* 1004 */
- 0x13, 0x8, /* FC_OP [simple_pointer] */
-/* 1006 */ 0x2, /* FC_CHAR */
- 0x5c, /* FC_PAD */
-/* 1008 */
- 0x1a, /* FC_BOGUS_STRUCT */
- 0x7, /* 7 */
-/* 1010 */ NdrFcShort( 0x20 ), /* 32 */
-/* 1012 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1014 */ NdrFcShort( 0x0 ), /* Offset= 0 (1014) */
-/* 1016 */ 0x8, /* FC_LONG */
- 0x8, /* FC_LONG */
-/* 1018 */ 0x6, /* FC_SHORT */
- 0x6, /* FC_SHORT */
-/* 1020 */ 0x6, /* FC_SHORT */
- 0x6, /* FC_SHORT */
-/* 1022 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
- 0x0, /* 0 */
-/* 1024 */ NdrFcShort( 0xfc0a ), /* Offset= -1014 (10) */
-/* 1026 */ 0x5c, /* FC_PAD */
- 0x5b, /* FC_END */
-/* 1028 */ 0xb4, /* FC_USER_MARSHAL */
- 0x83, /* 131 */
-/* 1030 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1032 */ NdrFcShort( 0x10 ), /* 16 */
-/* 1034 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1036 */ NdrFcShort( 0xfbfa ), /* Offset= -1030 (6) */
-/* 1038 */
- 0x12, 0x0, /* FC_UP */
-/* 1040 */ NdrFcShort( 0xffe0 ), /* Offset= -32 (1008) */
-/* 1042 */ 0xb4, /* FC_USER_MARSHAL */
- 0x83, /* 131 */
-/* 1044 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1046 */ NdrFcShort( 0x10 ), /* 16 */
-/* 1048 */ NdrFcShort( 0x0 ), /* 0 */
-/* 1050 */ NdrFcShort( 0xfff4 ), /* Offset= -12 (1038) */
-
- 0x0
- }
- };
-
-static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ] =
- {
-
- {
- VARIANT_UserSize
- ,VARIANT_UserMarshal
- ,VARIANT_UserUnmarshal
- ,VARIANT_UserFree
- }
-
- };
-
-
-
-/* Object interface: IUnknown, ver. 0.0,
- GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
-
-
-/* Object interface: IAccessibleValue, ver. 0.0,
- GUID={0x35855B5B,0xC566,0x4fd0,{0xA7,0xB1,0xE6,0x54,0x65,0x60,0x03,0x94}} */
-
-#pragma code_seg(".orpc")
-static const unsigned short IAccessibleValue_FormatStringOffsetTable[] =
- {
- 0,
- 36,
- 72,
- 108
- };
-
-static const MIDL_STUBLESS_PROXY_INFO IAccessibleValue_ProxyInfo =
- {
- &Object_StubDesc,
- AccessibleValue__MIDL_ProcFormatString.Format,
- &IAccessibleValue_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0
- };
-
-
-static const MIDL_SERVER_INFO IAccessibleValue_ServerInfo =
- {
- &Object_StubDesc,
- 0,
- AccessibleValue__MIDL_ProcFormatString.Format,
- &IAccessibleValue_FormatStringOffsetTable[-3],
- 0,
- 0,
- 0,
- 0};
-CINTERFACE_PROXY_VTABLE(7) _IAccessibleValueProxyVtbl =
-{
- &IAccessibleValue_ProxyInfo,
- &IID_IAccessibleValue,
- IUnknown_QueryInterface_Proxy,
- IUnknown_AddRef_Proxy,
- IUnknown_Release_Proxy ,
- (void *) (INT_PTR) -1 /* IAccessibleValue::get_currentValue */ ,
- (void *) (INT_PTR) -1 /* IAccessibleValue::setCurrentValue */ ,
- (void *) (INT_PTR) -1 /* IAccessibleValue::get_maximumValue */ ,
- (void *) (INT_PTR) -1 /* IAccessibleValue::get_minimumValue */
-};
-
-const CInterfaceStubVtbl _IAccessibleValueStubVtbl =
-{
- &IID_IAccessibleValue,
- &IAccessibleValue_ServerInfo,
- 7,
- 0, /* pure interpreted */
- CStdStubBuffer_METHODS
-};
-
-static const MIDL_STUB_DESC Object_StubDesc =
- {
- 0,
- NdrOleAllocate,
- NdrOleFree,
- 0,
- 0,
- 0,
- 0,
- 0,
- AccessibleValue__MIDL_TypeFormatString.Format,
- 1, /* -error bounds_check flag */
- 0x50002, /* Ndr library version */
- 0,
- 0x700022b, /* MIDL Version 7.0.555 */
- 0,
- UserMarshalRoutines,
- 0, /* notify & notify_flag routine table */
- 0x1, /* MIDL flag */
- 0, /* cs routines */
- 0, /* proxy/server info */
- 0
- };
-
-const CInterfaceProxyVtbl * const _AccessibleValue_ProxyVtblList[] =
-{
- ( CInterfaceProxyVtbl *) &_IAccessibleValueProxyVtbl,
- 0
-};
-
-const CInterfaceStubVtbl * const _AccessibleValue_StubVtblList[] =
-{
- ( CInterfaceStubVtbl *) &_IAccessibleValueStubVtbl,
- 0
-};
-
-PCInterfaceName const _AccessibleValue_InterfaceNamesList[] =
-{
- "IAccessibleValue",
- 0
-};
-
-
-#define _AccessibleValue_CHECK_IID(n) IID_GENERIC_CHECK_IID( _AccessibleValue, pIID, n)
-
-int __stdcall _AccessibleValue_IID_Lookup( const IID * pIID, int * pIndex )
-{
-
- if(!_AccessibleValue_CHECK_IID(0))
- {
- *pIndex = 0;
- return 1;
- }
-
- return 0;
-}
-
-const ExtendedProxyFileInfo AccessibleValue_ProxyFileInfo =
-{
- (PCInterfaceProxyVtblList *) & _AccessibleValue_ProxyVtblList,
- (PCInterfaceStubVtblList *) & _AccessibleValue_StubVtblList,
- (const PCInterfaceName * ) & _AccessibleValue_InterfaceNamesList,
- 0, /* no delegation */
- & _AccessibleValue_IID_Lookup,
- 1,
- 2,
- 0, /* table of [async_uuid] interfaces */
- 0, /* Filler1 */
- 0, /* Filler2 */
- 0 /* Filler3 */
-};
-#pragma optimize("", on )
-#if _MSC_VER >= 1200
-#pragma warning(pop)
-#endif
-
-
-#endif /* !defined(_M_IA64) && !defined(_M_AMD64)*/
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/IA2CommonTypes.h b/src/3rdparty/iaccessible2/generated/x86/IA2CommonTypes.h
deleted file mode 100644
index 7d1df601e6..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/IA2CommonTypes.h
+++ /dev/null
@@ -1,102 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:56 2012
- */
-/* Compiler settings for IA2CommonTypes.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-
-#ifndef __IA2CommonTypes_h__
-#define __IA2CommonTypes_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-/* interface __MIDL_itf_IA2CommonTypes_0000_0000 */
-/* [local] */
-
-
-enum IA2ScrollType
- { IA2_SCROLL_TYPE_TOP_LEFT = 0,
- IA2_SCROLL_TYPE_BOTTOM_RIGHT = ( IA2_SCROLL_TYPE_TOP_LEFT + 1 ) ,
- IA2_SCROLL_TYPE_TOP_EDGE = ( IA2_SCROLL_TYPE_BOTTOM_RIGHT + 1 ) ,
- IA2_SCROLL_TYPE_BOTTOM_EDGE = ( IA2_SCROLL_TYPE_TOP_EDGE + 1 ) ,
- IA2_SCROLL_TYPE_LEFT_EDGE = ( IA2_SCROLL_TYPE_BOTTOM_EDGE + 1 ) ,
- IA2_SCROLL_TYPE_RIGHT_EDGE = ( IA2_SCROLL_TYPE_LEFT_EDGE + 1 ) ,
- IA2_SCROLL_TYPE_ANYWHERE = ( IA2_SCROLL_TYPE_RIGHT_EDGE + 1 )
- } ;
-
-enum IA2CoordinateType
- { IA2_COORDTYPE_SCREEN_RELATIVE = 0,
- IA2_COORDTYPE_PARENT_RELATIVE = ( IA2_COORDTYPE_SCREEN_RELATIVE + 1 )
- } ;
-
-enum IA2TextSpecialOffsets
- { IA2_TEXT_OFFSET_LENGTH = -1,
- IA2_TEXT_OFFSET_CARET = -2
- } ;
-
-enum IA2TableModelChangeType
- { IA2_TABLE_MODEL_CHANGE_INSERT = 0,
- IA2_TABLE_MODEL_CHANGE_DELETE = ( IA2_TABLE_MODEL_CHANGE_INSERT + 1 ) ,
- IA2_TABLE_MODEL_CHANGE_UPDATE = ( IA2_TABLE_MODEL_CHANGE_DELETE + 1 )
- } ;
-typedef struct IA2TableModelChange
- {
- enum IA2TableModelChangeType type;
- long firstRow;
- long lastRow;
- long firstColumn;
- long lastColumn;
- } IA2TableModelChange;
-
-
-
-extern RPC_IF_HANDLE __MIDL_itf_IA2CommonTypes_0000_0000_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_IA2CommonTypes_0000_0000_v0_0_s_ifspec;
-
-/* Additional Prototypes for ALL interfaces */
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/IA2TypeLibrary.h b/src/3rdparty/iaccessible2/generated/x86/IA2TypeLibrary.h
deleted file mode 100644
index e80b2722f9..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/IA2TypeLibrary.h
+++ /dev/null
@@ -1,103 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the definitions for the interfaces */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:56 2012
- */
-/* Compiler settings for IA2TypeLibrary.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-/* verify that the <rpcndr.h> version is high enough to compile this file*/
-#ifndef __REQUIRED_RPCNDR_H_VERSION__
-#define __REQUIRED_RPCNDR_H_VERSION__ 475
-#endif
-
-#include "rpc.h"
-#include "rpcndr.h"
-
-#ifndef __RPCNDR_H_VERSION__
-#error this stub requires an updated version of <rpcndr.h>
-#endif // __RPCNDR_H_VERSION__
-
-
-#ifndef __IA2TypeLibrary_h__
-#define __IA2TypeLibrary_h__
-
-#if defined(_MSC_VER) && (_MSC_VER >= 1020)
-#pragma once
-#endif
-
-/* Forward Declarations */
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-/* interface __MIDL_itf_IA2TypeLibrary_0000_0000 */
-/* [local] */
-
-
-// Type Library Definitions
-
-
-
-extern RPC_IF_HANDLE __MIDL_itf_IA2TypeLibrary_0000_0000_v0_0_c_ifspec;
-extern RPC_IF_HANDLE __MIDL_itf_IA2TypeLibrary_0000_0000_v0_0_s_ifspec;
-
-
-#ifndef __IAccessible2Lib_LIBRARY_DEFINED__
-#define __IAccessible2Lib_LIBRARY_DEFINED__
-
-/* library IAccessible2Lib */
-/* [hidden][version][helpstring][uuid] */
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-EXTERN_C const IID LIBID_IAccessible2Lib;
-#endif /* __IAccessible2Lib_LIBRARY_DEFINED__ */
-
-/* Additional Prototypes for ALL interfaces */
-
-/* end of Additional Prototypes */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/IA2TypeLibrary.tlb b/src/3rdparty/iaccessible2/generated/x86/IA2TypeLibrary.tlb
deleted file mode 100644
index b4c56c7aaa..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/IA2TypeLibrary.tlb
+++ /dev/null
Binary files differ
diff --git a/src/3rdparty/iaccessible2/generated/x86/IA2TypeLibrary_i.c b/src/3rdparty/iaccessible2/generated/x86/IA2TypeLibrary_i.c
deleted file mode 100644
index 1bf9d5159d..0000000000
--- a/src/3rdparty/iaccessible2/generated/x86/IA2TypeLibrary_i.c
+++ /dev/null
@@ -1,79 +0,0 @@
-
-
-/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
-
-/* link this file in with the server and any clients */
-
-
- /* File created by MIDL compiler version 7.00.0555 */
-/* at Thu Mar 08 14:53:56 2012
- */
-/* Compiler settings for IA2TypeLibrary.idl:
- Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
- protocol : dce , ms_ext, c_ext, robust
- error checks: allocation ref bounds_check enum stub_data
- VC __declspec() decoration level:
- __declspec(uuid()), __declspec(selectany), __declspec(novtable)
- DECLSPEC_UUID(), MIDL_INTERFACE()
-*/
-/* @@MIDL_FILE_HEADING( ) */
-
-#pragma warning( disable: 4049 ) /* more than 64k source lines */
-
-
-#ifdef __cplusplus
-extern "C"{
-#endif
-
-
-#include <rpc.h>
-#include <rpcndr.h>
-
-#ifdef _MIDL_USE_GUIDDEF_
-
-#ifndef INITGUID
-#define INITGUID
-#include <guiddef.h>
-#undef INITGUID
-#else
-#include <guiddef.h>
-#endif
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
-
-#else // !_MIDL_USE_GUIDDEF_
-
-#ifndef __IID_DEFINED__
-#define __IID_DEFINED__
-
-typedef struct _IID
-{
- unsigned long x;
- unsigned short s1;
- unsigned short s2;
- unsigned char c[8];
-} IID;
-
-#endif // __IID_DEFINED__
-
-#ifndef CLSID_DEFINED
-#define CLSID_DEFINED
-typedef IID CLSID;
-#endif // CLSID_DEFINED
-
-#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
- const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
-
-#endif !_MIDL_USE_GUIDDEF_
-
-MIDL_DEFINE_GUID(IID, LIBID_IAccessible2Lib,0xc974e070,0x3787,0x490a,0x87,0xb0,0xe3,0x33,0xb0,0x6c,0xa1,0xe2);
-
-#undef MIDL_DEFINE_GUID
-
-#ifdef __cplusplus
-}
-#endif
-
-
-
diff --git a/src/3rdparty/iaccessible2/generated/x86/dlldata.c b/src/3rdparty/iaccessible2/generated/x86/dlldata.c
index e1e15a1fc0..1685d8340a 100644
--- a/src/3rdparty/iaccessible2/generated/x86/dlldata.c
+++ b/src/3rdparty/iaccessible2/generated/x86/dlldata.c
@@ -19,38 +19,12 @@
extern "C" {
#endif
-EXTERN_PROXY_FILE( Accessible2 )
-EXTERN_PROXY_FILE( AccessibleAction )
-EXTERN_PROXY_FILE( AccessibleApplication )
-EXTERN_PROXY_FILE( AccessibleComponent )
-EXTERN_PROXY_FILE( AccessibleEditableText )
-EXTERN_PROXY_FILE( AccessibleHyperlink )
-EXTERN_PROXY_FILE( AccessibleHypertext )
-EXTERN_PROXY_FILE( AccessibleImage )
-EXTERN_PROXY_FILE( AccessibleRelation )
-EXTERN_PROXY_FILE( AccessibleTable )
-EXTERN_PROXY_FILE( AccessibleTable2 )
-EXTERN_PROXY_FILE( AccessibleTableCell )
-EXTERN_PROXY_FILE( AccessibleText )
-EXTERN_PROXY_FILE( AccessibleValue )
+EXTERN_PROXY_FILE( ia2_api_all )
PROXYFILE_LIST_START
/* Start of list */
- REFERENCE_PROXY_FILE( Accessible2 ),
- REFERENCE_PROXY_FILE( AccessibleAction ),
- REFERENCE_PROXY_FILE( AccessibleApplication ),
- REFERENCE_PROXY_FILE( AccessibleComponent ),
- REFERENCE_PROXY_FILE( AccessibleEditableText ),
- REFERENCE_PROXY_FILE( AccessibleHyperlink ),
- REFERENCE_PROXY_FILE( AccessibleHypertext ),
- REFERENCE_PROXY_FILE( AccessibleImage ),
- REFERENCE_PROXY_FILE( AccessibleRelation ),
- REFERENCE_PROXY_FILE( AccessibleTable ),
- REFERENCE_PROXY_FILE( AccessibleTable2 ),
- REFERENCE_PROXY_FILE( AccessibleTableCell ),
- REFERENCE_PROXY_FILE( AccessibleText ),
- REFERENCE_PROXY_FILE( AccessibleValue ),
+ REFERENCE_PROXY_FILE( ia2_api_all ),
/* End of list */
PROXYFILE_LIST_END
diff --git a/src/3rdparty/iaccessible2/generated/x86/ia2_api_all.h b/src/3rdparty/iaccessible2/generated/x86/ia2_api_all.h
new file mode 100644
index 0000000000..eb3b57b8bd
--- /dev/null
+++ b/src/3rdparty/iaccessible2/generated/x86/ia2_api_all.h
@@ -0,0 +1,4667 @@
+
+
+/* this ALWAYS GENERATED file contains the definitions for the interfaces */
+
+
+ /* File created by MIDL compiler version 7.00.0555 */
+/* at Mon Aug 11 14:34:41 2014
+ */
+/* Compiler settings for ia2_api_all.idl:
+ Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
+ protocol : dce , ms_ext, c_ext, robust
+ error checks: allocation ref bounds_check enum stub_data
+ VC __declspec() decoration level:
+ __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+ DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+/* @@MIDL_FILE_HEADING( ) */
+
+#pragma warning( disable: 4049 ) /* more than 64k source lines */
+
+
+/* verify that the <rpcndr.h> version is high enough to compile this file*/
+#ifndef __REQUIRED_RPCNDR_H_VERSION__
+#define __REQUIRED_RPCNDR_H_VERSION__ 475
+#endif
+
+#include "rpc.h"
+#include "rpcndr.h"
+
+#ifndef __RPCNDR_H_VERSION__
+#error this stub requires an updated version of <rpcndr.h>
+#endif // __RPCNDR_H_VERSION__
+
+#ifndef COM_NO_WINDOWS_H
+#include "windows.h"
+#include "ole2.h"
+#endif /*COM_NO_WINDOWS_H*/
+
+#ifndef __ia2_api_all_h__
+#define __ia2_api_all_h__
+
+#if defined(_MSC_VER) && (_MSC_VER >= 1020)
+#pragma once
+#endif
+
+/* Forward Declarations */
+
+#ifndef __IAccessibleRelation_FWD_DEFINED__
+#define __IAccessibleRelation_FWD_DEFINED__
+typedef interface IAccessibleRelation IAccessibleRelation;
+#endif /* __IAccessibleRelation_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleAction_FWD_DEFINED__
+#define __IAccessibleAction_FWD_DEFINED__
+typedef interface IAccessibleAction IAccessibleAction;
+#endif /* __IAccessibleAction_FWD_DEFINED__ */
+
+
+#ifndef __IAccessible2_FWD_DEFINED__
+#define __IAccessible2_FWD_DEFINED__
+typedef interface IAccessible2 IAccessible2;
+#endif /* __IAccessible2_FWD_DEFINED__ */
+
+
+#ifndef __IAccessible2_2_FWD_DEFINED__
+#define __IAccessible2_2_FWD_DEFINED__
+typedef interface IAccessible2_2 IAccessible2_2;
+#endif /* __IAccessible2_2_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleComponent_FWD_DEFINED__
+#define __IAccessibleComponent_FWD_DEFINED__
+typedef interface IAccessibleComponent IAccessibleComponent;
+#endif /* __IAccessibleComponent_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleValue_FWD_DEFINED__
+#define __IAccessibleValue_FWD_DEFINED__
+typedef interface IAccessibleValue IAccessibleValue;
+#endif /* __IAccessibleValue_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleText_FWD_DEFINED__
+#define __IAccessibleText_FWD_DEFINED__
+typedef interface IAccessibleText IAccessibleText;
+#endif /* __IAccessibleText_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleText2_FWD_DEFINED__
+#define __IAccessibleText2_FWD_DEFINED__
+typedef interface IAccessibleText2 IAccessibleText2;
+#endif /* __IAccessibleText2_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleEditableText_FWD_DEFINED__
+#define __IAccessibleEditableText_FWD_DEFINED__
+typedef interface IAccessibleEditableText IAccessibleEditableText;
+#endif /* __IAccessibleEditableText_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleHyperlink_FWD_DEFINED__
+#define __IAccessibleHyperlink_FWD_DEFINED__
+typedef interface IAccessibleHyperlink IAccessibleHyperlink;
+#endif /* __IAccessibleHyperlink_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleHypertext_FWD_DEFINED__
+#define __IAccessibleHypertext_FWD_DEFINED__
+typedef interface IAccessibleHypertext IAccessibleHypertext;
+#endif /* __IAccessibleHypertext_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleHypertext2_FWD_DEFINED__
+#define __IAccessibleHypertext2_FWD_DEFINED__
+typedef interface IAccessibleHypertext2 IAccessibleHypertext2;
+#endif /* __IAccessibleHypertext2_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleTable_FWD_DEFINED__
+#define __IAccessibleTable_FWD_DEFINED__
+typedef interface IAccessibleTable IAccessibleTable;
+#endif /* __IAccessibleTable_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleTable2_FWD_DEFINED__
+#define __IAccessibleTable2_FWD_DEFINED__
+typedef interface IAccessibleTable2 IAccessibleTable2;
+#endif /* __IAccessibleTable2_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleTableCell_FWD_DEFINED__
+#define __IAccessibleTableCell_FWD_DEFINED__
+typedef interface IAccessibleTableCell IAccessibleTableCell;
+#endif /* __IAccessibleTableCell_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleImage_FWD_DEFINED__
+#define __IAccessibleImage_FWD_DEFINED__
+typedef interface IAccessibleImage IAccessibleImage;
+#endif /* __IAccessibleImage_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleApplication_FWD_DEFINED__
+#define __IAccessibleApplication_FWD_DEFINED__
+typedef interface IAccessibleApplication IAccessibleApplication;
+#endif /* __IAccessibleApplication_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleDocument_FWD_DEFINED__
+#define __IAccessibleDocument_FWD_DEFINED__
+typedef interface IAccessibleDocument IAccessibleDocument;
+#endif /* __IAccessibleDocument_FWD_DEFINED__ */
+
+
+#ifndef __IAccessible2_FWD_DEFINED__
+#define __IAccessible2_FWD_DEFINED__
+typedef interface IAccessible2 IAccessible2;
+#endif /* __IAccessible2_FWD_DEFINED__ */
+
+
+#ifndef __IAccessible2_2_FWD_DEFINED__
+#define __IAccessible2_2_FWD_DEFINED__
+typedef interface IAccessible2_2 IAccessible2_2;
+#endif /* __IAccessible2_2_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleAction_FWD_DEFINED__
+#define __IAccessibleAction_FWD_DEFINED__
+typedef interface IAccessibleAction IAccessibleAction;
+#endif /* __IAccessibleAction_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleApplication_FWD_DEFINED__
+#define __IAccessibleApplication_FWD_DEFINED__
+typedef interface IAccessibleApplication IAccessibleApplication;
+#endif /* __IAccessibleApplication_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleComponent_FWD_DEFINED__
+#define __IAccessibleComponent_FWD_DEFINED__
+typedef interface IAccessibleComponent IAccessibleComponent;
+#endif /* __IAccessibleComponent_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleDocument_FWD_DEFINED__
+#define __IAccessibleDocument_FWD_DEFINED__
+typedef interface IAccessibleDocument IAccessibleDocument;
+#endif /* __IAccessibleDocument_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleEditableText_FWD_DEFINED__
+#define __IAccessibleEditableText_FWD_DEFINED__
+typedef interface IAccessibleEditableText IAccessibleEditableText;
+#endif /* __IAccessibleEditableText_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleHyperlink_FWD_DEFINED__
+#define __IAccessibleHyperlink_FWD_DEFINED__
+typedef interface IAccessibleHyperlink IAccessibleHyperlink;
+#endif /* __IAccessibleHyperlink_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleText_FWD_DEFINED__
+#define __IAccessibleText_FWD_DEFINED__
+typedef interface IAccessibleText IAccessibleText;
+#endif /* __IAccessibleText_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleHypertext_FWD_DEFINED__
+#define __IAccessibleHypertext_FWD_DEFINED__
+typedef interface IAccessibleHypertext IAccessibleHypertext;
+#endif /* __IAccessibleHypertext_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleHypertext2_FWD_DEFINED__
+#define __IAccessibleHypertext2_FWD_DEFINED__
+typedef interface IAccessibleHypertext2 IAccessibleHypertext2;
+#endif /* __IAccessibleHypertext2_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleImage_FWD_DEFINED__
+#define __IAccessibleImage_FWD_DEFINED__
+typedef interface IAccessibleImage IAccessibleImage;
+#endif /* __IAccessibleImage_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleRelation_FWD_DEFINED__
+#define __IAccessibleRelation_FWD_DEFINED__
+typedef interface IAccessibleRelation IAccessibleRelation;
+#endif /* __IAccessibleRelation_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleTable_FWD_DEFINED__
+#define __IAccessibleTable_FWD_DEFINED__
+typedef interface IAccessibleTable IAccessibleTable;
+#endif /* __IAccessibleTable_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleTable2_FWD_DEFINED__
+#define __IAccessibleTable2_FWD_DEFINED__
+typedef interface IAccessibleTable2 IAccessibleTable2;
+#endif /* __IAccessibleTable2_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleTableCell_FWD_DEFINED__
+#define __IAccessibleTableCell_FWD_DEFINED__
+typedef interface IAccessibleTableCell IAccessibleTableCell;
+#endif /* __IAccessibleTableCell_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleText2_FWD_DEFINED__
+#define __IAccessibleText2_FWD_DEFINED__
+typedef interface IAccessibleText2 IAccessibleText2;
+#endif /* __IAccessibleText2_FWD_DEFINED__ */
+
+
+#ifndef __IAccessibleValue_FWD_DEFINED__
+#define __IAccessibleValue_FWD_DEFINED__
+typedef interface IAccessibleValue IAccessibleValue;
+#endif /* __IAccessibleValue_FWD_DEFINED__ */
+
+
+/* header files for imported files */
+#include "objidl.h"
+#include "oaidl.h"
+#include "oleacc.h"
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+
+/* interface __MIDL_itf_ia2_api_all_0000_0000 */
+/* [local] */
+
+
+enum IA2ScrollType
+ { IA2_SCROLL_TYPE_TOP_LEFT = 0,
+ IA2_SCROLL_TYPE_BOTTOM_RIGHT = ( IA2_SCROLL_TYPE_TOP_LEFT + 1 ) ,
+ IA2_SCROLL_TYPE_TOP_EDGE = ( IA2_SCROLL_TYPE_BOTTOM_RIGHT + 1 ) ,
+ IA2_SCROLL_TYPE_BOTTOM_EDGE = ( IA2_SCROLL_TYPE_TOP_EDGE + 1 ) ,
+ IA2_SCROLL_TYPE_LEFT_EDGE = ( IA2_SCROLL_TYPE_BOTTOM_EDGE + 1 ) ,
+ IA2_SCROLL_TYPE_RIGHT_EDGE = ( IA2_SCROLL_TYPE_LEFT_EDGE + 1 ) ,
+ IA2_SCROLL_TYPE_ANYWHERE = ( IA2_SCROLL_TYPE_RIGHT_EDGE + 1 )
+ } ;
+
+enum IA2CoordinateType
+ { IA2_COORDTYPE_SCREEN_RELATIVE = 0,
+ IA2_COORDTYPE_PARENT_RELATIVE = ( IA2_COORDTYPE_SCREEN_RELATIVE + 1 )
+ } ;
+
+enum IA2TextSpecialOffsets
+ { IA2_TEXT_OFFSET_LENGTH = -1,
+ IA2_TEXT_OFFSET_CARET = -2
+ } ;
+
+enum IA2TableModelChangeType
+ { IA2_TABLE_MODEL_CHANGE_INSERT = 0,
+ IA2_TABLE_MODEL_CHANGE_DELETE = ( IA2_TABLE_MODEL_CHANGE_INSERT + 1 ) ,
+ IA2_TABLE_MODEL_CHANGE_UPDATE = ( IA2_TABLE_MODEL_CHANGE_DELETE + 1 )
+ } ;
+typedef struct IA2TableModelChange
+ {
+ enum IA2TableModelChangeType type;
+ long firstRow;
+ long lastRow;
+ long firstColumn;
+ long lastColumn;
+ } IA2TableModelChange;
+
+#define IA2_RELATION_CONTAINING_APPLICATION ( L"containingApplication" )
+
+#define IA2_RELATION_CONTAINING_DOCUMENT ( L"containingDocument" )
+
+#define IA2_RELATION_CONTAINING_TAB_PANE ( L"containingTabPane" )
+
+#define IA2_RELATION_CONTAINING_WINDOW ( L"containingWindow" )
+
+#define IA2_RELATION_CONTROLLED_BY ( L"controlledBy" )
+
+#define IA2_RELATION_CONTROLLER_FOR ( L"controllerFor" )
+
+#define IA2_RELATION_DESCRIBED_BY ( L"describedBy" )
+
+#define IA2_RELATION_DESCRIPTION_FOR ( L"descriptionFor" )
+
+#define IA2_RELATION_EMBEDDED_BY ( L"embeddedBy" )
+
+#define IA2_RELATION_EMBEDS ( L"embeds" )
+
+#define IA2_RELATION_FLOWS_FROM ( L"flowsFrom" )
+
+#define IA2_RELATION_FLOWS_TO ( L"flowsTo" )
+
+#define IA2_RELATION_LABEL_FOR ( L"labelFor" )
+
+#define IA2_RELATION_LABELED_BY ( L"labelledBy" )
+
+#define IA2_RELATION_LABELLED_BY ( L"labelledBy" )
+
+#define IA2_RELATION_MEMBER_OF ( L"memberOf" )
+
+#define IA2_RELATION_NEXT_TABBABLE ( L"nextTabbable" )
+
+#define IA2_RELATION_NODE_CHILD_OF ( L"nodeChildOf" )
+
+#define IA2_RELATION_NODE_PARENT_OF ( L"nodeParentOf" )
+
+#define IA2_RELATION_PARENT_WINDOW_OF ( L"parentWindowOf" )
+
+#define IA2_RELATION_POPUP_FOR ( L"popupFor" )
+
+#define IA2_RELATION_PREVIOUS_TABBABLE ( L"previousTabbable" )
+
+#define IA2_RELATION_SUBWINDOW_OF ( L"subwindowOf" )
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0000_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0000_v0_0_s_ifspec;
+
+#ifndef __IAccessibleRelation_INTERFACE_DEFINED__
+#define __IAccessibleRelation_INTERFACE_DEFINED__
+
+/* interface IAccessibleRelation */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessibleRelation;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("7CDF86EE-C3DA-496a-BDA4-281B336E1FDC")
+ IAccessibleRelation : public IUnknown
+ {
+ public:
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_relationType(
+ /* [retval][out] */ BSTR *relationType) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_localizedRelationType(
+ /* [retval][out] */ BSTR *localizedRelationType) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nTargets(
+ /* [retval][out] */ long *nTargets) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_target(
+ /* [in] */ long targetIndex,
+ /* [retval][out] */ IUnknown **target) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_targets(
+ /* [in] */ long maxTargets,
+ /* [length_is][size_is][out] */ IUnknown **targets,
+ /* [retval][out] */ long *nTargets) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessibleRelationVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessibleRelation * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessibleRelation * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessibleRelation * This);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relationType )(
+ IAccessibleRelation * This,
+ /* [retval][out] */ BSTR *relationType);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedRelationType )(
+ IAccessibleRelation * This,
+ /* [retval][out] */ BSTR *localizedRelationType);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nTargets )(
+ IAccessibleRelation * This,
+ /* [retval][out] */ long *nTargets);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_target )(
+ IAccessibleRelation * This,
+ /* [in] */ long targetIndex,
+ /* [retval][out] */ IUnknown **target);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_targets )(
+ IAccessibleRelation * This,
+ /* [in] */ long maxTargets,
+ /* [length_is][size_is][out] */ IUnknown **targets,
+ /* [retval][out] */ long *nTargets);
+
+ END_INTERFACE
+ } IAccessibleRelationVtbl;
+
+ interface IAccessibleRelation
+ {
+ CONST_VTBL struct IAccessibleRelationVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessibleRelation_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessibleRelation_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessibleRelation_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessibleRelation_get_relationType(This,relationType) \
+ ( (This)->lpVtbl -> get_relationType(This,relationType) )
+
+#define IAccessibleRelation_get_localizedRelationType(This,localizedRelationType) \
+ ( (This)->lpVtbl -> get_localizedRelationType(This,localizedRelationType) )
+
+#define IAccessibleRelation_get_nTargets(This,nTargets) \
+ ( (This)->lpVtbl -> get_nTargets(This,nTargets) )
+
+#define IAccessibleRelation_get_target(This,targetIndex,target) \
+ ( (This)->lpVtbl -> get_target(This,targetIndex,target) )
+
+#define IAccessibleRelation_get_targets(This,maxTargets,targets,nTargets) \
+ ( (This)->lpVtbl -> get_targets(This,maxTargets,targets,nTargets) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessibleRelation_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_ia2_api_all_0000_0001 */
+/* [local] */
+
+
+enum IA2Actions
+ { IA2_ACTION_OPEN = -1,
+ IA2_ACTION_COMPLETE = -2,
+ IA2_ACTION_CLOSE = -3
+ } ;
+
+
+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0001_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0001_v0_0_s_ifspec;
+
+#ifndef __IAccessibleAction_INTERFACE_DEFINED__
+#define __IAccessibleAction_INTERFACE_DEFINED__
+
+/* interface IAccessibleAction */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessibleAction;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("B70D9F59-3B5A-4dba-AB9E-22012F607DF5")
+ IAccessibleAction : public IUnknown
+ {
+ public:
+ virtual HRESULT STDMETHODCALLTYPE nActions(
+ /* [retval][out] */ long *nActions) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE doAction(
+ /* [in] */ long actionIndex) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_description(
+ /* [in] */ long actionIndex,
+ /* [retval][out] */ BSTR *description) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_keyBinding(
+ /* [in] */ long actionIndex,
+ /* [in] */ long nMaxBindings,
+ /* [length_is][length_is][size_is][size_is][out] */ BSTR **keyBindings,
+ /* [retval][out] */ long *nBindings) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_name(
+ /* [in] */ long actionIndex,
+ /* [retval][out] */ BSTR *name) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_localizedName(
+ /* [in] */ long actionIndex,
+ /* [retval][out] */ BSTR *localizedName) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessibleActionVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessibleAction * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessibleAction * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessibleAction * This);
+
+ HRESULT ( STDMETHODCALLTYPE *nActions )(
+ IAccessibleAction * This,
+ /* [retval][out] */ long *nActions);
+
+ HRESULT ( STDMETHODCALLTYPE *doAction )(
+ IAccessibleAction * This,
+ /* [in] */ long actionIndex);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_description )(
+ IAccessibleAction * This,
+ /* [in] */ long actionIndex,
+ /* [retval][out] */ BSTR *description);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_keyBinding )(
+ IAccessibleAction * This,
+ /* [in] */ long actionIndex,
+ /* [in] */ long nMaxBindings,
+ /* [length_is][length_is][size_is][size_is][out] */ BSTR **keyBindings,
+ /* [retval][out] */ long *nBindings);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_name )(
+ IAccessibleAction * This,
+ /* [in] */ long actionIndex,
+ /* [retval][out] */ BSTR *name);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedName )(
+ IAccessibleAction * This,
+ /* [in] */ long actionIndex,
+ /* [retval][out] */ BSTR *localizedName);
+
+ END_INTERFACE
+ } IAccessibleActionVtbl;
+
+ interface IAccessibleAction
+ {
+ CONST_VTBL struct IAccessibleActionVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessibleAction_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessibleAction_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessibleAction_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessibleAction_nActions(This,nActions) \
+ ( (This)->lpVtbl -> nActions(This,nActions) )
+
+#define IAccessibleAction_doAction(This,actionIndex) \
+ ( (This)->lpVtbl -> doAction(This,actionIndex) )
+
+#define IAccessibleAction_get_description(This,actionIndex,description) \
+ ( (This)->lpVtbl -> get_description(This,actionIndex,description) )
+
+#define IAccessibleAction_get_keyBinding(This,actionIndex,nMaxBindings,keyBindings,nBindings) \
+ ( (This)->lpVtbl -> get_keyBinding(This,actionIndex,nMaxBindings,keyBindings,nBindings) )
+
+#define IAccessibleAction_get_name(This,actionIndex,name) \
+ ( (This)->lpVtbl -> get_name(This,actionIndex,name) )
+
+#define IAccessibleAction_get_localizedName(This,actionIndex,localizedName) \
+ ( (This)->lpVtbl -> get_localizedName(This,actionIndex,localizedName) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessibleAction_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_ia2_api_all_0000_0002 */
+/* [local] */
+
+
+enum IA2Role
+ { IA2_ROLE_UNKNOWN = 0,
+ IA2_ROLE_CANVAS = 0x401,
+ IA2_ROLE_CAPTION = ( IA2_ROLE_CANVAS + 1 ) ,
+ IA2_ROLE_CHECK_MENU_ITEM = ( IA2_ROLE_CAPTION + 1 ) ,
+ IA2_ROLE_COLOR_CHOOSER = ( IA2_ROLE_CHECK_MENU_ITEM + 1 ) ,
+ IA2_ROLE_DATE_EDITOR = ( IA2_ROLE_COLOR_CHOOSER + 1 ) ,
+ IA2_ROLE_DESKTOP_ICON = ( IA2_ROLE_DATE_EDITOR + 1 ) ,
+ IA2_ROLE_DESKTOP_PANE = ( IA2_ROLE_DESKTOP_ICON + 1 ) ,
+ IA2_ROLE_DIRECTORY_PANE = ( IA2_ROLE_DESKTOP_PANE + 1 ) ,
+ IA2_ROLE_EDITBAR = ( IA2_ROLE_DIRECTORY_PANE + 1 ) ,
+ IA2_ROLE_EMBEDDED_OBJECT = ( IA2_ROLE_EDITBAR + 1 ) ,
+ IA2_ROLE_ENDNOTE = ( IA2_ROLE_EMBEDDED_OBJECT + 1 ) ,
+ IA2_ROLE_FILE_CHOOSER = ( IA2_ROLE_ENDNOTE + 1 ) ,
+ IA2_ROLE_FONT_CHOOSER = ( IA2_ROLE_FILE_CHOOSER + 1 ) ,
+ IA2_ROLE_FOOTER = ( IA2_ROLE_FONT_CHOOSER + 1 ) ,
+ IA2_ROLE_FOOTNOTE = ( IA2_ROLE_FOOTER + 1 ) ,
+ IA2_ROLE_FORM = ( IA2_ROLE_FOOTNOTE + 1 ) ,
+ IA2_ROLE_FRAME = ( IA2_ROLE_FORM + 1 ) ,
+ IA2_ROLE_GLASS_PANE = ( IA2_ROLE_FRAME + 1 ) ,
+ IA2_ROLE_HEADER = ( IA2_ROLE_GLASS_PANE + 1 ) ,
+ IA2_ROLE_HEADING = ( IA2_ROLE_HEADER + 1 ) ,
+ IA2_ROLE_ICON = ( IA2_ROLE_HEADING + 1 ) ,
+ IA2_ROLE_IMAGE_MAP = ( IA2_ROLE_ICON + 1 ) ,
+ IA2_ROLE_INPUT_METHOD_WINDOW = ( IA2_ROLE_IMAGE_MAP + 1 ) ,
+ IA2_ROLE_INTERNAL_FRAME = ( IA2_ROLE_INPUT_METHOD_WINDOW + 1 ) ,
+ IA2_ROLE_LABEL = ( IA2_ROLE_INTERNAL_FRAME + 1 ) ,
+ IA2_ROLE_LAYERED_PANE = ( IA2_ROLE_LABEL + 1 ) ,
+ IA2_ROLE_NOTE = ( IA2_ROLE_LAYERED_PANE + 1 ) ,
+ IA2_ROLE_OPTION_PANE = ( IA2_ROLE_NOTE + 1 ) ,
+ IA2_ROLE_PAGE = ( IA2_ROLE_OPTION_PANE + 1 ) ,
+ IA2_ROLE_PARAGRAPH = ( IA2_ROLE_PAGE + 1 ) ,
+ IA2_ROLE_RADIO_MENU_ITEM = ( IA2_ROLE_PARAGRAPH + 1 ) ,
+ IA2_ROLE_REDUNDANT_OBJECT = ( IA2_ROLE_RADIO_MENU_ITEM + 1 ) ,
+ IA2_ROLE_ROOT_PANE = ( IA2_ROLE_REDUNDANT_OBJECT + 1 ) ,
+ IA2_ROLE_RULER = ( IA2_ROLE_ROOT_PANE + 1 ) ,
+ IA2_ROLE_SCROLL_PANE = ( IA2_ROLE_RULER + 1 ) ,
+ IA2_ROLE_SECTION = ( IA2_ROLE_SCROLL_PANE + 1 ) ,
+ IA2_ROLE_SHAPE = ( IA2_ROLE_SECTION + 1 ) ,
+ IA2_ROLE_SPLIT_PANE = ( IA2_ROLE_SHAPE + 1 ) ,
+ IA2_ROLE_TEAR_OFF_MENU = ( IA2_ROLE_SPLIT_PANE + 1 ) ,
+ IA2_ROLE_TERMINAL = ( IA2_ROLE_TEAR_OFF_MENU + 1 ) ,
+ IA2_ROLE_TEXT_FRAME = ( IA2_ROLE_TERMINAL + 1 ) ,
+ IA2_ROLE_TOGGLE_BUTTON = ( IA2_ROLE_TEXT_FRAME + 1 ) ,
+ IA2_ROLE_VIEW_PORT = ( IA2_ROLE_TOGGLE_BUTTON + 1 ) ,
+ IA2_ROLE_COMPLEMENTARY_CONTENT = ( IA2_ROLE_VIEW_PORT + 1 )
+ } ;
+typedef long AccessibleStates;
+
+
+enum IA2States
+ { IA2_STATE_ACTIVE = 0x1,
+ IA2_STATE_ARMED = 0x2,
+ IA2_STATE_DEFUNCT = 0x4,
+ IA2_STATE_EDITABLE = 0x8,
+ IA2_STATE_HORIZONTAL = 0x10,
+ IA2_STATE_ICONIFIED = 0x20,
+ IA2_STATE_INVALID_ENTRY = 0x40,
+ IA2_STATE_MANAGES_DESCENDANTS = 0x80,
+ IA2_STATE_MODAL = 0x100,
+ IA2_STATE_MULTI_LINE = 0x200,
+ IA2_STATE_OPAQUE = 0x400,
+ IA2_STATE_REQUIRED = 0x800,
+ IA2_STATE_SELECTABLE_TEXT = 0x1000,
+ IA2_STATE_SINGLE_LINE = 0x2000,
+ IA2_STATE_STALE = 0x4000,
+ IA2_STATE_SUPPORTS_AUTOCOMPLETION = 0x8000,
+ IA2_STATE_TRANSIENT = 0x10000,
+ IA2_STATE_VERTICAL = 0x20000,
+ IA2_STATE_CHECKABLE = 0x40000,
+ IA2_STATE_PINNED = 0x80000
+ } ;
+typedef struct IA2Locale
+ {
+ BSTR language;
+ BSTR country;
+ BSTR variant;
+ } IA2Locale;
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0002_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0002_v0_0_s_ifspec;
+
+#ifndef __IAccessible2_INTERFACE_DEFINED__
+#define __IAccessible2_INTERFACE_DEFINED__
+
+/* interface IAccessible2 */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessible2;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("E89F726E-C4F4-4c19-BB19-B647D7FA8478")
+ IAccessible2 : public IAccessible
+ {
+ public:
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nRelations(
+ /* [retval][out] */ long *nRelations) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_relation(
+ /* [in] */ long relationIndex,
+ /* [retval][out] */ IAccessibleRelation **relation) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_relations(
+ /* [in] */ long maxRelations,
+ /* [length_is][size_is][out] */ IAccessibleRelation **relations,
+ /* [retval][out] */ long *nRelations) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE role(
+ /* [retval][out] */ long *role) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE scrollTo(
+ /* [in] */ enum IA2ScrollType scrollType) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE scrollToPoint(
+ /* [in] */ enum IA2CoordinateType coordinateType,
+ /* [in] */ long x,
+ /* [in] */ long y) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_groupPosition(
+ /* [out] */ long *groupLevel,
+ /* [out] */ long *similarItemsInGroup,
+ /* [retval][out] */ long *positionInGroup) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_states(
+ /* [retval][out] */ AccessibleStates *states) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_extendedRole(
+ /* [retval][out] */ BSTR *extendedRole) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_localizedExtendedRole(
+ /* [retval][out] */ BSTR *localizedExtendedRole) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nExtendedStates(
+ /* [retval][out] */ long *nExtendedStates) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_extendedStates(
+ /* [in] */ long maxExtendedStates,
+ /* [length_is][length_is][size_is][size_is][out] */ BSTR **extendedStates,
+ /* [retval][out] */ long *nExtendedStates) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_localizedExtendedStates(
+ /* [in] */ long maxLocalizedExtendedStates,
+ /* [length_is][length_is][size_is][size_is][out] */ BSTR **localizedExtendedStates,
+ /* [retval][out] */ long *nLocalizedExtendedStates) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_uniqueID(
+ /* [retval][out] */ long *uniqueID) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_windowHandle(
+ /* [retval][out] */ HWND *windowHandle) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_indexInParent(
+ /* [retval][out] */ long *indexInParent) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_locale(
+ /* [retval][out] */ IA2Locale *locale) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_attributes(
+ /* [retval][out] */ BSTR *attributes) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessible2Vtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessible2 * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessible2 * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessible2 * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IAccessible2 * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IAccessible2 * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IAccessible2 * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [range][in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IAccessible2 * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accParent )(
+ IAccessible2 * This,
+ /* [retval][out] */ IDispatch **ppdispParent);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accChildCount )(
+ IAccessible2 * This,
+ /* [retval][out] */ long *pcountChildren);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accChild )(
+ IAccessible2 * This,
+ /* [in] */ VARIANT varChild,
+ /* [retval][out] */ IDispatch **ppdispChild);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accName )(
+ IAccessible2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ BSTR *pszName);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accValue )(
+ IAccessible2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ BSTR *pszValue);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accDescription )(
+ IAccessible2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ BSTR *pszDescription);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accRole )(
+ IAccessible2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ VARIANT *pvarRole);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accState )(
+ IAccessible2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ VARIANT *pvarState);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accHelp )(
+ IAccessible2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ BSTR *pszHelp);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accHelpTopic )(
+ IAccessible2 * This,
+ /* [out] */ BSTR *pszHelpFile,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ long *pidTopic);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accKeyboardShortcut )(
+ IAccessible2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ BSTR *pszKeyboardShortcut);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accFocus )(
+ IAccessible2 * This,
+ /* [retval][out] */ VARIANT *pvarChild);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accSelection )(
+ IAccessible2 * This,
+ /* [retval][out] */ VARIANT *pvarChildren);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accDefaultAction )(
+ IAccessible2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ BSTR *pszDefaultAction);
+
+ /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accSelect )(
+ IAccessible2 * This,
+ /* [in] */ long flagsSelect,
+ /* [optional][in] */ VARIANT varChild);
+
+ /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accLocation )(
+ IAccessible2 * This,
+ /* [out] */ long *pxLeft,
+ /* [out] */ long *pyTop,
+ /* [out] */ long *pcxWidth,
+ /* [out] */ long *pcyHeight,
+ /* [optional][in] */ VARIANT varChild);
+
+ /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accNavigate )(
+ IAccessible2 * This,
+ /* [in] */ long navDir,
+ /* [optional][in] */ VARIANT varStart,
+ /* [retval][out] */ VARIANT *pvarEndUpAt);
+
+ /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accHitTest )(
+ IAccessible2 * This,
+ /* [in] */ long xLeft,
+ /* [in] */ long yTop,
+ /* [retval][out] */ VARIANT *pvarChild);
+
+ /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accDoDefaultAction )(
+ IAccessible2 * This,
+ /* [optional][in] */ VARIANT varChild);
+
+ /* [id][propput][hidden] */ HRESULT ( STDMETHODCALLTYPE *put_accName )(
+ IAccessible2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [in] */ BSTR szName);
+
+ /* [id][propput][hidden] */ HRESULT ( STDMETHODCALLTYPE *put_accValue )(
+ IAccessible2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [in] */ BSTR szValue);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nRelations )(
+ IAccessible2 * This,
+ /* [retval][out] */ long *nRelations);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relation )(
+ IAccessible2 * This,
+ /* [in] */ long relationIndex,
+ /* [retval][out] */ IAccessibleRelation **relation);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relations )(
+ IAccessible2 * This,
+ /* [in] */ long maxRelations,
+ /* [length_is][size_is][out] */ IAccessibleRelation **relations,
+ /* [retval][out] */ long *nRelations);
+
+ HRESULT ( STDMETHODCALLTYPE *role )(
+ IAccessible2 * This,
+ /* [retval][out] */ long *role);
+
+ HRESULT ( STDMETHODCALLTYPE *scrollTo )(
+ IAccessible2 * This,
+ /* [in] */ enum IA2ScrollType scrollType);
+
+ HRESULT ( STDMETHODCALLTYPE *scrollToPoint )(
+ IAccessible2 * This,
+ /* [in] */ enum IA2CoordinateType coordinateType,
+ /* [in] */ long x,
+ /* [in] */ long y);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_groupPosition )(
+ IAccessible2 * This,
+ /* [out] */ long *groupLevel,
+ /* [out] */ long *similarItemsInGroup,
+ /* [retval][out] */ long *positionInGroup);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_states )(
+ IAccessible2 * This,
+ /* [retval][out] */ AccessibleStates *states);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_extendedRole )(
+ IAccessible2 * This,
+ /* [retval][out] */ BSTR *extendedRole);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedExtendedRole )(
+ IAccessible2 * This,
+ /* [retval][out] */ BSTR *localizedExtendedRole);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nExtendedStates )(
+ IAccessible2 * This,
+ /* [retval][out] */ long *nExtendedStates);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_extendedStates )(
+ IAccessible2 * This,
+ /* [in] */ long maxExtendedStates,
+ /* [length_is][length_is][size_is][size_is][out] */ BSTR **extendedStates,
+ /* [retval][out] */ long *nExtendedStates);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedExtendedStates )(
+ IAccessible2 * This,
+ /* [in] */ long maxLocalizedExtendedStates,
+ /* [length_is][length_is][size_is][size_is][out] */ BSTR **localizedExtendedStates,
+ /* [retval][out] */ long *nLocalizedExtendedStates);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_uniqueID )(
+ IAccessible2 * This,
+ /* [retval][out] */ long *uniqueID);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_windowHandle )(
+ IAccessible2 * This,
+ /* [retval][out] */ HWND *windowHandle);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_indexInParent )(
+ IAccessible2 * This,
+ /* [retval][out] */ long *indexInParent);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_locale )(
+ IAccessible2 * This,
+ /* [retval][out] */ IA2Locale *locale);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attributes )(
+ IAccessible2 * This,
+ /* [retval][out] */ BSTR *attributes);
+
+ END_INTERFACE
+ } IAccessible2Vtbl;
+
+ interface IAccessible2
+ {
+ CONST_VTBL struct IAccessible2Vtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessible2_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessible2_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessible2_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessible2_GetTypeInfoCount(This,pctinfo) \
+ ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
+
+#define IAccessible2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
+
+#define IAccessible2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
+
+#define IAccessible2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
+
+
+#define IAccessible2_get_accParent(This,ppdispParent) \
+ ( (This)->lpVtbl -> get_accParent(This,ppdispParent) )
+
+#define IAccessible2_get_accChildCount(This,pcountChildren) \
+ ( (This)->lpVtbl -> get_accChildCount(This,pcountChildren) )
+
+#define IAccessible2_get_accChild(This,varChild,ppdispChild) \
+ ( (This)->lpVtbl -> get_accChild(This,varChild,ppdispChild) )
+
+#define IAccessible2_get_accName(This,varChild,pszName) \
+ ( (This)->lpVtbl -> get_accName(This,varChild,pszName) )
+
+#define IAccessible2_get_accValue(This,varChild,pszValue) \
+ ( (This)->lpVtbl -> get_accValue(This,varChild,pszValue) )
+
+#define IAccessible2_get_accDescription(This,varChild,pszDescription) \
+ ( (This)->lpVtbl -> get_accDescription(This,varChild,pszDescription) )
+
+#define IAccessible2_get_accRole(This,varChild,pvarRole) \
+ ( (This)->lpVtbl -> get_accRole(This,varChild,pvarRole) )
+
+#define IAccessible2_get_accState(This,varChild,pvarState) \
+ ( (This)->lpVtbl -> get_accState(This,varChild,pvarState) )
+
+#define IAccessible2_get_accHelp(This,varChild,pszHelp) \
+ ( (This)->lpVtbl -> get_accHelp(This,varChild,pszHelp) )
+
+#define IAccessible2_get_accHelpTopic(This,pszHelpFile,varChild,pidTopic) \
+ ( (This)->lpVtbl -> get_accHelpTopic(This,pszHelpFile,varChild,pidTopic) )
+
+#define IAccessible2_get_accKeyboardShortcut(This,varChild,pszKeyboardShortcut) \
+ ( (This)->lpVtbl -> get_accKeyboardShortcut(This,varChild,pszKeyboardShortcut) )
+
+#define IAccessible2_get_accFocus(This,pvarChild) \
+ ( (This)->lpVtbl -> get_accFocus(This,pvarChild) )
+
+#define IAccessible2_get_accSelection(This,pvarChildren) \
+ ( (This)->lpVtbl -> get_accSelection(This,pvarChildren) )
+
+#define IAccessible2_get_accDefaultAction(This,varChild,pszDefaultAction) \
+ ( (This)->lpVtbl -> get_accDefaultAction(This,varChild,pszDefaultAction) )
+
+#define IAccessible2_accSelect(This,flagsSelect,varChild) \
+ ( (This)->lpVtbl -> accSelect(This,flagsSelect,varChild) )
+
+#define IAccessible2_accLocation(This,pxLeft,pyTop,pcxWidth,pcyHeight,varChild) \
+ ( (This)->lpVtbl -> accLocation(This,pxLeft,pyTop,pcxWidth,pcyHeight,varChild) )
+
+#define IAccessible2_accNavigate(This,navDir,varStart,pvarEndUpAt) \
+ ( (This)->lpVtbl -> accNavigate(This,navDir,varStart,pvarEndUpAt) )
+
+#define IAccessible2_accHitTest(This,xLeft,yTop,pvarChild) \
+ ( (This)->lpVtbl -> accHitTest(This,xLeft,yTop,pvarChild) )
+
+#define IAccessible2_accDoDefaultAction(This,varChild) \
+ ( (This)->lpVtbl -> accDoDefaultAction(This,varChild) )
+
+#define IAccessible2_put_accName(This,varChild,szName) \
+ ( (This)->lpVtbl -> put_accName(This,varChild,szName) )
+
+#define IAccessible2_put_accValue(This,varChild,szValue) \
+ ( (This)->lpVtbl -> put_accValue(This,varChild,szValue) )
+
+
+#define IAccessible2_get_nRelations(This,nRelations) \
+ ( (This)->lpVtbl -> get_nRelations(This,nRelations) )
+
+#define IAccessible2_get_relation(This,relationIndex,relation) \
+ ( (This)->lpVtbl -> get_relation(This,relationIndex,relation) )
+
+#define IAccessible2_get_relations(This,maxRelations,relations,nRelations) \
+ ( (This)->lpVtbl -> get_relations(This,maxRelations,relations,nRelations) )
+
+#define IAccessible2_role(This,role) \
+ ( (This)->lpVtbl -> role(This,role) )
+
+#define IAccessible2_scrollTo(This,scrollType) \
+ ( (This)->lpVtbl -> scrollTo(This,scrollType) )
+
+#define IAccessible2_scrollToPoint(This,coordinateType,x,y) \
+ ( (This)->lpVtbl -> scrollToPoint(This,coordinateType,x,y) )
+
+#define IAccessible2_get_groupPosition(This,groupLevel,similarItemsInGroup,positionInGroup) \
+ ( (This)->lpVtbl -> get_groupPosition(This,groupLevel,similarItemsInGroup,positionInGroup) )
+
+#define IAccessible2_get_states(This,states) \
+ ( (This)->lpVtbl -> get_states(This,states) )
+
+#define IAccessible2_get_extendedRole(This,extendedRole) \
+ ( (This)->lpVtbl -> get_extendedRole(This,extendedRole) )
+
+#define IAccessible2_get_localizedExtendedRole(This,localizedExtendedRole) \
+ ( (This)->lpVtbl -> get_localizedExtendedRole(This,localizedExtendedRole) )
+
+#define IAccessible2_get_nExtendedStates(This,nExtendedStates) \
+ ( (This)->lpVtbl -> get_nExtendedStates(This,nExtendedStates) )
+
+#define IAccessible2_get_extendedStates(This,maxExtendedStates,extendedStates,nExtendedStates) \
+ ( (This)->lpVtbl -> get_extendedStates(This,maxExtendedStates,extendedStates,nExtendedStates) )
+
+#define IAccessible2_get_localizedExtendedStates(This,maxLocalizedExtendedStates,localizedExtendedStates,nLocalizedExtendedStates) \
+ ( (This)->lpVtbl -> get_localizedExtendedStates(This,maxLocalizedExtendedStates,localizedExtendedStates,nLocalizedExtendedStates) )
+
+#define IAccessible2_get_uniqueID(This,uniqueID) \
+ ( (This)->lpVtbl -> get_uniqueID(This,uniqueID) )
+
+#define IAccessible2_get_windowHandle(This,windowHandle) \
+ ( (This)->lpVtbl -> get_windowHandle(This,windowHandle) )
+
+#define IAccessible2_get_indexInParent(This,indexInParent) \
+ ( (This)->lpVtbl -> get_indexInParent(This,indexInParent) )
+
+#define IAccessible2_get_locale(This,locale) \
+ ( (This)->lpVtbl -> get_locale(This,locale) )
+
+#define IAccessible2_get_attributes(This,attributes) \
+ ( (This)->lpVtbl -> get_attributes(This,attributes) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessible2_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAccessible2_2_INTERFACE_DEFINED__
+#define __IAccessible2_2_INTERFACE_DEFINED__
+
+/* interface IAccessible2_2 */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessible2_2;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("6C9430E9-299D-4E6F-BD01-A82A1E88D3FF")
+ IAccessible2_2 : public IAccessible2
+ {
+ public:
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_attribute(
+ /* [in] */ BSTR name,
+ /* [retval][out] */ VARIANT *attribute) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_accessibleWithCaret(
+ /* [out] */ IUnknown **accessible,
+ /* [retval][out] */ long *caretOffset) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_relationTargetsOfType(
+ /* [in] */ BSTR type,
+ /* [in] */ long maxTargets,
+ /* [size_is][size_is][out] */ IUnknown ***targets,
+ /* [retval][out] */ long *nTargets) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessible2_2Vtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessible2_2 * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessible2_2 * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessible2_2 * This);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfoCount )(
+ IAccessible2_2 * This,
+ /* [out] */ UINT *pctinfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetTypeInfo )(
+ IAccessible2_2 * This,
+ /* [in] */ UINT iTInfo,
+ /* [in] */ LCID lcid,
+ /* [out] */ ITypeInfo **ppTInfo);
+
+ HRESULT ( STDMETHODCALLTYPE *GetIDsOfNames )(
+ IAccessible2_2 * This,
+ /* [in] */ REFIID riid,
+ /* [size_is][in] */ LPOLESTR *rgszNames,
+ /* [range][in] */ UINT cNames,
+ /* [in] */ LCID lcid,
+ /* [size_is][out] */ DISPID *rgDispId);
+
+ /* [local] */ HRESULT ( STDMETHODCALLTYPE *Invoke )(
+ IAccessible2_2 * This,
+ /* [in] */ DISPID dispIdMember,
+ /* [in] */ REFIID riid,
+ /* [in] */ LCID lcid,
+ /* [in] */ WORD wFlags,
+ /* [out][in] */ DISPPARAMS *pDispParams,
+ /* [out] */ VARIANT *pVarResult,
+ /* [out] */ EXCEPINFO *pExcepInfo,
+ /* [out] */ UINT *puArgErr);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accParent )(
+ IAccessible2_2 * This,
+ /* [retval][out] */ IDispatch **ppdispParent);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accChildCount )(
+ IAccessible2_2 * This,
+ /* [retval][out] */ long *pcountChildren);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accChild )(
+ IAccessible2_2 * This,
+ /* [in] */ VARIANT varChild,
+ /* [retval][out] */ IDispatch **ppdispChild);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accName )(
+ IAccessible2_2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ BSTR *pszName);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accValue )(
+ IAccessible2_2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ BSTR *pszValue);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accDescription )(
+ IAccessible2_2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ BSTR *pszDescription);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accRole )(
+ IAccessible2_2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ VARIANT *pvarRole);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accState )(
+ IAccessible2_2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ VARIANT *pvarState);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accHelp )(
+ IAccessible2_2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ BSTR *pszHelp);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accHelpTopic )(
+ IAccessible2_2 * This,
+ /* [out] */ BSTR *pszHelpFile,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ long *pidTopic);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accKeyboardShortcut )(
+ IAccessible2_2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ BSTR *pszKeyboardShortcut);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accFocus )(
+ IAccessible2_2 * This,
+ /* [retval][out] */ VARIANT *pvarChild);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accSelection )(
+ IAccessible2_2 * This,
+ /* [retval][out] */ VARIANT *pvarChildren);
+
+ /* [id][propget][hidden] */ HRESULT ( STDMETHODCALLTYPE *get_accDefaultAction )(
+ IAccessible2_2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [retval][out] */ BSTR *pszDefaultAction);
+
+ /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accSelect )(
+ IAccessible2_2 * This,
+ /* [in] */ long flagsSelect,
+ /* [optional][in] */ VARIANT varChild);
+
+ /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accLocation )(
+ IAccessible2_2 * This,
+ /* [out] */ long *pxLeft,
+ /* [out] */ long *pyTop,
+ /* [out] */ long *pcxWidth,
+ /* [out] */ long *pcyHeight,
+ /* [optional][in] */ VARIANT varChild);
+
+ /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accNavigate )(
+ IAccessible2_2 * This,
+ /* [in] */ long navDir,
+ /* [optional][in] */ VARIANT varStart,
+ /* [retval][out] */ VARIANT *pvarEndUpAt);
+
+ /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accHitTest )(
+ IAccessible2_2 * This,
+ /* [in] */ long xLeft,
+ /* [in] */ long yTop,
+ /* [retval][out] */ VARIANT *pvarChild);
+
+ /* [id][hidden] */ HRESULT ( STDMETHODCALLTYPE *accDoDefaultAction )(
+ IAccessible2_2 * This,
+ /* [optional][in] */ VARIANT varChild);
+
+ /* [id][propput][hidden] */ HRESULT ( STDMETHODCALLTYPE *put_accName )(
+ IAccessible2_2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [in] */ BSTR szName);
+
+ /* [id][propput][hidden] */ HRESULT ( STDMETHODCALLTYPE *put_accValue )(
+ IAccessible2_2 * This,
+ /* [optional][in] */ VARIANT varChild,
+ /* [in] */ BSTR szValue);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nRelations )(
+ IAccessible2_2 * This,
+ /* [retval][out] */ long *nRelations);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relation )(
+ IAccessible2_2 * This,
+ /* [in] */ long relationIndex,
+ /* [retval][out] */ IAccessibleRelation **relation);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relations )(
+ IAccessible2_2 * This,
+ /* [in] */ long maxRelations,
+ /* [length_is][size_is][out] */ IAccessibleRelation **relations,
+ /* [retval][out] */ long *nRelations);
+
+ HRESULT ( STDMETHODCALLTYPE *role )(
+ IAccessible2_2 * This,
+ /* [retval][out] */ long *role);
+
+ HRESULT ( STDMETHODCALLTYPE *scrollTo )(
+ IAccessible2_2 * This,
+ /* [in] */ enum IA2ScrollType scrollType);
+
+ HRESULT ( STDMETHODCALLTYPE *scrollToPoint )(
+ IAccessible2_2 * This,
+ /* [in] */ enum IA2CoordinateType coordinateType,
+ /* [in] */ long x,
+ /* [in] */ long y);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_groupPosition )(
+ IAccessible2_2 * This,
+ /* [out] */ long *groupLevel,
+ /* [out] */ long *similarItemsInGroup,
+ /* [retval][out] */ long *positionInGroup);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_states )(
+ IAccessible2_2 * This,
+ /* [retval][out] */ AccessibleStates *states);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_extendedRole )(
+ IAccessible2_2 * This,
+ /* [retval][out] */ BSTR *extendedRole);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedExtendedRole )(
+ IAccessible2_2 * This,
+ /* [retval][out] */ BSTR *localizedExtendedRole);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nExtendedStates )(
+ IAccessible2_2 * This,
+ /* [retval][out] */ long *nExtendedStates);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_extendedStates )(
+ IAccessible2_2 * This,
+ /* [in] */ long maxExtendedStates,
+ /* [length_is][length_is][size_is][size_is][out] */ BSTR **extendedStates,
+ /* [retval][out] */ long *nExtendedStates);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedExtendedStates )(
+ IAccessible2_2 * This,
+ /* [in] */ long maxLocalizedExtendedStates,
+ /* [length_is][length_is][size_is][size_is][out] */ BSTR **localizedExtendedStates,
+ /* [retval][out] */ long *nLocalizedExtendedStates);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_uniqueID )(
+ IAccessible2_2 * This,
+ /* [retval][out] */ long *uniqueID);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_windowHandle )(
+ IAccessible2_2 * This,
+ /* [retval][out] */ HWND *windowHandle);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_indexInParent )(
+ IAccessible2_2 * This,
+ /* [retval][out] */ long *indexInParent);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_locale )(
+ IAccessible2_2 * This,
+ /* [retval][out] */ IA2Locale *locale);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attributes )(
+ IAccessible2_2 * This,
+ /* [retval][out] */ BSTR *attributes);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attribute )(
+ IAccessible2_2 * This,
+ /* [in] */ BSTR name,
+ /* [retval][out] */ VARIANT *attribute);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_accessibleWithCaret )(
+ IAccessible2_2 * This,
+ /* [out] */ IUnknown **accessible,
+ /* [retval][out] */ long *caretOffset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_relationTargetsOfType )(
+ IAccessible2_2 * This,
+ /* [in] */ BSTR type,
+ /* [in] */ long maxTargets,
+ /* [size_is][size_is][out] */ IUnknown ***targets,
+ /* [retval][out] */ long *nTargets);
+
+ END_INTERFACE
+ } IAccessible2_2Vtbl;
+
+ interface IAccessible2_2
+ {
+ CONST_VTBL struct IAccessible2_2Vtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessible2_2_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessible2_2_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessible2_2_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessible2_2_GetTypeInfoCount(This,pctinfo) \
+ ( (This)->lpVtbl -> GetTypeInfoCount(This,pctinfo) )
+
+#define IAccessible2_2_GetTypeInfo(This,iTInfo,lcid,ppTInfo) \
+ ( (This)->lpVtbl -> GetTypeInfo(This,iTInfo,lcid,ppTInfo) )
+
+#define IAccessible2_2_GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) \
+ ( (This)->lpVtbl -> GetIDsOfNames(This,riid,rgszNames,cNames,lcid,rgDispId) )
+
+#define IAccessible2_2_Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) \
+ ( (This)->lpVtbl -> Invoke(This,dispIdMember,riid,lcid,wFlags,pDispParams,pVarResult,pExcepInfo,puArgErr) )
+
+
+#define IAccessible2_2_get_accParent(This,ppdispParent) \
+ ( (This)->lpVtbl -> get_accParent(This,ppdispParent) )
+
+#define IAccessible2_2_get_accChildCount(This,pcountChildren) \
+ ( (This)->lpVtbl -> get_accChildCount(This,pcountChildren) )
+
+#define IAccessible2_2_get_accChild(This,varChild,ppdispChild) \
+ ( (This)->lpVtbl -> get_accChild(This,varChild,ppdispChild) )
+
+#define IAccessible2_2_get_accName(This,varChild,pszName) \
+ ( (This)->lpVtbl -> get_accName(This,varChild,pszName) )
+
+#define IAccessible2_2_get_accValue(This,varChild,pszValue) \
+ ( (This)->lpVtbl -> get_accValue(This,varChild,pszValue) )
+
+#define IAccessible2_2_get_accDescription(This,varChild,pszDescription) \
+ ( (This)->lpVtbl -> get_accDescription(This,varChild,pszDescription) )
+
+#define IAccessible2_2_get_accRole(This,varChild,pvarRole) \
+ ( (This)->lpVtbl -> get_accRole(This,varChild,pvarRole) )
+
+#define IAccessible2_2_get_accState(This,varChild,pvarState) \
+ ( (This)->lpVtbl -> get_accState(This,varChild,pvarState) )
+
+#define IAccessible2_2_get_accHelp(This,varChild,pszHelp) \
+ ( (This)->lpVtbl -> get_accHelp(This,varChild,pszHelp) )
+
+#define IAccessible2_2_get_accHelpTopic(This,pszHelpFile,varChild,pidTopic) \
+ ( (This)->lpVtbl -> get_accHelpTopic(This,pszHelpFile,varChild,pidTopic) )
+
+#define IAccessible2_2_get_accKeyboardShortcut(This,varChild,pszKeyboardShortcut) \
+ ( (This)->lpVtbl -> get_accKeyboardShortcut(This,varChild,pszKeyboardShortcut) )
+
+#define IAccessible2_2_get_accFocus(This,pvarChild) \
+ ( (This)->lpVtbl -> get_accFocus(This,pvarChild) )
+
+#define IAccessible2_2_get_accSelection(This,pvarChildren) \
+ ( (This)->lpVtbl -> get_accSelection(This,pvarChildren) )
+
+#define IAccessible2_2_get_accDefaultAction(This,varChild,pszDefaultAction) \
+ ( (This)->lpVtbl -> get_accDefaultAction(This,varChild,pszDefaultAction) )
+
+#define IAccessible2_2_accSelect(This,flagsSelect,varChild) \
+ ( (This)->lpVtbl -> accSelect(This,flagsSelect,varChild) )
+
+#define IAccessible2_2_accLocation(This,pxLeft,pyTop,pcxWidth,pcyHeight,varChild) \
+ ( (This)->lpVtbl -> accLocation(This,pxLeft,pyTop,pcxWidth,pcyHeight,varChild) )
+
+#define IAccessible2_2_accNavigate(This,navDir,varStart,pvarEndUpAt) \
+ ( (This)->lpVtbl -> accNavigate(This,navDir,varStart,pvarEndUpAt) )
+
+#define IAccessible2_2_accHitTest(This,xLeft,yTop,pvarChild) \
+ ( (This)->lpVtbl -> accHitTest(This,xLeft,yTop,pvarChild) )
+
+#define IAccessible2_2_accDoDefaultAction(This,varChild) \
+ ( (This)->lpVtbl -> accDoDefaultAction(This,varChild) )
+
+#define IAccessible2_2_put_accName(This,varChild,szName) \
+ ( (This)->lpVtbl -> put_accName(This,varChild,szName) )
+
+#define IAccessible2_2_put_accValue(This,varChild,szValue) \
+ ( (This)->lpVtbl -> put_accValue(This,varChild,szValue) )
+
+
+#define IAccessible2_2_get_nRelations(This,nRelations) \
+ ( (This)->lpVtbl -> get_nRelations(This,nRelations) )
+
+#define IAccessible2_2_get_relation(This,relationIndex,relation) \
+ ( (This)->lpVtbl -> get_relation(This,relationIndex,relation) )
+
+#define IAccessible2_2_get_relations(This,maxRelations,relations,nRelations) \
+ ( (This)->lpVtbl -> get_relations(This,maxRelations,relations,nRelations) )
+
+#define IAccessible2_2_role(This,role) \
+ ( (This)->lpVtbl -> role(This,role) )
+
+#define IAccessible2_2_scrollTo(This,scrollType) \
+ ( (This)->lpVtbl -> scrollTo(This,scrollType) )
+
+#define IAccessible2_2_scrollToPoint(This,coordinateType,x,y) \
+ ( (This)->lpVtbl -> scrollToPoint(This,coordinateType,x,y) )
+
+#define IAccessible2_2_get_groupPosition(This,groupLevel,similarItemsInGroup,positionInGroup) \
+ ( (This)->lpVtbl -> get_groupPosition(This,groupLevel,similarItemsInGroup,positionInGroup) )
+
+#define IAccessible2_2_get_states(This,states) \
+ ( (This)->lpVtbl -> get_states(This,states) )
+
+#define IAccessible2_2_get_extendedRole(This,extendedRole) \
+ ( (This)->lpVtbl -> get_extendedRole(This,extendedRole) )
+
+#define IAccessible2_2_get_localizedExtendedRole(This,localizedExtendedRole) \
+ ( (This)->lpVtbl -> get_localizedExtendedRole(This,localizedExtendedRole) )
+
+#define IAccessible2_2_get_nExtendedStates(This,nExtendedStates) \
+ ( (This)->lpVtbl -> get_nExtendedStates(This,nExtendedStates) )
+
+#define IAccessible2_2_get_extendedStates(This,maxExtendedStates,extendedStates,nExtendedStates) \
+ ( (This)->lpVtbl -> get_extendedStates(This,maxExtendedStates,extendedStates,nExtendedStates) )
+
+#define IAccessible2_2_get_localizedExtendedStates(This,maxLocalizedExtendedStates,localizedExtendedStates,nLocalizedExtendedStates) \
+ ( (This)->lpVtbl -> get_localizedExtendedStates(This,maxLocalizedExtendedStates,localizedExtendedStates,nLocalizedExtendedStates) )
+
+#define IAccessible2_2_get_uniqueID(This,uniqueID) \
+ ( (This)->lpVtbl -> get_uniqueID(This,uniqueID) )
+
+#define IAccessible2_2_get_windowHandle(This,windowHandle) \
+ ( (This)->lpVtbl -> get_windowHandle(This,windowHandle) )
+
+#define IAccessible2_2_get_indexInParent(This,indexInParent) \
+ ( (This)->lpVtbl -> get_indexInParent(This,indexInParent) )
+
+#define IAccessible2_2_get_locale(This,locale) \
+ ( (This)->lpVtbl -> get_locale(This,locale) )
+
+#define IAccessible2_2_get_attributes(This,attributes) \
+ ( (This)->lpVtbl -> get_attributes(This,attributes) )
+
+
+#define IAccessible2_2_get_attribute(This,name,attribute) \
+ ( (This)->lpVtbl -> get_attribute(This,name,attribute) )
+
+#define IAccessible2_2_get_accessibleWithCaret(This,accessible,caretOffset) \
+ ( (This)->lpVtbl -> get_accessibleWithCaret(This,accessible,caretOffset) )
+
+#define IAccessible2_2_get_relationTargetsOfType(This,type,maxTargets,targets,nTargets) \
+ ( (This)->lpVtbl -> get_relationTargetsOfType(This,type,maxTargets,targets,nTargets) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessible2_2_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_ia2_api_all_0000_0004 */
+/* [local] */
+
+typedef long IA2Color;
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0004_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0004_v0_0_s_ifspec;
+
+#ifndef __IAccessibleComponent_INTERFACE_DEFINED__
+#define __IAccessibleComponent_INTERFACE_DEFINED__
+
+/* interface IAccessibleComponent */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessibleComponent;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("1546D4B0-4C98-4bda-89AE-9A64748BDDE4")
+ IAccessibleComponent : public IUnknown
+ {
+ public:
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_locationInParent(
+ /* [out] */ long *x,
+ /* [retval][out] */ long *y) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_foreground(
+ /* [retval][out] */ IA2Color *foreground) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_background(
+ /* [retval][out] */ IA2Color *background) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessibleComponentVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessibleComponent * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessibleComponent * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessibleComponent * This);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_locationInParent )(
+ IAccessibleComponent * This,
+ /* [out] */ long *x,
+ /* [retval][out] */ long *y);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_foreground )(
+ IAccessibleComponent * This,
+ /* [retval][out] */ IA2Color *foreground);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_background )(
+ IAccessibleComponent * This,
+ /* [retval][out] */ IA2Color *background);
+
+ END_INTERFACE
+ } IAccessibleComponentVtbl;
+
+ interface IAccessibleComponent
+ {
+ CONST_VTBL struct IAccessibleComponentVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessibleComponent_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessibleComponent_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessibleComponent_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessibleComponent_get_locationInParent(This,x,y) \
+ ( (This)->lpVtbl -> get_locationInParent(This,x,y) )
+
+#define IAccessibleComponent_get_foreground(This,foreground) \
+ ( (This)->lpVtbl -> get_foreground(This,foreground) )
+
+#define IAccessibleComponent_get_background(This,background) \
+ ( (This)->lpVtbl -> get_background(This,background) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessibleComponent_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAccessibleValue_INTERFACE_DEFINED__
+#define __IAccessibleValue_INTERFACE_DEFINED__
+
+/* interface IAccessibleValue */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessibleValue;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("35855B5B-C566-4fd0-A7B1-E65465600394")
+ IAccessibleValue : public IUnknown
+ {
+ public:
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_currentValue(
+ /* [retval][out] */ VARIANT *currentValue) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE setCurrentValue(
+ /* [in] */ VARIANT value) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_maximumValue(
+ /* [retval][out] */ VARIANT *maximumValue) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_minimumValue(
+ /* [retval][out] */ VARIANT *minimumValue) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessibleValueVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessibleValue * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessibleValue * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessibleValue * This);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_currentValue )(
+ IAccessibleValue * This,
+ /* [retval][out] */ VARIANT *currentValue);
+
+ HRESULT ( STDMETHODCALLTYPE *setCurrentValue )(
+ IAccessibleValue * This,
+ /* [in] */ VARIANT value);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_maximumValue )(
+ IAccessibleValue * This,
+ /* [retval][out] */ VARIANT *maximumValue);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_minimumValue )(
+ IAccessibleValue * This,
+ /* [retval][out] */ VARIANT *minimumValue);
+
+ END_INTERFACE
+ } IAccessibleValueVtbl;
+
+ interface IAccessibleValue
+ {
+ CONST_VTBL struct IAccessibleValueVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessibleValue_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessibleValue_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessibleValue_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessibleValue_get_currentValue(This,currentValue) \
+ ( (This)->lpVtbl -> get_currentValue(This,currentValue) )
+
+#define IAccessibleValue_setCurrentValue(This,value) \
+ ( (This)->lpVtbl -> setCurrentValue(This,value) )
+
+#define IAccessibleValue_get_maximumValue(This,maximumValue) \
+ ( (This)->lpVtbl -> get_maximumValue(This,maximumValue) )
+
+#define IAccessibleValue_get_minimumValue(This,minimumValue) \
+ ( (This)->lpVtbl -> get_minimumValue(This,minimumValue) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessibleValue_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_ia2_api_all_0000_0006 */
+/* [local] */
+
+typedef struct IA2TextSegment
+ {
+ BSTR text;
+ long start;
+ long end;
+ } IA2TextSegment;
+
+
+enum IA2TextBoundaryType
+ { IA2_TEXT_BOUNDARY_CHAR = 0,
+ IA2_TEXT_BOUNDARY_WORD = ( IA2_TEXT_BOUNDARY_CHAR + 1 ) ,
+ IA2_TEXT_BOUNDARY_SENTENCE = ( IA2_TEXT_BOUNDARY_WORD + 1 ) ,
+ IA2_TEXT_BOUNDARY_PARAGRAPH = ( IA2_TEXT_BOUNDARY_SENTENCE + 1 ) ,
+ IA2_TEXT_BOUNDARY_LINE = ( IA2_TEXT_BOUNDARY_PARAGRAPH + 1 ) ,
+ IA2_TEXT_BOUNDARY_ALL = ( IA2_TEXT_BOUNDARY_LINE + 1 )
+ } ;
+
+
+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0006_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0006_v0_0_s_ifspec;
+
+#ifndef __IAccessibleText_INTERFACE_DEFINED__
+#define __IAccessibleText_INTERFACE_DEFINED__
+
+/* interface IAccessibleText */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessibleText;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("24FD2FFB-3AAD-4a08-8335-A3AD89C0FB4B")
+ IAccessibleText : public IUnknown
+ {
+ public:
+ virtual HRESULT STDMETHODCALLTYPE addSelection(
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_attributes(
+ /* [in] */ long offset,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *textAttributes) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_caretOffset(
+ /* [retval][out] */ long *offset) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_characterExtents(
+ /* [in] */ long offset,
+ /* [in] */ enum IA2CoordinateType coordType,
+ /* [out] */ long *x,
+ /* [out] */ long *y,
+ /* [out] */ long *width,
+ /* [retval][out] */ long *height) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelections(
+ /* [retval][out] */ long *nSelections) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_offsetAtPoint(
+ /* [in] */ long x,
+ /* [in] */ long y,
+ /* [in] */ enum IA2CoordinateType coordType,
+ /* [retval][out] */ long *offset) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selection(
+ /* [in] */ long selectionIndex,
+ /* [out] */ long *startOffset,
+ /* [retval][out] */ long *endOffset) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_text(
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset,
+ /* [retval][out] */ BSTR *text) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_textBeforeOffset(
+ /* [in] */ long offset,
+ /* [in] */ enum IA2TextBoundaryType boundaryType,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *text) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_textAfterOffset(
+ /* [in] */ long offset,
+ /* [in] */ enum IA2TextBoundaryType boundaryType,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *text) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_textAtOffset(
+ /* [in] */ long offset,
+ /* [in] */ enum IA2TextBoundaryType boundaryType,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *text) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE removeSelection(
+ /* [in] */ long selectionIndex) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE setCaretOffset(
+ /* [in] */ long offset) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE setSelection(
+ /* [in] */ long selectionIndex,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nCharacters(
+ /* [retval][out] */ long *nCharacters) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE scrollSubstringTo(
+ /* [in] */ long startIndex,
+ /* [in] */ long endIndex,
+ /* [in] */ enum IA2ScrollType scrollType) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE scrollSubstringToPoint(
+ /* [in] */ long startIndex,
+ /* [in] */ long endIndex,
+ /* [in] */ enum IA2CoordinateType coordinateType,
+ /* [in] */ long x,
+ /* [in] */ long y) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_newText(
+ /* [retval][out] */ IA2TextSegment *newText) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_oldText(
+ /* [retval][out] */ IA2TextSegment *oldText) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessibleTextVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessibleText * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessibleText * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessibleText * This);
+
+ HRESULT ( STDMETHODCALLTYPE *addSelection )(
+ IAccessibleText * This,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attributes )(
+ IAccessibleText * This,
+ /* [in] */ long offset,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *textAttributes);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_caretOffset )(
+ IAccessibleText * This,
+ /* [retval][out] */ long *offset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_characterExtents )(
+ IAccessibleText * This,
+ /* [in] */ long offset,
+ /* [in] */ enum IA2CoordinateType coordType,
+ /* [out] */ long *x,
+ /* [out] */ long *y,
+ /* [out] */ long *width,
+ /* [retval][out] */ long *height);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelections )(
+ IAccessibleText * This,
+ /* [retval][out] */ long *nSelections);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_offsetAtPoint )(
+ IAccessibleText * This,
+ /* [in] */ long x,
+ /* [in] */ long y,
+ /* [in] */ enum IA2CoordinateType coordType,
+ /* [retval][out] */ long *offset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selection )(
+ IAccessibleText * This,
+ /* [in] */ long selectionIndex,
+ /* [out] */ long *startOffset,
+ /* [retval][out] */ long *endOffset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_text )(
+ IAccessibleText * This,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset,
+ /* [retval][out] */ BSTR *text);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textBeforeOffset )(
+ IAccessibleText * This,
+ /* [in] */ long offset,
+ /* [in] */ enum IA2TextBoundaryType boundaryType,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *text);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textAfterOffset )(
+ IAccessibleText * This,
+ /* [in] */ long offset,
+ /* [in] */ enum IA2TextBoundaryType boundaryType,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *text);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textAtOffset )(
+ IAccessibleText * This,
+ /* [in] */ long offset,
+ /* [in] */ enum IA2TextBoundaryType boundaryType,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *text);
+
+ HRESULT ( STDMETHODCALLTYPE *removeSelection )(
+ IAccessibleText * This,
+ /* [in] */ long selectionIndex);
+
+ HRESULT ( STDMETHODCALLTYPE *setCaretOffset )(
+ IAccessibleText * This,
+ /* [in] */ long offset);
+
+ HRESULT ( STDMETHODCALLTYPE *setSelection )(
+ IAccessibleText * This,
+ /* [in] */ long selectionIndex,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nCharacters )(
+ IAccessibleText * This,
+ /* [retval][out] */ long *nCharacters);
+
+ HRESULT ( STDMETHODCALLTYPE *scrollSubstringTo )(
+ IAccessibleText * This,
+ /* [in] */ long startIndex,
+ /* [in] */ long endIndex,
+ /* [in] */ enum IA2ScrollType scrollType);
+
+ HRESULT ( STDMETHODCALLTYPE *scrollSubstringToPoint )(
+ IAccessibleText * This,
+ /* [in] */ long startIndex,
+ /* [in] */ long endIndex,
+ /* [in] */ enum IA2CoordinateType coordinateType,
+ /* [in] */ long x,
+ /* [in] */ long y);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_newText )(
+ IAccessibleText * This,
+ /* [retval][out] */ IA2TextSegment *newText);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_oldText )(
+ IAccessibleText * This,
+ /* [retval][out] */ IA2TextSegment *oldText);
+
+ END_INTERFACE
+ } IAccessibleTextVtbl;
+
+ interface IAccessibleText
+ {
+ CONST_VTBL struct IAccessibleTextVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessibleText_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessibleText_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessibleText_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessibleText_addSelection(This,startOffset,endOffset) \
+ ( (This)->lpVtbl -> addSelection(This,startOffset,endOffset) )
+
+#define IAccessibleText_get_attributes(This,offset,startOffset,endOffset,textAttributes) \
+ ( (This)->lpVtbl -> get_attributes(This,offset,startOffset,endOffset,textAttributes) )
+
+#define IAccessibleText_get_caretOffset(This,offset) \
+ ( (This)->lpVtbl -> get_caretOffset(This,offset) )
+
+#define IAccessibleText_get_characterExtents(This,offset,coordType,x,y,width,height) \
+ ( (This)->lpVtbl -> get_characterExtents(This,offset,coordType,x,y,width,height) )
+
+#define IAccessibleText_get_nSelections(This,nSelections) \
+ ( (This)->lpVtbl -> get_nSelections(This,nSelections) )
+
+#define IAccessibleText_get_offsetAtPoint(This,x,y,coordType,offset) \
+ ( (This)->lpVtbl -> get_offsetAtPoint(This,x,y,coordType,offset) )
+
+#define IAccessibleText_get_selection(This,selectionIndex,startOffset,endOffset) \
+ ( (This)->lpVtbl -> get_selection(This,selectionIndex,startOffset,endOffset) )
+
+#define IAccessibleText_get_text(This,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> get_text(This,startOffset,endOffset,text) )
+
+#define IAccessibleText_get_textBeforeOffset(This,offset,boundaryType,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> get_textBeforeOffset(This,offset,boundaryType,startOffset,endOffset,text) )
+
+#define IAccessibleText_get_textAfterOffset(This,offset,boundaryType,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> get_textAfterOffset(This,offset,boundaryType,startOffset,endOffset,text) )
+
+#define IAccessibleText_get_textAtOffset(This,offset,boundaryType,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> get_textAtOffset(This,offset,boundaryType,startOffset,endOffset,text) )
+
+#define IAccessibleText_removeSelection(This,selectionIndex) \
+ ( (This)->lpVtbl -> removeSelection(This,selectionIndex) )
+
+#define IAccessibleText_setCaretOffset(This,offset) \
+ ( (This)->lpVtbl -> setCaretOffset(This,offset) )
+
+#define IAccessibleText_setSelection(This,selectionIndex,startOffset,endOffset) \
+ ( (This)->lpVtbl -> setSelection(This,selectionIndex,startOffset,endOffset) )
+
+#define IAccessibleText_get_nCharacters(This,nCharacters) \
+ ( (This)->lpVtbl -> get_nCharacters(This,nCharacters) )
+
+#define IAccessibleText_scrollSubstringTo(This,startIndex,endIndex,scrollType) \
+ ( (This)->lpVtbl -> scrollSubstringTo(This,startIndex,endIndex,scrollType) )
+
+#define IAccessibleText_scrollSubstringToPoint(This,startIndex,endIndex,coordinateType,x,y) \
+ ( (This)->lpVtbl -> scrollSubstringToPoint(This,startIndex,endIndex,coordinateType,x,y) )
+
+#define IAccessibleText_get_newText(This,newText) \
+ ( (This)->lpVtbl -> get_newText(This,newText) )
+
+#define IAccessibleText_get_oldText(This,oldText) \
+ ( (This)->lpVtbl -> get_oldText(This,oldText) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessibleText_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAccessibleText2_INTERFACE_DEFINED__
+#define __IAccessibleText2_INTERFACE_DEFINED__
+
+/* interface IAccessibleText2 */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessibleText2;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("9690A9CC-5C80-4DF5-852E-2D5AE4189A54")
+ IAccessibleText2 : public IAccessibleText
+ {
+ public:
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_attributeRange(
+ /* [in] */ long offset,
+ /* [in] */ BSTR filter,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *attributeValues) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessibleText2Vtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessibleText2 * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessibleText2 * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessibleText2 * This);
+
+ HRESULT ( STDMETHODCALLTYPE *addSelection )(
+ IAccessibleText2 * This,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attributes )(
+ IAccessibleText2 * This,
+ /* [in] */ long offset,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *textAttributes);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_caretOffset )(
+ IAccessibleText2 * This,
+ /* [retval][out] */ long *offset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_characterExtents )(
+ IAccessibleText2 * This,
+ /* [in] */ long offset,
+ /* [in] */ enum IA2CoordinateType coordType,
+ /* [out] */ long *x,
+ /* [out] */ long *y,
+ /* [out] */ long *width,
+ /* [retval][out] */ long *height);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelections )(
+ IAccessibleText2 * This,
+ /* [retval][out] */ long *nSelections);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_offsetAtPoint )(
+ IAccessibleText2 * This,
+ /* [in] */ long x,
+ /* [in] */ long y,
+ /* [in] */ enum IA2CoordinateType coordType,
+ /* [retval][out] */ long *offset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selection )(
+ IAccessibleText2 * This,
+ /* [in] */ long selectionIndex,
+ /* [out] */ long *startOffset,
+ /* [retval][out] */ long *endOffset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_text )(
+ IAccessibleText2 * This,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset,
+ /* [retval][out] */ BSTR *text);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textBeforeOffset )(
+ IAccessibleText2 * This,
+ /* [in] */ long offset,
+ /* [in] */ enum IA2TextBoundaryType boundaryType,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *text);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textAfterOffset )(
+ IAccessibleText2 * This,
+ /* [in] */ long offset,
+ /* [in] */ enum IA2TextBoundaryType boundaryType,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *text);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textAtOffset )(
+ IAccessibleText2 * This,
+ /* [in] */ long offset,
+ /* [in] */ enum IA2TextBoundaryType boundaryType,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *text);
+
+ HRESULT ( STDMETHODCALLTYPE *removeSelection )(
+ IAccessibleText2 * This,
+ /* [in] */ long selectionIndex);
+
+ HRESULT ( STDMETHODCALLTYPE *setCaretOffset )(
+ IAccessibleText2 * This,
+ /* [in] */ long offset);
+
+ HRESULT ( STDMETHODCALLTYPE *setSelection )(
+ IAccessibleText2 * This,
+ /* [in] */ long selectionIndex,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nCharacters )(
+ IAccessibleText2 * This,
+ /* [retval][out] */ long *nCharacters);
+
+ HRESULT ( STDMETHODCALLTYPE *scrollSubstringTo )(
+ IAccessibleText2 * This,
+ /* [in] */ long startIndex,
+ /* [in] */ long endIndex,
+ /* [in] */ enum IA2ScrollType scrollType);
+
+ HRESULT ( STDMETHODCALLTYPE *scrollSubstringToPoint )(
+ IAccessibleText2 * This,
+ /* [in] */ long startIndex,
+ /* [in] */ long endIndex,
+ /* [in] */ enum IA2CoordinateType coordinateType,
+ /* [in] */ long x,
+ /* [in] */ long y);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_newText )(
+ IAccessibleText2 * This,
+ /* [retval][out] */ IA2TextSegment *newText);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_oldText )(
+ IAccessibleText2 * This,
+ /* [retval][out] */ IA2TextSegment *oldText);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attributeRange )(
+ IAccessibleText2 * This,
+ /* [in] */ long offset,
+ /* [in] */ BSTR filter,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *attributeValues);
+
+ END_INTERFACE
+ } IAccessibleText2Vtbl;
+
+ interface IAccessibleText2
+ {
+ CONST_VTBL struct IAccessibleText2Vtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessibleText2_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessibleText2_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessibleText2_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessibleText2_addSelection(This,startOffset,endOffset) \
+ ( (This)->lpVtbl -> addSelection(This,startOffset,endOffset) )
+
+#define IAccessibleText2_get_attributes(This,offset,startOffset,endOffset,textAttributes) \
+ ( (This)->lpVtbl -> get_attributes(This,offset,startOffset,endOffset,textAttributes) )
+
+#define IAccessibleText2_get_caretOffset(This,offset) \
+ ( (This)->lpVtbl -> get_caretOffset(This,offset) )
+
+#define IAccessibleText2_get_characterExtents(This,offset,coordType,x,y,width,height) \
+ ( (This)->lpVtbl -> get_characterExtents(This,offset,coordType,x,y,width,height) )
+
+#define IAccessibleText2_get_nSelections(This,nSelections) \
+ ( (This)->lpVtbl -> get_nSelections(This,nSelections) )
+
+#define IAccessibleText2_get_offsetAtPoint(This,x,y,coordType,offset) \
+ ( (This)->lpVtbl -> get_offsetAtPoint(This,x,y,coordType,offset) )
+
+#define IAccessibleText2_get_selection(This,selectionIndex,startOffset,endOffset) \
+ ( (This)->lpVtbl -> get_selection(This,selectionIndex,startOffset,endOffset) )
+
+#define IAccessibleText2_get_text(This,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> get_text(This,startOffset,endOffset,text) )
+
+#define IAccessibleText2_get_textBeforeOffset(This,offset,boundaryType,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> get_textBeforeOffset(This,offset,boundaryType,startOffset,endOffset,text) )
+
+#define IAccessibleText2_get_textAfterOffset(This,offset,boundaryType,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> get_textAfterOffset(This,offset,boundaryType,startOffset,endOffset,text) )
+
+#define IAccessibleText2_get_textAtOffset(This,offset,boundaryType,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> get_textAtOffset(This,offset,boundaryType,startOffset,endOffset,text) )
+
+#define IAccessibleText2_removeSelection(This,selectionIndex) \
+ ( (This)->lpVtbl -> removeSelection(This,selectionIndex) )
+
+#define IAccessibleText2_setCaretOffset(This,offset) \
+ ( (This)->lpVtbl -> setCaretOffset(This,offset) )
+
+#define IAccessibleText2_setSelection(This,selectionIndex,startOffset,endOffset) \
+ ( (This)->lpVtbl -> setSelection(This,selectionIndex,startOffset,endOffset) )
+
+#define IAccessibleText2_get_nCharacters(This,nCharacters) \
+ ( (This)->lpVtbl -> get_nCharacters(This,nCharacters) )
+
+#define IAccessibleText2_scrollSubstringTo(This,startIndex,endIndex,scrollType) \
+ ( (This)->lpVtbl -> scrollSubstringTo(This,startIndex,endIndex,scrollType) )
+
+#define IAccessibleText2_scrollSubstringToPoint(This,startIndex,endIndex,coordinateType,x,y) \
+ ( (This)->lpVtbl -> scrollSubstringToPoint(This,startIndex,endIndex,coordinateType,x,y) )
+
+#define IAccessibleText2_get_newText(This,newText) \
+ ( (This)->lpVtbl -> get_newText(This,newText) )
+
+#define IAccessibleText2_get_oldText(This,oldText) \
+ ( (This)->lpVtbl -> get_oldText(This,oldText) )
+
+
+#define IAccessibleText2_get_attributeRange(This,offset,filter,startOffset,endOffset,attributeValues) \
+ ( (This)->lpVtbl -> get_attributeRange(This,offset,filter,startOffset,endOffset,attributeValues) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessibleText2_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAccessibleEditableText_INTERFACE_DEFINED__
+#define __IAccessibleEditableText_INTERFACE_DEFINED__
+
+/* interface IAccessibleEditableText */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessibleEditableText;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("A59AA09A-7011-4b65-939D-32B1FB5547E3")
+ IAccessibleEditableText : public IUnknown
+ {
+ public:
+ virtual HRESULT STDMETHODCALLTYPE copyText(
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE deleteText(
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE insertText(
+ /* [in] */ long offset,
+ /* [in] */ BSTR *text) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE cutText(
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE pasteText(
+ /* [in] */ long offset) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE replaceText(
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset,
+ /* [in] */ BSTR *text) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE setAttributes(
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset,
+ /* [in] */ BSTR *attributes) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessibleEditableTextVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessibleEditableText * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessibleEditableText * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessibleEditableText * This);
+
+ HRESULT ( STDMETHODCALLTYPE *copyText )(
+ IAccessibleEditableText * This,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset);
+
+ HRESULT ( STDMETHODCALLTYPE *deleteText )(
+ IAccessibleEditableText * This,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset);
+
+ HRESULT ( STDMETHODCALLTYPE *insertText )(
+ IAccessibleEditableText * This,
+ /* [in] */ long offset,
+ /* [in] */ BSTR *text);
+
+ HRESULT ( STDMETHODCALLTYPE *cutText )(
+ IAccessibleEditableText * This,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset);
+
+ HRESULT ( STDMETHODCALLTYPE *pasteText )(
+ IAccessibleEditableText * This,
+ /* [in] */ long offset);
+
+ HRESULT ( STDMETHODCALLTYPE *replaceText )(
+ IAccessibleEditableText * This,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset,
+ /* [in] */ BSTR *text);
+
+ HRESULT ( STDMETHODCALLTYPE *setAttributes )(
+ IAccessibleEditableText * This,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset,
+ /* [in] */ BSTR *attributes);
+
+ END_INTERFACE
+ } IAccessibleEditableTextVtbl;
+
+ interface IAccessibleEditableText
+ {
+ CONST_VTBL struct IAccessibleEditableTextVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessibleEditableText_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessibleEditableText_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessibleEditableText_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessibleEditableText_copyText(This,startOffset,endOffset) \
+ ( (This)->lpVtbl -> copyText(This,startOffset,endOffset) )
+
+#define IAccessibleEditableText_deleteText(This,startOffset,endOffset) \
+ ( (This)->lpVtbl -> deleteText(This,startOffset,endOffset) )
+
+#define IAccessibleEditableText_insertText(This,offset,text) \
+ ( (This)->lpVtbl -> insertText(This,offset,text) )
+
+#define IAccessibleEditableText_cutText(This,startOffset,endOffset) \
+ ( (This)->lpVtbl -> cutText(This,startOffset,endOffset) )
+
+#define IAccessibleEditableText_pasteText(This,offset) \
+ ( (This)->lpVtbl -> pasteText(This,offset) )
+
+#define IAccessibleEditableText_replaceText(This,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> replaceText(This,startOffset,endOffset,text) )
+
+#define IAccessibleEditableText_setAttributes(This,startOffset,endOffset,attributes) \
+ ( (This)->lpVtbl -> setAttributes(This,startOffset,endOffset,attributes) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessibleEditableText_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAccessibleHyperlink_INTERFACE_DEFINED__
+#define __IAccessibleHyperlink_INTERFACE_DEFINED__
+
+/* interface IAccessibleHyperlink */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessibleHyperlink;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("01C20F2B-3DD2-400f-949F-AD00BDAB1D41")
+ IAccessibleHyperlink : public IAccessibleAction
+ {
+ public:
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_anchor(
+ /* [in] */ long index,
+ /* [retval][out] */ VARIANT *anchor) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_anchorTarget(
+ /* [in] */ long index,
+ /* [retval][out] */ VARIANT *anchorTarget) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_startIndex(
+ /* [retval][out] */ long *index) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_endIndex(
+ /* [retval][out] */ long *index) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_valid(
+ /* [retval][out] */ boolean *valid) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessibleHyperlinkVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessibleHyperlink * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessibleHyperlink * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessibleHyperlink * This);
+
+ HRESULT ( STDMETHODCALLTYPE *nActions )(
+ IAccessibleHyperlink * This,
+ /* [retval][out] */ long *nActions);
+
+ HRESULT ( STDMETHODCALLTYPE *doAction )(
+ IAccessibleHyperlink * This,
+ /* [in] */ long actionIndex);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_description )(
+ IAccessibleHyperlink * This,
+ /* [in] */ long actionIndex,
+ /* [retval][out] */ BSTR *description);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_keyBinding )(
+ IAccessibleHyperlink * This,
+ /* [in] */ long actionIndex,
+ /* [in] */ long nMaxBindings,
+ /* [length_is][length_is][size_is][size_is][out] */ BSTR **keyBindings,
+ /* [retval][out] */ long *nBindings);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_name )(
+ IAccessibleHyperlink * This,
+ /* [in] */ long actionIndex,
+ /* [retval][out] */ BSTR *name);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_localizedName )(
+ IAccessibleHyperlink * This,
+ /* [in] */ long actionIndex,
+ /* [retval][out] */ BSTR *localizedName);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_anchor )(
+ IAccessibleHyperlink * This,
+ /* [in] */ long index,
+ /* [retval][out] */ VARIANT *anchor);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_anchorTarget )(
+ IAccessibleHyperlink * This,
+ /* [in] */ long index,
+ /* [retval][out] */ VARIANT *anchorTarget);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_startIndex )(
+ IAccessibleHyperlink * This,
+ /* [retval][out] */ long *index);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_endIndex )(
+ IAccessibleHyperlink * This,
+ /* [retval][out] */ long *index);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_valid )(
+ IAccessibleHyperlink * This,
+ /* [retval][out] */ boolean *valid);
+
+ END_INTERFACE
+ } IAccessibleHyperlinkVtbl;
+
+ interface IAccessibleHyperlink
+ {
+ CONST_VTBL struct IAccessibleHyperlinkVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessibleHyperlink_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessibleHyperlink_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessibleHyperlink_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessibleHyperlink_nActions(This,nActions) \
+ ( (This)->lpVtbl -> nActions(This,nActions) )
+
+#define IAccessibleHyperlink_doAction(This,actionIndex) \
+ ( (This)->lpVtbl -> doAction(This,actionIndex) )
+
+#define IAccessibleHyperlink_get_description(This,actionIndex,description) \
+ ( (This)->lpVtbl -> get_description(This,actionIndex,description) )
+
+#define IAccessibleHyperlink_get_keyBinding(This,actionIndex,nMaxBindings,keyBindings,nBindings) \
+ ( (This)->lpVtbl -> get_keyBinding(This,actionIndex,nMaxBindings,keyBindings,nBindings) )
+
+#define IAccessibleHyperlink_get_name(This,actionIndex,name) \
+ ( (This)->lpVtbl -> get_name(This,actionIndex,name) )
+
+#define IAccessibleHyperlink_get_localizedName(This,actionIndex,localizedName) \
+ ( (This)->lpVtbl -> get_localizedName(This,actionIndex,localizedName) )
+
+
+#define IAccessibleHyperlink_get_anchor(This,index,anchor) \
+ ( (This)->lpVtbl -> get_anchor(This,index,anchor) )
+
+#define IAccessibleHyperlink_get_anchorTarget(This,index,anchorTarget) \
+ ( (This)->lpVtbl -> get_anchorTarget(This,index,anchorTarget) )
+
+#define IAccessibleHyperlink_get_startIndex(This,index) \
+ ( (This)->lpVtbl -> get_startIndex(This,index) )
+
+#define IAccessibleHyperlink_get_endIndex(This,index) \
+ ( (This)->lpVtbl -> get_endIndex(This,index) )
+
+#define IAccessibleHyperlink_get_valid(This,valid) \
+ ( (This)->lpVtbl -> get_valid(This,valid) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessibleHyperlink_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAccessibleHypertext_INTERFACE_DEFINED__
+#define __IAccessibleHypertext_INTERFACE_DEFINED__
+
+/* interface IAccessibleHypertext */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessibleHypertext;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("6B4F8BBF-F1F2-418a-B35E-A195BC4103B9")
+ IAccessibleHypertext : public IAccessibleText
+ {
+ public:
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nHyperlinks(
+ /* [retval][out] */ long *hyperlinkCount) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_hyperlink(
+ /* [in] */ long index,
+ /* [retval][out] */ IAccessibleHyperlink **hyperlink) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_hyperlinkIndex(
+ /* [in] */ long charIndex,
+ /* [retval][out] */ long *hyperlinkIndex) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessibleHypertextVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessibleHypertext * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessibleHypertext * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessibleHypertext * This);
+
+ HRESULT ( STDMETHODCALLTYPE *addSelection )(
+ IAccessibleHypertext * This,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attributes )(
+ IAccessibleHypertext * This,
+ /* [in] */ long offset,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *textAttributes);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_caretOffset )(
+ IAccessibleHypertext * This,
+ /* [retval][out] */ long *offset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_characterExtents )(
+ IAccessibleHypertext * This,
+ /* [in] */ long offset,
+ /* [in] */ enum IA2CoordinateType coordType,
+ /* [out] */ long *x,
+ /* [out] */ long *y,
+ /* [out] */ long *width,
+ /* [retval][out] */ long *height);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelections )(
+ IAccessibleHypertext * This,
+ /* [retval][out] */ long *nSelections);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_offsetAtPoint )(
+ IAccessibleHypertext * This,
+ /* [in] */ long x,
+ /* [in] */ long y,
+ /* [in] */ enum IA2CoordinateType coordType,
+ /* [retval][out] */ long *offset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selection )(
+ IAccessibleHypertext * This,
+ /* [in] */ long selectionIndex,
+ /* [out] */ long *startOffset,
+ /* [retval][out] */ long *endOffset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_text )(
+ IAccessibleHypertext * This,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset,
+ /* [retval][out] */ BSTR *text);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textBeforeOffset )(
+ IAccessibleHypertext * This,
+ /* [in] */ long offset,
+ /* [in] */ enum IA2TextBoundaryType boundaryType,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *text);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textAfterOffset )(
+ IAccessibleHypertext * This,
+ /* [in] */ long offset,
+ /* [in] */ enum IA2TextBoundaryType boundaryType,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *text);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textAtOffset )(
+ IAccessibleHypertext * This,
+ /* [in] */ long offset,
+ /* [in] */ enum IA2TextBoundaryType boundaryType,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *text);
+
+ HRESULT ( STDMETHODCALLTYPE *removeSelection )(
+ IAccessibleHypertext * This,
+ /* [in] */ long selectionIndex);
+
+ HRESULT ( STDMETHODCALLTYPE *setCaretOffset )(
+ IAccessibleHypertext * This,
+ /* [in] */ long offset);
+
+ HRESULT ( STDMETHODCALLTYPE *setSelection )(
+ IAccessibleHypertext * This,
+ /* [in] */ long selectionIndex,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nCharacters )(
+ IAccessibleHypertext * This,
+ /* [retval][out] */ long *nCharacters);
+
+ HRESULT ( STDMETHODCALLTYPE *scrollSubstringTo )(
+ IAccessibleHypertext * This,
+ /* [in] */ long startIndex,
+ /* [in] */ long endIndex,
+ /* [in] */ enum IA2ScrollType scrollType);
+
+ HRESULT ( STDMETHODCALLTYPE *scrollSubstringToPoint )(
+ IAccessibleHypertext * This,
+ /* [in] */ long startIndex,
+ /* [in] */ long endIndex,
+ /* [in] */ enum IA2CoordinateType coordinateType,
+ /* [in] */ long x,
+ /* [in] */ long y);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_newText )(
+ IAccessibleHypertext * This,
+ /* [retval][out] */ IA2TextSegment *newText);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_oldText )(
+ IAccessibleHypertext * This,
+ /* [retval][out] */ IA2TextSegment *oldText);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nHyperlinks )(
+ IAccessibleHypertext * This,
+ /* [retval][out] */ long *hyperlinkCount);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_hyperlink )(
+ IAccessibleHypertext * This,
+ /* [in] */ long index,
+ /* [retval][out] */ IAccessibleHyperlink **hyperlink);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_hyperlinkIndex )(
+ IAccessibleHypertext * This,
+ /* [in] */ long charIndex,
+ /* [retval][out] */ long *hyperlinkIndex);
+
+ END_INTERFACE
+ } IAccessibleHypertextVtbl;
+
+ interface IAccessibleHypertext
+ {
+ CONST_VTBL struct IAccessibleHypertextVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessibleHypertext_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessibleHypertext_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessibleHypertext_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessibleHypertext_addSelection(This,startOffset,endOffset) \
+ ( (This)->lpVtbl -> addSelection(This,startOffset,endOffset) )
+
+#define IAccessibleHypertext_get_attributes(This,offset,startOffset,endOffset,textAttributes) \
+ ( (This)->lpVtbl -> get_attributes(This,offset,startOffset,endOffset,textAttributes) )
+
+#define IAccessibleHypertext_get_caretOffset(This,offset) \
+ ( (This)->lpVtbl -> get_caretOffset(This,offset) )
+
+#define IAccessibleHypertext_get_characterExtents(This,offset,coordType,x,y,width,height) \
+ ( (This)->lpVtbl -> get_characterExtents(This,offset,coordType,x,y,width,height) )
+
+#define IAccessibleHypertext_get_nSelections(This,nSelections) \
+ ( (This)->lpVtbl -> get_nSelections(This,nSelections) )
+
+#define IAccessibleHypertext_get_offsetAtPoint(This,x,y,coordType,offset) \
+ ( (This)->lpVtbl -> get_offsetAtPoint(This,x,y,coordType,offset) )
+
+#define IAccessibleHypertext_get_selection(This,selectionIndex,startOffset,endOffset) \
+ ( (This)->lpVtbl -> get_selection(This,selectionIndex,startOffset,endOffset) )
+
+#define IAccessibleHypertext_get_text(This,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> get_text(This,startOffset,endOffset,text) )
+
+#define IAccessibleHypertext_get_textBeforeOffset(This,offset,boundaryType,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> get_textBeforeOffset(This,offset,boundaryType,startOffset,endOffset,text) )
+
+#define IAccessibleHypertext_get_textAfterOffset(This,offset,boundaryType,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> get_textAfterOffset(This,offset,boundaryType,startOffset,endOffset,text) )
+
+#define IAccessibleHypertext_get_textAtOffset(This,offset,boundaryType,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> get_textAtOffset(This,offset,boundaryType,startOffset,endOffset,text) )
+
+#define IAccessibleHypertext_removeSelection(This,selectionIndex) \
+ ( (This)->lpVtbl -> removeSelection(This,selectionIndex) )
+
+#define IAccessibleHypertext_setCaretOffset(This,offset) \
+ ( (This)->lpVtbl -> setCaretOffset(This,offset) )
+
+#define IAccessibleHypertext_setSelection(This,selectionIndex,startOffset,endOffset) \
+ ( (This)->lpVtbl -> setSelection(This,selectionIndex,startOffset,endOffset) )
+
+#define IAccessibleHypertext_get_nCharacters(This,nCharacters) \
+ ( (This)->lpVtbl -> get_nCharacters(This,nCharacters) )
+
+#define IAccessibleHypertext_scrollSubstringTo(This,startIndex,endIndex,scrollType) \
+ ( (This)->lpVtbl -> scrollSubstringTo(This,startIndex,endIndex,scrollType) )
+
+#define IAccessibleHypertext_scrollSubstringToPoint(This,startIndex,endIndex,coordinateType,x,y) \
+ ( (This)->lpVtbl -> scrollSubstringToPoint(This,startIndex,endIndex,coordinateType,x,y) )
+
+#define IAccessibleHypertext_get_newText(This,newText) \
+ ( (This)->lpVtbl -> get_newText(This,newText) )
+
+#define IAccessibleHypertext_get_oldText(This,oldText) \
+ ( (This)->lpVtbl -> get_oldText(This,oldText) )
+
+
+#define IAccessibleHypertext_get_nHyperlinks(This,hyperlinkCount) \
+ ( (This)->lpVtbl -> get_nHyperlinks(This,hyperlinkCount) )
+
+#define IAccessibleHypertext_get_hyperlink(This,index,hyperlink) \
+ ( (This)->lpVtbl -> get_hyperlink(This,index,hyperlink) )
+
+#define IAccessibleHypertext_get_hyperlinkIndex(This,charIndex,hyperlinkIndex) \
+ ( (This)->lpVtbl -> get_hyperlinkIndex(This,charIndex,hyperlinkIndex) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessibleHypertext_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAccessibleHypertext2_INTERFACE_DEFINED__
+#define __IAccessibleHypertext2_INTERFACE_DEFINED__
+
+/* interface IAccessibleHypertext2 */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessibleHypertext2;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("CF64D89F-8287-4B44-8501-A827453A6077")
+ IAccessibleHypertext2 : public IAccessibleHypertext
+ {
+ public:
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_hyperlinks(
+ /* [size_is][size_is][out] */ IAccessibleHyperlink ***hyperlinks,
+ /* [retval][out] */ long *nHyperlinks) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessibleHypertext2Vtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessibleHypertext2 * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessibleHypertext2 * This);
+
+ HRESULT ( STDMETHODCALLTYPE *addSelection )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_attributes )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ long offset,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *textAttributes);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_caretOffset )(
+ IAccessibleHypertext2 * This,
+ /* [retval][out] */ long *offset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_characterExtents )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ long offset,
+ /* [in] */ enum IA2CoordinateType coordType,
+ /* [out] */ long *x,
+ /* [out] */ long *y,
+ /* [out] */ long *width,
+ /* [retval][out] */ long *height);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelections )(
+ IAccessibleHypertext2 * This,
+ /* [retval][out] */ long *nSelections);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_offsetAtPoint )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ long x,
+ /* [in] */ long y,
+ /* [in] */ enum IA2CoordinateType coordType,
+ /* [retval][out] */ long *offset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selection )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ long selectionIndex,
+ /* [out] */ long *startOffset,
+ /* [retval][out] */ long *endOffset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_text )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset,
+ /* [retval][out] */ BSTR *text);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textBeforeOffset )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ long offset,
+ /* [in] */ enum IA2TextBoundaryType boundaryType,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *text);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textAfterOffset )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ long offset,
+ /* [in] */ enum IA2TextBoundaryType boundaryType,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *text);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_textAtOffset )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ long offset,
+ /* [in] */ enum IA2TextBoundaryType boundaryType,
+ /* [out] */ long *startOffset,
+ /* [out] */ long *endOffset,
+ /* [retval][out] */ BSTR *text);
+
+ HRESULT ( STDMETHODCALLTYPE *removeSelection )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ long selectionIndex);
+
+ HRESULT ( STDMETHODCALLTYPE *setCaretOffset )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ long offset);
+
+ HRESULT ( STDMETHODCALLTYPE *setSelection )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ long selectionIndex,
+ /* [in] */ long startOffset,
+ /* [in] */ long endOffset);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nCharacters )(
+ IAccessibleHypertext2 * This,
+ /* [retval][out] */ long *nCharacters);
+
+ HRESULT ( STDMETHODCALLTYPE *scrollSubstringTo )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ long startIndex,
+ /* [in] */ long endIndex,
+ /* [in] */ enum IA2ScrollType scrollType);
+
+ HRESULT ( STDMETHODCALLTYPE *scrollSubstringToPoint )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ long startIndex,
+ /* [in] */ long endIndex,
+ /* [in] */ enum IA2CoordinateType coordinateType,
+ /* [in] */ long x,
+ /* [in] */ long y);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_newText )(
+ IAccessibleHypertext2 * This,
+ /* [retval][out] */ IA2TextSegment *newText);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_oldText )(
+ IAccessibleHypertext2 * This,
+ /* [retval][out] */ IA2TextSegment *oldText);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nHyperlinks )(
+ IAccessibleHypertext2 * This,
+ /* [retval][out] */ long *hyperlinkCount);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_hyperlink )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ long index,
+ /* [retval][out] */ IAccessibleHyperlink **hyperlink);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_hyperlinkIndex )(
+ IAccessibleHypertext2 * This,
+ /* [in] */ long charIndex,
+ /* [retval][out] */ long *hyperlinkIndex);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_hyperlinks )(
+ IAccessibleHypertext2 * This,
+ /* [size_is][size_is][out] */ IAccessibleHyperlink ***hyperlinks,
+ /* [retval][out] */ long *nHyperlinks);
+
+ END_INTERFACE
+ } IAccessibleHypertext2Vtbl;
+
+ interface IAccessibleHypertext2
+ {
+ CONST_VTBL struct IAccessibleHypertext2Vtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessibleHypertext2_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessibleHypertext2_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessibleHypertext2_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessibleHypertext2_addSelection(This,startOffset,endOffset) \
+ ( (This)->lpVtbl -> addSelection(This,startOffset,endOffset) )
+
+#define IAccessibleHypertext2_get_attributes(This,offset,startOffset,endOffset,textAttributes) \
+ ( (This)->lpVtbl -> get_attributes(This,offset,startOffset,endOffset,textAttributes) )
+
+#define IAccessibleHypertext2_get_caretOffset(This,offset) \
+ ( (This)->lpVtbl -> get_caretOffset(This,offset) )
+
+#define IAccessibleHypertext2_get_characterExtents(This,offset,coordType,x,y,width,height) \
+ ( (This)->lpVtbl -> get_characterExtents(This,offset,coordType,x,y,width,height) )
+
+#define IAccessibleHypertext2_get_nSelections(This,nSelections) \
+ ( (This)->lpVtbl -> get_nSelections(This,nSelections) )
+
+#define IAccessibleHypertext2_get_offsetAtPoint(This,x,y,coordType,offset) \
+ ( (This)->lpVtbl -> get_offsetAtPoint(This,x,y,coordType,offset) )
+
+#define IAccessibleHypertext2_get_selection(This,selectionIndex,startOffset,endOffset) \
+ ( (This)->lpVtbl -> get_selection(This,selectionIndex,startOffset,endOffset) )
+
+#define IAccessibleHypertext2_get_text(This,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> get_text(This,startOffset,endOffset,text) )
+
+#define IAccessibleHypertext2_get_textBeforeOffset(This,offset,boundaryType,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> get_textBeforeOffset(This,offset,boundaryType,startOffset,endOffset,text) )
+
+#define IAccessibleHypertext2_get_textAfterOffset(This,offset,boundaryType,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> get_textAfterOffset(This,offset,boundaryType,startOffset,endOffset,text) )
+
+#define IAccessibleHypertext2_get_textAtOffset(This,offset,boundaryType,startOffset,endOffset,text) \
+ ( (This)->lpVtbl -> get_textAtOffset(This,offset,boundaryType,startOffset,endOffset,text) )
+
+#define IAccessibleHypertext2_removeSelection(This,selectionIndex) \
+ ( (This)->lpVtbl -> removeSelection(This,selectionIndex) )
+
+#define IAccessibleHypertext2_setCaretOffset(This,offset) \
+ ( (This)->lpVtbl -> setCaretOffset(This,offset) )
+
+#define IAccessibleHypertext2_setSelection(This,selectionIndex,startOffset,endOffset) \
+ ( (This)->lpVtbl -> setSelection(This,selectionIndex,startOffset,endOffset) )
+
+#define IAccessibleHypertext2_get_nCharacters(This,nCharacters) \
+ ( (This)->lpVtbl -> get_nCharacters(This,nCharacters) )
+
+#define IAccessibleHypertext2_scrollSubstringTo(This,startIndex,endIndex,scrollType) \
+ ( (This)->lpVtbl -> scrollSubstringTo(This,startIndex,endIndex,scrollType) )
+
+#define IAccessibleHypertext2_scrollSubstringToPoint(This,startIndex,endIndex,coordinateType,x,y) \
+ ( (This)->lpVtbl -> scrollSubstringToPoint(This,startIndex,endIndex,coordinateType,x,y) )
+
+#define IAccessibleHypertext2_get_newText(This,newText) \
+ ( (This)->lpVtbl -> get_newText(This,newText) )
+
+#define IAccessibleHypertext2_get_oldText(This,oldText) \
+ ( (This)->lpVtbl -> get_oldText(This,oldText) )
+
+
+#define IAccessibleHypertext2_get_nHyperlinks(This,hyperlinkCount) \
+ ( (This)->lpVtbl -> get_nHyperlinks(This,hyperlinkCount) )
+
+#define IAccessibleHypertext2_get_hyperlink(This,index,hyperlink) \
+ ( (This)->lpVtbl -> get_hyperlink(This,index,hyperlink) )
+
+#define IAccessibleHypertext2_get_hyperlinkIndex(This,charIndex,hyperlinkIndex) \
+ ( (This)->lpVtbl -> get_hyperlinkIndex(This,charIndex,hyperlinkIndex) )
+
+
+#define IAccessibleHypertext2_get_hyperlinks(This,hyperlinks,nHyperlinks) \
+ ( (This)->lpVtbl -> get_hyperlinks(This,hyperlinks,nHyperlinks) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessibleHypertext2_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAccessibleTable_INTERFACE_DEFINED__
+#define __IAccessibleTable_INTERFACE_DEFINED__
+
+/* interface IAccessibleTable */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessibleTable;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("35AD8070-C20C-4fb4-B094-F4F7275DD469")
+ IAccessibleTable : public IUnknown
+ {
+ public:
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_accessibleAt(
+ /* [in] */ long row,
+ /* [in] */ long column,
+ /* [retval][out] */ IUnknown **accessible) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_caption(
+ /* [retval][out] */ IUnknown **accessible) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_childIndex(
+ /* [in] */ long rowIndex,
+ /* [in] */ long columnIndex,
+ /* [retval][out] */ long *cellIndex) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnDescription(
+ /* [in] */ long column,
+ /* [retval][out] */ BSTR *description) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnExtentAt(
+ /* [in] */ long row,
+ /* [in] */ long column,
+ /* [retval][out] */ long *nColumnsSpanned) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnHeader(
+ /* [out] */ IAccessibleTable **accessibleTable,
+ /* [retval][out] */ long *startingRowIndex) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnIndex(
+ /* [in] */ long cellIndex,
+ /* [retval][out] */ long *columnIndex) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nColumns(
+ /* [retval][out] */ long *columnCount) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nRows(
+ /* [retval][out] */ long *rowCount) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelectedChildren(
+ /* [retval][out] */ long *cellCount) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelectedColumns(
+ /* [retval][out] */ long *columnCount) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelectedRows(
+ /* [retval][out] */ long *rowCount) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowDescription(
+ /* [in] */ long row,
+ /* [retval][out] */ BSTR *description) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowExtentAt(
+ /* [in] */ long row,
+ /* [in] */ long column,
+ /* [retval][out] */ long *nRowsSpanned) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowHeader(
+ /* [out] */ IAccessibleTable **accessibleTable,
+ /* [retval][out] */ long *startingColumnIndex) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowIndex(
+ /* [in] */ long cellIndex,
+ /* [retval][out] */ long *rowIndex) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selectedChildren(
+ /* [in] */ long maxChildren,
+ /* [length_is][length_is][size_is][size_is][out] */ long **children,
+ /* [retval][out] */ long *nChildren) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selectedColumns(
+ /* [in] */ long maxColumns,
+ /* [length_is][length_is][size_is][size_is][out] */ long **columns,
+ /* [retval][out] */ long *nColumns) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selectedRows(
+ /* [in] */ long maxRows,
+ /* [length_is][length_is][size_is][size_is][out] */ long **rows,
+ /* [retval][out] */ long *nRows) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_summary(
+ /* [retval][out] */ IUnknown **accessible) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isColumnSelected(
+ /* [in] */ long column,
+ /* [retval][out] */ boolean *isSelected) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isRowSelected(
+ /* [in] */ long row,
+ /* [retval][out] */ boolean *isSelected) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isSelected(
+ /* [in] */ long row,
+ /* [in] */ long column,
+ /* [retval][out] */ boolean *isSelected) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE selectRow(
+ /* [in] */ long row) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE selectColumn(
+ /* [in] */ long column) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE unselectRow(
+ /* [in] */ long row) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE unselectColumn(
+ /* [in] */ long column) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowColumnExtentsAtIndex(
+ /* [in] */ long index,
+ /* [out] */ long *row,
+ /* [out] */ long *column,
+ /* [out] */ long *rowExtents,
+ /* [out] */ long *columnExtents,
+ /* [retval][out] */ boolean *isSelected) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_modelChange(
+ /* [retval][out] */ IA2TableModelChange *modelChange) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessibleTableVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessibleTable * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessibleTable * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessibleTable * This);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_accessibleAt )(
+ IAccessibleTable * This,
+ /* [in] */ long row,
+ /* [in] */ long column,
+ /* [retval][out] */ IUnknown **accessible);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_caption )(
+ IAccessibleTable * This,
+ /* [retval][out] */ IUnknown **accessible);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_childIndex )(
+ IAccessibleTable * This,
+ /* [in] */ long rowIndex,
+ /* [in] */ long columnIndex,
+ /* [retval][out] */ long *cellIndex);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnDescription )(
+ IAccessibleTable * This,
+ /* [in] */ long column,
+ /* [retval][out] */ BSTR *description);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnExtentAt )(
+ IAccessibleTable * This,
+ /* [in] */ long row,
+ /* [in] */ long column,
+ /* [retval][out] */ long *nColumnsSpanned);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnHeader )(
+ IAccessibleTable * This,
+ /* [out] */ IAccessibleTable **accessibleTable,
+ /* [retval][out] */ long *startingRowIndex);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnIndex )(
+ IAccessibleTable * This,
+ /* [in] */ long cellIndex,
+ /* [retval][out] */ long *columnIndex);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nColumns )(
+ IAccessibleTable * This,
+ /* [retval][out] */ long *columnCount);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nRows )(
+ IAccessibleTable * This,
+ /* [retval][out] */ long *rowCount);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelectedChildren )(
+ IAccessibleTable * This,
+ /* [retval][out] */ long *cellCount);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelectedColumns )(
+ IAccessibleTable * This,
+ /* [retval][out] */ long *columnCount);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelectedRows )(
+ IAccessibleTable * This,
+ /* [retval][out] */ long *rowCount);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowDescription )(
+ IAccessibleTable * This,
+ /* [in] */ long row,
+ /* [retval][out] */ BSTR *description);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowExtentAt )(
+ IAccessibleTable * This,
+ /* [in] */ long row,
+ /* [in] */ long column,
+ /* [retval][out] */ long *nRowsSpanned);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowHeader )(
+ IAccessibleTable * This,
+ /* [out] */ IAccessibleTable **accessibleTable,
+ /* [retval][out] */ long *startingColumnIndex);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowIndex )(
+ IAccessibleTable * This,
+ /* [in] */ long cellIndex,
+ /* [retval][out] */ long *rowIndex);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectedChildren )(
+ IAccessibleTable * This,
+ /* [in] */ long maxChildren,
+ /* [length_is][length_is][size_is][size_is][out] */ long **children,
+ /* [retval][out] */ long *nChildren);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectedColumns )(
+ IAccessibleTable * This,
+ /* [in] */ long maxColumns,
+ /* [length_is][length_is][size_is][size_is][out] */ long **columns,
+ /* [retval][out] */ long *nColumns);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectedRows )(
+ IAccessibleTable * This,
+ /* [in] */ long maxRows,
+ /* [length_is][length_is][size_is][size_is][out] */ long **rows,
+ /* [retval][out] */ long *nRows);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_summary )(
+ IAccessibleTable * This,
+ /* [retval][out] */ IUnknown **accessible);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isColumnSelected )(
+ IAccessibleTable * This,
+ /* [in] */ long column,
+ /* [retval][out] */ boolean *isSelected);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isRowSelected )(
+ IAccessibleTable * This,
+ /* [in] */ long row,
+ /* [retval][out] */ boolean *isSelected);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isSelected )(
+ IAccessibleTable * This,
+ /* [in] */ long row,
+ /* [in] */ long column,
+ /* [retval][out] */ boolean *isSelected);
+
+ HRESULT ( STDMETHODCALLTYPE *selectRow )(
+ IAccessibleTable * This,
+ /* [in] */ long row);
+
+ HRESULT ( STDMETHODCALLTYPE *selectColumn )(
+ IAccessibleTable * This,
+ /* [in] */ long column);
+
+ HRESULT ( STDMETHODCALLTYPE *unselectRow )(
+ IAccessibleTable * This,
+ /* [in] */ long row);
+
+ HRESULT ( STDMETHODCALLTYPE *unselectColumn )(
+ IAccessibleTable * This,
+ /* [in] */ long column);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowColumnExtentsAtIndex )(
+ IAccessibleTable * This,
+ /* [in] */ long index,
+ /* [out] */ long *row,
+ /* [out] */ long *column,
+ /* [out] */ long *rowExtents,
+ /* [out] */ long *columnExtents,
+ /* [retval][out] */ boolean *isSelected);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_modelChange )(
+ IAccessibleTable * This,
+ /* [retval][out] */ IA2TableModelChange *modelChange);
+
+ END_INTERFACE
+ } IAccessibleTableVtbl;
+
+ interface IAccessibleTable
+ {
+ CONST_VTBL struct IAccessibleTableVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessibleTable_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessibleTable_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessibleTable_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessibleTable_get_accessibleAt(This,row,column,accessible) \
+ ( (This)->lpVtbl -> get_accessibleAt(This,row,column,accessible) )
+
+#define IAccessibleTable_get_caption(This,accessible) \
+ ( (This)->lpVtbl -> get_caption(This,accessible) )
+
+#define IAccessibleTable_get_childIndex(This,rowIndex,columnIndex,cellIndex) \
+ ( (This)->lpVtbl -> get_childIndex(This,rowIndex,columnIndex,cellIndex) )
+
+#define IAccessibleTable_get_columnDescription(This,column,description) \
+ ( (This)->lpVtbl -> get_columnDescription(This,column,description) )
+
+#define IAccessibleTable_get_columnExtentAt(This,row,column,nColumnsSpanned) \
+ ( (This)->lpVtbl -> get_columnExtentAt(This,row,column,nColumnsSpanned) )
+
+#define IAccessibleTable_get_columnHeader(This,accessibleTable,startingRowIndex) \
+ ( (This)->lpVtbl -> get_columnHeader(This,accessibleTable,startingRowIndex) )
+
+#define IAccessibleTable_get_columnIndex(This,cellIndex,columnIndex) \
+ ( (This)->lpVtbl -> get_columnIndex(This,cellIndex,columnIndex) )
+
+#define IAccessibleTable_get_nColumns(This,columnCount) \
+ ( (This)->lpVtbl -> get_nColumns(This,columnCount) )
+
+#define IAccessibleTable_get_nRows(This,rowCount) \
+ ( (This)->lpVtbl -> get_nRows(This,rowCount) )
+
+#define IAccessibleTable_get_nSelectedChildren(This,cellCount) \
+ ( (This)->lpVtbl -> get_nSelectedChildren(This,cellCount) )
+
+#define IAccessibleTable_get_nSelectedColumns(This,columnCount) \
+ ( (This)->lpVtbl -> get_nSelectedColumns(This,columnCount) )
+
+#define IAccessibleTable_get_nSelectedRows(This,rowCount) \
+ ( (This)->lpVtbl -> get_nSelectedRows(This,rowCount) )
+
+#define IAccessibleTable_get_rowDescription(This,row,description) \
+ ( (This)->lpVtbl -> get_rowDescription(This,row,description) )
+
+#define IAccessibleTable_get_rowExtentAt(This,row,column,nRowsSpanned) \
+ ( (This)->lpVtbl -> get_rowExtentAt(This,row,column,nRowsSpanned) )
+
+#define IAccessibleTable_get_rowHeader(This,accessibleTable,startingColumnIndex) \
+ ( (This)->lpVtbl -> get_rowHeader(This,accessibleTable,startingColumnIndex) )
+
+#define IAccessibleTable_get_rowIndex(This,cellIndex,rowIndex) \
+ ( (This)->lpVtbl -> get_rowIndex(This,cellIndex,rowIndex) )
+
+#define IAccessibleTable_get_selectedChildren(This,maxChildren,children,nChildren) \
+ ( (This)->lpVtbl -> get_selectedChildren(This,maxChildren,children,nChildren) )
+
+#define IAccessibleTable_get_selectedColumns(This,maxColumns,columns,nColumns) \
+ ( (This)->lpVtbl -> get_selectedColumns(This,maxColumns,columns,nColumns) )
+
+#define IAccessibleTable_get_selectedRows(This,maxRows,rows,nRows) \
+ ( (This)->lpVtbl -> get_selectedRows(This,maxRows,rows,nRows) )
+
+#define IAccessibleTable_get_summary(This,accessible) \
+ ( (This)->lpVtbl -> get_summary(This,accessible) )
+
+#define IAccessibleTable_get_isColumnSelected(This,column,isSelected) \
+ ( (This)->lpVtbl -> get_isColumnSelected(This,column,isSelected) )
+
+#define IAccessibleTable_get_isRowSelected(This,row,isSelected) \
+ ( (This)->lpVtbl -> get_isRowSelected(This,row,isSelected) )
+
+#define IAccessibleTable_get_isSelected(This,row,column,isSelected) \
+ ( (This)->lpVtbl -> get_isSelected(This,row,column,isSelected) )
+
+#define IAccessibleTable_selectRow(This,row) \
+ ( (This)->lpVtbl -> selectRow(This,row) )
+
+#define IAccessibleTable_selectColumn(This,column) \
+ ( (This)->lpVtbl -> selectColumn(This,column) )
+
+#define IAccessibleTable_unselectRow(This,row) \
+ ( (This)->lpVtbl -> unselectRow(This,row) )
+
+#define IAccessibleTable_unselectColumn(This,column) \
+ ( (This)->lpVtbl -> unselectColumn(This,column) )
+
+#define IAccessibleTable_get_rowColumnExtentsAtIndex(This,index,row,column,rowExtents,columnExtents,isSelected) \
+ ( (This)->lpVtbl -> get_rowColumnExtentsAtIndex(This,index,row,column,rowExtents,columnExtents,isSelected) )
+
+#define IAccessibleTable_get_modelChange(This,modelChange) \
+ ( (This)->lpVtbl -> get_modelChange(This,modelChange) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessibleTable_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAccessibleTable2_INTERFACE_DEFINED__
+#define __IAccessibleTable2_INTERFACE_DEFINED__
+
+/* interface IAccessibleTable2 */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessibleTable2;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("6167f295-06f0-4cdd-a1fa-02e25153d869")
+ IAccessibleTable2 : public IUnknown
+ {
+ public:
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_cellAt(
+ /* [in] */ long row,
+ /* [in] */ long column,
+ /* [retval][out] */ IUnknown **cell) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_caption(
+ /* [retval][out] */ IUnknown **accessible) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnDescription(
+ /* [in] */ long column,
+ /* [retval][out] */ BSTR *description) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nColumns(
+ /* [retval][out] */ long *columnCount) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nRows(
+ /* [retval][out] */ long *rowCount) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelectedCells(
+ /* [retval][out] */ long *cellCount) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelectedColumns(
+ /* [retval][out] */ long *columnCount) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_nSelectedRows(
+ /* [retval][out] */ long *rowCount) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowDescription(
+ /* [in] */ long row,
+ /* [retval][out] */ BSTR *description) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selectedCells(
+ /* [size_is][size_is][out] */ IUnknown ***cells,
+ /* [retval][out] */ long *nSelectedCells) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selectedColumns(
+ /* [size_is][size_is][out] */ long **selectedColumns,
+ /* [retval][out] */ long *nColumns) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_selectedRows(
+ /* [size_is][size_is][out] */ long **selectedRows,
+ /* [retval][out] */ long *nRows) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_summary(
+ /* [retval][out] */ IUnknown **accessible) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isColumnSelected(
+ /* [in] */ long column,
+ /* [retval][out] */ boolean *isSelected) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isRowSelected(
+ /* [in] */ long row,
+ /* [retval][out] */ boolean *isSelected) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE selectRow(
+ /* [in] */ long row) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE selectColumn(
+ /* [in] */ long column) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE unselectRow(
+ /* [in] */ long row) = 0;
+
+ virtual HRESULT STDMETHODCALLTYPE unselectColumn(
+ /* [in] */ long column) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_modelChange(
+ /* [retval][out] */ IA2TableModelChange *modelChange) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessibleTable2Vtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessibleTable2 * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessibleTable2 * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessibleTable2 * This);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_cellAt )(
+ IAccessibleTable2 * This,
+ /* [in] */ long row,
+ /* [in] */ long column,
+ /* [retval][out] */ IUnknown **cell);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_caption )(
+ IAccessibleTable2 * This,
+ /* [retval][out] */ IUnknown **accessible);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnDescription )(
+ IAccessibleTable2 * This,
+ /* [in] */ long column,
+ /* [retval][out] */ BSTR *description);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nColumns )(
+ IAccessibleTable2 * This,
+ /* [retval][out] */ long *columnCount);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nRows )(
+ IAccessibleTable2 * This,
+ /* [retval][out] */ long *rowCount);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelectedCells )(
+ IAccessibleTable2 * This,
+ /* [retval][out] */ long *cellCount);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelectedColumns )(
+ IAccessibleTable2 * This,
+ /* [retval][out] */ long *columnCount);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_nSelectedRows )(
+ IAccessibleTable2 * This,
+ /* [retval][out] */ long *rowCount);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowDescription )(
+ IAccessibleTable2 * This,
+ /* [in] */ long row,
+ /* [retval][out] */ BSTR *description);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectedCells )(
+ IAccessibleTable2 * This,
+ /* [size_is][size_is][out] */ IUnknown ***cells,
+ /* [retval][out] */ long *nSelectedCells);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectedColumns )(
+ IAccessibleTable2 * This,
+ /* [size_is][size_is][out] */ long **selectedColumns,
+ /* [retval][out] */ long *nColumns);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_selectedRows )(
+ IAccessibleTable2 * This,
+ /* [size_is][size_is][out] */ long **selectedRows,
+ /* [retval][out] */ long *nRows);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_summary )(
+ IAccessibleTable2 * This,
+ /* [retval][out] */ IUnknown **accessible);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isColumnSelected )(
+ IAccessibleTable2 * This,
+ /* [in] */ long column,
+ /* [retval][out] */ boolean *isSelected);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isRowSelected )(
+ IAccessibleTable2 * This,
+ /* [in] */ long row,
+ /* [retval][out] */ boolean *isSelected);
+
+ HRESULT ( STDMETHODCALLTYPE *selectRow )(
+ IAccessibleTable2 * This,
+ /* [in] */ long row);
+
+ HRESULT ( STDMETHODCALLTYPE *selectColumn )(
+ IAccessibleTable2 * This,
+ /* [in] */ long column);
+
+ HRESULT ( STDMETHODCALLTYPE *unselectRow )(
+ IAccessibleTable2 * This,
+ /* [in] */ long row);
+
+ HRESULT ( STDMETHODCALLTYPE *unselectColumn )(
+ IAccessibleTable2 * This,
+ /* [in] */ long column);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_modelChange )(
+ IAccessibleTable2 * This,
+ /* [retval][out] */ IA2TableModelChange *modelChange);
+
+ END_INTERFACE
+ } IAccessibleTable2Vtbl;
+
+ interface IAccessibleTable2
+ {
+ CONST_VTBL struct IAccessibleTable2Vtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessibleTable2_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessibleTable2_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessibleTable2_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessibleTable2_get_cellAt(This,row,column,cell) \
+ ( (This)->lpVtbl -> get_cellAt(This,row,column,cell) )
+
+#define IAccessibleTable2_get_caption(This,accessible) \
+ ( (This)->lpVtbl -> get_caption(This,accessible) )
+
+#define IAccessibleTable2_get_columnDescription(This,column,description) \
+ ( (This)->lpVtbl -> get_columnDescription(This,column,description) )
+
+#define IAccessibleTable2_get_nColumns(This,columnCount) \
+ ( (This)->lpVtbl -> get_nColumns(This,columnCount) )
+
+#define IAccessibleTable2_get_nRows(This,rowCount) \
+ ( (This)->lpVtbl -> get_nRows(This,rowCount) )
+
+#define IAccessibleTable2_get_nSelectedCells(This,cellCount) \
+ ( (This)->lpVtbl -> get_nSelectedCells(This,cellCount) )
+
+#define IAccessibleTable2_get_nSelectedColumns(This,columnCount) \
+ ( (This)->lpVtbl -> get_nSelectedColumns(This,columnCount) )
+
+#define IAccessibleTable2_get_nSelectedRows(This,rowCount) \
+ ( (This)->lpVtbl -> get_nSelectedRows(This,rowCount) )
+
+#define IAccessibleTable2_get_rowDescription(This,row,description) \
+ ( (This)->lpVtbl -> get_rowDescription(This,row,description) )
+
+#define IAccessibleTable2_get_selectedCells(This,cells,nSelectedCells) \
+ ( (This)->lpVtbl -> get_selectedCells(This,cells,nSelectedCells) )
+
+#define IAccessibleTable2_get_selectedColumns(This,selectedColumns,nColumns) \
+ ( (This)->lpVtbl -> get_selectedColumns(This,selectedColumns,nColumns) )
+
+#define IAccessibleTable2_get_selectedRows(This,selectedRows,nRows) \
+ ( (This)->lpVtbl -> get_selectedRows(This,selectedRows,nRows) )
+
+#define IAccessibleTable2_get_summary(This,accessible) \
+ ( (This)->lpVtbl -> get_summary(This,accessible) )
+
+#define IAccessibleTable2_get_isColumnSelected(This,column,isSelected) \
+ ( (This)->lpVtbl -> get_isColumnSelected(This,column,isSelected) )
+
+#define IAccessibleTable2_get_isRowSelected(This,row,isSelected) \
+ ( (This)->lpVtbl -> get_isRowSelected(This,row,isSelected) )
+
+#define IAccessibleTable2_selectRow(This,row) \
+ ( (This)->lpVtbl -> selectRow(This,row) )
+
+#define IAccessibleTable2_selectColumn(This,column) \
+ ( (This)->lpVtbl -> selectColumn(This,column) )
+
+#define IAccessibleTable2_unselectRow(This,row) \
+ ( (This)->lpVtbl -> unselectRow(This,row) )
+
+#define IAccessibleTable2_unselectColumn(This,column) \
+ ( (This)->lpVtbl -> unselectColumn(This,column) )
+
+#define IAccessibleTable2_get_modelChange(This,modelChange) \
+ ( (This)->lpVtbl -> get_modelChange(This,modelChange) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessibleTable2_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAccessibleTableCell_INTERFACE_DEFINED__
+#define __IAccessibleTableCell_INTERFACE_DEFINED__
+
+/* interface IAccessibleTableCell */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessibleTableCell;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("594116B1-C99F-4847-AD06-0A7A86ECE645")
+ IAccessibleTableCell : public IUnknown
+ {
+ public:
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnExtent(
+ /* [retval][out] */ long *nColumnsSpanned) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnHeaderCells(
+ /* [size_is][size_is][out] */ IUnknown ***cellAccessibles,
+ /* [retval][out] */ long *nColumnHeaderCells) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_columnIndex(
+ /* [retval][out] */ long *columnIndex) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowExtent(
+ /* [retval][out] */ long *nRowsSpanned) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowHeaderCells(
+ /* [size_is][size_is][out] */ IUnknown ***cellAccessibles,
+ /* [retval][out] */ long *nRowHeaderCells) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowIndex(
+ /* [retval][out] */ long *rowIndex) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_isSelected(
+ /* [retval][out] */ boolean *isSelected) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_rowColumnExtents(
+ /* [out] */ long *row,
+ /* [out] */ long *column,
+ /* [out] */ long *rowExtents,
+ /* [out] */ long *columnExtents,
+ /* [retval][out] */ boolean *isSelected) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_table(
+ /* [retval][out] */ IUnknown **table) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessibleTableCellVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessibleTableCell * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessibleTableCell * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessibleTableCell * This);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnExtent )(
+ IAccessibleTableCell * This,
+ /* [retval][out] */ long *nColumnsSpanned);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnHeaderCells )(
+ IAccessibleTableCell * This,
+ /* [size_is][size_is][out] */ IUnknown ***cellAccessibles,
+ /* [retval][out] */ long *nColumnHeaderCells);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_columnIndex )(
+ IAccessibleTableCell * This,
+ /* [retval][out] */ long *columnIndex);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowExtent )(
+ IAccessibleTableCell * This,
+ /* [retval][out] */ long *nRowsSpanned);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowHeaderCells )(
+ IAccessibleTableCell * This,
+ /* [size_is][size_is][out] */ IUnknown ***cellAccessibles,
+ /* [retval][out] */ long *nRowHeaderCells);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowIndex )(
+ IAccessibleTableCell * This,
+ /* [retval][out] */ long *rowIndex);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_isSelected )(
+ IAccessibleTableCell * This,
+ /* [retval][out] */ boolean *isSelected);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_rowColumnExtents )(
+ IAccessibleTableCell * This,
+ /* [out] */ long *row,
+ /* [out] */ long *column,
+ /* [out] */ long *rowExtents,
+ /* [out] */ long *columnExtents,
+ /* [retval][out] */ boolean *isSelected);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_table )(
+ IAccessibleTableCell * This,
+ /* [retval][out] */ IUnknown **table);
+
+ END_INTERFACE
+ } IAccessibleTableCellVtbl;
+
+ interface IAccessibleTableCell
+ {
+ CONST_VTBL struct IAccessibleTableCellVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessibleTableCell_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessibleTableCell_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessibleTableCell_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessibleTableCell_get_columnExtent(This,nColumnsSpanned) \
+ ( (This)->lpVtbl -> get_columnExtent(This,nColumnsSpanned) )
+
+#define IAccessibleTableCell_get_columnHeaderCells(This,cellAccessibles,nColumnHeaderCells) \
+ ( (This)->lpVtbl -> get_columnHeaderCells(This,cellAccessibles,nColumnHeaderCells) )
+
+#define IAccessibleTableCell_get_columnIndex(This,columnIndex) \
+ ( (This)->lpVtbl -> get_columnIndex(This,columnIndex) )
+
+#define IAccessibleTableCell_get_rowExtent(This,nRowsSpanned) \
+ ( (This)->lpVtbl -> get_rowExtent(This,nRowsSpanned) )
+
+#define IAccessibleTableCell_get_rowHeaderCells(This,cellAccessibles,nRowHeaderCells) \
+ ( (This)->lpVtbl -> get_rowHeaderCells(This,cellAccessibles,nRowHeaderCells) )
+
+#define IAccessibleTableCell_get_rowIndex(This,rowIndex) \
+ ( (This)->lpVtbl -> get_rowIndex(This,rowIndex) )
+
+#define IAccessibleTableCell_get_isSelected(This,isSelected) \
+ ( (This)->lpVtbl -> get_isSelected(This,isSelected) )
+
+#define IAccessibleTableCell_get_rowColumnExtents(This,row,column,rowExtents,columnExtents,isSelected) \
+ ( (This)->lpVtbl -> get_rowColumnExtents(This,row,column,rowExtents,columnExtents,isSelected) )
+
+#define IAccessibleTableCell_get_table(This,table) \
+ ( (This)->lpVtbl -> get_table(This,table) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessibleTableCell_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAccessibleImage_INTERFACE_DEFINED__
+#define __IAccessibleImage_INTERFACE_DEFINED__
+
+/* interface IAccessibleImage */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessibleImage;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("FE5ABB3D-615E-4f7b-909F-5F0EDA9E8DDE")
+ IAccessibleImage : public IUnknown
+ {
+ public:
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_description(
+ /* [retval][out] */ BSTR *description) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_imagePosition(
+ /* [in] */ enum IA2CoordinateType coordinateType,
+ /* [out] */ long *x,
+ /* [retval][out] */ long *y) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_imageSize(
+ /* [out] */ long *height,
+ /* [retval][out] */ long *width) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessibleImageVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessibleImage * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessibleImage * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessibleImage * This);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_description )(
+ IAccessibleImage * This,
+ /* [retval][out] */ BSTR *description);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_imagePosition )(
+ IAccessibleImage * This,
+ /* [in] */ enum IA2CoordinateType coordinateType,
+ /* [out] */ long *x,
+ /* [retval][out] */ long *y);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_imageSize )(
+ IAccessibleImage * This,
+ /* [out] */ long *height,
+ /* [retval][out] */ long *width);
+
+ END_INTERFACE
+ } IAccessibleImageVtbl;
+
+ interface IAccessibleImage
+ {
+ CONST_VTBL struct IAccessibleImageVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessibleImage_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessibleImage_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessibleImage_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessibleImage_get_description(This,description) \
+ ( (This)->lpVtbl -> get_description(This,description) )
+
+#define IAccessibleImage_get_imagePosition(This,coordinateType,x,y) \
+ ( (This)->lpVtbl -> get_imagePosition(This,coordinateType,x,y) )
+
+#define IAccessibleImage_get_imageSize(This,height,width) \
+ ( (This)->lpVtbl -> get_imageSize(This,height,width) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessibleImage_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_ia2_api_all_0000_0016 */
+/* [local] */
+
+
+enum IA2EventID
+ { IA2_EVENT_ACTION_CHANGED = 0x101,
+ IA2_EVENT_ACTIVE_DECENDENT_CHANGED = ( IA2_EVENT_ACTION_CHANGED + 1 ) ,
+ IA2_EVENT_ACTIVE_DESCENDANT_CHANGED = IA2_EVENT_ACTIVE_DECENDENT_CHANGED,
+ IA2_EVENT_DOCUMENT_ATTRIBUTE_CHANGED = ( IA2_EVENT_ACTIVE_DESCENDANT_CHANGED + 1 ) ,
+ IA2_EVENT_DOCUMENT_CONTENT_CHANGED = ( IA2_EVENT_DOCUMENT_ATTRIBUTE_CHANGED + 1 ) ,
+ IA2_EVENT_DOCUMENT_LOAD_COMPLETE = ( IA2_EVENT_DOCUMENT_CONTENT_CHANGED + 1 ) ,
+ IA2_EVENT_DOCUMENT_LOAD_STOPPED = ( IA2_EVENT_DOCUMENT_LOAD_COMPLETE + 1 ) ,
+ IA2_EVENT_DOCUMENT_RELOAD = ( IA2_EVENT_DOCUMENT_LOAD_STOPPED + 1 ) ,
+ IA2_EVENT_HYPERLINK_END_INDEX_CHANGED = ( IA2_EVENT_DOCUMENT_RELOAD + 1 ) ,
+ IA2_EVENT_HYPERLINK_NUMBER_OF_ANCHORS_CHANGED = ( IA2_EVENT_HYPERLINK_END_INDEX_CHANGED + 1 ) ,
+ IA2_EVENT_HYPERLINK_SELECTED_LINK_CHANGED = ( IA2_EVENT_HYPERLINK_NUMBER_OF_ANCHORS_CHANGED + 1 ) ,
+ IA2_EVENT_HYPERTEXT_LINK_ACTIVATED = ( IA2_EVENT_HYPERLINK_SELECTED_LINK_CHANGED + 1 ) ,
+ IA2_EVENT_HYPERTEXT_LINK_SELECTED = ( IA2_EVENT_HYPERTEXT_LINK_ACTIVATED + 1 ) ,
+ IA2_EVENT_HYPERLINK_START_INDEX_CHANGED = ( IA2_EVENT_HYPERTEXT_LINK_SELECTED + 1 ) ,
+ IA2_EVENT_HYPERTEXT_CHANGED = ( IA2_EVENT_HYPERLINK_START_INDEX_CHANGED + 1 ) ,
+ IA2_EVENT_HYPERTEXT_NLINKS_CHANGED = ( IA2_EVENT_HYPERTEXT_CHANGED + 1 ) ,
+ IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED = ( IA2_EVENT_HYPERTEXT_NLINKS_CHANGED + 1 ) ,
+ IA2_EVENT_PAGE_CHANGED = ( IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED + 1 ) ,
+ IA2_EVENT_SECTION_CHANGED = ( IA2_EVENT_PAGE_CHANGED + 1 ) ,
+ IA2_EVENT_TABLE_CAPTION_CHANGED = ( IA2_EVENT_SECTION_CHANGED + 1 ) ,
+ IA2_EVENT_TABLE_COLUMN_DESCRIPTION_CHANGED = ( IA2_EVENT_TABLE_CAPTION_CHANGED + 1 ) ,
+ IA2_EVENT_TABLE_COLUMN_HEADER_CHANGED = ( IA2_EVENT_TABLE_COLUMN_DESCRIPTION_CHANGED + 1 ) ,
+ IA2_EVENT_TABLE_MODEL_CHANGED = ( IA2_EVENT_TABLE_COLUMN_HEADER_CHANGED + 1 ) ,
+ IA2_EVENT_TABLE_ROW_DESCRIPTION_CHANGED = ( IA2_EVENT_TABLE_MODEL_CHANGED + 1 ) ,
+ IA2_EVENT_TABLE_ROW_HEADER_CHANGED = ( IA2_EVENT_TABLE_ROW_DESCRIPTION_CHANGED + 1 ) ,
+ IA2_EVENT_TABLE_SUMMARY_CHANGED = ( IA2_EVENT_TABLE_ROW_HEADER_CHANGED + 1 ) ,
+ IA2_EVENT_TEXT_ATTRIBUTE_CHANGED = ( IA2_EVENT_TABLE_SUMMARY_CHANGED + 1 ) ,
+ IA2_EVENT_TEXT_CARET_MOVED = ( IA2_EVENT_TEXT_ATTRIBUTE_CHANGED + 1 ) ,
+ IA2_EVENT_TEXT_CHANGED = ( IA2_EVENT_TEXT_CARET_MOVED + 1 ) ,
+ IA2_EVENT_TEXT_COLUMN_CHANGED = ( IA2_EVENT_TEXT_CHANGED + 1 ) ,
+ IA2_EVENT_TEXT_INSERTED = ( IA2_EVENT_TEXT_COLUMN_CHANGED + 1 ) ,
+ IA2_EVENT_TEXT_REMOVED = ( IA2_EVENT_TEXT_INSERTED + 1 ) ,
+ IA2_EVENT_TEXT_UPDATED = ( IA2_EVENT_TEXT_REMOVED + 1 ) ,
+ IA2_EVENT_TEXT_SELECTION_CHANGED = ( IA2_EVENT_TEXT_UPDATED + 1 ) ,
+ IA2_EVENT_VISIBLE_DATA_CHANGED = ( IA2_EVENT_TEXT_SELECTION_CHANGED + 1 )
+ } ;
+
+
+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0016_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0016_v0_0_s_ifspec;
+
+#ifndef __IAccessibleApplication_INTERFACE_DEFINED__
+#define __IAccessibleApplication_INTERFACE_DEFINED__
+
+/* interface IAccessibleApplication */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessibleApplication;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("D49DED83-5B25-43F4-9B95-93B44595979E")
+ IAccessibleApplication : public IUnknown
+ {
+ public:
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_appName(
+ /* [retval][out] */ BSTR *name) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_appVersion(
+ /* [retval][out] */ BSTR *version) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_toolkitName(
+ /* [retval][out] */ BSTR *name) = 0;
+
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_toolkitVersion(
+ /* [retval][out] */ BSTR *version) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessibleApplicationVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessibleApplication * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessibleApplication * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessibleApplication * This);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_appName )(
+ IAccessibleApplication * This,
+ /* [retval][out] */ BSTR *name);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_appVersion )(
+ IAccessibleApplication * This,
+ /* [retval][out] */ BSTR *version);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_toolkitName )(
+ IAccessibleApplication * This,
+ /* [retval][out] */ BSTR *name);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_toolkitVersion )(
+ IAccessibleApplication * This,
+ /* [retval][out] */ BSTR *version);
+
+ END_INTERFACE
+ } IAccessibleApplicationVtbl;
+
+ interface IAccessibleApplication
+ {
+ CONST_VTBL struct IAccessibleApplicationVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessibleApplication_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessibleApplication_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessibleApplication_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessibleApplication_get_appName(This,name) \
+ ( (This)->lpVtbl -> get_appName(This,name) )
+
+#define IAccessibleApplication_get_appVersion(This,version) \
+ ( (This)->lpVtbl -> get_appVersion(This,version) )
+
+#define IAccessibleApplication_get_toolkitName(This,name) \
+ ( (This)->lpVtbl -> get_toolkitName(This,name) )
+
+#define IAccessibleApplication_get_toolkitVersion(This,version) \
+ ( (This)->lpVtbl -> get_toolkitVersion(This,version) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessibleApplication_INTERFACE_DEFINED__ */
+
+
+#ifndef __IAccessibleDocument_INTERFACE_DEFINED__
+#define __IAccessibleDocument_INTERFACE_DEFINED__
+
+/* interface IAccessibleDocument */
+/* [uuid][object] */
+
+
+EXTERN_C const IID IID_IAccessibleDocument;
+
+#if defined(__cplusplus) && !defined(CINTERFACE)
+
+ MIDL_INTERFACE("C48C7FCF-4AB5-4056-AFA6-902D6E1D1149")
+ IAccessibleDocument : public IUnknown
+ {
+ public:
+ virtual /* [propget] */ HRESULT STDMETHODCALLTYPE get_anchorTarget(
+ /* [retval][out] */ IUnknown **accessible) = 0;
+
+ };
+
+#else /* C style interface */
+
+ typedef struct IAccessibleDocumentVtbl
+ {
+ BEGIN_INTERFACE
+
+ HRESULT ( STDMETHODCALLTYPE *QueryInterface )(
+ IAccessibleDocument * This,
+ /* [in] */ REFIID riid,
+ /* [annotation][iid_is][out] */
+ __RPC__deref_out void **ppvObject);
+
+ ULONG ( STDMETHODCALLTYPE *AddRef )(
+ IAccessibleDocument * This);
+
+ ULONG ( STDMETHODCALLTYPE *Release )(
+ IAccessibleDocument * This);
+
+ /* [propget] */ HRESULT ( STDMETHODCALLTYPE *get_anchorTarget )(
+ IAccessibleDocument * This,
+ /* [retval][out] */ IUnknown **accessible);
+
+ END_INTERFACE
+ } IAccessibleDocumentVtbl;
+
+ interface IAccessibleDocument
+ {
+ CONST_VTBL struct IAccessibleDocumentVtbl *lpVtbl;
+ };
+
+
+
+#ifdef COBJMACROS
+
+
+#define IAccessibleDocument_QueryInterface(This,riid,ppvObject) \
+ ( (This)->lpVtbl -> QueryInterface(This,riid,ppvObject) )
+
+#define IAccessibleDocument_AddRef(This) \
+ ( (This)->lpVtbl -> AddRef(This) )
+
+#define IAccessibleDocument_Release(This) \
+ ( (This)->lpVtbl -> Release(This) )
+
+
+#define IAccessibleDocument_get_anchorTarget(This,accessible) \
+ ( (This)->lpVtbl -> get_anchorTarget(This,accessible) )
+
+#endif /* COBJMACROS */
+
+
+#endif /* C style interface */
+
+
+
+
+#endif /* __IAccessibleDocument_INTERFACE_DEFINED__ */
+
+
+/* interface __MIDL_itf_ia2_api_all_0000_0018 */
+/* [local] */
+
+
+// Type Library Definitions
+
+
+
+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0018_v0_0_c_ifspec;
+extern RPC_IF_HANDLE __MIDL_itf_ia2_api_all_0000_0018_v0_0_s_ifspec;
+
+
+#ifndef __IAccessible2Lib_LIBRARY_DEFINED__
+#define __IAccessible2Lib_LIBRARY_DEFINED__
+
+/* library IAccessible2Lib */
+/* [hidden][version][helpstring][uuid] */
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+EXTERN_C const IID LIBID_IAccessible2Lib;
+#endif /* __IAccessible2Lib_LIBRARY_DEFINED__ */
+
+/* Additional Prototypes for ALL interfaces */
+
+unsigned long __RPC_USER BSTR_UserSize( unsigned long *, unsigned long , BSTR * );
+unsigned char * __RPC_USER BSTR_UserMarshal( unsigned long *, unsigned char *, BSTR * );
+unsigned char * __RPC_USER BSTR_UserUnmarshal(unsigned long *, unsigned char *, BSTR * );
+void __RPC_USER BSTR_UserFree( unsigned long *, BSTR * );
+
+unsigned long __RPC_USER HWND_UserSize( unsigned long *, unsigned long , HWND * );
+unsigned char * __RPC_USER HWND_UserMarshal( unsigned long *, unsigned char *, HWND * );
+unsigned char * __RPC_USER HWND_UserUnmarshal(unsigned long *, unsigned char *, HWND * );
+void __RPC_USER HWND_UserFree( unsigned long *, HWND * );
+
+unsigned long __RPC_USER VARIANT_UserSize( unsigned long *, unsigned long , VARIANT * );
+unsigned char * __RPC_USER VARIANT_UserMarshal( unsigned long *, unsigned char *, VARIANT * );
+unsigned char * __RPC_USER VARIANT_UserUnmarshal(unsigned long *, unsigned char *, VARIANT * );
+void __RPC_USER VARIANT_UserFree( unsigned long *, VARIANT * );
+
+/* end of Additional Prototypes */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+
+
diff --git a/src/3rdparty/iaccessible2/generated/x86/ia2_api_all.tlb b/src/3rdparty/iaccessible2/generated/x86/ia2_api_all.tlb
new file mode 100644
index 0000000000..061ead5903
--- /dev/null
+++ b/src/3rdparty/iaccessible2/generated/x86/ia2_api_all.tlb
Binary files differ
diff --git a/src/3rdparty/iaccessible2/generated/x86/ia2_api_all_i.c b/src/3rdparty/iaccessible2/generated/x86/ia2_api_all_i.c
new file mode 100644
index 0000000000..c50b3e9a4f
--- /dev/null
+++ b/src/3rdparty/iaccessible2/generated/x86/ia2_api_all_i.c
@@ -0,0 +1,133 @@
+
+
+/* this ALWAYS GENERATED file contains the IIDs and CLSIDs */
+
+/* link this file in with the server and any clients */
+
+
+ /* File created by MIDL compiler version 7.00.0555 */
+/* at Mon Aug 11 14:34:41 2014
+ */
+/* Compiler settings for ia2_api_all.idl:
+ Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
+ protocol : dce , ms_ext, c_ext, robust
+ error checks: allocation ref bounds_check enum stub_data
+ VC __declspec() decoration level:
+ __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+ DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+/* @@MIDL_FILE_HEADING( ) */
+
+#pragma warning( disable: 4049 ) /* more than 64k source lines */
+
+
+#ifdef __cplusplus
+extern "C"{
+#endif
+
+
+#include <rpc.h>
+#include <rpcndr.h>
+
+#ifdef _MIDL_USE_GUIDDEF_
+
+#ifndef INITGUID
+#define INITGUID
+#include <guiddef.h>
+#undef INITGUID
+#else
+#include <guiddef.h>
+#endif
+
+#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
+ DEFINE_GUID(name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8)
+
+#else // !_MIDL_USE_GUIDDEF_
+
+#ifndef __IID_DEFINED__
+#define __IID_DEFINED__
+
+typedef struct _IID
+{
+ unsigned long x;
+ unsigned short s1;
+ unsigned short s2;
+ unsigned char c[8];
+} IID;
+
+#endif // __IID_DEFINED__
+
+#ifndef CLSID_DEFINED
+#define CLSID_DEFINED
+typedef IID CLSID;
+#endif // CLSID_DEFINED
+
+#define MIDL_DEFINE_GUID(type,name,l,w1,w2,b1,b2,b3,b4,b5,b6,b7,b8) \
+ const type name = {l,w1,w2,{b1,b2,b3,b4,b5,b6,b7,b8}}
+
+#endif !_MIDL_USE_GUIDDEF_
+
+MIDL_DEFINE_GUID(IID, IID_IAccessibleRelation,0x7CDF86EE,0xC3DA,0x496a,0xBD,0xA4,0x28,0x1B,0x33,0x6E,0x1F,0xDC);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessibleAction,0xB70D9F59,0x3B5A,0x4dba,0xAB,0x9E,0x22,0x01,0x2F,0x60,0x7D,0xF5);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessible2,0xE89F726E,0xC4F4,0x4c19,0xBB,0x19,0xB6,0x47,0xD7,0xFA,0x84,0x78);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessible2_2,0x6C9430E9,0x299D,0x4E6F,0xBD,0x01,0xA8,0x2A,0x1E,0x88,0xD3,0xFF);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessibleComponent,0x1546D4B0,0x4C98,0x4bda,0x89,0xAE,0x9A,0x64,0x74,0x8B,0xDD,0xE4);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessibleValue,0x35855B5B,0xC566,0x4fd0,0xA7,0xB1,0xE6,0x54,0x65,0x60,0x03,0x94);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessibleText,0x24FD2FFB,0x3AAD,0x4a08,0x83,0x35,0xA3,0xAD,0x89,0xC0,0xFB,0x4B);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessibleText2,0x9690A9CC,0x5C80,0x4DF5,0x85,0x2E,0x2D,0x5A,0xE4,0x18,0x9A,0x54);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessibleEditableText,0xA59AA09A,0x7011,0x4b65,0x93,0x9D,0x32,0xB1,0xFB,0x55,0x47,0xE3);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessibleHyperlink,0x01C20F2B,0x3DD2,0x400f,0x94,0x9F,0xAD,0x00,0xBD,0xAB,0x1D,0x41);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessibleHypertext,0x6B4F8BBF,0xF1F2,0x418a,0xB3,0x5E,0xA1,0x95,0xBC,0x41,0x03,0xB9);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessibleHypertext2,0xCF64D89F,0x8287,0x4B44,0x85,0x01,0xA8,0x27,0x45,0x3A,0x60,0x77);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessibleTable,0x35AD8070,0xC20C,0x4fb4,0xB0,0x94,0xF4,0xF7,0x27,0x5D,0xD4,0x69);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessibleTable2,0x6167f295,0x06f0,0x4cdd,0xa1,0xfa,0x02,0xe2,0x51,0x53,0xd8,0x69);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessibleTableCell,0x594116B1,0xC99F,0x4847,0xAD,0x06,0x0A,0x7A,0x86,0xEC,0xE6,0x45);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessibleImage,0xFE5ABB3D,0x615E,0x4f7b,0x90,0x9F,0x5F,0x0E,0xDA,0x9E,0x8D,0xDE);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessibleApplication,0xD49DED83,0x5B25,0x43F4,0x9B,0x95,0x93,0xB4,0x45,0x95,0x97,0x9E);
+
+
+MIDL_DEFINE_GUID(IID, IID_IAccessibleDocument,0xC48C7FCF,0x4AB5,0x4056,0xAF,0xA6,0x90,0x2D,0x6E,0x1D,0x11,0x49);
+
+
+MIDL_DEFINE_GUID(IID, LIBID_IAccessible2Lib,0xCE3F726E,0xD1D3,0x44FE,0xB9,0x95,0xFF,0x1D,0xB3,0xB4,0x8B,0x2B);
+
+#undef MIDL_DEFINE_GUID
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
diff --git a/src/3rdparty/iaccessible2/generated/x86/ia2_api_all_p.c b/src/3rdparty/iaccessible2/generated/x86/ia2_api_all_p.c
new file mode 100644
index 0000000000..2d82318622
--- /dev/null
+++ b/src/3rdparty/iaccessible2/generated/x86/ia2_api_all_p.c
@@ -0,0 +1,7823 @@
+
+
+/* this ALWAYS GENERATED file contains the proxy stub code */
+
+
+ /* File created by MIDL compiler version 7.00.0555 */
+/* at Mon Aug 11 14:34:41 2014
+ */
+/* Compiler settings for ia2_api_all.idl:
+ Oicf, W1, Zp8, env=Win32 (32b run), target_arch=X86 7.00.0555
+ protocol : dce , ms_ext, c_ext, robust
+ error checks: allocation ref bounds_check enum stub_data
+ VC __declspec() decoration level:
+ __declspec(uuid()), __declspec(selectany), __declspec(novtable)
+ DECLSPEC_UUID(), MIDL_INTERFACE()
+*/
+/* @@MIDL_FILE_HEADING( ) */
+
+#if !defined(_M_IA64) && !defined(_M_AMD64)
+
+
+#pragma warning( disable: 4049 ) /* more than 64k source lines */
+#if _MSC_VER >= 1200
+#pragma warning(push)
+#endif
+
+#pragma warning( disable: 4211 ) /* redefine extern to static */
+#pragma warning( disable: 4232 ) /* dllimport identity*/
+#pragma warning( disable: 4024 ) /* array to pointer mapping*/
+#pragma warning( disable: 4152 ) /* function/data pointer conversion in expression */
+#pragma warning( disable: 4100 ) /* unreferenced arguments in x86 call */
+
+#pragma optimize("", off )
+
+#define USE_STUBLESS_PROXY
+
+
+/* verify that the <rpcproxy.h> version is high enough to compile this file*/
+#ifndef __REDQ_RPCPROXY_H_VERSION__
+#define __REQUIRED_RPCPROXY_H_VERSION__ 475
+#endif
+
+
+#include "rpcproxy.h"
+#ifndef __RPCPROXY_H_VERSION__
+#error this stub requires an updated version of <rpcproxy.h>
+#endif /* __RPCPROXY_H_VERSION__ */
+
+
+#include "ia2_api_all.h"
+
+#define TYPE_FORMAT_STRING_SIZE 1513
+#define PROC_FORMAT_STRING_SIZE 5197
+#define EXPR_FORMAT_STRING_SIZE 1
+#define TRANSMIT_AS_TABLE_SIZE 0
+#define WIRE_MARSHAL_TABLE_SIZE 3
+
+typedef struct _ia2_api_all_MIDL_TYPE_FORMAT_STRING
+ {
+ short Pad;
+ unsigned char Format[ TYPE_FORMAT_STRING_SIZE ];
+ } ia2_api_all_MIDL_TYPE_FORMAT_STRING;
+
+typedef struct _ia2_api_all_MIDL_PROC_FORMAT_STRING
+ {
+ short Pad;
+ unsigned char Format[ PROC_FORMAT_STRING_SIZE ];
+ } ia2_api_all_MIDL_PROC_FORMAT_STRING;
+
+typedef struct _ia2_api_all_MIDL_EXPR_FORMAT_STRING
+ {
+ long Pad;
+ unsigned char Format[ EXPR_FORMAT_STRING_SIZE ];
+ } ia2_api_all_MIDL_EXPR_FORMAT_STRING;
+
+
+static const RPC_SYNTAX_IDENTIFIER _RpcTransferSyntax =
+{{0x8A885D04,0x1CEB,0x11C9,{0x9F,0xE8,0x08,0x00,0x2B,0x10,0x48,0x60}},{2,0}};
+
+
+extern const ia2_api_all_MIDL_TYPE_FORMAT_STRING ia2_api_all__MIDL_TypeFormatString;
+extern const ia2_api_all_MIDL_PROC_FORMAT_STRING ia2_api_all__MIDL_ProcFormatString;
+extern const ia2_api_all_MIDL_EXPR_FORMAT_STRING ia2_api_all__MIDL_ExprFormatString;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessibleRelation_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessibleRelation_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessibleAction_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessibleAction_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessible2_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessible2_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessible2_2_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessible2_2_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessibleComponent_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessibleComponent_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessibleValue_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessibleValue_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessibleText_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessibleText_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessibleText2_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessibleText2_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessibleEditableText_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessibleEditableText_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessibleHyperlink_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessibleHyperlink_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessibleHypertext_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessibleHypertext_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessibleHypertext2_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessibleHypertext2_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessibleTable_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessibleTable_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessibleTable2_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessibleTable2_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessibleTableCell_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessibleTableCell_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessibleImage_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessibleImage_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessibleApplication_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessibleApplication_ProxyInfo;
+
+
+extern const MIDL_STUB_DESC Object_StubDesc;
+
+
+extern const MIDL_SERVER_INFO IAccessibleDocument_ServerInfo;
+extern const MIDL_STUBLESS_PROXY_INFO IAccessibleDocument_ProxyInfo;
+
+
+extern const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ];
+
+#if !defined(__RPC_WIN32__)
+#error Invalid build platform for this stub.
+#endif
+
+#if !(TARGET_IS_NT50_OR_LATER)
+#error You need Windows 2000 or later to run this stub because it uses these features:
+#error /robust command line switch.
+#error However, your C/C++ compilation flags indicate you intend to run this app on earlier systems.
+#error This app will fail with the RPC_X_WRONG_STUB_VERSION error.
+#endif
+
+
+static const ia2_api_all_MIDL_PROC_FORMAT_STRING ia2_api_all__MIDL_ProcFormatString =
+ {
+ 0,
+ {
+
+ /* Procedure get_appName */
+
+
+ /* Procedure get_description */
+
+
+ /* Procedure get_relationType */
+
+ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2 */ NdrFcLong( 0x0 ), /* 0 */
+/* 6 */ NdrFcShort( 0x3 ), /* 3 */
+/* 8 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 10 */ NdrFcShort( 0x0 ), /* 0 */
+/* 12 */ NdrFcShort( 0x8 ), /* 8 */
+/* 14 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 16 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 18 */ NdrFcShort( 0x1 ), /* 1 */
+/* 20 */ NdrFcShort( 0x0 ), /* 0 */
+/* 22 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter name */
+
+
+ /* Parameter description */
+
+
+ /* Parameter relationType */
+
+/* 24 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 26 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 28 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+
+ /* Return value */
+
+
+ /* Return value */
+
+/* 30 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 32 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 34 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_appVersion */
+
+
+ /* Procedure get_localizedRelationType */
+
+/* 36 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 38 */ NdrFcLong( 0x0 ), /* 0 */
+/* 42 */ NdrFcShort( 0x4 ), /* 4 */
+/* 44 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 46 */ NdrFcShort( 0x0 ), /* 0 */
+/* 48 */ NdrFcShort( 0x8 ), /* 8 */
+/* 50 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 52 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 54 */ NdrFcShort( 0x1 ), /* 1 */
+/* 56 */ NdrFcShort( 0x0 ), /* 0 */
+/* 58 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter version */
+
+
+ /* Parameter localizedRelationType */
+
+/* 60 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 62 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 64 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+
+ /* Return value */
+
+/* 66 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 68 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 70 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_columnIndex */
+
+
+ /* Procedure get_caretOffset */
+
+
+ /* Procedure get_background */
+
+
+ /* Procedure get_nTargets */
+
+/* 72 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 74 */ NdrFcLong( 0x0 ), /* 0 */
+/* 78 */ NdrFcShort( 0x5 ), /* 5 */
+/* 80 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 82 */ NdrFcShort( 0x0 ), /* 0 */
+/* 84 */ NdrFcShort( 0x24 ), /* 36 */
+/* 86 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 88 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 90 */ NdrFcShort( 0x0 ), /* 0 */
+/* 92 */ NdrFcShort( 0x0 ), /* 0 */
+/* 94 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter columnIndex */
+
+
+ /* Parameter offset */
+
+
+ /* Parameter background */
+
+
+ /* Parameter nTargets */
+
+/* 96 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 98 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 100 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+
+ /* Return value */
+
+
+ /* Return value */
+
+
+ /* Return value */
+
+/* 102 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 104 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 106 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_target */
+
+/* 108 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 110 */ NdrFcLong( 0x0 ), /* 0 */
+/* 114 */ NdrFcShort( 0x6 ), /* 6 */
+/* 116 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 118 */ NdrFcShort( 0x8 ), /* 8 */
+/* 120 */ NdrFcShort( 0x8 ), /* 8 */
+/* 122 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 124 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 126 */ NdrFcShort( 0x0 ), /* 0 */
+/* 128 */ NdrFcShort( 0x0 ), /* 0 */
+/* 130 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter targetIndex */
+
+/* 132 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 134 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 136 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter target */
+
+/* 138 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
+/* 140 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 142 */ NdrFcShort( 0x2e ), /* Type Offset=46 */
+
+ /* Return value */
+
+/* 144 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 146 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 148 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_targets */
+
+/* 150 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 152 */ NdrFcLong( 0x0 ), /* 0 */
+/* 156 */ NdrFcShort( 0x7 ), /* 7 */
+/* 158 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 160 */ NdrFcShort( 0x8 ), /* 8 */
+/* 162 */ NdrFcShort( 0x24 ), /* 36 */
+/* 164 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x4, /* 4 */
+/* 166 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 168 */ NdrFcShort( 0x1 ), /* 1 */
+/* 170 */ NdrFcShort( 0x0 ), /* 0 */
+/* 172 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter maxTargets */
+
+/* 174 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 176 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 178 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter targets */
+
+/* 180 */ NdrFcShort( 0x113 ), /* Flags: must size, must free, out, simple ref, */
+/* 182 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 184 */ NdrFcShort( 0x48 ), /* Type Offset=72 */
+
+ /* Parameter nTargets */
+
+/* 186 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 188 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 190 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 192 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 194 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 196 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_columnExtent */
+
+
+ /* Procedure nActions */
+
+/* 198 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 200 */ NdrFcLong( 0x0 ), /* 0 */
+/* 204 */ NdrFcShort( 0x3 ), /* 3 */
+/* 206 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 208 */ NdrFcShort( 0x0 ), /* 0 */
+/* 210 */ NdrFcShort( 0x24 ), /* 36 */
+/* 212 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 214 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 216 */ NdrFcShort( 0x0 ), /* 0 */
+/* 218 */ NdrFcShort( 0x0 ), /* 0 */
+/* 220 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter nColumnsSpanned */
+
+
+ /* Parameter nActions */
+
+/* 222 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 224 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 226 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+
+ /* Return value */
+
+/* 228 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 230 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 232 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure doAction */
+
+/* 234 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 236 */ NdrFcLong( 0x0 ), /* 0 */
+/* 240 */ NdrFcShort( 0x4 ), /* 4 */
+/* 242 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 244 */ NdrFcShort( 0x8 ), /* 8 */
+/* 246 */ NdrFcShort( 0x8 ), /* 8 */
+/* 248 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 250 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 252 */ NdrFcShort( 0x0 ), /* 0 */
+/* 254 */ NdrFcShort( 0x0 ), /* 0 */
+/* 256 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter actionIndex */
+
+/* 258 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 260 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 262 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 264 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 266 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 268 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_columnDescription */
+
+
+ /* Procedure get_description */
+
+/* 270 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 272 */ NdrFcLong( 0x0 ), /* 0 */
+/* 276 */ NdrFcShort( 0x5 ), /* 5 */
+/* 278 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 280 */ NdrFcShort( 0x8 ), /* 8 */
+/* 282 */ NdrFcShort( 0x8 ), /* 8 */
+/* 284 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 286 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 288 */ NdrFcShort( 0x1 ), /* 1 */
+/* 290 */ NdrFcShort( 0x0 ), /* 0 */
+/* 292 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter column */
+
+
+ /* Parameter actionIndex */
+
+/* 294 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 296 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 298 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter description */
+
+
+ /* Parameter description */
+
+/* 300 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 302 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 304 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+
+ /* Return value */
+
+/* 306 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 308 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 310 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_keyBinding */
+
+/* 312 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 314 */ NdrFcLong( 0x0 ), /* 0 */
+/* 318 */ NdrFcShort( 0x6 ), /* 6 */
+/* 320 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */
+/* 322 */ NdrFcShort( 0x10 ), /* 16 */
+/* 324 */ NdrFcShort( 0x24 ), /* 36 */
+/* 326 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x5, /* 5 */
+/* 328 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 330 */ NdrFcShort( 0x1 ), /* 1 */
+/* 332 */ NdrFcShort( 0x0 ), /* 0 */
+/* 334 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter actionIndex */
+
+/* 336 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 338 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 340 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter nMaxBindings */
+
+/* 342 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 344 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 346 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter keyBindings */
+
+/* 348 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
+/* 350 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 352 */ NdrFcShort( 0x5e ), /* Type Offset=94 */
+
+ /* Parameter nBindings */
+
+/* 354 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 356 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 358 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 360 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 362 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 364 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_name */
+
+/* 366 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 368 */ NdrFcLong( 0x0 ), /* 0 */
+/* 372 */ NdrFcShort( 0x7 ), /* 7 */
+/* 374 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 376 */ NdrFcShort( 0x8 ), /* 8 */
+/* 378 */ NdrFcShort( 0x8 ), /* 8 */
+/* 380 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 382 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 384 */ NdrFcShort( 0x1 ), /* 1 */
+/* 386 */ NdrFcShort( 0x0 ), /* 0 */
+/* 388 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter actionIndex */
+
+/* 390 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 392 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 394 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter name */
+
+/* 396 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 398 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 400 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+/* 402 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 404 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 406 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_localizedName */
+
+/* 408 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 410 */ NdrFcLong( 0x0 ), /* 0 */
+/* 414 */ NdrFcShort( 0x8 ), /* 8 */
+/* 416 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 418 */ NdrFcShort( 0x8 ), /* 8 */
+/* 420 */ NdrFcShort( 0x8 ), /* 8 */
+/* 422 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 424 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 426 */ NdrFcShort( 0x1 ), /* 1 */
+/* 428 */ NdrFcShort( 0x0 ), /* 0 */
+/* 430 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter actionIndex */
+
+/* 432 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 434 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 436 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter localizedName */
+
+/* 438 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 440 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 442 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+/* 444 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 446 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 448 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_nRelations */
+
+/* 450 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 452 */ NdrFcLong( 0x0 ), /* 0 */
+/* 456 */ NdrFcShort( 0x1c ), /* 28 */
+/* 458 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 460 */ NdrFcShort( 0x0 ), /* 0 */
+/* 462 */ NdrFcShort( 0x24 ), /* 36 */
+/* 464 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 466 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 468 */ NdrFcShort( 0x0 ), /* 0 */
+/* 470 */ NdrFcShort( 0x0 ), /* 0 */
+/* 472 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter nRelations */
+
+/* 474 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 476 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 478 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 480 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 482 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 484 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_relation */
+
+/* 486 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 488 */ NdrFcLong( 0x0 ), /* 0 */
+/* 492 */ NdrFcShort( 0x1d ), /* 29 */
+/* 494 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 496 */ NdrFcShort( 0x8 ), /* 8 */
+/* 498 */ NdrFcShort( 0x8 ), /* 8 */
+/* 500 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 502 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 504 */ NdrFcShort( 0x0 ), /* 0 */
+/* 506 */ NdrFcShort( 0x0 ), /* 0 */
+/* 508 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter relationIndex */
+
+/* 510 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 512 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 514 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter relation */
+
+/* 516 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
+/* 518 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 520 */ NdrFcShort( 0x7c ), /* Type Offset=124 */
+
+ /* Return value */
+
+/* 522 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 524 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 526 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_relations */
+
+/* 528 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 530 */ NdrFcLong( 0x0 ), /* 0 */
+/* 534 */ NdrFcShort( 0x1e ), /* 30 */
+/* 536 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 538 */ NdrFcShort( 0x8 ), /* 8 */
+/* 540 */ NdrFcShort( 0x24 ), /* 36 */
+/* 542 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x4, /* 4 */
+/* 544 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 546 */ NdrFcShort( 0x1 ), /* 1 */
+/* 548 */ NdrFcShort( 0x0 ), /* 0 */
+/* 550 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter maxRelations */
+
+/* 552 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 554 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 556 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter relations */
+
+/* 558 */ NdrFcShort( 0x113 ), /* Flags: must size, must free, out, simple ref, */
+/* 560 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 562 */ NdrFcShort( 0x96 ), /* Type Offset=150 */
+
+ /* Parameter nRelations */
+
+/* 564 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 566 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 568 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 570 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 572 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 574 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure role */
+
+/* 576 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 578 */ NdrFcLong( 0x0 ), /* 0 */
+/* 582 */ NdrFcShort( 0x1f ), /* 31 */
+/* 584 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 586 */ NdrFcShort( 0x0 ), /* 0 */
+/* 588 */ NdrFcShort( 0x24 ), /* 36 */
+/* 590 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 592 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 594 */ NdrFcShort( 0x0 ), /* 0 */
+/* 596 */ NdrFcShort( 0x0 ), /* 0 */
+/* 598 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter role */
+
+/* 600 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 602 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 604 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 606 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 608 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 610 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure scrollTo */
+
+/* 612 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 614 */ NdrFcLong( 0x0 ), /* 0 */
+/* 618 */ NdrFcShort( 0x20 ), /* 32 */
+/* 620 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 622 */ NdrFcShort( 0x6 ), /* 6 */
+/* 624 */ NdrFcShort( 0x8 ), /* 8 */
+/* 626 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 628 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 630 */ NdrFcShort( 0x0 ), /* 0 */
+/* 632 */ NdrFcShort( 0x0 ), /* 0 */
+/* 634 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter scrollType */
+
+/* 636 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 638 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 640 */ 0xd, /* FC_ENUM16 */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 642 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 644 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 646 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure scrollToPoint */
+
+/* 648 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 650 */ NdrFcLong( 0x0 ), /* 0 */
+/* 654 */ NdrFcShort( 0x21 ), /* 33 */
+/* 656 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 658 */ NdrFcShort( 0x16 ), /* 22 */
+/* 660 */ NdrFcShort( 0x8 ), /* 8 */
+/* 662 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x4, /* 4 */
+/* 664 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 666 */ NdrFcShort( 0x0 ), /* 0 */
+/* 668 */ NdrFcShort( 0x0 ), /* 0 */
+/* 670 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter coordinateType */
+
+/* 672 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 674 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 676 */ 0xd, /* FC_ENUM16 */
+ 0x0, /* 0 */
+
+ /* Parameter x */
+
+/* 678 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 680 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 682 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter y */
+
+/* 684 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 686 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 688 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 690 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 692 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 694 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_groupPosition */
+
+/* 696 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 698 */ NdrFcLong( 0x0 ), /* 0 */
+/* 702 */ NdrFcShort( 0x22 ), /* 34 */
+/* 704 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 706 */ NdrFcShort( 0x0 ), /* 0 */
+/* 708 */ NdrFcShort( 0x5c ), /* 92 */
+/* 710 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x4, /* 4 */
+/* 712 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 714 */ NdrFcShort( 0x0 ), /* 0 */
+/* 716 */ NdrFcShort( 0x0 ), /* 0 */
+/* 718 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter groupLevel */
+
+/* 720 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 722 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 724 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter similarItemsInGroup */
+
+/* 726 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 728 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 730 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter positionInGroup */
+
+/* 732 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 734 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 736 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 738 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 740 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 742 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_states */
+
+/* 744 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 746 */ NdrFcLong( 0x0 ), /* 0 */
+/* 750 */ NdrFcShort( 0x23 ), /* 35 */
+/* 752 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 754 */ NdrFcShort( 0x0 ), /* 0 */
+/* 756 */ NdrFcShort( 0x24 ), /* 36 */
+/* 758 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 760 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 762 */ NdrFcShort( 0x0 ), /* 0 */
+/* 764 */ NdrFcShort( 0x0 ), /* 0 */
+/* 766 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter states */
+
+/* 768 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 770 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 772 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 774 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 776 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 778 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_extendedRole */
+
+/* 780 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 782 */ NdrFcLong( 0x0 ), /* 0 */
+/* 786 */ NdrFcShort( 0x24 ), /* 36 */
+/* 788 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 790 */ NdrFcShort( 0x0 ), /* 0 */
+/* 792 */ NdrFcShort( 0x8 ), /* 8 */
+/* 794 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 796 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 798 */ NdrFcShort( 0x1 ), /* 1 */
+/* 800 */ NdrFcShort( 0x0 ), /* 0 */
+/* 802 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter extendedRole */
+
+/* 804 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 806 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 808 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+/* 810 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 812 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 814 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_localizedExtendedRole */
+
+/* 816 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 818 */ NdrFcLong( 0x0 ), /* 0 */
+/* 822 */ NdrFcShort( 0x25 ), /* 37 */
+/* 824 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 826 */ NdrFcShort( 0x0 ), /* 0 */
+/* 828 */ NdrFcShort( 0x8 ), /* 8 */
+/* 830 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 832 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 834 */ NdrFcShort( 0x1 ), /* 1 */
+/* 836 */ NdrFcShort( 0x0 ), /* 0 */
+/* 838 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter localizedExtendedRole */
+
+/* 840 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 842 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 844 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+/* 846 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 848 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 850 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_nExtendedStates */
+
+/* 852 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 854 */ NdrFcLong( 0x0 ), /* 0 */
+/* 858 */ NdrFcShort( 0x26 ), /* 38 */
+/* 860 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 862 */ NdrFcShort( 0x0 ), /* 0 */
+/* 864 */ NdrFcShort( 0x24 ), /* 36 */
+/* 866 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 868 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 870 */ NdrFcShort( 0x0 ), /* 0 */
+/* 872 */ NdrFcShort( 0x0 ), /* 0 */
+/* 874 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter nExtendedStates */
+
+/* 876 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 878 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 880 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 882 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 884 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 886 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_extendedStates */
+
+/* 888 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 890 */ NdrFcLong( 0x0 ), /* 0 */
+/* 894 */ NdrFcShort( 0x27 ), /* 39 */
+/* 896 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 898 */ NdrFcShort( 0x8 ), /* 8 */
+/* 900 */ NdrFcShort( 0x24 ), /* 36 */
+/* 902 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x4, /* 4 */
+/* 904 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 906 */ NdrFcShort( 0x1 ), /* 1 */
+/* 908 */ NdrFcShort( 0x0 ), /* 0 */
+/* 910 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter maxExtendedStates */
+
+/* 912 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 914 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 916 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter extendedStates */
+
+/* 918 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
+/* 920 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 922 */ NdrFcShort( 0xac ), /* Type Offset=172 */
+
+ /* Parameter nExtendedStates */
+
+/* 924 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 926 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 928 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 930 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 932 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 934 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_localizedExtendedStates */
+
+/* 936 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 938 */ NdrFcLong( 0x0 ), /* 0 */
+/* 942 */ NdrFcShort( 0x28 ), /* 40 */
+/* 944 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 946 */ NdrFcShort( 0x8 ), /* 8 */
+/* 948 */ NdrFcShort( 0x24 ), /* 36 */
+/* 950 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x4, /* 4 */
+/* 952 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 954 */ NdrFcShort( 0x1 ), /* 1 */
+/* 956 */ NdrFcShort( 0x0 ), /* 0 */
+/* 958 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter maxLocalizedExtendedStates */
+
+/* 960 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 962 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 964 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter localizedExtendedStates */
+
+/* 966 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
+/* 968 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 970 */ NdrFcShort( 0xac ), /* Type Offset=172 */
+
+ /* Parameter nLocalizedExtendedStates */
+
+/* 972 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 974 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 976 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 978 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 980 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 982 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_uniqueID */
+
+/* 984 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 986 */ NdrFcLong( 0x0 ), /* 0 */
+/* 990 */ NdrFcShort( 0x29 ), /* 41 */
+/* 992 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 994 */ NdrFcShort( 0x0 ), /* 0 */
+/* 996 */ NdrFcShort( 0x24 ), /* 36 */
+/* 998 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 1000 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 1002 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1004 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1006 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter uniqueID */
+
+/* 1008 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1010 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 1012 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 1014 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1016 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 1018 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_windowHandle */
+
+/* 1020 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1022 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1026 */ NdrFcShort( 0x2a ), /* 42 */
+/* 1028 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 1030 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1032 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1034 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 1036 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 1038 */ NdrFcShort( 0x1 ), /* 1 */
+/* 1040 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1042 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter windowHandle */
+
+/* 1044 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 1046 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 1048 */ NdrFcShort( 0xe6 ), /* Type Offset=230 */
+
+ /* Return value */
+
+/* 1050 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1052 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 1054 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_indexInParent */
+
+/* 1056 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1058 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1062 */ NdrFcShort( 0x2b ), /* 43 */
+/* 1064 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 1066 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1068 */ NdrFcShort( 0x24 ), /* 36 */
+/* 1070 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 1072 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 1074 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1076 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1078 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter indexInParent */
+
+/* 1080 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1082 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 1084 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 1086 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1088 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 1090 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_locale */
+
+/* 1092 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1094 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1098 */ NdrFcShort( 0x2c ), /* 44 */
+/* 1100 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 1102 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1104 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1106 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 1108 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 1110 */ NdrFcShort( 0x1 ), /* 1 */
+/* 1112 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1114 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter locale */
+
+/* 1116 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */
+/* 1118 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 1120 */ NdrFcShort( 0xf4 ), /* Type Offset=244 */
+
+ /* Return value */
+
+/* 1122 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1124 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 1126 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_attributes */
+
+/* 1128 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1130 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1134 */ NdrFcShort( 0x2d ), /* 45 */
+/* 1136 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 1138 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1140 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1142 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 1144 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 1146 */ NdrFcShort( 0x1 ), /* 1 */
+/* 1148 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1150 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter attributes */
+
+/* 1152 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 1154 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 1156 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+/* 1158 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1160 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 1162 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_attribute */
+
+/* 1164 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1166 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1170 */ NdrFcShort( 0x2e ), /* 46 */
+/* 1172 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 1174 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1176 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1178 */ 0x47, /* Oi2 Flags: srv must size, clt must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 1180 */ 0x8, /* 8 */
+ 0x7, /* Ext Flags: new corr desc, clt corr check, srv corr check, */
+/* 1182 */ NdrFcShort( 0x1 ), /* 1 */
+/* 1184 */ NdrFcShort( 0x1 ), /* 1 */
+/* 1186 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter name */
+
+/* 1188 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */
+/* 1190 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 1192 */ NdrFcShort( 0x10e ), /* Type Offset=270 */
+
+ /* Parameter attribute */
+
+/* 1194 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */
+/* 1196 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 1198 */ NdrFcShort( 0x4ee ), /* Type Offset=1262 */
+
+ /* Return value */
+
+/* 1200 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1202 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 1204 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_accessibleWithCaret */
+
+/* 1206 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1208 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1212 */ NdrFcShort( 0x2f ), /* 47 */
+/* 1214 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 1216 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1218 */ NdrFcShort( 0x24 ), /* 36 */
+/* 1220 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 1222 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 1224 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1226 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1228 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter accessible */
+
+/* 1230 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
+/* 1232 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 1234 */ NdrFcShort( 0x2e ), /* Type Offset=46 */
+
+ /* Parameter caretOffset */
+
+/* 1236 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1238 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 1240 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 1242 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1244 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 1246 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_relationTargetsOfType */
+
+/* 1248 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1250 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1254 */ NdrFcShort( 0x30 ), /* 48 */
+/* 1256 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */
+/* 1258 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1260 */ NdrFcShort( 0x24 ), /* 36 */
+/* 1262 */ 0x47, /* Oi2 Flags: srv must size, clt must size, has return, has ext, */
+ 0x5, /* 5 */
+/* 1264 */ 0x8, /* 8 */
+ 0x7, /* Ext Flags: new corr desc, clt corr check, srv corr check, */
+/* 1266 */ NdrFcShort( 0x1 ), /* 1 */
+/* 1268 */ NdrFcShort( 0x1 ), /* 1 */
+/* 1270 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter type */
+
+/* 1272 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */
+/* 1274 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 1276 */ NdrFcShort( 0x10e ), /* Type Offset=270 */
+
+ /* Parameter maxTargets */
+
+/* 1278 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 1280 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 1282 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter targets */
+
+/* 1284 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
+/* 1286 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 1288 */ NdrFcShort( 0x4f8 ), /* Type Offset=1272 */
+
+ /* Parameter nTargets */
+
+/* 1290 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1292 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 1294 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 1296 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1298 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 1300 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_locationInParent */
+
+/* 1302 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1304 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1308 */ NdrFcShort( 0x3 ), /* 3 */
+/* 1310 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 1312 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1314 */ NdrFcShort( 0x40 ), /* 64 */
+/* 1316 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x3, /* 3 */
+/* 1318 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 1320 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1322 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1324 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter x */
+
+/* 1326 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1328 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 1330 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter y */
+
+/* 1332 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1334 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 1336 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 1338 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1340 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 1342 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_foreground */
+
+/* 1344 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1346 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1350 */ NdrFcShort( 0x4 ), /* 4 */
+/* 1352 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 1354 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1356 */ NdrFcShort( 0x24 ), /* 36 */
+/* 1358 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 1360 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 1362 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1364 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1366 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter foreground */
+
+/* 1368 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1370 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 1372 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 1374 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1376 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 1378 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_currentValue */
+
+/* 1380 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1382 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1386 */ NdrFcShort( 0x3 ), /* 3 */
+/* 1388 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 1390 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1392 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1394 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 1396 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 1398 */ NdrFcShort( 0x1 ), /* 1 */
+/* 1400 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1402 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter currentValue */
+
+/* 1404 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */
+/* 1406 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 1408 */ NdrFcShort( 0x4ee ), /* Type Offset=1262 */
+
+ /* Return value */
+
+/* 1410 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1412 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 1414 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure setCurrentValue */
+
+/* 1416 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1418 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1422 */ NdrFcShort( 0x4 ), /* 4 */
+/* 1424 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */
+/* 1426 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1428 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1430 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 1432 */ 0x8, /* 8 */
+ 0x5, /* Ext Flags: new corr desc, srv corr check, */
+/* 1434 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1436 */ NdrFcShort( 0x1 ), /* 1 */
+/* 1438 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter value */
+
+/* 1440 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */
+/* 1442 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 1444 */ NdrFcShort( 0x51a ), /* Type Offset=1306 */
+
+ /* Return value */
+
+/* 1446 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1448 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 1450 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_maximumValue */
+
+/* 1452 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1454 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1458 */ NdrFcShort( 0x5 ), /* 5 */
+/* 1460 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 1462 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1464 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1466 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 1468 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 1470 */ NdrFcShort( 0x1 ), /* 1 */
+/* 1472 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1474 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter maximumValue */
+
+/* 1476 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */
+/* 1478 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 1480 */ NdrFcShort( 0x4ee ), /* Type Offset=1262 */
+
+ /* Return value */
+
+/* 1482 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1484 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 1486 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_minimumValue */
+
+/* 1488 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1490 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1494 */ NdrFcShort( 0x6 ), /* 6 */
+/* 1496 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 1498 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1500 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1502 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 1504 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 1506 */ NdrFcShort( 0x1 ), /* 1 */
+/* 1508 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1510 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter minimumValue */
+
+/* 1512 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */
+/* 1514 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 1516 */ NdrFcShort( 0x4ee ), /* Type Offset=1262 */
+
+ /* Return value */
+
+/* 1518 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1520 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 1522 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure copyText */
+
+
+ /* Procedure addSelection */
+
+/* 1524 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1526 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1530 */ NdrFcShort( 0x3 ), /* 3 */
+/* 1532 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 1534 */ NdrFcShort( 0x10 ), /* 16 */
+/* 1536 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1538 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x3, /* 3 */
+/* 1540 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 1542 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1544 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1546 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter startOffset */
+
+
+ /* Parameter startOffset */
+
+/* 1548 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 1550 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 1552 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter endOffset */
+
+
+ /* Parameter endOffset */
+
+/* 1554 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 1556 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 1558 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+
+ /* Return value */
+
+/* 1560 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1562 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 1564 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_attributes */
+
+/* 1566 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1568 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1572 */ NdrFcShort( 0x4 ), /* 4 */
+/* 1574 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */
+/* 1576 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1578 */ NdrFcShort( 0x40 ), /* 64 */
+/* 1580 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x5, /* 5 */
+/* 1582 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 1584 */ NdrFcShort( 0x1 ), /* 1 */
+/* 1586 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1588 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter offset */
+
+/* 1590 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 1592 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 1594 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter startOffset */
+
+/* 1596 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1598 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 1600 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter endOffset */
+
+/* 1602 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1604 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 1606 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter textAttributes */
+
+/* 1608 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 1610 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 1612 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+/* 1614 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1616 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 1618 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_characterExtents */
+
+/* 1620 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1622 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1626 */ NdrFcShort( 0x6 ), /* 6 */
+/* 1628 */ NdrFcShort( 0x20 ), /* x86 Stack size/offset = 32 */
+/* 1630 */ NdrFcShort( 0xe ), /* 14 */
+/* 1632 */ NdrFcShort( 0x78 ), /* 120 */
+/* 1634 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x7, /* 7 */
+/* 1636 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 1638 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1640 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1642 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter offset */
+
+/* 1644 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 1646 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 1648 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter coordType */
+
+/* 1650 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 1652 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 1654 */ 0xd, /* FC_ENUM16 */
+ 0x0, /* 0 */
+
+ /* Parameter x */
+
+/* 1656 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1658 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 1660 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter y */
+
+/* 1662 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1664 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 1666 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter width */
+
+/* 1668 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1670 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 1672 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter height */
+
+/* 1674 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1676 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */
+/* 1678 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 1680 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1682 */ NdrFcShort( 0x1c ), /* x86 Stack size/offset = 28 */
+/* 1684 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_nRows */
+
+
+ /* Procedure get_nSelections */
+
+/* 1686 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1688 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1692 */ NdrFcShort( 0x7 ), /* 7 */
+/* 1694 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 1696 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1698 */ NdrFcShort( 0x24 ), /* 36 */
+/* 1700 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 1702 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 1704 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1706 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1708 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter rowCount */
+
+
+ /* Parameter nSelections */
+
+/* 1710 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1712 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 1714 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+
+ /* Return value */
+
+/* 1716 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1718 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 1720 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_offsetAtPoint */
+
+/* 1722 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1724 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1728 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1730 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */
+/* 1732 */ NdrFcShort( 0x16 ), /* 22 */
+/* 1734 */ NdrFcShort( 0x24 ), /* 36 */
+/* 1736 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x5, /* 5 */
+/* 1738 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 1740 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1742 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1744 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter x */
+
+/* 1746 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 1748 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 1750 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter y */
+
+/* 1752 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 1754 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 1756 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter coordType */
+
+/* 1758 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 1760 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 1762 */ 0xd, /* FC_ENUM16 */
+ 0x0, /* 0 */
+
+ /* Parameter offset */
+
+/* 1764 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1766 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 1768 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 1770 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1772 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 1774 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_selection */
+
+/* 1776 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1778 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1782 */ NdrFcShort( 0x9 ), /* 9 */
+/* 1784 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 1786 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1788 */ NdrFcShort( 0x40 ), /* 64 */
+/* 1790 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x4, /* 4 */
+/* 1792 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 1794 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1796 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1798 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter selectionIndex */
+
+/* 1800 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 1802 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 1804 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter startOffset */
+
+/* 1806 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1808 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 1810 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter endOffset */
+
+/* 1812 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1814 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 1816 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 1818 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1820 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 1822 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_text */
+
+/* 1824 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1826 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1830 */ NdrFcShort( 0xa ), /* 10 */
+/* 1832 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 1834 */ NdrFcShort( 0x10 ), /* 16 */
+/* 1836 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1838 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x4, /* 4 */
+/* 1840 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 1842 */ NdrFcShort( 0x1 ), /* 1 */
+/* 1844 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1846 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter startOffset */
+
+/* 1848 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 1850 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 1852 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter endOffset */
+
+/* 1854 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 1856 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 1858 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter text */
+
+/* 1860 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 1862 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 1864 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+/* 1866 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1868 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 1870 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_textBeforeOffset */
+
+/* 1872 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1874 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1878 */ NdrFcShort( 0xb ), /* 11 */
+/* 1880 */ NdrFcShort( 0x1c ), /* x86 Stack size/offset = 28 */
+/* 1882 */ NdrFcShort( 0xe ), /* 14 */
+/* 1884 */ NdrFcShort( 0x40 ), /* 64 */
+/* 1886 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x6, /* 6 */
+/* 1888 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 1890 */ NdrFcShort( 0x1 ), /* 1 */
+/* 1892 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1894 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter offset */
+
+/* 1896 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 1898 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 1900 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter boundaryType */
+
+/* 1902 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 1904 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 1906 */ 0xd, /* FC_ENUM16 */
+ 0x0, /* 0 */
+
+ /* Parameter startOffset */
+
+/* 1908 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1910 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 1912 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter endOffset */
+
+/* 1914 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1916 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 1918 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter text */
+
+/* 1920 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 1922 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 1924 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+/* 1926 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1928 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */
+/* 1930 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_textAfterOffset */
+
+/* 1932 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1934 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1938 */ NdrFcShort( 0xc ), /* 12 */
+/* 1940 */ NdrFcShort( 0x1c ), /* x86 Stack size/offset = 28 */
+/* 1942 */ NdrFcShort( 0xe ), /* 14 */
+/* 1944 */ NdrFcShort( 0x40 ), /* 64 */
+/* 1946 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x6, /* 6 */
+/* 1948 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 1950 */ NdrFcShort( 0x1 ), /* 1 */
+/* 1952 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1954 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter offset */
+
+/* 1956 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 1958 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 1960 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter boundaryType */
+
+/* 1962 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 1964 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 1966 */ 0xd, /* FC_ENUM16 */
+ 0x0, /* 0 */
+
+ /* Parameter startOffset */
+
+/* 1968 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1970 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 1972 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter endOffset */
+
+/* 1974 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 1976 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 1978 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter text */
+
+/* 1980 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 1982 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 1984 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+/* 1986 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 1988 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */
+/* 1990 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_textAtOffset */
+
+/* 1992 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 1994 */ NdrFcLong( 0x0 ), /* 0 */
+/* 1998 */ NdrFcShort( 0xd ), /* 13 */
+/* 2000 */ NdrFcShort( 0x1c ), /* x86 Stack size/offset = 28 */
+/* 2002 */ NdrFcShort( 0xe ), /* 14 */
+/* 2004 */ NdrFcShort( 0x40 ), /* 64 */
+/* 2006 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x6, /* 6 */
+/* 2008 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 2010 */ NdrFcShort( 0x1 ), /* 1 */
+/* 2012 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2014 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter offset */
+
+/* 2016 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2018 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 2020 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter boundaryType */
+
+/* 2022 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2024 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 2026 */ 0xd, /* FC_ENUM16 */
+ 0x0, /* 0 */
+
+ /* Parameter startOffset */
+
+/* 2028 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 2030 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 2032 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter endOffset */
+
+/* 2034 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 2036 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 2038 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter text */
+
+/* 2040 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 2042 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 2044 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+/* 2046 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2048 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */
+/* 2050 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure removeSelection */
+
+/* 2052 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2054 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2058 */ NdrFcShort( 0xe ), /* 14 */
+/* 2060 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 2062 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2064 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2066 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 2068 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 2070 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2072 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2074 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter selectionIndex */
+
+/* 2076 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2078 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 2080 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 2082 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2084 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 2086 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure setCaretOffset */
+
+/* 2088 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2090 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2094 */ NdrFcShort( 0xf ), /* 15 */
+/* 2096 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 2098 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2100 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2102 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 2104 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 2106 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2108 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2110 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter offset */
+
+/* 2112 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2114 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 2116 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 2118 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2120 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 2122 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure setSelection */
+
+/* 2124 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2126 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2130 */ NdrFcShort( 0x10 ), /* 16 */
+/* 2132 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 2134 */ NdrFcShort( 0x18 ), /* 24 */
+/* 2136 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2138 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x4, /* 4 */
+/* 2140 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 2142 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2144 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2146 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter selectionIndex */
+
+/* 2148 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2150 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 2152 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter startOffset */
+
+/* 2154 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2156 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 2158 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter endOffset */
+
+/* 2160 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2162 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 2164 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 2166 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2168 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 2170 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_nCharacters */
+
+/* 2172 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2174 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2178 */ NdrFcShort( 0x11 ), /* 17 */
+/* 2180 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 2182 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2184 */ NdrFcShort( 0x24 ), /* 36 */
+/* 2186 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 2188 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 2190 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2192 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2194 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter nCharacters */
+
+/* 2196 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 2198 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 2200 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 2202 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2204 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 2206 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure scrollSubstringTo */
+
+/* 2208 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2210 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2214 */ NdrFcShort( 0x12 ), /* 18 */
+/* 2216 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 2218 */ NdrFcShort( 0x16 ), /* 22 */
+/* 2220 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2222 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x4, /* 4 */
+/* 2224 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 2226 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2228 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2230 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter startIndex */
+
+/* 2232 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2234 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 2236 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter endIndex */
+
+/* 2238 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2240 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 2242 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter scrollType */
+
+/* 2244 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2246 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 2248 */ 0xd, /* FC_ENUM16 */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 2250 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2252 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 2254 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure scrollSubstringToPoint */
+
+/* 2256 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2258 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2262 */ NdrFcShort( 0x13 ), /* 19 */
+/* 2264 */ NdrFcShort( 0x1c ), /* x86 Stack size/offset = 28 */
+/* 2266 */ NdrFcShort( 0x26 ), /* 38 */
+/* 2268 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2270 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x6, /* 6 */
+/* 2272 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 2274 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2276 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2278 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter startIndex */
+
+/* 2280 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2282 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 2284 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter endIndex */
+
+/* 2286 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2288 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 2290 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter coordinateType */
+
+/* 2292 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2294 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 2296 */ 0xd, /* FC_ENUM16 */
+ 0x0, /* 0 */
+
+ /* Parameter x */
+
+/* 2298 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2300 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 2302 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter y */
+
+/* 2304 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2306 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 2308 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 2310 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2312 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */
+/* 2314 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_newText */
+
+/* 2316 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2318 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2322 */ NdrFcShort( 0x14 ), /* 20 */
+/* 2324 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 2326 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2328 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2330 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 2332 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 2334 */ NdrFcShort( 0x1 ), /* 1 */
+/* 2336 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2338 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter newText */
+
+/* 2340 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */
+/* 2342 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 2344 */ NdrFcShort( 0x528 ), /* Type Offset=1320 */
+
+ /* Return value */
+
+/* 2346 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2348 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 2350 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_oldText */
+
+/* 2352 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2354 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2358 */ NdrFcShort( 0x15 ), /* 21 */
+/* 2360 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 2362 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2364 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2366 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 2368 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 2370 */ NdrFcShort( 0x1 ), /* 1 */
+/* 2372 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2374 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter oldText */
+
+/* 2376 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */
+/* 2378 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 2380 */ NdrFcShort( 0x528 ), /* Type Offset=1320 */
+
+ /* Return value */
+
+/* 2382 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2384 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 2386 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_attributeRange */
+
+/* 2388 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2390 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2394 */ NdrFcShort( 0x16 ), /* 22 */
+/* 2396 */ NdrFcShort( 0x1c ), /* x86 Stack size/offset = 28 */
+/* 2398 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2400 */ NdrFcShort( 0x40 ), /* 64 */
+/* 2402 */ 0x47, /* Oi2 Flags: srv must size, clt must size, has return, has ext, */
+ 0x6, /* 6 */
+/* 2404 */ 0x8, /* 8 */
+ 0x7, /* Ext Flags: new corr desc, clt corr check, srv corr check, */
+/* 2406 */ NdrFcShort( 0x1 ), /* 1 */
+/* 2408 */ NdrFcShort( 0x1 ), /* 1 */
+/* 2410 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter offset */
+
+/* 2412 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2414 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 2416 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter filter */
+
+/* 2418 */ NdrFcShort( 0x8b ), /* Flags: must size, must free, in, by val, */
+/* 2420 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 2422 */ NdrFcShort( 0x10e ), /* Type Offset=270 */
+
+ /* Parameter startOffset */
+
+/* 2424 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 2426 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 2428 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter endOffset */
+
+/* 2430 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 2432 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 2434 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter attributeValues */
+
+/* 2436 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 2438 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 2440 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+/* 2442 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2444 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */
+/* 2446 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure deleteText */
+
+/* 2448 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2450 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2454 */ NdrFcShort( 0x4 ), /* 4 */
+/* 2456 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 2458 */ NdrFcShort( 0x10 ), /* 16 */
+/* 2460 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2462 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x3, /* 3 */
+/* 2464 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 2466 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2468 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2470 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter startOffset */
+
+/* 2472 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2474 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 2476 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter endOffset */
+
+/* 2478 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2480 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 2482 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 2484 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2486 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 2488 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure insertText */
+
+/* 2490 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2492 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2496 */ NdrFcShort( 0x5 ), /* 5 */
+/* 2498 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 2500 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2502 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2504 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 2506 */ 0x8, /* 8 */
+ 0x5, /* Ext Flags: new corr desc, srv corr check, */
+/* 2508 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2510 */ NdrFcShort( 0x1 ), /* 1 */
+/* 2512 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter offset */
+
+/* 2514 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2516 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 2518 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter text */
+
+/* 2520 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */
+/* 2522 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 2524 */ NdrFcShort( 0x10e ), /* Type Offset=270 */
+
+ /* Return value */
+
+/* 2526 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2528 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 2530 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure cutText */
+
+/* 2532 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2534 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2538 */ NdrFcShort( 0x6 ), /* 6 */
+/* 2540 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 2542 */ NdrFcShort( 0x10 ), /* 16 */
+/* 2544 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2546 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x3, /* 3 */
+/* 2548 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 2550 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2552 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2554 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter startOffset */
+
+/* 2556 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2558 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 2560 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter endOffset */
+
+/* 2562 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2564 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 2566 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 2568 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2570 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 2572 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure pasteText */
+
+/* 2574 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2576 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2580 */ NdrFcShort( 0x7 ), /* 7 */
+/* 2582 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 2584 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2586 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2588 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 2590 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 2592 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2594 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2596 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter offset */
+
+/* 2598 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2600 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 2602 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 2604 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2606 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 2608 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure replaceText */
+
+/* 2610 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2612 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2616 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2618 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 2620 */ NdrFcShort( 0x10 ), /* 16 */
+/* 2622 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2624 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */
+ 0x4, /* 4 */
+/* 2626 */ 0x8, /* 8 */
+ 0x5, /* Ext Flags: new corr desc, srv corr check, */
+/* 2628 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2630 */ NdrFcShort( 0x1 ), /* 1 */
+/* 2632 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter startOffset */
+
+/* 2634 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2636 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 2638 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter endOffset */
+
+/* 2640 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2642 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 2644 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter text */
+
+/* 2646 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */
+/* 2648 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 2650 */ NdrFcShort( 0x10e ), /* Type Offset=270 */
+
+ /* Return value */
+
+/* 2652 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2654 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 2656 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure setAttributes */
+
+/* 2658 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2660 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2664 */ NdrFcShort( 0x9 ), /* 9 */
+/* 2666 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 2668 */ NdrFcShort( 0x10 ), /* 16 */
+/* 2670 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2672 */ 0x46, /* Oi2 Flags: clt must size, has return, has ext, */
+ 0x4, /* 4 */
+/* 2674 */ 0x8, /* 8 */
+ 0x5, /* Ext Flags: new corr desc, srv corr check, */
+/* 2676 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2678 */ NdrFcShort( 0x1 ), /* 1 */
+/* 2680 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter startOffset */
+
+/* 2682 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2684 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 2686 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter endOffset */
+
+/* 2688 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2690 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 2692 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter attributes */
+
+/* 2694 */ NdrFcShort( 0x10b ), /* Flags: must size, must free, in, simple ref, */
+/* 2696 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 2698 */ NdrFcShort( 0x10e ), /* Type Offset=270 */
+
+ /* Return value */
+
+/* 2700 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2702 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 2704 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_anchor */
+
+/* 2706 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2708 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2712 */ NdrFcShort( 0x9 ), /* 9 */
+/* 2714 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 2716 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2718 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2720 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 2722 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 2724 */ NdrFcShort( 0x1 ), /* 1 */
+/* 2726 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2728 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter index */
+
+/* 2730 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2732 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 2734 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter anchor */
+
+/* 2736 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */
+/* 2738 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 2740 */ NdrFcShort( 0x4ee ), /* Type Offset=1262 */
+
+ /* Return value */
+
+/* 2742 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2744 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 2746 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_anchorTarget */
+
+/* 2748 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2750 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2754 */ NdrFcShort( 0xa ), /* 10 */
+/* 2756 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 2758 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2760 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2762 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 2764 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 2766 */ NdrFcShort( 0x1 ), /* 1 */
+/* 2768 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2770 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter index */
+
+/* 2772 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2774 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 2776 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter anchorTarget */
+
+/* 2778 */ NdrFcShort( 0x4113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=16 */
+/* 2780 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 2782 */ NdrFcShort( 0x4ee ), /* Type Offset=1262 */
+
+ /* Return value */
+
+/* 2784 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2786 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 2788 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_nRows */
+
+
+ /* Procedure get_startIndex */
+
+/* 2790 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2792 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2796 */ NdrFcShort( 0xb ), /* 11 */
+/* 2798 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 2800 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2802 */ NdrFcShort( 0x24 ), /* 36 */
+/* 2804 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 2806 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 2808 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2810 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2812 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter rowCount */
+
+
+ /* Parameter index */
+
+/* 2814 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 2816 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 2818 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+
+ /* Return value */
+
+/* 2820 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2822 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 2824 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_nSelectedChildren */
+
+
+ /* Procedure get_endIndex */
+
+/* 2826 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2828 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2832 */ NdrFcShort( 0xc ), /* 12 */
+/* 2834 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 2836 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2838 */ NdrFcShort( 0x24 ), /* 36 */
+/* 2840 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 2842 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 2844 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2846 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2848 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter cellCount */
+
+
+ /* Parameter index */
+
+/* 2850 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 2852 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 2854 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+
+ /* Return value */
+
+/* 2856 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2858 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 2860 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_valid */
+
+/* 2862 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2864 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2868 */ NdrFcShort( 0xd ), /* 13 */
+/* 2870 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 2872 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2874 */ NdrFcShort( 0x21 ), /* 33 */
+/* 2876 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 2878 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 2880 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2882 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2884 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter valid */
+
+/* 2886 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 2888 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 2890 */ 0x3, /* FC_SMALL */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 2892 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2894 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 2896 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_nHyperlinks */
+
+/* 2898 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2900 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2904 */ NdrFcShort( 0x16 ), /* 22 */
+/* 2906 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 2908 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2910 */ NdrFcShort( 0x24 ), /* 36 */
+/* 2912 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 2914 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 2916 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2918 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2920 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter hyperlinkCount */
+
+/* 2922 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 2924 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 2926 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 2928 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2930 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 2932 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_hyperlink */
+
+/* 2934 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2936 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2940 */ NdrFcShort( 0x17 ), /* 23 */
+/* 2942 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 2944 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2946 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2948 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 2950 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 2952 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2954 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2956 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter index */
+
+/* 2958 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 2960 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 2962 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter hyperlink */
+
+/* 2964 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
+/* 2966 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 2968 */ NdrFcShort( 0x540 ), /* Type Offset=1344 */
+
+ /* Return value */
+
+/* 2970 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 2972 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 2974 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_hyperlinkIndex */
+
+/* 2976 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 2978 */ NdrFcLong( 0x0 ), /* 0 */
+/* 2982 */ NdrFcShort( 0x18 ), /* 24 */
+/* 2984 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 2986 */ NdrFcShort( 0x8 ), /* 8 */
+/* 2988 */ NdrFcShort( 0x24 ), /* 36 */
+/* 2990 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x3, /* 3 */
+/* 2992 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 2994 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2996 */ NdrFcShort( 0x0 ), /* 0 */
+/* 2998 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter charIndex */
+
+/* 3000 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3002 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 3004 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter hyperlinkIndex */
+
+/* 3006 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3008 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 3010 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3012 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3014 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 3016 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_hyperlinks */
+
+/* 3018 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3020 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3024 */ NdrFcShort( 0x19 ), /* 25 */
+/* 3026 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 3028 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3030 */ NdrFcShort( 0x24 ), /* 36 */
+/* 3032 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 3034 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 3036 */ NdrFcShort( 0x1 ), /* 1 */
+/* 3038 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3040 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter hyperlinks */
+
+/* 3042 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
+/* 3044 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 3046 */ NdrFcShort( 0x556 ), /* Type Offset=1366 */
+
+ /* Parameter nHyperlinks */
+
+/* 3048 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3050 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 3052 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3054 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3056 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 3058 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_cellAt */
+
+
+ /* Procedure get_accessibleAt */
+
+/* 3060 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3062 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3066 */ NdrFcShort( 0x3 ), /* 3 */
+/* 3068 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 3070 */ NdrFcShort( 0x10 ), /* 16 */
+/* 3072 */ NdrFcShort( 0x8 ), /* 8 */
+/* 3074 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x4, /* 4 */
+/* 3076 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3078 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3080 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3082 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter row */
+
+
+ /* Parameter row */
+
+/* 3084 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3086 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 3088 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter column */
+
+
+ /* Parameter column */
+
+/* 3090 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3092 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 3094 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter cell */
+
+
+ /* Parameter accessible */
+
+/* 3096 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
+/* 3098 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 3100 */ NdrFcShort( 0x2e ), /* Type Offset=46 */
+
+ /* Return value */
+
+
+ /* Return value */
+
+/* 3102 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3104 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 3106 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_caption */
+
+
+ /* Procedure get_caption */
+
+/* 3108 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3110 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3114 */ NdrFcShort( 0x4 ), /* 4 */
+/* 3116 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 3118 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3120 */ NdrFcShort( 0x8 ), /* 8 */
+/* 3122 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 3124 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3126 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3128 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3130 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter accessible */
+
+
+ /* Parameter accessible */
+
+/* 3132 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
+/* 3134 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 3136 */ NdrFcShort( 0x2e ), /* Type Offset=46 */
+
+ /* Return value */
+
+
+ /* Return value */
+
+/* 3138 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3140 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 3142 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_childIndex */
+
+/* 3144 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3146 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3150 */ NdrFcShort( 0x5 ), /* 5 */
+/* 3152 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 3154 */ NdrFcShort( 0x10 ), /* 16 */
+/* 3156 */ NdrFcShort( 0x24 ), /* 36 */
+/* 3158 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x4, /* 4 */
+/* 3160 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3162 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3164 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3166 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter rowIndex */
+
+/* 3168 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3170 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 3172 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter columnIndex */
+
+/* 3174 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3176 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 3178 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter cellIndex */
+
+/* 3180 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3182 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 3184 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3186 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3188 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 3190 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_columnDescription */
+
+/* 3192 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3194 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3198 */ NdrFcShort( 0x6 ), /* 6 */
+/* 3200 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 3202 */ NdrFcShort( 0x8 ), /* 8 */
+/* 3204 */ NdrFcShort( 0x8 ), /* 8 */
+/* 3206 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 3208 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 3210 */ NdrFcShort( 0x1 ), /* 1 */
+/* 3212 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3214 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter column */
+
+/* 3216 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3218 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 3220 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter description */
+
+/* 3222 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 3224 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 3226 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+/* 3228 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3230 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 3232 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_columnExtentAt */
+
+/* 3234 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3236 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3240 */ NdrFcShort( 0x7 ), /* 7 */
+/* 3242 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 3244 */ NdrFcShort( 0x10 ), /* 16 */
+/* 3246 */ NdrFcShort( 0x24 ), /* 36 */
+/* 3248 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x4, /* 4 */
+/* 3250 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3252 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3254 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3256 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter row */
+
+/* 3258 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3260 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 3262 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter column */
+
+/* 3264 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3266 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 3268 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter nColumnsSpanned */
+
+/* 3270 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3272 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 3274 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3276 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3278 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 3280 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_columnHeader */
+
+/* 3282 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3284 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3288 */ NdrFcShort( 0x8 ), /* 8 */
+/* 3290 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 3292 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3294 */ NdrFcShort( 0x24 ), /* 36 */
+/* 3296 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 3298 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3300 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3302 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3304 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter accessibleTable */
+
+/* 3306 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
+/* 3308 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 3310 */ NdrFcShort( 0x574 ), /* Type Offset=1396 */
+
+ /* Parameter startingRowIndex */
+
+/* 3312 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3314 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 3316 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3318 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3320 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 3322 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_columnIndex */
+
+/* 3324 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3326 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3330 */ NdrFcShort( 0x9 ), /* 9 */
+/* 3332 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 3334 */ NdrFcShort( 0x8 ), /* 8 */
+/* 3336 */ NdrFcShort( 0x24 ), /* 36 */
+/* 3338 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x3, /* 3 */
+/* 3340 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3342 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3344 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3346 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter cellIndex */
+
+/* 3348 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3350 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 3352 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter columnIndex */
+
+/* 3354 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3356 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 3358 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3360 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3362 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 3364 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_nSelectedRows */
+
+
+ /* Procedure get_nColumns */
+
+/* 3366 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3368 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3372 */ NdrFcShort( 0xa ), /* 10 */
+/* 3374 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 3376 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3378 */ NdrFcShort( 0x24 ), /* 36 */
+/* 3380 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 3382 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3384 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3386 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3388 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter rowCount */
+
+
+ /* Parameter columnCount */
+
+/* 3390 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3392 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 3394 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+
+ /* Return value */
+
+/* 3396 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3398 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 3400 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_nSelectedColumns */
+
+/* 3402 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3404 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3408 */ NdrFcShort( 0xd ), /* 13 */
+/* 3410 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 3412 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3414 */ NdrFcShort( 0x24 ), /* 36 */
+/* 3416 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 3418 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3420 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3422 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3424 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter columnCount */
+
+/* 3426 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3428 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 3430 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3432 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3434 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 3436 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_nSelectedRows */
+
+/* 3438 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3440 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3444 */ NdrFcShort( 0xe ), /* 14 */
+/* 3446 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 3448 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3450 */ NdrFcShort( 0x24 ), /* 36 */
+/* 3452 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 3454 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3456 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3458 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3460 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter rowCount */
+
+/* 3462 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3464 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 3466 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3468 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3470 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 3472 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_rowDescription */
+
+/* 3474 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3476 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3480 */ NdrFcShort( 0xf ), /* 15 */
+/* 3482 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 3484 */ NdrFcShort( 0x8 ), /* 8 */
+/* 3486 */ NdrFcShort( 0x8 ), /* 8 */
+/* 3488 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 3490 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 3492 */ NdrFcShort( 0x1 ), /* 1 */
+/* 3494 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3496 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter row */
+
+/* 3498 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3500 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 3502 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter description */
+
+/* 3504 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 3506 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 3508 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+/* 3510 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3512 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 3514 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_rowExtentAt */
+
+/* 3516 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3518 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3522 */ NdrFcShort( 0x10 ), /* 16 */
+/* 3524 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 3526 */ NdrFcShort( 0x10 ), /* 16 */
+/* 3528 */ NdrFcShort( 0x24 ), /* 36 */
+/* 3530 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x4, /* 4 */
+/* 3532 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3534 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3536 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3538 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter row */
+
+/* 3540 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3542 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 3544 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter column */
+
+/* 3546 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3548 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 3550 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter nRowsSpanned */
+
+/* 3552 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3554 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 3556 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3558 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3560 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 3562 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_rowHeader */
+
+/* 3564 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3566 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3570 */ NdrFcShort( 0x11 ), /* 17 */
+/* 3572 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 3574 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3576 */ NdrFcShort( 0x24 ), /* 36 */
+/* 3578 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 3580 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3582 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3584 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3586 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter accessibleTable */
+
+/* 3588 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
+/* 3590 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 3592 */ NdrFcShort( 0x574 ), /* Type Offset=1396 */
+
+ /* Parameter startingColumnIndex */
+
+/* 3594 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3596 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 3598 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3600 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3602 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 3604 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_rowIndex */
+
+/* 3606 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3608 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3612 */ NdrFcShort( 0x12 ), /* 18 */
+/* 3614 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 3616 */ NdrFcShort( 0x8 ), /* 8 */
+/* 3618 */ NdrFcShort( 0x24 ), /* 36 */
+/* 3620 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x3, /* 3 */
+/* 3622 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3624 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3626 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3628 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter cellIndex */
+
+/* 3630 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3632 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 3634 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter rowIndex */
+
+/* 3636 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3638 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 3640 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3642 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3644 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 3646 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_selectedChildren */
+
+/* 3648 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3650 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3654 */ NdrFcShort( 0x13 ), /* 19 */
+/* 3656 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 3658 */ NdrFcShort( 0x8 ), /* 8 */
+/* 3660 */ NdrFcShort( 0x24 ), /* 36 */
+/* 3662 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x4, /* 4 */
+/* 3664 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 3666 */ NdrFcShort( 0x1 ), /* 1 */
+/* 3668 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3670 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter maxChildren */
+
+/* 3672 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3674 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 3676 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter children */
+
+/* 3678 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
+/* 3680 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 3682 */ NdrFcShort( 0x58a ), /* Type Offset=1418 */
+
+ /* Parameter nChildren */
+
+/* 3684 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3686 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 3688 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3690 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3692 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 3694 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_selectedColumns */
+
+/* 3696 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3698 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3702 */ NdrFcShort( 0x14 ), /* 20 */
+/* 3704 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 3706 */ NdrFcShort( 0x8 ), /* 8 */
+/* 3708 */ NdrFcShort( 0x24 ), /* 36 */
+/* 3710 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x4, /* 4 */
+/* 3712 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 3714 */ NdrFcShort( 0x1 ), /* 1 */
+/* 3716 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3718 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter maxColumns */
+
+/* 3720 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3722 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 3724 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter columns */
+
+/* 3726 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
+/* 3728 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 3730 */ NdrFcShort( 0x58a ), /* Type Offset=1418 */
+
+ /* Parameter nColumns */
+
+/* 3732 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3734 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 3736 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3738 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3740 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 3742 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_selectedRows */
+
+/* 3744 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3746 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3750 */ NdrFcShort( 0x15 ), /* 21 */
+/* 3752 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 3754 */ NdrFcShort( 0x8 ), /* 8 */
+/* 3756 */ NdrFcShort( 0x24 ), /* 36 */
+/* 3758 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x4, /* 4 */
+/* 3760 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 3762 */ NdrFcShort( 0x1 ), /* 1 */
+/* 3764 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3766 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter maxRows */
+
+/* 3768 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3770 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 3772 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter rows */
+
+/* 3774 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
+/* 3776 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 3778 */ NdrFcShort( 0x58a ), /* Type Offset=1418 */
+
+ /* Parameter nRows */
+
+/* 3780 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3782 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 3784 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3786 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3788 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 3790 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_summary */
+
+/* 3792 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3794 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3798 */ NdrFcShort( 0x16 ), /* 22 */
+/* 3800 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 3802 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3804 */ NdrFcShort( 0x8 ), /* 8 */
+/* 3806 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 3808 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3810 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3812 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3814 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter accessible */
+
+/* 3816 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
+/* 3818 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 3820 */ NdrFcShort( 0x2e ), /* Type Offset=46 */
+
+ /* Return value */
+
+/* 3822 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3824 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 3826 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_isColumnSelected */
+
+/* 3828 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3830 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3834 */ NdrFcShort( 0x17 ), /* 23 */
+/* 3836 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 3838 */ NdrFcShort( 0x8 ), /* 8 */
+/* 3840 */ NdrFcShort( 0x21 ), /* 33 */
+/* 3842 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x3, /* 3 */
+/* 3844 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3846 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3848 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3850 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter column */
+
+/* 3852 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3854 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 3856 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter isSelected */
+
+/* 3858 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3860 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 3862 */ 0x3, /* FC_SMALL */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3864 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3866 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 3868 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_isRowSelected */
+
+/* 3870 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3872 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3876 */ NdrFcShort( 0x18 ), /* 24 */
+/* 3878 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 3880 */ NdrFcShort( 0x8 ), /* 8 */
+/* 3882 */ NdrFcShort( 0x21 ), /* 33 */
+/* 3884 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x3, /* 3 */
+/* 3886 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3888 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3890 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3892 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter row */
+
+/* 3894 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3896 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 3898 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter isSelected */
+
+/* 3900 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3902 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 3904 */ 0x3, /* FC_SMALL */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3906 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3908 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 3910 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_isSelected */
+
+/* 3912 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3914 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3918 */ NdrFcShort( 0x19 ), /* 25 */
+/* 3920 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 3922 */ NdrFcShort( 0x10 ), /* 16 */
+/* 3924 */ NdrFcShort( 0x21 ), /* 33 */
+/* 3926 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x4, /* 4 */
+/* 3928 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3930 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3932 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3934 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter row */
+
+/* 3936 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3938 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 3940 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter column */
+
+/* 3942 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3944 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 3946 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter isSelected */
+
+/* 3948 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 3950 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 3952 */ 0x3, /* FC_SMALL */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3954 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3956 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 3958 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure selectRow */
+
+/* 3960 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3962 */ NdrFcLong( 0x0 ), /* 0 */
+/* 3966 */ NdrFcShort( 0x1a ), /* 26 */
+/* 3968 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 3970 */ NdrFcShort( 0x8 ), /* 8 */
+/* 3972 */ NdrFcShort( 0x8 ), /* 8 */
+/* 3974 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 3976 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 3978 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3980 */ NdrFcShort( 0x0 ), /* 0 */
+/* 3982 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter row */
+
+/* 3984 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 3986 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 3988 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 3990 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 3992 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 3994 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure selectColumn */
+
+/* 3996 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 3998 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4002 */ NdrFcShort( 0x1b ), /* 27 */
+/* 4004 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 4006 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4008 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4010 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 4012 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4014 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4016 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4018 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter column */
+
+/* 4020 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 4022 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 4024 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4026 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4028 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 4030 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure unselectRow */
+
+/* 4032 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4034 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4038 */ NdrFcShort( 0x1c ), /* 28 */
+/* 4040 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 4042 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4044 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4046 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 4048 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4050 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4052 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4054 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter row */
+
+/* 4056 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 4058 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 4060 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4062 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4064 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 4066 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure unselectColumn */
+
+/* 4068 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4070 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4074 */ NdrFcShort( 0x1d ), /* 29 */
+/* 4076 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 4078 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4080 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4082 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 4084 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4086 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4088 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4090 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter column */
+
+/* 4092 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 4094 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 4096 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4098 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4100 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 4102 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_rowColumnExtentsAtIndex */
+
+/* 4104 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4106 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4110 */ NdrFcShort( 0x1e ), /* 30 */
+/* 4112 */ NdrFcShort( 0x20 ), /* x86 Stack size/offset = 32 */
+/* 4114 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4116 */ NdrFcShort( 0x91 ), /* 145 */
+/* 4118 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x7, /* 7 */
+/* 4120 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4122 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4124 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4126 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter index */
+
+/* 4128 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 4130 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 4132 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter row */
+
+/* 4134 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4136 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 4138 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter column */
+
+/* 4140 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4142 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 4144 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter rowExtents */
+
+/* 4146 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4148 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 4150 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter columnExtents */
+
+/* 4152 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4154 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 4156 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter isSelected */
+
+/* 4158 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4160 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */
+/* 4162 */ 0x3, /* FC_SMALL */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4164 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4166 */ NdrFcShort( 0x1c ), /* x86 Stack size/offset = 28 */
+/* 4168 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_modelChange */
+
+/* 4170 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4172 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4176 */ NdrFcShort( 0x1f ), /* 31 */
+/* 4178 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 4180 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4182 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4184 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 4186 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4188 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4190 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4192 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter modelChange */
+
+/* 4194 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */
+/* 4196 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 4198 */ NdrFcShort( 0x5a8 ), /* Type Offset=1448 */
+
+ /* Return value */
+
+/* 4200 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4202 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 4204 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_rowExtent */
+
+
+ /* Procedure get_nColumns */
+
+/* 4206 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4208 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4212 */ NdrFcShort( 0x6 ), /* 6 */
+/* 4214 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 4216 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4218 */ NdrFcShort( 0x24 ), /* 36 */
+/* 4220 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 4222 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4224 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4226 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4228 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter nRowsSpanned */
+
+
+ /* Parameter columnCount */
+
+/* 4230 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4232 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 4234 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+
+ /* Return value */
+
+/* 4236 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4238 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 4240 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_rowIndex */
+
+
+ /* Procedure get_nSelectedCells */
+
+/* 4242 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4244 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4248 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4250 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 4252 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4254 */ NdrFcShort( 0x24 ), /* 36 */
+/* 4256 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 4258 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4260 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4262 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4264 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter rowIndex */
+
+
+ /* Parameter cellCount */
+
+/* 4266 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4268 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 4270 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+
+ /* Return value */
+
+/* 4272 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4274 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 4276 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_nSelectedColumns */
+
+/* 4278 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4280 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4284 */ NdrFcShort( 0x9 ), /* 9 */
+/* 4286 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 4288 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4290 */ NdrFcShort( 0x24 ), /* 36 */
+/* 4292 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 4294 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4296 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4298 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4300 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter columnCount */
+
+/* 4302 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4304 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 4306 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4308 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4310 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 4312 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_rowDescription */
+
+/* 4314 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4316 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4320 */ NdrFcShort( 0xb ), /* 11 */
+/* 4322 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 4324 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4326 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4328 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 4330 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 4332 */ NdrFcShort( 0x1 ), /* 1 */
+/* 4334 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4336 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter row */
+
+/* 4338 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 4340 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 4342 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter description */
+
+/* 4344 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 4346 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 4348 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+/* 4350 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4352 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 4354 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_selectedCells */
+
+/* 4356 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4358 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4362 */ NdrFcShort( 0xc ), /* 12 */
+/* 4364 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 4366 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4368 */ NdrFcShort( 0x24 ), /* 36 */
+/* 4370 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 4372 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 4374 */ NdrFcShort( 0x1 ), /* 1 */
+/* 4376 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4378 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter cells */
+
+/* 4380 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
+/* 4382 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 4384 */ NdrFcShort( 0x5b6 ), /* Type Offset=1462 */
+
+ /* Parameter nSelectedCells */
+
+/* 4386 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4388 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 4390 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4392 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4394 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 4396 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_selectedColumns */
+
+/* 4398 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4400 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4404 */ NdrFcShort( 0xd ), /* 13 */
+/* 4406 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 4408 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4410 */ NdrFcShort( 0x24 ), /* 36 */
+/* 4412 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 4414 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 4416 */ NdrFcShort( 0x1 ), /* 1 */
+/* 4418 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4420 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter selectedColumns */
+
+/* 4422 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
+/* 4424 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 4426 */ NdrFcShort( 0x5d4 ), /* Type Offset=1492 */
+
+ /* Parameter nColumns */
+
+/* 4428 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4430 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 4432 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4434 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4436 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 4438 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_selectedRows */
+
+/* 4440 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4442 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4446 */ NdrFcShort( 0xe ), /* 14 */
+/* 4448 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 4450 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4452 */ NdrFcShort( 0x24 ), /* 36 */
+/* 4454 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 4456 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 4458 */ NdrFcShort( 0x1 ), /* 1 */
+/* 4460 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4462 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter selectedRows */
+
+/* 4464 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
+/* 4466 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 4468 */ NdrFcShort( 0x5d4 ), /* Type Offset=1492 */
+
+ /* Parameter nRows */
+
+/* 4470 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4472 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 4474 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4476 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4478 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 4480 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_summary */
+
+/* 4482 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4484 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4488 */ NdrFcShort( 0xf ), /* 15 */
+/* 4490 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 4492 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4494 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4496 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 4498 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4500 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4502 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4504 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter accessible */
+
+/* 4506 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
+/* 4508 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 4510 */ NdrFcShort( 0x2e ), /* Type Offset=46 */
+
+ /* Return value */
+
+/* 4512 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4514 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 4516 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_isColumnSelected */
+
+/* 4518 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4520 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4524 */ NdrFcShort( 0x10 ), /* 16 */
+/* 4526 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 4528 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4530 */ NdrFcShort( 0x21 ), /* 33 */
+/* 4532 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x3, /* 3 */
+/* 4534 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4536 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4538 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4540 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter column */
+
+/* 4542 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 4544 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 4546 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter isSelected */
+
+/* 4548 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4550 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 4552 */ 0x3, /* FC_SMALL */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4554 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4556 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 4558 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_isRowSelected */
+
+/* 4560 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4562 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4566 */ NdrFcShort( 0x11 ), /* 17 */
+/* 4568 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 4570 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4572 */ NdrFcShort( 0x21 ), /* 33 */
+/* 4574 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x3, /* 3 */
+/* 4576 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4578 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4580 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4582 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter row */
+
+/* 4584 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 4586 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 4588 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter isSelected */
+
+/* 4590 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4592 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 4594 */ 0x3, /* FC_SMALL */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4596 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4598 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 4600 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure selectRow */
+
+/* 4602 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4604 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4608 */ NdrFcShort( 0x12 ), /* 18 */
+/* 4610 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 4612 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4614 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4616 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 4618 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4620 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4622 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4624 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter row */
+
+/* 4626 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 4628 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 4630 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4632 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4634 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 4636 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure selectColumn */
+
+/* 4638 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4640 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4644 */ NdrFcShort( 0x13 ), /* 19 */
+/* 4646 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 4648 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4650 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4652 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 4654 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4656 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4658 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4660 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter column */
+
+/* 4662 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 4664 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 4666 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4668 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4670 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 4672 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure unselectRow */
+
+/* 4674 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4676 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4680 */ NdrFcShort( 0x14 ), /* 20 */
+/* 4682 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 4684 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4686 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4688 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 4690 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4692 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4694 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4696 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter row */
+
+/* 4698 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 4700 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 4702 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4704 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4706 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 4708 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure unselectColumn */
+
+/* 4710 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4712 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4716 */ NdrFcShort( 0x15 ), /* 21 */
+/* 4718 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 4720 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4722 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4724 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 4726 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4728 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4730 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4732 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter column */
+
+/* 4734 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 4736 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 4738 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4740 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4742 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 4744 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_modelChange */
+
+/* 4746 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4748 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4752 */ NdrFcShort( 0x16 ), /* 22 */
+/* 4754 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 4756 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4758 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4760 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 4762 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4764 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4766 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4768 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter modelChange */
+
+/* 4770 */ NdrFcShort( 0x6113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=24 */
+/* 4772 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 4774 */ NdrFcShort( 0x5a8 ), /* Type Offset=1448 */
+
+ /* Return value */
+
+/* 4776 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4778 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 4780 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_columnHeaderCells */
+
+/* 4782 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4784 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4788 */ NdrFcShort( 0x4 ), /* 4 */
+/* 4790 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 4792 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4794 */ NdrFcShort( 0x24 ), /* 36 */
+/* 4796 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 4798 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 4800 */ NdrFcShort( 0x1 ), /* 1 */
+/* 4802 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4804 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter cellAccessibles */
+
+/* 4806 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
+/* 4808 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 4810 */ NdrFcShort( 0x5b6 ), /* Type Offset=1462 */
+
+ /* Parameter nColumnHeaderCells */
+
+/* 4812 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4814 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 4816 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4818 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4820 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 4822 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_rowHeaderCells */
+
+/* 4824 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4826 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4830 */ NdrFcShort( 0x7 ), /* 7 */
+/* 4832 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 4834 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4836 */ NdrFcShort( 0x24 ), /* 36 */
+/* 4838 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x3, /* 3 */
+/* 4840 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 4842 */ NdrFcShort( 0x1 ), /* 1 */
+/* 4844 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4846 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter cellAccessibles */
+
+/* 4848 */ NdrFcShort( 0x2013 ), /* Flags: must size, must free, out, srv alloc size=8 */
+/* 4850 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 4852 */ NdrFcShort( 0x5b6 ), /* Type Offset=1462 */
+
+ /* Parameter nRowHeaderCells */
+
+/* 4854 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4856 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 4858 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4860 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4862 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 4864 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_isSelected */
+
+/* 4866 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4868 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4872 */ NdrFcShort( 0x9 ), /* 9 */
+/* 4874 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 4876 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4878 */ NdrFcShort( 0x21 ), /* 33 */
+/* 4880 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x2, /* 2 */
+/* 4882 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4884 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4886 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4888 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter isSelected */
+
+/* 4890 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4892 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 4894 */ 0x3, /* FC_SMALL */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4896 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4898 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 4900 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_rowColumnExtents */
+
+/* 4902 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4904 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4908 */ NdrFcShort( 0xa ), /* 10 */
+/* 4910 */ NdrFcShort( 0x1c ), /* x86 Stack size/offset = 28 */
+/* 4912 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4914 */ NdrFcShort( 0x91 ), /* 145 */
+/* 4916 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x6, /* 6 */
+/* 4918 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4920 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4922 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4924 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter row */
+
+/* 4926 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4928 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 4930 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter column */
+
+/* 4932 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4934 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 4936 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter rowExtents */
+
+/* 4938 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4940 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 4942 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter columnExtents */
+
+/* 4944 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4946 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 4948 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter isSelected */
+
+/* 4950 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 4952 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 4954 */ 0x3, /* FC_SMALL */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 4956 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4958 */ NdrFcShort( 0x18 ), /* x86 Stack size/offset = 24 */
+/* 4960 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_table */
+
+/* 4962 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 4964 */ NdrFcLong( 0x0 ), /* 0 */
+/* 4968 */ NdrFcShort( 0xb ), /* 11 */
+/* 4970 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 4972 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4974 */ NdrFcShort( 0x8 ), /* 8 */
+/* 4976 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 4978 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 4980 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4982 */ NdrFcShort( 0x0 ), /* 0 */
+/* 4984 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter table */
+
+/* 4986 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
+/* 4988 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 4990 */ NdrFcShort( 0x2e ), /* Type Offset=46 */
+
+ /* Return value */
+
+/* 4992 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 4994 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 4996 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_imagePosition */
+
+/* 4998 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 5000 */ NdrFcLong( 0x0 ), /* 0 */
+/* 5004 */ NdrFcShort( 0x4 ), /* 4 */
+/* 5006 */ NdrFcShort( 0x14 ), /* x86 Stack size/offset = 20 */
+/* 5008 */ NdrFcShort( 0x6 ), /* 6 */
+/* 5010 */ NdrFcShort( 0x40 ), /* 64 */
+/* 5012 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x4, /* 4 */
+/* 5014 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 5016 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5018 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5020 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter coordinateType */
+
+/* 5022 */ NdrFcShort( 0x48 ), /* Flags: in, base type, */
+/* 5024 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 5026 */ 0xd, /* FC_ENUM16 */
+ 0x0, /* 0 */
+
+ /* Parameter x */
+
+/* 5028 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 5030 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 5032 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter y */
+
+/* 5034 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 5036 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 5038 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 5040 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 5042 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 5044 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_imageSize */
+
+/* 5046 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 5048 */ NdrFcLong( 0x0 ), /* 0 */
+/* 5052 */ NdrFcShort( 0x5 ), /* 5 */
+/* 5054 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 5056 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5058 */ NdrFcShort( 0x40 ), /* 64 */
+/* 5060 */ 0x44, /* Oi2 Flags: has return, has ext, */
+ 0x3, /* 3 */
+/* 5062 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 5064 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5066 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5068 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter height */
+
+/* 5070 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 5072 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 5074 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Parameter width */
+
+/* 5076 */ NdrFcShort( 0x2150 ), /* Flags: out, base type, simple ref, srv alloc size=8 */
+/* 5078 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 5080 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Return value */
+
+/* 5082 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 5084 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 5086 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_toolkitName */
+
+/* 5088 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 5090 */ NdrFcLong( 0x0 ), /* 0 */
+/* 5094 */ NdrFcShort( 0x5 ), /* 5 */
+/* 5096 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 5098 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5100 */ NdrFcShort( 0x8 ), /* 8 */
+/* 5102 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 5104 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 5106 */ NdrFcShort( 0x1 ), /* 1 */
+/* 5108 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5110 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter name */
+
+/* 5112 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 5114 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 5116 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+/* 5118 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 5120 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 5122 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_toolkitVersion */
+
+/* 5124 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 5126 */ NdrFcLong( 0x0 ), /* 0 */
+/* 5130 */ NdrFcShort( 0x6 ), /* 6 */
+/* 5132 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 5134 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5136 */ NdrFcShort( 0x8 ), /* 8 */
+/* 5138 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 5140 */ 0x8, /* 8 */
+ 0x3, /* Ext Flags: new corr desc, clt corr check, */
+/* 5142 */ NdrFcShort( 0x1 ), /* 1 */
+/* 5144 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5146 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter version */
+
+/* 5148 */ NdrFcShort( 0x2113 ), /* Flags: must size, must free, out, simple ref, srv alloc size=8 */
+/* 5150 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 5152 */ NdrFcShort( 0x20 ), /* Type Offset=32 */
+
+ /* Return value */
+
+/* 5154 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 5156 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 5158 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ /* Procedure get_anchorTarget */
+
+/* 5160 */ 0x33, /* FC_AUTO_HANDLE */
+ 0x6c, /* Old Flags: object, Oi2 */
+/* 5162 */ NdrFcLong( 0x0 ), /* 0 */
+/* 5166 */ NdrFcShort( 0x3 ), /* 3 */
+/* 5168 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 5170 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5172 */ NdrFcShort( 0x8 ), /* 8 */
+/* 5174 */ 0x45, /* Oi2 Flags: srv must size, has return, has ext, */
+ 0x2, /* 2 */
+/* 5176 */ 0x8, /* 8 */
+ 0x1, /* Ext Flags: new corr desc, */
+/* 5178 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5180 */ NdrFcShort( 0x0 ), /* 0 */
+/* 5182 */ NdrFcShort( 0x0 ), /* 0 */
+
+ /* Parameter accessible */
+
+/* 5184 */ NdrFcShort( 0x13 ), /* Flags: must size, must free, out, */
+/* 5186 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 5188 */ NdrFcShort( 0x2e ), /* Type Offset=46 */
+
+ /* Return value */
+
+/* 5190 */ NdrFcShort( 0x70 ), /* Flags: out, return, base type, */
+/* 5192 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 5194 */ 0x8, /* FC_LONG */
+ 0x0, /* 0 */
+
+ 0x0
+ }
+ };
+
+static const ia2_api_all_MIDL_TYPE_FORMAT_STRING ia2_api_all__MIDL_TypeFormatString =
+ {
+ 0,
+ {
+ NdrFcShort( 0x0 ), /* 0 */
+/* 2 */
+ 0x11, 0x4, /* FC_RP [alloced_on_stack] */
+/* 4 */ NdrFcShort( 0x1c ), /* Offset= 28 (32) */
+/* 6 */
+ 0x13, 0x0, /* FC_OP */
+/* 8 */ NdrFcShort( 0xe ), /* Offset= 14 (22) */
+/* 10 */
+ 0x1b, /* FC_CARRAY */
+ 0x1, /* 1 */
+/* 12 */ NdrFcShort( 0x2 ), /* 2 */
+/* 14 */ 0x9, /* Corr desc: FC_ULONG */
+ 0x0, /* */
+/* 16 */ NdrFcShort( 0xfffc ), /* -4 */
+/* 18 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 20 */ 0x6, /* FC_SHORT */
+ 0x5b, /* FC_END */
+/* 22 */
+ 0x17, /* FC_CSTRUCT */
+ 0x3, /* 3 */
+/* 24 */ NdrFcShort( 0x8 ), /* 8 */
+/* 26 */ NdrFcShort( 0xfff0 ), /* Offset= -16 (10) */
+/* 28 */ 0x8, /* FC_LONG */
+ 0x8, /* FC_LONG */
+/* 30 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 32 */ 0xb4, /* FC_USER_MARSHAL */
+ 0x83, /* 131 */
+/* 34 */ NdrFcShort( 0x0 ), /* 0 */
+/* 36 */ NdrFcShort( 0x4 ), /* 4 */
+/* 38 */ NdrFcShort( 0x0 ), /* 0 */
+/* 40 */ NdrFcShort( 0xffde ), /* Offset= -34 (6) */
+/* 42 */
+ 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
+/* 44 */ 0x8, /* FC_LONG */
+ 0x5c, /* FC_PAD */
+/* 46 */
+ 0x11, 0x10, /* FC_RP [pointer_deref] */
+/* 48 */ NdrFcShort( 0x2 ), /* Offset= 2 (50) */
+/* 50 */
+ 0x2f, /* FC_IP */
+ 0x5a, /* FC_CONSTANT_IID */
+/* 52 */ NdrFcLong( 0x0 ), /* 0 */
+/* 56 */ NdrFcShort( 0x0 ), /* 0 */
+/* 58 */ NdrFcShort( 0x0 ), /* 0 */
+/* 60 */ 0xc0, /* 192 */
+ 0x0, /* 0 */
+/* 62 */ 0x0, /* 0 */
+ 0x0, /* 0 */
+/* 64 */ 0x0, /* 0 */
+ 0x0, /* 0 */
+/* 66 */ 0x0, /* 0 */
+ 0x46, /* 70 */
+/* 68 */
+ 0x11, 0x0, /* FC_RP */
+/* 70 */ NdrFcShort( 0x2 ), /* Offset= 2 (72) */
+/* 72 */
+ 0x21, /* FC_BOGUS_ARRAY */
+ 0x3, /* 3 */
+/* 74 */ NdrFcShort( 0x0 ), /* 0 */
+/* 76 */ 0x28, /* Corr desc: parameter, FC_LONG */
+ 0x0, /* */
+/* 78 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 80 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 82 */ 0x28, /* Corr desc: parameter, FC_LONG */
+ 0x54, /* FC_DEREFERENCE */
+/* 84 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 86 */ NdrFcShort( 0x0 ), /* Corr flags: */
+/* 88 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 90 */ NdrFcShort( 0xffd8 ), /* Offset= -40 (50) */
+/* 92 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 94 */
+ 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */
+/* 96 */ NdrFcShort( 0x2 ), /* Offset= 2 (98) */
+/* 98 */
+ 0x13, 0x0, /* FC_OP */
+/* 100 */ NdrFcShort( 0x2 ), /* Offset= 2 (102) */
+/* 102 */
+ 0x21, /* FC_BOGUS_ARRAY */
+ 0x3, /* 3 */
+/* 104 */ NdrFcShort( 0x0 ), /* 0 */
+/* 106 */ 0x28, /* Corr desc: parameter, FC_LONG */
+ 0x0, /* */
+/* 108 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 110 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 112 */ 0x28, /* Corr desc: parameter, FC_LONG */
+ 0x54, /* FC_DEREFERENCE */
+/* 114 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 116 */ NdrFcShort( 0x0 ), /* Corr flags: */
+/* 118 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 120 */ NdrFcShort( 0xffa8 ), /* Offset= -88 (32) */
+/* 122 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 124 */
+ 0x11, 0x10, /* FC_RP [pointer_deref] */
+/* 126 */ NdrFcShort( 0x2 ), /* Offset= 2 (128) */
+/* 128 */
+ 0x2f, /* FC_IP */
+ 0x5a, /* FC_CONSTANT_IID */
+/* 130 */ NdrFcLong( 0x7cdf86ee ), /* 2095023854 */
+/* 134 */ NdrFcShort( 0xc3da ), /* -15398 */
+/* 136 */ NdrFcShort( 0x496a ), /* 18794 */
+/* 138 */ 0xbd, /* 189 */
+ 0xa4, /* 164 */
+/* 140 */ 0x28, /* 40 */
+ 0x1b, /* 27 */
+/* 142 */ 0x33, /* 51 */
+ 0x6e, /* 110 */
+/* 144 */ 0x1f, /* 31 */
+ 0xdc, /* 220 */
+/* 146 */
+ 0x11, 0x0, /* FC_RP */
+/* 148 */ NdrFcShort( 0x2 ), /* Offset= 2 (150) */
+/* 150 */
+ 0x21, /* FC_BOGUS_ARRAY */
+ 0x3, /* 3 */
+/* 152 */ NdrFcShort( 0x0 ), /* 0 */
+/* 154 */ 0x28, /* Corr desc: parameter, FC_LONG */
+ 0x0, /* */
+/* 156 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 158 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 160 */ 0x28, /* Corr desc: parameter, FC_LONG */
+ 0x54, /* FC_DEREFERENCE */
+/* 162 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 164 */ NdrFcShort( 0x0 ), /* Corr flags: */
+/* 166 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 168 */ NdrFcShort( 0xffd8 ), /* Offset= -40 (128) */
+/* 170 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 172 */
+ 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */
+/* 174 */ NdrFcShort( 0x2 ), /* Offset= 2 (176) */
+/* 176 */
+ 0x13, 0x0, /* FC_OP */
+/* 178 */ NdrFcShort( 0x2 ), /* Offset= 2 (180) */
+/* 180 */
+ 0x21, /* FC_BOGUS_ARRAY */
+ 0x3, /* 3 */
+/* 182 */ NdrFcShort( 0x0 ), /* 0 */
+/* 184 */ 0x28, /* Corr desc: parameter, FC_LONG */
+ 0x0, /* */
+/* 186 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 188 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 190 */ 0x28, /* Corr desc: parameter, FC_LONG */
+ 0x54, /* FC_DEREFERENCE */
+/* 192 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 194 */ NdrFcShort( 0x0 ), /* Corr flags: */
+/* 196 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 198 */ NdrFcShort( 0xff5a ), /* Offset= -166 (32) */
+/* 200 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 202 */
+ 0x11, 0x4, /* FC_RP [alloced_on_stack] */
+/* 204 */ NdrFcShort( 0x1a ), /* Offset= 26 (230) */
+/* 206 */
+ 0x13, 0x0, /* FC_OP */
+/* 208 */ NdrFcShort( 0x2 ), /* Offset= 2 (210) */
+/* 210 */
+ 0x2a, /* FC_ENCAPSULATED_UNION */
+ 0x48, /* 72 */
+/* 212 */ NdrFcShort( 0x4 ), /* 4 */
+/* 214 */ NdrFcShort( 0x2 ), /* 2 */
+/* 216 */ NdrFcLong( 0x48746457 ), /* 1215587415 */
+/* 220 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
+/* 222 */ NdrFcLong( 0x52746457 ), /* 1383359575 */
+/* 226 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
+/* 228 */ NdrFcShort( 0xffff ), /* Offset= -1 (227) */
+/* 230 */ 0xb4, /* FC_USER_MARSHAL */
+ 0x83, /* 131 */
+/* 232 */ NdrFcShort( 0x1 ), /* 1 */
+/* 234 */ NdrFcShort( 0x4 ), /* 4 */
+/* 236 */ NdrFcShort( 0x0 ), /* 0 */
+/* 238 */ NdrFcShort( 0xffe0 ), /* Offset= -32 (206) */
+/* 240 */
+ 0x11, 0x4, /* FC_RP [alloced_on_stack] */
+/* 242 */ NdrFcShort( 0x2 ), /* Offset= 2 (244) */
+/* 244 */
+ 0x1a, /* FC_BOGUS_STRUCT */
+ 0x3, /* 3 */
+/* 246 */ NdrFcShort( 0xc ), /* 12 */
+/* 248 */ NdrFcShort( 0x0 ), /* 0 */
+/* 250 */ NdrFcShort( 0x0 ), /* Offset= 0 (250) */
+/* 252 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 254 */ NdrFcShort( 0xff22 ), /* Offset= -222 (32) */
+/* 256 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 258 */ NdrFcShort( 0xff1e ), /* Offset= -226 (32) */
+/* 260 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 262 */ NdrFcShort( 0xff1a ), /* Offset= -230 (32) */
+/* 264 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 266 */
+ 0x12, 0x0, /* FC_UP */
+/* 268 */ NdrFcShort( 0xff0a ), /* Offset= -246 (22) */
+/* 270 */ 0xb4, /* FC_USER_MARSHAL */
+ 0x83, /* 131 */
+/* 272 */ NdrFcShort( 0x0 ), /* 0 */
+/* 274 */ NdrFcShort( 0x4 ), /* 4 */
+/* 276 */ NdrFcShort( 0x0 ), /* 0 */
+/* 278 */ NdrFcShort( 0xfff4 ), /* Offset= -12 (266) */
+/* 280 */
+ 0x11, 0x4, /* FC_RP [alloced_on_stack] */
+/* 282 */ NdrFcShort( 0x3d4 ), /* Offset= 980 (1262) */
+/* 284 */
+ 0x13, 0x0, /* FC_OP */
+/* 286 */ NdrFcShort( 0x3bc ), /* Offset= 956 (1242) */
+/* 288 */
+ 0x2b, /* FC_NON_ENCAPSULATED_UNION */
+ 0x9, /* FC_ULONG */
+/* 290 */ 0x7, /* Corr desc: FC_USHORT */
+ 0x0, /* */
+/* 292 */ NdrFcShort( 0xfff8 ), /* -8 */
+/* 294 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 296 */ NdrFcShort( 0x2 ), /* Offset= 2 (298) */
+/* 298 */ NdrFcShort( 0x10 ), /* 16 */
+/* 300 */ NdrFcShort( 0x2f ), /* 47 */
+/* 302 */ NdrFcLong( 0x14 ), /* 20 */
+/* 306 */ NdrFcShort( 0x800b ), /* Simple arm type: FC_HYPER */
+/* 308 */ NdrFcLong( 0x3 ), /* 3 */
+/* 312 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
+/* 314 */ NdrFcLong( 0x11 ), /* 17 */
+/* 318 */ NdrFcShort( 0x8001 ), /* Simple arm type: FC_BYTE */
+/* 320 */ NdrFcLong( 0x2 ), /* 2 */
+/* 324 */ NdrFcShort( 0x8006 ), /* Simple arm type: FC_SHORT */
+/* 326 */ NdrFcLong( 0x4 ), /* 4 */
+/* 330 */ NdrFcShort( 0x800a ), /* Simple arm type: FC_FLOAT */
+/* 332 */ NdrFcLong( 0x5 ), /* 5 */
+/* 336 */ NdrFcShort( 0x800c ), /* Simple arm type: FC_DOUBLE */
+/* 338 */ NdrFcLong( 0xb ), /* 11 */
+/* 342 */ NdrFcShort( 0x8006 ), /* Simple arm type: FC_SHORT */
+/* 344 */ NdrFcLong( 0xa ), /* 10 */
+/* 348 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
+/* 350 */ NdrFcLong( 0x6 ), /* 6 */
+/* 354 */ NdrFcShort( 0xe8 ), /* Offset= 232 (586) */
+/* 356 */ NdrFcLong( 0x7 ), /* 7 */
+/* 360 */ NdrFcShort( 0x800c ), /* Simple arm type: FC_DOUBLE */
+/* 362 */ NdrFcLong( 0x8 ), /* 8 */
+/* 366 */ NdrFcShort( 0xfe98 ), /* Offset= -360 (6) */
+/* 368 */ NdrFcLong( 0xd ), /* 13 */
+/* 372 */ NdrFcShort( 0xfebe ), /* Offset= -322 (50) */
+/* 374 */ NdrFcLong( 0x9 ), /* 9 */
+/* 378 */ NdrFcShort( 0xd6 ), /* Offset= 214 (592) */
+/* 380 */ NdrFcLong( 0x2000 ), /* 8192 */
+/* 384 */ NdrFcShort( 0xe2 ), /* Offset= 226 (610) */
+/* 386 */ NdrFcLong( 0x24 ), /* 36 */
+/* 390 */ NdrFcShort( 0x30a ), /* Offset= 778 (1168) */
+/* 392 */ NdrFcLong( 0x4024 ), /* 16420 */
+/* 396 */ NdrFcShort( 0x304 ), /* Offset= 772 (1168) */
+/* 398 */ NdrFcLong( 0x4011 ), /* 16401 */
+/* 402 */ NdrFcShort( 0x302 ), /* Offset= 770 (1172) */
+/* 404 */ NdrFcLong( 0x4002 ), /* 16386 */
+/* 408 */ NdrFcShort( 0x300 ), /* Offset= 768 (1176) */
+/* 410 */ NdrFcLong( 0x4003 ), /* 16387 */
+/* 414 */ NdrFcShort( 0x2fe ), /* Offset= 766 (1180) */
+/* 416 */ NdrFcLong( 0x4014 ), /* 16404 */
+/* 420 */ NdrFcShort( 0x2fc ), /* Offset= 764 (1184) */
+/* 422 */ NdrFcLong( 0x4004 ), /* 16388 */
+/* 426 */ NdrFcShort( 0x2fa ), /* Offset= 762 (1188) */
+/* 428 */ NdrFcLong( 0x4005 ), /* 16389 */
+/* 432 */ NdrFcShort( 0x2f8 ), /* Offset= 760 (1192) */
+/* 434 */ NdrFcLong( 0x400b ), /* 16395 */
+/* 438 */ NdrFcShort( 0x2e2 ), /* Offset= 738 (1176) */
+/* 440 */ NdrFcLong( 0x400a ), /* 16394 */
+/* 444 */ NdrFcShort( 0x2e0 ), /* Offset= 736 (1180) */
+/* 446 */ NdrFcLong( 0x4006 ), /* 16390 */
+/* 450 */ NdrFcShort( 0x2ea ), /* Offset= 746 (1196) */
+/* 452 */ NdrFcLong( 0x4007 ), /* 16391 */
+/* 456 */ NdrFcShort( 0x2e0 ), /* Offset= 736 (1192) */
+/* 458 */ NdrFcLong( 0x4008 ), /* 16392 */
+/* 462 */ NdrFcShort( 0x2e2 ), /* Offset= 738 (1200) */
+/* 464 */ NdrFcLong( 0x400d ), /* 16397 */
+/* 468 */ NdrFcShort( 0x2e0 ), /* Offset= 736 (1204) */
+/* 470 */ NdrFcLong( 0x4009 ), /* 16393 */
+/* 474 */ NdrFcShort( 0x2de ), /* Offset= 734 (1208) */
+/* 476 */ NdrFcLong( 0x6000 ), /* 24576 */
+/* 480 */ NdrFcShort( 0x2dc ), /* Offset= 732 (1212) */
+/* 482 */ NdrFcLong( 0x400c ), /* 16396 */
+/* 486 */ NdrFcShort( 0x2da ), /* Offset= 730 (1216) */
+/* 488 */ NdrFcLong( 0x10 ), /* 16 */
+/* 492 */ NdrFcShort( 0x8002 ), /* Simple arm type: FC_CHAR */
+/* 494 */ NdrFcLong( 0x12 ), /* 18 */
+/* 498 */ NdrFcShort( 0x8006 ), /* Simple arm type: FC_SHORT */
+/* 500 */ NdrFcLong( 0x13 ), /* 19 */
+/* 504 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
+/* 506 */ NdrFcLong( 0x15 ), /* 21 */
+/* 510 */ NdrFcShort( 0x800b ), /* Simple arm type: FC_HYPER */
+/* 512 */ NdrFcLong( 0x16 ), /* 22 */
+/* 516 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
+/* 518 */ NdrFcLong( 0x17 ), /* 23 */
+/* 522 */ NdrFcShort( 0x8008 ), /* Simple arm type: FC_LONG */
+/* 524 */ NdrFcLong( 0xe ), /* 14 */
+/* 528 */ NdrFcShort( 0x2b8 ), /* Offset= 696 (1224) */
+/* 530 */ NdrFcLong( 0x400e ), /* 16398 */
+/* 534 */ NdrFcShort( 0x2bc ), /* Offset= 700 (1234) */
+/* 536 */ NdrFcLong( 0x4010 ), /* 16400 */
+/* 540 */ NdrFcShort( 0x2ba ), /* Offset= 698 (1238) */
+/* 542 */ NdrFcLong( 0x4012 ), /* 16402 */
+/* 546 */ NdrFcShort( 0x276 ), /* Offset= 630 (1176) */
+/* 548 */ NdrFcLong( 0x4013 ), /* 16403 */
+/* 552 */ NdrFcShort( 0x274 ), /* Offset= 628 (1180) */
+/* 554 */ NdrFcLong( 0x4015 ), /* 16405 */
+/* 558 */ NdrFcShort( 0x272 ), /* Offset= 626 (1184) */
+/* 560 */ NdrFcLong( 0x4016 ), /* 16406 */
+/* 564 */ NdrFcShort( 0x268 ), /* Offset= 616 (1180) */
+/* 566 */ NdrFcLong( 0x4017 ), /* 16407 */
+/* 570 */ NdrFcShort( 0x262 ), /* Offset= 610 (1180) */
+/* 572 */ NdrFcLong( 0x0 ), /* 0 */
+/* 576 */ NdrFcShort( 0x0 ), /* Offset= 0 (576) */
+/* 578 */ NdrFcLong( 0x1 ), /* 1 */
+/* 582 */ NdrFcShort( 0x0 ), /* Offset= 0 (582) */
+/* 584 */ NdrFcShort( 0xffff ), /* Offset= -1 (583) */
+/* 586 */
+ 0x15, /* FC_STRUCT */
+ 0x7, /* 7 */
+/* 588 */ NdrFcShort( 0x8 ), /* 8 */
+/* 590 */ 0xb, /* FC_HYPER */
+ 0x5b, /* FC_END */
+/* 592 */
+ 0x2f, /* FC_IP */
+ 0x5a, /* FC_CONSTANT_IID */
+/* 594 */ NdrFcLong( 0x20400 ), /* 132096 */
+/* 598 */ NdrFcShort( 0x0 ), /* 0 */
+/* 600 */ NdrFcShort( 0x0 ), /* 0 */
+/* 602 */ 0xc0, /* 192 */
+ 0x0, /* 0 */
+/* 604 */ 0x0, /* 0 */
+ 0x0, /* 0 */
+/* 606 */ 0x0, /* 0 */
+ 0x0, /* 0 */
+/* 608 */ 0x0, /* 0 */
+ 0x46, /* 70 */
+/* 610 */
+ 0x13, 0x10, /* FC_OP [pointer_deref] */
+/* 612 */ NdrFcShort( 0x2 ), /* Offset= 2 (614) */
+/* 614 */
+ 0x13, 0x0, /* FC_OP */
+/* 616 */ NdrFcShort( 0x216 ), /* Offset= 534 (1150) */
+/* 618 */
+ 0x2a, /* FC_ENCAPSULATED_UNION */
+ 0x49, /* 73 */
+/* 620 */ NdrFcShort( 0x18 ), /* 24 */
+/* 622 */ NdrFcShort( 0xa ), /* 10 */
+/* 624 */ NdrFcLong( 0x8 ), /* 8 */
+/* 628 */ NdrFcShort( 0x5a ), /* Offset= 90 (718) */
+/* 630 */ NdrFcLong( 0xd ), /* 13 */
+/* 634 */ NdrFcShort( 0x7e ), /* Offset= 126 (760) */
+/* 636 */ NdrFcLong( 0x9 ), /* 9 */
+/* 640 */ NdrFcShort( 0x9e ), /* Offset= 158 (798) */
+/* 642 */ NdrFcLong( 0xc ), /* 12 */
+/* 646 */ NdrFcShort( 0xc8 ), /* Offset= 200 (846) */
+/* 648 */ NdrFcLong( 0x24 ), /* 36 */
+/* 652 */ NdrFcShort( 0x124 ), /* Offset= 292 (944) */
+/* 654 */ NdrFcLong( 0x800d ), /* 32781 */
+/* 658 */ NdrFcShort( 0x140 ), /* Offset= 320 (978) */
+/* 660 */ NdrFcLong( 0x10 ), /* 16 */
+/* 664 */ NdrFcShort( 0x15a ), /* Offset= 346 (1010) */
+/* 666 */ NdrFcLong( 0x2 ), /* 2 */
+/* 670 */ NdrFcShort( 0x174 ), /* Offset= 372 (1042) */
+/* 672 */ NdrFcLong( 0x3 ), /* 3 */
+/* 676 */ NdrFcShort( 0x18e ), /* Offset= 398 (1074) */
+/* 678 */ NdrFcLong( 0x14 ), /* 20 */
+/* 682 */ NdrFcShort( 0x1a8 ), /* Offset= 424 (1106) */
+/* 684 */ NdrFcShort( 0xffff ), /* Offset= -1 (683) */
+/* 686 */
+ 0x1b, /* FC_CARRAY */
+ 0x3, /* 3 */
+/* 688 */ NdrFcShort( 0x4 ), /* 4 */
+/* 690 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
+ 0x0, /* */
+/* 692 */ NdrFcShort( 0x0 ), /* 0 */
+/* 694 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 696 */
+ 0x4b, /* FC_PP */
+ 0x5c, /* FC_PAD */
+/* 698 */
+ 0x48, /* FC_VARIABLE_REPEAT */
+ 0x49, /* FC_FIXED_OFFSET */
+/* 700 */ NdrFcShort( 0x4 ), /* 4 */
+/* 702 */ NdrFcShort( 0x0 ), /* 0 */
+/* 704 */ NdrFcShort( 0x1 ), /* 1 */
+/* 706 */ NdrFcShort( 0x0 ), /* 0 */
+/* 708 */ NdrFcShort( 0x0 ), /* 0 */
+/* 710 */ 0x13, 0x0, /* FC_OP */
+/* 712 */ NdrFcShort( 0xfd4e ), /* Offset= -690 (22) */
+/* 714 */
+ 0x5b, /* FC_END */
+
+ 0x8, /* FC_LONG */
+/* 716 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 718 */
+ 0x16, /* FC_PSTRUCT */
+ 0x3, /* 3 */
+/* 720 */ NdrFcShort( 0x8 ), /* 8 */
+/* 722 */
+ 0x4b, /* FC_PP */
+ 0x5c, /* FC_PAD */
+/* 724 */
+ 0x46, /* FC_NO_REPEAT */
+ 0x5c, /* FC_PAD */
+/* 726 */ NdrFcShort( 0x4 ), /* 4 */
+/* 728 */ NdrFcShort( 0x4 ), /* 4 */
+/* 730 */ 0x11, 0x0, /* FC_RP */
+/* 732 */ NdrFcShort( 0xffd2 ), /* Offset= -46 (686) */
+/* 734 */
+ 0x5b, /* FC_END */
+
+ 0x8, /* FC_LONG */
+/* 736 */ 0x8, /* FC_LONG */
+ 0x5b, /* FC_END */
+/* 738 */
+ 0x21, /* FC_BOGUS_ARRAY */
+ 0x3, /* 3 */
+/* 740 */ NdrFcShort( 0x0 ), /* 0 */
+/* 742 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
+ 0x0, /* */
+/* 744 */ NdrFcShort( 0x0 ), /* 0 */
+/* 746 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 748 */ NdrFcLong( 0xffffffff ), /* -1 */
+/* 752 */ NdrFcShort( 0x0 ), /* Corr flags: */
+/* 754 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 756 */ NdrFcShort( 0xfd3e ), /* Offset= -706 (50) */
+/* 758 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 760 */
+ 0x1a, /* FC_BOGUS_STRUCT */
+ 0x3, /* 3 */
+/* 762 */ NdrFcShort( 0x8 ), /* 8 */
+/* 764 */ NdrFcShort( 0x0 ), /* 0 */
+/* 766 */ NdrFcShort( 0x6 ), /* Offset= 6 (772) */
+/* 768 */ 0x8, /* FC_LONG */
+ 0x36, /* FC_POINTER */
+/* 770 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 772 */
+ 0x11, 0x0, /* FC_RP */
+/* 774 */ NdrFcShort( 0xffdc ), /* Offset= -36 (738) */
+/* 776 */
+ 0x21, /* FC_BOGUS_ARRAY */
+ 0x3, /* 3 */
+/* 778 */ NdrFcShort( 0x0 ), /* 0 */
+/* 780 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
+ 0x0, /* */
+/* 782 */ NdrFcShort( 0x0 ), /* 0 */
+/* 784 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 786 */ NdrFcLong( 0xffffffff ), /* -1 */
+/* 790 */ NdrFcShort( 0x0 ), /* Corr flags: */
+/* 792 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 794 */ NdrFcShort( 0xff36 ), /* Offset= -202 (592) */
+/* 796 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 798 */
+ 0x1a, /* FC_BOGUS_STRUCT */
+ 0x3, /* 3 */
+/* 800 */ NdrFcShort( 0x8 ), /* 8 */
+/* 802 */ NdrFcShort( 0x0 ), /* 0 */
+/* 804 */ NdrFcShort( 0x6 ), /* Offset= 6 (810) */
+/* 806 */ 0x8, /* FC_LONG */
+ 0x36, /* FC_POINTER */
+/* 808 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 810 */
+ 0x11, 0x0, /* FC_RP */
+/* 812 */ NdrFcShort( 0xffdc ), /* Offset= -36 (776) */
+/* 814 */
+ 0x1b, /* FC_CARRAY */
+ 0x3, /* 3 */
+/* 816 */ NdrFcShort( 0x4 ), /* 4 */
+/* 818 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
+ 0x0, /* */
+/* 820 */ NdrFcShort( 0x0 ), /* 0 */
+/* 822 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 824 */
+ 0x4b, /* FC_PP */
+ 0x5c, /* FC_PAD */
+/* 826 */
+ 0x48, /* FC_VARIABLE_REPEAT */
+ 0x49, /* FC_FIXED_OFFSET */
+/* 828 */ NdrFcShort( 0x4 ), /* 4 */
+/* 830 */ NdrFcShort( 0x0 ), /* 0 */
+/* 832 */ NdrFcShort( 0x1 ), /* 1 */
+/* 834 */ NdrFcShort( 0x0 ), /* 0 */
+/* 836 */ NdrFcShort( 0x0 ), /* 0 */
+/* 838 */ 0x13, 0x0, /* FC_OP */
+/* 840 */ NdrFcShort( 0x192 ), /* Offset= 402 (1242) */
+/* 842 */
+ 0x5b, /* FC_END */
+
+ 0x8, /* FC_LONG */
+/* 844 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 846 */
+ 0x1a, /* FC_BOGUS_STRUCT */
+ 0x3, /* 3 */
+/* 848 */ NdrFcShort( 0x8 ), /* 8 */
+/* 850 */ NdrFcShort( 0x0 ), /* 0 */
+/* 852 */ NdrFcShort( 0x6 ), /* Offset= 6 (858) */
+/* 854 */ 0x8, /* FC_LONG */
+ 0x36, /* FC_POINTER */
+/* 856 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 858 */
+ 0x11, 0x0, /* FC_RP */
+/* 860 */ NdrFcShort( 0xffd2 ), /* Offset= -46 (814) */
+/* 862 */
+ 0x2f, /* FC_IP */
+ 0x5a, /* FC_CONSTANT_IID */
+/* 864 */ NdrFcLong( 0x2f ), /* 47 */
+/* 868 */ NdrFcShort( 0x0 ), /* 0 */
+/* 870 */ NdrFcShort( 0x0 ), /* 0 */
+/* 872 */ 0xc0, /* 192 */
+ 0x0, /* 0 */
+/* 874 */ 0x0, /* 0 */
+ 0x0, /* 0 */
+/* 876 */ 0x0, /* 0 */
+ 0x0, /* 0 */
+/* 878 */ 0x0, /* 0 */
+ 0x46, /* 70 */
+/* 880 */
+ 0x1b, /* FC_CARRAY */
+ 0x0, /* 0 */
+/* 882 */ NdrFcShort( 0x1 ), /* 1 */
+/* 884 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
+ 0x0, /* */
+/* 886 */ NdrFcShort( 0x4 ), /* 4 */
+/* 888 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 890 */ 0x1, /* FC_BYTE */
+ 0x5b, /* FC_END */
+/* 892 */
+ 0x1a, /* FC_BOGUS_STRUCT */
+ 0x3, /* 3 */
+/* 894 */ NdrFcShort( 0x10 ), /* 16 */
+/* 896 */ NdrFcShort( 0x0 ), /* 0 */
+/* 898 */ NdrFcShort( 0xa ), /* Offset= 10 (908) */
+/* 900 */ 0x8, /* FC_LONG */
+ 0x8, /* FC_LONG */
+/* 902 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 904 */ NdrFcShort( 0xffd6 ), /* Offset= -42 (862) */
+/* 906 */ 0x36, /* FC_POINTER */
+ 0x5b, /* FC_END */
+/* 908 */
+ 0x13, 0x0, /* FC_OP */
+/* 910 */ NdrFcShort( 0xffe2 ), /* Offset= -30 (880) */
+/* 912 */
+ 0x1b, /* FC_CARRAY */
+ 0x3, /* 3 */
+/* 914 */ NdrFcShort( 0x4 ), /* 4 */
+/* 916 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
+ 0x0, /* */
+/* 918 */ NdrFcShort( 0x0 ), /* 0 */
+/* 920 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 922 */
+ 0x4b, /* FC_PP */
+ 0x5c, /* FC_PAD */
+/* 924 */
+ 0x48, /* FC_VARIABLE_REPEAT */
+ 0x49, /* FC_FIXED_OFFSET */
+/* 926 */ NdrFcShort( 0x4 ), /* 4 */
+/* 928 */ NdrFcShort( 0x0 ), /* 0 */
+/* 930 */ NdrFcShort( 0x1 ), /* 1 */
+/* 932 */ NdrFcShort( 0x0 ), /* 0 */
+/* 934 */ NdrFcShort( 0x0 ), /* 0 */
+/* 936 */ 0x13, 0x0, /* FC_OP */
+/* 938 */ NdrFcShort( 0xffd2 ), /* Offset= -46 (892) */
+/* 940 */
+ 0x5b, /* FC_END */
+
+ 0x8, /* FC_LONG */
+/* 942 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 944 */
+ 0x1a, /* FC_BOGUS_STRUCT */
+ 0x3, /* 3 */
+/* 946 */ NdrFcShort( 0x8 ), /* 8 */
+/* 948 */ NdrFcShort( 0x0 ), /* 0 */
+/* 950 */ NdrFcShort( 0x6 ), /* Offset= 6 (956) */
+/* 952 */ 0x8, /* FC_LONG */
+ 0x36, /* FC_POINTER */
+/* 954 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 956 */
+ 0x11, 0x0, /* FC_RP */
+/* 958 */ NdrFcShort( 0xffd2 ), /* Offset= -46 (912) */
+/* 960 */
+ 0x1d, /* FC_SMFARRAY */
+ 0x0, /* 0 */
+/* 962 */ NdrFcShort( 0x8 ), /* 8 */
+/* 964 */ 0x1, /* FC_BYTE */
+ 0x5b, /* FC_END */
+/* 966 */
+ 0x15, /* FC_STRUCT */
+ 0x3, /* 3 */
+/* 968 */ NdrFcShort( 0x10 ), /* 16 */
+/* 970 */ 0x8, /* FC_LONG */
+ 0x6, /* FC_SHORT */
+/* 972 */ 0x6, /* FC_SHORT */
+ 0x4c, /* FC_EMBEDDED_COMPLEX */
+/* 974 */ 0x0, /* 0 */
+ NdrFcShort( 0xfff1 ), /* Offset= -15 (960) */
+ 0x5b, /* FC_END */
+/* 978 */
+ 0x1a, /* FC_BOGUS_STRUCT */
+ 0x3, /* 3 */
+/* 980 */ NdrFcShort( 0x18 ), /* 24 */
+/* 982 */ NdrFcShort( 0x0 ), /* 0 */
+/* 984 */ NdrFcShort( 0xa ), /* Offset= 10 (994) */
+/* 986 */ 0x8, /* FC_LONG */
+ 0x36, /* FC_POINTER */
+/* 988 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 990 */ NdrFcShort( 0xffe8 ), /* Offset= -24 (966) */
+/* 992 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 994 */
+ 0x11, 0x0, /* FC_RP */
+/* 996 */ NdrFcShort( 0xfefe ), /* Offset= -258 (738) */
+/* 998 */
+ 0x1b, /* FC_CARRAY */
+ 0x0, /* 0 */
+/* 1000 */ NdrFcShort( 0x1 ), /* 1 */
+/* 1002 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
+ 0x0, /* */
+/* 1004 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1006 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 1008 */ 0x1, /* FC_BYTE */
+ 0x5b, /* FC_END */
+/* 1010 */
+ 0x16, /* FC_PSTRUCT */
+ 0x3, /* 3 */
+/* 1012 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1014 */
+ 0x4b, /* FC_PP */
+ 0x5c, /* FC_PAD */
+/* 1016 */
+ 0x46, /* FC_NO_REPEAT */
+ 0x5c, /* FC_PAD */
+/* 1018 */ NdrFcShort( 0x4 ), /* 4 */
+/* 1020 */ NdrFcShort( 0x4 ), /* 4 */
+/* 1022 */ 0x13, 0x0, /* FC_OP */
+/* 1024 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (998) */
+/* 1026 */
+ 0x5b, /* FC_END */
+
+ 0x8, /* FC_LONG */
+/* 1028 */ 0x8, /* FC_LONG */
+ 0x5b, /* FC_END */
+/* 1030 */
+ 0x1b, /* FC_CARRAY */
+ 0x1, /* 1 */
+/* 1032 */ NdrFcShort( 0x2 ), /* 2 */
+/* 1034 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
+ 0x0, /* */
+/* 1036 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1038 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 1040 */ 0x6, /* FC_SHORT */
+ 0x5b, /* FC_END */
+/* 1042 */
+ 0x16, /* FC_PSTRUCT */
+ 0x3, /* 3 */
+/* 1044 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1046 */
+ 0x4b, /* FC_PP */
+ 0x5c, /* FC_PAD */
+/* 1048 */
+ 0x46, /* FC_NO_REPEAT */
+ 0x5c, /* FC_PAD */
+/* 1050 */ NdrFcShort( 0x4 ), /* 4 */
+/* 1052 */ NdrFcShort( 0x4 ), /* 4 */
+/* 1054 */ 0x13, 0x0, /* FC_OP */
+/* 1056 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (1030) */
+/* 1058 */
+ 0x5b, /* FC_END */
+
+ 0x8, /* FC_LONG */
+/* 1060 */ 0x8, /* FC_LONG */
+ 0x5b, /* FC_END */
+/* 1062 */
+ 0x1b, /* FC_CARRAY */
+ 0x3, /* 3 */
+/* 1064 */ NdrFcShort( 0x4 ), /* 4 */
+/* 1066 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
+ 0x0, /* */
+/* 1068 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1070 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 1072 */ 0x8, /* FC_LONG */
+ 0x5b, /* FC_END */
+/* 1074 */
+ 0x16, /* FC_PSTRUCT */
+ 0x3, /* 3 */
+/* 1076 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1078 */
+ 0x4b, /* FC_PP */
+ 0x5c, /* FC_PAD */
+/* 1080 */
+ 0x46, /* FC_NO_REPEAT */
+ 0x5c, /* FC_PAD */
+/* 1082 */ NdrFcShort( 0x4 ), /* 4 */
+/* 1084 */ NdrFcShort( 0x4 ), /* 4 */
+/* 1086 */ 0x13, 0x0, /* FC_OP */
+/* 1088 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (1062) */
+/* 1090 */
+ 0x5b, /* FC_END */
+
+ 0x8, /* FC_LONG */
+/* 1092 */ 0x8, /* FC_LONG */
+ 0x5b, /* FC_END */
+/* 1094 */
+ 0x1b, /* FC_CARRAY */
+ 0x7, /* 7 */
+/* 1096 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1098 */ 0x19, /* Corr desc: field pointer, FC_ULONG */
+ 0x0, /* */
+/* 1100 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1102 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 1104 */ 0xb, /* FC_HYPER */
+ 0x5b, /* FC_END */
+/* 1106 */
+ 0x16, /* FC_PSTRUCT */
+ 0x3, /* 3 */
+/* 1108 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1110 */
+ 0x4b, /* FC_PP */
+ 0x5c, /* FC_PAD */
+/* 1112 */
+ 0x46, /* FC_NO_REPEAT */
+ 0x5c, /* FC_PAD */
+/* 1114 */ NdrFcShort( 0x4 ), /* 4 */
+/* 1116 */ NdrFcShort( 0x4 ), /* 4 */
+/* 1118 */ 0x13, 0x0, /* FC_OP */
+/* 1120 */ NdrFcShort( 0xffe6 ), /* Offset= -26 (1094) */
+/* 1122 */
+ 0x5b, /* FC_END */
+
+ 0x8, /* FC_LONG */
+/* 1124 */ 0x8, /* FC_LONG */
+ 0x5b, /* FC_END */
+/* 1126 */
+ 0x15, /* FC_STRUCT */
+ 0x3, /* 3 */
+/* 1128 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1130 */ 0x8, /* FC_LONG */
+ 0x8, /* FC_LONG */
+/* 1132 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 1134 */
+ 0x1b, /* FC_CARRAY */
+ 0x3, /* 3 */
+/* 1136 */ NdrFcShort( 0x8 ), /* 8 */
+/* 1138 */ 0x7, /* Corr desc: FC_USHORT */
+ 0x0, /* */
+/* 1140 */ NdrFcShort( 0xffd8 ), /* -40 */
+/* 1142 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 1144 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 1146 */ NdrFcShort( 0xffec ), /* Offset= -20 (1126) */
+/* 1148 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 1150 */
+ 0x1a, /* FC_BOGUS_STRUCT */
+ 0x3, /* 3 */
+/* 1152 */ NdrFcShort( 0x28 ), /* 40 */
+/* 1154 */ NdrFcShort( 0xffec ), /* Offset= -20 (1134) */
+/* 1156 */ NdrFcShort( 0x0 ), /* Offset= 0 (1156) */
+/* 1158 */ 0x6, /* FC_SHORT */
+ 0x6, /* FC_SHORT */
+/* 1160 */ 0x8, /* FC_LONG */
+ 0x8, /* FC_LONG */
+/* 1162 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 1164 */ NdrFcShort( 0xfdde ), /* Offset= -546 (618) */
+/* 1166 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 1168 */
+ 0x13, 0x0, /* FC_OP */
+/* 1170 */ NdrFcShort( 0xfeea ), /* Offset= -278 (892) */
+/* 1172 */
+ 0x13, 0x8, /* FC_OP [simple_pointer] */
+/* 1174 */ 0x1, /* FC_BYTE */
+ 0x5c, /* FC_PAD */
+/* 1176 */
+ 0x13, 0x8, /* FC_OP [simple_pointer] */
+/* 1178 */ 0x6, /* FC_SHORT */
+ 0x5c, /* FC_PAD */
+/* 1180 */
+ 0x13, 0x8, /* FC_OP [simple_pointer] */
+/* 1182 */ 0x8, /* FC_LONG */
+ 0x5c, /* FC_PAD */
+/* 1184 */
+ 0x13, 0x8, /* FC_OP [simple_pointer] */
+/* 1186 */ 0xb, /* FC_HYPER */
+ 0x5c, /* FC_PAD */
+/* 1188 */
+ 0x13, 0x8, /* FC_OP [simple_pointer] */
+/* 1190 */ 0xa, /* FC_FLOAT */
+ 0x5c, /* FC_PAD */
+/* 1192 */
+ 0x13, 0x8, /* FC_OP [simple_pointer] */
+/* 1194 */ 0xc, /* FC_DOUBLE */
+ 0x5c, /* FC_PAD */
+/* 1196 */
+ 0x13, 0x0, /* FC_OP */
+/* 1198 */ NdrFcShort( 0xfd9c ), /* Offset= -612 (586) */
+/* 1200 */
+ 0x13, 0x10, /* FC_OP [pointer_deref] */
+/* 1202 */ NdrFcShort( 0xfb54 ), /* Offset= -1196 (6) */
+/* 1204 */
+ 0x13, 0x10, /* FC_OP [pointer_deref] */
+/* 1206 */ NdrFcShort( 0xfb7c ), /* Offset= -1156 (50) */
+/* 1208 */
+ 0x13, 0x10, /* FC_OP [pointer_deref] */
+/* 1210 */ NdrFcShort( 0xfd96 ), /* Offset= -618 (592) */
+/* 1212 */
+ 0x13, 0x10, /* FC_OP [pointer_deref] */
+/* 1214 */ NdrFcShort( 0xfda4 ), /* Offset= -604 (610) */
+/* 1216 */
+ 0x13, 0x10, /* FC_OP [pointer_deref] */
+/* 1218 */ NdrFcShort( 0x2 ), /* Offset= 2 (1220) */
+/* 1220 */
+ 0x13, 0x0, /* FC_OP */
+/* 1222 */ NdrFcShort( 0x14 ), /* Offset= 20 (1242) */
+/* 1224 */
+ 0x15, /* FC_STRUCT */
+ 0x7, /* 7 */
+/* 1226 */ NdrFcShort( 0x10 ), /* 16 */
+/* 1228 */ 0x6, /* FC_SHORT */
+ 0x1, /* FC_BYTE */
+/* 1230 */ 0x1, /* FC_BYTE */
+ 0x8, /* FC_LONG */
+/* 1232 */ 0xb, /* FC_HYPER */
+ 0x5b, /* FC_END */
+/* 1234 */
+ 0x13, 0x0, /* FC_OP */
+/* 1236 */ NdrFcShort( 0xfff4 ), /* Offset= -12 (1224) */
+/* 1238 */
+ 0x13, 0x8, /* FC_OP [simple_pointer] */
+/* 1240 */ 0x2, /* FC_CHAR */
+ 0x5c, /* FC_PAD */
+/* 1242 */
+ 0x1a, /* FC_BOGUS_STRUCT */
+ 0x7, /* 7 */
+/* 1244 */ NdrFcShort( 0x20 ), /* 32 */
+/* 1246 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1248 */ NdrFcShort( 0x0 ), /* Offset= 0 (1248) */
+/* 1250 */ 0x8, /* FC_LONG */
+ 0x8, /* FC_LONG */
+/* 1252 */ 0x6, /* FC_SHORT */
+ 0x6, /* FC_SHORT */
+/* 1254 */ 0x6, /* FC_SHORT */
+ 0x6, /* FC_SHORT */
+/* 1256 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 1258 */ NdrFcShort( 0xfc36 ), /* Offset= -970 (288) */
+/* 1260 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 1262 */ 0xb4, /* FC_USER_MARSHAL */
+ 0x83, /* 131 */
+/* 1264 */ NdrFcShort( 0x2 ), /* 2 */
+/* 1266 */ NdrFcShort( 0x10 ), /* 16 */
+/* 1268 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1270 */ NdrFcShort( 0xfc26 ), /* Offset= -986 (284) */
+/* 1272 */
+ 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */
+/* 1274 */ NdrFcShort( 0x2 ), /* Offset= 2 (1276) */
+/* 1276 */
+ 0x13, 0x0, /* FC_OP */
+/* 1278 */ NdrFcShort( 0x2 ), /* Offset= 2 (1280) */
+/* 1280 */
+ 0x21, /* FC_BOGUS_ARRAY */
+ 0x3, /* 3 */
+/* 1282 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1284 */ 0x28, /* Corr desc: parameter, FC_LONG */
+ 0x54, /* FC_DEREFERENCE */
+/* 1286 */ NdrFcShort( 0x10 ), /* x86 Stack size/offset = 16 */
+/* 1288 */ NdrFcShort( 0x0 ), /* Corr flags: */
+/* 1290 */ NdrFcLong( 0xffffffff ), /* -1 */
+/* 1294 */ NdrFcShort( 0x0 ), /* Corr flags: */
+/* 1296 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 1298 */ NdrFcShort( 0xfb20 ), /* Offset= -1248 (50) */
+/* 1300 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 1302 */
+ 0x12, 0x0, /* FC_UP */
+/* 1304 */ NdrFcShort( 0xffc2 ), /* Offset= -62 (1242) */
+/* 1306 */ 0xb4, /* FC_USER_MARSHAL */
+ 0x83, /* 131 */
+/* 1308 */ NdrFcShort( 0x2 ), /* 2 */
+/* 1310 */ NdrFcShort( 0x10 ), /* 16 */
+/* 1312 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1314 */ NdrFcShort( 0xfff4 ), /* Offset= -12 (1302) */
+/* 1316 */
+ 0x11, 0x4, /* FC_RP [alloced_on_stack] */
+/* 1318 */ NdrFcShort( 0x2 ), /* Offset= 2 (1320) */
+/* 1320 */
+ 0x1a, /* FC_BOGUS_STRUCT */
+ 0x3, /* 3 */
+/* 1322 */ NdrFcShort( 0xc ), /* 12 */
+/* 1324 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1326 */ NdrFcShort( 0x0 ), /* Offset= 0 (1326) */
+/* 1328 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 1330 */ NdrFcShort( 0xfaee ), /* Offset= -1298 (32) */
+/* 1332 */ 0x8, /* FC_LONG */
+ 0x8, /* FC_LONG */
+/* 1334 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 1336 */
+ 0x11, 0x0, /* FC_RP */
+/* 1338 */ NdrFcShort( 0xfbd4 ), /* Offset= -1068 (270) */
+/* 1340 */
+ 0x11, 0xc, /* FC_RP [alloced_on_stack] [simple_pointer] */
+/* 1342 */ 0x3, /* FC_SMALL */
+ 0x5c, /* FC_PAD */
+/* 1344 */
+ 0x11, 0x10, /* FC_RP [pointer_deref] */
+/* 1346 */ NdrFcShort( 0x2 ), /* Offset= 2 (1348) */
+/* 1348 */
+ 0x2f, /* FC_IP */
+ 0x5a, /* FC_CONSTANT_IID */
+/* 1350 */ NdrFcLong( 0x1c20f2b ), /* 29495083 */
+/* 1354 */ NdrFcShort( 0x3dd2 ), /* 15826 */
+/* 1356 */ NdrFcShort( 0x400f ), /* 16399 */
+/* 1358 */ 0x94, /* 148 */
+ 0x9f, /* 159 */
+/* 1360 */ 0xad, /* 173 */
+ 0x0, /* 0 */
+/* 1362 */ 0xbd, /* 189 */
+ 0xab, /* 171 */
+/* 1364 */ 0x1d, /* 29 */
+ 0x41, /* 65 */
+/* 1366 */
+ 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */
+/* 1368 */ NdrFcShort( 0x2 ), /* Offset= 2 (1370) */
+/* 1370 */
+ 0x13, 0x0, /* FC_OP */
+/* 1372 */ NdrFcShort( 0x2 ), /* Offset= 2 (1374) */
+/* 1374 */
+ 0x21, /* FC_BOGUS_ARRAY */
+ 0x3, /* 3 */
+/* 1376 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1378 */ 0x28, /* Corr desc: parameter, FC_LONG */
+ 0x54, /* FC_DEREFERENCE */
+/* 1380 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 1382 */ NdrFcShort( 0x0 ), /* Corr flags: */
+/* 1384 */ NdrFcLong( 0xffffffff ), /* -1 */
+/* 1388 */ NdrFcShort( 0x0 ), /* Corr flags: */
+/* 1390 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 1392 */ NdrFcShort( 0xffd4 ), /* Offset= -44 (1348) */
+/* 1394 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 1396 */
+ 0x11, 0x10, /* FC_RP [pointer_deref] */
+/* 1398 */ NdrFcShort( 0x2 ), /* Offset= 2 (1400) */
+/* 1400 */
+ 0x2f, /* FC_IP */
+ 0x5a, /* FC_CONSTANT_IID */
+/* 1402 */ NdrFcLong( 0x35ad8070 ), /* 900563056 */
+/* 1406 */ NdrFcShort( 0xc20c ), /* -15860 */
+/* 1408 */ NdrFcShort( 0x4fb4 ), /* 20404 */
+/* 1410 */ 0xb0, /* 176 */
+ 0x94, /* 148 */
+/* 1412 */ 0xf4, /* 244 */
+ 0xf7, /* 247 */
+/* 1414 */ 0x27, /* 39 */
+ 0x5d, /* 93 */
+/* 1416 */ 0xd4, /* 212 */
+ 0x69, /* 105 */
+/* 1418 */
+ 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */
+/* 1420 */ NdrFcShort( 0x2 ), /* Offset= 2 (1422) */
+/* 1422 */
+ 0x13, 0x0, /* FC_OP */
+/* 1424 */ NdrFcShort( 0x2 ), /* Offset= 2 (1426) */
+/* 1426 */
+ 0x1c, /* FC_CVARRAY */
+ 0x3, /* 3 */
+/* 1428 */ NdrFcShort( 0x4 ), /* 4 */
+/* 1430 */ 0x28, /* Corr desc: parameter, FC_LONG */
+ 0x0, /* */
+/* 1432 */ NdrFcShort( 0x4 ), /* x86 Stack size/offset = 4 */
+/* 1434 */ NdrFcShort( 0x1 ), /* Corr flags: early, */
+/* 1436 */ 0x28, /* Corr desc: parameter, FC_LONG */
+ 0x54, /* FC_DEREFERENCE */
+/* 1438 */ NdrFcShort( 0xc ), /* x86 Stack size/offset = 12 */
+/* 1440 */ NdrFcShort( 0x0 ), /* Corr flags: */
+/* 1442 */ 0x8, /* FC_LONG */
+ 0x5b, /* FC_END */
+/* 1444 */
+ 0x11, 0x4, /* FC_RP [alloced_on_stack] */
+/* 1446 */ NdrFcShort( 0x2 ), /* Offset= 2 (1448) */
+/* 1448 */
+ 0x1a, /* FC_BOGUS_STRUCT */
+ 0x3, /* 3 */
+/* 1450 */ NdrFcShort( 0x14 ), /* 20 */
+/* 1452 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1454 */ NdrFcShort( 0x0 ), /* Offset= 0 (1454) */
+/* 1456 */ 0xd, /* FC_ENUM16 */
+ 0x8, /* FC_LONG */
+/* 1458 */ 0x8, /* FC_LONG */
+ 0x8, /* FC_LONG */
+/* 1460 */ 0x8, /* FC_LONG */
+ 0x5b, /* FC_END */
+/* 1462 */
+ 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */
+/* 1464 */ NdrFcShort( 0x2 ), /* Offset= 2 (1466) */
+/* 1466 */
+ 0x13, 0x0, /* FC_OP */
+/* 1468 */ NdrFcShort( 0x2 ), /* Offset= 2 (1470) */
+/* 1470 */
+ 0x21, /* FC_BOGUS_ARRAY */
+ 0x3, /* 3 */
+/* 1472 */ NdrFcShort( 0x0 ), /* 0 */
+/* 1474 */ 0x28, /* Corr desc: parameter, FC_LONG */
+ 0x54, /* FC_DEREFERENCE */
+/* 1476 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 1478 */ NdrFcShort( 0x0 ), /* Corr flags: */
+/* 1480 */ NdrFcLong( 0xffffffff ), /* -1 */
+/* 1484 */ NdrFcShort( 0x0 ), /* Corr flags: */
+/* 1486 */ 0x4c, /* FC_EMBEDDED_COMPLEX */
+ 0x0, /* 0 */
+/* 1488 */ NdrFcShort( 0xfa62 ), /* Offset= -1438 (50) */
+/* 1490 */ 0x5c, /* FC_PAD */
+ 0x5b, /* FC_END */
+/* 1492 */
+ 0x11, 0x14, /* FC_RP [alloced_on_stack] [pointer_deref] */
+/* 1494 */ NdrFcShort( 0x2 ), /* Offset= 2 (1496) */
+/* 1496 */
+ 0x13, 0x0, /* FC_OP */
+/* 1498 */ NdrFcShort( 0x2 ), /* Offset= 2 (1500) */
+/* 1500 */
+ 0x1b, /* FC_CARRAY */
+ 0x3, /* 3 */
+/* 1502 */ NdrFcShort( 0x4 ), /* 4 */
+/* 1504 */ 0x28, /* Corr desc: parameter, FC_LONG */
+ 0x54, /* FC_DEREFERENCE */
+/* 1506 */ NdrFcShort( 0x8 ), /* x86 Stack size/offset = 8 */
+/* 1508 */ NdrFcShort( 0x0 ), /* Corr flags: */
+/* 1510 */ 0x8, /* FC_LONG */
+ 0x5b, /* FC_END */
+
+ 0x0
+ }
+ };
+
+static const USER_MARSHAL_ROUTINE_QUADRUPLE UserMarshalRoutines[ WIRE_MARSHAL_TABLE_SIZE ] =
+ {
+
+ {
+ BSTR_UserSize
+ ,BSTR_UserMarshal
+ ,BSTR_UserUnmarshal
+ ,BSTR_UserFree
+ },
+ {
+ HWND_UserSize
+ ,HWND_UserMarshal
+ ,HWND_UserUnmarshal
+ ,HWND_UserFree
+ },
+ {
+ VARIANT_UserSize
+ ,VARIANT_UserMarshal
+ ,VARIANT_UserUnmarshal
+ ,VARIANT_UserFree
+ }
+
+ };
+
+
+
+/* Standard interface: __MIDL_itf_ia2_api_all_0000_0000, ver. 0.0,
+ GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */
+
+
+/* Object interface: IUnknown, ver. 0.0,
+ GUID={0x00000000,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
+
+
+/* Object interface: IAccessibleRelation, ver. 0.0,
+ GUID={0x7CDF86EE,0xC3DA,0x496a,{0xBD,0xA4,0x28,0x1B,0x33,0x6E,0x1F,0xDC}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessibleRelation_FormatStringOffsetTable[] =
+ {
+ 0,
+ 36,
+ 72,
+ 108,
+ 150
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessibleRelation_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleRelation_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessibleRelation_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleRelation_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(8) _IAccessibleRelationProxyVtbl =
+{
+ &IAccessibleRelation_ProxyInfo,
+ &IID_IAccessibleRelation,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ (void *) (INT_PTR) -1 /* IAccessibleRelation::get_relationType */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleRelation::get_localizedRelationType */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleRelation::get_nTargets */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleRelation::get_target */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleRelation::get_targets */
+};
+
+const CInterfaceStubVtbl _IAccessibleRelationStubVtbl =
+{
+ &IID_IAccessibleRelation,
+ &IAccessibleRelation_ServerInfo,
+ 8,
+ 0, /* pure interpreted */
+ CStdStubBuffer_METHODS
+};
+
+
+/* Standard interface: __MIDL_itf_ia2_api_all_0000_0001, ver. 0.0,
+ GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */
+
+
+/* Object interface: IAccessibleAction, ver. 0.0,
+ GUID={0xB70D9F59,0x3B5A,0x4dba,{0xAB,0x9E,0x22,0x01,0x2F,0x60,0x7D,0xF5}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessibleAction_FormatStringOffsetTable[] =
+ {
+ 198,
+ 234,
+ 270,
+ 312,
+ 366,
+ 408
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessibleAction_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleAction_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessibleAction_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleAction_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(9) _IAccessibleActionProxyVtbl =
+{
+ &IAccessibleAction_ProxyInfo,
+ &IID_IAccessibleAction,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ (void *) (INT_PTR) -1 /* IAccessibleAction::nActions */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleAction::doAction */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleAction::get_description */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleAction::get_keyBinding */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleAction::get_name */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleAction::get_localizedName */
+};
+
+const CInterfaceStubVtbl _IAccessibleActionStubVtbl =
+{
+ &IID_IAccessibleAction,
+ &IAccessibleAction_ServerInfo,
+ 9,
+ 0, /* pure interpreted */
+ CStdStubBuffer_METHODS
+};
+
+
+/* Standard interface: __MIDL_itf_ia2_api_all_0000_0002, ver. 0.0,
+ GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */
+
+
+/* Object interface: IDispatch, ver. 0.0,
+ GUID={0x00020400,0x0000,0x0000,{0xC0,0x00,0x00,0x00,0x00,0x00,0x00,0x46}} */
+
+
+/* Object interface: IAccessible, ver. 0.0,
+ GUID={0x618736e0,0x3c3d,0x11cf,{0x81,0x0c,0x00,0xaa,0x00,0x38,0x9b,0x71}} */
+
+
+/* Object interface: IAccessible2, ver. 0.0,
+ GUID={0xE89F726E,0xC4F4,0x4c19,{0xBB,0x19,0xB6,0x47,0xD7,0xFA,0x84,0x78}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessible2_FormatStringOffsetTable[] =
+ {
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ 450,
+ 486,
+ 528,
+ 576,
+ 612,
+ 648,
+ 696,
+ 744,
+ 780,
+ 816,
+ 852,
+ 888,
+ 936,
+ 984,
+ 1020,
+ 1056,
+ 1092,
+ 1128
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessible2_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessible2_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessible2_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessible2_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(46) _IAccessible2ProxyVtbl =
+{
+ &IAccessible2_ProxyInfo,
+ &IID_IAccessible2,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ 0 /* IDispatch::GetTypeInfoCount */ ,
+ 0 /* IDispatch::GetTypeInfo */ ,
+ 0 /* IDispatch::GetIDsOfNames */ ,
+ 0 /* IDispatch_Invoke_Proxy */ ,
+ 0 /* IAccessible::get_accParent */ ,
+ 0 /* IAccessible::get_accChildCount */ ,
+ 0 /* IAccessible::get_accChild */ ,
+ 0 /* IAccessible::get_accName */ ,
+ 0 /* IAccessible::get_accValue */ ,
+ 0 /* IAccessible::get_accDescription */ ,
+ 0 /* IAccessible::get_accRole */ ,
+ 0 /* IAccessible::get_accState */ ,
+ 0 /* IAccessible::get_accHelp */ ,
+ 0 /* IAccessible::get_accHelpTopic */ ,
+ 0 /* IAccessible::get_accKeyboardShortcut */ ,
+ 0 /* IAccessible::get_accFocus */ ,
+ 0 /* IAccessible::get_accSelection */ ,
+ 0 /* IAccessible::get_accDefaultAction */ ,
+ 0 /* IAccessible::accSelect */ ,
+ 0 /* IAccessible::accLocation */ ,
+ 0 /* IAccessible::accNavigate */ ,
+ 0 /* IAccessible::accHitTest */ ,
+ 0 /* IAccessible::accDoDefaultAction */ ,
+ 0 /* IAccessible::put_accName */ ,
+ 0 /* IAccessible::put_accValue */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_nRelations */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_relation */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_relations */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::role */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::scrollTo */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::scrollToPoint */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_groupPosition */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_states */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_extendedRole */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_localizedExtendedRole */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_nExtendedStates */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_extendedStates */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_localizedExtendedStates */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_uniqueID */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_windowHandle */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_indexInParent */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_locale */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_attributes */
+};
+
+
+static const PRPC_STUB_FUNCTION IAccessible2_table[] =
+{
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2
+};
+
+CInterfaceStubVtbl _IAccessible2StubVtbl =
+{
+ &IID_IAccessible2,
+ &IAccessible2_ServerInfo,
+ 46,
+ &IAccessible2_table[-3],
+ CStdStubBuffer_DELEGATING_METHODS
+};
+
+
+/* Object interface: IAccessible2_2, ver. 0.0,
+ GUID={0x6C9430E9,0x299D,0x4E6F,{0xBD,0x01,0xA8,0x2A,0x1E,0x88,0xD3,0xFF}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessible2_2_FormatStringOffsetTable[] =
+ {
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ (unsigned short) -1,
+ 450,
+ 486,
+ 528,
+ 576,
+ 612,
+ 648,
+ 696,
+ 744,
+ 780,
+ 816,
+ 852,
+ 888,
+ 936,
+ 984,
+ 1020,
+ 1056,
+ 1092,
+ 1128,
+ 1164,
+ 1206,
+ 1248
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessible2_2_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessible2_2_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessible2_2_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessible2_2_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(49) _IAccessible2_2ProxyVtbl =
+{
+ &IAccessible2_2_ProxyInfo,
+ &IID_IAccessible2_2,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ 0 /* IDispatch::GetTypeInfoCount */ ,
+ 0 /* IDispatch::GetTypeInfo */ ,
+ 0 /* IDispatch::GetIDsOfNames */ ,
+ 0 /* IDispatch_Invoke_Proxy */ ,
+ 0 /* IAccessible::get_accParent */ ,
+ 0 /* IAccessible::get_accChildCount */ ,
+ 0 /* IAccessible::get_accChild */ ,
+ 0 /* IAccessible::get_accName */ ,
+ 0 /* IAccessible::get_accValue */ ,
+ 0 /* IAccessible::get_accDescription */ ,
+ 0 /* IAccessible::get_accRole */ ,
+ 0 /* IAccessible::get_accState */ ,
+ 0 /* IAccessible::get_accHelp */ ,
+ 0 /* IAccessible::get_accHelpTopic */ ,
+ 0 /* IAccessible::get_accKeyboardShortcut */ ,
+ 0 /* IAccessible::get_accFocus */ ,
+ 0 /* IAccessible::get_accSelection */ ,
+ 0 /* IAccessible::get_accDefaultAction */ ,
+ 0 /* IAccessible::accSelect */ ,
+ 0 /* IAccessible::accLocation */ ,
+ 0 /* IAccessible::accNavigate */ ,
+ 0 /* IAccessible::accHitTest */ ,
+ 0 /* IAccessible::accDoDefaultAction */ ,
+ 0 /* IAccessible::put_accName */ ,
+ 0 /* IAccessible::put_accValue */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_nRelations */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_relation */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_relations */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::role */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::scrollTo */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::scrollToPoint */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_groupPosition */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_states */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_extendedRole */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_localizedExtendedRole */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_nExtendedStates */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_extendedStates */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_localizedExtendedStates */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_uniqueID */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_windowHandle */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_indexInParent */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_locale */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2::get_attributes */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2_2::get_attribute */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2_2::get_accessibleWithCaret */ ,
+ (void *) (INT_PTR) -1 /* IAccessible2_2::get_relationTargetsOfType */
+};
+
+
+static const PRPC_STUB_FUNCTION IAccessible2_2_table[] =
+{
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ STUB_FORWARDING_FUNCTION,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2,
+ NdrStubCall2
+};
+
+CInterfaceStubVtbl _IAccessible2_2StubVtbl =
+{
+ &IID_IAccessible2_2,
+ &IAccessible2_2_ServerInfo,
+ 49,
+ &IAccessible2_2_table[-3],
+ CStdStubBuffer_DELEGATING_METHODS
+};
+
+
+/* Standard interface: __MIDL_itf_ia2_api_all_0000_0004, ver. 0.0,
+ GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */
+
+
+/* Object interface: IAccessibleComponent, ver. 0.0,
+ GUID={0x1546D4B0,0x4C98,0x4bda,{0x89,0xAE,0x9A,0x64,0x74,0x8B,0xDD,0xE4}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessibleComponent_FormatStringOffsetTable[] =
+ {
+ 1302,
+ 1344,
+ 72
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessibleComponent_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleComponent_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessibleComponent_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleComponent_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(6) _IAccessibleComponentProxyVtbl =
+{
+ &IAccessibleComponent_ProxyInfo,
+ &IID_IAccessibleComponent,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ (void *) (INT_PTR) -1 /* IAccessibleComponent::get_locationInParent */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleComponent::get_foreground */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleComponent::get_background */
+};
+
+const CInterfaceStubVtbl _IAccessibleComponentStubVtbl =
+{
+ &IID_IAccessibleComponent,
+ &IAccessibleComponent_ServerInfo,
+ 6,
+ 0, /* pure interpreted */
+ CStdStubBuffer_METHODS
+};
+
+
+/* Object interface: IAccessibleValue, ver. 0.0,
+ GUID={0x35855B5B,0xC566,0x4fd0,{0xA7,0xB1,0xE6,0x54,0x65,0x60,0x03,0x94}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessibleValue_FormatStringOffsetTable[] =
+ {
+ 1380,
+ 1416,
+ 1452,
+ 1488
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessibleValue_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleValue_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessibleValue_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleValue_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(7) _IAccessibleValueProxyVtbl =
+{
+ &IAccessibleValue_ProxyInfo,
+ &IID_IAccessibleValue,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ (void *) (INT_PTR) -1 /* IAccessibleValue::get_currentValue */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleValue::setCurrentValue */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleValue::get_maximumValue */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleValue::get_minimumValue */
+};
+
+const CInterfaceStubVtbl _IAccessibleValueStubVtbl =
+{
+ &IID_IAccessibleValue,
+ &IAccessibleValue_ServerInfo,
+ 7,
+ 0, /* pure interpreted */
+ CStdStubBuffer_METHODS
+};
+
+
+/* Standard interface: __MIDL_itf_ia2_api_all_0000_0006, ver. 0.0,
+ GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */
+
+
+/* Object interface: IAccessibleText, ver. 0.0,
+ GUID={0x24FD2FFB,0x3AAD,0x4a08,{0x83,0x35,0xA3,0xAD,0x89,0xC0,0xFB,0x4B}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessibleText_FormatStringOffsetTable[] =
+ {
+ 1524,
+ 1566,
+ 72,
+ 1620,
+ 1686,
+ 1722,
+ 1776,
+ 1824,
+ 1872,
+ 1932,
+ 1992,
+ 2052,
+ 2088,
+ 2124,
+ 2172,
+ 2208,
+ 2256,
+ 2316,
+ 2352
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessibleText_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleText_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessibleText_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleText_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(22) _IAccessibleTextProxyVtbl =
+{
+ &IAccessibleText_ProxyInfo,
+ &IID_IAccessibleText,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::addSelection */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_attributes */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_caretOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_characterExtents */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_nSelections */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_offsetAtPoint */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_selection */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_text */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_textBeforeOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_textAfterOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_textAtOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::removeSelection */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::setCaretOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::setSelection */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_nCharacters */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::scrollSubstringTo */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::scrollSubstringToPoint */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_newText */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_oldText */
+};
+
+const CInterfaceStubVtbl _IAccessibleTextStubVtbl =
+{
+ &IID_IAccessibleText,
+ &IAccessibleText_ServerInfo,
+ 22,
+ 0, /* pure interpreted */
+ CStdStubBuffer_METHODS
+};
+
+
+/* Object interface: IAccessibleText2, ver. 0.0,
+ GUID={0x9690A9CC,0x5C80,0x4DF5,{0x85,0x2E,0x2D,0x5A,0xE4,0x18,0x9A,0x54}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessibleText2_FormatStringOffsetTable[] =
+ {
+ 1524,
+ 1566,
+ 72,
+ 1620,
+ 1686,
+ 1722,
+ 1776,
+ 1824,
+ 1872,
+ 1932,
+ 1992,
+ 2052,
+ 2088,
+ 2124,
+ 2172,
+ 2208,
+ 2256,
+ 2316,
+ 2352,
+ 2388
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessibleText2_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleText2_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessibleText2_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleText2_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(23) _IAccessibleText2ProxyVtbl =
+{
+ &IAccessibleText2_ProxyInfo,
+ &IID_IAccessibleText2,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::addSelection */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_attributes */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_caretOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_characterExtents */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_nSelections */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_offsetAtPoint */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_selection */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_text */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_textBeforeOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_textAfterOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_textAtOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::removeSelection */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::setCaretOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::setSelection */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_nCharacters */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::scrollSubstringTo */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::scrollSubstringToPoint */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_newText */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_oldText */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText2::get_attributeRange */
+};
+
+const CInterfaceStubVtbl _IAccessibleText2StubVtbl =
+{
+ &IID_IAccessibleText2,
+ &IAccessibleText2_ServerInfo,
+ 23,
+ 0, /* pure interpreted */
+ CStdStubBuffer_METHODS
+};
+
+
+/* Object interface: IAccessibleEditableText, ver. 0.0,
+ GUID={0xA59AA09A,0x7011,0x4b65,{0x93,0x9D,0x32,0xB1,0xFB,0x55,0x47,0xE3}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessibleEditableText_FormatStringOffsetTable[] =
+ {
+ 1524,
+ 2448,
+ 2490,
+ 2532,
+ 2574,
+ 2610,
+ 2658
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessibleEditableText_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleEditableText_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessibleEditableText_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleEditableText_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(10) _IAccessibleEditableTextProxyVtbl =
+{
+ &IAccessibleEditableText_ProxyInfo,
+ &IID_IAccessibleEditableText,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ (void *) (INT_PTR) -1 /* IAccessibleEditableText::copyText */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleEditableText::deleteText */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleEditableText::insertText */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleEditableText::cutText */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleEditableText::pasteText */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleEditableText::replaceText */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleEditableText::setAttributes */
+};
+
+const CInterfaceStubVtbl _IAccessibleEditableTextStubVtbl =
+{
+ &IID_IAccessibleEditableText,
+ &IAccessibleEditableText_ServerInfo,
+ 10,
+ 0, /* pure interpreted */
+ CStdStubBuffer_METHODS
+};
+
+
+/* Object interface: IAccessibleHyperlink, ver. 0.0,
+ GUID={0x01C20F2B,0x3DD2,0x400f,{0x94,0x9F,0xAD,0x00,0xBD,0xAB,0x1D,0x41}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessibleHyperlink_FormatStringOffsetTable[] =
+ {
+ 198,
+ 234,
+ 270,
+ 312,
+ 366,
+ 408,
+ 2706,
+ 2748,
+ 2790,
+ 2826,
+ 2862
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessibleHyperlink_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleHyperlink_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessibleHyperlink_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleHyperlink_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(14) _IAccessibleHyperlinkProxyVtbl =
+{
+ &IAccessibleHyperlink_ProxyInfo,
+ &IID_IAccessibleHyperlink,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ (void *) (INT_PTR) -1 /* IAccessibleAction::nActions */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleAction::doAction */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleAction::get_description */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleAction::get_keyBinding */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleAction::get_name */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleAction::get_localizedName */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleHyperlink::get_anchor */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleHyperlink::get_anchorTarget */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleHyperlink::get_startIndex */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleHyperlink::get_endIndex */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleHyperlink::get_valid */
+};
+
+const CInterfaceStubVtbl _IAccessibleHyperlinkStubVtbl =
+{
+ &IID_IAccessibleHyperlink,
+ &IAccessibleHyperlink_ServerInfo,
+ 14,
+ 0, /* pure interpreted */
+ CStdStubBuffer_METHODS
+};
+
+
+/* Object interface: IAccessibleHypertext, ver. 0.0,
+ GUID={0x6B4F8BBF,0xF1F2,0x418a,{0xB3,0x5E,0xA1,0x95,0xBC,0x41,0x03,0xB9}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessibleHypertext_FormatStringOffsetTable[] =
+ {
+ 1524,
+ 1566,
+ 72,
+ 1620,
+ 1686,
+ 1722,
+ 1776,
+ 1824,
+ 1872,
+ 1932,
+ 1992,
+ 2052,
+ 2088,
+ 2124,
+ 2172,
+ 2208,
+ 2256,
+ 2316,
+ 2352,
+ 2898,
+ 2934,
+ 2976
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessibleHypertext_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleHypertext_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessibleHypertext_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleHypertext_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(25) _IAccessibleHypertextProxyVtbl =
+{
+ &IAccessibleHypertext_ProxyInfo,
+ &IID_IAccessibleHypertext,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::addSelection */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_attributes */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_caretOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_characterExtents */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_nSelections */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_offsetAtPoint */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_selection */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_text */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_textBeforeOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_textAfterOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_textAtOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::removeSelection */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::setCaretOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::setSelection */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_nCharacters */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::scrollSubstringTo */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::scrollSubstringToPoint */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_newText */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_oldText */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleHypertext::get_nHyperlinks */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleHypertext::get_hyperlink */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleHypertext::get_hyperlinkIndex */
+};
+
+const CInterfaceStubVtbl _IAccessibleHypertextStubVtbl =
+{
+ &IID_IAccessibleHypertext,
+ &IAccessibleHypertext_ServerInfo,
+ 25,
+ 0, /* pure interpreted */
+ CStdStubBuffer_METHODS
+};
+
+
+/* Object interface: IAccessibleHypertext2, ver. 0.0,
+ GUID={0xCF64D89F,0x8287,0x4B44,{0x85,0x01,0xA8,0x27,0x45,0x3A,0x60,0x77}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessibleHypertext2_FormatStringOffsetTable[] =
+ {
+ 1524,
+ 1566,
+ 72,
+ 1620,
+ 1686,
+ 1722,
+ 1776,
+ 1824,
+ 1872,
+ 1932,
+ 1992,
+ 2052,
+ 2088,
+ 2124,
+ 2172,
+ 2208,
+ 2256,
+ 2316,
+ 2352,
+ 2898,
+ 2934,
+ 2976,
+ 3018
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessibleHypertext2_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleHypertext2_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessibleHypertext2_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleHypertext2_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(26) _IAccessibleHypertext2ProxyVtbl =
+{
+ &IAccessibleHypertext2_ProxyInfo,
+ &IID_IAccessibleHypertext2,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::addSelection */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_attributes */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_caretOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_characterExtents */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_nSelections */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_offsetAtPoint */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_selection */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_text */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_textBeforeOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_textAfterOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_textAtOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::removeSelection */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::setCaretOffset */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::setSelection */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_nCharacters */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::scrollSubstringTo */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::scrollSubstringToPoint */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_newText */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleText::get_oldText */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleHypertext::get_nHyperlinks */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleHypertext::get_hyperlink */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleHypertext::get_hyperlinkIndex */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleHypertext2::get_hyperlinks */
+};
+
+const CInterfaceStubVtbl _IAccessibleHypertext2StubVtbl =
+{
+ &IID_IAccessibleHypertext2,
+ &IAccessibleHypertext2_ServerInfo,
+ 26,
+ 0, /* pure interpreted */
+ CStdStubBuffer_METHODS
+};
+
+
+/* Object interface: IAccessibleTable, ver. 0.0,
+ GUID={0x35AD8070,0xC20C,0x4fb4,{0xB0,0x94,0xF4,0xF7,0x27,0x5D,0xD4,0x69}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessibleTable_FormatStringOffsetTable[] =
+ {
+ 3060,
+ 3108,
+ 3144,
+ 3192,
+ 3234,
+ 3282,
+ 3324,
+ 3366,
+ 2790,
+ 2826,
+ 3402,
+ 3438,
+ 3474,
+ 3516,
+ 3564,
+ 3606,
+ 3648,
+ 3696,
+ 3744,
+ 3792,
+ 3828,
+ 3870,
+ 3912,
+ 3960,
+ 3996,
+ 4032,
+ 4068,
+ 4104,
+ 4170
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessibleTable_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleTable_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessibleTable_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleTable_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(32) _IAccessibleTableProxyVtbl =
+{
+ &IAccessibleTable_ProxyInfo,
+ &IID_IAccessibleTable,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_accessibleAt */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_caption */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_childIndex */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_columnDescription */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_columnExtentAt */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_columnHeader */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_columnIndex */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_nColumns */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_nRows */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_nSelectedChildren */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_nSelectedColumns */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_nSelectedRows */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_rowDescription */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_rowExtentAt */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_rowHeader */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_rowIndex */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_selectedChildren */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_selectedColumns */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_selectedRows */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_summary */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_isColumnSelected */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_isRowSelected */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_isSelected */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::selectRow */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::selectColumn */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::unselectRow */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::unselectColumn */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_rowColumnExtentsAtIndex */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable::get_modelChange */
+};
+
+const CInterfaceStubVtbl _IAccessibleTableStubVtbl =
+{
+ &IID_IAccessibleTable,
+ &IAccessibleTable_ServerInfo,
+ 32,
+ 0, /* pure interpreted */
+ CStdStubBuffer_METHODS
+};
+
+
+/* Object interface: IAccessibleTable2, ver. 0.0,
+ GUID={0x6167f295,0x06f0,0x4cdd,{0xa1,0xfa,0x02,0xe2,0x51,0x53,0xd8,0x69}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessibleTable2_FormatStringOffsetTable[] =
+ {
+ 3060,
+ 3108,
+ 270,
+ 4206,
+ 1686,
+ 4242,
+ 4278,
+ 3366,
+ 4314,
+ 4356,
+ 4398,
+ 4440,
+ 4482,
+ 4518,
+ 4560,
+ 4602,
+ 4638,
+ 4674,
+ 4710,
+ 4746
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessibleTable2_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleTable2_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessibleTable2_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleTable2_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(23) _IAccessibleTable2ProxyVtbl =
+{
+ &IAccessibleTable2_ProxyInfo,
+ &IID_IAccessibleTable2,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::get_cellAt */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::get_caption */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::get_columnDescription */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::get_nColumns */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::get_nRows */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::get_nSelectedCells */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::get_nSelectedColumns */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::get_nSelectedRows */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::get_rowDescription */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::get_selectedCells */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::get_selectedColumns */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::get_selectedRows */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::get_summary */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::get_isColumnSelected */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::get_isRowSelected */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::selectRow */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::selectColumn */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::unselectRow */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::unselectColumn */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTable2::get_modelChange */
+};
+
+const CInterfaceStubVtbl _IAccessibleTable2StubVtbl =
+{
+ &IID_IAccessibleTable2,
+ &IAccessibleTable2_ServerInfo,
+ 23,
+ 0, /* pure interpreted */
+ CStdStubBuffer_METHODS
+};
+
+
+/* Object interface: IAccessibleTableCell, ver. 0.0,
+ GUID={0x594116B1,0xC99F,0x4847,{0xAD,0x06,0x0A,0x7A,0x86,0xEC,0xE6,0x45}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessibleTableCell_FormatStringOffsetTable[] =
+ {
+ 198,
+ 4782,
+ 72,
+ 4206,
+ 4824,
+ 4242,
+ 4866,
+ 4902,
+ 4962
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessibleTableCell_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleTableCell_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessibleTableCell_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleTableCell_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(12) _IAccessibleTableCellProxyVtbl =
+{
+ &IAccessibleTableCell_ProxyInfo,
+ &IID_IAccessibleTableCell,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_columnExtent */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_columnHeaderCells */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_columnIndex */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_rowExtent */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_rowHeaderCells */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_rowIndex */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_isSelected */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_rowColumnExtents */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleTableCell::get_table */
+};
+
+const CInterfaceStubVtbl _IAccessibleTableCellStubVtbl =
+{
+ &IID_IAccessibleTableCell,
+ &IAccessibleTableCell_ServerInfo,
+ 12,
+ 0, /* pure interpreted */
+ CStdStubBuffer_METHODS
+};
+
+
+/* Object interface: IAccessibleImage, ver. 0.0,
+ GUID={0xFE5ABB3D,0x615E,0x4f7b,{0x90,0x9F,0x5F,0x0E,0xDA,0x9E,0x8D,0xDE}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessibleImage_FormatStringOffsetTable[] =
+ {
+ 0,
+ 4998,
+ 5046
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessibleImage_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleImage_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessibleImage_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleImage_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(6) _IAccessibleImageProxyVtbl =
+{
+ &IAccessibleImage_ProxyInfo,
+ &IID_IAccessibleImage,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ (void *) (INT_PTR) -1 /* IAccessibleImage::get_description */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleImage::get_imagePosition */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleImage::get_imageSize */
+};
+
+const CInterfaceStubVtbl _IAccessibleImageStubVtbl =
+{
+ &IID_IAccessibleImage,
+ &IAccessibleImage_ServerInfo,
+ 6,
+ 0, /* pure interpreted */
+ CStdStubBuffer_METHODS
+};
+
+
+/* Standard interface: __MIDL_itf_ia2_api_all_0000_0016, ver. 0.0,
+ GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */
+
+
+/* Object interface: IAccessibleApplication, ver. 0.0,
+ GUID={0xD49DED83,0x5B25,0x43F4,{0x9B,0x95,0x93,0xB4,0x45,0x95,0x97,0x9E}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessibleApplication_FormatStringOffsetTable[] =
+ {
+ 0,
+ 36,
+ 5088,
+ 5124
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessibleApplication_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleApplication_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessibleApplication_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleApplication_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(7) _IAccessibleApplicationProxyVtbl =
+{
+ &IAccessibleApplication_ProxyInfo,
+ &IID_IAccessibleApplication,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ (void *) (INT_PTR) -1 /* IAccessibleApplication::get_appName */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleApplication::get_appVersion */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleApplication::get_toolkitName */ ,
+ (void *) (INT_PTR) -1 /* IAccessibleApplication::get_toolkitVersion */
+};
+
+const CInterfaceStubVtbl _IAccessibleApplicationStubVtbl =
+{
+ &IID_IAccessibleApplication,
+ &IAccessibleApplication_ServerInfo,
+ 7,
+ 0, /* pure interpreted */
+ CStdStubBuffer_METHODS
+};
+
+
+/* Object interface: IAccessibleDocument, ver. 0.0,
+ GUID={0xC48C7FCF,0x4AB5,0x4056,{0xAF,0xA6,0x90,0x2D,0x6E,0x1D,0x11,0x49}} */
+
+#pragma code_seg(".orpc")
+static const unsigned short IAccessibleDocument_FormatStringOffsetTable[] =
+ {
+ 5160
+ };
+
+static const MIDL_STUBLESS_PROXY_INFO IAccessibleDocument_ProxyInfo =
+ {
+ &Object_StubDesc,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleDocument_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0
+ };
+
+
+static const MIDL_SERVER_INFO IAccessibleDocument_ServerInfo =
+ {
+ &Object_StubDesc,
+ 0,
+ ia2_api_all__MIDL_ProcFormatString.Format,
+ &IAccessibleDocument_FormatStringOffsetTable[-3],
+ 0,
+ 0,
+ 0,
+ 0};
+CINTERFACE_PROXY_VTABLE(4) _IAccessibleDocumentProxyVtbl =
+{
+ &IAccessibleDocument_ProxyInfo,
+ &IID_IAccessibleDocument,
+ IUnknown_QueryInterface_Proxy,
+ IUnknown_AddRef_Proxy,
+ IUnknown_Release_Proxy ,
+ (void *) (INT_PTR) -1 /* IAccessibleDocument::get_anchorTarget */
+};
+
+const CInterfaceStubVtbl _IAccessibleDocumentStubVtbl =
+{
+ &IID_IAccessibleDocument,
+ &IAccessibleDocument_ServerInfo,
+ 4,
+ 0, /* pure interpreted */
+ CStdStubBuffer_METHODS
+};
+
+
+/* Standard interface: __MIDL_itf_ia2_api_all_0000_0018, ver. 0.0,
+ GUID={0x00000000,0x0000,0x0000,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}} */
+
+static const MIDL_STUB_DESC Object_StubDesc =
+ {
+ 0,
+ NdrOleAllocate,
+ NdrOleFree,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ ia2_api_all__MIDL_TypeFormatString.Format,
+ 1, /* -error bounds_check flag */
+ 0x50002, /* Ndr library version */
+ 0,
+ 0x700022b, /* MIDL Version 7.0.555 */
+ 0,
+ UserMarshalRoutines,
+ 0, /* notify & notify_flag routine table */
+ 0x1, /* MIDL flag */
+ 0, /* cs routines */
+ 0, /* proxy/server info */
+ 0
+ };
+
+const CInterfaceProxyVtbl * const _ia2_api_all_ProxyVtblList[] =
+{
+ ( CInterfaceProxyVtbl *) &_IAccessibleHyperlinkProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessibleImageProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessibleActionProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessibleValueProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessible2ProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessibleTableProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessibleApplicationProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessibleTable2ProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessibleEditableTextProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessibleHypertext2ProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessibleComponentProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessibleTableCellProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessibleHypertextProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessibleText2ProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessibleDocumentProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessible2_2ProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessibleRelationProxyVtbl,
+ ( CInterfaceProxyVtbl *) &_IAccessibleTextProxyVtbl,
+ 0
+};
+
+const CInterfaceStubVtbl * const _ia2_api_all_StubVtblList[] =
+{
+ ( CInterfaceStubVtbl *) &_IAccessibleHyperlinkStubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessibleImageStubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessibleActionStubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessibleValueStubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessible2StubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessibleTableStubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessibleApplicationStubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessibleTable2StubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessibleEditableTextStubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessibleHypertext2StubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessibleComponentStubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessibleTableCellStubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessibleHypertextStubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessibleText2StubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessibleDocumentStubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessible2_2StubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessibleRelationStubVtbl,
+ ( CInterfaceStubVtbl *) &_IAccessibleTextStubVtbl,
+ 0
+};
+
+PCInterfaceName const _ia2_api_all_InterfaceNamesList[] =
+{
+ "IAccessibleHyperlink",
+ "IAccessibleImage",
+ "IAccessibleAction",
+ "IAccessibleValue",
+ "IAccessible2",
+ "IAccessibleTable",
+ "IAccessibleApplication",
+ "IAccessibleTable2",
+ "IAccessibleEditableText",
+ "IAccessibleHypertext2",
+ "IAccessibleComponent",
+ "IAccessibleTableCell",
+ "IAccessibleHypertext",
+ "IAccessibleText2",
+ "IAccessibleDocument",
+ "IAccessible2_2",
+ "IAccessibleRelation",
+ "IAccessibleText",
+ 0
+};
+
+const IID * const _ia2_api_all_BaseIIDList[] =
+{
+ 0,
+ 0,
+ 0,
+ 0,
+ &IID_IAccessible,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ &IID_IAccessible,
+ 0,
+ 0,
+ 0
+};
+
+
+#define _ia2_api_all_CHECK_IID(n) IID_GENERIC_CHECK_IID( _ia2_api_all, pIID, n)
+
+int __stdcall _ia2_api_all_IID_Lookup( const IID * pIID, int * pIndex )
+{
+ IID_BS_LOOKUP_SETUP
+
+ IID_BS_LOOKUP_INITIAL_TEST( _ia2_api_all, 18, 16 )
+ IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 8 )
+ IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 4 )
+ IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 2 )
+ IID_BS_LOOKUP_NEXT_TEST( _ia2_api_all, 1 )
+ IID_BS_LOOKUP_RETURN_RESULT( _ia2_api_all, 18, *pIndex )
+
+}
+
+const ExtendedProxyFileInfo ia2_api_all_ProxyFileInfo =
+{
+ (PCInterfaceProxyVtblList *) & _ia2_api_all_ProxyVtblList,
+ (PCInterfaceStubVtblList *) & _ia2_api_all_StubVtblList,
+ (const PCInterfaceName * ) & _ia2_api_all_InterfaceNamesList,
+ (const IID ** ) & _ia2_api_all_BaseIIDList,
+ & _ia2_api_all_IID_Lookup,
+ 18,
+ 2,
+ 0, /* table of [async_uuid] interfaces */
+ 0, /* Filler1 */
+ 0, /* Filler2 */
+ 0 /* Filler3 */
+};
+#pragma optimize("", on )
+#if _MSC_VER >= 1200
+#pragma warning(pop)
+#endif
+
+
+#endif /* !defined(_M_IA64) && !defined(_M_AMD64)*/
+
diff --git a/src/3rdparty/iaccessible2/iaccessible2.pri b/src/3rdparty/iaccessible2/iaccessible2.pri
index b3cdfa9356..c7daa760c6 100644
--- a/src/3rdparty/iaccessible2/iaccessible2.pri
+++ b/src/3rdparty/iaccessible2/iaccessible2.pri
@@ -10,84 +10,18 @@ MIDL_GENERATED = $$PWD/generated/$${ARCH_SUBDIR}
INCLUDEPATH += $$MIDL_GENERATED
-SOURCES += $${MIDL_GENERATED}/Accessible2_p.c \
- $${MIDL_GENERATED}/AccessibleAction_p.c \
- $${MIDL_GENERATED}/AccessibleApplication_p.c \
- $${MIDL_GENERATED}/AccessibleComponent_p.c \
- $${MIDL_GENERATED}/AccessibleEditableText_p.c \
- $${MIDL_GENERATED}/AccessibleHyperlink_p.c \
- $${MIDL_GENERATED}/AccessibleHypertext_p.c \
- $${MIDL_GENERATED}/AccessibleImage_p.c \
- $${MIDL_GENERATED}/AccessibleRelation_p.c \
- $${MIDL_GENERATED}/AccessibleTable2_p.c \
- $${MIDL_GENERATED}/AccessibleTableCell_p.c \
- $${MIDL_GENERATED}/AccessibleTable_p.c \
- $${MIDL_GENERATED}/AccessibleText_p.c \
- $${MIDL_GENERATED}/AccessibleValue_p.c
-
-SOURCES += $${MIDL_GENERATED}/Accessible2_i.c \
- $${MIDL_GENERATED}/AccessibleAction_i.c \
- $${MIDL_GENERATED}/AccessibleApplication_i.c \
- $${MIDL_GENERATED}/AccessibleComponent_i.c \
- $${MIDL_GENERATED}/AccessibleEditableText_i.c \
- $${MIDL_GENERATED}/AccessibleHyperlink_i.c \
- $${MIDL_GENERATED}/AccessibleHypertext_i.c \
- $${MIDL_GENERATED}/AccessibleImage_i.c \
- $${MIDL_GENERATED}/AccessibleRelation_i.c \
- $${MIDL_GENERATED}/AccessibleTable2_i.c \
- $${MIDL_GENERATED}/AccessibleTableCell_i.c \
- $${MIDL_GENERATED}/AccessibleTable_i.c \
- $${MIDL_GENERATED}/AccessibleText_i.c \
- $${MIDL_GENERATED}/AccessibleValue_i.c
-
-SOURCES += $${MIDL_GENERATED}/IA2TypeLibrary_i.c
+SOURCES += $${MIDL_GENERATED}/ia2_api_all_i.c \
+ $${MIDL_GENERATED}/ia2_api_all_p.c
# Do not add dlldata.c when building accessibility into a static library, as the COM entry points
# defined there can cause duplicate symbol errors when linking into a binary that also defines
# such entry points, e.g. anything linked against QtAxServer.
!static: SOURCES += $${MIDL_GENERATED}/dlldata.c
-HEADERS += $${MIDL_GENERATED}/Accessible2.h \
- $${MIDL_GENERATED}/AccessibleAction.h \
- $${MIDL_GENERATED}/AccessibleApplication.h \
- $${MIDL_GENERATED}/AccessibleComponent.h \
- $${MIDL_GENERATED}/AccessibleEditableText.h \
- $${MIDL_GENERATED}/AccessibleEventID.h \
- $${MIDL_GENERATED}/AccessibleHyperlink.h \
- $${MIDL_GENERATED}/AccessibleHypertext.h \
- $${MIDL_GENERATED}/AccessibleImage.h \
- $${MIDL_GENERATED}/AccessibleRelation.h \
- $${MIDL_GENERATED}/AccessibleRole.h \
- $${MIDL_GENERATED}/AccessibleStates.h \
- $${MIDL_GENERATED}/AccessibleTable.h \
- $${MIDL_GENERATED}/AccessibleTable2.h \
- $${MIDL_GENERATED}/AccessibleTableCell.h \
- $${MIDL_GENERATED}/AccessibleText.h \
- $${MIDL_GENERATED}/AccessibleValue.h \
- $${MIDL_GENERATED}/IA2CommonTypes.h \
- $${MIDL_GENERATED}/IA2TypeLibrary.h
-
+HEADERS += $${MIDL_GENERATED}/ia2_api_all.h
OTHER_FILES = \
- $$PWD/idl/Accessible2.idl \
- $$PWD/idl/AccessibleAction.idl \
- $$PWD/idl/AccessibleApplication.idl \
- $$PWD/idl/AccessibleComponent.idl \
- $$PWD/idl/AccessibleEditableText.idl \
- $$PWD/idl/AccessibleEventID.idl \
- $$PWD/idl/AccessibleHyperlink.idl \
- $$PWD/idl/AccessibleHypertext.idl \
- $$PWD/idl/AccessibleImage.idl \
- $$PWD/idl/AccessibleRelation.idl \
- $$PWD/idl/AccessibleRole.idl \
- $$PWD/idl/AccessibleStates.idl \
- $$PWD/idl/AccessibleTable.idl \
- $$PWD/idl/AccessibleTable2.idl \
- $$PWD/idl/AccessibleTableCell.idl \
- $$PWD/idl/AccessibleText.idl \
- $$PWD/idl/AccessibleValue.idl \
- $$PWD/idl/IA2CommonTypes.idl \
- $$PWD/idl/IA2TypeLibrary.idl
+ $$PWD/idl/ia2_api_all.idl
LIBS += -lrpcrt4
diff --git a/src/3rdparty/iaccessible2/idl/Accessible2.idl b/src/3rdparty/iaccessible2/idl/Accessible2.idl
deleted file mode 100644
index 6a0d750483..0000000000
--- a/src/3rdparty/iaccessible2/idl/Accessible2.idl
+++ /dev/null
@@ -1,679 +0,0 @@
-/*************************************************************************
- *
- * File Name (Accessible2.idl)
- *
- * IAccessible2 IDL Specification
- *
- * Copyright (c) 2007, 2010 Linux Foundation
- * Copyright (c) 2006 IBM Corporation
- * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
- * All rights reserved.
- *
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * 3. Neither the name of the Linux Foundation nor the names of its
- * contributors may be used to endorse or promote products
- * derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * This BSD License conforms to the Open Source Initiative "Simplified
- * BSD License" as published at:
- * http://www.opensource.org/licenses/bsd-license.php
- *
- * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
- * mark may be used in accordance with the Linux Foundation Trademark
- * Policy to indicate compliance with the IAccessible2 specification.
- *
- ************************************************************************/
-
-/** @mainpage
-
- @section _interfaces Interfaces
- IAccessible2\n
- IAccessibleAction\n
- IAccessibleApplication\n
- IAccessibleComponent\n
- IAccessibleHypertext\n
- IAccessibleHyperlink\n
- IAccessibleImage\n
- IAccessibleRelation\n
- IAccessibleTable [Deprecated]\n
- IAccessibleTable2\n
- IAccessibleTableCell\n
- IAccessibleText\n
- IAccessibleEditableText\n
- IAccessibleValue
-
- @section _structs Structs
- IA2Locale\n
- IA2TableModelChange\n
- IA2TextSegment
-
- @section _enums Enums
- ::IA2CoordinateType values define the requested coordinate type (screen or parent window).\n
- ::IA2EventID values identify events.\n
- ::IA2Role values defines roles which are in addition to the existing MSAA roles.\n
- ::IA2ScrollType values define where to place an object or substring on the screen.\n
- ::IA2States values define states which are in addition to the existing MSAA states.\n
- ::IA2TableModelChangeType values describe the kinds of changes made to a table (insert, delete, update).\n
- ::IA2TextBoundaryType values define the requested text unit (character, word, sentence, line, paragraph).\n
- ::IA2TextSpecialOffsets values define special offsets for use in the text interfaces.
-
- @section _constants Constants
- @ref grpRelations
-
- @section _misc Miscellaneous
- @ref _licensePage "BSD License"\n
- @ref _generalInfo "General Information"\n
-
- @page _licensePage BSD License
- %IAccessible2 IDL Specification
-
- Copyright (c) 2007, 2010 Linux Foundation\n
- Copyright (c) 2006 IBM Corporation\n
- Copyright (c) 2000, 2006 Sun Microsystems, Inc.\n
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions
- are met:
-
- 1. Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
-
- 2. Redistributions in binary form must reproduce the above
- copyright notice, this list of conditions and the following
- disclaimer in the documentation and/or other materials
- provided with the distribution.
-
- 3. Neither the name of the Linux Foundation nor the names of its
- contributors may be used to endorse or promote products
- derived from this software without specific prior written
- permission.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-
- This BSD License conforms to the Open Source Initiative "Simplified
- BSD License" as published at:
- http://www.opensource.org/licenses/bsd-license.php
-
- %IAccessible2 is a trademark of the Linux Foundation. The %IAccessible2
- mark may be used in accordance with the
- <a href="http://www.linuxfoundation.org/collaborate/workgroups/accessibility/trademark-policy">
- Linux Foundation Trademark Policy</a> to indicate compliance with the %IAccessible2 specification.
-
- @page _generalInfo General Information
- The following information is applicable to two or more interfaces.
-
- @ref _errors\n
- @ref _memory\n
- &nbsp;&nbsp;@ref _arrayConsideration\n
- @ref _indexes\n
- @ref _enums\n
- @ref _specialOffsets\n
- @ref _dicoveringInterfaces\n
- @ref _changingInterfaces\n
- @ref _applicationInfo\n
- @ref _childIDs\n
- @ref _variants\n
- @ref _iaaction-iahyperlink\n
- @ref _trademark
-
- @section _errors Error Handling
- HRESULT values are defined by the Microsoft&reg; Win32&reg; API. For more information, refer to
- <a href="http://msdn2.microsoft.com/en-us/library/bb401631.aspx">Interpreting HRESULT Values</a>
- in MSDN&reg;.
-
- Note that the S_FALSE return value is considered a non-error value and the
- SUCCEEDED macro will return TRUE. S_FALSE is used when there is no failure
- but there was nothing valid to return, e.g. in IAccessible2::attributes when
- there are no attributes. When S_FALSE is returned [out] pointer types should
- be NULL and [out] longs should generally be 0, but sometimes -1 is used such
- as IAccessible2::indexInParent, IAccessibleText::caretOffset, and
- IAccessibleHypertext::hyperlinkIndex.
-
- Note that for BSTR [out] variables common COM practice is that the server does
- the SysAllocString and the client does the SysFreeString. Also note that when
- NULL is returned there is no need for the client to call SysFreeString. Please
- refer to the documentation for each method for more details regarding error handling.
-
- @section _memory Memory Management
- The following memory management issues should be considered:
- @li Although [out] BSTR variables are declared by the client, their space is
- allocated by the server. They need to be freed with SysFreeString by the
- client at end of life; the same is true when BSTRs are used in structs or
- arrays which are passed to the server.
- @li If there is no valid [out] BSTR to return, the server should return S_FALSE and
- assign NULL to the output, e.g. *theOutBSTR = NULL;.
- @li COM interfaces need to be referenced with AddRef when used and dereferenced
- with Release at end of life.
- @li Single [out] longs, HWNDs, booleans, and structs are declared by the caller
- and passed by reference. The marshaller does all the memory management.
-
- The following articles may be helpful for understanding memory management issues:
- @li An article by Don Box in a
- <a href="http://www.microsoft.com/msj/1196/activex1196.aspx">Q & A section</a>
- of the November 1996 edition of the Microsoft Systems Journal.
- @li A posting to a CodeGuru forum,
- <a href="http://www.codeguru.com/forum/showthread.php?t=364511">Windows SDK
- String: What are the rules for BSTR allocation and deallocation?</a>
-
- @subsection _arrayConsideration Special Consideration when using Arrays
- There are several methods which return arrays. In the case of IAccessible2::relations
- and IAccessibleRelation::targets the client must allocate and free the arrays.
-
- For the remaining methods which return arrays, the server must allocate the array
- and the client must free the array when no longer needed. These methods are
- IAccessible2::extendedStates, IAccessible2::localizedExtendedStates,
- IAccessibleAction::keyBinding, IAccessibleTable2::selectedCells,
- IAccessibleTable2::selectedColumns, and IAccessibleTable2::selectedRows. For
- those methods, the server must allocate both the top level array and any storage
- associated with it, e.g. for BSTRs. The server must allocate the arrays with
- CoTaskMemAlloc and any BSTRs with SysAllocString. The client must use CoTaskMemFree
- to free the array and any BSTRs must be freed with SysFreeString.
-
- Also, the IDL for those six methods includes an extraneous [in] parameter for the
- caller to specify the max size of the array. This parameter will be ignored by
- the COM server.
-
- @section _indexes Zero and One Based Indexes
- Unless otherwise specified all offsets and indexes are 0 based.
-
- @section _enums Enums
- Note that enums start at 0.
-
- @section _specialOffsets Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods
- IAccessibleText and IAccessibleEditableText can use one or more of the following
- special offset values. They are defined in the ::IA2TextSpecialOffsets enum.
- @li Using ::IA2_TEXT_OFFSET_LENGTH (-1) as an offset in any of the IAccessibleText or
- IAccessibleEditableText methods is the same as specifying the length of the string.
- @li Using ::IA2_TEXT_OFFSET_CARET (-2) as an offset for IAccessibleText::textBeforeOffset,
- IAccessibleText::textAtOffset, and IAccessibleText::textAfterOffset indicates that the
- text related to the physical location of the caret should be used. This is needed for
- applications that consider the character offset of the end of one line (as reached by
- pressing the End key) the same as the offset of the first character on the next line.
- Since the same offset is associated with two different lines a special means is needed
- to fetch text from the line where the caret is physically located.
-
- @section _dicoveringInterfaces Discovery of Interfaces
- In general AT (Assistive Technology) should try IAccessible2 interfaces, followed by using
- the MSAA (Microsoft&reg; Active Accessibility&reg;) interfaces. (In cases where the an application
- is known to have custom interfaces which provide information not supplied by IAccessible2
- or MSAA, then those custom interfaces can be used.) The AT can then, by default, support
- unknown IAccessible2/MSAA applications, without the application developers having to request
- AT vendors for support on an individual application by application basis.
-
- When you have a reference to an IAccessible and require a reference to an IAccessible2 use
- QueryService as follows:
- @code
- // pAcc is a reference to the accessible object's IAccessible interface.
- IServiceProvider *pService = NULL;
- hr = pAcc->QueryInterface(IID_IServiceProvider, (void **)&pService);
- if(SUCCEEDED(hr)) {
- IAccessible2 *pIA2 = NULL;
- hr = pService->QueryService(IID_IAccessible, IID_IAccessible2, (void**)&pIA2);
- if (SUCCEEDED(hr) && pIA2) {
- // The control supports IAccessible2.
- // pIA2 is the reference to the accessible object's IAccessible2 interface.
- }
- }
- @endcode
-
- @section _changingInterfaces Changing between Accessible Interfaces
- Note that developers must always implement MSAA's IAccessible and, if needed, some
- of the interfaces in the set of IAccessible2 interfaces. Although the IAccessible2
- IDL is coded such that IAccessible2 is a subclass of MSAA's IAccessible, none of
- MSAA's IAccessible methods are redefined by IAccessible2.
-
- QueryService must be used to switch from a reference to an MSAA IAccessible interface
- to another interface. This has been
- <a href="http://www.accessinteropalliance.org/docs/Introducing_IAccessibleEx.doc">
- documented by Microsoft</a> and the pertinent facts have been extracted below:
-
- @par
- Why use QueryService instead of just using QueryInterface to get IAccessibleEx
- directly? The reason is that since MSAA 2.0, clients don't talk to a server's
- IAccessible interface directly; instead they talk to an intermediate MSAA-provided
- wrapper that calls through to the original IAccessible. This wrapper provides services
- such as implementing IDispatch, supplying information from MSAA 2.0's Dynamic Annotation
- service, and scaling locations when running on Windows Vista with DPI scaling enabled.
- QueryService is the supported way to expose additional interfaces from an existing
- IAccessible and was originally used by MSHTML to expose IHTMLElement objects corresponding
- to IAccessibles. QueryService is often more convenient for servers to implement than
- QueryInterface because it does not have the same requirements for preserving object
- identity or symmetry/transitivity as QueryInterface, so QueryService allows servers to
- easily implement the interface on the same object or a separate object. The latter is
- often hard to do with QueryInterface unless the original object supports aggregation.
-
- Two related references in MSDN&reg; are:
- @li <a href="http://msdn.microsoft.com/en-us/library/ms696078(VS.85).aspx">
- "Using QueryService to expose a native object model interface for an IAccessible object"</a>
- @li <a href="http://msdn.microsoft.com/en-us/library/ms528415.aspx#acc_obj">
- "Accessing the Internet Explorer Object Associated with an Accessible Object"</a>
-
- Based on this information from Microsoft, QueryService must be used to switch back and forth
- between a reference to an MSAA IAccessible interface and any of the IAccessible2 interfaces.
-
- Regarding switching between any of the IAccessible2 interfaces, applications implementing
- IAccessible2 should implement the IAccessible2 interfaces on a single object since ATs
- will be using QueryInterface to switch between the IAccessilbe2 interfaces. Implementing
- the IAccessible2 interfaces on separate objects would require the use of QueryService.
- There is one exception, IAccessibleApplication can be implemented on a separate object so
- its common code doesn't have to be included in each accessible object. ATs should use
- QueryService to access IAccessibleApplication.
-
- @section _applicationInfo Access to Information about the Application
- Servers implementing IAccessible2 should provide access to the IAccessibleApplication
- interface via QueryService from any object so that ATs can easily determine specific
- information about the application such as its name or version.
-
- @section _childIDs Child IDs
- The IAccessible2 interfaces do not support child IDs, i.e. simple child elements.
- Full accessible objects must be created for each object that supports IAccessible2.
- Therefore MSAA's get_accChild should never return a child ID (other than CHILDID_SELF)
- for an object that implements any of the IAccessible2 interfaces.
-
- Microsoft's UI Automation specification has the same limitation and this was resolved
- in the UI Automation Express specification by adding IAccessibleEx::GetObjectForChild
- and IAccessibleEx::GetIAccessiblePair. These methods allow mapping back and forth
- between an IAccessibleEx and an {IAccessible, Child ID} pair. A future version of
- IAccessible2 may include similar methods to map back and forth between an IAccessible2
- and an {IAccessible, Child ID} pair.
-
- @section _variants VARIANTs
- Some methods return a VARIANT. Implementers need to make sure that the return type is
- specified, i.e. VT_I4, VT_IDISPATCH, etc. The methods that return VARIANTs are
- IAccessibleHyperlink::anchor, IAccessibleHyperlink::anchorTarget, IAccessibleValue::currentValue,
- IAccessibleValue::maximumValue, IAccessibleValue::minimumValue.
-
- @section _iaaction-iahyperlink IAccessibleHyperlink as subclass of IAccessibleAction
- In this version of the IDL, IAccessibleHyperlink is a subclass of IAccessibleAction.
- However, there is no practical need for that inheritance and in some cases, such as
- an image map of smart tags, it doesn't make sense because such an image map doesn't
- have actionable objects; it's the secondary smart tags that are actionable. As a
- result, implementations should not rely on the inheritance as it may be removed in
- a later version of the IDL.
-
- @section _trademark Trademark Attribution
- The names of actual companies and products mentioned herein may be the trademarks of
- their respective owners. In particular, Active Accessibility, Microsoft, MSDN, and Win32
- are trademarks of the Microsoft group of companies in the U.S.A. and/or other countries.
-
-**/
-
-import "objidl.idl";
-import "oaidl.idl";
-import "oleacc.idl";
-import "AccessibleRelation.idl";
-import "AccessibleStates.idl";
-import "IA2CommonTypes.idl";
-
-/** A structure defining the locale of an accessible object.
-
-IAccessible2::locale returns this struct.
-*/
-typedef struct IA2Locale {
- BSTR language; ///< ISO 639-1 Alpha-2 two character language code
- BSTR country; ///< ISO 3166-1 Alpha-2 two character country code
- BSTR variant; ///< Application specific variant of the locale
-} IA2Locale;
-
-/** @brief This interface exposes the primary set of information about an
- IAccessible2 enabled accessible object.
-
- This interface must always be provided for objects that support some
- portion of the collection of the %IAccessible2 interfaces.
-
- Please refer to @ref _changingInterfaces "Changing between Accessible Interfaces"
- for special considerations related to use of the MSAA IAccessible interface and
- the set of %IAccessible2 interfaces.
- */
-[object, uuid(E89F726E-C4F4-4c19-BB19-B647D7FA8478)]
-interface IAccessible2 : IAccessible
-{
-
- /** @brief Returns the number of accessible relations for this object.
- @param [out] nRelations
- @retval S_OK
- */
- [propget] HRESULT nRelations
- (
- [out, retval] long *nRelations
- );
-
- /** @brief Returns one accessible relation for this object.
- @param [in] relationIndex
- 0 based
- @param [out] relation
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed
- */
- [propget] HRESULT relation
- (
- [in] long relationIndex,
- [out, retval] IAccessibleRelation **relation
- );
-
- /** @brief Returns multiple accessible relations for this object.
- @param [in] maxRelations
- maximum size of the array allocated by the client
- @param [out] relations
- The array of accessible relation objects. Note that this array is to be
- allocated by the client and freed when no longer needed. Refer to @ref
- _arrayConsideration "Special Consideration when using Arrays" for more details.
- @param [out] nRelations
- actual number of relations in the returned array (not more than maxRelations)
- @retval S_OK
- @retval S_FALSE if there are no relations, nRelations is set to 0
- */
- [propget] HRESULT relations
- (
- [in] long maxRelations,
- [out, size_is(maxRelations), length_is(*nRelations)]
- IAccessibleRelation **relations,
- [out, retval] long *nRelations
- );
-
- /** @brief Returns the role of an %IAccessible2 object.
- @param [out] role
- The role of an %IAccessible2 object.
- @retval S_OK
- @note
- @li For convenience MSAA roles are also passed through this method so the
- AT doesn't have to also fetch roles through MSAA's get_accRole.
- @li %IAccessible2 roles should not be passed through MSAA's get_accRole.
- @li For compatibility with non IAccessible2 enabled ATs, IAccessible2
- applications should also add support to get_accRole to return the closest
- MSAA role or ROLE_SYSTEM_CLIENT (the MSAA defined default role) if there
- is not a good match.
- @li This method is missing a [propget] prefix in the IDL. The result is the
- method is named role in generated C++ code instead of get_role.
- */
- HRESULT role
- (
- [out, retval] long *role
- );
-
- /** @brief Makes an object visible on the screen.
- @param [in] scrollType
- Defines where the object should be placed on the screen.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed
- */
- HRESULT scrollTo
- (
- [in] enum IA2ScrollType scrollType
- );
-
- /** @brief Moves the top left of an object to a specified location.
-
- @param [in] coordinateType
- Specifies whether the coordinates are relative to the screen or the parent object.
- @param [in] x
- Defines the x coordinate.
- @param [in] y
- Defines the y coordinate.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed
- */
- HRESULT scrollToPoint
- (
- [in] enum IA2CoordinateType coordinateType,
- [in] long x,
- [in] long y
- );
-
- /** @brief Returns grouping information.
-
- Used for tree items, list items, tab panel labels, radio buttons, etc.
- Also used for collections of non-text objects.
-
- @param [out] groupLevel
- 1 based, 0 indicates that this value is not applicable
- @param [out] similarItemsInGroup
- 1 based, 0 indicates that this value is not applicable
- @param [out] positionInGroup
- 1 based, 0 indicates that this value is not applicable. This is an index
- into the objects in the current group, not an index into all the objects
- at the same group level.
- @retval S_OK if at least one value is valid
- @retval S_FALSE if no values are valid, [out] values are 0s
- @note This method is meant to describe the nature of an object's containment
- structure. It's exposed by trees, tree grids, nested lists, nested menus,
- but not headings, which uses the level object attribute. It is also exposed
- by radio buttons (with groupLevel == 0).
- @note This is normally not implemented on a combo box to describe the nature
- of its contents. Normally an AT will get that information from its child list
- object. However, in some cases when non-edit combo boxes are not able to be structured
- such that the list is a child of the combo box, this method is implemented on
- the combo box itself. ATs can use this interface if a child list is not found.
- */
- [propget] HRESULT groupPosition
- (
- [out] long *groupLevel,
- [out] long *similarItemsInGroup,
- [out, retval] long *positionInGroup
- );
-
- /** @brief Returns the bit strip containing any IAccessible2 states.
-
- The IAccessible2 states are in addition to the MSAA states and are defined in
- the IA2States enum.
-
- @param [out] states
- @retval S_OK
- */
- [propget] HRESULT states
- (
- [out, retval] AccessibleStates *states
- );
-
- /** @brief Returns the extended role.
-
- An extended role is a role which is dynamically generated by the application.
- It is not predefined by the %IAccessible2 specification.
-
- @param [out] extendedRole
- @retval S_OK
- @retval S_FALSE if there is nothing to return, [out] value is NULL
- */
- [propget] HRESULT extendedRole
- (
- [out, retval] BSTR *extendedRole
- );
-
- /** @brief Returns the localized extended role.
- @param [out] localizedExtendedRole
- @retval S_OK
- @retval S_FALSE if there is nothing to return, [out] value is NULL
- */
- [propget] HRESULT localizedExtendedRole
- (
- [out, retval] BSTR *localizedExtendedRole
- );
-
- /** @brief Returns the number of extended states.
- @param [out] nExtendedStates
- @retval S_OK
- */
- [propget] HRESULT nExtendedStates
- (
- [out, retval] long *nExtendedStates
- );
-
- /** @brief Returns the extended states (array of strings).
-
- An extended state is a state which is dynamically generated by the application.
- It is not predefined by the %IAccessible2 specification.
-
- @param [in] maxExtendedStates
- This parameter is ignored. Refer to @ref _arrayConsideration
- "Special Consideration when using Arrays" for more details.
- @param [out] extendedStates
- This array is allocated by the server. Free it with CoTaskMemFree.
- @param [out] nExtendedStates
- The number of extended states returned; the size of the returned array.
- @retval S_OK
- @retval S_FALSE if there are no states, [out] values are NULL and 0 respectively
- */
- [propget] HRESULT extendedStates
- (
- [in] long maxExtendedStates,
- [out, size_is(,maxExtendedStates), length_is(,*nExtendedStates)] BSTR **extendedStates,
- [out, retval] long *nExtendedStates
- );
-
- /** @brief Returns the localized extended states (array of strings).
- @param [in] maxLocalizedExtendedStates
- This parameter is ignored. Refer to @ref _arrayConsideration
- "Special Consideration when using Arrays" for more details.
- @param [out] localizedExtendedStates
- This array is allocated by the server. Free it with CoTaskMemFree.
- @param [out] nLocalizedExtendedStates
- The number of localized extended states returned; the size of the returned array.
- @retval S_OK
- @retval S_FALSE if there are no states, [out] values are NULL and 0 respectively
- */
- [propget] HRESULT localizedExtendedStates
- (
- [in] long maxLocalizedExtendedStates,
- [out, size_is(,maxLocalizedExtendedStates), length_is(,*nLocalizedExtendedStates)] BSTR **localizedExtendedStates,
- [out, retval] long *nLocalizedExtendedStates
- );
-
- /** @brief Returns the unique ID.
-
- The uniqueID is an identifier for this object, is unique within the
- current window, and remains the same for the lifetime of the accessible
- object.
-
- The uniqueID is not related to:
- - the MSAA objectID which is used by the server to disambiguate between
- IAccessibles per HWND or
- - the MSAA childID which is used to disambiguate between children being
- managed by an IAccessible.
-
- This value is provided so the AT can have access to a unique runtime persistent
- identifier even when not handling an event for the object.
-
- An example of when this value is useful is if the AT wants to build a cache.
- The AT could cache the uniqueIDs in addition to other data being cached.
- When an event is fired the AT could map the uniqueID to its internal model.
- Thus, if there's a REORDER/SHOW/HIDE event the AT knows which part of the
- internal structure has been invalidated and can refetch just that part.
-
- This value can also be used by an AT to determine when the current control
- has changed. If the role is the same for two controls that are adjacent in
- the tab order, this can be used to detect the new control.
-
- Another use of this value by an AT is to identify when a grouping object has
- changed, e.g. when moving from a radio button in one group to a radio button in a
- different group.
-
- One means of implementing this would be to create a factory with a 32 bit number
- generator and a reuse pool. The number generator would emit numbers starting
- at 1. Each time an object's life cycle ended, its number would be saved into a
- reuse pool. The number generator would be used whenever the reuse pool was empty.
-
- Another way to create a unique ID is to generate it from a pointer value, e.g. an
- object's address. That would be unique because no two active objects can use the
- same allocated memory space.
-
- @param [out] uniqueID
- @retval S_OK
- */
- [propget] HRESULT uniqueID
- (
- [out, retval] long *uniqueID
- );
-
- /** @brief Returns the window handle for the parent window which contains this object.
-
- This is the same window handle which will be passed for any events that occur on the
- object, but is cached in the accessible object for use when it would be helpful to
- access the window handle in cases where an event isn't fired on this object.
-
- A use case is when a screen reader is grabbing an entire web page on a page load.
- Without the availability of windowHandle, the AT would have to get the window handle
- by using WindowFromAccessibleObject on each IAccessible, which is slow because it's
- implemented by oleacc.dll as a loop which crawls up the ancestor chain and looks for
- a ROLE_WINDOW object, mapping that back to a window handle.
-
- @param [out] windowHandle
- @retval S_OK
- */
- [propget] HRESULT windowHandle
- (
- [out, retval] HWND *windowHandle
- );
-
- /** @brief Returns the index of this object in its parent object.
- @param [out] indexInParent
- 0 based; -1 indicates there is no parent; the upper bound is the value
- returned by the parent's IAccessible::get_accChildCount.
- @retval S_OK
- @retval S_FALSE if no parent, [out] value is -1
- */
- [propget] HRESULT indexInParent
- (
- [out, retval] long *indexInParent
- );
-
- /** @brief Returns the IA2Locale of the accessible object.
- @param [out] locale
- @retval S_OK
- */
- [propget] HRESULT locale
- (
- [out, retval] IA2Locale *locale
- );
-
- /** @brief Returns the attributes specific to this %IAccessible2 object, such as a cell's formula.
- @param [out] attributes
- @retval S_OK
- @retval S_FALSE returned if there is nothing to return, [out] value is NULL
- */
- [propget] HRESULT attributes
- (
- [out, retval] BSTR *attributes
- );
-
-}
-
diff --git a/src/3rdparty/iaccessible2/idl/AccessibleAction.idl b/src/3rdparty/iaccessible2/idl/AccessibleAction.idl
deleted file mode 100644
index edab0d288b..0000000000
--- a/src/3rdparty/iaccessible2/idl/AccessibleAction.idl
+++ /dev/null
@@ -1,194 +0,0 @@
-/*************************************************************************
- *
- * File Name (AccessibleAction.idl)
- *
- * IAccessible2 IDL Specification
- *
- * Copyright (c) 2007, 2010 Linux Foundation
- * Copyright (c) 2006 IBM Corporation
- * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
- * All rights reserved.
- *
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * 3. Neither the name of the Linux Foundation nor the names of its
- * contributors may be used to endorse or promote products
- * derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * This BSD License conforms to the Open Source Initiative "Simplified
- * BSD License" as published at:
- * http://www.opensource.org/licenses/bsd-license.php
- *
- * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
- * mark may be used in accordance with the Linux Foundation Trademark
- * Policy to indicate compliance with the IAccessible2 specification.
- *
- ************************************************************************/
-
-import "objidl.idl";
-import "oaidl.idl";
-import "oleacc.idl";
-
-/** @brief This interface gives access to actions that can be executed
- for accessible objects.
-
- Every accessible object that can be manipulated via the native GUI beyond the
- methods available either in the MSAA IAccessible interface or in the set of
- IAccessible2 interfaces (other than this IAccessibleAction interface) should
- support the IAccessibleAction interface in order to provide Assistive Technology
- access to all the actions that can be performed by the object. Each action can
- be performed or queried for a name, description or associated key bindings.
- Actions are needed more for ATs that assist the mobility impaired, such as
- on-screen keyboards and voice command software. By providing actions directly,
- the AT can present them to the user without the user having to perform the extra
- steps to navigate a context menu.
-
- The first action should be equivalent to the MSAA default action. If there is
- only one action, %IAccessibleAction should also be implemented.
-*/
-[object, uuid(B70D9F59-3B5A-4dba-AB9E-22012F607DF5)]
-interface IAccessibleAction : IUnknown
-{
-
- /** @brief Returns the number of accessible actions available in this object.
-
- If there are more than one, the first one is considered the
- "default" action of the object.
- @param [out] nActions
- The returned value of the number of actions is zero if there are
- no actions.
- @retval S_OK
- @note This method is missing a [propget] prefix in the IDL. The result is the
- method is named nActions in generated C++ code instead of get_nActions.
- */
- HRESULT nActions
- (
- [out,retval] long* nActions
- );
-
- /** @brief Performs the specified Action on the object.
- @param [in] actionIndex
- 0 based index specifying the action to perform. If it lies outside
- the valid range no action is performed.
- @retval S_OK
- @retval S_FALSE if action could not be performed
- @retval E_INVALIDARG if bad [in] passed
- */
- HRESULT doAction
- (
- [in] long actionIndex
- );
-
- /** @brief Returns a description of the specified action of the object.
- @param [in] actionIndex
- 0 based index specifying which action's description to return.
- If it lies outside the valid range an empty string is returned.
- @param [out] description
- The returned value is a localized string of the specified action.
- @retval S_OK
- @retval S_FALSE if there is nothing to return, [out] value is NULL
- @retval E_INVALIDARG if bad [in] passed
- */
- [propget] HRESULT description
- (
- [in] long actionIndex,
- [out, retval] BSTR *description
- );
-
- /** @brief Returns an array of BSTRs describing one or more key bindings, if
- there are any, associated with the specified action.
-
- The returned strings are the localized human readable key sequences to be
- used to activate each action, e.g. "Ctrl+Shift+D". Since these key
- sequences are to be used when the object has focus, they are like
- mnemonics (access keys), and not like shortcut (accelerator) keys.
-
- There is no need to implement this method for single action controls since
- that would be redundant with the standard MSAA programming practice of
- getting the mnemonic from get_accKeyboardShortcut.
-
- An AT such as an On Screen Keyboard might not expose these bindings but
- provide alternative means of activation.
-
- Note: the client allocates and passes in an array of pointers. The server
- allocates the BSTRs and passes back one or more pointers to these BSTRs into
- the array of pointers allocated by the client. The client is responsible
- for deallocating the BSTRs.
-
- @param [in] actionIndex
- 0 based index specifying which action's key bindings should be returned.
- @param [in] nMaxBindings
- This parameter is ignored. Refer to @ref _arrayConsideration
- "Special Consideration when using Arrays" for more details.
- @param [out] keyBindings
- An array of BSTRs, allocated by the server, one for each key binding.
- Free it with CoTaskMemFree.
- @param [out] nBindings
- The number of key bindings returned; the size of the returned array.
- @retval S_OK
- @retval S_FALSE if there are no key bindings, [out] values are NULL and 0 respectively
- @retval E_INVALIDARG if bad [in] passed
- */
- [propget] HRESULT keyBinding
- (
- [in] long actionIndex,
- [in] long nMaxBindings,
- [out, size_is(,nMaxBindings), length_is(,*nBindings)] BSTR **keyBindings,
- [out, retval] long *nBindings
- );
-
- /** @brief Returns the non-localized name of specified action.
- @param [in] actionIndex
- 0 based index specifying which action's non-localized name should be returned.
- @param [out] name
- @retval S_OK
- @retval S_FALSE if there is nothing to return, [out] value is NULL
- @retval E_INVALIDARG if bad [in] passed
- */
- [propget] HRESULT name
- (
- [in] long actionIndex,
- [out, retval] BSTR *name
- );
-
- /** @brief Returns the localized name of specified action.
- @param [in] actionIndex
- 0 based index specifying which action's localized name should be returned.
- @param [out] localizedName
- @retval S_OK
- @retval S_FALSE if there is nothing to return, [out] value is NULL
- @retval E_INVALIDARG if bad [in] passed
- */
- [propget] HRESULT localizedName
- (
- [in] long actionIndex,
- [out, retval] BSTR *localizedName
- );
-
-}
diff --git a/src/3rdparty/iaccessible2/idl/AccessibleApplication.idl b/src/3rdparty/iaccessible2/idl/AccessibleApplication.idl
deleted file mode 100644
index ed15aa0018..0000000000
--- a/src/3rdparty/iaccessible2/idl/AccessibleApplication.idl
+++ /dev/null
@@ -1,121 +0,0 @@
-/*************************************************************************
- *
- * File Name (AccessibleApplication.idl)
- *
- * IAccessible2 IDL Specification
- *
- * Copyright (c) 2007, 2010 Linux Foundation
- * Copyright (c) 2006 IBM Corporation
- * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
- * All rights reserved.
- *
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * 3. Neither the name of the Linux Foundation nor the names of its
- * contributors may be used to endorse or promote products
- * derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * This BSD License conforms to the Open Source Initiative "Simplified
- * BSD License" as published at:
- * http://www.opensource.org/licenses/bsd-license.php
- *
- * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
- * mark may be used in accordance with the Linux Foundation Trademark
- * Policy to indicate compliance with the IAccessible2 specification.
- *
- ************************************************************************/
-
-
-import "objidl.idl";
-import "oaidl.idl";
-import "oleacc.idl";
-
-/** @brief This interface gives access to the application's name and version information.
-
- This interface provides the AT with the information it needs to differentiate
- this application from other applications, from other versions of this
- application, or from other versions of this application running on different
- versions of an accessibility bridge or accessibility toolkit.
-
- Servers implementing IAccessible2 should provide access to the %IAccessibleApplication
- interface via QueryService from any object so that ATs can easily determine specific
- information about the application such as its name or version.
-*/
-[object, uuid(D49DED83-5B25-43F4-9B95-93B44595979E)]
-interface IAccessibleApplication : IUnknown
-{
-
- /** @brief Returns the application name.
- @param [out] name
- @retval S_OK
- @retval S_FALSE if there is nothing to return, [out] value is NULL
- */
- [propget] HRESULT appName
- (
- [out, retval] BSTR *name
- );
-
- /** @brief Returns the application version.
- @param [out] version
- The version string must not contain levels when it is know beforehand that
- this information will never require a change in a client's behavior.
- For example, use "3.6.0" rather than "3.6.0.v201005131500".
- @retval S_OK
- @retval S_FALSE if there is nothing to return, [out] value is NULL
- */
- [propget] HRESULT appVersion
- (
- [out, retval] BSTR *version
- );
-
- /** @brief Returns the toolkit/bridge name.
- @param [out] name
- @retval S_OK
- @retval S_FALSE if there is nothing to return, [out] value is NULL
- */
- [propget] HRESULT toolkitName
- (
- [out, retval] BSTR *name
- );
-
- /** @brief Returns the toolkit/bridge version.
- @param [out] version
- The version string must not contain levels when it is know beforehand that
- this information will never require a change in a client's behavior.
- For example, use "3.6.0" rather than "3.6.0.v201005131500".
- @retval S_OK
- @retval S_FALSE if there is nothing to return, [out] value is NULL
- */
- [propget] HRESULT toolkitVersion
- (
- [out, retval] BSTR *version
- );
-
-}
-
diff --git a/src/3rdparty/iaccessible2/idl/AccessibleComponent.idl b/src/3rdparty/iaccessible2/idl/AccessibleComponent.idl
deleted file mode 100644
index bea623a938..0000000000
--- a/src/3rdparty/iaccessible2/idl/AccessibleComponent.idl
+++ /dev/null
@@ -1,124 +0,0 @@
-/*************************************************************************
- *
- * File Name (AccessibleComponent.idl)
- *
- * IAccessible2 IDL Specification
- *
- * Copyright (c) 2007, 2010 Linux Foundation
- * Copyright (c) 2006 IBM Corporation
- * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
- * All rights reserved.
- *
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * 3. Neither the name of the Linux Foundation nor the names of its
- * contributors may be used to endorse or promote products
- * derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * This BSD License conforms to the Open Source Initiative "Simplified
- * BSD License" as published at:
- * http://www.opensource.org/licenses/bsd-license.php
- *
- * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
- * mark may be used in accordance with the Linux Foundation Trademark
- * Policy to indicate compliance with the IAccessible2 specification.
- *
- ************************************************************************/
-
-import "objidl.idl";
-import "oaidl.idl";
-import "oleacc.idl";
-
-/** A value specifying a color in ARGB format, where each 8 bit color component
-specifies alpha, red, green, and blue respectively. The alpha value is optional.
-*/
-typedef long IA2Color;
-
-/** @brief This interface is implemented by any object that can be rendered
- on the screen.
-
- This interface provides the standard mechanism for an assistive technology
- to retrieve information concerning the graphical representation of an object.
- Coordinates used by the functions of this interface are specified in
- different coordinate systems. Their scale is the same and is equal to
- that of the screen coordinate system. In other words all coordinates
- are measured in pixels. They differ in their respective origin:
- <ul>
- <li>The screen coordinate system has its origin in the upper left
- corner of the current screen.</li>
- <li>The origin of the parent coordinate system is the upper left corner
- of the parent's bounding box. With no parent the screen coordinate
- system is used instead.</li>
- </ul>
-*/
-[object, uuid(1546D4B0-4C98-4bda-89AE-9A64748BDDE4)]
-interface IAccessibleComponent : IUnknown
-{
-
- /** @brief Returns the location of the upper left corner of the object's
- bounding box relative to the immediate parent object.
-
- The coordinates of the bounding box are given relative to the parent's
- coordinate system. The coordinates of the returned position are relative
- to this object's parent or relative to the screen on which this object
- is rendered if it has no parent. If the object is not on any screen
- the returned position is (0,0).
-
- @param [out] x
- @param [out] y
- @retval S_OK
- */
- [propget] HRESULT locationInParent
- (
- [out] long *x,
- [out, retval] long *y
- );
-
- /** @brief Returns the foreground color of this object.
- @param [out] foreground
- The returned color is the foreground color of this object or, if
- that is not supported, the default foreground color.
- @retval S_OK
- */
- [propget] HRESULT foreground
- (
- [out, retval] IA2Color *foreground
- );
-
- /** @brief Returns the background color of this object.
- @param [out] background
- The returned color is the background color of this object or, if
- that is not supported, the default background color.
- @retval S_OK
- */
- [propget] HRESULT background
- (
- [out, retval] IA2Color *background
- );
-}
diff --git a/src/3rdparty/iaccessible2/idl/AccessibleEditableText.idl b/src/3rdparty/iaccessible2/idl/AccessibleEditableText.idl
deleted file mode 100644
index 48fefd30ef..0000000000
--- a/src/3rdparty/iaccessible2/idl/AccessibleEditableText.idl
+++ /dev/null
@@ -1,259 +0,0 @@
-/*************************************************************************
- *
- * File Name (AccessibleEditableText.idl)
- *
- * IAccessible2 IDL Specification
- *
- * Copyright (c) 2007, 2010 Linux Foundation
- * Copyright (c) 2006 IBM Corporation
- * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
- * All rights reserved.
- *
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * 3. Neither the name of the Linux Foundation nor the names of its
- * contributors may be used to endorse or promote products
- * derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * This BSD License conforms to the Open Source Initiative "Simplified
- * BSD License" as published at:
- * http://www.opensource.org/licenses/bsd-license.php
- *
- * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
- * mark may be used in accordance with the Linux Foundation Trademark
- * Policy to indicate compliance with the IAccessible2 specification.
- *
- ************************************************************************/
-
-import "objidl.idl";
-import "oaidl.idl";
-import "oleacc.idl";
-import "IA2CommonTypes.idl";
-
-/** @brief This interface provides clipboard capability to text objects.
-
- This interface is typically used in conjunction with the IAccessibleText
- interface and complements that interface with the additional capability of
- clipboard operations. Note that even a read only text object can support
- the copy capability so this interface is not limited to editable objects.
-
- The substrings used with this interface are specified as follows:
- If startOffset is less than endOffset, the substring starts with the
- character at startOffset and ends with the character just before endOffset.
- If endOffset is lower than startOffset, the result is the same as a call
- with the two arguments exchanged. The whole text can be defined by passing
- the indices zero and IAccessibleText::nCharacters. If both indices have the
- same value, an empty string is defined.
-
- Refer to the @ref _specialOffsets
- "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
- for information about a special offset constant that can be used in %IAccessibleEditableText methods.
-*/
-[object, uuid(A59AA09A-7011-4b65-939D-32B1FB5547E3)]
-interface IAccessibleEditableText : IUnknown
-{
-
- /** @brief Copies the text range into the clipboard.
-
- The selection is set to the specified offsets and then selection is copied into
- the system clipboard.
-
- @param [in] startOffset
- Start index of the text to moved into the clipboard.
- The valid range is 0..length.
- @param [in] endOffset
- End index of the text to moved into the clipboard.
- The valid range is 0..length.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed
- @note Refer to @ref _specialOffsets
- "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
- for information about special offsets that can be used in %IAccessibleEditableText
- methods.
- */
- HRESULT copyText
- (
- [in] long startOffset,
- [in] long endOffset
- );
-
- /** @brief Deletes a range of text.
-
- The text between and including the two given indices is deleted
- from the text represented by this object.
-
- @param [in] startOffset
- Start index of the text to be deleted.
- The valid range is 0..length.
- @param [in] endOffset
- End index of the text to be deleted.
- The valid range is 0..length.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed
- @note Refer to @ref _specialOffsets
- "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
- for information about special offsets that can be used in %IAccessibleEditableText
- methods.
- */
- HRESULT deleteText
- (
- [in] long startOffset,
- [in] long endOffset
- );
-
- /** @brief Inserts text at the specified position.
-
- The specified string is inserted at the given index into the text
- represented by this object.
-
- @param [in] offset
- Index at which to insert the text.
- The valid range is 0..length.
- Refer to @ref _specialOffsets
- "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
- for information about special offsets that can be used in %IAccessibleEditableText
- methods.
- @param [in] text
- Text that is inserted.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed
- */
- HRESULT insertText
- (
- [in] long offset,
- [in] BSTR *text
- );
-
- /** @brief Deletes a range of text and copies it to the clipboard.
-
- The selection is set to the specified offsets, the selection is then copied into
- the system clipboard, and then the selection is deleted.
-
- @param [in] startOffset
- Start index of the text to be deleted.
- The valid range is 0..length.
- @param [in] endOffset
- End index of the text to be deleted.
- The valid range is 0..length.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed
- @note Refer to @ref _specialOffsets
- "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
- for information about special offsets that can be used in %IAccessibleEditableText
- methods.
- */
- HRESULT cutText
- (
- [in] long startOffset,
- [in] long endOffset
- );
-
- /** @brief Pastes content from the clipboard.
-
- Any existing selection is removed, the clipboard content is then pasted into
- this object's text at the given offset. This method is similar to the insertText
- method. If the index is not valid the system clipboard content is not inserted. The
- behavior is the same as when Ctrl+V is used, i.e. the pasted contents are not
- necessarily plain text.
-
- @param [in] offset
- Index at which to insert the content from the system clipboard into
- the text represented by this object.
- The valid range is 0..length.
- Refer to @ref _specialOffsets
- "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
- for information about special offsets that can be used in %IAccessibleEditableText
- methods.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed
- */
- HRESULT pasteText
- (
- [in] long offset
- );
-
- /** @brief Replaces text.
-
- The text between the two given indices is replaced by the specified
- replacement string. This method is equivalent to calling first
- IAccessibleEditableText::deleteText with the two indices and then
- calling IAccessibleEditableText::insertText with the replacement text
- at the start index.
-
- @param [in] startOffset
- Start index of the text to be replaced.
- The valid range is 0..length.
- @param [in] endOffset
- End index of the text to be replaced.
- The valid range is 0..length.
- @param [in] text
- The Text that replaces the text between the given indices.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed
- @note Refer to @ref _specialOffsets
- "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
- for information about special offsets that can be used in %IAccessibleEditableText
- methods.
- */
- HRESULT replaceText
- (
- [in] long startOffset,
- [in] long endOffset,
- [in] BSTR *text
- );
-
- /** @brief Replaces the attributes of a text range by the given set of attributes.
-
- Sets the attributes for the text between the two given indices. The old
- attributes are replaced by the new list of attributes.
-
- @param [in] startOffset
- Start index of the text whose attributes are modified.
- The valid range is 0..length.
- @param [in] endOffset
- End index of the text whose attributes are modified.
- The valid range is 0..length.
- @param [in] attributes
- Set of attributes that replaces the old list of attributes of
- the specified text portion.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed
- @note Refer to @ref _specialOffsets
- "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
- for information about special offsets that can be used in %IAccessibleEditableText
- methods.
- */
- HRESULT setAttributes
- (
- [in] long startOffset,
- [in] long endOffset,
- [in] BSTR *attributes
- );
-}
-
diff --git a/src/3rdparty/iaccessible2/idl/AccessibleEventID.idl b/src/3rdparty/iaccessible2/idl/AccessibleEventID.idl
deleted file mode 100644
index 1db957d6e5..0000000000
--- a/src/3rdparty/iaccessible2/idl/AccessibleEventID.idl
+++ /dev/null
@@ -1,230 +0,0 @@
-/*************************************************************************
- *
- * File Name (AccessibleEventID.idl)
- *
- * IAccessible2 IDL Specification
- *
- * Copyright (c) 2007, 2010 Linux Foundation
- * Copyright (c) 2006 IBM Corporation
- * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
- * All rights reserved.
- *
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * 3. Neither the name of the Linux Foundation nor the names of its
- * contributors may be used to endorse or promote products
- * derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * This BSD License conforms to the Open Source Initiative "Simplified
- * BSD License" as published at:
- * http://www.opensource.org/licenses/bsd-license.php
- *
- * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
- * mark may be used in accordance with the Linux Foundation Trademark
- * Policy to indicate compliance with the IAccessible2 specification.
- *
- ************************************************************************/
-
-/** %IAccessible2 specific event constants
-
- This enum defines the event IDs fired by %IAccessible2 objects. The event IDs
- are in addition to those used by MSAA.
-*/
-enum IA2EventID {
-
- /** The change of the number or attributes of actions of an accessible
- object is signaled by events of this type.
- */
- IA2_EVENT_ACTION_CHANGED = 0x101,
-
- /** <b>Deprecated.</b> The active descendant of a component has changed.
-
- Note: This event constant is misspelled and thus is deprecated and will be
- removed in a later version. Please use the correctly spelled version which
- follows.
- */
- IA2_EVENT_ACTIVE_DECENDENT_CHANGED,
-
- /** The active descendant of a component has changed. The active descendant
- is used in objects with transient children.
-
- Note: Due to the fact that MSAA's WinEvents don't allow the active child index
- to be passed on the IA2_EVENT_ACTIVE_DESCENDANT_CHANGED event the manages
- descendants scheme can't be used. Instead the active child object has to fire
- MSAA's EVENT_OBJECT_FOCUS. In a future release a new event mechanism may be
- added to provide for event specific data to be passed with the event. At that
- time the IA2_EVENT_ACTIVE_DECENDENT_CHANGED event and
- IA2_STATE_MANAGES_DESCENDANTS state would be useful.
- */
- IA2_EVENT_ACTIVE_DESCENDANT_CHANGED = IA2_EVENT_ACTIVE_DECENDENT_CHANGED,
-
- /** The document wide attributes of the document object have changed.
- */
- IA2_EVENT_DOCUMENT_ATTRIBUTE_CHANGED,
-
- /** The contents of the document have changed.
- */
- IA2_EVENT_DOCUMENT_CONTENT_CHANGED,
-
- /** The loading of the document has completed.
- */
- IA2_EVENT_DOCUMENT_LOAD_COMPLETE,
-
- /** The loading of the document was interrupted.
- */
- IA2_EVENT_DOCUMENT_LOAD_STOPPED,
-
- /** The document contents are being reloaded.
- */
- IA2_EVENT_DOCUMENT_RELOAD,
-
- /** The ending index of this link within the containing string has changed.
- */
- IA2_EVENT_HYPERLINK_END_INDEX_CHANGED,
-
- /** The number of anchors associated with this hyperlink object has changed.
- */
- IA2_EVENT_HYPERLINK_NUMBER_OF_ANCHORS_CHANGED,
-
- /** The hyperlink selected state changed from selected to unselected or
- from unselected to selected.
- */
- IA2_EVENT_HYPERLINK_SELECTED_LINK_CHANGED,
-
- /** One of the links associated with the hypertext object has been activated.
- */
- IA2_EVENT_HYPERTEXT_LINK_ACTIVATED,
-
- /** One of the links associated with the hypertext object has been selected.
- */
- IA2_EVENT_HYPERTEXT_LINK_SELECTED,
-
- /** The starting index of this link within the containing string has changed.
- */
- IA2_EVENT_HYPERLINK_START_INDEX_CHANGED,
-
- /** Focus has changed from one hypertext object to another, or focus moved
- from a non-hypertext object to a hypertext object, or focus moved from a
- hypertext object to a non-hypertext object.
- */
- IA2_EVENT_HYPERTEXT_CHANGED,
-
- /** The number of hyperlinks associated with a hypertext object changed
- */
- IA2_EVENT_HYPERTEXT_NLINKS_CHANGED,
-
- /** An object's attributes changed.
- Also see ::IA2_EVENT_TEXT_ATTRIBUTE_CHANGED.
- */
- IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED,
-
- /** A slide changed in a presentation document or a page boundary was
- crossed in a word processing document.
- */
- IA2_EVENT_PAGE_CHANGED,
-
- /** The caret moved from one section to the next.
- */
- IA2_EVENT_SECTION_CHANGED,
-
- /** A table caption changed.
- */
- IA2_EVENT_TABLE_CAPTION_CHANGED,
-
- /** A table's column description changed.
- */
- IA2_EVENT_TABLE_COLUMN_DESCRIPTION_CHANGED,
-
- /** A table's column header changed.
- */
- IA2_EVENT_TABLE_COLUMN_HEADER_CHANGED,
-
- /** A table's data changed.
- */
- IA2_EVENT_TABLE_MODEL_CHANGED,
-
- /** A table's row description changed.
- */
- IA2_EVENT_TABLE_ROW_DESCRIPTION_CHANGED,
-
- /** A table's row header changed.
- */
- IA2_EVENT_TABLE_ROW_HEADER_CHANGED,
-
- /** A table's summary changed.
- */
- IA2_EVENT_TABLE_SUMMARY_CHANGED,
-
- /** A text object's attributes changed.
- Also see ::IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED.
- */
- IA2_EVENT_TEXT_ATTRIBUTE_CHANGED,
-
- /** The caret has moved to a new position.
- */
- IA2_EVENT_TEXT_CARET_MOVED,
-
- /** <b>Deprecated.</b> This event is equivalent to ::IA2_EVENT_TEXT_UPDATED.
- */
- IA2_EVENT_TEXT_CHANGED,
-
- /** The caret moved from one column to the next.
- */
- IA2_EVENT_TEXT_COLUMN_CHANGED,
-
- /** Text was inserted.
- */
- IA2_EVENT_TEXT_INSERTED,
-
- /** Text was removed.
- */
- IA2_EVENT_TEXT_REMOVED,
-
- /** This event indicates general text changes, i.e. changes to text that are
- exposed through the IAccessibleText interface. For compatibility with ATK/AT-SPI
- which does not have an equivalent event, servers can alternatively fire
- ::IA2_EVENT_TEXT_REMOVED and ::IA2_EVENT_TEXT_INSERTED.
- */
- IA2_EVENT_TEXT_UPDATED,
-
- /** The text selection changed. Later versions of Microsoft development environments
- have an equivalent event identified, EVENT_OBJECT_TEXTSELECTIONCHANGED. Servers
- should use that if it is available and use IA2_EVENT_TEXT_SELECTION_CHANGED otherwise.
- Clients should be prepared to respond to either event.
-
- */
- IA2_EVENT_TEXT_SELECTION_CHANGED,
-
- /** A visible data event indicates the change of the visual appearance
- of an accessible object. This includes for example most of the
- attributes available via the IAccessibleComponent interface.
- */
- IA2_EVENT_VISIBLE_DATA_CHANGED
-
-};
diff --git a/src/3rdparty/iaccessible2/idl/AccessibleHyperlink.idl b/src/3rdparty/iaccessible2/idl/AccessibleHyperlink.idl
deleted file mode 100644
index 9311176d9c..0000000000
--- a/src/3rdparty/iaccessible2/idl/AccessibleHyperlink.idl
+++ /dev/null
@@ -1,187 +0,0 @@
-/*************************************************************************
- *
- * File Name (AccessibleHyperlink.idl)
- *
- * IAccessible2 IDL Specification
- *
- * Copyright (c) 2007, 2010 Linux Foundation
- * Copyright (c) 2006 IBM Corporation
- * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
- * All rights reserved.
- *
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * 3. Neither the name of the Linux Foundation nor the names of its
- * contributors may be used to endorse or promote products
- * derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * This BSD License conforms to the Open Source Initiative "Simplified
- * BSD License" as published at:
- * http://www.opensource.org/licenses/bsd-license.php
- *
- * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
- * mark may be used in accordance with the Linux Foundation Trademark
- * Policy to indicate compliance with the IAccessible2 specification.
- *
- ************************************************************************/
-
-import "objidl.idl";
-import "oaidl.idl";
-import "oleacc.idl";
-import "AccessibleAction.idl";
-
-/** @brief This interface represents hyperlinks.
-
- This interface represents a hyperlink associated with a single substring
- of text or single non-text object. Non-text objects can have either a
- single link or a collection of links such as when the non-text object is
- an image map.
-
- Linked objects and anchors are implementation dependent. This interface is derived
- from IAccessibleAction. IAccessibleAction::nActions is one greater than the
- maximum value for the indices used with the methods of this interface.
-
- Furthermore, the object that implements this interface has to be connected
- implicitly or explicitly with an object that implements IAccessibleText.
- IAccessibleHyperlink::startIndex and IAccessibleHyperlink::endIndex are
- indices with respect to the text exposed by IAccessibleText.
-
- This interface provides access to a single object which can have multiple actions.
- An example is an image map which is an image with multiple links each of which is
- associated with a separate non-overlapping area of the image. This interface could
- also be applied to other kinds of objects with multiple actions such as "smart tags"
- which are objects, typically strings, which have multiple actions such as
- "Activate URI", "Bookmark URI", etc.
-
- An interesting use case is an image map where each area is associated with multiple
- actions, e.g. an image map of smart tags. In this case you would have to implement
- two levels of accessible hyperlinks. The first level hyperlinks would only implement
- anchor and anchorTarget. The anchors would all reference the image object. The
- anchorTargets would reference the second level accessible hyperlink objects. None
- of the IAccessibleAction methods would be implemented on the first level hyperlink
- objects. The second level hyperlink objects would implement the IAccessibleAction
- methods. Their anchors would also reference the image object and their anchorTargets
- would reference URLs or the objects that would be activated.
-
- This use case demonstrates that in some cases there is no need for IAccessibleHyperlink
- to derive from IAccessibleAction. As a result it may be removed in a later version of
- the IDL and it is suggested that implementations should not rely on the inheritance.
-
-*/
-[object, uuid(01C20F2B-3DD2-400f-949F-AD00BDAB1D41)]
-interface IAccessibleHyperlink : IAccessibleAction
-{
-
- /** @brief Returns an object that represents the link anchor, as appropriate
- for the link at the specified index.
- @param [in] index
- A 0 based index identifies the anchor when, as in the case of an image map,
- there is more than one link represented by this object. The valid maximal
- index is indicated by IAccessibleAction::nActions.
- @param [out] anchor
- This is an implementation dependent value. For example, for a text link this
- method could return the substring of the containing string where the substring
- is overridden with link behavior, and for an image link this method could return
- an IUnknown VARIANT for IAccessibleImage. See the section about
- @ref _variants "VARIANTs" for additional information.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed
- */
- [propget] HRESULT anchor
- (
- [in] long index,
- [out, retval] VARIANT *anchor
- );
-
- /** @brief Returns an object representing the target of the link, as appropriate
- for the link at the specified index.
- @param [in] index
- A 0 based index identifies the anchor when, as in the case of an image map,
- there is more than one link represented by this object. The valid maximal
- index is indicated by IAccessibleAction::nActions.
- @param [out] anchorTarget
- This is an implementation dependent value. For example this method could
- return a BSTR VARIANT of the URI. Alternatively this method could return an
- IUnknown VARIANT of a COM interface representing a target object to be
- activated when the link is activated. See the section about
- @ref _variants "VARIANTs" for additional information.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed
- */
- [propget] HRESULT anchorTarget
- (
- [in] long index,
- [out, retval] VARIANT *anchorTarget
- );
-
- /** @brief Returns the 0 based character offset at which the textual representation of the hyperlink starts.
-
- The returned value is related to the IAccessibleText interface of the object that
- owns this hyperlink.
- @param [out] index
- @retval S_OK
- */
- [propget] HRESULT startIndex
- (
- [out, retval] long *index
- );
-
- /** @brief Returns the 0 based character offset at which the textual representation of the hyperlink ends.
-
- The returned value is related to the IAccessibleText interface of the object that
- owns this hyperlink. The character at the index is not part of the hypertext.
- @param [out] index
- @retval S_OK
- */
- [propget] HRESULT endIndex
- (
- [out, retval] long *index
- );
-
- /** @brief Returns whether the target object referenced by this link is still valid.
-
- This is a volatile state that may change without sending an appropriate event.
- Returns TRUE if the referenced target is still valid and FALSE otherwise.
-
- This has also been used to indicate whether or not the URI of the anchorTarget
- is malformed.
-
- @param [out] valid
- If false, one or more of the object's links are invalid.
- If true, all of the object's links are valid.
- @retval S_OK
- @retval S_FALSE if there is nothing to return, [out] value is FALSE
- @note This method is not being used, is deprecated, and should not be implemented or
- used. It is likely that this method will be removed in a later version of the IDL.
- */
- [propget] HRESULT valid
- (
- [out, retval] boolean *valid
- );
-}
diff --git a/src/3rdparty/iaccessible2/idl/AccessibleHypertext.idl b/src/3rdparty/iaccessible2/idl/AccessibleHypertext.idl
deleted file mode 100644
index 13093bf610..0000000000
--- a/src/3rdparty/iaccessible2/idl/AccessibleHypertext.idl
+++ /dev/null
@@ -1,123 +0,0 @@
-/*************************************************************************
- *
- * File Name (AccessibleHypertext.idl)
- *
- * IAccessible2 IDL Specification
- *
- * Copyright (c) 2007, 2010 Linux Foundation
- * Copyright (c) 2006 IBM Corporation
- * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
- * All rights reserved.
- *
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * 3. Neither the name of the Linux Foundation nor the names of its
- * contributors may be used to endorse or promote products
- * derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * This BSD License conforms to the Open Source Initiative "Simplified
- * BSD License" as published at:
- * http://www.opensource.org/licenses/bsd-license.php
- *
- * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
- * mark may be used in accordance with the Linux Foundation Trademark
- * Policy to indicate compliance with the IAccessible2 specification.
- *
- ************************************************************************/
-
-import "objidl.idl";
-import "oaidl.idl";
-import "oleacc.idl";
-import "AccessibleText.idl";
-import "AccessibleHyperlink.idl";
-
-/** @brief This interface exposes information about hypertext in a document.
-
- The %IAccessibleHypertext interface is the main interface to expose
- hyperlinks in a document, typically a text document, that are used
- to reference other documents. A typical implementation is to implement
- this interface on the smallest text object such as a paragraph of text.
-*/
-[object, uuid(6B4F8BBF-F1F2-418a-B35E-A195BC4103B9)]
-interface IAccessibleHypertext : IAccessibleText
-{
-
- /** @brief Returns the number of links and link groups contained within this hypertext
- paragraph.
- @param [out] hyperlinkCount
- The number of links and link groups within this hypertext paragraph.
- Returns 0 if there is no link.
- @retval S_OK
- */
- [propget] HRESULT nHyperlinks
- (
- [out, retval] long *hyperlinkCount
- );
-
- /** @brief Returns the specified link.
-
- The returned IAccessibleHyperlink object encapsulates the hyperlink and
- provides several kinds of information describing it.
- @param [in] index
- This 0 based index specifies the hyperlink to return.
- @param [out] hyperlink
- If the given index is valid, i.e. lies in the interval from 0 to the number
- of links minus one, a reference to the specified hyperlink object is returned.
- If the index is invalid then a NULL pointer is returned.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed
- */
- [propget] HRESULT hyperlink
- (
- [in] long index,
- [out, retval] IAccessibleHyperlink **hyperlink
- );
-
- /** @brief Returns the index of the hyperlink that is associated with this character index.
-
- This is the case when a link spans the given character index.
- @param [in] charIndex
- A 0 based index of the character for which to return the link index. If
- IAccessibleText is used to represent the text containing the link, then the
- character index is only valid if it is greater than or equal to zero and
- lower than the number of characters in the text.
- @param [out] hyperlinkIndex
- Returns the 0 based index of the hyperlink that is associated with this
- character index, or -1 if charIndex is not on a link.
- @retval S_OK
- @retval S_FALSE if there is nothing to return, [out] value is -1
- @retval E_INVALIDARG if bad [in] passed
- */
- [propget] HRESULT hyperlinkIndex
- (
- [in] long charIndex,
- [out, retval] long *hyperlinkIndex
- );
-
-}
diff --git a/src/3rdparty/iaccessible2/idl/AccessibleImage.idl b/src/3rdparty/iaccessible2/idl/AccessibleImage.idl
deleted file mode 100644
index e347614e29..0000000000
--- a/src/3rdparty/iaccessible2/idl/AccessibleImage.idl
+++ /dev/null
@@ -1,111 +0,0 @@
-/*************************************************************************
- *
- * File Name (AccessibleImage.idl)
- *
- * IAccessible2 IDL Specification
- *
- * Copyright (c) 2007, 2010 Linux Foundation
- * Copyright (c) 2006 IBM Corporation
- * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
- * All rights reserved.
- *
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * 3. Neither the name of the Linux Foundation nor the names of its
- * contributors may be used to endorse or promote products
- * derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * This BSD License conforms to the Open Source Initiative "Simplified
- * BSD License" as published at:
- * http://www.opensource.org/licenses/bsd-license.php
- *
- * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
- * mark may be used in accordance with the Linux Foundation Trademark
- * Policy to indicate compliance with the IAccessible2 specification.
- *
- ************************************************************************/
-
-import "objidl.idl";
-import "oaidl.idl";
-import "oleacc.idl";
-import "IA2CommonTypes.idl";
-
-/** @brief This interface represents images and icons.
-
- This interface is used for a representation of images like icons on buttons.
- %IAccessibleImage only needs to be implemented in certain situations. Some
- examples are:
- <ol>
- <li>The accessible name and description are not enough to fully
- describe the image, e.g. when the accessible description is used to define the
- behavior of an actionable image and the image itself conveys semantically
- significant information.
- <li>The user can edit the content that includes an
- image and therefore the user needs to be able to review the image's position.
- </ol>
-*/
-[object, uuid(FE5ABB3D-615E-4f7b-909F-5F0EDA9E8DDE)]
-interface IAccessibleImage : IUnknown
-{
- /** @brief Returns the localized description of the image.
- @param [out] description
- @retval S_OK
- @retval S_FALSE if there is nothing to return, [out] value is NULL
- */
- [propget] HRESULT description
- (
- [out, retval] BSTR *description
- );
-
- /** @brief Returns the coordinates of the image.
- @param [in] coordinateType
- Specifies whether the returned coordinates should be relative to the screen or the parent object.
- @param [out] x
- @param [out] y
- @retval S_OK
- */
- [propget] HRESULT imagePosition
- (
- [in] enum IA2CoordinateType coordinateType,
- [out] long *x,
- [out, retval] long *y
- );
-
- /** @brief Returns the size of the image in units specified by parent's coordinate system.
- @param [out] height
- @param [out] width
- @retval S_OK
- */
-
- [propget] HRESULT imageSize
- (
- [out] long *height,
- [out, retval] long *width
- );
-}
diff --git a/src/3rdparty/iaccessible2/idl/AccessibleRelation.idl b/src/3rdparty/iaccessible2/idl/AccessibleRelation.idl
deleted file mode 100644
index b0c6dfcc97..0000000000
--- a/src/3rdparty/iaccessible2/idl/AccessibleRelation.idl
+++ /dev/null
@@ -1,197 +0,0 @@
-/*************************************************************************
- *
- * File Name (AccessibleRelation.idl)
- *
- * IAccessible2 IDL Specification
- *
- * Copyright (c) 2007, 2010 Linux Foundation
- * Copyright (c) 2006 IBM Corporation
- * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
- * All rights reserved.
- *
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * 3. Neither the name of the Linux Foundation nor the names of its
- * contributors may be used to endorse or promote products
- * derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * This BSD License conforms to the Open Source Initiative "Simplified
- * BSD License" as published at:
- * http://www.opensource.org/licenses/bsd-license.php
- *
- * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
- * mark may be used in accordance with the Linux Foundation Trademark
- * Policy to indicate compliance with the IAccessible2 specification.
- *
- ************************************************************************/
-
-import "objidl.idl";
-import "oaidl.idl";
-import "oleacc.idl";
-
-/** @defgroup grpRelations Relations
- Use the following constants to compare against the BSTRs returned by
- IAccessibleRelation::relationType.
-*/
-///@{
-
-/** Some attribute of this object is affected by a target object. */
-const WCHAR *const IA2_RELATION_CONTROLLED_BY = L"controlledBy";
-
-/** This object is interactive and controls some attribute of a target object. */
-const WCHAR *const IA2_RELATION_CONTROLLER_FOR = L"controllerFor";
-
-/** This object is described by the target object. */
-const WCHAR *const IA2_RELATION_DESCRIBED_BY = L"describedBy";
-
-/** This object is describes the target object. */
-const WCHAR *const IA2_RELATION_DESCRIPTION_FOR = L"descriptionFor";
-
-/** This object is embedded by a target object. */
-const WCHAR *const IA2_RELATION_EMBEDDED_BY = L"embeddedBy";
-
-/** This object embeds a target object. This relation can be used on the
- OBJID_CLIENT accessible for a top level window to show where the content
- areas are.
-*/
-const WCHAR *const IA2_RELATION_EMBEDS = L"embeds";
-
-/** Content flows to this object from a target object.
- This relation and IA2_RELATION_FLOWS_TO are useful to tie text and non-text
- objects together in order to allow assistive technology to follow the
- intended reading order.
-*/
-const WCHAR *const IA2_RELATION_FLOWS_FROM = L"flowsFrom";
-
-/** Content flows from this object to a target object. */
-const WCHAR *const IA2_RELATION_FLOWS_TO = L"flowsTo";
-
-/** This object is label for a target object. */
-const WCHAR *const IA2_RELATION_LABEL_FOR = L"labelFor";
-
-/** This object is labelled by a target object. Note that the double L spelling
- which follows is preferred. Please use it instead. This single L version may
- be removed in a later version.
-*/
-const WCHAR *const IA2_RELATION_LABELED_BY = L"labelledBy";
-
-/** This object is labelled by a target object. */
-const WCHAR *const IA2_RELATION_LABELLED_BY = L"labelledBy";
-
-/** This object is a member of a group of one or more objects. When
- there is more than one object in the group each member may have one and the
- same target, e.g. a grouping object. It is also possible that each member has
- multiple additional targets, e.g. one for every other member in the group.
-*/
-const WCHAR *const IA2_RELATION_MEMBER_OF = L"memberOf";
-
-/** This object is a child of a target object. */
-const WCHAR *const IA2_RELATION_NODE_CHILD_OF = L"nodeChildOf";
-
-/** This object is a parent window of the target object. */
-const WCHAR *const IA2_RELATION_PARENT_WINDOW_OF = L"parentWindowOf";
-
-/** This object is a transient component related to the target object.
- When this object is activated the target object doesn't lose focus.
-*/
-const WCHAR *const IA2_RELATION_POPUP_FOR = L"popupFor";
-
-/** This object is a sub window of a target object. */
-const WCHAR *const IA2_RELATION_SUBWINDOW_OF = L"subwindowOf";
-
-///@}
-
-/// This interface gives access to an object's set of relations.
-[object, uuid(7CDF86EE-C3DA-496a-BDA4-281B336E1FDC)]
-interface IAccessibleRelation : IUnknown
-{
- /** @brief Returns the type of the relation.
- @param [out] relationType
- The strings returned are defined @ref grpRelations "in this section of the documentation".
- @retval S_OK
- */
- [propget] HRESULT relationType
- (
- [out, retval] BSTR *relationType
- );
-
- /** @brief Returns a localized version of the relation type.
- @param [out] localizedRelationType
- @retval S_OK
- */
- [propget] HRESULT localizedRelationType
- (
- [out, retval] BSTR *localizedRelationType
- );
-
- /** @brief Returns the number of targets for this relation.
- @param [out] nTargets
- @retval S_OK
- */
- [propget] HRESULT nTargets
- (
- [out, retval] long *nTargets
- );
-
- /** @brief Returns one accessible relation target.
- @param [in] targetIndex
- 0 based index
- @param [out] target
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed
- @note Use QueryInterface to get IAccessible2.
- */
- [propget] HRESULT target
- (
- [in] long targetIndex,
- [out, retval] IUnknown **target
- );
-
- /** @brief Returns multiple accessible relation targets
- @param [in] maxTargets
- maximum size of the array allocated by the client
- @param [out] targets
- The array of target objects. Note that this array is to be allocated by the
- client and freed when no longer needed. Refer to @ref _arrayConsideration
- "Special Consideration when using Arrays" for more details. You will need to use
- QueryInterface on the IUnknown to get the IAccessible2.
- @param [out] nTargets
- actual number of targets in the returned array (not more than maxTargets)
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed, e.g. a negative value
- */
- [propget] HRESULT targets
- (
- [in] long maxTargets,
- [out, size_is(maxTargets), length_is(*nTargets)]
- IUnknown **targets,
- [out, retval] long *nTargets
- );
-
-}
diff --git a/src/3rdparty/iaccessible2/idl/AccessibleRole.idl b/src/3rdparty/iaccessible2/idl/AccessibleRole.idl
deleted file mode 100644
index 385e02d05a..0000000000
--- a/src/3rdparty/iaccessible2/idl/AccessibleRole.idl
+++ /dev/null
@@ -1,293 +0,0 @@
-/*************************************************************************
- *
- * File Name (AccessibleRole.idl)
- *
- * IAccessible2 IDL Specification
- *
- * Copyright (c) 2007, 2010 Linux Foundation
- * Copyright (c) 2006 IBM Corporation
- * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
- * All rights reserved.
- *
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * 3. Neither the name of the Linux Foundation nor the names of its
- * contributors may be used to endorse or promote products
- * derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * This BSD License conforms to the Open Source Initiative "Simplified
- * BSD License" as published at:
- * http://www.opensource.org/licenses/bsd-license.php
- *
- * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
- * mark may be used in accordance with the Linux Foundation Trademark
- * Policy to indicate compliance with the IAccessible2 specification.
- *
- ************************************************************************/
-
-import "objidl.idl";
-
-/** Collection of roles
-
- This enumerator defines an extended set of accessible roles of objects implementing
- the %IAccessible2 interface. These roles are in addition to the MSAA roles obtained
- through the MSAA get_accRole method. Examples are 'footnote', 'heading', and
- 'label'. You obtain an object's %IAccessible2 roles by calling IAccessible2::role.
-*/
-enum IA2Role {
-
- /** Unknown role. The object contains some Accessible information, but its
- role is not known.
- */
- IA2_ROLE_UNKNOWN = 0,
-
- /** An object that can be drawn into and to manage events from the objects
- drawn into it. Also refer to ::IA2_ROLE_FRAME,
- ::IA2_ROLE_GLASS_PANE, and ::IA2_ROLE_LAYERED_PANE.
- */
- IA2_ROLE_CANVAS = 0x401,
-
- /// A caption describing another object.
- IA2_ROLE_CAPTION,
-
- /// Used for check buttons that are menu items.
- IA2_ROLE_CHECK_MENU_ITEM,
-
- /// A specialized dialog that lets the user choose a color.
- IA2_ROLE_COLOR_CHOOSER,
-
- /// A date editor.
- IA2_ROLE_DATE_EDITOR,
-
- /** An iconified internal frame in an ::IA2_ROLE_DESKTOP_PANE.
- Also refer to ::IA2_ROLE_INTERNAL_FRAME.
- */
- IA2_ROLE_DESKTOP_ICON,
-
- /** A desktop pane. A pane that supports internal frames and iconified
- versions of those internal frames. Also refer to ::IA2_ROLE_INTERNAL_FRAME.
- */
- IA2_ROLE_DESKTOP_PANE,
-
- /** A directory pane. A pane that allows the user to navigate through
- and select the contents of a directory. May be used by a file chooser.
- Also refer to ::IA2_ROLE_FILE_CHOOSER.
- */
- IA2_ROLE_DIRECTORY_PANE,
-
- /** An editable text object in a toolbar. <b>Deprecated.</b>
- The edit bar role was meant for a text area in a tool bar. However, to detect
- a text area in a tool bar the AT can query the parent.
- */
- IA2_ROLE_EDITBAR,
-
- /// Embedded (OLE) object.
- IA2_ROLE_EMBEDDED_OBJECT,
-
- /// Text that is used as an endnote (footnote at the end of a chapter or section).
- IA2_ROLE_ENDNOTE,
-
- /** A file chooser. A specialized dialog that displays the files in the
- directory and lets the user select a file, browse a different directory,
- or specify a filename. May use the directory pane to show the contents of
- a directory.
- Also refer to ::IA2_ROLE_DIRECTORY_PANE.
- */
- IA2_ROLE_FILE_CHOOSER,
-
- /** A font chooser. A font chooser is a component that lets the user pick
- various attributes for fonts.
- */
- IA2_ROLE_FONT_CHOOSER,
-
- /** Footer of a document page.
- Also refer to ::IA2_ROLE_HEADER.
- */
- IA2_ROLE_FOOTER,
-
- /// Text that is used as a footnote. Also refer to ::IA2_ROLE_ENDNOTE.
- IA2_ROLE_FOOTNOTE,
-
- /** A container of form controls. An example of the use of this role is to
- represent an HTML FORM tag.
- */
- IA2_ROLE_FORM,
-
- /** Frame role. A top level window with a title bar, border, menu bar, etc.
- It is often used as the primary window for an application. Also refer to
- ::IA2_ROLE_CANVAS and the MSAA roles of dialog and window.
- */
- IA2_ROLE_FRAME,
-
- /** A glass pane. A pane that is guaranteed to be painted on top of all panes
- beneath it. Also refer to ::IA2_ROLE_CANVAS, ::IA2_ROLE_INTERNAL_FRAME, and
- ::IA2_ROLE_ROOT_PANE.
- */
- IA2_ROLE_GLASS_PANE,
-
- /** Header of a document page.
- Also refer to ::IA2_ROLE_FOOTER.
- */
- IA2_ROLE_HEADER,
-
- /// Heading. Use the IAccessible2::attributes level attribute to determine the heading level.
- IA2_ROLE_HEADING,
-
- /// A small fixed size picture, typically used to decorate components.
- IA2_ROLE_ICON,
-
- /** An image map object. Usually a graphic with multiple hotspots, where
- each hotspot can be activated resulting in the loading of another document
- or section of a document.
- */
- IA2_ROLE_IMAGE_MAP,
-
- /** An object which is used to allow input of characters not found on a keyboard,
- such as the input of Chinese characters on a Western keyboard.
- */
- IA2_ROLE_INPUT_METHOD_WINDOW,
-
- /** An internal frame. A frame-like object that is clipped by a desktop pane.
- The desktop pane, internal frame, and desktop icon objects are often used to
- create multiple document interfaces within an application.
- Also refer to ::IA2_ROLE_DESKTOP_ICON, ::IA2_ROLE_DESKTOP_PANE, and ::IA2_ROLE_FRAME.
- */
- IA2_ROLE_INTERNAL_FRAME,
-
- /// An object used to present an icon or short string in an interface.
- IA2_ROLE_LABEL,
-
- /** A layered pane. A specialized pane that allows its children to be drawn
- in layers, providing a form of stacking order. This is usually the pane that
- holds the menu bar as well as the pane that contains most of the visual
- components in a window.
- Also refer to ::IA2_ROLE_CANVAS, ::IA2_ROLE_GLASS_PANE, and ::IA2_ROLE_ROOT_PANE.
- */
- IA2_ROLE_LAYERED_PANE,
-
- /// An embedded note which is not visible until activated.
- IA2_ROLE_NOTE,
-
- /** A specialized pane whose primary use is inside a dialog.
- Also refer to MSAA's dialog role.
- */
- IA2_ROLE_OPTION_PANE,
-
- /** An object representing a page of document content. It is used in documents
- which are accessed by the user on a page by page basis.
- */
- IA2_ROLE_PAGE,
-
- /// A paragraph of text.
- IA2_ROLE_PARAGRAPH,
-
- /** A radio button that is a menu item.
- Also refer to MSAA's button and menu item roles.
- */
- IA2_ROLE_RADIO_MENU_ITEM,
-
- /** An object which is redundant with another object in the accessible hierarchy.
- ATs typically ignore objects with this role.
- */
- IA2_ROLE_REDUNDANT_OBJECT,
-
- /** A root pane. A specialized pane that has a glass pane and a layered pane
- as its children.
- Also refer to ::IA2_ROLE_GLASS_PANE and ::IA2_ROLE_LAYERED_PANE
- */
- IA2_ROLE_ROOT_PANE,
-
- /** A ruler such as those used in word processors.
- */
- IA2_ROLE_RULER,
-
- /** A scroll pane. An object that allows a user to incrementally view a large
- amount of information. Its children can include scroll bars and a viewport.
- Also refer to ::IA2_ROLE_VIEW_PORT and MSAA's scroll bar role.
- */
- IA2_ROLE_SCROLL_PANE,
-
- /** A container of document content. An example of the use of this role is to
- represent an HTML DIV tag. A section may be used as a region. A region is a
- group of elements that together form a perceivable unit. A region does not
- necessarily follow the logical structure of the content, but follows the
- perceivable structure of the page. A region may have an attribute in the set
- of IAccessible2::attributes which indicates that it is "live". A live region
- is content that is likely to change in response to a timed change, a user
- event, or some other programmed logic or event.
- */
- IA2_ROLE_SECTION,
-
- /// Object with graphical representation used to represent content on draw pages.
- IA2_ROLE_SHAPE,
-
- /** A split pane. A specialized panel that presents two other panels at the
- same time. Between the two panels is a divider the user can manipulate to make
- one panel larger and the other panel smaller.
- */
- IA2_ROLE_SPLIT_PANE,
-
- /** An object that forms part of a menu system but which can be "undocked"
- from or "torn off" the menu system to exist as a separate window.
- */
- IA2_ROLE_TEAR_OFF_MENU,
-
- /// An object used as a terminal emulator.
- IA2_ROLE_TERMINAL,
-
- /// Collection of objects that constitute a logical text entity.
- IA2_ROLE_TEXT_FRAME,
-
- /** A toggle button. A specialized push button that can be checked or unchecked,
- but does not provide a separate indicator for the current state.
- Also refer to MSAA's roles of push button, check box, and radio button.
- <BR><B>Note:</B> IA2_ROLE_TOGGLE_BUTTON should not be used. Instead, use MSAA's
- ROLE_SYSTEM_PUSHBUTTON and STATE_SYSTEM_PRESSED.
- */
- IA2_ROLE_TOGGLE_BUTTON,
-
- /** A viewport. An object usually used in a scroll pane. It represents the
- portion of the entire data that the user can see. As the user manipulates
- the scroll bars, the contents of the viewport can change.
- Also refer to ::IA2_ROLE_SCROLL_PANE.
- */
- IA2_ROLE_VIEW_PORT,
-
- /** An object containing content which is complementary to the main content of
- a document, but remains meaningful when separated from the main content. There
- are various types of content that would appropriately have this role. For example,
- in the case where content is delivered via a web portal to a web browser, this may
- include but not be limited to show times, current weather, related articles, or
- stocks to watch. The complementary role indicates that contained content is relevant
- to the main content. If the complementary content is completely separable main
- content, it may be appropriate to use a more general role.
- */
- IA2_ROLE_COMPLEMENTARY_CONTENT
-
-};
diff --git a/src/3rdparty/iaccessible2/idl/AccessibleStates.idl b/src/3rdparty/iaccessible2/idl/AccessibleStates.idl
deleted file mode 100644
index 0304b643da..0000000000
--- a/src/3rdparty/iaccessible2/idl/AccessibleStates.idl
+++ /dev/null
@@ -1,209 +0,0 @@
-/*************************************************************************
- *
- * File Name (AccessibleStates.idl)
- *
- * IAccessible2 IDL Specification
- *
- * Copyright (c) 2007, 2010 Linux Foundation
- * Copyright (c) 2006 IBM Corporation
- * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
- * All rights reserved.
- *
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * 3. Neither the name of the Linux Foundation nor the names of its
- * contributors may be used to endorse or promote products
- * derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * This BSD License conforms to the Open Source Initiative "Simplified
- * BSD License" as published at:
- * http://www.opensource.org/licenses/bsd-license.php
- *
- * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
- * mark may be used in accordance with the Linux Foundation Trademark
- * Policy to indicate compliance with the IAccessible2 specification.
- *
- ************************************************************************/
-
-import "objidl.idl";
-
-typedef long AccessibleStates;
-
-/** %IAccessible2 specific state bit constants
-
- This enum defines the state bits returned by IAccessible2::states. The
- %IAccessible2 state bits are in addition to those returned by MSAA.
-*/
-enum IA2States {
-
-/** Indicates a window is currently the active window, or is an active subelement
- within a container or table.
-
- This state can be used to indicate the current active item in a container, even
- if the container itself is not currently active. In other words this would indicate
- the item that will get focus if you tab to the container.
-
- This information is important for knowing what to report for trees and potentially
- other containers in a virtual buffer.
-
- Also, see ::IA2_STATE_MANAGES_DESCENDANTS for more information.
-*/
-IA2_STATE_ACTIVE = 0x1,
-
-/** Indicates that the object is armed.
-
- Used to indicate that the control is "pressed" and will be invoked when the
- actuator, e.g. a mouse button, is "released". An AT which either monitors the
- mouse or synthesizes mouse events might need to know that, and possibly a talking
- interface would even let the user know about it. It could also potentially be
- useful to on screen keyboards or test tools since the information does indicate
- something about the state of the interface, for example, code operating asynchronously
- might need to wait for the armed state to change before doing something else.
-
-*/
-IA2_STATE_ARMED = 0x2,
-
-/** Indicates the user interface object corresponding to this object no longer exists. */
-IA2_STATE_DEFUNCT = 0x4,
-
-/** An object with this state has a caret and implements the IAccessibleText interface.
-
- Such fields may be read-only, so STATE_SYSTEM_READONLY is valid in combination
- with IA2_STATE_EDITABLE.
-
-*/
-IA2_STATE_EDITABLE = 0x8,
-
-/** Indicates the orientation of this object is horizontal. */
-IA2_STATE_HORIZONTAL = 0x10,
-
-/** Indicates this object is minimized and is represented only by an icon. */
-IA2_STATE_ICONIFIED = 0x20,
-
-/** Indicates an input validation failure. */
-IA2_STATE_INVALID_ENTRY = 0x40,
-
-/** Indicates that this object manages its children.
-
- Note: Due to the fact that MSAA's WinEvents don't allow the active child index
- to be passed on the IA2_EVENT_ACTIVE_DESCENDANT_CHANGED event, the manages
- descendants scheme can't be used. Instead the active child object has to fire
- MSAA's EVENT_OBJECT_FOCUS. In a future release a new event mechanism may be
- added to provide for event specific data to be passed with the event. At that
- time the IA2_EVENT_ACTIVE_DECENDENT_CHANGED event and
- IA2_STATE_MANAGES_DESCENDANTS state would be useful.
-*/
-IA2_STATE_MANAGES_DESCENDANTS = 0x80,
-
-/** Indicates that an object is modal.
-
- Modal objects have the behavior that something must be done with the object
- before the user can interact with an object in a different window.
-*/
-IA2_STATE_MODAL = 0x100,
-
-/** Indicates this text object can contain multiple lines of text. */
-IA2_STATE_MULTI_LINE = 0x200,
-
-/** Indicates this object paints every pixel within its rectangular region. */
-IA2_STATE_OPAQUE = 0x400,
-
-/** Indicates that user interaction is required.
-
- An example of when this state is used is when a field in a form must be filled
- before a form can be processed.
-*/
-IA2_STATE_REQUIRED = 0x800,
-
-/** Indicates an object which supports text selection.
-
- Note: This is different than MSAA STATE_SYSTEM_SELECTABLE.
-*/
-IA2_STATE_SELECTABLE_TEXT = 0x1000,
-
-/** Indicates that this text object can contain only a single line of text. */
-IA2_STATE_SINGLE_LINE = 0x2000,
-
-/** Indicates that the accessible object is stale.
-
- This state is used when the accessible object no longer accurately
- represents the state of the object which it is representing such as when an
- object is transient or when an object has been or is in the process of being
- destroyed or when the object's index in its parent has changed.
-*/
-IA2_STATE_STALE = 0x4000,
-
-/** Indicates that the object implements autocompletion.
-
- This state indicates that a text control will respond to the input of
- one ore more characters and cause a sub-item to become selected. The
- selection may also result in events fired on the parent object.
-*/
-IA2_STATE_SUPPORTS_AUTOCOMPLETION = 0x8000,
-
-/** Indicates this object is transient.
-
- An object has this state when its parent object has the state ::IA2_STATE_MANAGES_DESCENDANTS.
- For example, a list item object may be managed by its parent list object and may only
- exist as long as the object is actually rendered. Similarly a table cell's accessible
- object may exist only while the cell has focus. However, from the perspective of an
- assistive technology a transient object behaves like a non-transient object. As a
- result it is likely that this state is not of use to an assistive technology, but it
- is provided in case an assistive technology determines that knowledge of the transient
- nature of the object is useful and also for harmony with the Linux accessibility API.
-
- Also, see ::IA2_STATE_MANAGES_DESCENDANTS for more information.
- */
-IA2_STATE_TRANSIENT = 0x10000,
-
-/** Indicates the orientation of this object is vertical. */
-IA2_STATE_VERTICAL = 0x20000,
-
-/** Indicates this object is checkable.
-
- The standard checkable objects are check boxes, radio buttons, check box menu
- items, radio menu items, and toggle buttons. Since assistive technology will
- determine that these objects are checkable via the object's role the checkable
- state is not required. However, this state is necessary in those cases where
- an object has a role which is not one of the previously mentioned roles. An
- example is a table cell which indicates whether or not an email has an attachment,
- whether or not an mail is considered spam, and whether or not an email has been read.
- */
-IA2_STATE_CHECKABLE = 0x40000,
-
-/** Indicates this object is pinned.
-
- This state indicates that an object is fixed at a certain location. One example
- is a browser tab that when pinned cannot be moved until unpinned. Another example
- is a movable or floating object that when pinned remains in its pinned location
- until being unpinned.
- */
-IA2_STATE_PINNED = 0x80000
-
-};
diff --git a/src/3rdparty/iaccessible2/idl/AccessibleTable.idl b/src/3rdparty/iaccessible2/idl/AccessibleTable.idl
deleted file mode 100644
index 69c99a7515..0000000000
--- a/src/3rdparty/iaccessible2/idl/AccessibleTable.idl
+++ /dev/null
@@ -1,551 +0,0 @@
-/*************************************************************************
- *
- * File Name (AccessibleTable.idl)
- *
- * IAccessible2 IDL Specification
- *
- * Copyright (c) 2007, 2010 Linux Foundation
- * Copyright (c) 2006 IBM Corporation
- * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
- * All rights reserved.
- *
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * 3. Neither the name of the Linux Foundation nor the names of its
- * contributors may be used to endorse or promote products
- * derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * This BSD License conforms to the Open Source Initiative "Simplified
- * BSD License" as published at:
- * http://www.opensource.org/licenses/bsd-license.php
- *
- * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
- * mark may be used in accordance with the Linux Foundation Trademark
- * Policy to indicate compliance with the IAccessible2 specification.
- *
- ************************************************************************/
-
-import "objidl.idl";
-import "oaidl.idl";
-import "oleacc.idl";
-import "Accessible2.idl";
-import "IA2CommonTypes.idl";
-
-/** @brief This interface gives access to a two-dimensional table.
-
- Typically all accessible objects that represent cells or cell-clusters of a table
- will be at the same time children of the table. In this case IAccessible2::indexInParent
- will return the child index which then can be used when calling IAccessibleTable::rowIndex
- and IAccessibleTable::columnIndex.
-
- However, in some cases that kind of implementation will not be possible. When
- the table cells are not direct children of a table, the object representing
- the cell can define a "table-cell-index" object attribute identifying the 0
- based table cell index. This object attribute is obtained by parsing the
- attribute string returned by IAccessible2::attributes. The "table-cell-index"
- attribute can be used just like a child index of the typical case. ATs should
- first test for the presence of the "table-cell-index" attribute and if it is not
- present then IAccessible2::indexInParent can be used as in the typical case
- where cells are direct children of the table.
-
- The range of valid coordinates for this interface are implementation dependent.
- However, that range includes at least the intervals from the from the first row
- or column with the index 0 up to the last (but not including) used row or column
- as returned by IAccessibleTable::nRows and IAccessibleTable::nColumns.
-
- Note that newer implementations are now using IAccessibleTable2 and IAccessibleTableCell
- rather than this interface.
-*/
-[object, uuid(35AD8070-C20C-4fb4-B094-F4F7275DD469)]
-interface IAccessibleTable : IUnknown
-{
-
- /** @brief Returns the accessible object at the specified row and column in
- the table. This object could be an IAccessible or an IAccessible2.
- @param [in] row
- The 0 based row index for which to retrieve the cell.
- @param [in] column
- The 0 based column index for which to retrieve the cell.
- @param [out] accessible
- If both row and column index are valid then the corresponding accessible
- object is returned that represents the requested cell regardless of whether
- the cell is currently visible (on the screen).
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed, [out] value is NULL
- */
- [propget] HRESULT accessibleAt
- (
- [in] long row,
- [in] long column,
- [out, retval] IUnknown **accessible
- );
-
- /** @brief Returns the caption for the table. The returned object could be
- an IAccessible or an IAccessible2.
- @param [out] accessible
- If the table has a caption then a reference to it is returned, else a NULL
- pointer is returned.
- @retval S_OK
- @retval S_FALSE if there is nothing to return, [out] value is NULL
- */
- [propget] HRESULT caption
- (
- [out, retval] IUnknown **accessible
- );
-
- /** @brief Translates the given row and column indexes into the corresponding cell index.
- @param [in] rowIndex
- 0 based row index for the cell.
- @param [in] columnIndex
- 0 based column index for the cell.
- @param [out] cellIndex
- Returns the 0 based index of the cell at the specified row and column indexes.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed, [out] value is 0
- @note The returned value is not necessarily a child index of the immediate parent.
- In cases where the table cells are not direct children of the table the index
- is actually the cell index, i.e. conceptually it's an index into a one dimensional
- array of cells laid out in row order.
- */
- [propget] HRESULT childIndex
- (
- [in] long rowIndex,
- [in] long columnIndex,
- [out, retval] long *cellIndex
- );
-
- /** @brief Returns the description text of the specified column in the table.
- @param [in] column
- The 0 based index of the column for which to retrieve the description.
- @param [out] description
- Returns the description text of the specified column in the table if such a
- description exists. Otherwise a NULL pointer is returned.
- @retval S_OK
- @retval S_FALSE if there is nothing to return, [out] value is NULL
- @retval E_INVALIDARG if bad [in] passed, [out] value is NULL
- */
- [propget] HRESULT columnDescription
- (
- [in] long column,
- [out, retval] BSTR *description
- );
-
- /** @brief Returns the number of columns occupied by the accessible object
- at the specified row and column in the table.
-
- The result is greater than 1 if the specified cell spans multiple columns.
- @param [in] row
- 0 based row index of the accessible for which to return the column extent.
- @param [in] column
- 0 based column index of the accessible for which to return the column extent.
- @param [out] nColumnsSpanned
- Returns the 1 based column extent of the specified cell.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed, [out] value is 0
- */
- [propget] HRESULT columnExtentAt
- (
- [in] long row,
- [in] long column,
- [out, retval] long *nColumnsSpanned
- );
-
- /** @brief Returns the column headers as an %IAccessibleTable object.
-
- Content and size of the returned table are implementation dependent.
- @param [out] accessibleTable
- The column header
- @param [out] startingRowIndex
- The 0 based row index where the header starts, usually 0.
- @retval S_OK
- @retval S_FALSE if there is no header, [out] values are NULL and 0 respectively
- */
- [propget] HRESULT columnHeader
- (
- [out] IAccessibleTable **accessibleTable,
- [out, retval] long *startingRowIndex
- );
-
- /** @brief Translates the given cell index into the corresponding column index.
- @param [in] cellIndex
- 0 based index of the cell in the parent or closest ancestor table. Typically this
- is the value returned from IAccessible2::indexInParent, but in the case where the
- table cells are not direct children of the table this is the cell index specified
- by the "table-cell-index" object attribute obtained from parsing the attributes
- string returned by calling IAccessible2::attributes on the cell object.
- @param [out] columnIndex
- Returns the 0 based column index of the cell of the specified child or the index of
- the first column if the child spans multiple columns.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed, [out] value is 0
- */
- [propget] HRESULT columnIndex
- (
- [in] long cellIndex,
- [out, retval] long *columnIndex
- );
-
- /** @brief Returns the total number of columns in table
- @param [out] columnCount
- Number of columns in table (including columns outside the current viewport)
- @retval S_OK
- */
- [propget] HRESULT nColumns
- (
- [out, retval] long *columnCount
- );
-
- /** @brief Returns the total number of rows in table
- @param [out] rowCount
- Number of rows in table (including rows outside the current viewport)
- @retval S_OK
- */
- [propget] HRESULT nRows
- (
- [out, retval] long *rowCount
- );
-
- /** @brief Returns the total number of selected cells
- @param [out] cellCount
- Number of cells currently selected
- @retval S_OK
- */
- [propget] HRESULT nSelectedChildren
- (
- [out, retval] long *cellCount
- );
-
- /** @brief Returns the total number of selected columns
- @param [out] columnCount
- Number of columns currently selected
- @retval S_OK
- */
- [propget] HRESULT nSelectedColumns
- (
- [out, retval] long *columnCount
- );
-
- /** @brief Returns the total number of selected rows
- @param [out] rowCount
- Number of rows currently selected
- @retval S_OK
- */
- [propget] HRESULT nSelectedRows
- (
- [out, retval] long *rowCount
- );
-
- /** @brief Returns the description text of the specified row in the table.
- @param [in] row
- The 0 based index of the row for which to retrieve the description.
- @param [out] description
- Returns the description text of the specified row in the table if such a
- description exists. Otherwise a NULL pointer is returned.
- @retval S_OK
- @retval S_FALSE if there is nothing to return, [out] value is NULL
- @retval E_INVALIDARG if bad [in] passed, [out] value is NULL
- */
- [propget] HRESULT rowDescription
- (
- [in] long row,
- [out, retval] BSTR *description
- );
-
- /** @brief Returns the number of rows occupied by the accessible object
- at the specified row and column in the table.
-
- The result is greater than 1 if the specified cell spans multiple rows.
- @param [in] row
- 0 based row index of the accessible for which to return the row extent.
- @param [in] column
- 0 based column index of the accessible for which to return the row extent.
- @param [out] nRowsSpanned
- Returns the row extent of the specified cell.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed, [out] value is 0
- */
- [propget] HRESULT rowExtentAt
- (
- [in] long row,
- [in] long column,
- [out, retval] long *nRowsSpanned
- );
-
- /** @brief Returns the row headers as an %IAccessibleTable object.
-
- Content and size of the returned table are implementation dependent.
- @param [out] accessibleTable
- The row header.
- @param [out] startingColumnIndex
- The 0 based column index where the header starts, usually 0.
- @retval S_OK
- @retval S_FALSE if there is no header, [out] values are NULL and 0 respectively
- */
- [propget] HRESULT rowHeader
- (
- [out] IAccessibleTable **accessibleTable,
- [out, retval] long *startingColumnIndex
- );
-
- /** @brief Translates the given cell index into a row index.
- @param [in] cellIndex
- 0 based index of the cell in the parent or closest ancestor table. Typically this
- is the value returned from IAccessible2::indexInParent, but in the case where the
- table cells are not direct children of the table this is the cell index specified
- by the "table-cell-index" object attribute obtained from parsing the attributes
- string returned by calling IAccessible2::attributes on the cell object.
- @param [out] rowIndex
- 0 based row index
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed, [out] value is 0
- */
- [propget] HRESULT rowIndex
- (
- [in] long cellIndex,
- [out, retval] long *rowIndex
- );
-
- /** @brief Returns a list of cell indexes currently selected (0 based).
- @param [in] maxChildren
- This parameter is ignored. Refer to @ref _arrayConsideration
- "Special Consideration when using Arrays" for more details.
- @param [out] children
- An array of cell indexes of selected cells (each index is 0 based),
- allocated by the server. Free it with CoTaskMemFree.
- @param [out] nChildren
- The number of cell indexes returned; the size of the returned array.
- @retval S_OK
- @retval S_FALSE if there are none, [out] values are NULL and 0 respectively
- */
- [propget] HRESULT selectedChildren
- (
- [in] long maxChildren,
- [out, size_is(,maxChildren), length_is(,*nChildren)] long **children,
- [out, retval] long *nChildren
- );
-
- /** @brief Returns a list of column indexes currently selected (0 based).
- @param [in] maxColumns
- This parameter is ignored. Refer to @ref _arrayConsideration
- "Special Consideration when using Arrays" for more details.
- @param [out] columns
- An array of column indexes of selected columns (each index is 0 based), allocated
- by the server. Free it with CoTaskMemFree.
- @param [out] nColumns
- The number of column indexes returned; the size of the returned array.
- @retval S_OK
- @retval S_FALSE if there are none, [out] values are NULL and 0 respectively
- */
- [propget] HRESULT selectedColumns
- (
- [in] long maxColumns,
- [out, size_is(,maxColumns), length_is(,*nColumns)] long **columns,
- [out, retval] long *nColumns
- );
-
- /** @brief Returns a list of row indexes currently selected (0 based).
- @param [in] maxRows
- This parameter is ignored. Refer to @ref _arrayConsideration
- "Special Consideration when using Arrays" for more details.
- @param [out] rows
- An array of row indexes of selected rows (each index is 0 based), allocated
- by the server. Free it with CoTaskMemFree.
- @param [out] nRows
- The number of row indexes returned; the size of the returned array.
- @retval S_OK
- @retval S_FALSE if there are none, [out] values are NULL and 0 respectively
- */
- [propget] HRESULT selectedRows
- (
- [in] long maxRows,
- [out, size_is(,maxRows), length_is(,*nRows)] long **rows,
- [out, retval] long *nRows
- );
-
- /** @brief Returns the summary description of the table. The returned object could be
- an IAccessible or an IAccessible2.
- @param [out] accessible
- Returns a reference to an implementation dependent accessible object
- representing the table's summary or a NULL pointer if the table
- does not support a summary.
- @retval S_OK
- @retval S_FALSE if there is nothing to return, [out] value is NULL
- */
- [propget] HRESULT summary
- (
- [out, retval] IUnknown **accessible
- );
-
- /** @brief Returns a boolean value indicating whether the specified column is
- completely selected.
- @param [in] column
- 0 based index of the column for which to determine whether it is selected.
- @param [out] isSelected
- Returns TRUE if the specified column is selected completely and FALSE otherwise.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed, [out] value is FALSE
- */
- [propget] HRESULT isColumnSelected
- (
- [in] long column,
- [out, retval] boolean *isSelected
- );
-
- /** @brief Returns a boolean value indicating whether the specified row is completely
- selected.
- @param [in] row
- 0 based index of the row for which to determine whether it is selected.
- @param [out] isSelected
- Returns TRUE if the specified row is selected completely and FALSE otherwise.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed, [out] value is FALSE
- */
- [propget] HRESULT isRowSelected
- (
- [in] long row,
- [out, retval] boolean *isSelected
- );
-
- /** @brief Returns a boolean value indicating whether the specified cell is selected.
- @param [in] row
- 0 based index of the row for the cell to determine whether it is selected.
- @param [in] column
- 0 based index of the column for the cell to determine whether it is selected.
- @param [out] isSelected
- Returns TRUE if the specified cell is selected and FALSE otherwise.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed, [out] value is FALSE
- */
- [propget] HRESULT isSelected
- (
- [in] long row,
- [in] long column,
- [out, retval] boolean *isSelected
- );
-
- /** @brief Selects a row and unselects all previously selected rows.
- @param [in] row
- 0 based index of the row to be selected.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed
- */
- HRESULT selectRow
- (
- [in] long row
- );
-
- /** @brief Selects a column and unselects all previously selected columns.
- @param [in] column
- 0 based index of the column to be selected.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed
- */
- HRESULT selectColumn
- (
- [in] long column
- );
-
- /** @brief Unselects one row, leaving other selected rows selected (if any).
- @param [in] row
- 0 based index of the row to be unselected.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed
- */
- HRESULT unselectRow
- (
- [in] long row
- );
-
- /** @brief Unselects one column, leaving other selected columns selected (if any).
- @param [in] column
- 0 based index of the column to be unselected.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed
- */
- HRESULT unselectColumn
- (
- [in] long column
- );
-
- /** @brief Given a cell index, gets the row and column indexes and extents of a cell
- and whether or not it is selected.
-
- This is a convenience function. It is not mandatory to implement it.
- @param [in] index
- 0 based index of this cell in the table.
- @param [out] row
- 0 based row index.
- @param [out] column
- 0 based column index.
- @param [out] rowExtents
- Number of cells spanned by this cell in this row.
- @param [out] columnExtents
- Number of cells spanned by this cell in this column.
- @param [out] isSelected
- Indicates if the specified cell is selected.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed, [out] values are 0s and FALSE respectively
- */
- [propget] HRESULT rowColumnExtentsAtIndex
- (
- [in] long index,
- [out] long *row,
- [out] long *column,
- [out] long *rowExtents,
- [out] long *columnExtents,
- [out, retval] boolean *isSelected
- );
-
- /** @brief Returns the type and extents describing how a table changed.
-
- Provided for use by the IA2_EVENT_TABLE_MODEL_CHANGED event handler.
-
- This data is only guaranteed to be valid while the thread notifying the event
- continues. Once the handler has returned, the validity of the data depends on
- how the server manages the life cycle of its objects. Also, note that the server
- may have different life cycle management strategies for controls depending on
- whether or not a control manages its children. Lists, trees, and tables can have
- a large number of children and thus it's possible that the child objects for those
- controls would only be created as needed. Servers should document their life cycle
- strategy as this will be of interest to assistive technology or script engines
- accessing data out of process or from other threads. Servers only need to save the
- most recent row and column values associated with the change and a scope of the
- entire application is adequate.
-
- @param [out] modelChange
- A struct of (type(insert, delete, update), firstRow, lastRow, firstColumn, lastColumn).
- @retval S_OK
- @retval S_FALSE if there is nothing to return, [out] value is NULL
- */
- [propget] HRESULT modelChange
- (
- [out, retval] IA2TableModelChange *modelChange
- );
-
-}
diff --git a/src/3rdparty/iaccessible2/idl/AccessibleTable2.idl b/src/3rdparty/iaccessible2/idl/AccessibleTable2.idl
deleted file mode 100644
index 9d7f3e4475..0000000000
--- a/src/3rdparty/iaccessible2/idl/AccessibleTable2.idl
+++ /dev/null
@@ -1,375 +0,0 @@
-/*************************************************************************
- *
- * File Name (AccessibleTable2.idl)
- *
- * IAccessible2 IDL Specification
- *
- * Copyright (c) 2007, 2010 Linux Foundation
- * Copyright (c) 2006 IBM Corporation
- * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
- * All rights reserved.
- *
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * 3. Neither the name of the Linux Foundation nor the names of its
- * contributors may be used to endorse or promote products
- * derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * This BSD License conforms to the Open Source Initiative "Simplified
- * BSD License" as published at:
- * http://www.opensource.org/licenses/bsd-license.php
- *
- * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
- * mark may be used in accordance with the Linux Foundation Trademark
- * Policy to indicate compliance with the IAccessible2 specification.
- *
- ************************************************************************/
-
-import "objidl.idl";
-import "oaidl.idl";
-import "oleacc.idl";
-import "Accessible2.idl";
-import "IA2CommonTypes.idl";
-
-/** @brief This interface gives access to a two-dimensional table.
-
- Please also refer to the IAccessibleTableCell interface.
-
- If you want to support older applications you should also support the
- IAccessibleTable inteface.
-*/
-[object, uuid(6167f295-06f0-4cdd-a1fa-02e25153d869)]
-interface IAccessibleTable2 : IUnknown
-{
-
- /** @brief Returns the accessible object at the specified row and column in
- the table. This object could be an IAccessible or an IAccessible2.
- @param [in] row
- The 0 based row index for which to retrieve the cell.
- @param [in] column
- The 0 based column index for which to retrieve the cell.
- @param [out] cell
- If both row and column index are valid then the corresponding accessible
- object is returned that represents the requested cell regardless of whether
- the cell is currently visible (on the screen).
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed
- */
- [propget] HRESULT cellAt
- (
- [in] long row,
- [in] long column,
- [out, retval] IUnknown **cell
- );
-
- /** @brief Returns the caption for the table. The returned object could be
- an IAccessible or an IAccessible2.
- @param [out] accessible
- If the table has a caption then a reference to it is returned, else a NULL
- pointer is returned.
- @retval S_OK
- @retval S_FALSE if there is nothing to return, [out] value is NULL
- */
- [propget] HRESULT caption
- (
- [out, retval] IUnknown **accessible
- );
-
- /** @brief Returns the description text of the specified column in the table.
- @param [in] column
- The 0 based index of the column for which to retrieve the description.
- @param [out] description
- Returns the description text of the specified column in the table if such a
- description exists. Otherwise a NULL pointer is returned.
- @retval S_OK
- @retval S_FALSE if there is nothing to return, [out] value is NULL
- @retval E_INVALIDARG if bad [in] passed
- */
- [propget] HRESULT columnDescription
- (
- [in] long column,
- [out, retval] BSTR *description
- );
-
-
- /** @brief Returns the total number of columns in table
- @param [out] columnCount
- Number of columns in table (including columns outside the current viewport)
- @retval S_OK
- */
- [propget] HRESULT nColumns
- (
- [out, retval] long *columnCount
- );
-
- /** @brief Returns the total number of rows in table
- @param [out] rowCount
- Number of rows in table (including rows outside the current viewport)
- @retval S_OK
- */
- [propget] HRESULT nRows
- (
- [out, retval] long *rowCount
- );
-
- /** @brief Returns the total number of selected cells
- @param [out] cellCount
- Number of cells currently selected
- @retval S_OK
- */
- [propget] HRESULT nSelectedCells
- (
- [out, retval] long *cellCount
- );
-
- /** @brief Returns the total number of selected columns
- @param [out] columnCount
- Number of columns currently selected
- @retval S_OK
- */
- [propget] HRESULT nSelectedColumns
- (
- [out, retval] long *columnCount
- );
-
- /** @brief Returns the total number of selected rows
- @param [out] rowCount
- Number of rows currently selected
- @retval S_OK
- */
- [propget] HRESULT nSelectedRows
- (
- [out, retval] long *rowCount
- );
-
- /** @brief Returns the description text of the specified row in the table.
- @param [in] row
- The 0 based index of the row for which to retrieve the description.
- @param [out] description
- Returns the description text of the specified row in the table if such a
- description exists. Otherwise a NULL pointer is returned.
- @retval S_OK
- @retval S_FALSE if there is nothing to return, [out] value is NULL
- @retval E_INVALIDARG if bad [in] passed
- */
- [propget] HRESULT rowDescription
- (
- [in] long row,
- [out, retval] BSTR *description
- );
-
- /** @brief Returns a list of accessibles currently selected.
- @param [out] cells
- Pointer to an array of references to selected accessibles. The array is
- allocated by the server with CoTaskMemAlloc and freed by the client with
- CoTaskMemFree.
- @param [out] nSelectedCells
- The number of accessibles returned; the size of the returned array.
- @retval S_OK
- @retval S_FALSE if there are none, [out] values are NULL and 0 respectively
- */
- [propget] HRESULT selectedCells
- (
- [out, size_is(,*nSelectedCells,)] IUnknown ***cells,
- [out, retval] long *nSelectedCells
- );
-
- /** @brief Returns a list of column indexes currently selected (0 based).
- @param [out] selectedColumns
- A pointer to an array of column indexes of selected columns (each index is
- 0 based). The array is allocated by the server with CoTaskMemAlloc and
- freed by the client with CoTaskMemFree.
- @param [out] nColumns
- The number of column indexes returned; the size of the returned array.
- @retval S_OK
- @retval S_FALSE if there are none, [out] values are NULL and 0 respectively
- */
- [propget] HRESULT selectedColumns
- (
- [out, size_is(,*nColumns)] long **selectedColumns,
- [out, retval] long *nColumns
- );
-
- /** @brief Returns a list of row indexes currently selected (0 based).
- @param [out] selectedRows
- An array of row indexes of selected rows (each index is 0 based). The array
- is allocated by the server with CoTaskMemAlloc and freed by the client with
- CoTaskMemFree.
- @param [out] nRows
- The number of row indexes returned; the size of the returned array.
- @retval S_OK
- @retval S_FALSE if there are none, [out] values are NULL and 0 respectively
- */
- [propget] HRESULT selectedRows
- (
- [out, size_is(,*nRows)] long **selectedRows,
- [out, retval] long *nRows
- );
-
- /** @brief Returns the summary description of the table. The returned object could be
- an IAccessible or an IAccessible2.
- @param [out] accessible
- Returns a reference to an implementation dependent accessible object
- representing the table's summary or a NULL pointer if the table
- does not support a summary.
- @retval S_OK
- @retval S_FALSE if there is nothing to return, [out] value is NULL
- */
- [propget] HRESULT summary
- (
- [out, retval] IUnknown **accessible
- );
-
- /** @brief Returns a boolean value indicating whether the specified column is
- completely selected.
- @param [in] column
- 0 based index of the column for which to determine whether it is selected.
- @param [out] isSelected
- Returns TRUE if the specified column is selected completely and FALSE otherwise.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed
- */
- [propget] HRESULT isColumnSelected
- (
- [in] long column,
- [out, retval] boolean *isSelected
- );
-
- /** @brief Returns a boolean value indicating whether the specified row is completely
- selected.
- @param [in] row
- 0 based index of the row for which to determine whether it is selected.
- @param [out] isSelected
- Returns TRUE if the specified row is selected completely and FALSE otherwise.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed
- */
- [propget] HRESULT isRowSelected
- (
- [in] long row,
- [out, retval] boolean *isSelected
- );
-
- /** @brief Selects a row and unselects all previously selected rows.
-
- The behavior should mimic that of the application, but for those applications
- which do not have a means in the GUI to select a full row of cells the behavior
- should be as follows: First any selected rows in the table are unselected. Then
- the entire row of cells for the specified row is selected. If any of the
- cells in the selected row span additional rows, the cells in those rows
- are also selected.
- @param [in] row
- 0 based index of the row to be selected.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed
- */
- HRESULT selectRow
- (
- [in] long row
- );
-
- /** @brief Selects a column and unselects all previously selected columns.
-
- The behavior should mimic that of the application, but for those applications
- which do not have a means in the GUI to select a full column of cells the behavior
- should be as follows: First any selected columns in the table are unselected. Then
- the entire column of cells for the specified column is selected. If any of the
- cells in the selected column span additional columns, the cells in those columns
- are also selected.
- @param [in] column
- 0 based index of the column to be selected.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed
- */
- HRESULT selectColumn
- (
- [in] long column
- );
-
- /** @brief Unselects one row, leaving other selected rows selected (if any).
-
- The behavior should mimic that of the application, but for those applications
- which do not have a means in the GUI to unselect a full row of cells the
- behavior should be as follows: The entire row of cells for the specified
- row is unselected. If any of the cells in the selected row span additional
- rows, the cells in those rows are also unselected.
- @param [in] row
- 0 based index of the row to be unselected.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed
- */
- HRESULT unselectRow
- (
- [in] long row
- );
-
- /** @brief Unselects one column, leaving other selected columns selected (if any).
-
- The behavior should mimic that of the application, but for those applications
- which do not have a means in the GUI to unselect a full column of cells the
- behavior should be as follows: The entire column of cells for the specified
- column is unselected. If any of the cells in the selected column span additional
- columns, the cells in those columns are also unselected.
- @param [in] column
- 0 based index of the column to be unselected.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed
- */
- HRESULT unselectColumn
- (
- [in] long column
- );
-
- /** @brief Returns the type and extents describing how a table changed.
-
- Provided for use by the IA2_EVENT_TABLE_MODEL_CHANGED event handler.
-
- This data is only guaranteed to be valid while the thread notifying the event
- continues. Once the handler has returned, the validity of the data depends on
- how the server manages the life cycle of its objects. Also, note that the server
- may have different life cycle management strategies for controls depending on
- whether or not a control manages its children. Lists, trees, and tables can have
- a large number of children and thus it's possible that the child objects for those
- controls would only be created as needed. Servers should document their life cycle
- strategy as this will be of interest to assistive technology or script engines
- accessing data out of process or from other threads. Servers only need to save the
- most recent row and column values associated with the change and a scope of the
- entire application is adequate.
-
- @param [out] modelChange
- A struct of (type(insert, delete, update), firstRow, lastRow, firstColumn, lastColumn).
- @retval S_OK
- @retval S_FALSE if there is nothing to return, [out] value is NULL
- */
- [propget] HRESULT modelChange
- (
- [out, retval] IA2TableModelChange *modelChange
- );
-
-}
diff --git a/src/3rdparty/iaccessible2/idl/AccessibleTableCell.idl b/src/3rdparty/iaccessible2/idl/AccessibleTableCell.idl
deleted file mode 100644
index a4cd988384..0000000000
--- a/src/3rdparty/iaccessible2/idl/AccessibleTableCell.idl
+++ /dev/null
@@ -1,194 +0,0 @@
-/*************************************************************************
- *
- * File Name (AccessibleTableCell.idl)
- *
- * IAccessible2 IDL Specification
- *
- * Copyright (c) 2007, 2010 Linux Foundation
- * Copyright (c) 2006 IBM Corporation
- * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
- * All rights reserved.
- *
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * 3. Neither the name of the Linux Foundation nor the names of its
- * contributors may be used to endorse or promote products
- * derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * This BSD License conforms to the Open Source Initiative "Simplified
- * BSD License" as published at:
- * http://www.opensource.org/licenses/bsd-license.php
- *
- * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
- * mark may be used in accordance with the Linux Foundation Trademark
- * Policy to indicate compliance with the IAccessible2 specification.
- *
- ************************************************************************/
-
-import "objidl.idl";
-import "oaidl.idl";
-import "oleacc.idl";
-import "Accessible2.idl";
-
-/** @brief This interface gives access to the cells of a two-dimensional table.
-
- Please also refer to the IAccessibleTable2 interface.
-
-*/
-[object, uuid(594116B1-C99F-4847-AD06-0A7A86ECE645)]
-interface IAccessibleTableCell : IUnknown
-{
-
- /** @brief Returns the number of columns occupied by this cell accessible.
-
- The result is greater than 1 if the specified cell spans multiple columns.
- @param [out] nColumnsSpanned
- Returns the 1 based column extent of the specified cell.
- @retval S_OK
- */
- [propget] HRESULT columnExtent
- (
- [out, retval] long *nColumnsSpanned
- );
-
- /** @brief Returns the column headers as an array of cell accessibles.
-
- @param [out] cellAccessibles
- Pointer to an array of references to cell accessibles. The array is allocated
- by the server. Free it with CoTaskMemFree.
- @param [out] nColumnHeaderCells
- The number of accessibles returned; the size of the returned array.
- @retval S_OK
- @retval S_FALSE if there is no header, [out] values are NULL and 0 respectively
- */
- [propget] HRESULT columnHeaderCells
- (
- [out, size_is(,*nColumnHeaderCells,)] IUnknown ***cellAccessibles,
- [out, retval] long *nColumnHeaderCells
- );
-
- /** @brief Translates this cell accessible into the corresponding column index.
-
- @param [out] columnIndex
- Returns the 0 based column index of the cell of the specified cell or the index of
- the first column if the cell spans multiple columns.
- @retval S_OK
- */
- [propget] HRESULT columnIndex
- (
- [out, retval] long *columnIndex
- );
-
- /** @brief Returns the number of rows occupied by this cell accessible.
-
- @param [out] nRowsSpanned
- Returns the row extent of the specified cell.
- @retval S_OK
- */
- [propget] HRESULT rowExtent
- (
- [out, retval] long *nRowsSpanned
- );
-
- /** @brief Returns the row headers as an array of cell accessibles.
-
- @param [out] cellAccessibles
- Pointer to an array of references to cell accessibles. The array is allocated
- by the server. Free it with CoTaskMemFree.
- @param [out] nRowHeaderCells
- The number of accessibles returned; the size of the returned array.
- @retval S_OK
- @retval S_FALSE if there is no header, [out] values are NULL and 0 respectively
- */
- [propget] HRESULT rowHeaderCells
- (
- [out, size_is(,*nRowHeaderCells,)] IUnknown ***cellAccessibles,
- [out, retval] long *nRowHeaderCells
- );
-
- /** @brief Translates this cell accessible into the corresponding row index.
-
- @param [out] rowIndex
- Returns the 0 based row index of the specified cell or the index of
- the first row if the cell spans multiple rows.
- @retval S_OK
- */
- [propget] HRESULT rowIndex
- (
- [out, retval] long *rowIndex
- );
-
- /** @brief Returns a boolean value indicating whether this cell is selected.
-
- @param [out] isSelected
- Returns TRUE if the specified cell is selected and FALSE otherwise.
- @retval S_OK
- */
- [propget] HRESULT isSelected
- (
- [out, retval] boolean *isSelected
- );
-
- /** @brief Gets the row and column indexes and extents of this cell accessible
- and whether or not it is selected.
-
- This is a convenience function. It is not mandatory to implement it.
- @param [out] row
- 0 based row index.
- @param [out] column
- 0 based column index.
- @param [out] rowExtents
- Number of cells spanned by this cell in this row.
- @param [out] columnExtents
- Number of cells spanned by this cell in this column.
- @param [out] isSelected
- Indicates if the specified cell is selected.
- @retval S_OK
- */
- [propget] HRESULT rowColumnExtents
- (
- [out] long *row,
- [out] long *column,
- [out] long *rowExtents,
- [out] long *columnExtents,
- [out, retval] boolean *isSelected
- );
-
- /** @brief Returns a reference to the accessbile of the containing table.
-
- @param [out] table
- Returns a reference to the IUnknown of the containing table.
- @retval S_OK
- */
- [propget] HRESULT table
- (
- [out, retval] IUnknown **table
- );
-
-}
diff --git a/src/3rdparty/iaccessible2/idl/AccessibleText.idl b/src/3rdparty/iaccessible2/idl/AccessibleText.idl
deleted file mode 100644
index 86fd93ad90..0000000000
--- a/src/3rdparty/iaccessible2/idl/AccessibleText.idl
+++ /dev/null
@@ -1,674 +0,0 @@
-/*************************************************************************
- *
- * File Name (AccessibleText.idl)
- *
- * IAccessible2 IDL Specification
- *
- * Copyright (c) 2007, 2010 Linux Foundation
- * Copyright (c) 2006 IBM Corporation
- * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
- * All rights reserved.
- *
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * 3. Neither the name of the Linux Foundation nor the names of its
- * contributors may be used to endorse or promote products
- * derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * This BSD License conforms to the Open Source Initiative "Simplified
- * BSD License" as published at:
- * http://www.opensource.org/licenses/bsd-license.php
- *
- * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
- * mark may be used in accordance with the Linux Foundation Trademark
- * Policy to indicate compliance with the IAccessible2 specification.
- *
- ************************************************************************/
-
-import "objidl.idl";
-import "oaidl.idl";
-import "oleacc.idl";
-import "IA2CommonTypes.idl";
-
-/** A structure containing a substring and the start and end offsets in the enclosing string.
-
- IAccessibleText::newText and IAccessibleText::oldText return this struct.
-*/
-typedef struct IA2TextSegment {
- BSTR text; ///< A copy of a segment of text taken from an enclosing paragraph.
- long start; ///< Index of the first character of the segment in the enclosing text.
- long end; ///< Index of the character following the last character of the segment in the enclosing text.
-} IA2TextSegment;
-
-/** This enum defines values which specify a text boundary type.
-
- IA2_TEXT_BOUNDARY_SENTENCE is optional. When a method doesn't implement this
- method it must return S_FALSE. Typically this feature would not be implemented
- by an application. However, if the application developer was not satisfied with
- how screen readers have handled the reading of sentences this boundary type
- could be implemented and screen readers could use the application's version of a
- sentence rather than the screen reader's.
-
- The rest of the boundary types must be supported.
-
- This enum is used in IAccessibleText::textBeforeOffset, IAccessibleText::textAtOffset,
- and IAccessibleText::textAfterOffset.
-*/
-
-enum IA2TextBoundaryType {
- IA2_TEXT_BOUNDARY_CHAR, /**< Typically, a single character is returned. In some cases more than
- one character is returned, for example, when a document contains field
- data such as a field containing a date, time, or footnote reference.
- In this case the caret can move over several characters in one movement
- of the caret. Note that after the caret moves, the caret offset changes
- by the number of characters in the field, e.g. by 8 characters in the
- following date: 03/26/07. */
- IA2_TEXT_BOUNDARY_WORD, /**< The range provided matches the range observed when the application
- processes the Ctrl + left arrow and Ctrl + right arrow key sequences.
- Typically this is from the start of one word to the start of the next, but
- various applications are inconsistent in the handling of the end of a line. */
- IA2_TEXT_BOUNDARY_SENTENCE, ///< Range is from start of one sentence to the start of another sentence.
- IA2_TEXT_BOUNDARY_PARAGRAPH, ///< Range is from start of one paragraph to the start of another paragraph.
- IA2_TEXT_BOUNDARY_LINE, /**< Range is from start of one line to the start of another line. This
- often means that an end-of-line character will appear at the end of the
- range. However in the case of some applications an end-of-line character
- indicates the end of a paragraph and the lines composing the paragraph,
- other than the last line, do not contain an end of line character. */
- IA2_TEXT_BOUNDARY_ALL ///< Using this value will cause all text to be returned.
-};
-
-/** @brief This interface gives read-only access to text.
-
- The %IAccessibleText interface should be implemented by all components
- that present textual information on the display like buttons,
- text entry fields, or text portions of the document window. The interface
- provides access to the text's content, attributes, and spatial location.
- However, text can not be modified with this interface. That is the task
- of the IAccessibleEditableText interface.
-
- The text length, i.e. the number of characters in the text, is
- returned by IAccessibleText::nCharacters. All methods that operate
- on particular characters (e.g. IAccessibleText::textAtOffset) use character
- indices from 0 to length-1. All methods that operate on character positions
- (e.g. IAccessibleText::text) use indices from 0 to length.
-
- Please note that accessible text does not necessarily support selection.
- In this case it should behave as if there where no selection. An empty
- selection is used for example to express the current cursor position.
-
- Refer to @ref _specialOffsets
- "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
- for information about special offsets that can be used in %IAccessibleText methods.
-
- E_FAIL is returned in the following cases
- @li endOffset < startOffset
- @li endoffset > length
-*/
-[object, uuid(24FD2FFB-3AAD-4a08-8335-A3AD89C0FB4B)]
-interface IAccessibleText : IUnknown
-{
-
- /** @brief Adds a text selection
- @param [in] startOffset
- Starting offset ( 0 based).
- @param [in] endOffset
- Offset of first character after new selection (0 based).
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed
- @note Refer to @ref _specialOffsets
- "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
- for information about special offsets that can be used in %IAccessibleText methods.
- */
- HRESULT addSelection
- (
- [in] long startOffset,
- [in] long endOffset
- );
-
- /** @brief Returns text attributes.
- @param [in] offset
- Text offset (0 based). Refer to @ref _specialOffsets
- "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
- for information about special offsets that can be used in %IAccessibleText methods.
- @param [out] startOffset
- The starting offset of the character range over which all text attributes match
- those of offset. (0 based)
- @param [out] endOffset
- The offset of the first character past the character range over which all text
- attributes match those of offset. (0 based)
- @param [out] textAttributes
- A string of attributes describing the text. The attributes are described in the
- <a href="http://www.linuxfoundation.org/en/Accessibility/IAccessible2/TextAttributes">
- text attributes specification</a> on the %IAccessible2 web site.
- @retval S_OK
- @retval S_FALSE if there is nothing to return, [out] values are 0s and NULL respectively
- @retval E_INVALIDARG if bad [in] passed
- */
- [propget] HRESULT attributes
- (
- [in] long offset,
- [out] long *startOffset,
- [out] long *endOffset,
- [out, retval] BSTR *textAttributes
- );
-
- /** @brief Returns the position of the caret.
-
- Returns the 0-based offset of the caret within the text. If the text is
- implemented as a tree of text objects with embed characters in higher levels
- representing substrings of child text objects and the caret is in one of the
- child text objects, then the offset in the higher level text object would be
- at the embed character representing child text object that contains the caret.
-
- For example, if the string "one two three" is implemented as a two text objects,
- with a top level text object containing an embed character "one ? three" and a
- child text object containing "two" and if the caret is in the descendant object
- just before the 'o' in "two", then:
- <ul>
- <li>the caretOffset for the "one ? three" object would be 4, matching the embed character</li>
- <li>the caretOffset for "two" would be 2, matching the "o"</li>
- </ul>
- The caret position/offset is that of the character logically following it, e.g.
- to the right of it in a left to right language, or to the left of it in a right
- to left language.
- @param [out] offset
- The returned offset is relative to the text represented by this object.
- @retval S_OK
- @retval S_FALSE if the caret is not currently active on this object, i.e. the
- caret is located on some other object. The returned offset value will be -1.
- @note S_FALSE (and an offset of -1) will not be returned if the caret is somewhere
- in the text object or one of its descendants.
- */
- [propget] HRESULT caretOffset
- (
- [out, retval] long *offset
- );
-
-
- /** @brief Returns the bounding box of the specified position.
-
- The virtual character after the last character of the represented
- text, i.e. the one at position length is a special case. It represents the
- current input position and will therefore typically be queried by AT more
- often than other positions. Because it does not represent an existing character
- its bounding box is defined in relation to preceding characters. It should be
- roughly equivalent to the bounding box of some character when inserted at the
- end of the text. Its height typically being the maximal height of all the
- characters in the text or the height of the preceding character, its width being
- at least one pixel so that the bounding box is not degenerate.
-
- Note that the index 'length' is not always valid. Whether it is or not is
- implementation dependent. It typically is when text is editable or otherwise
- when on the screen the caret can be placed behind the text. You can be sure
- that the index is valid after you have received a ::IA2_EVENT_TEXT_CARET_MOVED
- event for this index.
- @param [in] offset
- Index of the character for which to return its bounding box. The valid range
- is 0..length. Refer to @ref _specialOffsets
- "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
- for information about special offsets that can be used in %IAccessibleText methods.
- @param [in] coordType
- Specifies if the coordinates are relative to the screen or to the parent window.
- @param [out] x
- X coordinate of the top left corner of the bounding box of the referenced character.
- @param [out] y
- Y coordinate of the top left corner of the bounding box of the referenced character.
- @param [out] width
- Width of the bounding box of the referenced character.
- @param [out] height
- Height of the bounding box of the referenced character.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed
- */
- [propget] HRESULT characterExtents
- (
- [in] long offset,
- [in] enum IA2CoordinateType coordType,
- [out] long *x,
- [out] long *y,
- [out] long *width,
- [out, retval] long *height
- );
-
-
- /** @brief Returns the number of active non-contiguous selections
- @param [out] nSelections
- @retval S_OK
- */
- [propget] HRESULT nSelections
- (
- [out, retval] long *nSelections
- );
-
- /** @brief Returns the text position for the specified screen position.
-
- Given a point return the zero-based index of the character under that
- point. The same functionality could be achieved by using the bounding
- boxes for each character as returned by IAccessibleText::characterExtents.
- The method IAccessibleText::offsetAtPoint, however, can be implemented
- more efficiently.
-
- @param [in] x
- The position's x value for which to look up the index of the character that
- is rendered on to the display at that point.
- @param [in] y
- The position's y value for which to look up the index of the character that
- is rendered on to the display at that point.
- @param [in] coordType
- Screen coordinates or window coordinates.
- @param [out] offset
- Index of the character under the given point or -1 if the point
- is invalid or there is no character under the point.
- @retval S_OK
- @retval S_FALSE if nothing to return, [out] value is -1
-
- @retval E_INVALIDARG if bad [in] passed
- */
- [propget] HRESULT offsetAtPoint
- (
- [in] long x,
- [in] long y,
- [in] enum IA2CoordinateType coordType,
- [out, retval] long *offset
- );
-
- /** @brief Returns the character offsets of Nth active text selection
-
- Returns the 0-based starting and ending offsets of the Nth selection. If the
- text is implemented as a tree of text objects with embed characters in higher
- levels representing substrings of child text objects, consider the following.
- If the starting selection offset is in one of the child text objects, then the
- starting offset in the higher level text object would be at the embed character
- representing the child text object that contains the starting selection offset.
- If the ending selection offset is in one of the child text objects, then the
- ending offset in the higher level text object would be just after the embed
- character representing the child text object that contains the ending selection
- offset.
-
- For example, if the string "one two three" is implemented as a two text objects,
- with a top level text object containing an embed character "one ? three" and a
- child text object containing "two" and if the selection is the string "two" then:
- <ul>
- <li>the startOffset for the "one ? three" object would be 4, matching the embed character and the endOffset would be 5.</li>
- <li>the startOffset for the "two" object would be 0, and the endOffset would be 3</li>
- </ul>
- Selection offsets are that of the character logically following it, e.g.
- to the right of it in a left to right language or to the left of it in a right to left language.
- @param [in] selectionIndex
- Index of selection (0 based).
- @param [out] startOffset
- 0 based offset of first selected character
- @param [out] endOffset
- 0 based offset of one past the last selected character.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed
- */
- [propget] HRESULT selection
- (
- [in] long selectionIndex,
- [out] long *startOffset,
- [out, retval] long *endOffset
- );
-
- /** @brief Returns the substring between the two given indices.
-
- The substring starts with the character at startOffset (inclusive) and up to
- the character at endOffset (exclusive), if startOffset is less or equal
- endOffset. If endOffset is lower than startOffset, the result is the same
- as a call with the two arguments being exchanged.
-
- The whole text can be requested by passing the indices zero and
- IAccessibleText::nCharacters. If both indices have the same value, an empty
- string is returned.
- @param [in] startOffset
- Index of the first character to include in the returned string. The valid range
- is 0..length.
- @param [in] endOffset
- Index of the last character to exclude in the returned string. The valid range
- is 0..length.
- @param [out] text
- Returns the substring starting with the character at startOffset (inclusive)
- and up to the character at endOffset (exclusive), if startOffset is less than
- or equal to endOffset.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed
- @note
- @li The returned string may be longer than endOffset-startOffset bytes if text
- contains multi-byte characters.
- @li Refer to @ref _specialOffsets
- "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
- for information about special offsets that can be used in %IAccessibleText methods.
- */
- [propget] HRESULT text
- (
- [in] long startOffset,
- [in] long endOffset,
- [out, retval] BSTR *text
- );
-
- /** @brief Returns a text portion before the given position.
-
- Returns the substring of the specified text type that is located before the
- given character and does not include it. The result of this method should be
- same as a result for IAccessibleText::textAtOffset with a suitably decreased
- index value.
-
- For example, if text type is ::IA2_TEXT_BOUNDARY_WORD, then the complete
- word that is closest to and located before offset is returned.
-
- If the index is valid, but no suitable word (or other boundary type) is found, a
- NULL pointer is returned.
-
- @param [in] offset
- Index of the character for which to return the text part before it. The index
- character will not be part of the returned string. The valid range is 0..length.
- Refer to @ref _specialOffsets
- "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
- for information about special offsets that can be used in %IAccessibleText methods.
- @param [in] boundaryType
- The type of the text portion to return. See ::IA2TextBoundaryType for the
- complete list.
- @param [out] startOffset
- 0 based offset of first character.
- @param [out] endOffset
- 0 based offset of one past the last character.
- @param [out] text
- Returns the requested text portion. This portion may be empty or invalid when
- no appropriate text portion is found or text type is invalid.
- @retval S_OK
- @retval S_FALSE if the requested boundary type is not implemented, such as
- ::IA2_TEXT_BOUNDARY_SENTENCE, or if there is nothing to return;
- [out] values are 0s and NULL respectively
- @retval E_INVALIDARG if bad [in] passed
- */
- [propget] HRESULT textBeforeOffset
- (
- [in] long offset,
- [in] enum IA2TextBoundaryType boundaryType,
- [out] long *startOffset,
- [out] long *endOffset,
- [out, retval] BSTR *text
- );
-
- /** @brief Returns a text portion after the given position.
-
- Returns the substring of the specified text type that is located after the
- given character and does not include it. The result of this method should be
- same as a result for IAccessibleText::textAtOffset with a suitably increased
- index value.
-
- For example, if text type is ::IA2_TEXT_BOUNDARY_WORD, then the complete
- word that is closest to and located after offset is returned.
-
- If the index is valid, but no suitable word (or other text type) is found, a
- NULL pointer is returned.
-
- @param [in] offset
- Index of the character for which to return the text part after it. The index
- character will not be part of the returned string. The valid range is 0..length.
- Refer to @ref _specialOffsets
- "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
- for information about special offsets that can be used in %IAccessibleText methods.
- @param [in] boundaryType
- The type of the text portion to return. See ::IA2TextBoundaryType for the complete
- list.
- @param [out] startOffset
- 0 based offset of first character.
- @param [out] endOffset
- 0 based offset of one past the last character.
- @param [out] text
- Returns the requested text portion. This portion may be empty or invalid when
- no appropriate text portion is found or text type is invalid.
- @retval S_OK
- @retval S_FALSE if the requested boundary type is not implemented, such as
- ::IA2_TEXT_BOUNDARY_SENTENCE, or if there is nothing to return;
- [out] values are 0s and NULL respectively
- @retval E_INVALIDARG if bad [in] passed
- */
- [propget] HRESULT textAfterOffset
- (
- [in] long offset,
- [in] enum IA2TextBoundaryType boundaryType,
- [out] long *startOffset,
- [out] long *endOffset,
- [out, retval] BSTR *text
- );
-
- /** @brief Returns a text portion that spans the given position.
-
- Returns the substring of the specified text type at the specified offset.
-
- If the index is valid, but no suitable word (or other text type) is found, a
- NULL pointer is returned.
-
- @param [in] offset
- Index of the character for which to return the text part before it. The index
- character will not be part of the returned string. The valid range is 0..length.
- Refer to @ref _specialOffsets
- "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
- for information about special offsets that can be used in %IAccessibleText methods.
- @param [in] boundaryType
- The type of the text portion to return. See ::IA2TextBoundaryType for the complete
- list.
- @param [out] startOffset
- 0 based offset of first character.
- @param [out] endOffset
- 0 based offset of one past the last character.
- @param [out] text
- Returns the requested text portion. This portion may be empty or invalid when
- no appropriate text portion is found or text type is invalid.
- @retval S_OK
- @retval S_FALSE if the requested boundary type is not implemented, such as
- ::IA2_TEXT_BOUNDARY_SENTENCE, or if there is nothing to return;
- [out] values are 0s and NULL respectively
- @retval E_INVALIDARG if bad [in] passed
- */
- [propget] HRESULT textAtOffset
- (
- [in] long offset,
- [in] enum IA2TextBoundaryType boundaryType,
- [out] long *startOffset,
- [out] long *endOffset,
- [out, retval] BSTR *text
- );
-
- /** @brief Unselects a range of text.
- @param [in] selectionIndex
- Index of selection to remove (0 based).
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed
- */
- HRESULT removeSelection
- (
- [in] long selectionIndex
- );
-
- /** @brief Sets the position of the caret.
-
- The caret position/offset is that of the character logically following it,
- e.g. to the right of it in a left to right language.
-
- Setting the caret position may or may not alter the current selection. A
- change of the selection is notified to the accessibility event listeners with
- an ::IA2_EVENT_TEXT_SELECTION_CHANGED event.
-
- When the new caret position differs from the old one (which, of course, is the
- standard case) this is notified to the accessibility event listeners with an
- ::IA2_EVENT_TEXT_CARET_MOVED event.
- @param [in] offset
- The new index of the caret. This caret is actually placed to the left side of
- the character with that index. An index of 0 places the caret so that the next
- insertion goes before the first character. An index of IAccessibleText::nCharacters
- leads to insertion after the last character. Refer to @ref _specialOffsets
- "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
- for information about special offsets that can be used in %IAccessibleText methods.
- @retval S_OK
- @retval E_FAIL if the caret cannot be set
- @retval E_INVALIDARG if bad [in] passed
- */
- HRESULT setCaretOffset
- (
- [in] long offset
- );
-
- /** @brief Changes the bounds of an existing selection.
- @param [in] selectionIndex
- Index of selection to change (0 based)
- @param [in] startOffset
- New starting offset (0 based)
- @param [in] endOffset
- New ending offset (0 based) - the offset of the character just past the last character of the selection.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed
- @note Refer to @ref _specialOffsets
- "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
- for information about special offsets that can be used in %IAccessibleText methods.
- */
- HRESULT setSelection
- (
- [in] long selectionIndex,
- [in] long startOffset,
- [in] long endOffset
- );
-
- /** @brief Returns total number of characters.
-
- Note that this may be different than the total number of bytes required to store the
- text, if the text contains multi-byte characters.
- @param [out] nCharacters
- @retval S_OK
- */
- [propget] HRESULT nCharacters
- (
- [out, retval] long *nCharacters
- );
-
- /** @brief Makes a specific part of string visible on screen.
- @param [in] startIndex
- 0 based character offset.
- @param [in] endIndex
- 0 based character offset - the offset of the character just past the last character of the string.
- @param [in] scrollType
- Defines where the object should be placed on the screen.
- @retval S_OK
- @retval E_INVALIDARG if bad [in] passed
- @note Refer to @ref _specialOffsets
- "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
- for information about special offsets that can be used in %IAccessibleText methods.
- */
- HRESULT scrollSubstringTo
- (
- [in] long startIndex,
- [in] long endIndex,
- [in] enum IA2ScrollType scrollType
- );
-
- /** @brief Moves the top left of a substring to a specified location.
-
- @param [in] startIndex
- 0 based character offset.
- @param [in] endIndex
- 0 based character offset - the offset of the character just past the last character of the string.
- @param [in] coordinateType
- Specifies whether the coordinates are relative to the screen or the parent object.
- @param [in] x
- Defines the x coordinate.
- @param [in] y
- Defines the y coordinate.
- @retval S_OK
- @retval S_FALSE if the object is already at the specified location.
- @retval E_INVALIDARG if bad [in] passed
- @note Refer to @ref _specialOffsets
- "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
- for information about special offsets that can be used in %IAccessibleText methods.
- */
- HRESULT scrollSubstringToPoint
- (
- [in] long startIndex,
- [in] long endIndex,
- [in] enum IA2CoordinateType coordinateType,
- [in] long x,
- [in] long y
- );
-
- /** @brief Returns any inserted text.
-
- Provided for use by the ::IA2_EVENT_TEXT_INSERTED and ::IA2_EVENT_TEXT_UPDATED
- event handlers.
-
- This data is only guaranteed to be valid while the thread notifying the event
- continues. Once the handler has returned, the validity of the data depends on
- how the server manages the life cycle of its objects. Also, note that the server
- may have different life cycle management strategies for controls depending on
- whether or not a control manages its children. Lists, trees, and tables can have
- a large number of children and thus it's possible that the child objects for those
- controls would only be created as needed. Servers should document their life cycle
- strategy as this will be of interest to assistive technology or script engines
- accessing data out of process or from other threads. Servers only need to save the
- last inserted block of text and a scope of the entire application is adequate.
-
- @param [out] newText
- The text that was just inserted.
- @retval S_OK
- @retval S_FALSE If there is nothing to return, the values of IA2TextSegment
- struct are set as follows: text = NULL, start = 0, end = 0.
-
- */
- [propget] HRESULT newText
- (
- [out, retval] IA2TextSegment *newText
- );
-
- /** @brief Returns any removed text.
-
- Provided for use by the IA2_EVENT_TEXT_REMOVED/UPDATED event handlers.
-
- This data is only guaranteed to be valid while the thread notifying the event
- continues. Once the handler has returned, the validity of the data depends on
- how the server manages the life cycle of its objects. Also, note that the server
- may have different life cycle management strategies for controls depending on
- whether or not a control manages its children. Lists, trees, and tables can have
- a large number of children and thus it's possible that the child objects for those
- controls would only be created as needed. Servers should document their life cycle
- strategy as this will be of interest to assistive technology or script engines
- accessing data out of process or from other threads. Servers only need to save the
- last removed block of text and a scope of the entire application is adequate.
-
- @param [out] oldText
- The text that was just removed.
- @retval S_OK
- @retval S_FALSE If there is nothing to return, the values of IA2TextSegment
- struct are set as follows: text = NULL, start = 0, end = 0.
- */
- [propget] HRESULT oldText
- (
- [out, retval] IA2TextSegment *oldText
- );
-
-}
diff --git a/src/3rdparty/iaccessible2/idl/AccessibleValue.idl b/src/3rdparty/iaccessible2/idl/AccessibleValue.idl
deleted file mode 100644
index cd013d76f8..0000000000
--- a/src/3rdparty/iaccessible2/idl/AccessibleValue.idl
+++ /dev/null
@@ -1,136 +0,0 @@
-/*************************************************************************
- *
- * File Name (AccessibleValue.idl)
- *
- * IAccessible2 IDL Specification
- *
- * Copyright (c) 2007, 2010 Linux Foundation
- * Copyright (c) 2006 IBM Corporation
- * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
- * All rights reserved.
- *
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * 3. Neither the name of the Linux Foundation nor the names of its
- * contributors may be used to endorse or promote products
- * derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * This BSD License conforms to the Open Source Initiative "Simplified
- * BSD License" as published at:
- * http://www.opensource.org/licenses/bsd-license.php
- *
- * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
- * mark may be used in accordance with the Linux Foundation Trademark
- * Policy to indicate compliance with the IAccessible2 specification.
- *
- ************************************************************************/
-
-import "objidl.idl";
-import "oaidl.idl";
-import "oleacc.idl";
-
-/** @brief This interface gives access to a single numerical value.
-
- The %IAccessibleValue interface represents a single numerical value and should
- be implemented by any class that supports numerical value like progress bars
- and spin boxes. This interface lets you access the value and its upper and
- lower bounds.
-*/
-[object, uuid(35855B5B-C566-4fd0-A7B1-E65465600394)]
-interface IAccessibleValue : IUnknown
-{
-
- /** @brief Returns the value of this object as a number.
-
- The exact return type is implementation dependent. Typical types are long and
- double.
- @param [out] currentValue
- Returns the current value represented by this object. See the section about
- @ref _variants "VARIANTs" for additional information.
- @retval S_OK
- @retval S_FALSE if there is nothing to return, [out] value is a VARIANT with vt = VT_EMPTY
- */
- [propget] HRESULT currentValue
- (
- [out, retval] VARIANT *currentValue
- );
-
- /** @brief Sets the value of this object to the given number.
-
- The argument is clipped to the valid interval whose upper and lower
- bounds are returned by the methods IAccessibleValue::maximumValue and
- IAccessibleValue::minimumValue, i.e. if it is lower than the minimum
- value the new value will be the minimum and if it is greater than the
- maximum then the new value will be the maximum.
-
- @param [in] value
- The new value represented by this object. The set of admissible types for
- this argument is implementation dependent.
- @retval S_OK
- */
- HRESULT setCurrentValue
- (
- [in] VARIANT value
- );
-
- /** @brief Returns the maximal value that can be represented by this object.
-
- The type of the returned value is implementation dependent. It does not have
- to be the same type as that returned by method IAccessibleValue::currentValue.
-
- @param [out] maximumValue
- Returns the maximal value in an implementation dependent type. If this object
- has no upper bound then an empty object is returned. See the section about
- @ref _variants "VARIANTs" for additional information.
- @retval S_OK
- @retval S_FALSE if there is nothing to return, [out] value is a VARIANT with vt = VT_EMPTY
- */
- [propget] HRESULT maximumValue
- (
- [out, retval] VARIANT *maximumValue
- );
-
- /** @brief Returns the minimal value that can be represented by this object.
-
- The type of the returned value is implementation dependent. It does not have
- to be the same type as that returned by method IAccessibleValue::currentValue.
-
- @param [out] minimumValue
- Returns the minimal value in an implementation dependent type. If this object
- has no lower bound then an empty object is returned. See the section about
- @ref _variants "VARIANTs" for additional information.
- @retval S_OK
- @retval S_FALSE if there is nothing to return, [out] value is a VARIANT with vt = VT_EMPTY
- */
- [propget] HRESULT minimumValue
- (
- [out, retval] VARIANT *minimumValue
- );
-
-};
diff --git a/src/3rdparty/iaccessible2/idl/IA2CommonTypes.idl b/src/3rdparty/iaccessible2/idl/IA2CommonTypes.idl
deleted file mode 100644
index d3da110873..0000000000
--- a/src/3rdparty/iaccessible2/idl/IA2CommonTypes.idl
+++ /dev/null
@@ -1,191 +0,0 @@
-/*************************************************************************
- *
- * File Name (IA2CommonTypes.idl)
- *
- * IAccessible2 IDL Specification
- *
- * Copyright (c) 2007, 2010 Linux Foundation
- * Copyright (c) 2006 IBM Corporation
- * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
- * All rights reserved.
- *
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * 3. Neither the name of the Linux Foundation nor the names of its
- * contributors may be used to endorse or promote products
- * derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * This BSD License conforms to the Open Source Initiative "Simplified
- * BSD License" as published at:
- * http://www.opensource.org/licenses/bsd-license.php
- *
- * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
- * mark may be used in accordance with the Linux Foundation Trademark
- * Policy to indicate compliance with the IAccessible2 specification.
- *
- ************************************************************************/
-
- /** These constants control the scrolling of an object or substring into a window.
-
- This enum is used in IAccessible2::scrollTo and IAccessibleText::scrollSubstringTo.
-*/
-enum IA2ScrollType {
-
- /** Scroll the top left corner of the object or substring such that the top left
- corner (and as much as possible of the rest of the object or substring) is within
- the top level window. In cases where the entire object or substring fits within
- the top level window, the placement of the object or substring is dependent on
- the application. For example, the object or substring may be scrolled to the
- closest edge, the furthest edge, or midway between those two edges. In cases
- where there is a hierarchy of nested scrollable controls, more than one control
- may have to be scrolled.
- */
- IA2_SCROLL_TYPE_TOP_LEFT,
-
- /** Scroll the bottom right corner of the object or substring such that the bottom right
- corner (and as much as possible of the rest of the object or substring) is within
- the top level window. In cases where the entire object or substring fits within
- the top level window, the placement of the object or substring is dependent on
- the application. For example, the object or substring may be scrolled to the
- closest edge, the furthest edge, or midway between those two edges. In cases
- where there is a hierarchy of nested scrollable controls, more than one control
- may have to be scrolled.
- */
- IA2_SCROLL_TYPE_BOTTOM_RIGHT,
-
- /** Scroll the top edge of the object or substring such that the top edge
- (and as much as possible of the rest of the object or substring) is within the
- top level window. In cases where the entire object or substring fits within
- the top level window, the placement of the object or substring is dependent on
- the application. For example, the object or substring may be scrolled to the
- closest edge, the furthest edge, or midway between those two edges. In cases
- where there is a hierarchy of nested scrollable controls, more than one control
- may have to be scrolled.
- */
- IA2_SCROLL_TYPE_TOP_EDGE,
-
- /** Scroll the bottom edge of the object or substring such that the bottom edge
- (and as much as possible of the rest of the object or substring) is within the
- top level window. In cases where the entire object or substring fits within
- the top level window, the placement of the object or substring is dependent on
- the application. For example, the object or substring may be scrolled to the
- closest edge, the furthest edge, or midway between those two edges. In cases
- where there is a hierarchy of nested scrollable controls, more than one control
- may have to be scrolled.
- */
- IA2_SCROLL_TYPE_BOTTOM_EDGE,
-
- /** Scroll the left edge of the object or substring such that the left edge
- (and as much as possible of the rest of the object or substring) is within the
- top level window. In cases where the entire object or substring fits within
- the top level window, the placement of the object or substring is dependent on
- the application. For example, the object or substring may be scrolled to the
- closest edge, the furthest edge, or midway between those two edges. In cases
- where there is a hierarchy of nested scrollable controls, more than one control
- may have to be scrolled.
- */
- IA2_SCROLL_TYPE_LEFT_EDGE,
-
- /** Scroll the right edge of the object or substring such that the right edge
- (and as much as possible of the rest of the object or substring) is within the
- top level window. In cases where the entire object or substring fits within
- the top level window, the placement of the object or substring is dependent on
- the application. For example, the object or substring may be scrolled to the
- closest edge, the furthest edge, or midway between those two edges. In cases
- where there is a hierarchy of nested scrollable controls, more than one control
- may have to be scrolled.
- */
- IA2_SCROLL_TYPE_RIGHT_EDGE,
-
- /** Scroll the object or substring such that as much as possible of the
- object or substring is within the top level window. The placement of
- the object is dependent on the application. For example, the object or
- substring may be scrolled to to closest edge, the furthest edge, or midway
- between those two edges.
- */
- IA2_SCROLL_TYPE_ANYWHERE
-};
-
-/** These constants define which coordinate system a point is located in.
-
- This enum is used in IAccessible2::scrollToPoint, IAccessibleImage::imagePosition,
- IAccessibleText::characterExtents, and IAccessibleText::offsetAtPoint, and
- IAccessibleText::scrollSubstringToPoint.
-*/
-enum IA2CoordinateType {
-
- /// The coordinates are relative to the screen.
- IA2_COORDTYPE_SCREEN_RELATIVE,
-
- /** The coordinates are relative to the upper left corner of the bounding box
- of the immediate parent.
- */
- IA2_COORDTYPE_PARENT_RELATIVE
-
-};
-
-/** Special offsets for use in IAccessibleText and IAccessibleEditableText methods
-
- Refer to @ref _specialOffsets
- "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
- for more information.
-*/
-enum IA2TextSpecialOffsets {
- IA2_TEXT_OFFSET_LENGTH = -1, /**< This offset is equivalent to the length of the string. It eliminates
- the need to call IAccessibleText::nCharacters. */
- IA2_TEXT_OFFSET_CARET = -2 /**< This offset signifies that the text related to the physical location
- of the caret should be used. */
-};
-
-/** These constants specify the kind of change made to a table.
-
- This enum is used in the IA2TableModelChange struct which in turn is used by
- IAccessibleTable::modelChange and IAccessibleTable2::modelChange.
-*/
-enum IA2TableModelChangeType {
- IA2_TABLE_MODEL_CHANGE_INSERT, // = 0;
- IA2_TABLE_MODEL_CHANGE_DELETE,
- IA2_TABLE_MODEL_CHANGE_UPDATE
-};
-
-/** A structure defining the type of and extents of changes made to a table
-
- IAccessibleTable::modelChange and IAccessibleTable2::modelChange return this struct.
- In the case of an insertion or change the row and column offsets define the boundaries
- of the inserted or changed subtable after the operation. In the case of a deletion
- the row and column offsets define the boundaries of the subtable being removed before
- the removal.
-*/
-typedef struct IA2TableModelChange {
- enum IA2TableModelChangeType type; // insert, delete, update
- long firstRow; ///< 0 based, inclusive
- long lastRow; ///< 0 based, inclusive
- long firstColumn; ///< 0 based, inclusive
- long lastColumn; ///< 0 based, inclusive
-} IA2TableModelChange;
diff --git a/src/3rdparty/iaccessible2/idl/IA2TypeLibrary.idl b/src/3rdparty/iaccessible2/idl/IA2TypeLibrary.idl
deleted file mode 100644
index 7753825751..0000000000
--- a/src/3rdparty/iaccessible2/idl/IA2TypeLibrary.idl
+++ /dev/null
@@ -1,94 +0,0 @@
-/*************************************************************************
- *
- * File Name (IA2TypeLibrary.idl)
- *
- * IAccessible2 IDL Specification
- *
- * Copyright (c) 2007, 2010 Linux Foundation
- * Copyright (c) 2006 IBM Corporation
- * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
- * All rights reserved.
- *
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- *
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- *
- * 2. Redistributions in binary form must reproduce the above
- * copyright notice, this list of conditions and the following
- * disclaimer in the documentation and/or other materials
- * provided with the distribution.
- *
- * 3. Neither the name of the Linux Foundation nor the names of its
- * contributors may be used to endorse or promote products
- * derived from this software without specific prior written
- * permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
- * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
- * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
- * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
- * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
- * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
- * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
- * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
- * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- *
- * This BSD License conforms to the Open Source Initiative "Simplified
- * BSD License" as published at:
- * http://www.opensource.org/licenses/bsd-license.php
- *
- * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
- * mark may be used in accordance with the Linux Foundation Trademark
- * Policy to indicate compliance with the IAccessible2 specification.
- *
- ************************************************************************/
-
-// This is not a standalone file. It is to be appended to the end of the
-// merged IDL file.
-
-cpp_quote("")
-cpp_quote("// Type Library Definitions")
-cpp_quote("")
-
-[
- uuid(c974e070-3787-490a-87b0-e333b06ca1e2),
- helpstring("IAccessible2 Type Library"),
- version(1.2),
- hidden
-]
-
-library IAccessible2Lib
-{
- importlib ("stdole2.tlb");
- importlib ("oleacc.dll");
- interface IAccessible2;
- interface IAccessibleAction;
- interface IAccessibleApplication;
- interface IAccessibleComponent;
- interface IAccessibleEditableText;
- interface IAccessibleHyperlink;
- interface IAccessibleHypertext;
- interface IAccessibleImage;
- interface IAccessibleRelation;
- interface IAccessibleTable;
- interface IAccessibleTable2;
- interface IAccessibleTableCell;
- interface IAccessibleText;
- interface IAccessibleValue;
- enum IA2CoordinateType;
- enum IA2EventID;
- enum IA2Role;
- enum IA2ScrollType;
- enum IA2States;
- enum IA2TableModelChangeType;
- enum IA2TextBoundaryType;
- enum IA2TextSpecialOffsets;
-}
diff --git a/src/3rdparty/iaccessible2/idl/Makefile b/src/3rdparty/iaccessible2/idl/Makefile
index eb56d9fb60..e186b5ab54 100644
--- a/src/3rdparty/iaccessible2/idl/Makefile
+++ b/src/3rdparty/iaccessible2/idl/Makefile
@@ -11,48 +11,11 @@ MIDL_OPTS = /out ..\generated\x86 /env win32
x86:
-del ..\generated\x86\dlldata.c
-md ..\generated\x86
- $(MIDL) $(MIDL_OPTS) Accessible2.idl
- $(MIDL) $(MIDL_OPTS) AccessibleAction.idl
- $(MIDL) $(MIDL_OPTS) AccessibleApplication.idl
- $(MIDL) $(MIDL_OPTS) AccessibleComponent.idl
- $(MIDL) $(MIDL_OPTS) AccessibleEditableText.idl
- $(MIDL) $(MIDL_OPTS) AccessibleEventID.idl
- $(MIDL) $(MIDL_OPTS) AccessibleHyperlink.idl
- $(MIDL) $(MIDL_OPTS) AccessibleHypertext.idl
- $(MIDL) $(MIDL_OPTS) AccessibleImage.idl
- $(MIDL) $(MIDL_OPTS) AccessibleRelation.idl
- $(MIDL) $(MIDL_OPTS) AccessibleRole.idl
- $(MIDL) $(MIDL_OPTS) AccessibleStates.idl
- $(MIDL) $(MIDL_OPTS) AccessibleTable.idl
- $(MIDL) $(MIDL_OPTS) AccessibleTable2.idl
- $(MIDL) $(MIDL_OPTS) AccessibleTableCell.idl
- $(MIDL) $(MIDL_OPTS) AccessibleText.idl
- $(MIDL) $(MIDL_OPTS) AccessibleValue.idl
- $(MIDL) $(MIDL_OPTS) IA2CommonTypes.idl
- $(MIDL) $(MIDL_OPTS) IA2TypeLibrary.idl
+ $(MIDL) $(MIDL_OPTS) ia2_api_all.idl
MIDL_OPTS = /out ..\generated\amd64 /env amd64
amd64:
-del ..\generated\amd64\dlldata.c
-md ..\generated\amd64
- $(MIDL) $(MIDL_OPTS) Accessible2.idl
- $(MIDL) $(MIDL_OPTS) AccessibleAction.idl
- $(MIDL) $(MIDL_OPTS) AccessibleApplication.idl
- $(MIDL) $(MIDL_OPTS) AccessibleComponent.idl
- $(MIDL) $(MIDL_OPTS) AccessibleEditableText.idl
- $(MIDL) $(MIDL_OPTS) AccessibleEventID.idl
- $(MIDL) $(MIDL_OPTS) AccessibleHyperlink.idl
- $(MIDL) $(MIDL_OPTS) AccessibleHypertext.idl
- $(MIDL) $(MIDL_OPTS) AccessibleImage.idl
- $(MIDL) $(MIDL_OPTS) AccessibleRelation.idl
- $(MIDL) $(MIDL_OPTS) AccessibleRole.idl
- $(MIDL) $(MIDL_OPTS) AccessibleStates.idl
- $(MIDL) $(MIDL_OPTS) AccessibleTable.idl
- $(MIDL) $(MIDL_OPTS) AccessibleTable2.idl
- $(MIDL) $(MIDL_OPTS) AccessibleTableCell.idl
- $(MIDL) $(MIDL_OPTS) AccessibleText.idl
- $(MIDL) $(MIDL_OPTS) AccessibleValue.idl
- $(MIDL) $(MIDL_OPTS) IA2CommonTypes.idl
- $(MIDL) $(MIDL_OPTS) IA2TypeLibrary.idl
-
+ $(MIDL) $(MIDL_OPTS) ia2_api_all.idl
diff --git a/src/3rdparty/iaccessible2/idl/README b/src/3rdparty/iaccessible2/idl/README
index 0a299f16b4..7751447fd4 100644
--- a/src/3rdparty/iaccessible2/idl/README
+++ b/src/3rdparty/iaccessible2/idl/README
@@ -4,3 +4,6 @@ in this directory to generate the files from the idl files.
The generated files will be put in
..\generated\x86 and ..\generated\amd64
+In order for it to work on msvc-2010 you need to use MIDL shipped with
+that version
+(Microsoft (R) 32b/64b MIDL Compiler Version 7.00.0555).
diff --git a/src/3rdparty/iaccessible2/idl/ia2_api_all.idl b/src/3rdparty/iaccessible2/idl/ia2_api_all.idl
new file mode 100644
index 0000000000..729ed2627d
--- /dev/null
+++ b/src/3rdparty/iaccessible2/idl/ia2_api_all.idl
@@ -0,0 +1,5473 @@
+/*************************************************************************
+ *
+ * File Name (api_all_headers.idl)
+ *
+ * IAccessible2 IDL Specification
+ *
+ * Copyright (c) 2013 Linux Foundation
+ * All rights reserved.
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * 3. Neither the name of the Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products
+ * derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This BSD License conforms to the Open Source Initiative "Simplified
+ * BSD License" as published at:
+ * http://www.opensource.org/licenses/bsd-license.php
+ *
+ * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
+ * mark may be used in accordance with the Linux Foundation Trademark
+ * Policy to indicate compliance with the IAccessible2 specification.
+ *
+ ************************************************************************/
+
+import "objidl.idl";
+import "oaidl.idl";
+import "oleacc.idl";
+
+/*************************************************************************
+ *
+ * File Name (IA2CommonTypes.idl)
+ *
+ * IAccessible2 IDL Specification
+ *
+ * Copyright (c) 2007, 2013 Linux Foundation
+ * Copyright (c) 2006 IBM Corporation
+ * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
+ * All rights reserved.
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * 3. Neither the name of the Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products
+ * derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This BSD License conforms to the Open Source Initiative "Simplified
+ * BSD License" as published at:
+ * http://www.opensource.org/licenses/bsd-license.php
+ *
+ * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
+ * mark may be used in accordance with the Linux Foundation Trademark
+ * Policy to indicate compliance with the IAccessible2 specification.
+ *
+ ************************************************************************/
+
+ /** These constants control the scrolling of an object or substring into a window.
+
+ This enum is used in IAccessible2::scrollTo and IAccessibleText::scrollSubstringTo.
+*/
+enum IA2ScrollType {
+
+ /** Scroll the top left corner of the object or substring such that the top left
+ corner (and as much as possible of the rest of the object or substring) is within
+ the top level window. In cases where the entire object or substring fits within
+ the top level window, the placement of the object or substring is dependent on
+ the application. For example, the object or substring may be scrolled to the
+ closest edge, the furthest edge, or midway between those two edges. In cases
+ where there is a hierarchy of nested scrollable controls, more than one control
+ may have to be scrolled.
+ */
+ IA2_SCROLL_TYPE_TOP_LEFT,
+
+ /** Scroll the bottom right corner of the object or substring such that the bottom right
+ corner (and as much as possible of the rest of the object or substring) is within
+ the top level window. In cases where the entire object or substring fits within
+ the top level window, the placement of the object or substring is dependent on
+ the application. For example, the object or substring may be scrolled to the
+ closest edge, the furthest edge, or midway between those two edges. In cases
+ where there is a hierarchy of nested scrollable controls, more than one control
+ may have to be scrolled.
+ */
+ IA2_SCROLL_TYPE_BOTTOM_RIGHT,
+
+ /** Scroll the top edge of the object or substring such that the top edge
+ (and as much as possible of the rest of the object or substring) is within the
+ top level window. In cases where the entire object or substring fits within
+ the top level window, the placement of the object or substring is dependent on
+ the application. For example, the object or substring may be scrolled to the
+ closest edge, the furthest edge, or midway between those two edges. In cases
+ where there is a hierarchy of nested scrollable controls, more than one control
+ may have to be scrolled.
+ */
+ IA2_SCROLL_TYPE_TOP_EDGE,
+
+ /** Scroll the bottom edge of the object or substring such that the bottom edge
+ (and as much as possible of the rest of the object or substring) is within the
+ top level window. In cases where the entire object or substring fits within
+ the top level window, the placement of the object or substring is dependent on
+ the application. For example, the object or substring may be scrolled to the
+ closest edge, the furthest edge, or midway between those two edges. In cases
+ where there is a hierarchy of nested scrollable controls, more than one control
+ may have to be scrolled.
+ */
+ IA2_SCROLL_TYPE_BOTTOM_EDGE,
+
+ /** Scroll the left edge of the object or substring such that the left edge
+ (and as much as possible of the rest of the object or substring) is within the
+ top level window. In cases where the entire object or substring fits within
+ the top level window, the placement of the object or substring is dependent on
+ the application. For example, the object or substring may be scrolled to the
+ closest edge, the furthest edge, or midway between those two edges. In cases
+ where there is a hierarchy of nested scrollable controls, more than one control
+ may have to be scrolled.
+ */
+ IA2_SCROLL_TYPE_LEFT_EDGE,
+
+ /** Scroll the right edge of the object or substring such that the right edge
+ (and as much as possible of the rest of the object or substring) is within the
+ top level window. In cases where the entire object or substring fits within
+ the top level window, the placement of the object or substring is dependent on
+ the application. For example, the object or substring may be scrolled to the
+ closest edge, the furthest edge, or midway between those two edges. In cases
+ where there is a hierarchy of nested scrollable controls, more than one control
+ may have to be scrolled.
+ */
+ IA2_SCROLL_TYPE_RIGHT_EDGE,
+
+ /** Scroll the object or substring such that as much as possible of the
+ object or substring is within the top level window. The placement of
+ the object is dependent on the application. For example, the object or
+ substring may be scrolled to to closest edge, the furthest edge, or midway
+ between those two edges.
+ */
+ IA2_SCROLL_TYPE_ANYWHERE
+};
+
+/** These constants define which coordinate system a point is located in.
+
+ This enum is used in IAccessible2::scrollToPoint, IAccessibleImage::imagePosition,
+ IAccessibleText::characterExtents, and IAccessibleText::offsetAtPoint, and
+ IAccessibleText::scrollSubstringToPoint.
+*/
+enum IA2CoordinateType {
+
+ /// The coordinates are relative to the screen.
+ IA2_COORDTYPE_SCREEN_RELATIVE,
+
+ /** The coordinates are relative to the upper left corner of the bounding box
+ of the immediate parent.
+ */
+ IA2_COORDTYPE_PARENT_RELATIVE
+
+};
+
+/** Special offsets for use in IAccessibleText and IAccessibleEditableText methods
+
+ Refer to @ref _specialOffsets
+ "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
+ for more information.
+*/
+enum IA2TextSpecialOffsets {
+ IA2_TEXT_OFFSET_LENGTH = -1, /**< This offset is equivalent to the length of the string. It eliminates
+ the need to call IAccessibleText::nCharacters. */
+ IA2_TEXT_OFFSET_CARET = -2 /**< This offset signifies that the text related to the physical location
+ of the caret should be used. */
+};
+
+/** These constants specify the kind of change made to a table.
+
+ This enum is used in the IA2TableModelChange struct which in turn is used by
+ IAccessibleTable::modelChange and IAccessibleTable2::modelChange.
+*/
+enum IA2TableModelChangeType {
+ IA2_TABLE_MODEL_CHANGE_INSERT, // = 0;
+ IA2_TABLE_MODEL_CHANGE_DELETE,
+ IA2_TABLE_MODEL_CHANGE_UPDATE
+};
+
+/** A structure defining the type of and extents of changes made to a table
+
+ IAccessibleTable::modelChange and IAccessibleTable2::modelChange return this struct.
+ In the case of an insertion or change the row and column offsets define the boundaries
+ of the inserted or changed subtable after the operation. In the case of a deletion
+ the row and column offsets define the boundaries of the subtable being removed before
+ the removal.
+*/
+typedef struct IA2TableModelChange {
+ enum IA2TableModelChangeType type; // insert, delete, update
+ long firstRow; ///< 0 based, inclusive
+ long lastRow; ///< 0 based, inclusive
+ long firstColumn; ///< 0 based, inclusive
+ long lastColumn; ///< 0 based, inclusive
+} IA2TableModelChange;
+/*************************************************************************
+ *
+ * File Name (AccessibleRelation.idl)
+ *
+ * IAccessible2 IDL Specification
+ *
+ * Copyright (c) 2007, 2013 Linux Foundation
+ * Copyright (c) 2006 IBM Corporation
+ * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
+ * All rights reserved.
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * 3. Neither the name of the Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products
+ * derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This BSD License conforms to the Open Source Initiative "Simplified
+ * BSD License" as published at:
+ * http://www.opensource.org/licenses/bsd-license.php
+ *
+ * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
+ * mark may be used in accordance with the Linux Foundation Trademark
+ * Policy to indicate compliance with the IAccessible2 specification.
+ *
+ ************************************************************************/
+
+
+
+
+
+/** @defgroup grpRelations Relations
+ Use the following constants to compare against the BSTRs returned by
+ IAccessibleRelation::relationType.
+*/
+///@{
+
+/** The target object is the containing application object. */
+const WCHAR *const IA2_RELATION_CONTAINING_APPLICATION = L"containingApplication";
+
+/** The target object is the containing document object. The target object implements
+ the IAccessibleDocument interface.
+*/
+const WCHAR *const IA2_RELATION_CONTAINING_DOCUMENT = L"containingDocument";
+
+/** The target object is the containing tab pane object. */
+const WCHAR *const IA2_RELATION_CONTAINING_TAB_PANE = L"containingTabPane";
+
+/** The target object is the containing window object. */
+const WCHAR *const IA2_RELATION_CONTAINING_WINDOW = L"containingWindow";
+
+/** Some attribute of this object is affected by a target object. */
+const WCHAR *const IA2_RELATION_CONTROLLED_BY = L"controlledBy";
+
+/** This object is interactive and controls some attribute of a target object. */
+const WCHAR *const IA2_RELATION_CONTROLLER_FOR = L"controllerFor";
+
+/** This object is described by the target object. */
+const WCHAR *const IA2_RELATION_DESCRIBED_BY = L"describedBy";
+
+/** This object is describes the target object. */
+const WCHAR *const IA2_RELATION_DESCRIPTION_FOR = L"descriptionFor";
+
+/** This object is embedded by a target object. */
+const WCHAR *const IA2_RELATION_EMBEDDED_BY = L"embeddedBy";
+
+/** This object embeds a target object. This relation can be used on the
+ OBJID_CLIENT accessible for a top level window to show where the content
+ areas are.
+*/
+const WCHAR *const IA2_RELATION_EMBEDS = L"embeds";
+
+/** Content flows to this object from a target object.
+ This relation and IA2_RELATION_FLOWS_TO are useful to tie text and non-text
+ objects together in order to allow assistive technology to follow the
+ intended reading order.
+*/
+const WCHAR *const IA2_RELATION_FLOWS_FROM = L"flowsFrom";
+
+/** Content flows from this object to a target object. */
+const WCHAR *const IA2_RELATION_FLOWS_TO = L"flowsTo";
+
+/** This object is label for a target object. */
+const WCHAR *const IA2_RELATION_LABEL_FOR = L"labelFor";
+
+/** This object is labelled by a target object. Note that the double L spelling
+ which follows is preferred. Please use it instead. This single L version may
+ be removed in a later version.
+*/
+const WCHAR *const IA2_RELATION_LABELED_BY = L"labelledBy";
+
+/** This object is labelled by a target object. */
+const WCHAR *const IA2_RELATION_LABELLED_BY = L"labelledBy";
+
+/** This object is a member of a group of one or more objects. When
+ there is more than one object in the group each member may have one and the
+ same target, e.g. a grouping object. It is also possible that each member has
+ multiple additional targets, e.g. one for every other member in the group.
+*/
+const WCHAR *const IA2_RELATION_MEMBER_OF = L"memberOf";
+
+/** The target object is the next object in the tab order. */
+const WCHAR *const IA2_RELATION_NEXT_TABBABLE = L"nextTabbable";
+
+/** This object is a logical child of a target object. This relation is the reciprocal
+ of the IA2_RELATION_NODE_PARENT_OF relation. In some cases an application's accessible
+ tree is such that objects can be in a logical parent-child relationship which is
+ different from the hierarchy of the accessible tree. */
+const WCHAR *const IA2_RELATION_NODE_CHILD_OF = L"nodeChildOf";
+
+/** This object is a logical parent of a target object. This relation is the reciprocal
+ of the IA2_RELATION_NODE_CHILD_OF relation. In some cases an application's accessible
+ tree is such that objects can be in a logical parent-child relationship which is
+ different from the hierarchy of the accessible tree. */
+const WCHAR *const IA2_RELATION_NODE_PARENT_OF = L"nodeParentOf";
+
+/** This object is a parent window of the target object. */
+const WCHAR *const IA2_RELATION_PARENT_WINDOW_OF = L"parentWindowOf";
+
+/** This object is a transient component related to the target object.
+ When this object is activated the target object doesn't lose focus.
+*/
+const WCHAR *const IA2_RELATION_POPUP_FOR = L"popupFor";
+
+/** The target object is the previous object in the tab order. */
+const WCHAR *const IA2_RELATION_PREVIOUS_TABBABLE = L"previousTabbable";
+
+/** This object is a sub window of a target object. */
+const WCHAR *const IA2_RELATION_SUBWINDOW_OF = L"subwindowOf";
+
+///@}
+
+/** This interface gives access to an object's set of relations.
+*/
+[object, uuid(7CDF86EE-C3DA-496a-BDA4-281B336E1FDC)]
+interface IAccessibleRelation : IUnknown
+{
+ /** @brief Returns the type of the relation.
+ @param [out] relationType
+ The strings returned are defined @ref grpRelations "in this section of the documentation".
+ @retval S_OK
+ */
+ [propget] HRESULT relationType
+ (
+ [out, retval] BSTR *relationType
+ );
+
+ /** @brief Returns a localized version of the relation type.
+ @param [out] localizedRelationType
+ @retval S_OK
+ */
+ [propget] HRESULT localizedRelationType
+ (
+ [out, retval] BSTR *localizedRelationType
+ );
+
+ /** @brief Returns the number of targets for this relation.
+ @param [out] nTargets
+ @retval S_OK
+ */
+ [propget] HRESULT nTargets
+ (
+ [out, retval] long *nTargets
+ );
+
+ /** @brief Returns one accessible relation target.
+ @param [in] targetIndex
+ 0 based index
+ @param [out] target
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed
+ @note Use QueryInterface to get IAccessible2.
+ */
+ [propget] HRESULT target
+ (
+ [in] long targetIndex,
+ [out, retval] IUnknown **target
+ );
+
+ /** @brief Returns multiple accessible relation targets
+ @param [in] maxTargets
+ maximum size of the array allocated by the client
+ @param [out] targets
+ The array of target objects. Note that this array is to be allocated by the
+ client and freed when no longer needed. Refer to @ref _arrayConsideration
+ "Special Consideration when using Arrays" for more details. You will need to use
+ QueryInterface on the IUnknown to get the IAccessible2.
+ @param [out] nTargets
+ actual number of targets in the returned array (not more than maxTargets)
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed, e.g. a negative value
+ */
+ [propget] HRESULT targets
+ (
+ [in] long maxTargets,
+ [out, size_is(maxTargets), length_is(*nTargets)]
+ IUnknown **targets,
+ [out, retval] long *nTargets
+ );
+
+}
+/*************************************************************************
+ *
+ * File Name (AccessibleAction.idl)
+ *
+ * IAccessible2 IDL Specification
+ *
+ * Copyright (c) 2007, 2013 Linux Foundation
+ * Copyright (c) 2006 IBM Corporation
+ * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
+ * All rights reserved.
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * 3. Neither the name of the Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products
+ * derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This BSD License conforms to the Open Source Initiative "Simplified
+ * BSD License" as published at:
+ * http://www.opensource.org/licenses/bsd-license.php
+ *
+ * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
+ * mark may be used in accordance with the Linux Foundation Trademark
+ * Policy to indicate compliance with the IAccessible2 specification.
+ *
+ ************************************************************************/
+
+
+
+
+
+/** This enum defines values which are predefined actions for use when implementing
+ support for media.
+
+ This enum is used when specifying an action for IAccessibleAction::doAction.
+*/
+
+enum IA2Actions {
+ IA2_ACTION_OPEN = -1, /**< Used to inform the server that the client will
+ signal via IA2_ACTION_COMPLETE when it has consumed
+ the content provided by the object. This action
+ allows the object's server to wait for all clients
+ to signal their readiness for additional content.
+ Any form of content generation that requires
+ synchronization with an AT would require use of this
+ action. One example is the generation of text describing
+ visual content not obvious from a video's sound track.
+ In this scenario the Text to Speech or Braille output
+ may take more time than the related length of silence
+ in the video's sound track. */
+ IA2_ACTION_COMPLETE = -2, /**< Used by the client to inform the server that it has
+ consumed the most recent content provided by this object. */
+ IA2_ACTION_CLOSE = -3 /**< Used to inform the server that the client no longer
+ requires synchronization. */
+};
+
+/** @brief This interface gives access to actions that can be executed
+ for accessible objects.
+
+ Every accessible object that can be manipulated via the native GUI beyond the
+ methods available either in the MSAA IAccessible interface or in the set of
+ IAccessible2 interfaces (other than this IAccessibleAction interface) should
+ support the IAccessibleAction interface in order to provide Assistive Technology
+ access to all the actions that can be performed by the object. Each action can
+ be performed or queried for a name, description or associated key bindings.
+ Actions are needed more for ATs that assist the mobility impaired, such as
+ on-screen keyboards and voice command software. By providing actions directly,
+ the AT can present them to the user without the user having to perform the extra
+ steps to navigate a context menu.
+
+ The first action should be equivalent to the MSAA default action. If there is
+ only one action, %IAccessibleAction should also be implemented.
+*/
+[object, uuid(B70D9F59-3B5A-4dba-AB9E-22012F607DF5)]
+interface IAccessibleAction : IUnknown
+{
+
+ /** @brief Returns the number of accessible actions available in this object.
+
+ If there are more than one, the first one is considered the
+ "default" action of the object.
+ @param [out] nActions
+ The returned value of the number of actions is zero if there are
+ no actions.
+ @retval S_OK
+ @note This method is missing a [propget] prefix in the IDL. The result is the
+ method is named nActions in generated C++ code instead of get_nActions.
+ */
+ HRESULT nActions
+ (
+ [out,retval] long* nActions
+ );
+
+ /** @brief Performs the specified Action on the object.
+ @param [in] actionIndex
+ 0 based index specifying the action to perform. If it lies outside
+ the valid range no action is performed.
+ @retval S_OK
+ @retval S_FALSE if action could not be performed
+ @retval E_INVALIDARG if bad [in] passed
+ @note If implementing support for media, refer to the predefined constants in the ::IA2Actions enum.
+ */
+ HRESULT doAction
+ (
+ [in] long actionIndex
+ );
+
+ /** @brief Returns a description of the specified action of the object.
+ @param [in] actionIndex
+ 0 based index specifying which action's description to return.
+ If it lies outside the valid range an empty string is returned.
+ @param [out] description
+ The returned value is a localized string of the specified action.
+ @retval S_OK
+ @retval S_FALSE if there is nothing to return, [out] value is NULL
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ [propget] HRESULT description
+ (
+ [in] long actionIndex,
+ [out, retval] BSTR *description
+ );
+
+ /** @brief Returns an array of BSTRs describing one or more key bindings, if
+ there are any, associated with the specified action.
+
+ The returned strings are the localized human readable key sequences to be
+ used to activate each action, e.g. "Ctrl+Shift+D". Since these key
+ sequences are to be used when the object has focus, they are like
+ mnemonics (access keys), and not like shortcut (accelerator) keys.
+
+ There is no need to implement this method for single action controls since
+ that would be redundant with the standard MSAA programming practice of
+ getting the mnemonic from get_accKeyboardShortcut.
+
+ An AT such as an On Screen Keyboard might not expose these bindings but
+ provide alternative means of activation.
+
+ Note: the client allocates and passes in an array of pointers. The server
+ allocates the BSTRs and passes back one or more pointers to these BSTRs into
+ the array of pointers allocated by the client. The client is responsible
+ for deallocating the BSTRs.
+
+ @param [in] actionIndex
+ 0 based index specifying which action's key bindings should be returned.
+ @param [in] nMaxBindings
+ This parameter is ignored. Refer to @ref _arrayConsideration
+ "Special Consideration when using Arrays" for more details.
+ @param [out] keyBindings
+ An array of BSTRs, allocated by the server, one for each key binding.
+ The client must free it with CoTaskMemFree.
+ @param [out] nBindings
+ The number of key bindings returned; the size of the returned array.
+ @retval S_OK
+ @retval S_FALSE if there are no key bindings, [out] values are NULL and 0 respectively
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ [propget] HRESULT keyBinding
+ (
+ [in] long actionIndex,
+ [in] long nMaxBindings,
+ [out, size_is(,nMaxBindings), length_is(,*nBindings)] BSTR **keyBindings,
+ [out, retval] long *nBindings
+ );
+
+ /** @brief Returns the non-localized name of specified action.
+ @param [in] actionIndex
+ 0 based index specifying which action's non-localized name should be returned.
+ @param [out] name
+ @retval S_OK
+ @retval S_FALSE if there is nothing to return, [out] value is NULL
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ [propget] HRESULT name
+ (
+ [in] long actionIndex,
+ [out, retval] BSTR *name
+ );
+
+ /** @brief Returns the localized name of specified action.
+ @param [in] actionIndex
+ 0 based index specifying which action's localized name should be returned.
+ @param [out] localizedName
+ @retval S_OK
+ @retval S_FALSE if there is nothing to return, [out] value is NULL
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ [propget] HRESULT localizedName
+ (
+ [in] long actionIndex,
+ [out, retval] BSTR *localizedName
+ );
+
+}
+/*************************************************************************
+ *
+ * File Name (AccessibleRole.idl)
+ *
+ * IAccessible2 IDL Specification
+ *
+ * Copyright (c) 2007, 2013 Linux Foundation
+ * Copyright (c) 2006 IBM Corporation
+ * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
+ * All rights reserved.
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * 3. Neither the name of the Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products
+ * derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This BSD License conforms to the Open Source Initiative "Simplified
+ * BSD License" as published at:
+ * http://www.opensource.org/licenses/bsd-license.php
+ *
+ * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
+ * mark may be used in accordance with the Linux Foundation Trademark
+ * Policy to indicate compliance with the IAccessible2 specification.
+ *
+ ************************************************************************/
+
+
+
+/** Collection of roles
+
+ This enumerator defines an extended set of accessible roles of objects implementing
+ the %IAccessible2 interface. These roles are in addition to the MSAA roles obtained
+ through the MSAA get_accRole method. Examples are 'footnote', 'heading', and
+ 'label'. You obtain an object's %IAccessible2 roles by calling IAccessible2::role.
+*/
+enum IA2Role {
+
+ /** Unknown role. The object contains some Accessible information, but its
+ role is not known.
+ */
+ IA2_ROLE_UNKNOWN = 0,
+
+ /** An object that can be drawn into and to manage events from the objects
+ drawn into it. Also refer to ::IA2_ROLE_FRAME,
+ ::IA2_ROLE_GLASS_PANE, and ::IA2_ROLE_LAYERED_PANE.
+ */
+ IA2_ROLE_CANVAS = 0x401,
+
+ /// A caption describing another object.
+ IA2_ROLE_CAPTION,
+
+ /// Used for check buttons that are menu items.
+ IA2_ROLE_CHECK_MENU_ITEM,
+
+ /// A specialized dialog that lets the user choose a color.
+ IA2_ROLE_COLOR_CHOOSER,
+
+ /// A date editor.
+ IA2_ROLE_DATE_EDITOR,
+
+ /** An iconified internal frame in an ::IA2_ROLE_DESKTOP_PANE.
+ Also refer to ::IA2_ROLE_INTERNAL_FRAME.
+ */
+ IA2_ROLE_DESKTOP_ICON,
+
+ /** A desktop pane. A pane that supports internal frames and iconified
+ versions of those internal frames. Also refer to ::IA2_ROLE_INTERNAL_FRAME.
+ */
+ IA2_ROLE_DESKTOP_PANE,
+
+ /** A directory pane. A pane that allows the user to navigate through
+ and select the contents of a directory. May be used by a file chooser.
+ Also refer to ::IA2_ROLE_FILE_CHOOSER.
+ */
+ IA2_ROLE_DIRECTORY_PANE,
+
+ /** An editable text object in a toolbar. <b>Deprecated.</b>
+ The edit bar role was meant for a text area in a tool bar. However, to detect
+ a text area in a tool bar the AT can query the parent.
+ */
+ IA2_ROLE_EDITBAR,
+
+ /// Embedded (OLE) object.
+ IA2_ROLE_EMBEDDED_OBJECT,
+
+ /// Text that is used as an endnote (footnote at the end of a chapter or section).
+ IA2_ROLE_ENDNOTE,
+
+ /** A file chooser. A specialized dialog that displays the files in the
+ directory and lets the user select a file, browse a different directory,
+ or specify a filename. May use the directory pane to show the contents of
+ a directory.
+ Also refer to ::IA2_ROLE_DIRECTORY_PANE.
+ */
+ IA2_ROLE_FILE_CHOOSER,
+
+ /** A font chooser. A font chooser is a component that lets the user pick
+ various attributes for fonts.
+ */
+ IA2_ROLE_FONT_CHOOSER,
+
+ /** Footer of a document page.
+ Also refer to ::IA2_ROLE_HEADER.
+ */
+ IA2_ROLE_FOOTER,
+
+ /// Text that is used as a footnote. Also refer to ::IA2_ROLE_ENDNOTE.
+ IA2_ROLE_FOOTNOTE,
+
+ /** A container of form controls. An example of the use of this role is to
+ represent an HTML FORM tag.
+ */
+ IA2_ROLE_FORM,
+
+ /** Frame role. A top level window with a title bar, border, menu bar, etc.
+ It is often used as the primary window for an application. Also refer to
+ ::IA2_ROLE_CANVAS and the MSAA roles of dialog and window.
+ */
+ IA2_ROLE_FRAME,
+
+ /** A glass pane. A pane that is guaranteed to be painted on top of all panes
+ beneath it. Also refer to ::IA2_ROLE_CANVAS, ::IA2_ROLE_INTERNAL_FRAME, and
+ ::IA2_ROLE_ROOT_PANE.
+ */
+ IA2_ROLE_GLASS_PANE,
+
+ /** Header of a document page.
+ Also refer to ::IA2_ROLE_FOOTER.
+ */
+ IA2_ROLE_HEADER,
+
+ /// Heading. Use the IAccessible2::attributes level attribute to determine the heading level.
+ IA2_ROLE_HEADING,
+
+ /// A small fixed size picture, typically used to decorate components.
+ IA2_ROLE_ICON,
+
+ /** An image map object. Usually a graphic with multiple hotspots, where
+ each hotspot can be activated resulting in the loading of another document
+ or section of a document.
+ */
+ IA2_ROLE_IMAGE_MAP,
+
+ /** An object which is used to allow input of characters not found on a keyboard,
+ such as the input of Chinese characters on a Western keyboard.
+ */
+ IA2_ROLE_INPUT_METHOD_WINDOW,
+
+ /** An internal frame. A frame-like object that is clipped by a desktop pane.
+ The desktop pane, internal frame, and desktop icon objects are often used to
+ create multiple document interfaces within an application.
+ Also refer to ::IA2_ROLE_DESKTOP_ICON, ::IA2_ROLE_DESKTOP_PANE, and ::IA2_ROLE_FRAME.
+ */
+ IA2_ROLE_INTERNAL_FRAME,
+
+ /// An object used to present an icon or short string in an interface.
+ IA2_ROLE_LABEL,
+
+ /** A layered pane. A specialized pane that allows its children to be drawn
+ in layers, providing a form of stacking order. This is usually the pane that
+ holds the menu bar as well as the pane that contains most of the visual
+ components in a window.
+ Also refer to ::IA2_ROLE_CANVAS, ::IA2_ROLE_GLASS_PANE, and ::IA2_ROLE_ROOT_PANE.
+ */
+ IA2_ROLE_LAYERED_PANE,
+
+ /** A section whose content is parenthetic or ancillary to the main content
+ of the resource.
+ */
+ IA2_ROLE_NOTE,
+
+ /** A specialized pane whose primary use is inside a dialog.
+ Also refer to MSAA's dialog role.
+ */
+ IA2_ROLE_OPTION_PANE,
+
+ /** An object representing a page of document content. It is used in documents
+ which are accessed by the user on a page by page basis.
+ */
+ IA2_ROLE_PAGE,
+
+ /// A paragraph of text.
+ IA2_ROLE_PARAGRAPH,
+
+ /** A radio button that is a menu item.
+ Also refer to MSAA's button and menu item roles.
+ */
+ IA2_ROLE_RADIO_MENU_ITEM,
+
+ /** An object which is redundant with another object in the accessible hierarchy.
+ ATs typically ignore objects with this role.
+ */
+ IA2_ROLE_REDUNDANT_OBJECT,
+
+ /** A root pane. A specialized pane that has a glass pane and a layered pane
+ as its children.
+ Also refer to ::IA2_ROLE_GLASS_PANE and ::IA2_ROLE_LAYERED_PANE
+ */
+ IA2_ROLE_ROOT_PANE,
+
+ /** A ruler such as those used in word processors.
+ */
+ IA2_ROLE_RULER,
+
+ /** A scroll pane. An object that allows a user to incrementally view a large
+ amount of information. Its children can include scroll bars and a viewport.
+ Also refer to ::IA2_ROLE_VIEW_PORT and MSAA's scroll bar role.
+ */
+ IA2_ROLE_SCROLL_PANE,
+
+ /** A container of document content. An example of the use of this role is to
+ represent an HTML DIV tag. A section may be used as a region. A region is a
+ group of elements that together form a perceivable unit. A region does not
+ necessarily follow the logical structure of the content, but follows the
+ perceivable structure of the page. A region may have an attribute in the set
+ of IAccessible2::attributes which indicates that it is "live". A live region
+ is content that is likely to change in response to a timed change, a user
+ event, or some other programmed logic or event.
+ */
+ IA2_ROLE_SECTION,
+
+ /// Object with graphical representation used to represent content on draw pages.
+ IA2_ROLE_SHAPE,
+
+ /** A split pane. A specialized panel that presents two other panels at the
+ same time. Between the two panels is a divider the user can manipulate to make
+ one panel larger and the other panel smaller.
+ */
+ IA2_ROLE_SPLIT_PANE,
+
+ /** An object that forms part of a menu system but which can be "undocked"
+ from or "torn off" the menu system to exist as a separate window.
+ */
+ IA2_ROLE_TEAR_OFF_MENU,
+
+ /// An object used as a terminal emulator.
+ IA2_ROLE_TERMINAL,
+
+ /// Collection of objects that constitute a logical text entity.
+ IA2_ROLE_TEXT_FRAME,
+
+ /** A toggle button. A specialized push button that can be checked or unchecked,
+ but does not provide a separate indicator for the current state.
+ Also refer to MSAA's roles of push button, check box, and radio button.
+ <BR><B>Note:</B> IA2_ROLE_TOGGLE_BUTTON should not be used. Instead, use MSAA's
+ ROLE_SYSTEM_PUSHBUTTON and STATE_SYSTEM_PRESSED.
+ */
+ IA2_ROLE_TOGGLE_BUTTON,
+
+ /** A viewport. An object usually used in a scroll pane. It represents the
+ portion of the entire data that the user can see. As the user manipulates
+ the scroll bars, the contents of the viewport can change.
+ Also refer to ::IA2_ROLE_SCROLL_PANE.
+ */
+ IA2_ROLE_VIEW_PORT,
+
+ /** An object containing content which is complementary to the main content of
+ a document, but remains meaningful when separated from the main content. There
+ are various types of content that would appropriately have this role. For example,
+ in the case where content is delivered via a web portal to a web browser, this may
+ include but not be limited to show times, current weather, related articles, or
+ stocks to watch. The complementary role indicates that contained content is relevant
+ to the main content. If the complementary content is completely separable main
+ content, it may be appropriate to use a more general role.
+ */
+ IA2_ROLE_COMPLEMENTARY_CONTENT
+
+};
+/*************************************************************************
+ *
+ * File Name (AccessibleStates.idl)
+ *
+ * IAccessible2 IDL Specification
+ *
+ * Copyright (c) 2007, 2010 Linux Foundation
+ * Copyright (c) 2006 IBM Corporation
+ * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
+ * All rights reserved.
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * 3. Neither the name of the Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products
+ * derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This BSD License conforms to the Open Source Initiative "Simplified
+ * BSD License" as published at:
+ * http://www.opensource.org/licenses/bsd-license.php
+ *
+ * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
+ * mark may be used in accordance with the Linux Foundation Trademark
+ * Policy to indicate compliance with the IAccessible2 specification.
+ *
+ ************************************************************************/
+
+
+
+typedef long AccessibleStates;
+
+/** %IAccessible2 specific state bit constants
+
+ This enum defines the state bits returned by IAccessible2::states. The
+ %IAccessible2 state bits are in addition to those returned by MSAA.
+*/
+enum IA2States {
+
+/** Indicates a window is currently the active window, or is an active subelement
+ within a container or table.
+
+ This state can be used to indicate the current active item in a container, even
+ if the container itself is not currently active. In other words this would indicate
+ the item that will get focus if you tab to the container.
+
+ This information is important for knowing what to report for trees and potentially
+ other containers in a virtual buffer.
+
+ Also, see ::IA2_STATE_MANAGES_DESCENDANTS for more information.
+*/
+IA2_STATE_ACTIVE = 0x1,
+
+/** Indicates that the object is armed.
+
+ Used to indicate that the control is "pressed" and will be invoked when the
+ actuator, e.g. a mouse button, is "released". An AT which either monitors the
+ mouse or synthesizes mouse events might need to know that, and possibly a talking
+ interface would even let the user know about it. It could also potentially be
+ useful to on screen keyboards or test tools since the information does indicate
+ something about the state of the interface, for example, code operating asynchronously
+ might need to wait for the armed state to change before doing something else.
+
+*/
+IA2_STATE_ARMED = 0x2,
+
+/** Indicates the user interface object corresponding to this object no longer exists. */
+IA2_STATE_DEFUNCT = 0x4,
+
+/** An object with this state has a caret and implements the IAccessibleText interface.
+
+ Such fields may be read-only, so STATE_SYSTEM_READONLY is valid in combination
+ with IA2_STATE_EDITABLE.
+
+*/
+IA2_STATE_EDITABLE = 0x8,
+
+/** Indicates the orientation of this object is horizontal. */
+IA2_STATE_HORIZONTAL = 0x10,
+
+/** Indicates this object is minimized and is represented only by an icon. */
+IA2_STATE_ICONIFIED = 0x20,
+
+/** Indicates an input validation failure. */
+IA2_STATE_INVALID_ENTRY = 0x40,
+
+/** Indicates that this object manages its children.
+
+ Note: Due to the fact that MSAA's WinEvents don't allow the active child index
+ to be passed on the IA2_EVENT_ACTIVE_DESCENDANT_CHANGED event, the manages
+ descendants scheme can't be used. Instead the active child object has to fire
+ MSAA's EVENT_OBJECT_FOCUS. In a future release a new event mechanism may be
+ added to provide for event specific data to be passed with the event. At that
+ time the IA2_EVENT_ACTIVE_DECENDENT_CHANGED event and
+ IA2_STATE_MANAGES_DESCENDANTS state would be useful.
+*/
+IA2_STATE_MANAGES_DESCENDANTS = 0x80,
+
+/** Indicates that an object is modal.
+
+ Modal objects have the behavior that something must be done with the object
+ before the user can interact with an object in a different window.
+*/
+IA2_STATE_MODAL = 0x100,
+
+/** Indicates this text object can contain multiple lines of text. */
+IA2_STATE_MULTI_LINE = 0x200,
+
+/** Indicates this object paints every pixel within its rectangular region. */
+IA2_STATE_OPAQUE = 0x400,
+
+/** Indicates that user interaction is required.
+
+ An example of when this state is used is when a field in a form must be filled
+ before a form can be processed.
+*/
+IA2_STATE_REQUIRED = 0x800,
+
+/** Indicates an object which supports text selection.
+
+ Note: This is different than MSAA STATE_SYSTEM_SELECTABLE.
+*/
+IA2_STATE_SELECTABLE_TEXT = 0x1000,
+
+/** Indicates that this text object can contain only a single line of text. */
+IA2_STATE_SINGLE_LINE = 0x2000,
+
+/** Indicates that the accessible object is stale.
+
+ This state is used when the accessible object no longer accurately
+ represents the state of the object which it is representing such as when an
+ object is transient or when an object has been or is in the process of being
+ destroyed or when the object's index in its parent has changed.
+*/
+IA2_STATE_STALE = 0x4000,
+
+/** Indicates that the object implements autocompletion.
+
+ This state indicates that a text control will respond to the input of
+ one ore more characters and cause a sub-item to become selected. The
+ selection may also result in events fired on the parent object.
+*/
+IA2_STATE_SUPPORTS_AUTOCOMPLETION = 0x8000,
+
+/** Indicates this object is transient.
+
+ An object has this state when its parent object has the state ::IA2_STATE_MANAGES_DESCENDANTS.
+ For example, a list item object may be managed by its parent list object and may only
+ exist as long as the object is actually rendered. Similarly a table cell's accessible
+ object may exist only while the cell has focus. However, from the perspective of an
+ assistive technology a transient object behaves like a non-transient object. As a
+ result it is likely that this state is not of use to an assistive technology, but it
+ is provided in case an assistive technology determines that knowledge of the transient
+ nature of the object is useful and also for harmony with the Linux accessibility API.
+
+ Also, see ::IA2_STATE_MANAGES_DESCENDANTS for more information.
+ */
+IA2_STATE_TRANSIENT = 0x10000,
+
+/** Indicates the orientation of this object is vertical. */
+IA2_STATE_VERTICAL = 0x20000,
+
+/** Indicates this object is checkable.
+
+ The standard checkable objects are check boxes, radio buttons, check box menu
+ items, radio menu items, and toggle buttons. Since assistive technology will
+ determine that these objects are checkable via the object's role the checkable
+ state is not required. However, this state is necessary in those cases where
+ an object has a role which is not one of the previously mentioned roles. An
+ example is a table cell which indicates whether or not an email has an attachment,
+ whether or not an mail is considered spam, and whether or not an email has been read.
+ */
+IA2_STATE_CHECKABLE = 0x40000,
+
+/** Indicates this object is pinned.
+
+ This state indicates that an object is fixed at a certain location. One example
+ is a browser tab that when pinned cannot be moved until unpinned. Another example
+ is a movable or floating object that when pinned remains in its pinned location
+ until being unpinned.
+ */
+IA2_STATE_PINNED = 0x80000
+
+};
+/*************************************************************************
+ *
+ * File Name (Accessible2.idl)
+ *
+ * IAccessible2 IDL Specification
+ *
+ * Copyright (c) 2007, 2013 Linux Foundation
+ * Copyright (c) 2006 IBM Corporation
+ * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
+ * All rights reserved.
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * 3. Neither the name of the Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products
+ * derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This BSD License conforms to the Open Source Initiative "Simplified
+ * BSD License" as published at:
+ * http://www.opensource.org/licenses/bsd-license.php
+ *
+ * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
+ * mark may be used in accordance with the Linux Foundation Trademark
+ * Policy to indicate compliance with the IAccessible2 specification.
+ *
+ ************************************************************************/
+
+/** @mainpage
+
+ @section _interfaces Interfaces
+ IAccessible2\n
+ IAccessible2_2\n
+ IAccessibleAction\n
+ IAccessibleApplication\n
+ IAccessibleComponent\n
+ IAccessibleDocument\n
+ IAccessibleEditableText\n
+ IAccessibleHypertext\n
+ IAccessibleHypertext2\n
+ IAccessibleHyperlink\n
+ IAccessibleImage\n
+ IAccessibleRelation\n
+ IAccessibleTable [Deprecated]\n
+ IAccessibleTable2\n
+ IAccessibleTableCell\n
+ IAccessibleText\n
+ IAccessibleText2\n
+ IAccessibleValue
+
+ @section _structs Structs
+ IA2Locale\n
+ IA2TableModelChange\n
+ IA2TextSegment
+
+ @section _enums Enums
+ ::IA2Actions values are predefined actions for use when implementing support for HTML5 media.\n
+ ::IA2CoordinateType values define the requested coordinate type (screen or parent window).\n
+ ::IA2EventID values identify events.\n
+ ::IA2Role values defines roles which are in addition to the existing MSAA roles.\n
+ ::IA2ScrollType values define where to place an object or substring on the screen.\n
+ ::IA2States values define states which are in addition to the existing MSAA states.\n
+ ::IA2TableModelChangeType values describe the kinds of changes made to a table (insert, delete, update).\n
+ ::IA2TextBoundaryType values define the requested text unit (character, word, sentence, line, paragraph).\n
+ ::IA2TextSpecialOffsets values define special offsets for use in the text interfaces.
+
+ @section _constants Constants
+ @ref grpRelations
+
+ @section _misc Miscellaneous
+ @ref _licensePage "BSD License"\n
+ @ref _generalInfo "General Information"\n
+
+ @page _licensePage BSD License
+ %IAccessible2 IDL Specification
+
+ Copyright (c) 2007, 2013 Linux Foundation\n
+ Copyright (c) 2006 IBM Corporation\n
+ Copyright (c) 2000, 2006 Sun Microsystems, Inc.\n
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions
+ are met:
+
+ 1. Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+
+ 2. Redistributions in binary form must reproduce the above
+ copyright notice, this list of conditions and the following
+ disclaimer in the documentation and/or other materials
+ provided with the distribution.
+
+ 3. Neither the name of the Linux Foundation nor the names of its
+ contributors may be used to endorse or promote products
+ derived from this software without specific prior written
+ permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+ This BSD License conforms to the Open Source Initiative "Simplified
+ BSD License" as published at:
+ http://www.opensource.org/licenses/bsd-license.php
+
+ %IAccessible2 is a trademark of the Linux Foundation. The %IAccessible2
+ mark may be used in accordance with the
+ <a href="http://www.linuxfoundation.org/collaborate/workgroups/accessibility/trademark-policy">
+ Linux Foundation Trademark Policy</a> to indicate compliance with the %IAccessible2 specification.
+
+ @page _generalInfo General Information
+ The following information is applicable to two or more interfaces.
+
+ @ref _errors\n
+ @ref _memory\n
+ &nbsp;&nbsp;@ref _arrayConsideration\n
+ @ref _indexes\n
+ @ref _enumBase\n
+ @ref _specialOffsets\n
+ @ref _dicoveringInterfaces\n
+ @ref _changingInterfaces\n
+ @ref _applicationInfo\n
+ @ref _childIDs\n
+ @ref _variants\n
+ @ref _iaaction-iahyperlink\n
+ @ref _trademark
+
+ @section _errors Error Handling
+ HRESULT values are defined by the Microsoft&reg; Win32&reg; API. For more information, refer to
+ <a href="http://msdn.microsoft.com/en-us/library/windows/desktop/aa378137%28v=vs.85%29.aspx">
+ Interpreting HRESULT Values</a> in MSDN&reg;.
+
+ Note that the S_FALSE return value is considered a non-error value and the
+ SUCCEEDED macro will return TRUE. S_FALSE is used when there is no failure
+ but there was nothing valid to return, e.g. in IAccessible2::attributes when
+ there are no attributes. When S_FALSE is returned [out] pointer types should
+ be NULL and [out] longs should generally be 0, but sometimes -1 is used such
+ as IAccessible2::indexInParent, IAccessibleText::caretOffset, and
+ IAccessibleHypertext::hyperlinkIndex.
+
+ Note that for BSTR [out] variables common COM practice is that the server does
+ the SysAllocString and the client does the SysFreeString. Also note that when
+ NULL is returned there is no need for the client to call SysFreeString. Please
+ refer to the documentation for each method for more details regarding error handling.
+
+ @section _memory Memory Management
+ The following memory management issues should be considered:
+ @li Although [out] BSTR variables are declared by the client, their space is
+ allocated by the server. They need to be freed with SysFreeString by the
+ client at end of life; the same is true when BSTRs are used in structs or
+ arrays which are passed to the server.
+ @li If there is no valid [out] BSTR to return, the server should return S_FALSE and
+ assign NULL to the output, e.g. *theOutBSTR = NULL;.
+ @li COM interfaces need to be referenced with AddRef when used and dereferenced
+ with Release at end of life.
+ @li Single [out] longs, HWNDs, booleans, and structs are declared by the caller
+ and passed by reference. The marshaller does all the memory management.
+
+ The following articles may be helpful for understanding memory management issues:
+ @li An article by Don Box in a
+ <a href="http://www.microsoft.com/msj/1196/activex1196.aspx">Q & A section</a>
+ of the November 1996 edition of the Microsoft Systems Journal.
+ @li A posting to a CodeGuru forum,
+ <a href="http://www.codeguru.com/forum/showthread.php?t=364511">Windows SDK
+ String: What are the rules for BSTR allocation and deallocation?</a>
+
+ @subsection _arrayConsideration Special Consideration when using Arrays
+ There are several methods which return arrays. In the case of IAccessible2::relations
+ and IAccessibleRelation::targets the client must allocate and free the arrays.
+
+ For the remaining methods which return arrays, the server must allocate the array
+ and the client must free the array when no longer needed. These methods are
+ IAccessible2::extendedStates, IAccessible2::localizedExtendedStates,
+ IAccessible2_2::relationTargetsOfType, IAccessibleAction::keyBinding,
+ IAccessibleHypertext2::hyperlinks, IAccessibleTable::selectedChildren,
+ IAccessibleTable::selectedColumns, IAccessibleTable::selectedRows,
+ IAccessibleTable2::selectedCells, IAccessibleTable2::selectedColumns,
+ IAccessibleTable2::selectedRows, IAccessibleTableCell::columnHeaderCells,
+ and IAccessibleTableCell::rowHeaderCells.
+ For those methods, the server must allocate both the top level array and any storage
+ associated with it, e.g. for BSTRs. The server must allocate the arrays with
+ CoTaskMemAlloc and any BSTRs with SysAllocString. The client must use CoTaskMemFree
+ to free the array and any BSTRs must be freed with SysFreeString.
+
+ Also, the IDL for IAccessible2::extendedStates, IAccessible2::localizedExtendedStates,
+ IAccessibleAction::keyBinding, IAccessibleTable::selectedChildren,
+ IAccessibleTable::selectedColumns, and IAccessibleTable::selectedRows includes an
+ extraneous [in] parameter for the caller to specify the max size of the array.
+ This parameter will be ignored by the COM server.
+
+ @section _indexes Zero and One Based Indexes
+ Unless otherwise specified all offsets and indexes are 0 based.
+
+ @section _enumBase Enum Base
+ Note that enums start at 0.
+
+ @section _specialOffsets Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods
+ IAccessibleText and IAccessibleEditableText can use one or more of the following
+ special offset values. They are defined in the ::IA2TextSpecialOffsets enum.
+ @li Using ::IA2_TEXT_OFFSET_LENGTH (-1) as an offset in any of the IAccessibleText or
+ IAccessibleEditableText methods is the same as specifying the length of the string.
+ @li Using ::IA2_TEXT_OFFSET_CARET (-2) as an offset for IAccessibleText::textBeforeOffset,
+ IAccessibleText::textAtOffset, and IAccessibleText::textAfterOffset indicates that the
+ text related to the physical location of the caret should be used. This is needed for
+ applications that consider the character offset of the end of one line (as reached by
+ pressing the End key) the same as the offset of the first character on the next line.
+ Since the same offset is associated with two different lines a special means is needed
+ to fetch text from the line where the caret is physically located.
+
+ @section _dicoveringInterfaces Discovery of Interfaces
+ In general AT (Assistive Technology) should try IAccessible2 interfaces, followed by using
+ the MSAA (Microsoft&reg; Active Accessibility&reg;) interfaces. (In cases where the an application
+ is known to have custom interfaces which provide information not supplied by IAccessible2
+ or MSAA, then those custom interfaces can be used.) The AT can then, by default, support
+ unknown IAccessible2/MSAA applications, without the application developers having to request
+ AT vendors for support on an individual application by application basis.
+
+ When you have a reference to an IAccessible and require a reference to an IAccessible2 use
+ QueryService as follows:
+ @code
+ // pAcc is a reference to the accessible object's IAccessible interface.
+ IServiceProvider *pService = NULL;
+ hr = pAcc->QueryInterface(IID_IServiceProvider, (void **)&pService);
+ if(SUCCEEDED(hr)) {
+ IAccessible2 *pIA2 = NULL;
+ hr = pService->QueryService(IID_IAccessible, IID_IAccessible2, (void**)&pIA2);
+ if (SUCCEEDED(hr) && pIA2) {
+ // The control supports IAccessible2.
+ // pIA2 is the reference to the accessible object's IAccessible2 interface.
+ }
+ }
+ @endcode
+
+ @section _changingInterfaces Changing between Accessible Interfaces
+ Note that developers must always implement MSAA's IAccessible and, if needed, some
+ of the interfaces in the set of IAccessible2 interfaces. Although the IAccessible2
+ IDL is coded such that IAccessible2 is a subclass of MSAA's IAccessible, none of
+ MSAA's IAccessible methods are redefined by IAccessible2.
+
+ QueryService must be used to switch from a reference to an MSAA IAccessible interface
+ to another interface. This has been
+ <a href="http://www.atia.org/files/public/Introducing_IAccessibleEx.doc">
+ documented</a> and the pertinent facts have been extracted below:
+
+ @par
+ Why use QueryService instead of just using QueryInterface to get IAccessibleEx
+ directly? The reason is that since MSAA 2.0, clients don't talk to a server's
+ IAccessible interface directly; instead they talk to an intermediate MSAA-provided
+ wrapper that calls through to the original IAccessible. This wrapper provides services
+ such as implementing IDispatch, supplying information from MSAA 2.0's Dynamic Annotation
+ service, and scaling locations when running on Windows Vista with DPI scaling enabled.
+ QueryService is the supported way to expose additional interfaces from an existing
+ IAccessible and was originally used by MSHTML to expose IHTMLElement objects corresponding
+ to IAccessibles. QueryService is often more convenient for servers to implement than
+ QueryInterface because it does not have the same requirements for preserving object
+ identity or symmetry/transitivity as QueryInterface, so QueryService allows servers to
+ easily implement the interface on the same object or a separate object. The latter is
+ often hard to do with QueryInterface unless the original object supports aggregation.
+
+ Two related references in MSDN&reg; are:
+ @li <a href="http://msdn.microsoft.com/en-us/library/ms696078(VS.85).aspx">
+ "Using QueryService to expose a native object model interface for an IAccessible object"</a>
+ @li <a href="http://msdn.microsoft.com/en-us/library/ms528415.aspx#acc_obj">
+ "Accessing the Internet Explorer Object Associated with an Accessible Object"</a>
+
+ Based on this information from Microsoft, QueryService must be used to switch back and forth
+ between a reference to an MSAA IAccessible interface and any of the IAccessible2 interfaces.
+
+ Regarding switching between any of the IAccessible2 interfaces, applications implementing
+ IAccessible2 should implement the IAccessible2 interfaces on a single object since ATs
+ will be using QueryInterface to switch between the IAccessilbe2 interfaces. Implementing
+ the IAccessible2 interfaces on separate objects would require the use of QueryService.
+ There is one exception, IAccessibleApplication can be implemented on a separate object so
+ its common code doesn't have to be included in each accessible object. ATs should use
+ QueryService to access IAccessibleApplication.
+
+ @section _applicationInfo Access to Information about the Application
+ Servers implementing IAccessible2 should provide access to the IAccessibleApplication
+ interface via QueryService from any object so that ATs can easily determine specific
+ information about the application such as its name or version.
+
+ @section _childIDs Child IDs
+ The IAccessible2 interfaces do not support child IDs, i.e. simple child elements.
+ Full accessible objects must be created for each object that supports IAccessible2.
+ Therefore MSAA's get_accChild should never return a child ID (other than CHILDID_SELF)
+ for an object that implements any of the IAccessible2 interfaces.
+
+ Microsoft's UI Automation specification has the same limitation and this was resolved
+ in the UI Automation Express specification by adding IAccessibleEx::GetObjectForChild
+ and IAccessibleEx::GetIAccessiblePair. These methods allow mapping back and forth
+ between an IAccessibleEx and an {IAccessible, Child ID} pair. A future version of
+ IAccessible2 may include similar methods to map back and forth between an IAccessible2
+ and an {IAccessible, Child ID} pair.
+
+ @section _variants VARIANTs
+ Some methods return a VARIANT. Implementers need to make sure that the return type is
+ specified, i.e. VT_I4, VT_IDISPATCH, etc. The methods that return VARIANTs are
+ IAccessibleHyperlink::anchor, IAccessibleHyperlink::anchorTarget, IAccessibleValue::currentValue,
+ IAccessibleValue::maximumValue, IAccessibleValue::minimumValue.
+
+ @section _iaaction-iahyperlink IAccessibleHyperlink as subclass of IAccessibleAction
+ In this version of the IDL, IAccessibleHyperlink is a subclass of IAccessibleAction.
+ However, there is no practical need for that inheritance and in some cases, such as
+ an image map of smart tags, it doesn't make sense because such an image map doesn't
+ have actionable objects; it's the secondary smart tags that are actionable. As a
+ result, implementations should not rely on the inheritance as it may be removed in
+ a later version of the IDL.
+
+ @section _trademark Trademark Attribution
+ The names of actual companies and products mentioned herein may be the trademarks of
+ their respective owners. In particular, Active Accessibility, Microsoft, MSDN, and Win32
+ are trademarks of the Microsoft group of companies in the U.S.A. and/or other countries.
+
+**/
+
+
+
+
+
+
+
+
+/** A structure defining the locale of an accessible object.
+
+IAccessible2::locale returns this struct.
+*/
+typedef struct IA2Locale {
+ BSTR language; ///< ISO 639-1 Alpha-2 two character language code
+ BSTR country; ///< ISO 3166-1 Alpha-2 two character country code
+ BSTR variant; ///< Application specific variant of the locale
+} IA2Locale;
+
+/** @brief This interface exposes the primary set of information about an
+ IAccessible2 enabled accessible object.
+
+ This interface must always be provided for objects that support some
+ portion of the collection of the %IAccessible2 interfaces.
+
+ Please refer to @ref _changingInterfaces "Changing between Accessible Interfaces"
+ for special considerations related to use of the MSAA IAccessible interface and
+ the set of %IAccessible2 interfaces.
+ */
+[object, uuid(E89F726E-C4F4-4c19-BB19-B647D7FA8478)]
+interface IAccessible2 : IAccessible
+{
+
+ /** @brief Returns the number of accessible relations for this object.
+ @param [out] nRelations
+ @retval S_OK
+ */
+ [propget] HRESULT nRelations
+ (
+ [out, retval] long *nRelations
+ );
+
+ /** @brief Returns one accessible relation for this object.
+ @param [in] relationIndex
+ 0 based
+ @param [out] relation
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ [propget] HRESULT relation
+ (
+ [in] long relationIndex,
+ [out, retval] IAccessibleRelation **relation
+ );
+
+ /** @brief Returns multiple accessible relations for this object.
+ @param [in] maxRelations
+ maximum size of the array allocated by the client
+ @param [out] relations
+ The array of accessible relation objects. Note that this array is to be
+ allocated by the client and freed when no longer needed. Refer to @ref
+ _arrayConsideration "Special Consideration when using Arrays" for more details.
+ @param [out] nRelations
+ actual number of relations in the returned array (not more than maxRelations)
+ @retval S_OK
+ @retval S_FALSE if there are no relations, nRelations is set to 0
+ @note As a performant alternative, client code should consider using IAccessible2_2::relationTargetsOfType.
+ */
+ [propget] HRESULT relations
+ (
+ [in] long maxRelations,
+ [out, size_is(maxRelations), length_is(*nRelations)]
+ IAccessibleRelation **relations,
+ [out, retval] long *nRelations
+ );
+
+ /** @brief Returns the role of an %IAccessible2 object.
+ @param [out] role
+ The role of an %IAccessible2 object.
+ @retval S_OK
+ @note
+ @li For convenience MSAA roles are also passed through this method so the
+ AT doesn't have to also fetch roles through MSAA's get_accRole.
+ @li %IAccessible2 roles should not be passed through MSAA's get_accRole.
+ @li For compatibility with non IAccessible2 enabled ATs, IAccessible2
+ applications should also add support to get_accRole to return the closest
+ MSAA role or ROLE_SYSTEM_CLIENT (the MSAA defined default role) if there
+ is not a good match.
+ @li This method is missing a [propget] prefix in the IDL. The result is the
+ method is named role in generated C++ code instead of get_role.
+ */
+ HRESULT role
+ (
+ [out, retval] long *role
+ );
+
+ /** @brief Makes an object visible on the screen.
+ @param [in] scrollType
+ Defines where the object should be placed on the screen.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ HRESULT scrollTo
+ (
+ [in] enum IA2ScrollType scrollType
+ );
+
+ /** @brief Moves the top left of an object to a specified location.
+
+ @param [in] coordinateType
+ Specifies whether the coordinates are relative to the screen or the parent object.
+ @param [in] x
+ Defines the x coordinate.
+ @param [in] y
+ Defines the y coordinate.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ HRESULT scrollToPoint
+ (
+ [in] enum IA2CoordinateType coordinateType,
+ [in] long x,
+ [in] long y
+ );
+
+ /** @brief Returns grouping information.
+
+ Used for tree items, list items, tab panel labels, radio buttons, etc.
+ Also used for collections of non-text objects.
+
+ @param [out] groupLevel
+ 1 based, 0 indicates that this value is not applicable
+ @param [out] similarItemsInGroup
+ 1 based, 0 indicates that this value is not applicable
+ @param [out] positionInGroup
+ 1 based, 0 indicates that this value is not applicable. This is an index
+ into the objects in the current group, not an index into all the objects
+ at the same group level.
+ @retval S_OK if at least one value is valid
+ @retval S_FALSE if no values are valid, [out] values are 0s
+ @note This method is meant to describe the nature of an object's containment
+ structure. It's exposed by trees, tree grids, nested lists, nested menus,
+ but not headings, which uses the level object attribute. It is also exposed
+ by radio buttons (with groupLevel == 0).
+ @note This is normally not implemented on a combo box to describe the nature
+ of its contents. Normally an AT will get that information from its child list
+ object. However, in some cases when non-edit combo boxes are not able to be structured
+ such that the list is a child of the combo box, this method is implemented on
+ the combo box itself. ATs can use this interface if a child list is not found.
+ */
+ [propget] HRESULT groupPosition
+ (
+ [out] long *groupLevel,
+ [out] long *similarItemsInGroup,
+ [out, retval] long *positionInGroup
+ );
+
+ /** @brief Returns the bit strip containing any IAccessible2 states.
+
+ The IAccessible2 states are in addition to the MSAA states and are defined in
+ the IA2States enum.
+
+ @param [out] states
+ @retval S_OK
+ */
+ [propget] HRESULT states
+ (
+ [out, retval] AccessibleStates *states
+ );
+
+ /** @brief Returns the extended role.
+
+ An extended role is a role which is dynamically generated by the application.
+ It is not predefined by the %IAccessible2 specification.
+
+ @param [out] extendedRole
+ @retval S_OK
+ @retval S_FALSE if there is nothing to return, [out] value is NULL
+ */
+ [propget] HRESULT extendedRole
+ (
+ [out, retval] BSTR *extendedRole
+ );
+
+ /** @brief Returns the localized extended role.
+ @param [out] localizedExtendedRole
+ @retval S_OK
+ @retval S_FALSE if there is nothing to return, [out] value is NULL
+ */
+ [propget] HRESULT localizedExtendedRole
+ (
+ [out, retval] BSTR *localizedExtendedRole
+ );
+
+ /** @brief Returns the number of extended states.
+ @param [out] nExtendedStates
+ @retval S_OK
+ */
+ [propget] HRESULT nExtendedStates
+ (
+ [out, retval] long *nExtendedStates
+ );
+
+ /** @brief Returns the extended states (array of strings).
+
+ An extended state is a state which is dynamically generated by the application.
+ It is not predefined by the %IAccessible2 specification.
+
+ @param [in] maxExtendedStates
+ This parameter is ignored. Refer to @ref _arrayConsideration
+ "Special Consideration when using Arrays" for more details.
+ @param [out] extendedStates
+ This array is allocated by the server. The client must free it with CoTaskMemFree.
+ @param [out] nExtendedStates
+ The number of extended states returned; the size of the returned array.
+ @retval S_OK
+ @retval S_FALSE if there are no states, [out] values are NULL and 0 respectively
+ */
+ [propget] HRESULT extendedStates
+ (
+ [in] long maxExtendedStates,
+ [out, size_is(,maxExtendedStates), length_is(,*nExtendedStates)] BSTR **extendedStates,
+ [out, retval] long *nExtendedStates
+ );
+
+ /** @brief Returns the localized extended states (array of strings).
+
+ @param [in] maxLocalizedExtendedStates
+ This parameter is ignored. Refer to @ref _arrayConsideration
+ "Special Consideration when using Arrays" for more details.
+ @param [out] localizedExtendedStates
+ This array is allocated by the server. The client must free it with CoTaskMemFree.
+ @param [out] nLocalizedExtendedStates
+ The number of localized extended states returned; the size of the returned array.
+ @retval S_OK
+ @retval S_FALSE if there are no states, [out] values are NULL and 0 respectively
+ */
+ [propget] HRESULT localizedExtendedStates
+ (
+ [in] long maxLocalizedExtendedStates,
+ [out, size_is(,maxLocalizedExtendedStates), length_is(,*nLocalizedExtendedStates)] BSTR **localizedExtendedStates,
+ [out, retval] long *nLocalizedExtendedStates
+ );
+
+ /** @brief Returns the unique ID.
+
+ The uniqueID is an identifier for this object, is unique within the
+ current window, and remains the same for the lifetime of the accessible
+ object.
+
+ The uniqueID is not related to:
+ - the MSAA objectID which is used by the server to disambiguate between
+ IAccessibles per HWND or
+ - the MSAA childID which is used to disambiguate between children being
+ managed by an IAccessible.
+
+ This value is provided so the AT can have access to a unique runtime persistent
+ identifier even when not handling an event for the object.
+
+ An example of when this value is useful is if the AT wants to build a cache.
+ The AT could cache the uniqueIDs in addition to other data being cached.
+ When an event is fired the AT could map the uniqueID to its internal model.
+ Thus, if there's a REORDER/SHOW/HIDE event the AT knows which part of the
+ internal structure has been invalidated and can refetch just that part.
+
+ This value can also be used by an AT to determine when the current control
+ has changed. If the role is the same for two controls that are adjacent in
+ the tab order, this can be used to detect the new control.
+
+ Another use of this value by an AT is to identify when a grouping object has
+ changed, e.g. when moving from a radio button in one group to a radio button in a
+ different group.
+
+ One means of implementing this would be to create a factory with a 32 bit number
+ generator and a reuse pool. The number generator would emit numbers starting
+ at 1. Each time an object's life cycle ended, its number would be saved into a
+ reuse pool. The number generator would be used whenever the reuse pool was empty.
+
+ Another way to create a unique ID is to generate it from a pointer value, e.g. an
+ object's address. That would be unique because no two active objects can use the
+ same allocated memory space.
+
+ @param [out] uniqueID
+ @retval S_OK
+ */
+ [propget] HRESULT uniqueID
+ (
+ [out, retval] long *uniqueID
+ );
+
+ /** @brief Returns the window handle for the parent window which contains this object.
+
+ This is the same window handle which will be passed for any events that occur on the
+ object, but is cached in the accessible object for use when it would be helpful to
+ access the window handle in cases where an event isn't fired on this object.
+
+ A use case is when a screen reader is grabbing an entire web page on a page load.
+ Without the availability of windowHandle, the AT would have to get the window handle
+ by using WindowFromAccessibleObject on each IAccessible, which is slow because it's
+ implemented by oleacc.dll as a loop which crawls up the ancestor chain and looks for
+ a ROLE_WINDOW object, mapping that back to a window handle.
+
+ @param [out] windowHandle
+ @retval S_OK
+ */
+ [propget] HRESULT windowHandle
+ (
+ [out, retval] HWND *windowHandle
+ );
+
+ /** @brief Returns the index of this object in its parent object.
+ @param [out] indexInParent
+ 0 based; -1 indicates there is no parent; the upper bound is the value
+ returned by the parent's IAccessible::get_accChildCount.
+ @retval S_OK
+ @retval S_FALSE if no parent, [out] value is -1
+ */
+ [propget] HRESULT indexInParent
+ (
+ [out, retval] long *indexInParent
+ );
+
+ /** @brief Returns the IA2Locale of the accessible object.
+ @param [out] locale
+ @retval S_OK
+ */
+ [propget] HRESULT locale
+ (
+ [out, retval] IA2Locale *locale
+ );
+
+ /** @brief Returns the attributes specific to this object, such as a cell's formula.
+ @param [out] attributes
+ @retval S_OK
+ @retval S_FALSE returned if there is nothing to return, [out] value is NULL
+ */
+ [propget] HRESULT attributes
+ (
+ [out, retval] BSTR *attributes
+ );
+
+}
+
+/*************************************************************************
+ *
+ * File Name (Accessible2_2.idl)
+ *
+ * IAccessible2 IDL Specification
+ *
+ * Copyright (c) 2007, 2013 Linux Foundation
+ * Copyright (c) 2006 IBM Corporation
+ * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
+ * All rights reserved.
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * 3. Neither the name of the Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products
+ * derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This BSD License conforms to the Open Source Initiative "Simplified
+ * BSD License" as published at:
+ * http://www.opensource.org/licenses/bsd-license.php
+ *
+ * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
+ * mark may be used in accordance with the Linux Foundation Trademark
+ * Policy to indicate compliance with the IAccessible2 specification.
+ *
+ ************************************************************************/
+
+
+
+
+
+
+/** @brief This interface exposes the primary set of information about an
+ IAccessible2 enabled accessible object.
+
+ This interface must always be provided for objects that support some
+ portion of the collection of the %IAccessible2 interfaces.
+
+ Please refer to @ref _changingInterfaces "Changing between Accessible Interfaces"
+ for special considerations related to use of the MSAA IAccessible interface and
+ the set of %IAccessible2 interfaces.
+ */
+[object, uuid(6C9430E9-299D-4E6F-BD01-A82A1E88D3FF)]
+interface IAccessible2_2 : IAccessible2
+{
+ /** @brief Returns the attribute value of a specified attribute specific to this object.
+ @param [in] name
+ @param [out] attribute
+ @retval S_OK
+ @retval S_FALSE returned if there is nothing to return, [out] value is NULL.
+ @retval E_INVALIDARG if bad [in] passed.
+ @note The output value is a VARIANT. Typically it will be a VT_BSTR, but there
+ are some cases where it will be a VT_I4 or VT_BOOL. Refer to the <a href=
+ "http://www.linuxfoundation.org/collaborate/workgroups/accessibility/iaccessible2/objectattributesIAccessible2">
+ Object Attributes specification</a> for more information.
+ */
+ [propget] HRESULT attribute
+ (
+ [in] BSTR name,
+ [out, retval] VARIANT *attribute
+ );
+
+ /** @brief Returns the deepest hypertext accessible in the subtree of this object, and the caret offset within it.
+ @param [out] accessible
+ @param [out] caretOffset
+ @retval S_OK
+ @retval S_FALSE returned if there is no caret in any of the objects in the subtree, [out] accessible is NULL and [out] caretOffset is -1.
+ */
+ [propget] HRESULT accessibleWithCaret
+ (
+ [out] IUnknown **accessible,
+ [out, retval] long *caretOffset
+ );
+
+ /** @brief Returns relation targets for a specified target type.
+ @param [in] type
+ The requested @ref grpRelations "relation type".
+ @param [in] maxTargets
+ The number of targets requested. 0 indicates that all targets should be returned.
+ @param [out] targets
+ This array is allocated by the server. The client must free it with CoTaskMemFree.
+ @param [out] nTargets
+ The number of targets returned; the size of the returned array.
+ @retval S_OK
+ @retval S_FALSE if there are no targets, [out] values are NULL and 0 respectively.
+ @retval E_INVALIDARG if bad [in] passed.
+ */
+ [propget] HRESULT relationTargetsOfType
+ (
+ [in] BSTR type,
+ [in] long maxTargets,
+ [out, size_is(,*nTargets)] IUnknown ***targets,
+ [out, retval] long *nTargets
+ );
+
+}
+
+/*************************************************************************
+ *
+ * File Name (AccessibleComponent.idl)
+ *
+ * IAccessible2 IDL Specification
+ *
+ * Copyright (c) 2007, 2010 Linux Foundation
+ * Copyright (c) 2006 IBM Corporation
+ * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
+ * All rights reserved.
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * 3. Neither the name of the Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products
+ * derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This BSD License conforms to the Open Source Initiative "Simplified
+ * BSD License" as published at:
+ * http://www.opensource.org/licenses/bsd-license.php
+ *
+ * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
+ * mark may be used in accordance with the Linux Foundation Trademark
+ * Policy to indicate compliance with the IAccessible2 specification.
+ *
+ ************************************************************************/
+
+
+
+
+
+/** A value specifying a color in ARGB format, where each 8 bit color component
+specifies alpha, red, green, and blue respectively. The alpha value is optional.
+*/
+typedef long IA2Color;
+
+/** @brief This interface is implemented by any object that can be rendered
+ on the screen.
+
+ This interface provides the standard mechanism for an assistive technology
+ to retrieve information concerning the graphical representation of an object.
+ Coordinates used by the functions of this interface are specified in
+ different coordinate systems. Their scale is the same and is equal to
+ that of the screen coordinate system. In other words all coordinates
+ are measured in pixels. They differ in their respective origin:
+ <ul>
+ <li>The screen coordinate system has its origin in the upper left
+ corner of the current screen.</li>
+ <li>The origin of the parent coordinate system is the upper left corner
+ of the parent's bounding box. With no parent the screen coordinate
+ system is used instead.</li>
+ </ul>
+*/
+[object, uuid(1546D4B0-4C98-4bda-89AE-9A64748BDDE4)]
+interface IAccessibleComponent : IUnknown
+{
+
+ /** @brief Returns the location of the upper left corner of the object's
+ bounding box relative to the immediate parent object.
+
+ The coordinates of the bounding box are given relative to the parent's
+ coordinate system. The coordinates of the returned position are relative
+ to this object's parent or relative to the screen on which this object
+ is rendered if it has no parent. If the object is not on any screen
+ the returned position is (0,0).
+
+ @param [out] x
+ @param [out] y
+ @retval S_OK
+ */
+ [propget] HRESULT locationInParent
+ (
+ [out] long *x,
+ [out, retval] long *y
+ );
+
+ /** @brief Returns the foreground color of this object.
+ @param [out] foreground
+ The returned color is the foreground color of this object or, if
+ that is not supported, the default foreground color.
+ @retval S_OK
+ */
+ [propget] HRESULT foreground
+ (
+ [out, retval] IA2Color *foreground
+ );
+
+ /** @brief Returns the background color of this object.
+ @param [out] background
+ The returned color is the background color of this object or, if
+ that is not supported, the default background color.
+ @retval S_OK
+ */
+ [propget] HRESULT background
+ (
+ [out, retval] IA2Color *background
+ );
+}
+/*************************************************************************
+ *
+ * File Name (AccessibleValue.idl)
+ *
+ * IAccessible2 IDL Specification
+ *
+ * Copyright (c) 2007, 2010 Linux Foundation
+ * Copyright (c) 2006 IBM Corporation
+ * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
+ * All rights reserved.
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * 3. Neither the name of the Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products
+ * derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This BSD License conforms to the Open Source Initiative "Simplified
+ * BSD License" as published at:
+ * http://www.opensource.org/licenses/bsd-license.php
+ *
+ * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
+ * mark may be used in accordance with the Linux Foundation Trademark
+ * Policy to indicate compliance with the IAccessible2 specification.
+ *
+ ************************************************************************/
+
+
+
+
+
+/** @brief This interface gives access to a single numerical value.
+
+ The %IAccessibleValue interface represents a single numerical value and should
+ be implemented by any class that supports numerical value like progress bars
+ and spin boxes. This interface lets you access the value and its upper and
+ lower bounds.
+*/
+[object, uuid(35855B5B-C566-4fd0-A7B1-E65465600394)]
+interface IAccessibleValue : IUnknown
+{
+
+ /** @brief Returns the value of this object as a number.
+
+ The exact return type is implementation dependent. Typical types are long and
+ double.
+ @param [out] currentValue
+ Returns the current value represented by this object. See the section about
+ @ref _variants "VARIANTs" for additional information.
+ @retval S_OK
+ @retval S_FALSE if there is nothing to return, [out] value is a VARIANT with vt = VT_EMPTY
+ */
+ [propget] HRESULT currentValue
+ (
+ [out, retval] VARIANT *currentValue
+ );
+
+ /** @brief Sets the value of this object to the given number.
+
+ The argument is clipped to the valid interval whose upper and lower
+ bounds are returned by the methods IAccessibleValue::maximumValue and
+ IAccessibleValue::minimumValue, i.e. if it is lower than the minimum
+ value the new value will be the minimum and if it is greater than the
+ maximum then the new value will be the maximum.
+
+ @param [in] value
+ The new value represented by this object. The set of admissible types for
+ this argument is implementation dependent.
+ @retval S_OK
+ */
+ HRESULT setCurrentValue
+ (
+ [in] VARIANT value
+ );
+
+ /** @brief Returns the maximal value that can be represented by this object.
+
+ The type of the returned value is implementation dependent. It does not have
+ to be the same type as that returned by method IAccessibleValue::currentValue.
+
+ @param [out] maximumValue
+ Returns the maximal value in an implementation dependent type. If this object
+ has no upper bound then an empty object is returned. See the section about
+ @ref _variants "VARIANTs" for additional information.
+ @retval S_OK
+ @retval S_FALSE if there is nothing to return, [out] value is a VARIANT with vt = VT_EMPTY
+ */
+ [propget] HRESULT maximumValue
+ (
+ [out, retval] VARIANT *maximumValue
+ );
+
+ /** @brief Returns the minimal value that can be represented by this object.
+
+ The type of the returned value is implementation dependent. It does not have
+ to be the same type as that returned by method IAccessibleValue::currentValue.
+
+ @param [out] minimumValue
+ Returns the minimal value in an implementation dependent type. If this object
+ has no lower bound then an empty object is returned. See the section about
+ @ref _variants "VARIANTs" for additional information.
+ @retval S_OK
+ @retval S_FALSE if there is nothing to return, [out] value is a VARIANT with vt = VT_EMPTY
+ */
+ [propget] HRESULT minimumValue
+ (
+ [out, retval] VARIANT *minimumValue
+ );
+
+};
+/*************************************************************************
+ *
+ * File Name (AccessibleText.idl)
+ *
+ * IAccessible2 IDL Specification
+ *
+ * Copyright (c) 2007, 2013 Linux Foundation
+ * Copyright (c) 2006 IBM Corporation
+ * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
+ * All rights reserved.
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * 3. Neither the name of the Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products
+ * derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This BSD License conforms to the Open Source Initiative "Simplified
+ * BSD License" as published at:
+ * http://www.opensource.org/licenses/bsd-license.php
+ *
+ * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
+ * mark may be used in accordance with the Linux Foundation Trademark
+ * Policy to indicate compliance with the IAccessible2 specification.
+ *
+ ************************************************************************/
+
+
+
+
+
+
+/** A structure containing a substring and the start and end offsets in the enclosing string.
+
+ IAccessibleText::newText and IAccessibleText::oldText return this struct.
+*/
+typedef struct IA2TextSegment {
+ BSTR text; ///< A copy of a segment of text taken from an enclosing paragraph.
+ long start; ///< Index of the first character of the segment in the enclosing text.
+ long end; ///< Index of the character following the last character of the segment in the enclosing text.
+} IA2TextSegment;
+
+/** This enum defines values which specify a text boundary type.
+
+ IA2_TEXT_BOUNDARY_SENTENCE is optional. When a method doesn't implement this
+ method it must return S_FALSE. Typically this feature would not be implemented
+ by an application. However, if the application developer was not satisfied with
+ how screen readers have handled the reading of sentences this boundary type
+ could be implemented and screen readers could use the application's version of a
+ sentence rather than the screen reader's.
+
+ The rest of the boundary types must be supported.
+
+ This enum is used in IAccessibleText::textBeforeOffset, IAccessibleText::textAtOffset,
+ and IAccessibleText::textAfterOffset.
+*/
+
+enum IA2TextBoundaryType {
+ IA2_TEXT_BOUNDARY_CHAR, /**< Typically, a single character is returned. In some cases more than
+ one character is returned, for example, when a document contains field
+ data such as a field containing a date, time, or footnote reference.
+ In this case the caret can move over several characters in one movement
+ of the caret. Note that after the caret moves, the caret offset changes
+ by the number of characters in the field, e.g. by 8 characters in the
+ following date: 03/26/07. */
+ IA2_TEXT_BOUNDARY_WORD, /**< The range provided matches the range observed when the application
+ processes the Ctrl + left arrow and Ctrl + right arrow key sequences.
+ Typically this is from the start of one word to the start of the next, but
+ various applications are inconsistent in the handling of the end of a line. */
+ IA2_TEXT_BOUNDARY_SENTENCE, ///< Range is from start of one sentence to the start of another sentence.
+ IA2_TEXT_BOUNDARY_PARAGRAPH, ///< Range is from start of one paragraph to the start of another paragraph.
+ IA2_TEXT_BOUNDARY_LINE, /**< Range is from start of one line to the start of another line. This
+ often means that an end-of-line character will appear at the end of the
+ range. However in the case of some applications an end-of-line character
+ indicates the end of a paragraph and the lines composing the paragraph,
+ other than the last line, do not contain an end of line character. */
+ IA2_TEXT_BOUNDARY_ALL ///< Using this value will cause all text to be returned.
+};
+
+/** @brief This interface gives read-only access to text.
+
+ The %IAccessibleText interface should be implemented by all components
+ that present textual information on the display like buttons,
+ text entry fields, or text portions of the document window. The interface
+ provides access to the text's content, attributes, and spatial location.
+ However, text can not be modified with this interface. That is the task
+ of the IAccessibleEditableText interface.
+
+ The text length, i.e. the number of characters in the text, is
+ returned by IAccessibleText::nCharacters. All methods that operate
+ on particular characters (e.g. IAccessibleText::textAtOffset) use character
+ indices from 0 to length-1. All methods that operate on character positions
+ (e.g. IAccessibleText::text) use indices from 0 to length.
+
+ Please note that accessible text does not necessarily support selection.
+ In this case it should behave as if there where no selection. An empty
+ selection is used for example to express the current cursor position.
+
+ Refer to @ref _specialOffsets
+ "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
+ for information about special offsets that can be used in %IAccessibleText methods.
+
+ E_FAIL is returned in the following cases
+ @li endOffset < startOffset
+ @li endoffset > length
+*/
+[object, uuid(24FD2FFB-3AAD-4a08-8335-A3AD89C0FB4B)]
+interface IAccessibleText : IUnknown
+{
+
+ /** @brief Adds a text selection
+ @param [in] startOffset
+ Starting offset ( 0 based).
+ @param [in] endOffset
+ Offset of first character after new selection (0 based).
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed
+ @note Refer to @ref _specialOffsets
+ "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
+ for information about special offsets that can be used in %IAccessibleText methods.
+ */
+ HRESULT addSelection
+ (
+ [in] long startOffset,
+ [in] long endOffset
+ );
+
+ /** @brief Returns text attributes.
+ @param [in] offset
+ Text offset (0 based). Refer to @ref _specialOffsets
+ "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
+ for information about special offsets that can be used in %IAccessibleText methods.
+ @param [out] startOffset
+ The starting offset of the character range over which all text attributes match
+ those of offset. (0 based)
+ @param [out] endOffset
+ The offset of the first character past the character range over which all text
+ attributes match those of offset. (0 based)
+ @param [out] textAttributes
+ A string of attributes describing the text. The attributes are described in the
+ <a href="http://www.linuxfoundation.org/en/Accessibility/IAccessible2/TextAttributes">
+ text attributes specification</a> on the %IAccessible2 web site.
+ @retval S_OK
+ @retval S_FALSE if there is nothing to return, [out] values are 0s and NULL respectively
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ [propget] HRESULT attributes
+ (
+ [in] long offset,
+ [out] long *startOffset,
+ [out] long *endOffset,
+ [out, retval] BSTR *textAttributes
+ );
+
+ /** @brief Returns the position of the caret.
+
+ Returns the 0-based offset of the caret within the text. If the text is
+ implemented as a tree of text objects with embed characters in higher levels
+ representing substrings of child text objects and the caret is in one of the
+ child text objects, then the offset in the higher level text object would be
+ at the embed character representing child text object that contains the caret.
+
+ For example, if the string "one two three" is implemented as a two text objects,
+ with a top level text object containing an embed character "one ? three" and a
+ child text object containing "two" and if the caret is in the descendant object
+ just before the 'o' in "two", then:
+ <ul>
+ <li>the caretOffset for the "one ? three" object would be 4, matching the embed character</li>
+ <li>the caretOffset for "two" would be 2, matching the "o"</li>
+ </ul>
+ The caret position/offset is that of the character logically following it, e.g.
+ to the right of it in a left to right language, or to the left of it in a right
+ to left language.
+ @param [out] offset
+ The returned offset is relative to the text represented by this object.
+ @retval S_OK
+ @retval S_FALSE if the caret is not currently active on this object, i.e. the
+ caret is located on some other object. The returned offset value will be -1.
+ @note S_FALSE (and an offset of -1) will not be returned if the caret is somewhere
+ in the text object or one of its descendants.
+ */
+ [propget] HRESULT caretOffset
+ (
+ [out, retval] long *offset
+ );
+
+
+ /** @brief Returns the bounding box of the specified position.
+
+ The virtual character after the last character of the represented
+ text, i.e. the one at position length is a special case. It represents the
+ current input position and will therefore typically be queried by AT more
+ often than other positions. Because it does not represent an existing character
+ its bounding box is defined in relation to preceding characters. It should be
+ roughly equivalent to the bounding box of some character when inserted at the
+ end of the text. Its height typically being the maximal height of all the
+ characters in the text or the height of the preceding character, its width being
+ at least one pixel so that the bounding box is not degenerate.
+
+ Note that the index 'length' is not always valid. Whether it is or not is
+ implementation dependent. It typically is when text is editable or otherwise
+ when on the screen the caret can be placed behind the text. You can be sure
+ that the index is valid after you have received a ::IA2_EVENT_TEXT_CARET_MOVED
+ event for this index.
+ @param [in] offset
+ Index of the character for which to return its bounding box. The valid range
+ is 0..length. Refer to @ref _specialOffsets
+ "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
+ for information about special offsets that can be used in %IAccessibleText methods.
+ @param [in] coordType
+ Specifies if the coordinates are relative to the screen or to the parent window.
+ @param [out] x
+ X coordinate of the top left corner of the bounding box of the referenced character.
+ @param [out] y
+ Y coordinate of the top left corner of the bounding box of the referenced character.
+ @param [out] width
+ Width of the bounding box of the referenced character.
+ @param [out] height
+ Height of the bounding box of the referenced character.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ [propget] HRESULT characterExtents
+ (
+ [in] long offset,
+ [in] enum IA2CoordinateType coordType,
+ [out] long *x,
+ [out] long *y,
+ [out] long *width,
+ [out, retval] long *height
+ );
+
+
+ /** @brief Returns the number of active non-contiguous selections
+ @param [out] nSelections
+ @retval S_OK
+ */
+ [propget] HRESULT nSelections
+ (
+ [out, retval] long *nSelections
+ );
+
+ /** @brief Returns the text position for the specified screen position.
+
+ Given a point return the zero-based index of the character under that
+ point. The same functionality could be achieved by using the bounding
+ boxes for each character as returned by IAccessibleText::characterExtents.
+ The method IAccessibleText::offsetAtPoint, however, can be implemented
+ more efficiently.
+
+ @param [in] x
+ The position's x value for which to look up the index of the character that
+ is rendered on to the display at that point.
+ @param [in] y
+ The position's y value for which to look up the index of the character that
+ is rendered on to the display at that point.
+ @param [in] coordType
+ Screen coordinates or window coordinates.
+ @param [out] offset
+ Index of the character under the given point or -1 if the point
+ is invalid or there is no character under the point.
+ @retval S_OK
+ @retval S_FALSE if nothing to return, [out] value is -1
+
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ [propget] HRESULT offsetAtPoint
+ (
+ [in] long x,
+ [in] long y,
+ [in] enum IA2CoordinateType coordType,
+ [out, retval] long *offset
+ );
+
+ /** @brief Returns the character offsets of Nth active text selection
+
+ Returns the 0-based starting and ending offsets of the Nth selection. If the
+ text is implemented as a tree of text objects with embed characters in higher
+ levels representing substrings of child text objects, consider the following.
+ If the starting selection offset is in one of the child text objects, then the
+ starting offset in the higher level text object would be at the embed character
+ representing the child text object that contains the starting selection offset.
+ If the ending selection offset is in one of the child text objects, then the
+ ending offset in the higher level text object would be just after the embed
+ character representing the child text object that contains the ending selection
+ offset.
+
+ For example, if the string "one two three" is implemented as a two text objects,
+ with a top level text object containing an embed character "one ? three" and a
+ child text object containing "two" and if the selection is the string "two" then:
+ <ul>
+ <li>the startOffset for the "one ? three" object would be 4, matching the embed character and the endOffset would be 5.</li>
+ <li>the startOffset for the "two" object would be 0, and the endOffset would be 3</li>
+ </ul>
+ Selection offsets are that of the character logically following it, e.g.
+ to the right of it in a left to right language or to the left of it in a right to left language.
+ @param [in] selectionIndex
+ Index of selection (0 based).
+ @param [out] startOffset
+ 0 based offset of first selected character
+ @param [out] endOffset
+ 0 based offset of one past the last selected character.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ [propget] HRESULT selection
+ (
+ [in] long selectionIndex,
+ [out] long *startOffset,
+ [out, retval] long *endOffset
+ );
+
+ /** @brief Returns the substring between the two given indices.
+
+ The substring starts with the character at startOffset (inclusive) and up to
+ the character at endOffset (exclusive), if startOffset is less or equal
+ endOffset. If endOffset is lower than startOffset, the result is the same
+ as a call with the two arguments being exchanged.
+
+ The whole text can be requested by passing the indices zero and
+ IAccessibleText::nCharacters. If both indices have the same value, an empty
+ string is returned.
+ @param [in] startOffset
+ Index of the first character to include in the returned string. The valid range
+ is 0..length.
+ @param [in] endOffset
+ Index of the last character to exclude in the returned string. The valid range
+ is 0..length.
+ @param [out] text
+ Returns the substring starting with the character at startOffset (inclusive)
+ and up to the character at endOffset (exclusive), if startOffset is less than
+ or equal to endOffset.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed
+ @note
+ @li The returned string may be longer than endOffset-startOffset bytes if text
+ contains multi-byte characters.
+ @li Refer to @ref _specialOffsets
+ "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
+ for information about special offsets that can be used in %IAccessibleText methods.
+ */
+ [propget] HRESULT text
+ (
+ [in] long startOffset,
+ [in] long endOffset,
+ [out, retval] BSTR *text
+ );
+
+ /** @brief Returns a text portion before the given position.
+
+ Returns the substring of the specified text type that is located before the
+ given character and does not include it. The result of this method should be
+ same as a result for IAccessibleText::textAtOffset with a suitably decreased
+ index value.
+
+ For example, if text type is ::IA2_TEXT_BOUNDARY_WORD, then the complete
+ word that is closest to and located before offset is returned.
+
+ If the index is valid, but no text is found, S_FALSE is returned along with out
+ values of 0, 0, and a NULL pointer. This would happen for boundary types other
+ than character when the text consists entirely of whitespace.
+
+ @param [in] offset
+ Index of the character for which to return the text part before it. The index
+ character will not be part of the returned string. The valid range is 0..length.
+ Refer to @ref _specialOffsets
+ "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
+ for information about special offsets that can be used in %IAccessibleText methods.
+ @param [in] boundaryType
+ The type of the text portion to return. See ::IA2TextBoundaryType for the
+ complete list.
+ @param [out] startOffset
+ 0 based offset of first character.
+ @param [out] endOffset
+ 0 based offset of one past the last character.
+ @param [out] text
+ Returns the requested text portion. This portion may be empty or invalid when
+ no appropriate text portion is found or text type is invalid.
+ @retval S_OK
+ @retval S_FALSE if the requested boundary type is not implemented, such as
+ ::IA2_TEXT_BOUNDARY_SENTENCE, or if there is nothing to return;
+ [out] values are 0s and NULL respectively
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ [propget] HRESULT textBeforeOffset
+ (
+ [in] long offset,
+ [in] enum IA2TextBoundaryType boundaryType,
+ [out] long *startOffset,
+ [out] long *endOffset,
+ [out, retval] BSTR *text
+ );
+
+ /** @brief Returns a text portion after the given position.
+
+ Returns the substring of the specified text type that is located after the
+ given character and does not include it. The result of this method should be
+ same as a result for IAccessibleText::textAtOffset with a suitably increased
+ index value.
+
+ For example, if text type is ::IA2_TEXT_BOUNDARY_WORD, then the complete
+ word that is closest to and located after offset is returned.
+
+ If the index is valid, but no text is found, S_FALSE is returned along with out
+ values of 0, 0, and a NULL pointer. This would happen for boundary types other
+ than character when the text consists entirely of whitespace.
+
+ @param [in] offset
+ Index of the character for which to return the text part after it. The index
+ character will not be part of the returned string. The valid range is 0..length.
+ Refer to @ref _specialOffsets
+ "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
+ for information about special offsets that can be used in %IAccessibleText methods.
+ @param [in] boundaryType
+ The type of the text portion to return. See ::IA2TextBoundaryType for the complete
+ list.
+ @param [out] startOffset
+ 0 based offset of first character.
+ @param [out] endOffset
+ 0 based offset of one past the last character.
+ @param [out] text
+ Returns the requested text portion. This portion may be empty or invalid when
+ no appropriate text portion is found or text type is invalid.
+ @retval S_OK
+ @retval S_FALSE if the requested boundary type is not implemented, such as
+ ::IA2_TEXT_BOUNDARY_SENTENCE, or if there is nothing to return;
+ [out] values are 0s and NULL respectively
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ [propget] HRESULT textAfterOffset
+ (
+ [in] long offset,
+ [in] enum IA2TextBoundaryType boundaryType,
+ [out] long *startOffset,
+ [out] long *endOffset,
+ [out, retval] BSTR *text
+ );
+
+ /** @brief Returns a text portion that spans the given position.
+
+ Returns the substring defined by the specified boundary type at the specified
+ offset. Refer to IA2TextBoundaryType for more details.
+
+ For the word boundary type the returned string will contain the word at the
+ offset if the offset is inside a word and will contain the word before the
+ offset if the offset is not inside a word. All offsets from the first to the
+ last characters of a word are considered inside the word. Boundary types of
+ sentence and paragraph should exhibit similar behavior.
+
+ If the index is valid, but no text is found, S_FALSE is returned along with out
+ values of 0, 0, and a NULL pointer. This would happen for boundary types other
+ than character when the text consists entirely of whitespace.
+
+ @param [in] offset
+ Index of the character for which to return the text part it belongs to. The valid
+ range is 0..length.
+ Refer to @ref _specialOffsets
+ "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
+ for information about special offsets that can be used in %IAccessibleText methods.
+ @param [in] boundaryType
+ The type of the text portion to return. See ::IA2TextBoundaryType for the complete
+ list.
+ @param [out] startOffset
+ 0 based offset of first character.
+ @param [out] endOffset
+ 0 based offset of one past the last character.
+ @param [out] text
+ Returns the requested text portion. This portion may be empty or invalid when
+ no appropriate text portion is found or text type is invalid.
+ @retval S_OK
+ @retval S_FALSE if the requested boundary type is not implemented, such as
+ ::IA2_TEXT_BOUNDARY_SENTENCE, or if there is nothing to return;
+ [out] values are 0s and NULL respectively
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ [propget] HRESULT textAtOffset
+ (
+ [in] long offset,
+ [in] enum IA2TextBoundaryType boundaryType,
+ [out] long *startOffset,
+ [out] long *endOffset,
+ [out, retval] BSTR *text
+ );
+
+ /** @brief Unselects a range of text.
+ @param [in] selectionIndex
+ Index of selection to remove (0 based).
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ HRESULT removeSelection
+ (
+ [in] long selectionIndex
+ );
+
+ /** @brief Sets the position of the caret.
+
+ The caret position/offset is that of the character logically following it,
+ e.g. to the right of it in a left to right language.
+
+ Setting the caret position may or may not alter the current selection. A
+ change of the selection is notified to the accessibility event listeners with
+ an ::IA2_EVENT_TEXT_SELECTION_CHANGED event.
+
+ When the new caret position differs from the old one (which, of course, is the
+ standard case) this is notified to the accessibility event listeners with an
+ ::IA2_EVENT_TEXT_CARET_MOVED event.
+ @param [in] offset
+ The new index of the caret. This caret is actually placed to the left side of
+ the character with that index. An index of 0 places the caret so that the next
+ insertion goes before the first character. An index of IAccessibleText::nCharacters
+ leads to insertion after the last character. Refer to @ref _specialOffsets
+ "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
+ for information about special offsets that can be used in %IAccessibleText methods.
+ @retval S_OK
+ @retval E_FAIL if the caret cannot be set
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ HRESULT setCaretOffset
+ (
+ [in] long offset
+ );
+
+ /** @brief Changes the bounds of an existing selection.
+ @param [in] selectionIndex
+ Index of selection to change (0 based)
+ @param [in] startOffset
+ New starting offset (0 based)
+ @param [in] endOffset
+ New ending offset (0 based) - the offset of the character just past the last character of the selection.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed
+ @note Refer to @ref _specialOffsets
+ "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
+ for information about special offsets that can be used in %IAccessibleText methods.
+ */
+ HRESULT setSelection
+ (
+ [in] long selectionIndex,
+ [in] long startOffset,
+ [in] long endOffset
+ );
+
+ /** @brief Returns total number of characters.
+
+ Note that this may be different than the total number of bytes required to store the
+ text, if the text contains multi-byte characters.
+ @param [out] nCharacters
+ @retval S_OK
+ */
+ [propget] HRESULT nCharacters
+ (
+ [out, retval] long *nCharacters
+ );
+
+ /** @brief Makes a specific part of string visible on screen.
+ @param [in] startIndex
+ 0 based character offset.
+ @param [in] endIndex
+ 0 based character offset - the offset of the character just past the last character of the string.
+ @param [in] scrollType
+ Defines where the object should be placed on the screen.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed
+ @note Refer to @ref _specialOffsets
+ "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
+ for information about special offsets that can be used in %IAccessibleText methods.
+ */
+ HRESULT scrollSubstringTo
+ (
+ [in] long startIndex,
+ [in] long endIndex,
+ [in] enum IA2ScrollType scrollType
+ );
+
+ /** @brief Moves the top left of a substring to a specified location.
+
+ @param [in] startIndex
+ 0 based character offset.
+ @param [in] endIndex
+ 0 based character offset - the offset of the character just past the last character of the string.
+ @param [in] coordinateType
+ Specifies whether the coordinates are relative to the screen or the parent object.
+ @param [in] x
+ Defines the x coordinate.
+ @param [in] y
+ Defines the y coordinate.
+ @retval S_OK
+ @retval S_FALSE if the object is already at the specified location.
+ @retval E_INVALIDARG if bad [in] passed
+ @note Refer to @ref _specialOffsets
+ "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
+ for information about special offsets that can be used in %IAccessibleText methods.
+ */
+ HRESULT scrollSubstringToPoint
+ (
+ [in] long startIndex,
+ [in] long endIndex,
+ [in] enum IA2CoordinateType coordinateType,
+ [in] long x,
+ [in] long y
+ );
+
+ /** @brief Returns any inserted text.
+
+ Provided for use by the ::IA2_EVENT_TEXT_INSERTED and ::IA2_EVENT_TEXT_UPDATED
+ event handlers.
+
+ This data is only guaranteed to be valid while the thread notifying the event
+ continues. Once the handler has returned, the validity of the data depends on
+ how the server manages the life cycle of its objects. Also, note that the server
+ may have different life cycle management strategies for controls depending on
+ whether or not a control manages its children. Lists, trees, and tables can have
+ a large number of children and thus it's possible that the child objects for those
+ controls would only be created as needed. Servers should document their life cycle
+ strategy as this will be of interest to assistive technology or script engines
+ accessing data out of process or from other threads. Servers only need to save the
+ last inserted block of text and a scope of the entire application is adequate.
+
+ @param [out] newText
+ The text that was just inserted.
+ @retval S_OK
+ @retval S_FALSE If there is nothing to return, the values of IA2TextSegment
+ struct are set as follows: text = NULL, start = 0, end = 0.
+
+ */
+ [propget] HRESULT newText
+ (
+ [out, retval] IA2TextSegment *newText
+ );
+
+ /** @brief Returns any removed text.
+
+ Provided for use by the IA2_EVENT_TEXT_REMOVED/UPDATED event handlers.
+
+ This data is only guaranteed to be valid while the thread notifying the event
+ continues. Once the handler has returned, the validity of the data depends on
+ how the server manages the life cycle of its objects. Also, note that the server
+ may have different life cycle management strategies for controls depending on
+ whether or not a control manages its children. Lists, trees, and tables can have
+ a large number of children and thus it's possible that the child objects for those
+ controls would only be created as needed. Servers should document their life cycle
+ strategy as this will be of interest to assistive technology or script engines
+ accessing data out of process or from other threads. Servers only need to save the
+ last removed block of text and a scope of the entire application is adequate.
+
+ @param [out] oldText
+ The text that was just removed.
+ @retval S_OK
+ @retval S_FALSE If there is nothing to return, the values of IA2TextSegment
+ struct are set as follows: text = NULL, start = 0, end = 0.
+ */
+ [propget] HRESULT oldText
+ (
+ [out, retval] IA2TextSegment *oldText
+ );
+
+}
+/*************************************************************************
+ *
+ * File Name (AccessibleText2.idl)
+ *
+ * IAccessible2 IDL Specification
+ *
+ * Copyright (c) 2007, 2013 Linux Foundation
+ * Copyright (c) 2006 IBM Corporation
+ * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
+ * All rights reserved.
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * 3. Neither the name of the Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products
+ * derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This BSD License conforms to the Open Source Initiative "Simplified
+ * BSD License" as published at:
+ * http://www.opensource.org/licenses/bsd-license.php
+ *
+ * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
+ * mark may be used in accordance with the Linux Foundation Trademark
+ * Policy to indicate compliance with the IAccessible2 specification.
+ *
+ ************************************************************************/
+
+
+
+
+
+
+
+/** @brief This interface gives read-only access to text.
+
+ The %IAccessibleText2 interface extends the functionality of the
+ %IAccessibleText interface.
+*/
+[object, uuid(9690A9CC-5C80-4DF5-852E-2D5AE4189A54)]
+interface IAccessibleText2 : IAccessibleText
+{
+
+ /** @brief Returns the range and of the specified set of attributes.
+
+ Return the range (start and end offsets) and text attributes that correspond
+ to the given attributes filter at the given offset.
+
+ @param [in] offset
+ The offset at which to search for the attributes specified in the filter.
+ @param [in] filter
+ The requested attribute names. The filter format is "attribute1, attribute2".
+ @param [out] startOffset
+ The starting (0-based) offset of the text containing the specified attributes.
+ @param [out] endOffset
+ The (0-based) offset one past the last character of the text containing the
+ specified attributes.
+ @param [out] attributeValues
+ The values of the requested attributes.
+ @retval S_OK
+ @retval S_FALSE if nothing to return, [out] values are -1, -1, NULL respectively.
+ @retval E_INVALIDARG if bad [in] passed.
+ */
+ [propget] HRESULT attributeRange
+ (
+ [in] long offset,
+ [in] BSTR filter,
+ [out] long *startOffset,
+ [out] long *endOffset,
+ [out, retval] BSTR *attributeValues
+ );
+
+}
+/*************************************************************************
+ *
+ * File Name (AccessibleEditableText.idl)
+ *
+ * IAccessible2 IDL Specification
+ *
+ * Copyright (c) 2007, 2012 Linux Foundation
+ * Copyright (c) 2006 IBM Corporation
+ * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
+ * All rights reserved.
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * 3. Neither the name of the Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products
+ * derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This BSD License conforms to the Open Source Initiative "Simplified
+ * BSD License" as published at:
+ * http://www.opensource.org/licenses/bsd-license.php
+ *
+ * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
+ * mark may be used in accordance with the Linux Foundation Trademark
+ * Policy to indicate compliance with the IAccessible2 specification.
+ *
+ ************************************************************************/
+
+
+
+
+
+
+/** @brief This interface provides clipboard capability to text objects.
+
+ This interface is typically used in conjunction with the IAccessibleText
+ interface and complements that interface with the additional capability of
+ clipboard operations. Note that even a read only text object can support
+ the copy capability so this interface is not limited to editable objects.
+
+ The substrings used with this interface are specified as follows:
+ If startOffset is less than endOffset, the substring starts with the
+ character at startOffset and ends with the character just before endOffset.
+ If endOffset is lower than startOffset, the result is the same as a call
+ with the two arguments exchanged. The whole text can be defined by passing
+ the indices zero and IAccessibleText::nCharacters. If both indices have the
+ same value, an empty string is defined.
+
+ Refer to the @ref _specialOffsets
+ "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
+ for information about a special offset constant that can be used in %IAccessibleEditableText methods.
+*/
+[object, uuid(A59AA09A-7011-4b65-939D-32B1FB5547E3)]
+interface IAccessibleEditableText : IUnknown
+{
+
+ /** @brief Copies the text range into the clipboard.
+
+ The selection is set to the specified offsets and then selection is copied into
+ the system clipboard.
+
+ @param [in] startOffset
+ Start index of the text to moved into the clipboard.
+ The valid range is 0..length.
+ @param [in] endOffset
+ End index of the text to moved into the clipboard.
+ The valid range is 0..length.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed
+ @note Refer to @ref _specialOffsets
+ "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
+ for information about special offsets that can be used in %IAccessibleEditableText
+ methods.
+ @deprecated This function is available via the application's GUI.
+ */
+ HRESULT copyText
+ (
+ [in] long startOffset,
+ [in] long endOffset
+ );
+
+ /** @brief Deletes a range of text.
+
+ The text between and including the two given indices is deleted
+ from the text represented by this object.
+
+ @param [in] startOffset
+ Start index of the text to be deleted.
+ The valid range is 0..length.
+ @param [in] endOffset
+ End index of the text to be deleted.
+ The valid range is 0..length.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed
+ @note Refer to @ref _specialOffsets
+ "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
+ for information about special offsets that can be used in %IAccessibleEditableText
+ methods.
+ */
+ HRESULT deleteText
+ (
+ [in] long startOffset,
+ [in] long endOffset
+ );
+
+ /** @brief Inserts text at the specified position.
+
+ The specified string is inserted at the given index into the text
+ represented by this object.
+
+ @param [in] offset
+ Index at which to insert the text.
+ The valid range is 0..length.
+ Refer to @ref _specialOffsets
+ "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
+ for information about special offsets that can be used in %IAccessibleEditableText
+ methods.
+ @param [in] text
+ Text that is inserted.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ HRESULT insertText
+ (
+ [in] long offset,
+ [in] BSTR *text
+ );
+
+ /** @brief Deletes a range of text and copies it to the clipboard.
+
+ The selection is set to the specified offsets, the selection is then copied into
+ the system clipboard, and then the selection is deleted.
+
+ @param [in] startOffset
+ Start index of the text to be deleted.
+ The valid range is 0..length.
+ @param [in] endOffset
+ End index of the text to be deleted.
+ The valid range is 0..length.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed
+ @note Refer to @ref _specialOffsets
+ "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
+ for information about special offsets that can be used in %IAccessibleEditableText
+ methods.
+ @deprecated This function is available via the application's GUI.
+ */
+ HRESULT cutText
+ (
+ [in] long startOffset,
+ [in] long endOffset
+ );
+
+ /** @brief Pastes content from the clipboard.
+
+ Any existing selection is removed, the clipboard content is then pasted into
+ this object's text at the given offset. This method is similar to the insertText
+ method. If the index is not valid the system clipboard content is not inserted. The
+ behavior is the same as when Ctrl+V is used, i.e. the pasted contents are not
+ necessarily plain text.
+
+ @param [in] offset
+ Index at which to insert the content from the system clipboard into
+ the text represented by this object.
+ The valid range is 0..length.
+ Refer to @ref _specialOffsets
+ "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
+ for information about special offsets that can be used in %IAccessibleEditableText
+ methods.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed
+ @deprecated This function is available via the application's GUI.
+ */
+ HRESULT pasteText
+ (
+ [in] long offset
+ );
+
+ /** @brief Replaces text.
+
+ The text between the two given indices is replaced by the specified
+ replacement string. This method is equivalent to calling first
+ IAccessibleEditableText::deleteText with the two indices and then
+ calling IAccessibleEditableText::insertText with the replacement text
+ at the start index.
+
+ @param [in] startOffset
+ Start index of the text to be replaced.
+ The valid range is 0..length.
+ @param [in] endOffset
+ End index of the text to be replaced.
+ The valid range is 0..length.
+ @param [in] text
+ The Text that replaces the text between the given indices.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed
+ @note Refer to @ref _specialOffsets
+ "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
+ for information about special offsets that can be used in %IAccessibleEditableText
+ methods.
+ */
+ HRESULT replaceText
+ (
+ [in] long startOffset,
+ [in] long endOffset,
+ [in] BSTR *text
+ );
+
+ /** @brief Replaces the attributes of a text range by the given set of attributes.
+
+ Sets the attributes for the text between the two given indices. The old
+ attributes are replaced by the new list of attributes.
+
+ @param [in] startOffset
+ Start index of the text whose attributes are modified.
+ The valid range is 0..length.
+ @param [in] endOffset
+ End index of the text whose attributes are modified.
+ The valid range is 0..length.
+ @param [in] attributes
+ Set of attributes that replaces the old list of attributes of
+ the specified text portion.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed
+ @note Refer to @ref _specialOffsets
+ "Special Offsets for use in the IAccessibleText and IAccessibleEditableText Methods"
+ for information about special offsets that can be used in %IAccessibleEditableText
+ methods.
+ */
+ HRESULT setAttributes
+ (
+ [in] long startOffset,
+ [in] long endOffset,
+ [in] BSTR *attributes
+ );
+}
+
+/*************************************************************************
+ *
+ * File Name (AccessibleHyperlink.idl)
+ *
+ * IAccessible2 IDL Specification
+ *
+ * Copyright (c) 2007, 2010 Linux Foundation
+ * Copyright (c) 2006 IBM Corporation
+ * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
+ * All rights reserved.
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * 3. Neither the name of the Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products
+ * derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This BSD License conforms to the Open Source Initiative "Simplified
+ * BSD License" as published at:
+ * http://www.opensource.org/licenses/bsd-license.php
+ *
+ * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
+ * mark may be used in accordance with the Linux Foundation Trademark
+ * Policy to indicate compliance with the IAccessible2 specification.
+ *
+ ************************************************************************/
+
+
+
+
+
+
+/** @brief This interface represents hyperlinks.
+
+ This interface represents a hyperlink associated with a single substring
+ of text or single non-text object. Non-text objects can have either a
+ single link or a collection of links such as when the non-text object is
+ an image map.
+
+ Linked objects and anchors are implementation dependent. This interface is derived
+ from IAccessibleAction. IAccessibleAction::nActions is one greater than the
+ maximum value for the indices used with the methods of this interface.
+
+ Furthermore, the object that implements this interface has to be connected
+ implicitly or explicitly with an object that implements IAccessibleText.
+ IAccessibleHyperlink::startIndex and IAccessibleHyperlink::endIndex are
+ indices with respect to the text exposed by IAccessibleText.
+
+ This interface provides access to a single object which can have multiple actions.
+ An example is an image map which is an image with multiple links each of which is
+ associated with a separate non-overlapping area of the image. This interface could
+ also be applied to other kinds of objects with multiple actions such as "smart tags"
+ which are objects, typically strings, which have multiple actions such as
+ "Activate URI", "Bookmark URI", etc.
+
+ An interesting use case is an image map where each area is associated with multiple
+ actions, e.g. an image map of smart tags. In this case you would have to implement
+ two levels of accessible hyperlinks. The first level hyperlinks would only implement
+ anchor and anchorTarget. The anchors would all reference the image object. The
+ anchorTargets would reference the second level accessible hyperlink objects. None
+ of the IAccessibleAction methods would be implemented on the first level hyperlink
+ objects. The second level hyperlink objects would implement the IAccessibleAction
+ methods. Their anchors would also reference the image object and their anchorTargets
+ would reference URLs or the objects that would be activated.
+
+ This use case demonstrates that in some cases there is no need for IAccessibleHyperlink
+ to derive from IAccessibleAction. As a result it may be removed in a later version of
+ the IDL and it is suggested that implementations should not rely on the inheritance.
+
+*/
+[object, uuid(01C20F2B-3DD2-400f-949F-AD00BDAB1D41)]
+interface IAccessibleHyperlink : IAccessibleAction
+{
+
+ /** @brief Returns an object that represents the link anchor, as appropriate
+ for the link at the specified index.
+ @param [in] index
+ A 0 based index identifies the anchor when, as in the case of an image map,
+ there is more than one link represented by this object. The valid maximal
+ index is indicated by IAccessibleAction::nActions.
+ @param [out] anchor
+ This is an implementation dependent value. For example, for a text link this
+ method could return the substring of the containing string where the substring
+ is overridden with link behavior, and for an image link this method could return
+ an IUnknown VARIANT for IAccessibleImage. See the section about
+ @ref _variants "VARIANTs" for additional information.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ [propget] HRESULT anchor
+ (
+ [in] long index,
+ [out, retval] VARIANT *anchor
+ );
+
+ /** @brief Returns an object representing the target of the link, as appropriate
+ for the link at the specified index.
+ @param [in] index
+ A 0 based index identifies the anchor when, as in the case of an image map,
+ there is more than one link represented by this object. The valid maximal
+ index is indicated by IAccessibleAction::nActions.
+ @param [out] anchorTarget
+ This is an implementation dependent value. For example this method could
+ return a BSTR VARIANT of the URI. Alternatively this method could return an
+ IUnknown VARIANT of a COM interface representing a target object to be
+ activated when the link is activated. See the section about
+ @ref _variants "VARIANTs" for additional information.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ [propget] HRESULT anchorTarget
+ (
+ [in] long index,
+ [out, retval] VARIANT *anchorTarget
+ );
+
+ /** @brief Returns the 0 based character offset at which the textual representation of the hyperlink starts.
+
+ The returned value is related to the IAccessibleText interface of the object that
+ owns this hyperlink.
+ @param [out] index
+ @retval S_OK
+ */
+ [propget] HRESULT startIndex
+ (
+ [out, retval] long *index
+ );
+
+ /** @brief Returns the 0 based character offset at which the textual representation of the hyperlink ends.
+
+ The returned value is related to the IAccessibleText interface of the object that
+ owns this hyperlink. The character at the index is not part of the hypertext.
+ @param [out] index
+ @retval S_OK
+ */
+ [propget] HRESULT endIndex
+ (
+ [out, retval] long *index
+ );
+
+ /** @brief Returns whether the target object referenced by this link is still valid.
+
+ This is a volatile state that may change without sending an appropriate event.
+ Returns TRUE if the referenced target is still valid and FALSE otherwise.
+
+ This has also been used to indicate whether or not the URI of the anchorTarget
+ is malformed.
+
+ @param [out] valid
+ If false, one or more of the object's links are invalid.
+ If true, all of the object's links are valid.
+ @retval S_OK
+ @retval S_FALSE if there is nothing to return, [out] value is FALSE
+ @note This method is not being used, is deprecated, and should not be implemented or
+ used. It is likely that this method will be removed in a later version of the IDL.
+ */
+ [propget] HRESULT valid
+ (
+ [out, retval] boolean *valid
+ );
+}
+/*************************************************************************
+ *
+ * File Name (AccessibleHypertext.idl)
+ *
+ * IAccessible2 IDL Specification
+ *
+ * Copyright (c) 2007, 2010 Linux Foundation
+ * Copyright (c) 2006 IBM Corporation
+ * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
+ * All rights reserved.
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * 3. Neither the name of the Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products
+ * derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This BSD License conforms to the Open Source Initiative "Simplified
+ * BSD License" as published at:
+ * http://www.opensource.org/licenses/bsd-license.php
+ *
+ * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
+ * mark may be used in accordance with the Linux Foundation Trademark
+ * Policy to indicate compliance with the IAccessible2 specification.
+ *
+ ************************************************************************/
+
+
+
+
+
+
+
+/** @brief This interface exposes information about hypertext in a document.
+
+ The %IAccessibleHypertext interface is the main interface to expose
+ hyperlinks in a document, typically a text document, that are used
+ to reference other documents. A typical implementation is to implement
+ this interface on the smallest text object such as a paragraph of text.
+*/
+[object, uuid(6B4F8BBF-F1F2-418a-B35E-A195BC4103B9)]
+interface IAccessibleHypertext : IAccessibleText
+{
+
+ /** @brief Returns the number of links and link groups contained within this hypertext
+ paragraph.
+ @param [out] hyperlinkCount
+ The number of links and link groups within this hypertext paragraph.
+ Returns 0 if there is no link.
+ @retval S_OK
+ */
+ [propget] HRESULT nHyperlinks
+ (
+ [out, retval] long *hyperlinkCount
+ );
+
+ /** @brief Returns the specified link.
+
+ The returned IAccessibleHyperlink object encapsulates the hyperlink and
+ provides several kinds of information describing it.
+ @param [in] index
+ This 0 based index specifies the hyperlink to return.
+ @param [out] hyperlink
+ If the given index is valid, i.e. lies in the interval from 0 to the number
+ of links minus one, a reference to the specified hyperlink object is returned.
+ If the index is invalid then a NULL pointer is returned.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ [propget] HRESULT hyperlink
+ (
+ [in] long index,
+ [out, retval] IAccessibleHyperlink **hyperlink
+ );
+
+ /** @brief Returns the index of the hyperlink that is associated with this character index.
+
+ This is the case when a link spans the given character index.
+ @param [in] charIndex
+ A 0 based index of the character for which to return the link index. If
+ IAccessibleText is used to represent the text containing the link, then the
+ character index is only valid if it is greater than or equal to zero and
+ lower than the number of characters in the text.
+ @param [out] hyperlinkIndex
+ Returns the 0 based index of the hyperlink that is associated with this
+ character index, or -1 if charIndex is not on a link.
+ @retval S_OK
+ @retval S_FALSE if there is nothing to return, [out] value is -1
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ [propget] HRESULT hyperlinkIndex
+ (
+ [in] long charIndex,
+ [out, retval] long *hyperlinkIndex
+ );
+
+}
+/*************************************************************************
+ *
+ * File Name (AccessibleHypertext2.idl)
+ *
+ * IAccessible2 IDL Specification
+ *
+ * Copyright (c) 2007, 2013 Linux Foundation
+ * Copyright (c) 2006 IBM Corporation
+ * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
+ * All rights reserved.
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * 3. Neither the name of the Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products
+ * derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This BSD License conforms to the Open Source Initiative "Simplified
+ * BSD License" as published at:
+ * http://www.opensource.org/licenses/bsd-license.php
+ *
+ * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
+ * mark may be used in accordance with the Linux Foundation Trademark
+ * Policy to indicate compliance with the IAccessible2 specification.
+ *
+ ************************************************************************/
+
+
+
+
+
+
+
+/** @brief This interface exposes information about hypertext in a document.
+
+ The %IAccessibleHypertext2 interface extends the functinality of the
+ %IAccessibleHypertext inteface.
+*/
+[object, uuid(CF64D89F-8287-4B44-8501-A827453A6077)]
+interface IAccessibleHypertext2 : IAccessibleHypertext
+{
+
+ /** @brief Returns the links for this object.
+
+ The returned IAccessibleHyperlink objects encapsulate the hyperlink and
+ provides several kinds of information describing it.
+
+ @param [out] hyperlinks
+ This array is allocated by the server. The client must free it with CoTaskMemFree.
+ @param [out] nHyperlinks
+ The number of links returned; the size of the returned array.
+ @retval S_OK
+ @retval S_FALSE if there are no links, [out] values are NULL and 0 respectively
+ */
+ [propget] HRESULT hyperlinks
+ (
+ [out, size_is(,*nHyperlinks)] IAccessibleHyperlink ***hyperlinks,
+ [out, retval] long *nHyperlinks
+ );
+
+}
+/*************************************************************************
+ *
+ * File Name (AccessibleTable.idl)
+ *
+ * IAccessible2 IDL Specification
+ *
+ * Copyright (c) 2007, 2013 Linux Foundation
+ * Copyright (c) 2006 IBM Corporation
+ * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
+ * All rights reserved.
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * 3. Neither the name of the Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products
+ * derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This BSD License conforms to the Open Source Initiative "Simplified
+ * BSD License" as published at:
+ * http://www.opensource.org/licenses/bsd-license.php
+ *
+ * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
+ * mark may be used in accordance with the Linux Foundation Trademark
+ * Policy to indicate compliance with the IAccessible2 specification.
+ *
+ ************************************************************************/
+
+
+
+
+
+
+
+/** @brief This interface gives access to a two-dimensional table.
+
+ Typically all accessible objects that represent cells or cell-clusters of a table
+ will be at the same time children of the table. In this case IAccessible2::indexInParent
+ will return the child index which then can be used when calling IAccessibleTable::rowIndex
+ and IAccessibleTable::columnIndex.
+
+ However, in some cases that kind of implementation will not be possible. When
+ the table cells are not direct children of a table, the object representing
+ the cell can define a "table-cell-index" object attribute identifying the 0
+ based table cell index. This object attribute is obtained by parsing the
+ attribute string returned by IAccessible2::attributes. The "table-cell-index"
+ attribute can be used just like a child index of the typical case. ATs should
+ first test for the presence of the "table-cell-index" attribute and if it is not
+ present then IAccessible2::indexInParent can be used as in the typical case
+ where cells are direct children of the table.
+
+ The range of valid coordinates for this interface are implementation dependent.
+ However, that range includes at least the intervals from the from the first row
+ or column with the index 0 up to the last (but not including) used row or column
+ as returned by IAccessibleTable::nRows and IAccessibleTable::nColumns.
+
+ Note that newer implementations are now using IAccessibleTable2 and IAccessibleTableCell
+ rather than this interface.
+*/
+[object, uuid(35AD8070-C20C-4fb4-B094-F4F7275DD469)]
+interface IAccessibleTable : IUnknown
+{
+
+ /** @brief Returns the accessible object at the specified row and column in
+ the table. This object could be an IAccessible or an IAccessible2.
+ @param [in] row
+ The 0 based row index for which to retrieve the cell.
+ @param [in] column
+ The 0 based column index for which to retrieve the cell.
+ @param [out] accessible
+ If both row and column index are valid then the corresponding accessible
+ object is returned that represents the requested cell regardless of whether
+ the cell is currently visible (on the screen).
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed, [out] value is NULL
+ */
+ [propget] HRESULT accessibleAt
+ (
+ [in] long row,
+ [in] long column,
+ [out, retval] IUnknown **accessible
+ );
+
+ /** @brief Returns the caption for the table. The returned object could be
+ an IAccessible or an IAccessible2.
+ @param [out] accessible
+ If the table has a caption then a reference to it is returned, else a NULL
+ pointer is returned.
+ @retval S_OK
+ @retval S_FALSE if there is nothing to return, [out] value is NULL
+ */
+ [propget] HRESULT caption
+ (
+ [out, retval] IUnknown **accessible
+ );
+
+ /** @brief Translates the given row and column indexes into the corresponding cell index.
+ @param [in] rowIndex
+ 0 based row index for the cell.
+ @param [in] columnIndex
+ 0 based column index for the cell.
+ @param [out] cellIndex
+ Returns the 0 based index of the cell at the specified row and column indexes.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed, [out] value is 0
+ @note The returned value is not necessarily a child index of the immediate parent.
+ In cases where the table cells are not direct children of the table the index
+ is actually the cell index, i.e. conceptually it's an index into a one dimensional
+ array of cells laid out in row order.
+ */
+ [propget] HRESULT childIndex
+ (
+ [in] long rowIndex,
+ [in] long columnIndex,
+ [out, retval] long *cellIndex
+ );
+
+ /** @brief Returns the description text of the specified column in the table.
+ @param [in] column
+ The 0 based index of the column for which to retrieve the description.
+ @param [out] description
+ Returns the description text of the specified column in the table if such a
+ description exists. Otherwise a NULL pointer is returned.
+ @retval S_OK
+ @retval S_FALSE if there is nothing to return, [out] value is NULL
+ @retval E_INVALIDARG if bad [in] passed, [out] value is NULL
+ */
+ [propget] HRESULT columnDescription
+ (
+ [in] long column,
+ [out, retval] BSTR *description
+ );
+
+ /** @brief Returns the number of columns occupied by the accessible object
+ at the specified row and column in the table.
+
+ The result is greater than 1 if the specified cell spans multiple columns.
+ @param [in] row
+ 0 based row index of the accessible for which to return the column extent.
+ @param [in] column
+ 0 based column index of the accessible for which to return the column extent.
+ @param [out] nColumnsSpanned
+ Returns the 1 based column extent of the specified cell.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed, [out] value is 0
+ */
+ [propget] HRESULT columnExtentAt
+ (
+ [in] long row,
+ [in] long column,
+ [out, retval] long *nColumnsSpanned
+ );
+
+ /** @brief Returns the column headers as an %IAccessibleTable object.
+
+ Content and size of the returned table are implementation dependent.
+ @param [out] accessibleTable
+ The column header
+ @param [out] startingRowIndex
+ The 0 based row index where the header starts, usually 0.
+ @retval S_OK
+ @retval S_FALSE if there is no header, [out] values are NULL and 0 respectively
+ */
+ [propget] HRESULT columnHeader
+ (
+ [out] IAccessibleTable **accessibleTable,
+ [out, retval] long *startingRowIndex
+ );
+
+ /** @brief Translates the given cell index into the corresponding column index.
+ @param [in] cellIndex
+ 0 based index of the cell in the parent or closest ancestor table. Typically this
+ is the value returned from IAccessible2::indexInParent, but in the case where the
+ table cells are not direct children of the table this is the cell index specified
+ by the "table-cell-index" object attribute obtained from parsing the attributes
+ string returned by calling IAccessible2::attributes on the cell object.
+ @param [out] columnIndex
+ Returns the 0 based column index of the cell of the specified child or the index of
+ the first column if the child spans multiple columns.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed, [out] value is 0
+ */
+ [propget] HRESULT columnIndex
+ (
+ [in] long cellIndex,
+ [out, retval] long *columnIndex
+ );
+
+ /** @brief Returns the total number of columns in table
+ @param [out] columnCount
+ Number of columns in table (including columns outside the current viewport)
+ @retval S_OK
+ */
+ [propget] HRESULT nColumns
+ (
+ [out, retval] long *columnCount
+ );
+
+ /** @brief Returns the total number of rows in table
+ @param [out] rowCount
+ Number of rows in table (including rows outside the current viewport)
+ @retval S_OK
+ */
+ [propget] HRESULT nRows
+ (
+ [out, retval] long *rowCount
+ );
+
+ /** @brief Returns the total number of selected cells
+ @param [out] cellCount
+ Number of cells currently selected
+ @retval S_OK
+ */
+ [propget] HRESULT nSelectedChildren
+ (
+ [out, retval] long *cellCount
+ );
+
+ /** @brief Returns the total number of selected columns
+ @param [out] columnCount
+ Number of columns currently selected
+ @retval S_OK
+ */
+ [propget] HRESULT nSelectedColumns
+ (
+ [out, retval] long *columnCount
+ );
+
+ /** @brief Returns the total number of selected rows
+ @param [out] rowCount
+ Number of rows currently selected
+ @retval S_OK
+ */
+ [propget] HRESULT nSelectedRows
+ (
+ [out, retval] long *rowCount
+ );
+
+ /** @brief Returns the description text of the specified row in the table.
+ @param [in] row
+ The 0 based index of the row for which to retrieve the description.
+ @param [out] description
+ Returns the description text of the specified row in the table if such a
+ description exists. Otherwise a NULL pointer is returned.
+ @retval S_OK
+ @retval S_FALSE if there is nothing to return, [out] value is NULL
+ @retval E_INVALIDARG if bad [in] passed, [out] value is NULL
+ */
+ [propget] HRESULT rowDescription
+ (
+ [in] long row,
+ [out, retval] BSTR *description
+ );
+
+ /** @brief Returns the number of rows occupied by the accessible object
+ at the specified row and column in the table.
+
+ The result is greater than 1 if the specified cell spans multiple rows.
+ @param [in] row
+ 0 based row index of the accessible for which to return the row extent.
+ @param [in] column
+ 0 based column index of the accessible for which to return the row extent.
+ @param [out] nRowsSpanned
+ Returns the row extent of the specified cell.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed, [out] value is 0
+ */
+ [propget] HRESULT rowExtentAt
+ (
+ [in] long row,
+ [in] long column,
+ [out, retval] long *nRowsSpanned
+ );
+
+ /** @brief Returns the row headers as an %IAccessibleTable object.
+
+ Content and size of the returned table are implementation dependent.
+ @param [out] accessibleTable
+ The row header.
+ @param [out] startingColumnIndex
+ The 0 based column index where the header starts, usually 0.
+ @retval S_OK
+ @retval S_FALSE if there is no header, [out] values are NULL and 0 respectively
+ */
+ [propget] HRESULT rowHeader
+ (
+ [out] IAccessibleTable **accessibleTable,
+ [out, retval] long *startingColumnIndex
+ );
+
+ /** @brief Translates the given cell index into a row index.
+ @param [in] cellIndex
+ 0 based index of the cell in the parent or closest ancestor table. Typically this
+ is the value returned from IAccessible2::indexInParent, but in the case where the
+ table cells are not direct children of the table this is the cell index specified
+ by the "table-cell-index" object attribute obtained from parsing the attributes
+ string returned by calling IAccessible2::attributes on the cell object.
+ @param [out] rowIndex
+ 0 based row index
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed, [out] value is 0
+ */
+ [propget] HRESULT rowIndex
+ (
+ [in] long cellIndex,
+ [out, retval] long *rowIndex
+ );
+
+ /** @brief Returns a list of cell indexes currently selected (0 based).
+ @param [in] maxChildren
+ This parameter is ignored. Refer to @ref _arrayConsideration
+ "Special Consideration when using Arrays" for more details.
+ @param [out] children
+ An array of cell indexes of selected cells (each index is 0 based),
+ allocated by the server. The client must free it with CoTaskMemFree.
+ @param [out] nChildren
+ The number of cell indexes returned; the size of the returned array.
+ @retval S_OK
+ @retval S_FALSE if there are none, [out] values are NULL and 0 respectively
+ */
+ [propget] HRESULT selectedChildren
+ (
+ [in] long maxChildren,
+ [out, size_is(,maxChildren), length_is(,*nChildren)] long **children,
+ [out, retval] long *nChildren
+ );
+
+ /** @brief Returns a list of column indexes currently selected (0 based).
+ @param [in] maxColumns
+ This parameter is ignored. Refer to @ref _arrayConsideration
+ "Special Consideration when using Arrays" for more details.
+ @param [out] columns
+ An array of column indexes of selected columns (each index is 0 based), allocated
+ by the server. The client must free it with CoTaskMemFree.
+ @param [out] nColumns
+ The number of column indexes returned; the size of the returned array.
+ @retval S_OK
+ @retval S_FALSE if there are none, [out] values are NULL and 0 respectively
+ */
+ [propget] HRESULT selectedColumns
+ (
+ [in] long maxColumns,
+ [out, size_is(,maxColumns), length_is(,*nColumns)] long **columns,
+ [out, retval] long *nColumns
+ );
+
+ /** @brief Returns a list of row indexes currently selected (0 based).
+ @param [in] maxRows
+ This parameter is ignored. Refer to @ref _arrayConsideration
+ "Special Consideration when using Arrays" for more details.
+ @param [out] rows
+ An array of row indexes of selected rows (each index is 0 based), allocated
+ by the server. The client must free it with CoTaskMemFree.
+ @param [out] nRows
+ The number of row indexes returned; the size of the returned array.
+ @retval S_OK
+ @retval S_FALSE if there are none, [out] values are NULL and 0 respectively
+ */
+ [propget] HRESULT selectedRows
+ (
+ [in] long maxRows,
+ [out, size_is(,maxRows), length_is(,*nRows)] long **rows,
+ [out, retval] long *nRows
+ );
+
+ /** @brief Returns the summary description of the table. The returned object could be
+ an IAccessible or an IAccessible2.
+ @param [out] accessible
+ Returns a reference to an implementation dependent accessible object
+ representing the table's summary or a NULL pointer if the table
+ does not support a summary.
+ @retval S_OK
+ @retval S_FALSE if there is nothing to return, [out] value is NULL
+ */
+ [propget] HRESULT summary
+ (
+ [out, retval] IUnknown **accessible
+ );
+
+ /** @brief Returns a boolean value indicating whether the specified column is
+ completely selected.
+ @param [in] column
+ 0 based index of the column for which to determine whether it is selected.
+ @param [out] isSelected
+ Returns TRUE if the specified column is selected completely and FALSE otherwise.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed, [out] value is FALSE
+ */
+ [propget] HRESULT isColumnSelected
+ (
+ [in] long column,
+ [out, retval] boolean *isSelected
+ );
+
+ /** @brief Returns a boolean value indicating whether the specified row is completely
+ selected.
+ @param [in] row
+ 0 based index of the row for which to determine whether it is selected.
+ @param [out] isSelected
+ Returns TRUE if the specified row is selected completely and FALSE otherwise.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed, [out] value is FALSE
+ */
+ [propget] HRESULT isRowSelected
+ (
+ [in] long row,
+ [out, retval] boolean *isSelected
+ );
+
+ /** @brief Returns a boolean value indicating whether the specified cell is selected.
+ @param [in] row
+ 0 based index of the row for the cell to determine whether it is selected.
+ @param [in] column
+ 0 based index of the column for the cell to determine whether it is selected.
+ @param [out] isSelected
+ Returns TRUE if the specified cell is selected and FALSE otherwise.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed, [out] value is FALSE
+ */
+ [propget] HRESULT isSelected
+ (
+ [in] long row,
+ [in] long column,
+ [out, retval] boolean *isSelected
+ );
+
+ /** @brief Selects a row and unselects all previously selected rows.
+ @param [in] row
+ 0 based index of the row to be selected.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ HRESULT selectRow
+ (
+ [in] long row
+ );
+
+ /** @brief Selects a column and unselects all previously selected columns.
+ @param [in] column
+ 0 based index of the column to be selected.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ HRESULT selectColumn
+ (
+ [in] long column
+ );
+
+ /** @brief Unselects one row, leaving other selected rows selected (if any).
+ @param [in] row
+ 0 based index of the row to be unselected.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ HRESULT unselectRow
+ (
+ [in] long row
+ );
+
+ /** @brief Unselects one column, leaving other selected columns selected (if any).
+ @param [in] column
+ 0 based index of the column to be unselected.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ HRESULT unselectColumn
+ (
+ [in] long column
+ );
+
+ /** @brief Given a cell index, gets the row and column indexes and extents of a cell
+ and whether or not it is selected.
+
+ This is a convenience function. It is not mandatory to implement it.
+ @param [in] index
+ 0 based index of this cell in the table.
+ @param [out] row
+ 0 based row index.
+ @param [out] column
+ 0 based column index.
+ @param [out] rowExtents
+ Number of cells spanned by this cell in this row.
+ @param [out] columnExtents
+ Number of cells spanned by this cell in this column.
+ @param [out] isSelected
+ Indicates if the specified cell is selected.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed, [out] values are 0s and FALSE respectively
+ */
+ [propget] HRESULT rowColumnExtentsAtIndex
+ (
+ [in] long index,
+ [out] long *row,
+ [out] long *column,
+ [out] long *rowExtents,
+ [out] long *columnExtents,
+ [out, retval] boolean *isSelected
+ );
+
+ /** @brief Returns the type and extents describing how a table changed.
+
+ Provided for use by the IA2_EVENT_TABLE_MODEL_CHANGED event handler.
+
+ This data is only guaranteed to be valid while the thread notifying the event
+ continues. Once the handler has returned, the validity of the data depends on
+ how the server manages the life cycle of its objects. Also, note that the server
+ may have different life cycle management strategies for controls depending on
+ whether or not a control manages its children. Lists, trees, and tables can have
+ a large number of children and thus it's possible that the child objects for those
+ controls would only be created as needed. Servers should document their life cycle
+ strategy as this will be of interest to assistive technology or script engines
+ accessing data out of process or from other threads. Servers only need to save the
+ most recent row and column values associated with the change and a scope of the
+ entire application is adequate.
+
+ @param [out] modelChange
+ A struct of (type(insert, delete, update), firstRow, lastRow, firstColumn, lastColumn).
+ @retval S_OK
+ @retval S_FALSE if there is nothing to return, [out] value is NULL
+ */
+ [propget] HRESULT modelChange
+ (
+ [out, retval] IA2TableModelChange *modelChange
+ );
+
+}
+/*************************************************************************
+ *
+ * File Name (AccessibleTable2.idl)
+ *
+ * IAccessible2 IDL Specification
+ *
+ * Copyright (c) 2007, 2012 Linux Foundation
+ * Copyright (c) 2006 IBM Corporation
+ * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
+ * All rights reserved.
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * 3. Neither the name of the Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products
+ * derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This BSD License conforms to the Open Source Initiative "Simplified
+ * BSD License" as published at:
+ * http://www.opensource.org/licenses/bsd-license.php
+ *
+ * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
+ * mark may be used in accordance with the Linux Foundation Trademark
+ * Policy to indicate compliance with the IAccessible2 specification.
+ *
+ ************************************************************************/
+
+
+
+
+
+
+
+/** @brief This interface gives access to a two-dimensional table.
+
+ Please also refer to the IAccessibleTableCell interface.
+
+ If you want to support older applications you should also support the
+ IAccessibleTable inteface.
+*/
+[object, uuid(6167f295-06f0-4cdd-a1fa-02e25153d869)]
+interface IAccessibleTable2 : IUnknown
+{
+
+ /** @brief Returns the accessible object at the specified row and column in
+ the table. This object could be an IAccessible or an IAccessible2.
+ @param [in] row
+ The 0 based row index for which to retrieve the cell.
+ @param [in] column
+ The 0 based column index for which to retrieve the cell.
+ @param [out] cell
+ If both row and column index are valid then the corresponding accessible
+ object is returned that represents the requested cell regardless of whether
+ the cell is currently visible (on the screen).
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ [propget] HRESULT cellAt
+ (
+ [in] long row,
+ [in] long column,
+ [out, retval] IUnknown **cell
+ );
+
+ /** @brief Returns the caption for the table. The returned object could be
+ an IAccessible or an IAccessible2.
+ @param [out] accessible
+ If the table has a caption then a reference to it is returned, else a NULL
+ pointer is returned.
+ @retval S_OK
+ @retval S_FALSE if there is nothing to return, [out] value is NULL
+ @deprecated use a describedBy relation
+ */
+ [propget] HRESULT caption
+ (
+ [out, retval] IUnknown **accessible
+ );
+
+ /** @brief Returns the description text of the specified column in the table.
+ @param [in] column
+ The 0 based index of the column for which to retrieve the description.
+ @param [out] description
+ Returns the description text of the specified column in the table if such a
+ description exists. Otherwise a NULL pointer is returned.
+ @retval S_OK
+ @retval S_FALSE if there is nothing to return, [out] value is NULL
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ [propget] HRESULT columnDescription
+ (
+ [in] long column,
+ [out, retval] BSTR *description
+ );
+
+
+ /** @brief Returns the total number of columns in table
+ @param [out] columnCount
+ Number of columns in table (including columns outside the current viewport)
+ @retval S_OK
+ */
+ [propget] HRESULT nColumns
+ (
+ [out, retval] long *columnCount
+ );
+
+ /** @brief Returns the total number of rows in table
+ @param [out] rowCount
+ Number of rows in table (including rows outside the current viewport)
+ @retval S_OK
+ */
+ [propget] HRESULT nRows
+ (
+ [out, retval] long *rowCount
+ );
+
+ /** @brief Returns the total number of selected cells
+ @param [out] cellCount
+ Number of cells currently selected
+ @retval S_OK
+ */
+ [propget] HRESULT nSelectedCells
+ (
+ [out, retval] long *cellCount
+ );
+
+ /** @brief Returns the total number of selected columns
+ @param [out] columnCount
+ Number of columns currently selected
+ @retval S_OK
+ */
+ [propget] HRESULT nSelectedColumns
+ (
+ [out, retval] long *columnCount
+ );
+
+ /** @brief Returns the total number of selected rows
+ @param [out] rowCount
+ Number of rows currently selected
+ @retval S_OK
+ */
+ [propget] HRESULT nSelectedRows
+ (
+ [out, retval] long *rowCount
+ );
+
+ /** @brief Returns the description text of the specified row in the table.
+ @param [in] row
+ The 0 based index of the row for which to retrieve the description.
+ @param [out] description
+ Returns the description text of the specified row in the table if such a
+ description exists. Otherwise a NULL pointer is returned.
+ @retval S_OK
+ @retval S_FALSE if there is nothing to return, [out] value is NULL
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ [propget] HRESULT rowDescription
+ (
+ [in] long row,
+ [out, retval] BSTR *description
+ );
+
+ /** @brief Returns a list of accessibles currently selected.
+ @param [out] cells
+ Pointer to an array of references to selected accessibles. The array is
+ allocated by the server with CoTaskMemAlloc and freed by the client with
+ CoTaskMemFree.
+ @param [out] nSelectedCells
+ The number of accessibles returned; the size of the returned array.
+ @retval S_OK
+ @retval S_FALSE if there are none, [out] values are NULL and 0 respectively
+ */
+ [propget] HRESULT selectedCells
+ (
+ [out, size_is(,*nSelectedCells)] IUnknown ***cells,
+ [out, retval] long *nSelectedCells
+ );
+
+ /** @brief Returns a list of column indexes currently selected (0 based).
+ @param [out] selectedColumns
+ A pointer to an array of column indexes of selected columns (each index is
+ 0 based). The array is allocated by the server with CoTaskMemAlloc and
+ freed by the client with CoTaskMemFree.
+ @param [out] nColumns
+ The number of column indexes returned; the size of the returned array.
+ @retval S_OK
+ @retval S_FALSE if there are none, [out] values are NULL and 0 respectively
+ */
+ [propget] HRESULT selectedColumns
+ (
+ [out, size_is(,*nColumns)] long **selectedColumns,
+ [out, retval] long *nColumns
+ );
+
+ /** @brief Returns a list of row indexes currently selected (0 based).
+ @param [out] selectedRows
+ An array of row indexes of selected rows (each index is 0 based). The array
+ is allocated by the server with CoTaskMemAlloc and freed by the client with
+ CoTaskMemFree.
+ @param [out] nRows
+ The number of row indexes returned; the size of the returned array.
+ @retval S_OK
+ @retval S_FALSE if there are none, [out] values are NULL and 0 respectively
+ */
+ [propget] HRESULT selectedRows
+ (
+ [out, size_is(,*nRows)] long **selectedRows,
+ [out, retval] long *nRows
+ );
+
+ /** @brief Returns the summary description of the table. The returned object could be
+ an IAccessible or an IAccessible2.
+ @param [out] accessible
+ Returns a reference to an implementation dependent accessible object
+ representing the table's summary or a NULL pointer if the table
+ does not support a summary.
+ @retval S_OK
+ @retval S_FALSE if there is nothing to return, [out] value is NULL
+ @deprecated Use the labeledBy relation
+ */
+ [propget] HRESULT summary
+ (
+ [out, retval] IUnknown **accessible
+ );
+
+ /** @brief Returns a boolean value indicating whether the specified column is
+ completely selected.
+ @param [in] column
+ 0 based index of the column for which to determine whether it is selected.
+ @param [out] isSelected
+ Returns TRUE if the specified column is selected completely and FALSE otherwise.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ [propget] HRESULT isColumnSelected
+ (
+ [in] long column,
+ [out, retval] boolean *isSelected
+ );
+
+ /** @brief Returns a boolean value indicating whether the specified row is completely
+ selected.
+ @param [in] row
+ 0 based index of the row for which to determine whether it is selected.
+ @param [out] isSelected
+ Returns TRUE if the specified row is selected completely and FALSE otherwise.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ [propget] HRESULT isRowSelected
+ (
+ [in] long row,
+ [out, retval] boolean *isSelected
+ );
+
+ /** @brief Selects a row and unselects all previously selected rows.
+
+ The behavior should mimic that of the application, but for those applications
+ which do not have a means in the GUI to select a full row of cells the behavior
+ should be as follows: First any selected rows in the table are unselected. Then
+ the entire row of cells for the specified row is selected. If any of the
+ cells in the selected row span additional rows, the cells in those rows
+ are also selected.
+ @param [in] row
+ 0 based index of the row to be selected.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ HRESULT selectRow
+ (
+ [in] long row
+ );
+
+ /** @brief Selects a column and unselects all previously selected columns.
+
+ The behavior should mimic that of the application, but for those applications
+ which do not have a means in the GUI to select a full column of cells the behavior
+ should be as follows: First any selected columns in the table are unselected. Then
+ the entire column of cells for the specified column is selected. If any of the
+ cells in the selected column span additional columns, the cells in those columns
+ are also selected.
+ @param [in] column
+ 0 based index of the column to be selected.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ HRESULT selectColumn
+ (
+ [in] long column
+ );
+
+ /** @brief Unselects one row, leaving other selected rows selected (if any).
+
+ The behavior should mimic that of the application, but for those applications
+ which do not have a means in the GUI to unselect a full row of cells the
+ behavior should be as follows: The entire row of cells for the specified
+ row is unselected. If any of the cells in the selected row span additional
+ rows, the cells in those rows are also unselected.
+ @param [in] row
+ 0 based index of the row to be unselected.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ HRESULT unselectRow
+ (
+ [in] long row
+ );
+
+ /** @brief Unselects one column, leaving other selected columns selected (if any).
+
+ The behavior should mimic that of the application, but for those applications
+ which do not have a means in the GUI to unselect a full column of cells the
+ behavior should be as follows: The entire column of cells for the specified
+ column is unselected. If any of the cells in the selected column span additional
+ columns, the cells in those columns are also unselected.
+ @param [in] column
+ 0 based index of the column to be unselected.
+ @retval S_OK
+ @retval E_INVALIDARG if bad [in] passed
+ */
+ HRESULT unselectColumn
+ (
+ [in] long column
+ );
+
+ /** @brief Returns the type and extents describing how a table changed.
+
+ Provided for use by the IA2_EVENT_TABLE_MODEL_CHANGED event handler.
+
+ This data is only guaranteed to be valid while the thread notifying the event
+ continues. Once the handler has returned, the validity of the data depends on
+ how the server manages the life cycle of its objects. Also, note that the server
+ may have different life cycle management strategies for controls depending on
+ whether or not a control manages its children. Lists, trees, and tables can have
+ a large number of children and thus it's possible that the child objects for those
+ controls would only be created as needed. Servers should document their life cycle
+ strategy as this will be of interest to assistive technology or script engines
+ accessing data out of process or from other threads. Servers only need to save the
+ most recent row and column values associated with the change and a scope of the
+ entire application is adequate.
+
+ @param [out] modelChange
+ A struct of (type(insert, delete, update), firstRow, lastRow, firstColumn, lastColumn).
+ @retval S_OK
+ @retval S_FALSE if there is nothing to return, [out] value is NULL
+ */
+ [propget] HRESULT modelChange
+ (
+ [out, retval] IA2TableModelChange *modelChange
+ );
+
+}
+/*************************************************************************
+ *
+ * File Name (AccessibleTableCell.idl)
+ *
+ * IAccessible2 IDL Specification
+ *
+ * Copyright (c) 2007, 2013 Linux Foundation
+ * Copyright (c) 2006 IBM Corporation
+ * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
+ * All rights reserved.
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * 3. Neither the name of the Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products
+ * derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This BSD License conforms to the Open Source Initiative "Simplified
+ * BSD License" as published at:
+ * http://www.opensource.org/licenses/bsd-license.php
+ *
+ * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
+ * mark may be used in accordance with the Linux Foundation Trademark
+ * Policy to indicate compliance with the IAccessible2 specification.
+ *
+ ************************************************************************/
+
+
+
+
+
+
+/** @brief This interface gives access to the cells of a two-dimensional table.
+
+ Please also refer to the IAccessibleTable2 interface.
+
+*/
+[object, uuid(594116B1-C99F-4847-AD06-0A7A86ECE645)]
+interface IAccessibleTableCell : IUnknown
+{
+
+ /** @brief Returns the number of columns occupied by this cell accessible.
+
+ The result is greater than 1 if the specified cell spans multiple columns.
+ @param [out] nColumnsSpanned
+ Returns the 1 based column extent of the specified cell.
+ @retval S_OK
+ */
+ [propget] HRESULT columnExtent
+ (
+ [out, retval] long *nColumnsSpanned
+ );
+
+ /** @brief Returns the column headers as an array of cell accessibles.
+
+ @param [out] cellAccessibles
+ Pointer to an array of references to cell accessibles. The array is allocated
+ by the server. The client must free it with CoTaskMemFree.
+ @param [out] nColumnHeaderCells
+ The number of accessibles returned; the size of the returned array.
+ @retval S_OK
+ @retval S_FALSE if there is no header, [out] values are NULL and 0 respectively
+ */
+ [propget] HRESULT columnHeaderCells
+ (
+ [out, size_is(,*nColumnHeaderCells)] IUnknown ***cellAccessibles,
+ [out, retval] long *nColumnHeaderCells
+ );
+
+ /** @brief Translates this cell accessible into the corresponding column index.
+
+ @param [out] columnIndex
+ Returns the 0 based column index of the cell of the specified cell or the index of
+ the first column if the cell spans multiple columns.
+ @retval S_OK
+ */
+ [propget] HRESULT columnIndex
+ (
+ [out, retval] long *columnIndex
+ );
+
+ /** @brief Returns the number of rows occupied by this cell accessible.
+
+ @param [out] nRowsSpanned
+ Returns the row extent of the specified cell.
+ @retval S_OK
+ */
+ [propget] HRESULT rowExtent
+ (
+ [out, retval] long *nRowsSpanned
+ );
+
+ /** @brief Returns the row headers as an array of cell accessibles.
+
+ @param [out] cellAccessibles
+ Pointer to an array of references to cell accessibles. The array is allocated
+ by the server. The client must free it with CoTaskMemFree.
+ @param [out] nRowHeaderCells
+ The number of accessibles returned; the size of the returned array.
+ @retval S_OK
+ @retval S_FALSE if there is no header, [out] values are NULL and 0 respectively
+ */
+ [propget] HRESULT rowHeaderCells
+ (
+ [out, size_is(,*nRowHeaderCells)] IUnknown ***cellAccessibles,
+ [out, retval] long *nRowHeaderCells
+ );
+
+ /** @brief Translates this cell accessible into the corresponding row index.
+
+ @param [out] rowIndex
+ Returns the 0 based row index of the specified cell or the index of
+ the first row if the cell spans multiple rows.
+ @retval S_OK
+ */
+ [propget] HRESULT rowIndex
+ (
+ [out, retval] long *rowIndex
+ );
+
+ /** @brief Returns a boolean value indicating whether this cell is selected.
+
+ @param [out] isSelected
+ Returns TRUE if the specified cell is selected and FALSE otherwise.
+ @retval S_OK
+ */
+ [propget] HRESULT isSelected
+ (
+ [out, retval] boolean *isSelected
+ );
+
+ /** @brief Gets the row and column indexes and extents of this cell accessible
+ and whether or not it is selected.
+
+ This is a convenience function. It is not mandatory to implement it.
+ @param [out] row
+ 0 based row index.
+ @param [out] column
+ 0 based column index.
+ @param [out] rowExtents
+ Number of cells spanned by this cell in this row.
+ @param [out] columnExtents
+ Number of cells spanned by this cell in this column.
+ @param [out] isSelected
+ Indicates if the specified cell is selected.
+ @retval S_OK
+ */
+ [propget] HRESULT rowColumnExtents
+ (
+ [out] long *row,
+ [out] long *column,
+ [out] long *rowExtents,
+ [out] long *columnExtents,
+ [out, retval] boolean *isSelected
+ );
+
+ /** @brief Returns a reference to the accessbile of the containing table.
+
+ @param [out] table
+ Returns a reference to the IUnknown of the containing table.
+ @retval S_OK
+ */
+ [propget] HRESULT table
+ (
+ [out, retval] IUnknown **table
+ );
+
+}
+/*************************************************************************
+ *
+ * File Name (AccessibleImage.idl)
+ *
+ * IAccessible2 IDL Specification
+ *
+ * Copyright (c) 2007, 2010 Linux Foundation
+ * Copyright (c) 2006 IBM Corporation
+ * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
+ * All rights reserved.
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * 3. Neither the name of the Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products
+ * derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This BSD License conforms to the Open Source Initiative "Simplified
+ * BSD License" as published at:
+ * http://www.opensource.org/licenses/bsd-license.php
+ *
+ * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
+ * mark may be used in accordance with the Linux Foundation Trademark
+ * Policy to indicate compliance with the IAccessible2 specification.
+ *
+ ************************************************************************/
+
+
+
+
+
+
+/** @brief This interface represents images and icons.
+
+ This interface is used for a representation of images like icons on buttons.
+ %IAccessibleImage only needs to be implemented in certain situations. Some
+ examples are:
+ <ol>
+ <li>The accessible name and description are not enough to fully
+ describe the image, e.g. when the accessible description is used to define the
+ behavior of an actionable image and the image itself conveys semantically
+ significant information.
+ <li>The user can edit the content that includes an
+ image and therefore the user needs to be able to review the image's position.
+ </ol>
+*/
+[object, uuid(FE5ABB3D-615E-4f7b-909F-5F0EDA9E8DDE)]
+interface IAccessibleImage : IUnknown
+{
+ /** @brief Returns the localized description of the image.
+ @param [out] description
+ @retval S_OK
+ @retval S_FALSE if there is nothing to return, [out] value is NULL
+ */
+ [propget] HRESULT description
+ (
+ [out, retval] BSTR *description
+ );
+
+ /** @brief Returns the coordinates of the image.
+ @param [in] coordinateType
+ Specifies whether the returned coordinates should be relative to the screen or the parent object.
+ @param [out] x
+ @param [out] y
+ @retval S_OK
+ */
+ [propget] HRESULT imagePosition
+ (
+ [in] enum IA2CoordinateType coordinateType,
+ [out] long *x,
+ [out, retval] long *y
+ );
+
+ /** @brief Returns the size of the image in units specified by parent's coordinate system.
+ @param [out] height
+ @param [out] width
+ @retval S_OK
+ */
+
+ [propget] HRESULT imageSize
+ (
+ [out] long *height,
+ [out, retval] long *width
+ );
+}
+/*************************************************************************
+ *
+ * File Name (AccessibleEventID.idl)
+ *
+ * IAccessible2 IDL Specification
+ *
+ * Copyright (c) 2007, 2010 Linux Foundation
+ * Copyright (c) 2006 IBM Corporation
+ * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
+ * All rights reserved.
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * 3. Neither the name of the Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products
+ * derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This BSD License conforms to the Open Source Initiative "Simplified
+ * BSD License" as published at:
+ * http://www.opensource.org/licenses/bsd-license.php
+ *
+ * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
+ * mark may be used in accordance with the Linux Foundation Trademark
+ * Policy to indicate compliance with the IAccessible2 specification.
+ *
+ ************************************************************************/
+
+/** %IAccessible2 specific event constants
+
+ This enum defines the event IDs fired by %IAccessible2 objects. The event IDs
+ are in addition to those used by MSAA.
+*/
+enum IA2EventID {
+
+ /** The change of the number or attributes of actions of an accessible
+ object is signaled by events of this type.
+ */
+ IA2_EVENT_ACTION_CHANGED = 0x101,
+
+ /** <b>Deprecated.</b> The active descendant of a component has changed.
+
+ Note: This event constant is misspelled and thus is deprecated and will be
+ removed in a later version. Please use the correctly spelled version which
+ follows.
+ */
+ IA2_EVENT_ACTIVE_DECENDENT_CHANGED,
+
+ /** The active descendant of a component has changed. The active descendant
+ is used in objects with transient children.
+
+ Note: Due to the fact that MSAA's WinEvents don't allow the active child index
+ to be passed on the IA2_EVENT_ACTIVE_DESCENDANT_CHANGED event the manages
+ descendants scheme can't be used. Instead the active child object has to fire
+ MSAA's EVENT_OBJECT_FOCUS. In a future release a new event mechanism may be
+ added to provide for event specific data to be passed with the event. At that
+ time the IA2_EVENT_ACTIVE_DECENDENT_CHANGED event and
+ IA2_STATE_MANAGES_DESCENDANTS state would be useful.
+ */
+ IA2_EVENT_ACTIVE_DESCENDANT_CHANGED = IA2_EVENT_ACTIVE_DECENDENT_CHANGED,
+
+ /** The document wide attributes of the document object have changed.
+ */
+ IA2_EVENT_DOCUMENT_ATTRIBUTE_CHANGED,
+
+ /** The contents of the document have changed.
+ */
+ IA2_EVENT_DOCUMENT_CONTENT_CHANGED,
+
+ /** The loading of the document has completed.
+ */
+ IA2_EVENT_DOCUMENT_LOAD_COMPLETE,
+
+ /** The loading of the document was interrupted.
+ */
+ IA2_EVENT_DOCUMENT_LOAD_STOPPED,
+
+ /** The document contents are being reloaded.
+ */
+ IA2_EVENT_DOCUMENT_RELOAD,
+
+ /** The ending index of this link within the containing string has changed.
+ */
+ IA2_EVENT_HYPERLINK_END_INDEX_CHANGED,
+
+ /** The number of anchors associated with this hyperlink object has changed.
+ */
+ IA2_EVENT_HYPERLINK_NUMBER_OF_ANCHORS_CHANGED,
+
+ /** The hyperlink selected state changed from selected to unselected or
+ from unselected to selected.
+ */
+ IA2_EVENT_HYPERLINK_SELECTED_LINK_CHANGED,
+
+ /** One of the links associated with the hypertext object has been activated.
+ */
+ IA2_EVENT_HYPERTEXT_LINK_ACTIVATED,
+
+ /** One of the links associated with the hypertext object has been selected.
+ */
+ IA2_EVENT_HYPERTEXT_LINK_SELECTED,
+
+ /** The starting index of this link within the containing string has changed.
+ */
+ IA2_EVENT_HYPERLINK_START_INDEX_CHANGED,
+
+ /** Focus has changed from one hypertext object to another, or focus moved
+ from a non-hypertext object to a hypertext object, or focus moved from a
+ hypertext object to a non-hypertext object.
+ */
+ IA2_EVENT_HYPERTEXT_CHANGED,
+
+ /** The number of hyperlinks associated with a hypertext object changed
+ */
+ IA2_EVENT_HYPERTEXT_NLINKS_CHANGED,
+
+ /** An object's attributes changed.
+ Also see ::IA2_EVENT_TEXT_ATTRIBUTE_CHANGED.
+ */
+ IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED,
+
+ /** A slide changed in a presentation document or a page boundary was
+ crossed in a word processing document.
+ */
+ IA2_EVENT_PAGE_CHANGED,
+
+ /** The caret moved from one section to the next.
+ */
+ IA2_EVENT_SECTION_CHANGED,
+
+ /** A table caption changed.
+ */
+ IA2_EVENT_TABLE_CAPTION_CHANGED,
+
+ /** A table's column description changed.
+ */
+ IA2_EVENT_TABLE_COLUMN_DESCRIPTION_CHANGED,
+
+ /** A table's column header changed.
+ */
+ IA2_EVENT_TABLE_COLUMN_HEADER_CHANGED,
+
+ /** A table's data changed.
+ */
+ IA2_EVENT_TABLE_MODEL_CHANGED,
+
+ /** A table's row description changed.
+ */
+ IA2_EVENT_TABLE_ROW_DESCRIPTION_CHANGED,
+
+ /** A table's row header changed.
+ */
+ IA2_EVENT_TABLE_ROW_HEADER_CHANGED,
+
+ /** A table's summary changed.
+ */
+ IA2_EVENT_TABLE_SUMMARY_CHANGED,
+
+ /** A text object's attributes changed.
+ Also see ::IA2_EVENT_OBJECT_ATTRIBUTE_CHANGED.
+ */
+ IA2_EVENT_TEXT_ATTRIBUTE_CHANGED,
+
+ /** The caret has moved to a new position.
+ */
+ IA2_EVENT_TEXT_CARET_MOVED,
+
+ /** <b>Deprecated.</b> This event is equivalent to ::IA2_EVENT_TEXT_UPDATED.
+ */
+ IA2_EVENT_TEXT_CHANGED,
+
+ /** The caret moved from one column to the next.
+ */
+ IA2_EVENT_TEXT_COLUMN_CHANGED,
+
+ /** Text was inserted.
+ */
+ IA2_EVENT_TEXT_INSERTED,
+
+ /** Text was removed.
+ */
+ IA2_EVENT_TEXT_REMOVED,
+
+ /** This event indicates general text changes, i.e. changes to text that are
+ exposed through the IAccessibleText interface. For compatibility with ATK/AT-SPI
+ which does not have an equivalent event, servers can alternatively fire
+ ::IA2_EVENT_TEXT_REMOVED and ::IA2_EVENT_TEXT_INSERTED.
+ */
+ IA2_EVENT_TEXT_UPDATED,
+
+ /** The text selection changed. Later versions of Microsoft development environments
+ have an equivalent event identified, EVENT_OBJECT_TEXTSELECTIONCHANGED. Servers
+ should use that if it is available and use IA2_EVENT_TEXT_SELECTION_CHANGED otherwise.
+ Clients should be prepared to respond to either event.
+
+ */
+ IA2_EVENT_TEXT_SELECTION_CHANGED,
+
+ /** A visible data event indicates the change of the visual appearance
+ of an accessible object. This includes for example most of the
+ attributes available via the IAccessibleComponent interface.
+ */
+ IA2_EVENT_VISIBLE_DATA_CHANGED
+
+};
+/*************************************************************************
+ *
+ * File Name (AccessibleApplication.idl)
+ *
+ * IAccessible2 IDL Specification
+ *
+ * Copyright (c) 2007, 2010 Linux Foundation
+ * Copyright (c) 2006 IBM Corporation
+ * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
+ * All rights reserved.
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * 3. Neither the name of the Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products
+ * derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This BSD License conforms to the Open Source Initiative "Simplified
+ * BSD License" as published at:
+ * http://www.opensource.org/licenses/bsd-license.php
+ *
+ * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
+ * mark may be used in accordance with the Linux Foundation Trademark
+ * Policy to indicate compliance with the IAccessible2 specification.
+ *
+ ************************************************************************/
+
+
+
+
+
+
+/** @brief This interface gives access to the application's name and version information.
+
+ This interface provides the AT with the information it needs to differentiate
+ this application from other applications, from other versions of this
+ application, or from other versions of this application running on different
+ versions of an accessibility bridge or accessibility toolkit.
+
+ Servers implementing IAccessible2 should provide access to the %IAccessibleApplication
+ interface via QueryService from any object so that ATs can easily determine specific
+ information about the application such as its name or version.
+*/
+[object, uuid(D49DED83-5B25-43F4-9B95-93B44595979E)]
+interface IAccessibleApplication : IUnknown
+{
+
+ /** @brief Returns the application name.
+ @param [out] name
+ @retval S_OK
+ @retval S_FALSE if there is nothing to return, [out] value is NULL
+ */
+ [propget] HRESULT appName
+ (
+ [out, retval] BSTR *name
+ );
+
+ /** @brief Returns the application version.
+ @param [out] version
+ The version string must not contain levels when it is know beforehand that
+ this information will never require a change in a client's behavior.
+ For example, use "3.6.0" rather than "3.6.0.v201005131500".
+ @retval S_OK
+ @retval S_FALSE if there is nothing to return, [out] value is NULL
+ */
+ [propget] HRESULT appVersion
+ (
+ [out, retval] BSTR *version
+ );
+
+ /** @brief Returns the toolkit/bridge name.
+ @param [out] name
+ @retval S_OK
+ @retval S_FALSE if there is nothing to return, [out] value is NULL
+ */
+ [propget] HRESULT toolkitName
+ (
+ [out, retval] BSTR *name
+ );
+
+ /** @brief Returns the toolkit/bridge version.
+ @param [out] version
+ The version string must not contain levels when it is know beforehand that
+ this information will never require a change in a client's behavior.
+ For example, use "3.6.0" rather than "3.6.0.v201005131500".
+ @retval S_OK
+ @retval S_FALSE if there is nothing to return, [out] value is NULL
+ */
+ [propget] HRESULT toolkitVersion
+ (
+ [out, retval] BSTR *version
+ );
+
+}
+
+/*************************************************************************
+ *
+ * File Name (AccessibleDocument.idl)
+ *
+ * IAccessible2 IDL Specification
+ *
+ * Copyright (c) 2013 Linux Foundation
+ * All rights reserved.
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * 3. Neither the name of the Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products
+ * derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This BSD License conforms to the Open Source Initiative "Simplified
+ * BSD License" as published at:
+ * http://www.opensource.org/licenses/bsd-license.php
+ *
+ * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
+ * mark may be used in accordance with the Linux Foundation Trademark
+ * Policy to indicate compliance with the IAccessible2 specification.
+ *
+ ************************************************************************/
+
+
+
+
+
+/** @brief This interface represents documents.
+
+ This interface is used for a representation of documents.
+*/
+[object, uuid(C48C7FCF-4AB5-4056-AFA6-902D6E1D1149)]
+interface IAccessibleDocument : IUnknown
+{
+ /** @brief Returns the most recently used anchor target within a document.
+
+ A document's most recently targeted in-page anchor is returned. A typical use
+ of this method is to fetch the anchor target within an HTML document. In this
+ case anchor targets are those which have been defined with the &lt;a&gt; tag.
+
+ @param [out] accessible
+ @retval S_OK
+ @retval S_FALSE if there are no existing valid anchor targets, [out] value is NULL.
+ */
+ [propget] HRESULT anchorTarget
+ (
+ [out, retval] IUnknown **accessible
+ );
+
+}
+/*************************************************************************
+ *
+ * File Name (IA2TypeLibrary.idl)
+ *
+ * IAccessible2 IDL Specification
+ *
+ * Copyright (c) 2007, 2012 Linux Foundation
+ * Copyright (c) 2006 IBM Corporation
+ * Copyright (c) 2000, 2006 Sun Microsystems, Inc.
+ * All rights reserved.
+ *
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *
+ * 2. Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials
+ * provided with the distribution.
+ *
+ * 3. Neither the name of the Linux Foundation nor the names of its
+ * contributors may be used to endorse or promote products
+ * derived from this software without specific prior written
+ * permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND
+ * CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,
+ * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+ * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
+ * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
+ * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * This BSD License conforms to the Open Source Initiative "Simplified
+ * BSD License" as published at:
+ * http://www.opensource.org/licenses/bsd-license.php
+ *
+ * IAccessible2 is a trademark of the Linux Foundation. The IAccessible2
+ * mark may be used in accordance with the Linux Foundation Trademark
+ * Policy to indicate compliance with the IAccessible2 specification.
+ *
+ ************************************************************************/
+
+// This is not a standalone file. It is to be appended to the end of the
+// merged IDL file.
+
+cpp_quote("")
+cpp_quote("// Type Library Definitions")
+cpp_quote("")
+
+[
+ uuid(CE3F726E-D1D3-44FE-B995-FF1DB3B48B2B),
+ helpstring("IAccessible2 Type Library"),
+ version(1.3),
+ hidden
+]
+
+library IAccessible2Lib
+{
+ importlib ("stdole2.tlb");
+ importlib ("oleacc.dll");
+ interface IAccessible2;
+ interface IAccessible2_2;
+ interface IAccessibleAction;
+ interface IAccessibleApplication;
+ interface IAccessibleComponent;
+ interface IAccessibleDocument;
+ interface IAccessibleEditableText;
+ interface IAccessibleHyperlink;
+ interface IAccessibleHypertext;
+ interface IAccessibleHypertext2;
+ interface IAccessibleImage;
+ interface IAccessibleRelation;
+ interface IAccessibleTable;
+ interface IAccessibleTable2;
+ interface IAccessibleTableCell;
+ interface IAccessibleText;
+ interface IAccessibleText2;
+ interface IAccessibleValue;
+ enum IA2CoordinateType;
+ enum IA2EventID;
+ enum IA2Role;
+ enum IA2ScrollType;
+ enum IA2States;
+ enum IA2TableModelChangeType;
+ enum IA2TextBoundaryType;
+ enum IA2TextSpecialOffsets;
+}
diff --git a/src/3rdparty/sqlite/shell.c b/src/3rdparty/sqlite/shell.c
index a74dcdb85d..3ca4b094bc 100644
--- a/src/3rdparty/sqlite/shell.c
+++ b/src/3rdparty/sqlite/shell.c
@@ -33,6 +33,9 @@
#include <stdio.h>
#include <assert.h>
#include "sqlite3.h"
+#if SQLITE_USER_AUTHENTICATION
+# include "sqlite3userauth.h"
+#endif
#include <ctype.h>
#include <stdarg.h>
@@ -432,19 +435,24 @@ static char *one_input_line(FILE *in, char *zPrior, int isContinuation){
return zResult;
}
-struct previous_mode_data {
- int valid; /* Is there legit data in here? */
- int mode;
- int showHeader;
- int colWidth[100];
+/*
+** Shell output mode information from before ".explain on",
+** saved so that it can be restored by ".explain off"
+*/
+typedef struct SavedModeInfo SavedModeInfo;
+struct SavedModeInfo {
+ int valid; /* Is there legit data in here? */
+ int mode; /* Mode prior to ".explain on" */
+ int showHeader; /* The ".header" setting prior to ".explain on" */
+ int colWidth[100]; /* Column widths prior to ".explain on" */
};
/*
-** An pointer to an instance of this structure is passed from
-** the main program to the callback. This is used to communicate
-** state and mode information.
+** State information about the database connection is contained in an
+** instance of the following structure.
*/
-struct callback_data {
+typedef struct ShellState ShellState;
+struct ShellState {
sqlite3 *db; /* The database */
int echoOn; /* True to echo input commands */
int autoEQP; /* Run EXPLAIN QUERY PLAN prior to seach SQL stmt */
@@ -457,6 +465,7 @@ struct callback_data {
int mode; /* An output mode setting */
int writableSchema; /* True if PRAGMA writable_schema=ON */
int showHeader; /* True to show column names in List or Column mode */
+ unsigned shellFlgs; /* Various flags */
char *zDestTable; /* Name of destination table when MODE_Insert */
char separator[20]; /* Separator character for MODE_List */
char newline[20]; /* Record separator in MODE_Csv */
@@ -464,9 +473,7 @@ struct callback_data {
int actualWidth[100]; /* Actual width of each column */
char nullvalue[20]; /* The text to print when a NULL comes back from
** the database */
- struct previous_mode_data explainPrev;
- /* Holds the mode information just before
- ** .explain ON */
+ SavedModeInfo normalMode;/* Holds the mode just before .explain ON */
char outfile[FILENAME_MAX]; /* Filename for *out */
const char *zDbFilename; /* name of the database file */
char *zFreeOnClose; /* Filename to free when closing */
@@ -479,6 +486,13 @@ struct callback_data {
};
/*
+** These are the allowed shellFlgs values
+*/
+#define SHFLG_Scratch 0x00001 /* The --scratch option is used */
+#define SHFLG_Pagecache 0x00002 /* The --pagecache option is used */
+#define SHFLG_Lookaside 0x00004 /* Lookaside memory is used */
+
+/*
** These are the allowed modes.
*/
#define MODE_Line 0 /* One column per line. Blank line between records */
@@ -522,7 +536,7 @@ static int strlen30(const char *z){
** A callback for the sqlite3_log() interface.
*/
static void shellLog(void *pArg, int iErrCode, const char *zMsg){
- struct callback_data *p = (struct callback_data*)pArg;
+ ShellState *p = (ShellState*)pArg;
if( p->pLog==0 ) return;
fprintf(p->pLog, "(%d) %s\n", iErrCode, zMsg);
fflush(p->pLog);
@@ -664,7 +678,7 @@ static const char needCsvQuote[] = {
** the null value. Strings are quoted if necessary. The separator
** is only issued if bSep is true.
*/
-static void output_csv(struct callback_data *p, const char *z, int bSep){
+static void output_csv(ShellState *p, const char *z, int bSep){
FILE *out = p->out;
if( z==0 ){
fprintf(out,"%s",p->nullvalue);
@@ -713,7 +727,7 @@ static void interrupt_handler(int NotUsed){
*/
static int shell_callback(void *pArg, int nArg, char **azArg, char **azCol, int *aiType){
int i;
- struct callback_data *p = (struct callback_data*)pArg;
+ ShellState *p = (ShellState*)pArg;
switch( p->mode ){
case MODE_Line: {
@@ -923,11 +937,11 @@ static int callback(void *pArg, int nArg, char **azArg, char **azCol){
}
/*
-** Set the destination table field of the callback_data structure to
+** Set the destination table field of the ShellState structure to
** the name of the table given. Escape any quote characters in the
** table name.
*/
-static void set_table_name(struct callback_data *p, const char *zName){
+static void set_table_name(ShellState *p, const char *zName){
int i, n;
int needQuote;
char *z;
@@ -1017,7 +1031,7 @@ static char *appendText(char *zIn, char const *zAppend, char quote){
** won't consume the semicolon terminator.
*/
static int run_table_dump_query(
- struct callback_data *p, /* Query context */
+ ShellState *p, /* Query context */
const char *zSelect, /* SELECT statement to extract content */
const char *zFirstRow /* Print before first row, if not NULL */
){
@@ -1080,7 +1094,7 @@ static char *save_err_msg(
*/
static int display_stats(
sqlite3 *db, /* Database to query */
- struct callback_data *pArg, /* Pointer to struct callback_data */
+ ShellState *pArg, /* Pointer to ShellState */
int bReset /* True to reset the stats */
){
int iCur;
@@ -1094,21 +1108,19 @@ static int display_stats(
iHiwtr = iCur = -1;
sqlite3_status(SQLITE_STATUS_MALLOC_COUNT, &iCur, &iHiwtr, bReset);
fprintf(pArg->out, "Number of Outstanding Allocations: %d (max %d)\n", iCur, iHiwtr);
-/*
-** Not currently used by the CLI.
-** iHiwtr = iCur = -1;
-** sqlite3_status(SQLITE_STATUS_PAGECACHE_USED, &iCur, &iHiwtr, bReset);
-** fprintf(pArg->out, "Number of Pcache Pages Used: %d (max %d) pages\n", iCur, iHiwtr);
-*/
+ if( pArg->shellFlgs & SHFLG_Pagecache ){
+ iHiwtr = iCur = -1;
+ sqlite3_status(SQLITE_STATUS_PAGECACHE_USED, &iCur, &iHiwtr, bReset);
+ fprintf(pArg->out, "Number of Pcache Pages Used: %d (max %d) pages\n", iCur, iHiwtr);
+ }
iHiwtr = iCur = -1;
sqlite3_status(SQLITE_STATUS_PAGECACHE_OVERFLOW, &iCur, &iHiwtr, bReset);
fprintf(pArg->out, "Number of Pcache Overflow Bytes: %d (max %d) bytes\n", iCur, iHiwtr);
-/*
-** Not currently used by the CLI.
-** iHiwtr = iCur = -1;
-** sqlite3_status(SQLITE_STATUS_SCRATCH_USED, &iCur, &iHiwtr, bReset);
-** fprintf(pArg->out, "Number of Scratch Allocations Used: %d (max %d)\n", iCur, iHiwtr);
-*/
+ if( pArg->shellFlgs & SHFLG_Scratch ){
+ iHiwtr = iCur = -1;
+ sqlite3_status(SQLITE_STATUS_SCRATCH_USED, &iCur, &iHiwtr, bReset);
+ fprintf(pArg->out, "Number of Scratch Allocations Used: %d (max %d)\n", iCur, iHiwtr);
+ }
iHiwtr = iCur = -1;
sqlite3_status(SQLITE_STATUS_SCRATCH_OVERFLOW, &iCur, &iHiwtr, bReset);
fprintf(pArg->out, "Number of Scratch Overflow Bytes: %d (max %d) bytes\n", iCur, iHiwtr);
@@ -1129,15 +1141,17 @@ static int display_stats(
}
if( pArg && pArg->out && db ){
- iHiwtr = iCur = -1;
- sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_USED, &iCur, &iHiwtr, bReset);
- fprintf(pArg->out, "Lookaside Slots Used: %d (max %d)\n", iCur, iHiwtr);
- sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_HIT, &iCur, &iHiwtr, bReset);
- fprintf(pArg->out, "Successful lookaside attempts: %d\n", iHiwtr);
- sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE, &iCur, &iHiwtr, bReset);
- fprintf(pArg->out, "Lookaside failures due to size: %d\n", iHiwtr);
- sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL, &iCur, &iHiwtr, bReset);
- fprintf(pArg->out, "Lookaside failures due to OOM: %d\n", iHiwtr);
+ if( pArg->shellFlgs & SHFLG_Lookaside ){
+ iHiwtr = iCur = -1;
+ sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_USED, &iCur, &iHiwtr, bReset);
+ fprintf(pArg->out, "Lookaside Slots Used: %d (max %d)\n", iCur, iHiwtr);
+ sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_HIT, &iCur, &iHiwtr, bReset);
+ fprintf(pArg->out, "Successful lookaside attempts: %d\n", iHiwtr);
+ sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE, &iCur, &iHiwtr, bReset);
+ fprintf(pArg->out, "Lookaside failures due to size: %d\n", iHiwtr);
+ sqlite3_db_status(db, SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL, &iCur, &iHiwtr, bReset);
+ fprintf(pArg->out, "Lookaside failures due to OOM: %d\n", iHiwtr);
+ }
iHiwtr = iCur = -1;
sqlite3_db_status(db, SQLITE_DBSTATUS_CACHE_USED, &iCur, &iHiwtr, bReset);
fprintf(pArg->out, "Pager Heap Usage: %d bytes\n", iCur); iHiwtr = iCur = -1;
@@ -1187,7 +1201,7 @@ static int str_in_array(const char *zStr, const char **azArray){
/*
** If compiled statement pSql appears to be an EXPLAIN statement, allocate
-** and populate the callback_data.aiIndent[] array with the number of
+** and populate the ShellState.aiIndent[] array with the number of
** spaces each opcode should be indented before it is output.
**
** The indenting rules are:
@@ -1203,7 +1217,7 @@ static int str_in_array(const char *zStr, const char **azArray){
** then indent all opcodes between the earlier instruction
** and "Goto" by 2 spaces.
*/
-static void explain_data_prepare(struct callback_data *p, sqlite3_stmt *pSql){
+static void explain_data_prepare(ShellState *p, sqlite3_stmt *pSql){
const char *zSql; /* The text of the SQL statement */
const char *z; /* Used to check if this is an EXPLAIN */
int *abYield = 0; /* True if op is an OP_Yield */
@@ -1263,7 +1277,7 @@ static void explain_data_prepare(struct callback_data *p, sqlite3_stmt *pSql){
/*
** Free the array allocated by explain_data_prepare().
*/
-static void explain_data_delete(struct callback_data *p){
+static void explain_data_delete(ShellState *p){
sqlite3_free(p->aiIndent);
p->aiIndent = 0;
p->nIndent = 0;
@@ -1280,12 +1294,12 @@ static void explain_data_delete(struct callback_data *p){
** and callback data argument.
*/
static int shell_exec(
- sqlite3 *db, /* An open database */
- const char *zSql, /* SQL to be evaluated */
+ sqlite3 *db, /* An open database */
+ const char *zSql, /* SQL to be evaluated */
int (*xCallback)(void*,int,char**,char**,int*), /* Callback function */
- /* (not the same as sqlite3_exec) */
- struct callback_data *pArg, /* Pointer to struct callback_data */
- char **pzErrMsg /* Error msg written here */
+ /* (not the same as sqlite3_exec) */
+ ShellState *pArg, /* Pointer to ShellState */
+ char **pzErrMsg /* Error msg written here */
){
sqlite3_stmt *pStmt = NULL; /* Statement to execute. */
int rc = SQLITE_OK; /* Return Code */
@@ -1339,15 +1353,6 @@ static int shell_exec(
sqlite3_free(zEQP);
}
- /* Output TESTCTRL_EXPLAIN text of requested */
- if( pArg && pArg->mode==MODE_Explain ){
- const char *zExplain = 0;
- sqlite3_test_control(SQLITE_TESTCTRL_EXPLAIN_STMT, pStmt, &zExplain);
- if( zExplain && zExplain[0] ){
- fprintf(pArg->out, "%s", zExplain);
- }
- }
-
/* If the shell is currently in ".explain" mode, gather the extra
** data required to add indents to the output.*/
if( pArg && pArg->mode==MODE_Explain ){
@@ -1453,7 +1458,7 @@ static int dump_callback(void *pArg, int nArg, char **azArg, char **azCol){
const char *zType;
const char *zSql;
const char *zPrepStmt = 0;
- struct callback_data *p = (struct callback_data *)pArg;
+ ShellState *p = (ShellState *)pArg;
UNUSED_PARAMETER(azCol);
if( nArg!=3 ) return 1;
@@ -1549,7 +1554,7 @@ static int dump_callback(void *pArg, int nArg, char **azArg, char **azCol){
** "ORDER BY rowid DESC" to the end.
*/
static int run_schema_dump_query(
- struct callback_data *p,
+ ShellState *p,
const char *zQuery
){
int rc;
@@ -1649,7 +1654,7 @@ static char zHelp[] =
;
/* Forward reference */
-static int process_input(struct callback_data *p, FILE *in);
+static int process_input(ShellState *p, FILE *in);
/*
** Implementation of the "readfile(X)" SQL function. The entire content
** of the file named X is read and returned as a BLOB. NULL is returned
@@ -1715,7 +1720,7 @@ static void writefileFunc(
** Make sure the database is open. If it is not, then open it. If
** the database fails to open, print an error message and exit.
*/
-static void open_db(struct callback_data *p, int keepAlive){
+static void open_db(ShellState *p, int keepAlive){
if( p->db==0 ){
sqlite3_initialize();
sqlite3_open(p->zDbFilename, &p->db);
@@ -1896,7 +1901,11 @@ static FILE *output_file_open(const char *zFile){
*/
static void sql_trace_callback(void *pArg, const char *z){
FILE *f = (FILE*)pArg;
- if( f ) fprintf(f, "%s\n", z);
+ if( f ){
+ int i = (int)strlen(z);
+ while( i>0 && z[i-1]==';' ){ i--; }
+ fprintf(f, "%.*s;\n", i, z);
+ }
}
/*
@@ -2014,7 +2023,7 @@ static char *csv_read_one_field(CSVReader *p){
** work for WITHOUT ROWID tables.
*/
static void tryToCloneData(
- struct callback_data *p,
+ ShellState *p,
sqlite3 *newDb,
const char *zTable
){
@@ -2127,10 +2136,10 @@ end_data_xfer:
** sqlite_master table, try again moving backwards.
*/
static void tryToCloneSchema(
- struct callback_data *p,
+ ShellState *p,
sqlite3 *newDb,
const char *zWhere,
- void (*xForEach)(struct callback_data*,sqlite3*,const char*)
+ void (*xForEach)(ShellState*,sqlite3*,const char*)
){
sqlite3_stmt *pQuery = 0;
char *zQuery = 0;
@@ -2201,7 +2210,7 @@ end_schema_xfer:
** as possible out of the main database (which might be corrupt) and write it
** into zNewDb.
*/
-static void tryToClone(struct callback_data *p, const char *zNewDb){
+static void tryToClone(ShellState *p, const char *zNewDb){
int rc;
sqlite3 *newDb = 0;
if( access(zNewDb,0)==0 ){
@@ -2226,7 +2235,7 @@ static void tryToClone(struct callback_data *p, const char *zNewDb){
/*
** Change the output file back to stdout
*/
-static void output_reset(struct callback_data *p){
+static void output_reset(ShellState *p){
if( p->outfile[0]=='|' ){
pclose(p->out);
}else{
@@ -2242,7 +2251,7 @@ static void output_reset(struct callback_data *p){
**
** Return 1 on error, 2 to exit, and 0 otherwise.
*/
-static int do_meta_command(char *zLine, struct callback_data *p){
+static int do_meta_command(char *zLine, ShellState *p){
int i = 1;
int nArg = 0;
int n, c;
@@ -2360,7 +2369,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){
}else
if( c=='d' && n>1 && strncmp(azArg[0], "databases", n)==0 ){
- struct callback_data data;
+ ShellState data;
char *zErrMsg = 0;
open_db(p, 0);
memcpy(&data, p, sizeof(data));
@@ -2458,11 +2467,11 @@ static int do_meta_command(char *zLine, struct callback_data *p){
if( c=='e' && strncmp(azArg[0], "explain", n)==0 ){
int val = nArg>=2 ? booleanValue(azArg[1]) : 1;
if(val == 1) {
- if(!p->explainPrev.valid) {
- p->explainPrev.valid = 1;
- p->explainPrev.mode = p->mode;
- p->explainPrev.showHeader = p->showHeader;
- memcpy(p->explainPrev.colWidth,p->colWidth,sizeof(p->colWidth));
+ if(!p->normalMode.valid) {
+ p->normalMode.valid = 1;
+ p->normalMode.mode = p->mode;
+ p->normalMode.showHeader = p->showHeader;
+ memcpy(p->normalMode.colWidth,p->colWidth,sizeof(p->colWidth));
}
/* We could put this code under the !p->explainValid
** condition so that it does not execute if we are already in
@@ -2482,16 +2491,16 @@ static int do_meta_command(char *zLine, struct callback_data *p){
p->colWidth[5] = 13; /* P4 */
p->colWidth[6] = 2; /* P5 */
p->colWidth[7] = 13; /* Comment */
- }else if (p->explainPrev.valid) {
- p->explainPrev.valid = 0;
- p->mode = p->explainPrev.mode;
- p->showHeader = p->explainPrev.showHeader;
- memcpy(p->colWidth,p->explainPrev.colWidth,sizeof(p->colWidth));
+ }else if (p->normalMode.valid) {
+ p->normalMode.valid = 0;
+ p->mode = p->normalMode.mode;
+ p->showHeader = p->normalMode.showHeader;
+ memcpy(p->colWidth,p->normalMode.colWidth,sizeof(p->colWidth));
}
}else
if( c=='f' && strncmp(azArg[0], "fullschema", n)==0 ){
- struct callback_data data;
+ ShellState data;
char *zErrMsg = 0;
int doStats = 0;
if( nArg!=1 ){
@@ -2508,7 +2517,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){
" (SELECT sql sql, type type, tbl_name tbl_name, name name, rowid x"
" FROM sqlite_master UNION ALL"
" SELECT sql, type, tbl_name, name, rowid FROM sqlite_temp_master) "
- "WHERE type!='meta' AND sql NOTNULL AND name NOT LIKE 'sqlite_%'"
+ "WHERE type!='meta' AND sql NOTNULL AND name NOT LIKE 'sqlite_%' "
"ORDER BY rowid",
callback, &data, &zErrMsg
);
@@ -2712,7 +2721,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){
}else
if( c=='i' && strncmp(azArg[0], "indices", n)==0 ){
- struct callback_data data;
+ ShellState data;
char *zErrMsg = 0;
open_db(p, 0);
memcpy(&data, p, sizeof(data));
@@ -3006,7 +3015,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){
}else
if( c=='s' && strncmp(azArg[0], "schema", n)==0 ){
- struct callback_data data;
+ ShellState data;
char *zErrMsg = 0;
open_db(p, 0);
memcpy(&data, p, sizeof(data));
@@ -3062,7 +3071,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){
" (SELECT sql sql, type type, tbl_name tbl_name, name name, rowid x"
" FROM sqlite_master UNION ALL"
" SELECT sql, type, tbl_name, name, rowid FROM sqlite_temp_master) "
- "WHERE type!='meta' AND sql NOTNULL AND name NOT LIKE 'sqlite_%'"
+ "WHERE type!='meta' AND sql NOTNULL AND name NOT LIKE 'sqlite_%' "
"ORDER BY rowid",
callback, &data, &zErrMsg
);
@@ -3083,6 +3092,15 @@ static int do_meta_command(char *zLine, struct callback_data *p){
}
}else
+
+#if defined(SQLITE_DEBUG) && defined(SQLITE_ENABLE_SELECTTRACE)
+ if( c=='s' && n==11 && strncmp(azArg[0], "selecttrace", n)==0 ){
+ extern int sqlite3SelectTrace;
+ sqlite3SelectTrace = nArg>=2 ? booleanValue(azArg[1]) : 0xff;
+ }else
+#endif
+
+
#ifdef SQLITE_DEBUG
/* Undocumented commands for internal testing. Subject to change
** without notice. */
@@ -3148,7 +3166,7 @@ static int do_meta_command(char *zLine, struct callback_data *p){
}
fprintf(p->out,"%9.9s: %s\n","echo", p->echoOn ? "on" : "off");
fprintf(p->out,"%9.9s: %s\n","eqp", p->autoEQP ? "on" : "off");
- fprintf(p->out,"%9.9s: %s\n","explain", p->explainPrev.valid ? "on" :"off");
+ fprintf(p->out,"%9.9s: %s\n","explain", p->normalMode.valid ? "on" :"off");
fprintf(p->out,"%9.9s: %s\n","headers", p->showHeader ? "on" : "off");
fprintf(p->out,"%9.9s: %s\n","mode", modeDescr[p->mode]);
fprintf(p->out,"%9.9s: ", "nullvalue");
@@ -3420,6 +3438,71 @@ static int do_meta_command(char *zLine, struct callback_data *p){
#endif
}else
+#if SQLITE_USER_AUTHENTICATION
+ if( c=='u' && strncmp(azArg[0], "user", n)==0 ){
+ if( nArg<2 ){
+ fprintf(stderr, "Usage: .user SUBCOMMAND ...\n");
+ rc = 1;
+ goto meta_command_exit;
+ }
+ open_db(p, 0);
+ if( strcmp(azArg[1],"login")==0 ){
+ if( nArg!=4 ){
+ fprintf(stderr, "Usage: .user login USER PASSWORD\n");
+ rc = 1;
+ goto meta_command_exit;
+ }
+ rc = sqlite3_user_authenticate(p->db, azArg[2], azArg[3],
+ (int)strlen(azArg[3]));
+ if( rc ){
+ fprintf(stderr, "Authentication failed for user %s\n", azArg[2]);
+ rc = 1;
+ }
+ }else if( strcmp(azArg[1],"add")==0 ){
+ if( nArg!=5 ){
+ fprintf(stderr, "Usage: .user add USER PASSWORD ISADMIN\n");
+ rc = 1;
+ goto meta_command_exit;
+ }
+ rc = sqlite3_user_add(p->db, azArg[2],
+ azArg[3], (int)strlen(azArg[3]),
+ booleanValue(azArg[4]));
+ if( rc ){
+ fprintf(stderr, "User-Add failed: %d\n", rc);
+ rc = 1;
+ }
+ }else if( strcmp(azArg[1],"edit")==0 ){
+ if( nArg!=5 ){
+ fprintf(stderr, "Usage: .user edit USER PASSWORD ISADMIN\n");
+ rc = 1;
+ goto meta_command_exit;
+ }
+ rc = sqlite3_user_change(p->db, azArg[2],
+ azArg[3], (int)strlen(azArg[3]),
+ booleanValue(azArg[4]));
+ if( rc ){
+ fprintf(stderr, "User-Edit failed: %d\n", rc);
+ rc = 1;
+ }
+ }else if( strcmp(azArg[1],"delete")==0 ){
+ if( nArg!=3 ){
+ fprintf(stderr, "Usage: .user delete USER\n");
+ rc = 1;
+ goto meta_command_exit;
+ }
+ rc = sqlite3_user_delete(p->db, azArg[2]);
+ if( rc ){
+ fprintf(stderr, "User-Delete failed: %d\n", rc);
+ rc = 1;
+ }
+ }else{
+ fprintf(stderr, "Usage: .user login|add|edit|delete ...\n");
+ rc = 1;
+ goto meta_command_exit;
+ }
+ }else
+#endif /* SQLITE_USER_AUTHENTICATION */
+
if( c=='v' && strncmp(azArg[0], "version", n)==0 ){
fprintf(p->out, "SQLite %s %s\n" /*extra-version-info*/,
sqlite3_libversion(), sqlite3_sourceid());
@@ -3540,7 +3623,7 @@ static int line_is_complete(char *zSql, int nSql){
**
** Return the number of errors.
*/
-static int process_input(struct callback_data *p, FILE *in){
+static int process_input(ShellState *p, FILE *in){
char *zLine = 0; /* A single input line */
char *zSql = 0; /* Accumulated SQL text */
int nLine; /* Length of current line */
@@ -3642,6 +3725,7 @@ static int process_input(struct callback_data *p, FILE *in){
if( nSql ){
if( !_all_whitespace(zSql) ){
fprintf(stderr, "Error: incomplete SQL: %s\n", zSql);
+ errCnt++;
}
free(zSql);
}
@@ -3719,7 +3803,7 @@ static char *find_home_dir(void){
** Returns the number of errors.
*/
static int process_sqliterc(
- struct callback_data *p, /* Configuration data */
+ ShellState *p, /* Configuration data */
const char *sqliterc_override /* Name of config file. NULL to use default */
){
char *home_dir = NULL;
@@ -3772,12 +3856,15 @@ static const char zOptions[] =
" -interactive force interactive I/O\n"
" -line set output mode to 'line'\n"
" -list set output mode to 'list'\n"
+ " -lookaside SIZE N use N entries of SZ bytes for lookaside memory\n"
" -mmap N default mmap size set to N\n"
#ifdef SQLITE_ENABLE_MULTIPLEX
" -multiplex enable the multiplexor VFS\n"
#endif
" -newline SEP set newline character(s) for CSV\n"
" -nullvalue TEXT set text string for NULL values. Default ''\n"
+ " -pagecache SIZE N use N slots of SZ bytes each for page cache memory\n"
+ " -scratch SIZE N use N slots of SZ bytes each for scratch memory\n"
" -separator SEP set output field separator. Default: '|'\n"
" -stats print memory stats before each finalize\n"
" -version show SQLite version\n"
@@ -3802,17 +3889,18 @@ static void usage(int showDetail){
/*
** Initialize the state information in data
*/
-static void main_init(struct callback_data *data) {
+static void main_init(ShellState *data) {
memset(data, 0, sizeof(*data));
data->mode = MODE_List;
memcpy(data->separator,"|", 2);
memcpy(data->newline,"\r\n", 3);
data->showHeader = 0;
+ data->shellFlgs = SHFLG_Lookaside;
sqlite3_config(SQLITE_CONFIG_URI, 1);
sqlite3_config(SQLITE_CONFIG_LOG, shellLog, data);
+ sqlite3_config(SQLITE_CONFIG_MULTITHREAD);
sqlite3_snprintf(sizeof(mainPrompt), mainPrompt,"sqlite> ");
sqlite3_snprintf(sizeof(continuePrompt), continuePrompt," ...> ");
- sqlite3_config(SQLITE_CONFIG_SINGLETHREAD);
}
/*
@@ -3850,7 +3938,7 @@ static char *cmdline_option_value(int argc, char **argv, int i){
int main(int argc, char **argv){
char *zErrMsg = 0;
- struct callback_data data;
+ ShellState data;
const char *zInitFile = 0;
char *zFirstCmd = 0;
int i;
@@ -3921,6 +4009,33 @@ int main(int argc, char **argv){
if( szHeap>0x7fff0000 ) szHeap = 0x7fff0000;
sqlite3_config(SQLITE_CONFIG_HEAP, malloc((int)szHeap), (int)szHeap, 64);
#endif
+ }else if( strcmp(z,"-scratch")==0 ){
+ int n, sz;
+ sz = (int)integerValue(cmdline_option_value(argc,argv,++i));
+ if( sz>400000 ) sz = 400000;
+ if( sz<2500 ) sz = 2500;
+ n = (int)integerValue(cmdline_option_value(argc,argv,++i));
+ if( n>10 ) n = 10;
+ if( n<1 ) n = 1;
+ sqlite3_config(SQLITE_CONFIG_SCRATCH, malloc(n*sz+1), sz, n);
+ data.shellFlgs |= SHFLG_Scratch;
+ }else if( strcmp(z,"-pagecache")==0 ){
+ int n, sz;
+ sz = (int)integerValue(cmdline_option_value(argc,argv,++i));
+ if( sz>70000 ) sz = 70000;
+ if( sz<800 ) sz = 800;
+ n = (int)integerValue(cmdline_option_value(argc,argv,++i));
+ if( n<10 ) n = 10;
+ sqlite3_config(SQLITE_CONFIG_PAGECACHE, malloc(n*sz+1), sz, n);
+ data.shellFlgs |= SHFLG_Pagecache;
+ }else if( strcmp(z,"-lookaside")==0 ){
+ int n, sz;
+ sz = (int)integerValue(cmdline_option_value(argc,argv,++i));
+ if( sz<0 ) sz = 0;
+ n = (int)integerValue(cmdline_option_value(argc,argv,++i));
+ if( n<0 ) n = 0;
+ sqlite3_config(SQLITE_CONFIG_LOOKASIDE, sz, n);
+ if( sz*n==0 ) data.shellFlgs &= ~SHFLG_Lookaside;
#ifdef SQLITE_ENABLE_VFSTRACE
}else if( strcmp(z,"-vfstrace")==0 ){
extern int vfstrace_register(
@@ -4036,6 +4151,12 @@ int main(int argc, char **argv){
stdin_is_interactive = 0;
}else if( strcmp(z,"-heap")==0 ){
i++;
+ }else if( strcmp(z,"-scratch")==0 ){
+ i+=2;
+ }else if( strcmp(z,"-pagecache")==0 ){
+ i+=2;
+ }else if( strcmp(z,"-lookaside")==0 ){
+ i+=2;
}else if( strcmp(z,"-mmap")==0 ){
i++;
}else if( strcmp(z,"-vfs")==0 ){
diff --git a/src/3rdparty/sqlite/sqlite3.c b/src/3rdparty/sqlite/sqlite3.c
index 28cfcac389..9e040cfa25 100644
--- a/src/3rdparty/sqlite/sqlite3.c
+++ b/src/3rdparty/sqlite/sqlite3.c
@@ -1,6 +1,6 @@
/******************************************************************************
** This file is an amalgamation of many separate C source files from SQLite
-** version 3.8.6. By combining all the individual C code files into this
+** version 3.8.7.4. By combining all the individual C code files into this
** single large file, the entire code can be compiled as a single translation
** unit. This allows many compilers to do optimizations that would not be
** possible if the files were compiled separately. Performance improvements
@@ -75,6 +75,15 @@
# define _LARGEFILE_SOURCE 1
#endif
+/* Needed for various definitions... */
+#if defined(__GNUC__) && !defined(_GNU_SOURCE)
+# define _GNU_SOURCE
+#endif
+
+#if defined(__OpenBSD__) && !defined(_BSD_SOURCE)
+# define _BSD_SOURCE
+#endif
+
/*
** For MinGW, check to see if we can include the header file containing its
** version information, among other things. Normally, this internal MinGW
@@ -222,9 +231,9 @@ extern "C" {
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
** [sqlite_version()] and [sqlite_source_id()].
*/
-#define SQLITE_VERSION "3.8.6"
-#define SQLITE_VERSION_NUMBER 3008006
-#define SQLITE_SOURCE_ID "2014-08-15 11:46:33 9491ba7d738528f168657adb43a198238abde19e"
+#define SQLITE_VERSION "3.8.7.4"
+#define SQLITE_VERSION_NUMBER 3008007
+#define SQLITE_SOURCE_ID "2014-12-09 01:34:36 f66f7a17b78ba617acde90fc810107f34f1a1f2e"
/*
** CAPI3REF: Run-Time Library Version Numbers
@@ -612,6 +621,7 @@ SQLITE_API int sqlite3_exec(
#define SQLITE_NOTICE_RECOVER_WAL (SQLITE_NOTICE | (1<<8))
#define SQLITE_NOTICE_RECOVER_ROLLBACK (SQLITE_NOTICE | (2<<8))
#define SQLITE_WARNING_AUTOINDEX (SQLITE_WARNING | (1<<8))
+#define SQLITE_AUTH_USER (SQLITE_AUTH | (1<<8))
/*
** CAPI3REF: Flags For File Open Operations
@@ -2214,7 +2224,7 @@ SQLITE_API int sqlite3_busy_handler(sqlite3*, int(*)(void*,int), void*);
** turns off all busy handlers.
**
** ^(There can only be a single busy handler for a particular
-** [database connection] any any given moment. If another busy handler
+** [database connection] at any given moment. If another busy handler
** was defined (using [sqlite3_busy_handler()]) prior to calling
** this routine, that other busy handler is cleared.)^
**
@@ -2418,6 +2428,10 @@ SQLITE_API char *sqlite3_vsnprintf(int,char*,const char*, va_list);
** sqlite3_malloc() is zero or negative then sqlite3_malloc() returns
** a NULL pointer.
**
+** ^The sqlite3_malloc64(N) routine works just like
+** sqlite3_malloc(N) except that N is an unsigned 64-bit integer instead
+** of a signed 32-bit integer.
+**
** ^Calling sqlite3_free() with a pointer previously returned
** by sqlite3_malloc() or sqlite3_realloc() releases that memory so
** that it might be reused. ^The sqlite3_free() routine is
@@ -2429,24 +2443,38 @@ SQLITE_API char *sqlite3_vsnprintf(int,char*,const char*, va_list);
** might result if sqlite3_free() is called with a non-NULL pointer that
** was not obtained from sqlite3_malloc() or sqlite3_realloc().
**
-** ^(The sqlite3_realloc() interface attempts to resize a
-** prior memory allocation to be at least N bytes, where N is the
-** second parameter. The memory allocation to be resized is the first
-** parameter.)^ ^ If the first parameter to sqlite3_realloc()
+** ^The sqlite3_realloc(X,N) interface attempts to resize a
+** prior memory allocation X to be at least N bytes.
+** ^If the X parameter to sqlite3_realloc(X,N)
** is a NULL pointer then its behavior is identical to calling
-** sqlite3_malloc(N) where N is the second parameter to sqlite3_realloc().
-** ^If the second parameter to sqlite3_realloc() is zero or
+** sqlite3_malloc(N).
+** ^If the N parameter to sqlite3_realloc(X,N) is zero or
** negative then the behavior is exactly the same as calling
-** sqlite3_free(P) where P is the first parameter to sqlite3_realloc().
-** ^sqlite3_realloc() returns a pointer to a memory allocation
-** of at least N bytes in size or NULL if sufficient memory is unavailable.
+** sqlite3_free(X).
+** ^sqlite3_realloc(X,N) returns a pointer to a memory allocation
+** of at least N bytes in size or NULL if insufficient memory is available.
** ^If M is the size of the prior allocation, then min(N,M) bytes
** of the prior allocation are copied into the beginning of buffer returned
-** by sqlite3_realloc() and the prior allocation is freed.
-** ^If sqlite3_realloc() returns NULL, then the prior allocation
-** is not freed.
-**
-** ^The memory returned by sqlite3_malloc() and sqlite3_realloc()
+** by sqlite3_realloc(X,N) and the prior allocation is freed.
+** ^If sqlite3_realloc(X,N) returns NULL and N is positive, then the
+** prior allocation is not freed.
+**
+** ^The sqlite3_realloc64(X,N) interfaces works the same as
+** sqlite3_realloc(X,N) except that N is a 64-bit unsigned integer instead
+** of a 32-bit signed integer.
+**
+** ^If X is a memory allocation previously obtained from sqlite3_malloc(),
+** sqlite3_malloc64(), sqlite3_realloc(), or sqlite3_realloc64(), then
+** sqlite3_msize(X) returns the size of that memory allocation in bytes.
+** ^The value returned by sqlite3_msize(X) might be larger than the number
+** of bytes requested when X was allocated. ^If X is a NULL pointer then
+** sqlite3_msize(X) returns zero. If X points to something that is not
+** the beginning of memory allocation, or if it points to a formerly
+** valid memory allocation that has now been freed, then the behavior
+** of sqlite3_msize(X) is undefined and possibly harmful.
+**
+** ^The memory returned by sqlite3_malloc(), sqlite3_realloc(),
+** sqlite3_malloc64(), and sqlite3_realloc64()
** is always aligned to at least an 8 byte boundary, or to a
** 4 byte boundary if the [SQLITE_4_BYTE_ALIGNED_MALLOC] compile-time
** option is used.
@@ -2474,8 +2502,11 @@ SQLITE_API char *sqlite3_vsnprintf(int,char*,const char*, va_list);
** [sqlite3_free()] or [sqlite3_realloc()].
*/
SQLITE_API void *sqlite3_malloc(int);
+SQLITE_API void *sqlite3_malloc64(sqlite3_uint64);
SQLITE_API void *sqlite3_realloc(void*, int);
+SQLITE_API void *sqlite3_realloc64(void*, sqlite3_uint64);
SQLITE_API void sqlite3_free(void*);
+SQLITE_API sqlite3_uint64 sqlite3_msize(void*);
/*
** CAPI3REF: Memory Allocator Statistics
@@ -2762,9 +2793,9 @@ SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
** an English language description of the error following a failure of any
** of the sqlite3_open() routines.
**
-** ^The default encoding for the database will be UTF-8 if
-** sqlite3_open() or sqlite3_open_v2() is called and
-** UTF-16 in the native byte order if sqlite3_open16() is used.
+** ^The default encoding will be UTF-8 for databases created using
+** sqlite3_open() or sqlite3_open_v2(). ^The default encoding for databases
+** created using sqlite3_open16() will be UTF-16 in the native byte order.
**
** Whether or not an error occurs when it is opened, resources
** associated with the [database connection] handle should be released by
@@ -2852,13 +2883,14 @@ SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
** then it is interpreted as an absolute path. ^If the path does not begin
** with a '/' (meaning that the authority section is omitted from the URI)
** then the path is interpreted as a relative path.
-** ^On windows, the first component of an absolute path
-** is a drive specification (e.g. "C:").
+** ^(On windows, the first component of an absolute path
+** is a drive specification (e.g. "C:").)^
**
** [[core URI query parameters]]
** The query component of a URI may contain parameters that are interpreted
** either by SQLite itself, or by a [VFS | custom VFS implementation].
-** SQLite interprets the following three query parameters:
+** SQLite and its built-in [VFSes] interpret the
+** following query parameters:
**
** <ul>
** <li> <b>vfs</b>: ^The "vfs" parameter may be used to specify the name of
@@ -2893,11 +2925,9 @@ SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
** a URI filename, its value overrides any behavior requested by setting
** SQLITE_OPEN_PRIVATECACHE or SQLITE_OPEN_SHAREDCACHE flag.
**
-** <li> <b>psow</b>: ^The psow parameter may be "true" (or "on" or "yes" or
-** "1") or "false" (or "off" or "no" or "0") to indicate that the
+** <li> <b>psow</b>: ^The psow parameter indicates whether or not the
** [powersafe overwrite] property does or does not apply to the
-** storage media on which the database file resides. ^The psow query
-** parameter only works for the built-in unix and Windows VFSes.
+** storage media on which the database file resides.
**
** <li> <b>nolock</b>: ^The nolock parameter is a boolean query parameter
** which if set disables file locking in rollback journal modes. This
@@ -3193,6 +3223,10 @@ SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal);
**
** [[SQLITE_LIMIT_TRIGGER_DEPTH]] ^(<dt>SQLITE_LIMIT_TRIGGER_DEPTH</dt>
** <dd>The maximum depth of recursion for triggers.</dd>)^
+**
+** [[SQLITE_LIMIT_WORKER_THREADS]] ^(<dt>SQLITE_LIMIT_WORKER_THREADS</dt>
+** <dd>The maximum number of auxiliary worker threads that a single
+** [prepared statement] may start.</dd>)^
** </dl>
*/
#define SQLITE_LIMIT_LENGTH 0
@@ -3206,6 +3240,7 @@ SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal);
#define SQLITE_LIMIT_LIKE_PATTERN_LENGTH 8
#define SQLITE_LIMIT_VARIABLE_NUMBER 9
#define SQLITE_LIMIT_TRIGGER_DEPTH 10
+#define SQLITE_LIMIT_WORKER_THREADS 11
/*
** CAPI3REF: Compiling An SQL Statement
@@ -3479,18 +3514,18 @@ typedef struct sqlite3_context sqlite3_context;
** If the fourth parameter to sqlite3_bind_blob() is negative, then
** the behavior is undefined.
** If a non-negative fourth parameter is provided to sqlite3_bind_text()
-** or sqlite3_bind_text16() then that parameter must be the byte offset
+** or sqlite3_bind_text16() or sqlite3_bind_text64() then
+** that parameter must be the byte offset
** where the NUL terminator would occur assuming the string were NUL
** terminated. If any NUL characters occur at byte offsets less than
** the value of the fourth parameter then the resulting string value will
** contain embedded NULs. The result of expressions involving strings
** with embedded NULs is undefined.
**
-** ^The fifth argument to sqlite3_bind_blob(), sqlite3_bind_text(), and
-** sqlite3_bind_text16() is a destructor used to dispose of the BLOB or
+** ^The fifth argument to the BLOB and string binding interfaces
+** is a destructor used to dispose of the BLOB or
** string after SQLite has finished with it. ^The destructor is called
-** to dispose of the BLOB or string even if the call to sqlite3_bind_blob(),
-** sqlite3_bind_text(), or sqlite3_bind_text16() fails.
+** to dispose of the BLOB or string even if the call to bind API fails.
** ^If the fifth argument is
** the special value [SQLITE_STATIC], then SQLite assumes that the
** information is in static, unmanaged space and does not need to be freed.
@@ -3498,6 +3533,14 @@ typedef struct sqlite3_context sqlite3_context;
** SQLite makes its own private copy of the data immediately, before
** the sqlite3_bind_*() routine returns.
**
+** ^The sixth argument to sqlite3_bind_text64() must be one of
+** [SQLITE_UTF8], [SQLITE_UTF16], [SQLITE_UTF16BE], or [SQLITE_UTF16LE]
+** to specify the encoding of the text in the third parameter. If
+** the sixth argument to sqlite3_bind_text64() is not one of the
+** allowed values shown above, or if the text encoding is different
+** from the encoding specified by the sixth parameter, then the behavior
+** is undefined.
+**
** ^The sqlite3_bind_zeroblob() routine binds a BLOB of length N that
** is filled with zeroes. ^A zeroblob uses a fixed amount of memory
** (just an integer to hold its size) while it is being processed.
@@ -3518,6 +3561,9 @@ typedef struct sqlite3_context sqlite3_context;
**
** ^The sqlite3_bind_* routines return [SQLITE_OK] on success or an
** [error code] if anything goes wrong.
+** ^[SQLITE_TOOBIG] might be returned if the size of a string or BLOB
+** exceeds limits imposed by [sqlite3_limit]([SQLITE_LIMIT_LENGTH]) or
+** [SQLITE_MAX_LENGTH].
** ^[SQLITE_RANGE] is returned if the parameter
** index is out of range. ^[SQLITE_NOMEM] is returned if malloc() fails.
**
@@ -3525,12 +3571,16 @@ typedef struct sqlite3_context sqlite3_context;
** [sqlite3_bind_parameter_name()], and [sqlite3_bind_parameter_index()].
*/
SQLITE_API int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*));
+SQLITE_API int sqlite3_bind_blob64(sqlite3_stmt*, int, const void*, sqlite3_uint64,
+ void(*)(void*));
SQLITE_API int sqlite3_bind_double(sqlite3_stmt*, int, double);
SQLITE_API int sqlite3_bind_int(sqlite3_stmt*, int, int);
SQLITE_API int sqlite3_bind_int64(sqlite3_stmt*, int, sqlite3_int64);
SQLITE_API int sqlite3_bind_null(sqlite3_stmt*, int);
-SQLITE_API int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*));
+SQLITE_API int sqlite3_bind_text(sqlite3_stmt*,int,const char*,int,void(*)(void*));
SQLITE_API int sqlite3_bind_text16(sqlite3_stmt*, int, const void*, int, void(*)(void*));
+SQLITE_API int sqlite3_bind_text64(sqlite3_stmt*, int, const char*, sqlite3_uint64,
+ void(*)(void*), unsigned char encoding);
SQLITE_API int sqlite3_bind_value(sqlite3_stmt*, int, const sqlite3_value*);
SQLITE_API int sqlite3_bind_zeroblob(sqlite3_stmt*, int, int n);
@@ -4279,7 +4329,7 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6
** object results in undefined behavior.
**
** ^These routines work just like the corresponding [column access functions]
-** except that these routines take a single [protected sqlite3_value] object
+** except that these routines take a single [protected sqlite3_value] object
** pointer instead of a [sqlite3_stmt*] pointer and an integer column number.
**
** ^The sqlite3_value_text16() interface extracts a UTF-16 string
@@ -4526,6 +4576,10 @@ typedef void (*sqlite3_destructor_type)(void*);
** set the return value of the application-defined function to be
** a text string which is represented as UTF-8, UTF-16 native byte order,
** UTF-16 little endian, or UTF-16 big endian, respectively.
+** ^The sqlite3_result_text64() interface sets the return value of an
+** application-defined function to be a text string in an encoding
+** specified by the fifth (and last) parameter, which must be one
+** of [SQLITE_UTF8], [SQLITE_UTF16], [SQLITE_UTF16BE], or [SQLITE_UTF16LE].
** ^SQLite takes the text result from the application from
** the 2nd parameter of the sqlite3_result_text* interfaces.
** ^If the 3rd parameter to the sqlite3_result_text* interfaces
@@ -4569,6 +4623,7 @@ typedef void (*sqlite3_destructor_type)(void*);
** the [sqlite3_context] pointer, the results are undefined.
*/
SQLITE_API void sqlite3_result_blob(sqlite3_context*, const void*, int, void(*)(void*));
+SQLITE_API void sqlite3_result_blob64(sqlite3_context*,const void*,sqlite3_uint64,void(*)(void*));
SQLITE_API void sqlite3_result_double(sqlite3_context*, double);
SQLITE_API void sqlite3_result_error(sqlite3_context*, const char*, int);
SQLITE_API void sqlite3_result_error16(sqlite3_context*, const void*, int);
@@ -4579,6 +4634,8 @@ SQLITE_API void sqlite3_result_int(sqlite3_context*, int);
SQLITE_API void sqlite3_result_int64(sqlite3_context*, sqlite3_int64);
SQLITE_API void sqlite3_result_null(sqlite3_context*);
SQLITE_API void sqlite3_result_text(sqlite3_context*, const char*, int, void(*)(void*));
+SQLITE_API void sqlite3_result_text64(sqlite3_context*, const char*,sqlite3_uint64,
+ void(*)(void*), unsigned char encoding);
SQLITE_API void sqlite3_result_text16(sqlite3_context*, const void*, int, void(*)(void*));
SQLITE_API void sqlite3_result_text16le(sqlite3_context*, const void*, int,void(*)(void*));
SQLITE_API void sqlite3_result_text16be(sqlite3_context*, const void*, int,void(*)(void*));
@@ -6275,12 +6332,13 @@ SQLITE_API int sqlite3_test_control(int op, ...);
#define SQLITE_TESTCTRL_ISKEYWORD 16
#define SQLITE_TESTCTRL_SCRATCHMALLOC 17
#define SQLITE_TESTCTRL_LOCALTIME_FAULT 18
-#define SQLITE_TESTCTRL_EXPLAIN_STMT 19
+#define SQLITE_TESTCTRL_EXPLAIN_STMT 19 /* NOT USED */
#define SQLITE_TESTCTRL_NEVER_CORRUPT 20
#define SQLITE_TESTCTRL_VDBE_COVERAGE 21
#define SQLITE_TESTCTRL_BYTEORDER 22
#define SQLITE_TESTCTRL_ISINIT 23
-#define SQLITE_TESTCTRL_LAST 23
+#define SQLITE_TESTCTRL_SORTER_MMAP 24
+#define SQLITE_TESTCTRL_LAST 24
/*
** CAPI3REF: SQLite Runtime Status
@@ -6471,12 +6529,12 @@ SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int r
** the current value is always zero.)^
**
** [[SQLITE_DBSTATUS_CACHE_USED]] ^(<dt>SQLITE_DBSTATUS_CACHE_USED</dt>
-** <dd>This parameter returns the approximate number of of bytes of heap
+** <dd>This parameter returns the approximate number of bytes of heap
** memory used by all pager caches associated with the database connection.)^
** ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_USED is always 0.
**
** [[SQLITE_DBSTATUS_SCHEMA_USED]] ^(<dt>SQLITE_DBSTATUS_SCHEMA_USED</dt>
-** <dd>This parameter returns the approximate number of of bytes of heap
+** <dd>This parameter returns the approximate number of bytes of heap
** memory used to store the schema for all databases associated
** with the connection - main, temp, and any [ATTACH]-ed databases.)^
** ^The full amount of memory used by the schemas is reported, even if the
@@ -6485,7 +6543,7 @@ SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int r
** ^The highwater mark associated with SQLITE_DBSTATUS_SCHEMA_USED is always 0.
**
** [[SQLITE_DBSTATUS_STMT_USED]] ^(<dt>SQLITE_DBSTATUS_STMT_USED</dt>
-** <dd>This parameter returns the approximate number of of bytes of heap
+** <dd>This parameter returns the approximate number of bytes of heap
** and lookaside memory used by all prepared statements associated with
** the database connection.)^
** ^The highwater mark associated with SQLITE_DBSTATUS_STMT_USED is always 0.
@@ -7842,15 +7900,6 @@ struct sqlite3_rtree_query_info {
#pragma warn -spa /* Suspicious pointer arithmetic */
#endif
-/* Needed for various definitions... */
-#ifndef _GNU_SOURCE
-# define _GNU_SOURCE
-#endif
-
-#if defined(__OpenBSD__) && !defined(_BSD_SOURCE)
-# define _BSD_SOURCE
-#endif
-
/*
** Include standard header files as necessary
*/
@@ -7892,6 +7941,18 @@ struct sqlite3_rtree_query_info {
#endif
/*
+** A macro to hint to the compiler that a function should not be
+** inlined.
+*/
+#if defined(__GNUC__)
+# define SQLITE_NOINLINE __attribute__((noinline))
+#elif defined(_MSC_VER) && _MSC_VER>=1310
+# define SQLITE_NOINLINE __declspec(noinline)
+#else
+# define SQLITE_NOINLINE
+#endif
+
+/*
** The SQLITE_THREADSAFE macro must be defined as 0, 1, or 2.
** 0 means mutexes are permanently disable and the library is never
** threadsafe. 1 means the library is serialized which is the highest
@@ -8077,7 +8138,7 @@ SQLITE_PRIVATE void sqlite3Coverage(int);
#endif
/*
-** Return true (non-zero) if the input is a integer that is too large
+** Return true (non-zero) if the input is an integer that is too large
** to fit in 32-bits. This macro is used inside of various testcase()
** macros to verify that we have tested SQLite for large-file support.
*/
@@ -8156,15 +8217,15 @@ struct Hash {
struct HashElem {
HashElem *next, *prev; /* Next and previous elements in the table */
void *data; /* Data associated with this element */
- const char *pKey; int nKey; /* Key associated with this element */
+ const char *pKey; /* Key associated with this element */
};
/*
** Access routines. To delete, insert a NULL pointer.
*/
SQLITE_PRIVATE void sqlite3HashInit(Hash*);
-SQLITE_PRIVATE void *sqlite3HashInsert(Hash*, const char *pKey, int nKey, void *pData);
-SQLITE_PRIVATE void *sqlite3HashFind(const Hash*, const char *pKey, int nKey);
+SQLITE_PRIVATE void *sqlite3HashInsert(Hash*, const char *pKey, void *pData);
+SQLITE_PRIVATE void *sqlite3HashFind(const Hash*, const char *pKey);
SQLITE_PRIVATE void sqlite3HashClear(Hash*);
/*
@@ -8424,6 +8485,27 @@ SQLITE_PRIVATE void sqlite3HashClear(Hash*);
#endif
/*
+** If no value has been provided for SQLITE_MAX_WORKER_THREADS, or if
+** SQLITE_TEMP_STORE is set to 3 (never use temporary files), set it
+** to zero.
+*/
+#if SQLITE_TEMP_STORE==3 || SQLITE_THREADSAFE==0
+# undef SQLITE_MAX_WORKER_THREADS
+# define SQLITE_MAX_WORKER_THREADS 0
+#endif
+#ifndef SQLITE_MAX_WORKER_THREADS
+# define SQLITE_MAX_WORKER_THREADS 8
+#endif
+#ifndef SQLITE_DEFAULT_WORKER_THREADS
+# define SQLITE_DEFAULT_WORKER_THREADS 0
+#endif
+#if SQLITE_DEFAULT_WORKER_THREADS>SQLITE_MAX_WORKER_THREADS
+# undef SQLITE_MAX_WORKER_THREADS
+# define SQLITE_MAX_WORKER_THREADS SQLITE_DEFAULT_WORKER_THREADS
+#endif
+
+
+/*
** GCC does not define the offsetof() macro so we'll have to do it
** ourselves.
*/
@@ -8438,6 +8520,11 @@ SQLITE_PRIVATE void sqlite3HashClear(Hash*);
#define MAX(A,B) ((A)>(B)?(A):(B))
/*
+** Swap two objects of type TYPE.
+*/
+#define SWAP(TYPE,A,B) {TYPE t=A; A=B; B=t;}
+
+/*
** Check to see if this machine uses EBCDIC. (Yes, believe it or
** not, there are still machines out there that use EBCDIC.)
*/
@@ -8607,7 +8694,7 @@ SQLITE_PRIVATE const int sqlite3one;
** all alignment restrictions correct.
**
** Except, if SQLITE_4_BYTE_ALIGNED_MALLOC is defined, then the
-** underlying malloc() implemention might return us 4-byte aligned
+** underlying malloc() implementation might return us 4-byte aligned
** pointers. In that case, only verify 4-byte alignment.
*/
#ifdef SQLITE_4_BYTE_ALIGNED_MALLOC
@@ -8675,6 +8762,16 @@ SQLITE_PRIVATE const int sqlite3one;
#endif
/*
+** SELECTTRACE_ENABLED will be either 1 or 0 depending on whether or not
+** the Select query generator tracing logic is turned on.
+*/
+#if defined(SQLITE_DEBUG) || defined(SQLITE_ENABLE_SELECTTRACE)
+# define SELECTTRACE_ENABLED 1
+#else
+# define SELECTTRACE_ENABLED 0
+#endif
+
+/*
** An instance of the following structure is used to store the busy-handler
** callback for a given sqlite handle.
**
@@ -8806,12 +8903,14 @@ typedef struct PrintfArguments PrintfArguments;
typedef struct RowSet RowSet;
typedef struct Savepoint Savepoint;
typedef struct Select Select;
+typedef struct SQLiteThread SQLiteThread;
typedef struct SelectDest SelectDest;
typedef struct SrcList SrcList;
typedef struct StrAccum StrAccum;
typedef struct Table Table;
typedef struct TableLock TableLock;
typedef struct Token Token;
+typedef struct TreeView TreeView;
typedef struct Trigger Trigger;
typedef struct TriggerPrg TriggerPrg;
typedef struct TriggerStep TriggerStep;
@@ -8914,7 +9013,7 @@ SQLITE_PRIVATE int sqlite3BtreeBeginTrans(Btree*,int);
SQLITE_PRIVATE int sqlite3BtreeCommitPhaseOne(Btree*, const char *zMaster);
SQLITE_PRIVATE int sqlite3BtreeCommitPhaseTwo(Btree*, int);
SQLITE_PRIVATE int sqlite3BtreeCommit(Btree*);
-SQLITE_PRIVATE int sqlite3BtreeRollback(Btree*,int);
+SQLITE_PRIVATE int sqlite3BtreeRollback(Btree*,int,int);
SQLITE_PRIVATE int sqlite3BtreeBeginStmt(Btree*,int);
SQLITE_PRIVATE int sqlite3BtreeCreateTable(Btree*, int*, int flags);
SQLITE_PRIVATE int sqlite3BtreeIsInTrans(Btree*);
@@ -8947,7 +9046,7 @@ SQLITE_PRIVATE int sqlite3BtreeIncrVacuum(Btree *);
SQLITE_PRIVATE int sqlite3BtreeDropTable(Btree*, int, int*);
SQLITE_PRIVATE int sqlite3BtreeClearTable(Btree*, int, int*);
SQLITE_PRIVATE int sqlite3BtreeClearTableOfCursor(BtCursor*);
-SQLITE_PRIVATE void sqlite3BtreeTripAllCursors(Btree*, int);
+SQLITE_PRIVATE int sqlite3BtreeTripAllCursors(Btree*, int, int);
SQLITE_PRIVATE void sqlite3BtreeGetMeta(Btree *pBtree, int idx, u32 *pValue);
SQLITE_PRIVATE int sqlite3BtreeUpdateMeta(Btree*, int idx, u32 value);
@@ -9000,7 +9099,8 @@ SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked(
int bias,
int *pRes
);
-SQLITE_PRIVATE int sqlite3BtreeCursorHasMoved(BtCursor*, int*);
+SQLITE_PRIVATE int sqlite3BtreeCursorHasMoved(BtCursor*);
+SQLITE_PRIVATE int sqlite3BtreeCursorRestore(BtCursor*, int*);
SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor*);
SQLITE_PRIVATE int sqlite3BtreeInsert(BtCursor*, const void *pKey, i64 nKey,
const void *pData, int nData,
@@ -9291,42 +9391,42 @@ typedef struct VdbeOpList VdbeOpList;
#define OP_AddImm 37 /* synopsis: r[P1]=r[P1]+P2 */
#define OP_MustBeInt 38
#define OP_RealAffinity 39
-#define OP_Permutation 40
-#define OP_Compare 41 /* synopsis: r[P1@P3] <-> r[P2@P3] */
-#define OP_Jump 42
-#define OP_Once 43
-#define OP_If 44
-#define OP_IfNot 45
-#define OP_Column 46 /* synopsis: r[P3]=PX */
-#define OP_Affinity 47 /* synopsis: affinity(r[P1@P2]) */
-#define OP_MakeRecord 48 /* synopsis: r[P3]=mkrec(r[P1@P2]) */
-#define OP_Count 49 /* synopsis: r[P2]=count() */
-#define OP_ReadCookie 50
-#define OP_SetCookie 51
-#define OP_ReopenIdx 52 /* synopsis: root=P2 iDb=P3 */
-#define OP_OpenRead 53 /* synopsis: root=P2 iDb=P3 */
-#define OP_OpenWrite 54 /* synopsis: root=P2 iDb=P3 */
-#define OP_OpenAutoindex 55 /* synopsis: nColumn=P2 */
-#define OP_OpenEphemeral 56 /* synopsis: nColumn=P2 */
-#define OP_SorterOpen 57
-#define OP_OpenPseudo 58 /* synopsis: P3 columns in r[P2] */
-#define OP_Close 59
-#define OP_SeekLT 60 /* synopsis: key=r[P3@P4] */
-#define OP_SeekLE 61 /* synopsis: key=r[P3@P4] */
-#define OP_SeekGE 62 /* synopsis: key=r[P3@P4] */
-#define OP_SeekGT 63 /* synopsis: key=r[P3@P4] */
-#define OP_Seek 64 /* synopsis: intkey=r[P2] */
-#define OP_NoConflict 65 /* synopsis: key=r[P3@P4] */
-#define OP_NotFound 66 /* synopsis: key=r[P3@P4] */
-#define OP_Found 67 /* synopsis: key=r[P3@P4] */
-#define OP_NotExists 68 /* synopsis: intkey=r[P3] */
-#define OP_Sequence 69 /* synopsis: r[P2]=cursor[P1].ctr++ */
-#define OP_NewRowid 70 /* synopsis: r[P2]=rowid */
+#define OP_Cast 40 /* synopsis: affinity(r[P1]) */
+#define OP_Permutation 41
+#define OP_Compare 42 /* synopsis: r[P1@P3] <-> r[P2@P3] */
+#define OP_Jump 43
+#define OP_Once 44
+#define OP_If 45
+#define OP_IfNot 46
+#define OP_Column 47 /* synopsis: r[P3]=PX */
+#define OP_Affinity 48 /* synopsis: affinity(r[P1@P2]) */
+#define OP_MakeRecord 49 /* synopsis: r[P3]=mkrec(r[P1@P2]) */
+#define OP_Count 50 /* synopsis: r[P2]=count() */
+#define OP_ReadCookie 51
+#define OP_SetCookie 52
+#define OP_ReopenIdx 53 /* synopsis: root=P2 iDb=P3 */
+#define OP_OpenRead 54 /* synopsis: root=P2 iDb=P3 */
+#define OP_OpenWrite 55 /* synopsis: root=P2 iDb=P3 */
+#define OP_OpenAutoindex 56 /* synopsis: nColumn=P2 */
+#define OP_OpenEphemeral 57 /* synopsis: nColumn=P2 */
+#define OP_SorterOpen 58
+#define OP_SequenceTest 59 /* synopsis: if( cursor[P1].ctr++ ) pc = P2 */
+#define OP_OpenPseudo 60 /* synopsis: P3 columns in r[P2] */
+#define OP_Close 61
+#define OP_SeekLT 62 /* synopsis: key=r[P3@P4] */
+#define OP_SeekLE 63 /* synopsis: key=r[P3@P4] */
+#define OP_SeekGE 64 /* synopsis: key=r[P3@P4] */
+#define OP_SeekGT 65 /* synopsis: key=r[P3@P4] */
+#define OP_Seek 66 /* synopsis: intkey=r[P2] */
+#define OP_NoConflict 67 /* synopsis: key=r[P3@P4] */
+#define OP_NotFound 68 /* synopsis: key=r[P3@P4] */
+#define OP_Found 69 /* synopsis: key=r[P3@P4] */
+#define OP_NotExists 70 /* synopsis: intkey=r[P3] */
#define OP_Or 71 /* same as TK_OR, synopsis: r[P3]=(r[P1] || r[P2]) */
#define OP_And 72 /* same as TK_AND, synopsis: r[P3]=(r[P1] && r[P2]) */
-#define OP_Insert 73 /* synopsis: intkey=r[P3] data=r[P2] */
-#define OP_InsertInt 74 /* synopsis: intkey=P3 data=r[P2] */
-#define OP_Delete 75
+#define OP_Sequence 73 /* synopsis: r[P2]=cursor[P1].ctr++ */
+#define OP_NewRowid 74 /* synopsis: r[P2]=rowid */
+#define OP_Insert 75 /* synopsis: intkey=r[P3] data=r[P2] */
#define OP_IsNull 76 /* same as TK_ISNULL, synopsis: if r[P1]==NULL goto P2 */
#define OP_NotNull 77 /* same as TK_NOTNULL, synopsis: if r[P1]!=NULL goto P2 */
#define OP_Ne 78 /* same as TK_NE, synopsis: if r[P1]!=r[P3] goto P2 */
@@ -9335,7 +9435,7 @@ typedef struct VdbeOpList VdbeOpList;
#define OP_Le 81 /* same as TK_LE, synopsis: if r[P1]<=r[P3] goto P2 */
#define OP_Lt 82 /* same as TK_LT, synopsis: if r[P1]<r[P3] goto P2 */
#define OP_Ge 83 /* same as TK_GE, synopsis: if r[P1]>=r[P3] goto P2 */
-#define OP_ResetCount 84
+#define OP_InsertInt 84 /* synopsis: intkey=P3 data=r[P2] */
#define OP_BitAnd 85 /* same as TK_BITAND, synopsis: r[P3]=r[P1]&r[P2] */
#define OP_BitOr 86 /* same as TK_BITOR, synopsis: r[P3]=r[P1]|r[P2] */
#define OP_ShiftLeft 87 /* same as TK_LSHIFT, synopsis: r[P3]=r[P2]<<r[P1] */
@@ -9346,70 +9446,67 @@ typedef struct VdbeOpList VdbeOpList;
#define OP_Divide 92 /* same as TK_SLASH, synopsis: r[P3]=r[P2]/r[P1] */
#define OP_Remainder 93 /* same as TK_REM, synopsis: r[P3]=r[P2]%r[P1] */
#define OP_Concat 94 /* same as TK_CONCAT, synopsis: r[P3]=r[P2]+r[P1] */
-#define OP_SorterCompare 95 /* synopsis: if key(P1)!=trim(r[P3],P4) goto P2 */
+#define OP_Delete 95
#define OP_BitNot 96 /* same as TK_BITNOT, synopsis: r[P1]= ~r[P1] */
#define OP_String8 97 /* same as TK_STRING, synopsis: r[P2]='P4' */
-#define OP_SorterData 98 /* synopsis: r[P2]=data */
-#define OP_RowKey 99 /* synopsis: r[P2]=key */
-#define OP_RowData 100 /* synopsis: r[P2]=data */
-#define OP_Rowid 101 /* synopsis: r[P2]=rowid */
-#define OP_NullRow 102
-#define OP_Last 103
-#define OP_SorterSort 104
-#define OP_Sort 105
-#define OP_Rewind 106
-#define OP_SorterInsert 107
-#define OP_IdxInsert 108 /* synopsis: key=r[P2] */
-#define OP_IdxDelete 109 /* synopsis: key=r[P2@P3] */
-#define OP_IdxRowid 110 /* synopsis: r[P2]=rowid */
-#define OP_IdxLE 111 /* synopsis: key=r[P3@P4] */
-#define OP_IdxGT 112 /* synopsis: key=r[P3@P4] */
-#define OP_IdxLT 113 /* synopsis: key=r[P3@P4] */
-#define OP_IdxGE 114 /* synopsis: key=r[P3@P4] */
-#define OP_Destroy 115
-#define OP_Clear 116
-#define OP_ResetSorter 117
-#define OP_CreateIndex 118 /* synopsis: r[P2]=root iDb=P1 */
-#define OP_CreateTable 119 /* synopsis: r[P2]=root iDb=P1 */
-#define OP_ParseSchema 120
-#define OP_LoadAnalysis 121
-#define OP_DropTable 122
-#define OP_DropIndex 123
-#define OP_DropTrigger 124
-#define OP_IntegrityCk 125
-#define OP_RowSetAdd 126 /* synopsis: rowset(P1)=r[P2] */
-#define OP_RowSetRead 127 /* synopsis: r[P3]=rowset(P1) */
-#define OP_RowSetTest 128 /* synopsis: if r[P3] in rowset(P1) goto P2 */
-#define OP_Program 129
-#define OP_Param 130
-#define OP_FkCounter 131 /* synopsis: fkctr[P1]+=P2 */
-#define OP_FkIfZero 132 /* synopsis: if fkctr[P1]==0 goto P2 */
+#define OP_ResetCount 98
+#define OP_SorterCompare 99 /* synopsis: if key(P1)!=trim(r[P3],P4) goto P2 */
+#define OP_SorterData 100 /* synopsis: r[P2]=data */
+#define OP_RowKey 101 /* synopsis: r[P2]=key */
+#define OP_RowData 102 /* synopsis: r[P2]=data */
+#define OP_Rowid 103 /* synopsis: r[P2]=rowid */
+#define OP_NullRow 104
+#define OP_Last 105
+#define OP_SorterSort 106
+#define OP_Sort 107
+#define OP_Rewind 108
+#define OP_SorterInsert 109
+#define OP_IdxInsert 110 /* synopsis: key=r[P2] */
+#define OP_IdxDelete 111 /* synopsis: key=r[P2@P3] */
+#define OP_IdxRowid 112 /* synopsis: r[P2]=rowid */
+#define OP_IdxLE 113 /* synopsis: key=r[P3@P4] */
+#define OP_IdxGT 114 /* synopsis: key=r[P3@P4] */
+#define OP_IdxLT 115 /* synopsis: key=r[P3@P4] */
+#define OP_IdxGE 116 /* synopsis: key=r[P3@P4] */
+#define OP_Destroy 117
+#define OP_Clear 118
+#define OP_ResetSorter 119
+#define OP_CreateIndex 120 /* synopsis: r[P2]=root iDb=P1 */
+#define OP_CreateTable 121 /* synopsis: r[P2]=root iDb=P1 */
+#define OP_ParseSchema 122
+#define OP_LoadAnalysis 123
+#define OP_DropTable 124
+#define OP_DropIndex 125
+#define OP_DropTrigger 126
+#define OP_IntegrityCk 127
+#define OP_RowSetAdd 128 /* synopsis: rowset(P1)=r[P2] */
+#define OP_RowSetRead 129 /* synopsis: r[P3]=rowset(P1) */
+#define OP_RowSetTest 130 /* synopsis: if r[P3] in rowset(P1) goto P2 */
+#define OP_Program 131
+#define OP_Param 132
#define OP_Real 133 /* same as TK_FLOAT, synopsis: r[P2]=P4 */
-#define OP_MemMax 134 /* synopsis: r[P1]=max(r[P1],r[P2]) */
-#define OP_IfPos 135 /* synopsis: if r[P1]>0 goto P2 */
-#define OP_IfNeg 136 /* synopsis: r[P1]+=P3, if r[P1]<0 goto P2 */
-#define OP_IfZero 137 /* synopsis: r[P1]+=P3, if r[P1]==0 goto P2 */
-#define OP_AggFinal 138 /* synopsis: accum=r[P1] N=P2 */
-#define OP_IncrVacuum 139
-#define OP_Expire 140
-#define OP_TableLock 141 /* synopsis: iDb=P1 root=P2 write=P3 */
-#define OP_VBegin 142
-#define OP_ToText 143 /* same as TK_TO_TEXT */
-#define OP_ToBlob 144 /* same as TK_TO_BLOB */
-#define OP_ToNumeric 145 /* same as TK_TO_NUMERIC */
-#define OP_ToInt 146 /* same as TK_TO_INT */
-#define OP_ToReal 147 /* same as TK_TO_REAL */
-#define OP_VCreate 148
-#define OP_VDestroy 149
-#define OP_VOpen 150
-#define OP_VColumn 151 /* synopsis: r[P3]=vcolumn(P2) */
-#define OP_VNext 152
-#define OP_VRename 153
-#define OP_Pagecount 154
-#define OP_MaxPgcnt 155
-#define OP_Init 156 /* synopsis: Start at P2 */
-#define OP_Noop 157
-#define OP_Explain 158
+#define OP_FkCounter 134 /* synopsis: fkctr[P1]+=P2 */
+#define OP_FkIfZero 135 /* synopsis: if fkctr[P1]==0 goto P2 */
+#define OP_MemMax 136 /* synopsis: r[P1]=max(r[P1],r[P2]) */
+#define OP_IfPos 137 /* synopsis: if r[P1]>0 goto P2 */
+#define OP_IfNeg 138 /* synopsis: r[P1]+=P3, if r[P1]<0 goto P2 */
+#define OP_IfZero 139 /* synopsis: r[P1]+=P3, if r[P1]==0 goto P2 */
+#define OP_AggFinal 140 /* synopsis: accum=r[P1] N=P2 */
+#define OP_IncrVacuum 141
+#define OP_Expire 142
+#define OP_TableLock 143 /* synopsis: iDb=P1 root=P2 write=P3 */
+#define OP_VBegin 144
+#define OP_VCreate 145
+#define OP_VDestroy 146
+#define OP_VOpen 147
+#define OP_VColumn 148 /* synopsis: r[P3]=vcolumn(P2) */
+#define OP_VNext 149
+#define OP_VRename 150
+#define OP_Pagecount 151
+#define OP_MaxPgcnt 152
+#define OP_Init 153 /* synopsis: Start at P2 */
+#define OP_Noop 154
+#define OP_Explain 155
/* Properties such as "out2" or "jump" that are specified in
@@ -9429,21 +9526,21 @@ typedef struct VdbeOpList VdbeOpList;
/* 16 */ 0x01, 0x01, 0x04, 0x24, 0x01, 0x04, 0x05, 0x10,\
/* 24 */ 0x00, 0x02, 0x02, 0x02, 0x02, 0x00, 0x02, 0x02,\
/* 32 */ 0x00, 0x00, 0x20, 0x00, 0x00, 0x04, 0x05, 0x04,\
-/* 40 */ 0x00, 0x00, 0x01, 0x01, 0x05, 0x05, 0x00, 0x00,\
-/* 48 */ 0x00, 0x02, 0x02, 0x10, 0x00, 0x00, 0x00, 0x00,\
-/* 56 */ 0x00, 0x00, 0x00, 0x00, 0x11, 0x11, 0x11, 0x11,\
-/* 64 */ 0x08, 0x11, 0x11, 0x11, 0x11, 0x02, 0x02, 0x4c,\
-/* 72 */ 0x4c, 0x00, 0x00, 0x00, 0x05, 0x05, 0x15, 0x15,\
+/* 40 */ 0x04, 0x00, 0x00, 0x01, 0x01, 0x05, 0x05, 0x00,\
+/* 48 */ 0x00, 0x00, 0x02, 0x02, 0x10, 0x00, 0x00, 0x00,\
+/* 56 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x11, 0x11,\
+/* 64 */ 0x11, 0x11, 0x08, 0x11, 0x11, 0x11, 0x11, 0x4c,\
+/* 72 */ 0x4c, 0x02, 0x02, 0x00, 0x05, 0x05, 0x15, 0x15,\
/* 80 */ 0x15, 0x15, 0x15, 0x15, 0x00, 0x4c, 0x4c, 0x4c,\
/* 88 */ 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x4c, 0x00,\
-/* 96 */ 0x24, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01,\
-/* 104 */ 0x01, 0x01, 0x01, 0x08, 0x08, 0x00, 0x02, 0x01,\
-/* 112 */ 0x01, 0x01, 0x01, 0x02, 0x00, 0x00, 0x02, 0x02,\
-/* 120 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x45,\
-/* 128 */ 0x15, 0x01, 0x02, 0x00, 0x01, 0x02, 0x08, 0x05,\
-/* 136 */ 0x05, 0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04,\
-/* 144 */ 0x04, 0x04, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00,\
-/* 152 */ 0x01, 0x00, 0x02, 0x02, 0x01, 0x00, 0x00,}
+/* 96 */ 0x24, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,\
+/* 104 */ 0x00, 0x01, 0x01, 0x01, 0x01, 0x08, 0x08, 0x00,\
+/* 112 */ 0x02, 0x01, 0x01, 0x01, 0x01, 0x02, 0x00, 0x00,\
+/* 120 */ 0x02, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\
+/* 128 */ 0x0c, 0x45, 0x15, 0x01, 0x02, 0x02, 0x00, 0x01,\
+/* 136 */ 0x08, 0x05, 0x05, 0x05, 0x00, 0x01, 0x00, 0x00,\
+/* 144 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x02,\
+/* 152 */ 0x02, 0x01, 0x00, 0x00,}
/************** End of opcodes.h *********************************************/
/************** Continuing where we left off in vdbe.h ***********************/
@@ -9501,10 +9598,10 @@ SQLITE_PRIVATE char *sqlite3VdbeExpandSql(Vdbe*, const char*);
SQLITE_PRIVATE int sqlite3MemCompare(const Mem*, const Mem*, const CollSeq*);
SQLITE_PRIVATE void sqlite3VdbeRecordUnpack(KeyInfo*,int,const void*,UnpackedRecord*);
-SQLITE_PRIVATE int sqlite3VdbeRecordCompare(int,const void*,UnpackedRecord*,int);
+SQLITE_PRIVATE int sqlite3VdbeRecordCompare(int,const void*,UnpackedRecord*);
SQLITE_PRIVATE UnpackedRecord *sqlite3VdbeAllocUnpackedRecord(KeyInfo *, char *, int, char **);
-typedef int (*RecordCompare)(int,const void*,UnpackedRecord*,int);
+typedef int (*RecordCompare)(int,const void*,UnpackedRecord*);
SQLITE_PRIVATE RecordCompare sqlite3VdbeFindCompare(UnpackedRecord*);
#ifndef SQLITE_OMIT_TRIGGER
@@ -9862,7 +9959,7 @@ SQLITE_PRIVATE void sqlite3PCacheBufferSetup(void *, int sz, int n);
** Under memory stress, invoke xStress to try to make pages clean.
** Only clean and unpinned pages can be reclaimed.
*/
-SQLITE_PRIVATE void sqlite3PcacheOpen(
+SQLITE_PRIVATE int sqlite3PcacheOpen(
int szPage, /* Size of every page */
int szExtra, /* Extra space associated with each page */
int bPurgeable, /* True if pages are on backing store */
@@ -9872,7 +9969,7 @@ SQLITE_PRIVATE void sqlite3PcacheOpen(
);
/* Modify the page-size after the cache has been created. */
-SQLITE_PRIVATE void sqlite3PcacheSetPageSize(PCache *, int);
+SQLITE_PRIVATE int sqlite3PcacheSetPageSize(PCache *, int);
/* Return the size in bytes of a PCache object. Used to preallocate
** storage space.
@@ -9882,7 +9979,9 @@ SQLITE_PRIVATE int sqlite3PcacheSize(void);
/* One release per successful fetch. Page is pinned until released.
** Reference counted.
*/
-SQLITE_PRIVATE int sqlite3PcacheFetch(PCache*, Pgno, int createFlag, PgHdr**);
+SQLITE_PRIVATE sqlite3_pcache_page *sqlite3PcacheFetch(PCache*, Pgno, int createFlag);
+SQLITE_PRIVATE int sqlite3PcacheFetchStress(PCache*, Pgno, sqlite3_pcache_page**);
+SQLITE_PRIVATE PgHdr *sqlite3PcacheFetchFinish(PCache*, Pgno, sqlite3_pcache_page *pPage);
SQLITE_PRIVATE void sqlite3PcacheRelease(PgHdr*);
SQLITE_PRIVATE void sqlite3PcacheDrop(PgHdr*); /* Remove page from cache */
@@ -10142,7 +10241,7 @@ SQLITE_PRIVATE void sqlite3PCacheSetDefault(void);
** shared locks begins at SHARED_FIRST.
**
** The same locking strategy and
-** byte ranges are used for Unix. This leaves open the possiblity of having
+** byte ranges are used for Unix. This leaves open the possibility of having
** clients on win95, winNT, and unix all talking to the same shared file
** and all locking correctly. To do so would require that samba (or whatever
** tool is being used for file sharing) implements locks correctly between
@@ -10261,7 +10360,7 @@ SQLITE_PRIVATE int sqlite3OsCloseFree(sqlite3_file *);
** Figure out what version of the code to use. The choices are
**
** SQLITE_MUTEX_OMIT No mutex logic. Not even stubs. The
-** mutexes implemention cannot be overridden
+** mutexes implementation cannot be overridden
** at start-time.
**
** SQLITE_MUTEX_NOOP For single-threaded applications. No
@@ -10381,7 +10480,7 @@ struct Schema {
** The number of different kinds of things that can be limited
** using the sqlite3_limit() interface.
*/
-#define SQLITE_N_LIMIT (SQLITE_LIMIT_TRIGGER_DEPTH+1)
+#define SQLITE_N_LIMIT (SQLITE_LIMIT_WORKER_THREADS+1)
/*
** Lookaside malloc is a set of fixed-size buffers that can be used
@@ -10428,6 +10527,45 @@ struct FuncDefHash {
FuncDef *a[23]; /* Hash table for functions */
};
+#ifdef SQLITE_USER_AUTHENTICATION
+/*
+** Information held in the "sqlite3" database connection object and used
+** to manage user authentication.
+*/
+typedef struct sqlite3_userauth sqlite3_userauth;
+struct sqlite3_userauth {
+ u8 authLevel; /* Current authentication level */
+ int nAuthPW; /* Size of the zAuthPW in bytes */
+ char *zAuthPW; /* Password used to authenticate */
+ char *zAuthUser; /* User name used to authenticate */
+};
+
+/* Allowed values for sqlite3_userauth.authLevel */
+#define UAUTH_Unknown 0 /* Authentication not yet checked */
+#define UAUTH_Fail 1 /* User authentication failed */
+#define UAUTH_User 2 /* Authenticated as a normal user */
+#define UAUTH_Admin 3 /* Authenticated as an administrator */
+
+/* Functions used only by user authorization logic */
+SQLITE_PRIVATE int sqlite3UserAuthTable(const char*);
+SQLITE_PRIVATE int sqlite3UserAuthCheckLogin(sqlite3*,const char*,u8*);
+SQLITE_PRIVATE void sqlite3UserAuthInit(sqlite3*);
+SQLITE_PRIVATE void sqlite3CryptFunc(sqlite3_context*,int,sqlite3_value**);
+
+#endif /* SQLITE_USER_AUTHENTICATION */
+
+/*
+** typedef for the authorization callback function.
+*/
+#ifdef SQLITE_USER_AUTHENTICATION
+ typedef int (*sqlite3_xauth)(void*,int,const char*,const char*,const char*,
+ const char*, const char*);
+#else
+ typedef int (*sqlite3_xauth)(void*,int,const char*,const char*,const char*,
+ const char*);
+#endif
+
+
/*
** Each database connection is an instance of the following structure.
*/
@@ -10458,6 +10596,7 @@ struct sqlite3 {
int nChange; /* Value returned by sqlite3_changes() */
int nTotalChange; /* Value returned by sqlite3_total_changes() */
int aLimit[SQLITE_N_LIMIT]; /* Limits */
+ int nMaxSorterMmap; /* Maximum size of regions mapped by sorter */
struct sqlite3InitInfo { /* Information used during initialization */
int newTnum; /* Rootpage of table being initialized */
u8 iDb; /* Which db file is being initialized */
@@ -10494,8 +10633,7 @@ struct sqlite3 {
} u1;
Lookaside lookaside; /* Lookaside malloc configuration */
#ifndef SQLITE_OMIT_AUTHORIZATION
- int (*xAuth)(void*,int,const char*,const char*,const char*,const char*);
- /* Access authorization function */
+ sqlite3_xauth xAuth; /* Access authorization function */
void *pAuthArg; /* 1st argument to the access auth function */
#endif
#ifndef SQLITE_OMIT_PROGRESS_CALLBACK
@@ -10521,7 +10659,6 @@ struct sqlite3 {
i64 nDeferredCons; /* Net deferred constraints this transaction. */
i64 nDeferredImmCons; /* Net deferred immediate constraints */
int *pnBytesFreed; /* If not NULL, increment this in DbFree() */
-
#ifdef SQLITE_ENABLE_UNLOCK_NOTIFY
/* The following variables are all protected by the STATIC_MASTER
** mutex, not by sqlite3.mutex. They are used by code in notify.c.
@@ -10539,6 +10676,9 @@ struct sqlite3 {
void (*xUnlockNotify)(void **, int); /* Unlock notify callback */
sqlite3 *pNextBlocked; /* Next in list of all blocked connections */
#endif
+#ifdef SQLITE_USER_AUTHENTICATION
+ sqlite3_userauth auth; /* User authentication information */
+#endif
};
/*
@@ -10598,7 +10738,6 @@ struct sqlite3 {
#define SQLITE_Transitive 0x0200 /* Transitive constraints */
#define SQLITE_OmitNoopJoin 0x0400 /* Omit unused tables in joins */
#define SQLITE_Stat3 0x0800 /* Use the SQLITE_STAT3 table */
-#define SQLITE_AdjustOutEst 0x1000 /* Adjust output estimates using WHERE */
#define SQLITE_AllOpts 0xffff /* All optimizations */
/*
@@ -10685,6 +10824,7 @@ struct FuncDestructor {
#define SQLITE_FUNC_COALESCE 0x200 /* Built-in coalesce() or ifnull() */
#define SQLITE_FUNC_UNLIKELY 0x400 /* Built-in unlikely() function */
#define SQLITE_FUNC_CONSTANT 0x800 /* Constant inputs give a constant output */
+#define SQLITE_FUNC_MINMAX 0x1000 /* True for min() and max() aggregates */
/*
** The following three macros, FUNCTION(), LIKEFUNC() and AGGREGATE() are
@@ -10732,6 +10872,9 @@ struct FuncDestructor {
#define AGGREGATE(zName, nArg, arg, nc, xStep, xFinal) \
{nArg, SQLITE_UTF8|(nc*SQLITE_FUNC_NEEDCOLL), \
SQLITE_INT_TO_PTR(arg), 0, 0, xStep,xFinal,#zName,0,0}
+#define AGGREGATE2(zName, nArg, arg, nc, xStep, xFinal, extraFlags) \
+ {nArg, SQLITE_UTF8|(nc*SQLITE_FUNC_NEEDCOLL)|extraFlags, \
+ SQLITE_INT_TO_PTR(arg), 0, 0, xStep,xFinal,#zName,0,0}
/*
** All current savepoints are stored in a linked list starting at
@@ -10818,18 +10961,18 @@ struct CollSeq {
** 't' for SQLITE_AFF_TEXT. But we can save a little space and improve
** the speed a little by numbering the values consecutively.
**
-** But rather than start with 0 or 1, we begin with 'a'. That way,
+** But rather than start with 0 or 1, we begin with 'A'. That way,
** when multiple affinity types are concatenated into a string and
** used as the P4 operand, they will be more readable.
**
** Note also that the numeric types are grouped together so that testing
-** for a numeric type is a single comparison.
+** for a numeric type is a single comparison. And the NONE type is first.
*/
-#define SQLITE_AFF_TEXT 'a'
-#define SQLITE_AFF_NONE 'b'
-#define SQLITE_AFF_NUMERIC 'c'
-#define SQLITE_AFF_INTEGER 'd'
-#define SQLITE_AFF_REAL 'e'
+#define SQLITE_AFF_NONE 'A'
+#define SQLITE_AFF_TEXT 'B'
+#define SQLITE_AFF_NUMERIC 'C'
+#define SQLITE_AFF_INTEGER 'D'
+#define SQLITE_AFF_REAL 'E'
#define sqlite3IsNumericAffinity(X) ((X)>=SQLITE_AFF_NUMERIC)
@@ -10837,7 +10980,7 @@ struct CollSeq {
** The SQLITE_AFF_MASK values masks off the significant bits of an
** affinity value.
*/
-#define SQLITE_AFF_MASK 0x67
+#define SQLITE_AFF_MASK 0x47
/*
** Additional bit values that can be ORed with an affinity without
@@ -10848,10 +10991,10 @@ struct CollSeq {
** operator is NULL. It is added to certain comparison operators to
** prove that the operands are always NOT NULL.
*/
-#define SQLITE_JUMPIFNULL 0x08 /* jumps if either operand is NULL */
-#define SQLITE_STOREP2 0x10 /* Store result in reg[P2] rather than jump */
+#define SQLITE_JUMPIFNULL 0x10 /* jumps if either operand is NULL */
+#define SQLITE_STOREP2 0x20 /* Store result in reg[P2] rather than jump */
#define SQLITE_NULLEQ 0x80 /* NULL=NULL */
-#define SQLITE_NOTNULL 0x88 /* Assert that operands are never NULL */
+#define SQLITE_NOTNULL 0x90 /* Assert that operands are never NULL */
/*
** An object of this type is created for each virtual table present in
@@ -11121,7 +11264,7 @@ struct UnpackedRecord {
KeyInfo *pKeyInfo; /* Collation and sort-order information */
u16 nField; /* Number of entries in apMem[] */
i8 default_rc; /* Comparison result if keys are equal */
- u8 isCorrupt; /* Corruption detected by xRecordCompare() */
+ u8 errCode; /* Error detected by xRecordCompare (CORRUPT or NOMEM) */
Mem *aMem; /* Values */
int r1; /* Value to return if (lhs > rhs) */
int r2; /* Value to return if (rhs < lhs) */
@@ -11181,6 +11324,7 @@ struct Index {
int nSampleCol; /* Size of IndexSample.anEq[] and so on */
tRowcnt *aAvgEq; /* Average nEq values for keys not in aSample */
IndexSample *aSample; /* Samples of the left-most key */
+ tRowcnt *aiRowEst; /* Non-logarithmic stat1 data for this table */
#endif
};
@@ -11393,7 +11537,7 @@ struct Expr {
/*
** The following are the meanings of bits in the Expr.flags field.
*/
-#define EP_FromJoin 0x000001 /* Originated in ON or USING clause of a join */
+#define EP_FromJoin 0x000001 /* Originates in ON/USING clause of outer join */
#define EP_Agg 0x000002 /* Contains one or more aggregate functions */
#define EP_Resolved 0x000004 /* IDs have been resolved to COLUMNs */
#define EP_Error 0x000008 /* Expression contains one or more errors */
@@ -11413,6 +11557,7 @@ struct Expr {
#define EP_NoReduce 0x020000 /* Cannot EXPRDUP_REDUCE this Expr */
#define EP_Unlikely 0x040000 /* unlikely() or likelihood() function */
#define EP_Constant 0x080000 /* Node is a constant */
+#define EP_CanBeNull 0x100000 /* Can be null despite NOT NULL constraint */
/*
** These macros can be used to test, set, or clear bits in the
@@ -11611,7 +11756,7 @@ struct SrcList {
#define WHERE_OMIT_OPEN_CLOSE 0x0010 /* Table cursors are already open */
#define WHERE_FORCE_TABLE 0x0020 /* Do not use an index-only search */
#define WHERE_ONETABLE_ONLY 0x0040 /* Only code the 1st table in pTabList */
-#define WHERE_AND_ONLY 0x0080 /* Don't use indices for OR terms */
+ /* 0x0080 // not currently used */
#define WHERE_GROUPBY 0x0100 /* pOrderBy is really a GROUP BY */
#define WHERE_DISTINCTBY 0x0200 /* pOrderby is really a DISTINCT clause */
#define WHERE_WANT_DISTINCT 0x0400 /* All output needs to be distinct */
@@ -11654,17 +11799,22 @@ struct NameContext {
NameContext *pNext; /* Next outer name context. NULL for outermost */
int nRef; /* Number of names resolved by this context */
int nErr; /* Number of errors encountered while resolving names */
- u8 ncFlags; /* Zero or more NC_* flags defined below */
+ u16 ncFlags; /* Zero or more NC_* flags defined below */
};
/*
** Allowed values for the NameContext, ncFlags field.
+**
+** Note: NC_MinMaxAgg must have the same value as SF_MinMaxAgg and
+** SQLITE_FUNC_MINMAX.
+**
*/
-#define NC_AllowAgg 0x01 /* Aggregate functions are allowed here */
-#define NC_HasAgg 0x02 /* One or more aggregate functions seen */
-#define NC_IsCheck 0x04 /* True if resolving names in a CHECK constraint */
-#define NC_InAggFunc 0x08 /* True if analyzing arguments to an agg func */
-#define NC_PartIdx 0x10 /* True if resolving a partial index WHERE */
+#define NC_AllowAgg 0x0001 /* Aggregate functions are allowed here */
+#define NC_HasAgg 0x0002 /* One or more aggregate functions seen */
+#define NC_IsCheck 0x0004 /* True if resolving names in a CHECK constraint */
+#define NC_InAggFunc 0x0008 /* True if analyzing arguments to an agg func */
+#define NC_PartIdx 0x0010 /* True if resolving a partial index WHERE */
+#define NC_MinMaxAgg 0x1000 /* min/max aggregates seen. See note above */
/*
** An instance of the following structure contains all information
@@ -11691,6 +11841,9 @@ struct Select {
u8 op; /* One of: TK_UNION TK_ALL TK_INTERSECT TK_EXCEPT */
u16 selFlags; /* Various SF_* values */
int iLimit, iOffset; /* Memory registers holding LIMIT & OFFSET counters */
+#if SELECTTRACE_ENABLED
+ char zSelName[12]; /* Symbolic name of this SELECT use for debugging */
+#endif
int addrOpenEphm[2]; /* OP_OpenEphem opcodes related to this select */
u64 nSelectRow; /* Estimated number of result rows */
SrcList *pSrc; /* The FROM clause */
@@ -11715,13 +11868,13 @@ struct Select {
#define SF_UsesEphemeral 0x0008 /* Uses the OpenEphemeral opcode */
#define SF_Expanded 0x0010 /* sqlite3SelectExpand() called on this */
#define SF_HasTypeInfo 0x0020 /* FROM subqueries have Table metadata */
- /* 0x0040 NOT USED */
+#define SF_Compound 0x0040 /* Part of a compound query */
#define SF_Values 0x0080 /* Synthesized from VALUES clause */
/* 0x0100 NOT USED */
#define SF_NestedFrom 0x0200 /* Part of a parenthesized FROM clause */
#define SF_MaybeConvert 0x0400 /* Need convertCompoundSelectToSubquery() */
#define SF_Recursive 0x0800 /* The recursive part of a recursive CTE */
-#define SF_Compound 0x1000 /* Part of a compound query */
+#define SF_MinMaxAgg 0x1000 /* Aggregate containing min() or max() */
/*
@@ -11949,6 +12102,10 @@ struct Parse {
int regRowid; /* Register holding rowid of CREATE TABLE entry */
int regRoot; /* Register holding root page number for new objects */
int nMaxArg; /* Max args passed to user function by sub-program */
+#if SELECTTRACE_ENABLED
+ int nSelect; /* Number of SELECT statements seen */
+ int nSelectIndent; /* How far to indent SELECTTRACE() output */
+#endif
#ifndef SQLITE_OMIT_SHARED_CACHE
int nTableLock; /* Number of locks in aTableLock */
TableLock *aTableLock; /* Required table locks for shared-cache mode */
@@ -12028,11 +12185,11 @@ struct AuthContext {
** Bitfield flags for P5 value in various opcodes.
*/
#define OPFLAG_NCHANGE 0x01 /* Set to update db->nChange */
+#define OPFLAG_EPHEM 0x01 /* OP_Column: Ephemeral output is ok */
#define OPFLAG_LASTROWID 0x02 /* Set to update db->lastRowid */
#define OPFLAG_ISUPDATE 0x04 /* This OP_Insert is an sql UPDATE */
#define OPFLAG_APPEND 0x08 /* This is likely to be an append */
#define OPFLAG_USESEEKRESULT 0x10 /* Try to avoid a seek in BtreeInsert() */
-#define OPFLAG_CLEARCACHE 0x20 /* Clear pseudo-table cache in OP_Column */
#define OPFLAG_LENGTHARG 0x40 /* OP_Column only used for length() */
#define OPFLAG_TYPEOFARG 0x80 /* OP_Column only used for typeof() */
#define OPFLAG_BULKCSR 0x01 /* OP_Open** used to open bulk cursor */
@@ -12296,6 +12453,17 @@ struct With {
} a[1];
};
+#ifdef SQLITE_DEBUG
+/*
+** An instance of the TreeView object is used for printing the content of
+** data structures on sqlite3DebugPrintf() using a tree-like view.
+*/
+struct TreeView {
+ int iLevel; /* Which level of the tree we are on */
+ u8 bLine[100]; /* Draw vertical in column i if bLine[i] is true */
+};
+#endif /* SQLITE_DEBUG */
+
/*
** Assuming zIn points to the first byte of a UTF-8 character,
** advance zIn to point to the first byte of the next UTF-8 character.
@@ -12323,8 +12491,8 @@ SQLITE_PRIVATE int sqlite3CantopenError(int);
/*
** FTS4 is really an extension for FTS3. It is enabled using the
-** SQLITE_ENABLE_FTS3 macro. But to avoid confusion we also all
-** the SQLITE_ENABLE_FTS4 macro to serve as an alisse for SQLITE_ENABLE_FTS3.
+** SQLITE_ENABLE_FTS3 macro. But to avoid confusion we also call
+** the SQLITE_ENABLE_FTS4 macro to serve as an alias for SQLITE_ENABLE_FTS3.
*/
#if defined(SQLITE_ENABLE_FTS4) && !defined(SQLITE_ENABLE_FTS3)
# define SQLITE_ENABLE_FTS3
@@ -12361,6 +12529,7 @@ SQLITE_PRIVATE int sqlite3CantopenError(int);
# define sqlite3Isxdigit(x) isxdigit((unsigned char)(x))
# define sqlite3Tolower(x) tolower((unsigned char)(x))
#endif
+SQLITE_PRIVATE int sqlite3IsIdChar(u8);
/*
** Internal function prototypes
@@ -12371,15 +12540,15 @@ SQLITE_PRIVATE int sqlite3Strlen30(const char*);
SQLITE_PRIVATE int sqlite3MallocInit(void);
SQLITE_PRIVATE void sqlite3MallocEnd(void);
-SQLITE_PRIVATE void *sqlite3Malloc(int);
-SQLITE_PRIVATE void *sqlite3MallocZero(int);
-SQLITE_PRIVATE void *sqlite3DbMallocZero(sqlite3*, int);
-SQLITE_PRIVATE void *sqlite3DbMallocRaw(sqlite3*, int);
+SQLITE_PRIVATE void *sqlite3Malloc(u64);
+SQLITE_PRIVATE void *sqlite3MallocZero(u64);
+SQLITE_PRIVATE void *sqlite3DbMallocZero(sqlite3*, u64);
+SQLITE_PRIVATE void *sqlite3DbMallocRaw(sqlite3*, u64);
SQLITE_PRIVATE char *sqlite3DbStrDup(sqlite3*,const char*);
-SQLITE_PRIVATE char *sqlite3DbStrNDup(sqlite3*,const char*, int);
-SQLITE_PRIVATE void *sqlite3Realloc(void*, int);
-SQLITE_PRIVATE void *sqlite3DbReallocOrFree(sqlite3 *, void *, int);
-SQLITE_PRIVATE void *sqlite3DbRealloc(sqlite3 *, void *, int);
+SQLITE_PRIVATE char *sqlite3DbStrNDup(sqlite3*,const char*, u64);
+SQLITE_PRIVATE void *sqlite3Realloc(void*, u64);
+SQLITE_PRIVATE void *sqlite3DbReallocOrFree(sqlite3 *, void *, u64);
+SQLITE_PRIVATE void *sqlite3DbRealloc(sqlite3 *, void *, u64);
SQLITE_PRIVATE void sqlite3DbFree(sqlite3*, void*);
SQLITE_PRIVATE int sqlite3MallocSize(void*);
SQLITE_PRIVATE int sqlite3DbMallocSize(sqlite3*, void*);
@@ -12459,25 +12628,14 @@ SQLITE_PRIVATE void sqlite3DebugPrintf(const char*, ...);
SQLITE_PRIVATE void *sqlite3TestTextToPtr(const char*);
#endif
-/* Output formatting for SQLITE_TESTCTRL_EXPLAIN */
-#if defined(SQLITE_ENABLE_TREE_EXPLAIN)
-SQLITE_PRIVATE void sqlite3ExplainBegin(Vdbe*);
-SQLITE_PRIVATE void sqlite3ExplainPrintf(Vdbe*, const char*, ...);
-SQLITE_PRIVATE void sqlite3ExplainNL(Vdbe*);
-SQLITE_PRIVATE void sqlite3ExplainPush(Vdbe*);
-SQLITE_PRIVATE void sqlite3ExplainPop(Vdbe*);
-SQLITE_PRIVATE void sqlite3ExplainFinish(Vdbe*);
-SQLITE_PRIVATE void sqlite3ExplainSelect(Vdbe*, Select*);
-SQLITE_PRIVATE void sqlite3ExplainExpr(Vdbe*, Expr*);
-SQLITE_PRIVATE void sqlite3ExplainExprList(Vdbe*, ExprList*);
-SQLITE_PRIVATE const char *sqlite3VdbeExplanation(Vdbe*);
-#else
-# define sqlite3ExplainBegin(X)
-# define sqlite3ExplainSelect(A,B)
-# define sqlite3ExplainExpr(A,B)
-# define sqlite3ExplainExprList(A,B)
-# define sqlite3ExplainFinish(X)
-# define sqlite3VdbeExplanation(X) 0
+#if defined(SQLITE_DEBUG)
+SQLITE_PRIVATE TreeView *sqlite3TreeViewPush(TreeView*,u8);
+SQLITE_PRIVATE void sqlite3TreeViewPop(TreeView*);
+SQLITE_PRIVATE void sqlite3TreeViewLine(TreeView*, const char*, ...);
+SQLITE_PRIVATE void sqlite3TreeViewItem(TreeView*, const char*, u8);
+SQLITE_PRIVATE void sqlite3TreeViewExpr(TreeView*, const Expr*, u8);
+SQLITE_PRIVATE void sqlite3TreeViewExprList(TreeView*, const ExprList*, u8, const char*);
+SQLITE_PRIVATE void sqlite3TreeViewSelect(TreeView*, const Select*, u8);
#endif
@@ -12659,7 +12817,7 @@ SQLITE_PRIVATE void sqlite3CloseSavepoints(sqlite3 *);
SQLITE_PRIVATE void sqlite3LeaveMutexAndCloseZombie(sqlite3*);
SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr*);
SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr*);
-SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr*);
+SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr*, u8);
SQLITE_PRIVATE int sqlite3ExprIsInteger(Expr*, int*);
SQLITE_PRIVATE int sqlite3ExprCanBeNull(const Expr*);
SQLITE_PRIVATE int sqlite3ExprNeedsNoAffinityChange(const Expr*, char);
@@ -12683,6 +12841,11 @@ SQLITE_PRIVATE ExprList *sqlite3ExprListDup(sqlite3*,ExprList*,int);
SQLITE_PRIVATE SrcList *sqlite3SrcListDup(sqlite3*,SrcList*,int);
SQLITE_PRIVATE IdList *sqlite3IdListDup(sqlite3*,IdList*);
SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3*,Select*,int);
+#if SELECTTRACE_ENABLED
+SQLITE_PRIVATE void sqlite3SelectSetName(Select*,const char*);
+#else
+# define sqlite3SelectSetName(A,B)
+#endif
SQLITE_PRIVATE void sqlite3FuncDefInsert(FuncDefHash*, FuncDef*);
SQLITE_PRIVATE FuncDef *sqlite3FindFunction(sqlite3*,const char*,int,int,u8,u8);
SQLITE_PRIVATE void sqlite3RegisterBuiltinFunctions(sqlite3*);
@@ -12769,38 +12932,23 @@ SQLITE_PRIVATE u64 sqlite3LogEstToInt(LogEst);
/*
** Routines to read and write variable-length integers. These used to
** be defined locally, but now we use the varint routines in the util.c
-** file. Code should use the MACRO forms below, as the Varint32 versions
-** are coded to assume the single byte case is already handled (which
-** the MACRO form does).
+** file.
*/
SQLITE_PRIVATE int sqlite3PutVarint(unsigned char*, u64);
-SQLITE_PRIVATE int sqlite3PutVarint32(unsigned char*, u32);
SQLITE_PRIVATE u8 sqlite3GetVarint(const unsigned char *, u64 *);
SQLITE_PRIVATE u8 sqlite3GetVarint32(const unsigned char *, u32 *);
SQLITE_PRIVATE int sqlite3VarintLen(u64 v);
/*
-** The header of a record consists of a sequence variable-length integers.
-** These integers are almost always small and are encoded as a single byte.
-** The following macros take advantage this fact to provide a fast encode
-** and decode of the integers in a record header. It is faster for the common
-** case where the integer is a single byte. It is a little slower when the
-** integer is two or more bytes. But overall it is faster.
-**
-** The following expressions are equivalent:
-**
-** x = sqlite3GetVarint32( A, &B );
-** x = sqlite3PutVarint32( A, B );
-**
-** x = getVarint32( A, B );
-** x = putVarint32( A, B );
-**
+** The common case is for a varint to be a single byte. They following
+** macros handle the common case without a procedure call, but then call
+** the procedure for larger varints.
*/
#define getVarint32(A,B) \
(u8)((*(A)<(u8)0x80)?((B)=(u32)*(A)),1:sqlite3GetVarint32((A),(u32 *)&(B)))
#define putVarint32(A,B) \
(u8)(((u32)(B)<(u32)0x80)?(*(A)=(unsigned char)(B)),1:\
- sqlite3PutVarint32((A),(B)))
+ sqlite3PutVarint((A),(B)))
#define getVarint sqlite3GetVarint
#define putVarint sqlite3PutVarint
@@ -12812,7 +12960,8 @@ SQLITE_PRIVATE int sqlite3IndexAffinityOk(Expr *pExpr, char idx_affinity);
SQLITE_PRIVATE char sqlite3ExprAffinity(Expr *pExpr);
SQLITE_PRIVATE int sqlite3Atoi64(const char*, i64*, int, u8);
SQLITE_PRIVATE int sqlite3DecOrHexToI64(const char*, i64*);
-SQLITE_PRIVATE void sqlite3Error(sqlite3*, int, const char*,...);
+SQLITE_PRIVATE void sqlite3ErrorWithMsg(sqlite3*, int, const char*,...);
+SQLITE_PRIVATE void sqlite3Error(sqlite3*,int);
SQLITE_PRIVATE void *sqlite3HexToBlob(sqlite3*, const char *z, int n);
SQLITE_PRIVATE u8 sqlite3HexToInt(int h);
SQLITE_PRIVATE int sqlite3TwoPartName(Parse *, Token *, Token *, Token **);
@@ -12914,7 +13063,7 @@ SQLITE_PRIVATE int sqlite3OpenTempDatabase(Parse *);
SQLITE_PRIVATE void sqlite3StrAccumInit(StrAccum*, char*, int, int);
SQLITE_PRIVATE void sqlite3StrAccumAppend(StrAccum*,const char*,int);
SQLITE_PRIVATE void sqlite3StrAccumAppendAll(StrAccum*,const char*);
-SQLITE_PRIVATE void sqlite3AppendSpace(StrAccum*,int);
+SQLITE_PRIVATE void sqlite3AppendChar(StrAccum*,int,char);
SQLITE_PRIVATE char *sqlite3StrAccumFinish(StrAccum*);
SQLITE_PRIVATE void sqlite3StrAccumReset(StrAccum*);
SQLITE_PRIVATE void sqlite3SelectDestInit(SelectDest*,int,int);
@@ -12934,7 +13083,7 @@ SQLITE_PRIVATE int sqlite3Stat4Column(sqlite3*, const void*, int, int, sqlite3_v
/*
** The interface to the LEMON-generated parser
*/
-SQLITE_PRIVATE void *sqlite3ParserAlloc(void*(*)(size_t));
+SQLITE_PRIVATE void *sqlite3ParserAlloc(void*(*)(u64));
SQLITE_PRIVATE void sqlite3ParserFree(void*, void(*)(void*));
SQLITE_PRIVATE void sqlite3Parser(void*, int, Token, Parse*);
#ifdef YYTRACKMAXSTACKDEPTH
@@ -13174,10 +13323,17 @@ SQLITE_PRIVATE int sqlite3MemdebugNoType(void*,u8);
# define sqlite3MemdebugNoType(X,Y) 1
#endif
#define MEMTYPE_HEAP 0x01 /* General heap allocations */
-#define MEMTYPE_LOOKASIDE 0x02 /* Might have been lookaside memory */
+#define MEMTYPE_LOOKASIDE 0x02 /* Heap that might have been lookaside */
#define MEMTYPE_SCRATCH 0x04 /* Scratch allocations */
#define MEMTYPE_PCACHE 0x08 /* Page cache allocations */
-#define MEMTYPE_DB 0x10 /* Uses sqlite3DbMalloc, not sqlite_malloc */
+
+/*
+** Threading interface
+*/
+#if SQLITE_MAX_WORKER_THREADS>0
+SQLITE_PRIVATE int sqlite3ThreadCreate(SQLiteThread**,void*(*)(void*),void*);
+SQLITE_PRIVATE int sqlite3ThreadJoin(SQLiteThread*, void**);
+#endif
#endif /* _SQLITEINT_H_ */
@@ -13195,7 +13351,7 @@ SQLITE_PRIVATE int sqlite3MemdebugNoType(void*,u8);
**
*************************************************************************
**
-** This file contains definitions of global variables and contants.
+** This file contains definitions of global variables and constants.
*/
/* An array to map all upper-case characters into their corresponding
@@ -13313,6 +13469,13 @@ SQLITE_PRIVATE const unsigned char sqlite3CtypeMap[256] = {
};
#endif
+/* EVIDENCE-OF: R-02982-34736 In order to maintain full backwards
+** compatibility for legacy applications, the URI filename capability is
+** disabled by default.
+**
+** EVIDENCE-OF: R-38799-08373 URI filenames can be enabled or disabled
+** using the SQLITE_USE_URI=1 or SQLITE_USE_URI=0 compile-time options.
+*/
#ifndef SQLITE_USE_URI
# define SQLITE_USE_URI 0
#endif
@@ -13792,6 +13955,9 @@ static const char * const azCompileOpt[] = {
#ifdef SQLITE_USE_ALLOCA
"USE_ALLOCA",
#endif
+#ifdef SQLITE_USER_AUTHENTICATION
+ "USER_AUTHENTICATION",
+#endif
#ifdef SQLITE_WIN32_MALLOC
"WIN32_MALLOC",
#endif
@@ -13816,7 +13982,7 @@ SQLITE_API int sqlite3_compileoption_used(const char *zOptName){
** linear search is adequate. No need for a binary search. */
for(i=0; i<ArraySize(azCompileOpt); i++){
if( sqlite3StrNICmp(zOptName, azCompileOpt[i], n)==0
- && sqlite3CtypeMap[(unsigned char)azCompileOpt[i][n]]==0
+ && sqlite3IsIdChar((unsigned char)azCompileOpt[i][n])==0
){
return 1;
}
@@ -13931,7 +14097,6 @@ struct VdbeCursor {
#endif
i8 iDb; /* Index of cursor database in db->aDb[] (or -1) */
u8 nullRow; /* True if pointing to a row with no data */
- u8 rowidIsValid; /* True if lastRowid is valid */
u8 deferredMoveto; /* A call to sqlite3BtreeMoveto() is needed */
Bool isEphemeral:1; /* True for an ephemeral table */
Bool useRandomRowid:1;/* Generate new record numbers semi-randomly */
@@ -13941,7 +14106,6 @@ struct VdbeCursor {
sqlite3_vtab_cursor *pVtabCursor; /* The cursor for a virtual table */
i64 seqCount; /* Sequence counter */
i64 movetoTarget; /* Argument to the deferred sqlite3BtreeMoveto() */
- i64 lastRowid; /* Rowid being deleted by OP_Delete */
VdbeSorter *pSorter; /* Sorter object for OP_SorterOpen cursors */
/* Cached information about the header for the data record that the
@@ -13958,6 +14122,7 @@ struct VdbeCursor {
u32 szRow; /* Byte available in aRow */
u32 iHdrOffset; /* Offset to next unparsed byte of the header */
const u8 *aRow; /* Data for the current row, if all on one page */
+ u32 *aOffset; /* Pointer to aType[nField] */
u32 aType[1]; /* Type values for all entries in the record */
/* 2*nField extra array elements allocated for aType[], beyond the one
** static element declared in the structure. nField total array slots for
@@ -14019,25 +14184,28 @@ struct VdbeFrame {
** integer etc.) of the same value.
*/
struct Mem {
- sqlite3 *db; /* The associated database connection */
- char *z; /* String or BLOB value */
- double r; /* Real value */
- union {
+ union MemValue {
+ double r; /* Real value used when MEM_Real is set in flags */
i64 i; /* Integer value used when MEM_Int is set in flags */
int nZero; /* Used when bit MEM_Zero is set in flags */
FuncDef *pDef; /* Used only when flags==MEM_Agg */
RowSet *pRowSet; /* Used only when flags==MEM_RowSet */
VdbeFrame *pFrame; /* Used when flags==MEM_Frame */
} u;
- int n; /* Number of characters in string value, excluding '\0' */
u16 flags; /* Some combination of MEM_Null, MEM_Str, MEM_Dyn, etc. */
u8 enc; /* SQLITE_UTF8, SQLITE_UTF16BE, SQLITE_UTF16LE */
+ int n; /* Number of characters in string value, excluding '\0' */
+ char *z; /* String or BLOB value */
+ /* ShallowCopy only needs to copy the information above */
+ char *zMalloc; /* Space to hold MEM_Str or MEM_Blob if szMalloc>0 */
+ int szMalloc; /* Size of the zMalloc allocation */
+ u32 uTemp; /* Transient storage for serial_type in OP_MakeRecord */
+ sqlite3 *db; /* The associated database connection */
+ void (*xDel)(void*);/* Destructor for Mem.z - only valid if MEM_Dyn */
#ifdef SQLITE_DEBUG
Mem *pScopyFrom; /* This Mem is a shallow copy of pScopyFrom */
void *pFiller; /* So that sizeof(Mem) is a multiple of 8 */
#endif
- void (*xDel)(void *); /* If not null, call this function to delete Mem.z */
- char *zMalloc; /* Dynamic buffer allocated by sqlite3_malloc() */
};
/* One or more of the following flags are set to indicate the validOK
@@ -14096,7 +14264,7 @@ struct Mem {
#endif
/*
-** Each auxilliary data pointer stored by a user defined function
+** Each auxiliary data pointer stored by a user defined function
** implementation calling sqlite3_set_auxdata() is stored in an instance
** of this structure. All such structures associated with a single VM
** are stored in a linked list headed at Vdbe.pAuxData. All are destroyed
@@ -14111,7 +14279,7 @@ struct AuxData {
};
/*
-** The "context" argument for a installable function. A pointer to an
+** The "context" argument for an installable function. A pointer to an
** instance of this structure is the first argument to the routines used
** implement the SQL functions.
**
@@ -14124,14 +14292,13 @@ struct AuxData {
** (Mem) which are only defined there.
*/
struct sqlite3_context {
- FuncDef *pFunc; /* Pointer to function information. MUST BE FIRST */
- Mem s; /* The return value is stored here */
+ Mem *pOut; /* The return value is stored here */
+ FuncDef *pFunc; /* Pointer to function information */
Mem *pMem; /* Memory cell used to store aggregate context */
- CollSeq *pColl; /* Collating sequence */
Vdbe *pVdbe; /* The VM that owns this context */
int iOp; /* Instruction number of OP_Function */
int isError; /* Error code returned by the function. */
- u8 skipFlag; /* Skip skip accumulator loading if true */
+ u8 skipFlag; /* Skip accumulator loading if true */
u8 fErrorOrAux; /* isError!=0 or pVdbe->pAuxData modified */
};
@@ -14216,10 +14383,6 @@ struct Vdbe {
i64 nStmtDefImmCons; /* Number of def. imm constraints when stmt started */
char *zSql; /* Text of the SQL statement that generated this */
void *pFree; /* Free this when deleting the vdbe */
-#ifdef SQLITE_ENABLE_TREE_EXPLAIN
- Explain *pExplain; /* The explainer */
- char *zExplain; /* Explanation of data structures */
-#endif
VdbeFrame *pFrame; /* Parent frame */
VdbeFrame *pDelFrame; /* List of frame objects to free on VM reset */
int nFrame; /* Number of frames in pFrame list */
@@ -14244,6 +14407,7 @@ struct Vdbe {
SQLITE_PRIVATE void sqlite3VdbeFreeCursor(Vdbe *, VdbeCursor*);
void sqliteVdbePopStack(Vdbe*,int);
SQLITE_PRIVATE int sqlite3VdbeCursorMoveto(VdbeCursor*);
+SQLITE_PRIVATE int sqlite3VdbeCursorRestore(VdbeCursor*);
#if defined(SQLITE_DEBUG) || defined(VDBE_PROFILE)
SQLITE_PRIVATE void sqlite3VdbePrintOp(FILE*, int, Op*);
#endif
@@ -14254,8 +14418,8 @@ SQLITE_PRIVATE u32 sqlite3VdbeSerialGet(const unsigned char*, u32, Mem*);
SQLITE_PRIVATE void sqlite3VdbeDeleteAuxData(Vdbe*, int, int);
int sqlite2BtreeKeyCompare(BtCursor *, const void *, int, int, int *);
-SQLITE_PRIVATE int sqlite3VdbeIdxKeyCompare(VdbeCursor*,UnpackedRecord*,int*);
-SQLITE_PRIVATE int sqlite3VdbeIdxRowid(sqlite3*, BtCursor *, i64 *);
+SQLITE_PRIVATE int sqlite3VdbeIdxKeyCompare(sqlite3*,VdbeCursor*,UnpackedRecord*,int*);
+SQLITE_PRIVATE int sqlite3VdbeIdxRowid(sqlite3*, BtCursor*, i64*);
SQLITE_PRIVATE int sqlite3VdbeExec(Vdbe*);
SQLITE_PRIVATE int sqlite3VdbeList(Vdbe*);
SQLITE_PRIVATE int sqlite3VdbeHalt(Vdbe*);
@@ -14272,39 +14436,39 @@ SQLITE_PRIVATE void sqlite3VdbeMemSetInt64(Mem*, i64);
#else
SQLITE_PRIVATE void sqlite3VdbeMemSetDouble(Mem*, double);
#endif
+SQLITE_PRIVATE void sqlite3VdbeMemInit(Mem*,sqlite3*,u16);
SQLITE_PRIVATE void sqlite3VdbeMemSetNull(Mem*);
SQLITE_PRIVATE void sqlite3VdbeMemSetZeroBlob(Mem*,int);
SQLITE_PRIVATE void sqlite3VdbeMemSetRowSet(Mem*);
SQLITE_PRIVATE int sqlite3VdbeMemMakeWriteable(Mem*);
-SQLITE_PRIVATE int sqlite3VdbeMemStringify(Mem*, int);
+SQLITE_PRIVATE int sqlite3VdbeMemStringify(Mem*, u8, u8);
SQLITE_PRIVATE i64 sqlite3VdbeIntValue(Mem*);
SQLITE_PRIVATE int sqlite3VdbeMemIntegerify(Mem*);
SQLITE_PRIVATE double sqlite3VdbeRealValue(Mem*);
SQLITE_PRIVATE void sqlite3VdbeIntegerAffinity(Mem*);
SQLITE_PRIVATE int sqlite3VdbeMemRealify(Mem*);
SQLITE_PRIVATE int sqlite3VdbeMemNumerify(Mem*);
+SQLITE_PRIVATE void sqlite3VdbeMemCast(Mem*,u8,u8);
SQLITE_PRIVATE int sqlite3VdbeMemFromBtree(BtCursor*,u32,u32,int,Mem*);
SQLITE_PRIVATE void sqlite3VdbeMemRelease(Mem *p);
-SQLITE_PRIVATE void sqlite3VdbeMemReleaseExternal(Mem *p);
#define VdbeMemDynamic(X) \
(((X)->flags&(MEM_Agg|MEM_Dyn|MEM_RowSet|MEM_Frame))!=0)
-#define VdbeMemRelease(X) \
- if( VdbeMemDynamic(X) ) sqlite3VdbeMemReleaseExternal(X);
SQLITE_PRIVATE int sqlite3VdbeMemFinalize(Mem*, FuncDef*);
SQLITE_PRIVATE const char *sqlite3OpcodeName(int);
SQLITE_PRIVATE int sqlite3VdbeMemGrow(Mem *pMem, int n, int preserve);
+SQLITE_PRIVATE int sqlite3VdbeMemClearAndResize(Mem *pMem, int n);
SQLITE_PRIVATE int sqlite3VdbeCloseStatement(Vdbe *, int);
SQLITE_PRIVATE void sqlite3VdbeFrameDelete(VdbeFrame*);
SQLITE_PRIVATE int sqlite3VdbeFrameRestore(VdbeFrame *);
SQLITE_PRIVATE int sqlite3VdbeTransferError(Vdbe *p);
-SQLITE_PRIVATE int sqlite3VdbeSorterInit(sqlite3 *, VdbeCursor *);
+SQLITE_PRIVATE int sqlite3VdbeSorterInit(sqlite3 *, int, VdbeCursor *);
SQLITE_PRIVATE void sqlite3VdbeSorterReset(sqlite3 *, VdbeSorter *);
SQLITE_PRIVATE void sqlite3VdbeSorterClose(sqlite3 *, VdbeCursor *);
SQLITE_PRIVATE int sqlite3VdbeSorterRowkey(const VdbeCursor *, Mem *);
SQLITE_PRIVATE int sqlite3VdbeSorterNext(sqlite3 *, const VdbeCursor *, int *);
-SQLITE_PRIVATE int sqlite3VdbeSorterRewind(sqlite3 *, const VdbeCursor *, int *);
-SQLITE_PRIVATE int sqlite3VdbeSorterWrite(sqlite3 *, const VdbeCursor *, Mem *);
+SQLITE_PRIVATE int sqlite3VdbeSorterRewind(const VdbeCursor *, int *);
+SQLITE_PRIVATE int sqlite3VdbeSorterWrite(const VdbeCursor *, Mem *);
SQLITE_PRIVATE int sqlite3VdbeSorterCompare(const VdbeCursor *, Mem *, int, int *);
#if !defined(SQLITE_OMIT_SHARED_CACHE) && SQLITE_THREADSAFE>0
@@ -14543,7 +14707,7 @@ SQLITE_API int sqlite3_db_status(
}
db->pnBytesFreed = 0;
- *pHighwater = 0;
+ *pHighwater = 0; /* IMP: R-64479-57858 */
*pCurrent = nByte;
break;
@@ -14568,7 +14732,9 @@ SQLITE_API int sqlite3_db_status(
sqlite3PagerCacheStat(pPager, op, resetFlag, &nRet);
}
}
- *pHighwater = 0;
+ *pHighwater = 0; /* IMP: R-42420-56072 */
+ /* IMP: R-54100-20147 */
+ /* IMP: R-29431-39229 */
*pCurrent = nRet;
break;
}
@@ -14578,7 +14744,7 @@ SQLITE_API int sqlite3_db_status(
** have been satisfied. The *pHighwater is always set to zero.
*/
case SQLITE_DBSTATUS_DEFERRED_FKS: {
- *pHighwater = 0;
+ *pHighwater = 0; /* IMP: R-11967-56545 */
*pCurrent = db->nDeferredImmCons>0 || db->nDeferredCons>0;
break;
}
@@ -14619,7 +14785,7 @@ SQLITE_API int sqlite3_db_status(
** 1970-01-01 00:00:00 is JD 2440587.5
** 2000-01-01 00:00:00 is JD 2451544.5
**
-** This implemention requires years to be expressed as a 4-digit number
+** This implementation requires years to be expressed as a 4-digit number
** which means that only dates between 0000-01-01 and 9999-12-31 can
** be represented, even though julian day numbers allow a much wider
** range of dates.
@@ -16467,7 +16633,7 @@ static int sqlite3MemSize(void *pPrior){
**
** For this low-level interface, we know that pPrior!=0. Cases where
** pPrior==0 while have been intercepted by higher-level routine and
-** redirected to xMalloc. Similarly, we know that nByte>0 becauses
+** redirected to xMalloc. Similarly, we know that nByte>0 because
** cases where nByte<=0 will have been intercepted by higher-level
** routines and redirected to xFree.
*/
@@ -16970,7 +17136,7 @@ SQLITE_PRIVATE void sqlite3MemdebugSetType(void *p, u8 eType){
** This routine is designed for use within an assert() statement, to
** verify the type of an allocation. For example:
**
-** assert( sqlite3MemdebugHasType(p, MEMTYPE_DB) );
+** assert( sqlite3MemdebugHasType(p, MEMTYPE_HEAP) );
*/
SQLITE_PRIVATE int sqlite3MemdebugHasType(void *p, u8 eType){
int rc = 1;
@@ -16992,7 +17158,7 @@ SQLITE_PRIVATE int sqlite3MemdebugHasType(void *p, u8 eType){
** This routine is designed for use within an assert() statement, to
** verify the type of an allocation. For example:
**
-** assert( sqlite3MemdebugNoType(p, MEMTYPE_DB) );
+** assert( sqlite3MemdebugNoType(p, MEMTYPE_LOOKASIDE) );
*/
SQLITE_PRIVATE int sqlite3MemdebugNoType(void *p, u8 eType){
int rc = 1;
@@ -17824,7 +17990,7 @@ SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetMemsys3(void){
** 1. All memory allocations sizes are rounded up to a power of 2.
**
** 2. If two adjacent free blocks are the halves of a larger block,
-** then the two blocks are coalesed into the single larger block.
+** then the two blocks are coalesced into the single larger block.
**
** 3. New memory is allocated from the first available free block.
**
@@ -19393,6 +19559,16 @@ SQLITE_API int sqlite3_open_file_count = 0;
# define SQLITE_OS_WINRT 0
#endif
+/*
+** For WinCE, some API function parameters do not appear to be declared as
+** volatile.
+*/
+#if SQLITE_OS_WINCE
+# define SQLITE_WIN32_VOLATILE
+#else
+# define SQLITE_WIN32_VOLATILE volatile
+#endif
+
#endif /* _OS_WIN_H_ */
/************** End of os_win.h **********************************************/
@@ -19473,7 +19649,7 @@ static int winMutex_isNt = -1; /* <0 means "need to query" */
** of the sqlite3_initialize() and sqlite3_shutdown() processing, the
** "interlocked" magic used here is probably not strictly necessary.
*/
-static LONG volatile winMutex_lock = 0;
+static LONG SQLITE_WIN32_VOLATILE winMutex_lock = 0;
SQLITE_API int sqlite3_win32_is_nt(void); /* os_win.c */
SQLITE_API void sqlite3_win32_sleep(DWORD milliseconds); /* os_win.c */
@@ -20041,11 +20217,9 @@ static int mallocWithAlarm(int n, void **pp){
** Allocate memory. This routine is like sqlite3_malloc() except that it
** assumes the memory subsystem has already been initialized.
*/
-SQLITE_PRIVATE void *sqlite3Malloc(int n){
+SQLITE_PRIVATE void *sqlite3Malloc(u64 n){
void *p;
- if( n<=0 /* IMP: R-65312-04917 */
- || n>=0x7fffff00
- ){
+ if( n==0 || n>=0x7fffff00 ){
/* A memory allocation of a number of bytes which is near the maximum
** signed integer value might cause an integer overflow inside of the
** xMalloc(). Hence we limit the maximum size to 0x7fffff00, giving
@@ -20054,12 +20228,12 @@ SQLITE_PRIVATE void *sqlite3Malloc(int n){
p = 0;
}else if( sqlite3GlobalConfig.bMemstat ){
sqlite3_mutex_enter(mem0.mutex);
- mallocWithAlarm(n, &p);
+ mallocWithAlarm((int)n, &p);
sqlite3_mutex_leave(mem0.mutex);
}else{
- p = sqlite3GlobalConfig.m.xMalloc(n);
+ p = sqlite3GlobalConfig.m.xMalloc((int)n);
}
- assert( EIGHT_BYTE_ALIGNMENT(p) ); /* IMP: R-04675-44850 */
+ assert( EIGHT_BYTE_ALIGNMENT(p) ); /* IMP: R-11148-40995 */
return p;
}
@@ -20072,6 +20246,12 @@ SQLITE_API void *sqlite3_malloc(int n){
#ifndef SQLITE_OMIT_AUTOINIT
if( sqlite3_initialize() ) return 0;
#endif
+ return n<=0 ? 0 : sqlite3Malloc(n);
+}
+SQLITE_API void *sqlite3_malloc64(sqlite3_uint64 n){
+#ifndef SQLITE_OMIT_AUTOINIT
+ if( sqlite3_initialize() ) return 0;
+#endif
return sqlite3Malloc(n);
}
@@ -20099,22 +20279,20 @@ SQLITE_PRIVATE void *sqlite3ScratchMalloc(int n){
assert( n>0 );
sqlite3_mutex_enter(mem0.mutex);
+ sqlite3StatusSet(SQLITE_STATUS_SCRATCH_SIZE, n);
if( mem0.nScratchFree && sqlite3GlobalConfig.szScratch>=n ){
p = mem0.pScratchFree;
mem0.pScratchFree = mem0.pScratchFree->pNext;
mem0.nScratchFree--;
sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_USED, 1);
- sqlite3StatusSet(SQLITE_STATUS_SCRATCH_SIZE, n);
sqlite3_mutex_leave(mem0.mutex);
}else{
- if( sqlite3GlobalConfig.bMemstat ){
- sqlite3StatusSet(SQLITE_STATUS_SCRATCH_SIZE, n);
- n = mallocWithAlarm(n, &p);
- if( p ) sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_OVERFLOW, n);
- sqlite3_mutex_leave(mem0.mutex);
- }else{
+ sqlite3_mutex_leave(mem0.mutex);
+ p = sqlite3Malloc(n);
+ if( sqlite3GlobalConfig.bMemstat && p ){
+ sqlite3_mutex_enter(mem0.mutex);
+ sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_OVERFLOW, sqlite3MallocSize(p));
sqlite3_mutex_leave(mem0.mutex);
- p = sqlite3GlobalConfig.m.xMalloc(n);
}
sqlite3MemdebugSetType(p, MEMTYPE_SCRATCH);
}
@@ -20192,29 +20370,37 @@ static int isLookaside(sqlite3 *db, void *p){
*/
SQLITE_PRIVATE int sqlite3MallocSize(void *p){
assert( sqlite3MemdebugHasType(p, MEMTYPE_HEAP) );
- assert( sqlite3MemdebugNoType(p, MEMTYPE_DB) );
return sqlite3GlobalConfig.m.xSize(p);
}
SQLITE_PRIVATE int sqlite3DbMallocSize(sqlite3 *db, void *p){
- assert( db!=0 );
- assert( sqlite3_mutex_held(db->mutex) );
- if( isLookaside(db, p) ){
- return db->lookaside.sz;
+ if( db==0 ){
+ assert( sqlite3MemdebugNoType(p, ~MEMTYPE_HEAP) );
+ assert( sqlite3MemdebugHasType(p, MEMTYPE_HEAP) );
+ return sqlite3MallocSize(p);
}else{
- assert( sqlite3MemdebugHasType(p, MEMTYPE_DB) );
- assert( sqlite3MemdebugHasType(p, MEMTYPE_LOOKASIDE|MEMTYPE_HEAP) );
- assert( db!=0 || sqlite3MemdebugNoType(p, MEMTYPE_LOOKASIDE) );
- return sqlite3GlobalConfig.m.xSize(p);
+ assert( sqlite3_mutex_held(db->mutex) );
+ if( isLookaside(db, p) ){
+ return db->lookaside.sz;
+ }else{
+ assert( sqlite3MemdebugHasType(p, (MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) );
+ assert( sqlite3MemdebugNoType(p, ~(MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) );
+ return sqlite3GlobalConfig.m.xSize(p);
+ }
}
}
+SQLITE_API sqlite3_uint64 sqlite3_msize(void *p){
+ assert( sqlite3MemdebugNoType(p, ~MEMTYPE_HEAP) );
+ assert( sqlite3MemdebugHasType(p, MEMTYPE_HEAP) );
+ return (sqlite3_uint64)sqlite3GlobalConfig.m.xSize(p);
+}
/*
** Free memory previously obtained from sqlite3Malloc().
*/
SQLITE_API void sqlite3_free(void *p){
if( p==0 ) return; /* IMP: R-49053-54554 */
- assert( sqlite3MemdebugNoType(p, MEMTYPE_DB) );
assert( sqlite3MemdebugHasType(p, MEMTYPE_HEAP) );
+ assert( sqlite3MemdebugNoType(p, ~MEMTYPE_HEAP) );
if( sqlite3GlobalConfig.bMemstat ){
sqlite3_mutex_enter(mem0.mutex);
sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, -sqlite3MallocSize(p));
@@ -20227,6 +20413,14 @@ SQLITE_API void sqlite3_free(void *p){
}
/*
+** Add the size of memory allocation "p" to the count in
+** *db->pnBytesFreed.
+*/
+static SQLITE_NOINLINE void measureAllocationSize(sqlite3 *db, void *p){
+ *db->pnBytesFreed += sqlite3DbMallocSize(db,p);
+}
+
+/*
** Free memory that might be associated with a particular database
** connection.
*/
@@ -20235,7 +20429,7 @@ SQLITE_PRIVATE void sqlite3DbFree(sqlite3 *db, void *p){
if( p==0 ) return;
if( db ){
if( db->pnBytesFreed ){
- *db->pnBytesFreed += sqlite3DbMallocSize(db, p);
+ measureAllocationSize(db, p);
return;
}
if( isLookaside(db, p) ){
@@ -20250,8 +20444,8 @@ SQLITE_PRIVATE void sqlite3DbFree(sqlite3 *db, void *p){
return;
}
}
- assert( sqlite3MemdebugHasType(p, MEMTYPE_DB) );
- assert( sqlite3MemdebugHasType(p, MEMTYPE_LOOKASIDE|MEMTYPE_HEAP) );
+ assert( sqlite3MemdebugHasType(p, (MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) );
+ assert( sqlite3MemdebugNoType(p, ~(MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) );
assert( db!=0 || sqlite3MemdebugNoType(p, MEMTYPE_LOOKASIDE) );
sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
sqlite3_free(p);
@@ -20260,14 +20454,16 @@ SQLITE_PRIVATE void sqlite3DbFree(sqlite3 *db, void *p){
/*
** Change the size of an existing memory allocation
*/
-SQLITE_PRIVATE void *sqlite3Realloc(void *pOld, int nBytes){
+SQLITE_PRIVATE void *sqlite3Realloc(void *pOld, u64 nBytes){
int nOld, nNew, nDiff;
void *pNew;
+ assert( sqlite3MemdebugHasType(pOld, MEMTYPE_HEAP) );
+ assert( sqlite3MemdebugNoType(pOld, ~MEMTYPE_HEAP) );
if( pOld==0 ){
- return sqlite3Malloc(nBytes); /* IMP: R-28354-25769 */
+ return sqlite3Malloc(nBytes); /* IMP: R-04300-56712 */
}
- if( nBytes<=0 ){
- sqlite3_free(pOld); /* IMP: R-31593-10574 */
+ if( nBytes==0 ){
+ sqlite3_free(pOld); /* IMP: R-26507-47431 */
return 0;
}
if( nBytes>=0x7fffff00 ){
@@ -20278,22 +20474,20 @@ SQLITE_PRIVATE void *sqlite3Realloc(void *pOld, int nBytes){
/* IMPLEMENTATION-OF: R-46199-30249 SQLite guarantees that the second
** argument to xRealloc is always a value returned by a prior call to
** xRoundup. */
- nNew = sqlite3GlobalConfig.m.xRoundup(nBytes);
+ nNew = sqlite3GlobalConfig.m.xRoundup((int)nBytes);
if( nOld==nNew ){
pNew = pOld;
}else if( sqlite3GlobalConfig.bMemstat ){
sqlite3_mutex_enter(mem0.mutex);
- sqlite3StatusSet(SQLITE_STATUS_MALLOC_SIZE, nBytes);
+ sqlite3StatusSet(SQLITE_STATUS_MALLOC_SIZE, (int)nBytes);
nDiff = nNew - nOld;
if( sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED) >=
mem0.alarmThreshold-nDiff ){
sqlite3MallocAlarm(nDiff);
}
- assert( sqlite3MemdebugHasType(pOld, MEMTYPE_HEAP) );
- assert( sqlite3MemdebugNoType(pOld, ~MEMTYPE_HEAP) );
pNew = sqlite3GlobalConfig.m.xRealloc(pOld, nNew);
if( pNew==0 && mem0.alarmCallback ){
- sqlite3MallocAlarm(nBytes);
+ sqlite3MallocAlarm((int)nBytes);
pNew = sqlite3GlobalConfig.m.xRealloc(pOld, nNew);
}
if( pNew ){
@@ -20304,7 +20498,7 @@ SQLITE_PRIVATE void *sqlite3Realloc(void *pOld, int nBytes){
}else{
pNew = sqlite3GlobalConfig.m.xRealloc(pOld, nNew);
}
- assert( EIGHT_BYTE_ALIGNMENT(pNew) ); /* IMP: R-04675-44850 */
+ assert( EIGHT_BYTE_ALIGNMENT(pNew) ); /* IMP: R-11148-40995 */
return pNew;
}
@@ -20316,6 +20510,13 @@ SQLITE_API void *sqlite3_realloc(void *pOld, int n){
#ifndef SQLITE_OMIT_AUTOINIT
if( sqlite3_initialize() ) return 0;
#endif
+ if( n<0 ) n = 0; /* IMP: R-26507-47431 */
+ return sqlite3Realloc(pOld, n);
+}
+SQLITE_API void *sqlite3_realloc64(void *pOld, sqlite3_uint64 n){
+#ifndef SQLITE_OMIT_AUTOINIT
+ if( sqlite3_initialize() ) return 0;
+#endif
return sqlite3Realloc(pOld, n);
}
@@ -20323,10 +20524,10 @@ SQLITE_API void *sqlite3_realloc(void *pOld, int n){
/*
** Allocate and zero memory.
*/
-SQLITE_PRIVATE void *sqlite3MallocZero(int n){
+SQLITE_PRIVATE void *sqlite3MallocZero(u64 n){
void *p = sqlite3Malloc(n);
if( p ){
- memset(p, 0, n);
+ memset(p, 0, (size_t)n);
}
return p;
}
@@ -20335,10 +20536,10 @@ SQLITE_PRIVATE void *sqlite3MallocZero(int n){
** Allocate and zero memory. If the allocation fails, make
** the mallocFailed flag in the connection pointer.
*/
-SQLITE_PRIVATE void *sqlite3DbMallocZero(sqlite3 *db, int n){
+SQLITE_PRIVATE void *sqlite3DbMallocZero(sqlite3 *db, u64 n){
void *p = sqlite3DbMallocRaw(db, n);
if( p ){
- memset(p, 0, n);
+ memset(p, 0, (size_t)n);
}
return p;
}
@@ -20361,7 +20562,7 @@ SQLITE_PRIVATE void *sqlite3DbMallocZero(sqlite3 *db, int n){
** In other words, if a subsequent malloc (ex: "b") worked, it is assumed
** that all prior mallocs (ex: "a") worked too.
*/
-SQLITE_PRIVATE void *sqlite3DbMallocRaw(sqlite3 *db, int n){
+SQLITE_PRIVATE void *sqlite3DbMallocRaw(sqlite3 *db, u64 n){
void *p;
assert( db==0 || sqlite3_mutex_held(db->mutex) );
assert( db==0 || db->pnBytesFreed==0 );
@@ -20396,8 +20597,8 @@ SQLITE_PRIVATE void *sqlite3DbMallocRaw(sqlite3 *db, int n){
if( !p && db ){
db->mallocFailed = 1;
}
- sqlite3MemdebugSetType(p, MEMTYPE_DB |
- ((db && db->lookaside.bEnabled) ? MEMTYPE_LOOKASIDE : MEMTYPE_HEAP));
+ sqlite3MemdebugSetType(p,
+ (db && db->lookaside.bEnabled) ? MEMTYPE_LOOKASIDE : MEMTYPE_HEAP);
return p;
}
@@ -20405,7 +20606,7 @@ SQLITE_PRIVATE void *sqlite3DbMallocRaw(sqlite3 *db, int n){
** Resize the block of memory pointed to by p to n bytes. If the
** resize fails, set the mallocFailed flag in the connection object.
*/
-SQLITE_PRIVATE void *sqlite3DbRealloc(sqlite3 *db, void *p, int n){
+SQLITE_PRIVATE void *sqlite3DbRealloc(sqlite3 *db, void *p, u64 n){
void *pNew = 0;
assert( db!=0 );
assert( sqlite3_mutex_held(db->mutex) );
@@ -20423,15 +20624,14 @@ SQLITE_PRIVATE void *sqlite3DbRealloc(sqlite3 *db, void *p, int n){
sqlite3DbFree(db, p);
}
}else{
- assert( sqlite3MemdebugHasType(p, MEMTYPE_DB) );
- assert( sqlite3MemdebugHasType(p, MEMTYPE_LOOKASIDE|MEMTYPE_HEAP) );
+ assert( sqlite3MemdebugHasType(p, (MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) );
+ assert( sqlite3MemdebugNoType(p, ~(MEMTYPE_LOOKASIDE|MEMTYPE_HEAP)) );
sqlite3MemdebugSetType(p, MEMTYPE_HEAP);
- pNew = sqlite3_realloc(p, n);
+ pNew = sqlite3_realloc64(p, n);
if( !pNew ){
- sqlite3MemdebugSetType(p, MEMTYPE_DB|MEMTYPE_HEAP);
db->mallocFailed = 1;
}
- sqlite3MemdebugSetType(pNew, MEMTYPE_DB |
+ sqlite3MemdebugSetType(pNew,
(db->lookaside.bEnabled ? MEMTYPE_LOOKASIDE : MEMTYPE_HEAP));
}
}
@@ -20442,7 +20642,7 @@ SQLITE_PRIVATE void *sqlite3DbRealloc(sqlite3 *db, void *p, int n){
** Attempt to reallocate p. If the reallocation fails, then free p
** and set the mallocFailed flag in the database connection.
*/
-SQLITE_PRIVATE void *sqlite3DbReallocOrFree(sqlite3 *db, void *p, int n){
+SQLITE_PRIVATE void *sqlite3DbReallocOrFree(sqlite3 *db, void *p, u64 n){
void *pNew;
pNew = sqlite3DbRealloc(db, p, n);
if( !pNew ){
@@ -20472,7 +20672,7 @@ SQLITE_PRIVATE char *sqlite3DbStrDup(sqlite3 *db, const char *z){
}
return zNew;
}
-SQLITE_PRIVATE char *sqlite3DbStrNDup(sqlite3 *db, const char *z, int n){
+SQLITE_PRIVATE char *sqlite3DbStrNDup(sqlite3 *db, const char *z, u64 n){
char *zNew;
if( z==0 ){
return 0;
@@ -20480,7 +20680,7 @@ SQLITE_PRIVATE char *sqlite3DbStrNDup(sqlite3 *db, const char *z, int n){
assert( (n&0x7fffffff)==n );
zNew = sqlite3DbMallocRaw(db, n+1);
if( zNew ){
- memcpy(zNew, z, n);
+ memcpy(zNew, z, (size_t)n);
zNew[n] = 0;
}
return zNew;
@@ -20502,6 +20702,14 @@ SQLITE_PRIVATE void sqlite3SetString(char **pz, sqlite3 *db, const char *zFormat
*pz = z;
}
+/*
+** Take actions at the end of an API call to indicate an OOM error
+*/
+static SQLITE_NOINLINE int apiOomError(sqlite3 *db){
+ db->mallocFailed = 0;
+ sqlite3Error(db, SQLITE_NOMEM);
+ return SQLITE_NOMEM;
+}
/*
** This function must be called before exiting any API function (i.e.
@@ -20522,12 +20730,11 @@ SQLITE_PRIVATE int sqlite3ApiExit(sqlite3* db, int rc){
** is unsafe, as is the call to sqlite3Error().
*/
assert( !db || sqlite3_mutex_held(db->mutex) );
- if( db && (db->mallocFailed || rc==SQLITE_IOERR_NOMEM) ){
- sqlite3Error(db, SQLITE_NOMEM, 0);
- db->mallocFailed = 0;
- rc = SQLITE_NOMEM;
+ if( db==0 ) return rc & 0xff;
+ if( db->mallocFailed || rc==SQLITE_IOERR_NOMEM ){
+ return apiOomError(db);
}
- return rc & (db ? db->errMask : 0xff);
+ return rc & db->errMask;
}
/************** End of malloc.c **********************************************/
@@ -20548,6 +20755,17 @@ SQLITE_PRIVATE int sqlite3ApiExit(sqlite3* db, int rc){
*/
/*
+** If the strchrnul() library function is available, then set
+** HAVE_STRCHRNUL. If that routine is not available, this module
+** will supply its own. The built-in version is slower than
+** the glibc version so the glibc version is definitely preferred.
+*/
+#if !defined(HAVE_STRCHRNUL)
+# define HAVE_STRCHRNUL 0
+#endif
+
+
+/*
** Conversion types fall into various categories as defined by the
** following enumeration.
*/
@@ -20734,7 +20952,7 @@ SQLITE_PRIVATE void sqlite3VXPrintf(
const et_info *infop; /* Pointer to the appropriate info structure */
char *zOut; /* Rendering buffer */
int nOut; /* Size of the rendering buffer */
- char *zExtra; /* Malloced memory used by some conversion */
+ char *zExtra = 0; /* Malloced memory used by some conversion */
#ifndef SQLITE_OMIT_FLOATING_POINT
int exp, e2; /* exponent of real numbers */
int nsd; /* Number of significant digits returned */
@@ -20757,9 +20975,13 @@ SQLITE_PRIVATE void sqlite3VXPrintf(
for(; (c=(*fmt))!=0; ++fmt){
if( c!='%' ){
bufpt = (char *)fmt;
- while( (c=(*++fmt))!='%' && c!=0 ){};
+#if HAVE_STRCHRNUL
+ fmt = strchrnul(fmt, '%');
+#else
+ do{ fmt++; }while( *fmt && *fmt != '%' );
+#endif
sqlite3StrAccumAppend(pAccum, bufpt, (int)(fmt - bufpt));
- if( c==0 ) break;
+ if( *fmt==0 ) break;
}
if( (c=(*++fmt))==0 ){
sqlite3StrAccumAppend(pAccum, "%", 1);
@@ -20847,7 +21069,6 @@ SQLITE_PRIVATE void sqlite3VXPrintf(
break;
}
}
- zExtra = 0;
/*
** At this point, variables are initialized as follows:
@@ -21138,13 +21359,16 @@ SQLITE_PRIVATE void sqlite3VXPrintf(
}else{
c = va_arg(ap,int);
}
- buf[0] = (char)c;
- if( precision>=0 ){
- for(idx=1; idx<precision; idx++) buf[idx] = (char)c;
- length = precision;
- }else{
- length =1;
+ if( precision>1 ){
+ width -= precision-1;
+ if( width>1 && !flag_leftjustify ){
+ sqlite3AppendChar(pAccum, width-1, ' ');
+ width = 0;
+ }
+ sqlite3AppendChar(pAccum, precision-1, c);
}
+ length = 1;
+ buf[0] = c;
bufpt = buf;
break;
case etSTRING:
@@ -21245,11 +21469,14 @@ SQLITE_PRIVATE void sqlite3VXPrintf(
** the output.
*/
width -= length;
- if( width>0 && !flag_leftjustify ) sqlite3AppendSpace(pAccum, width);
+ if( width>0 && !flag_leftjustify ) sqlite3AppendChar(pAccum, width, ' ');
sqlite3StrAccumAppend(pAccum, bufpt, length);
- if( width>0 && flag_leftjustify ) sqlite3AppendSpace(pAccum, width);
+ if( width>0 && flag_leftjustify ) sqlite3AppendChar(pAccum, width, ' ');
- if( zExtra ) sqlite3_free(zExtra);
+ if( zExtra ){
+ sqlite3_free(zExtra);
+ zExtra = 0;
+ }
}/* End for loop over the format string */
} /* End of function */
@@ -21302,11 +21529,11 @@ static int sqlite3StrAccumEnlarge(StrAccum *p, int N){
}
/*
-** Append N space characters to the given string buffer.
+** Append N copies of character c to the given string buffer.
*/
-SQLITE_PRIVATE void sqlite3AppendSpace(StrAccum *p, int N){
+SQLITE_PRIVATE void sqlite3AppendChar(StrAccum *p, int N, char c){
if( p->nChar+N >= p->nAlloc && (N = sqlite3StrAccumEnlarge(p, N))<=0 ) return;
- while( (N--)>0 ) p->zText[p->nChar++] = ' ';
+ while( (N--)>0 ) p->zText[p->nChar++] = c;
}
/*
@@ -21317,7 +21544,7 @@ SQLITE_PRIVATE void sqlite3AppendSpace(StrAccum *p, int N){
** work (enlarging the buffer) using tail recursion, so that the
** sqlite3StrAccumAppend() routine can use fast calling semantics.
*/
-static void enlargeAndAppend(StrAccum *p, const char *z, int N){
+static void SQLITE_NOINLINE enlargeAndAppend(StrAccum *p, const char *z, int N){
N = sqlite3StrAccumEnlarge(p, N);
if( N>0 ){
memcpy(&p->zText[p->nChar], z, N);
@@ -21336,11 +21563,11 @@ SQLITE_PRIVATE void sqlite3StrAccumAppend(StrAccum *p, const char *z, int N){
assert( p->accError==0 || p->nAlloc==0 );
if( p->nChar+N >= p->nAlloc ){
enlargeAndAppend(p,z,N);
- return;
+ }else{
+ assert( p->zText );
+ p->nChar += N;
+ memcpy(&p->zText[p->nChar-N], z, N);
}
- assert( p->zText );
- memcpy(&p->zText[p->nChar], z, N);
- p->nChar += N;
}
/*
@@ -21437,7 +21664,7 @@ SQLITE_PRIVATE char *sqlite3MPrintf(sqlite3 *db, const char *zFormat, ...){
/*
** Like sqlite3MPrintf(), but call sqlite3DbFree() on zStr after formatting
-** the string and before returnning. This routine is intended to be used
+** the string and before returning. This routine is intended to be used
** to modify an existing string. For example:
**
** x = sqlite3MPrintf(db, x, "prefix %s suffix", x);
@@ -21570,6 +21797,69 @@ SQLITE_PRIVATE void sqlite3DebugPrintf(const char *zFormat, ...){
}
#endif
+#ifdef SQLITE_DEBUG
+/*************************************************************************
+** Routines for implementing the "TreeView" display of hierarchical
+** data structures for debugging.
+**
+** The main entry points (coded elsewhere) are:
+** sqlite3TreeViewExpr(0, pExpr, 0);
+** sqlite3TreeViewExprList(0, pList, 0, 0);
+** sqlite3TreeViewSelect(0, pSelect, 0);
+** Insert calls to those routines while debugging in order to display
+** a diagram of Expr, ExprList, and Select objects.
+**
+*/
+/* Add a new subitem to the tree. The moreToFollow flag indicates that this
+** is not the last item in the tree. */
+SQLITE_PRIVATE TreeView *sqlite3TreeViewPush(TreeView *p, u8 moreToFollow){
+ if( p==0 ){
+ p = sqlite3_malloc( sizeof(*p) );
+ if( p==0 ) return 0;
+ memset(p, 0, sizeof(*p));
+ }else{
+ p->iLevel++;
+ }
+ assert( moreToFollow==0 || moreToFollow==1 );
+ if( p->iLevel<sizeof(p->bLine) ) p->bLine[p->iLevel] = moreToFollow;
+ return p;
+}
+/* Finished with one layer of the tree */
+SQLITE_PRIVATE void sqlite3TreeViewPop(TreeView *p){
+ if( p==0 ) return;
+ p->iLevel--;
+ if( p->iLevel<0 ) sqlite3_free(p);
+}
+/* Generate a single line of output for the tree, with a prefix that contains
+** all the appropriate tree lines */
+SQLITE_PRIVATE void sqlite3TreeViewLine(TreeView *p, const char *zFormat, ...){
+ va_list ap;
+ int i;
+ StrAccum acc;
+ char zBuf[500];
+ sqlite3StrAccumInit(&acc, zBuf, sizeof(zBuf), 0);
+ acc.useMalloc = 0;
+ if( p ){
+ for(i=0; i<p->iLevel && i<sizeof(p->bLine)-1; i++){
+ sqlite3StrAccumAppend(&acc, p->bLine[i] ? "| " : " ", 4);
+ }
+ sqlite3StrAccumAppend(&acc, p->bLine[i] ? "|-- " : "'-- ", 4);
+ }
+ va_start(ap, zFormat);
+ sqlite3VXPrintf(&acc, 0, zFormat, ap);
+ va_end(ap);
+ if( zBuf[acc.nChar-1]!='\n' ) sqlite3StrAccumAppend(&acc, "\n", 1);
+ sqlite3StrAccumFinish(&acc);
+ fprintf(stdout,"%s", zBuf);
+ fflush(stdout);
+}
+/* Shorthand for starting a new tree item that consists of a single label */
+SQLITE_PRIVATE void sqlite3TreeViewItem(TreeView *p, const char *zLabel, u8 moreToFollow){
+ p = sqlite3TreeViewPush(p, moreToFollow);
+ sqlite3TreeViewLine(p, "%s", zLabel);
+}
+#endif /* SQLITE_DEBUG */
+
/*
** variable-argument wrapper around sqlite3VXPrintf().
*/
@@ -21709,6 +21999,270 @@ SQLITE_PRIVATE void sqlite3PrngRestoreState(void){
#endif /* SQLITE_OMIT_BUILTIN_TEST */
/************** End of random.c **********************************************/
+/************** Begin file threads.c *****************************************/
+/*
+** 2012 July 21
+**
+** The author disclaims copyright to this source code. In place of
+** a legal notice, here is a blessing:
+**
+** May you do good and not evil.
+** May you find forgiveness for yourself and forgive others.
+** May you share freely, never taking more than you give.
+**
+******************************************************************************
+**
+** This file presents a simple cross-platform threading interface for
+** use internally by SQLite.
+**
+** A "thread" can be created using sqlite3ThreadCreate(). This thread
+** runs independently of its creator until it is joined using
+** sqlite3ThreadJoin(), at which point it terminates.
+**
+** Threads do not have to be real. It could be that the work of the
+** "thread" is done by the main thread at either the sqlite3ThreadCreate()
+** or sqlite3ThreadJoin() call. This is, in fact, what happens in
+** single threaded systems. Nothing in SQLite requires multiple threads.
+** This interface exists so that applications that want to take advantage
+** of multiple cores can do so, while also allowing applications to stay
+** single-threaded if desired.
+*/
+
+#if SQLITE_MAX_WORKER_THREADS>0
+
+/********************************* Unix Pthreads ****************************/
+#if SQLITE_OS_UNIX && defined(SQLITE_MUTEX_PTHREADS) && SQLITE_THREADSAFE>0
+
+#define SQLITE_THREADS_IMPLEMENTED 1 /* Prevent the single-thread code below */
+/* #include <pthread.h> */
+
+/* A running thread */
+struct SQLiteThread {
+ pthread_t tid; /* Thread ID */
+ int done; /* Set to true when thread finishes */
+ void *pOut; /* Result returned by the thread */
+ void *(*xTask)(void*); /* The thread routine */
+ void *pIn; /* Argument to the thread */
+};
+
+/* Create a new thread */
+SQLITE_PRIVATE int sqlite3ThreadCreate(
+ SQLiteThread **ppThread, /* OUT: Write the thread object here */
+ void *(*xTask)(void*), /* Routine to run in a separate thread */
+ void *pIn /* Argument passed into xTask() */
+){
+ SQLiteThread *p;
+ int rc;
+
+ assert( ppThread!=0 );
+ assert( xTask!=0 );
+ /* This routine is never used in single-threaded mode */
+ assert( sqlite3GlobalConfig.bCoreMutex!=0 );
+
+ *ppThread = 0;
+ p = sqlite3Malloc(sizeof(*p));
+ if( p==0 ) return SQLITE_NOMEM;
+ memset(p, 0, sizeof(*p));
+ p->xTask = xTask;
+ p->pIn = pIn;
+ if( sqlite3FaultSim(200) ){
+ rc = 1;
+ }else{
+ rc = pthread_create(&p->tid, 0, xTask, pIn);
+ }
+ if( rc ){
+ p->done = 1;
+ p->pOut = xTask(pIn);
+ }
+ *ppThread = p;
+ return SQLITE_OK;
+}
+
+/* Get the results of the thread */
+SQLITE_PRIVATE int sqlite3ThreadJoin(SQLiteThread *p, void **ppOut){
+ int rc;
+
+ assert( ppOut!=0 );
+ if( NEVER(p==0) ) return SQLITE_NOMEM;
+ if( p->done ){
+ *ppOut = p->pOut;
+ rc = SQLITE_OK;
+ }else{
+ rc = pthread_join(p->tid, ppOut) ? SQLITE_ERROR : SQLITE_OK;
+ }
+ sqlite3_free(p);
+ return rc;
+}
+
+#endif /* SQLITE_OS_UNIX && defined(SQLITE_MUTEX_PTHREADS) */
+/******************************** End Unix Pthreads *************************/
+
+
+/********************************* Win32 Threads ****************************/
+#if SQLITE_OS_WIN && !SQLITE_OS_WINCE && !SQLITE_OS_WINRT && SQLITE_THREADSAFE>0
+
+#define SQLITE_THREADS_IMPLEMENTED 1 /* Prevent the single-thread code below */
+#include <process.h>
+
+/* A running thread */
+struct SQLiteThread {
+ void *tid; /* The thread handle */
+ unsigned id; /* The thread identifier */
+ void *(*xTask)(void*); /* The routine to run as a thread */
+ void *pIn; /* Argument to xTask */
+ void *pResult; /* Result of xTask */
+};
+
+/* Thread procedure Win32 compatibility shim */
+static unsigned __stdcall sqlite3ThreadProc(
+ void *pArg /* IN: Pointer to the SQLiteThread structure */
+){
+ SQLiteThread *p = (SQLiteThread *)pArg;
+
+ assert( p!=0 );
+#if 0
+ /*
+ ** This assert appears to trigger spuriously on certain
+ ** versions of Windows, possibly due to _beginthreadex()
+ ** and/or CreateThread() not fully setting their thread
+ ** ID parameter before starting the thread.
+ */
+ assert( p->id==GetCurrentThreadId() );
+#endif
+ assert( p->xTask!=0 );
+ p->pResult = p->xTask(p->pIn);
+
+ _endthreadex(0);
+ return 0; /* NOT REACHED */
+}
+
+/* Create a new thread */
+SQLITE_PRIVATE int sqlite3ThreadCreate(
+ SQLiteThread **ppThread, /* OUT: Write the thread object here */
+ void *(*xTask)(void*), /* Routine to run in a separate thread */
+ void *pIn /* Argument passed into xTask() */
+){
+ SQLiteThread *p;
+
+ assert( ppThread!=0 );
+ assert( xTask!=0 );
+ *ppThread = 0;
+ p = sqlite3Malloc(sizeof(*p));
+ if( p==0 ) return SQLITE_NOMEM;
+ if( sqlite3GlobalConfig.bCoreMutex==0 ){
+ memset(p, 0, sizeof(*p));
+ }else{
+ p->xTask = xTask;
+ p->pIn = pIn;
+ p->tid = (void*)_beginthreadex(0, 0, sqlite3ThreadProc, p, 0, &p->id);
+ if( p->tid==0 ){
+ memset(p, 0, sizeof(*p));
+ }
+ }
+ if( p->xTask==0 ){
+ p->id = GetCurrentThreadId();
+ p->pResult = xTask(pIn);
+ }
+ *ppThread = p;
+ return SQLITE_OK;
+}
+
+SQLITE_PRIVATE DWORD sqlite3Win32Wait(HANDLE hObject); /* os_win.c */
+
+/* Get the results of the thread */
+SQLITE_PRIVATE int sqlite3ThreadJoin(SQLiteThread *p, void **ppOut){
+ DWORD rc;
+ BOOL bRc;
+
+ assert( ppOut!=0 );
+ if( NEVER(p==0) ) return SQLITE_NOMEM;
+ if( p->xTask==0 ){
+ assert( p->id==GetCurrentThreadId() );
+ rc = WAIT_OBJECT_0;
+ assert( p->tid==0 );
+ }else{
+ assert( p->id!=0 && p->id!=GetCurrentThreadId() );
+ rc = sqlite3Win32Wait((HANDLE)p->tid);
+ assert( rc!=WAIT_IO_COMPLETION );
+ bRc = CloseHandle((HANDLE)p->tid);
+ assert( bRc );
+ }
+ if( rc==WAIT_OBJECT_0 ) *ppOut = p->pResult;
+ sqlite3_free(p);
+ return (rc==WAIT_OBJECT_0) ? SQLITE_OK : SQLITE_ERROR;
+}
+
+#endif /* SQLITE_OS_WIN && !SQLITE_OS_WINCE && !SQLITE_OS_WINRT */
+/******************************** End Win32 Threads *************************/
+
+
+/********************************* Single-Threaded **************************/
+#ifndef SQLITE_THREADS_IMPLEMENTED
+/*
+** This implementation does not actually create a new thread. It does the
+** work of the thread in the main thread, when either the thread is created
+** or when it is joined
+*/
+
+/* A running thread */
+struct SQLiteThread {
+ void *(*xTask)(void*); /* The routine to run as a thread */
+ void *pIn; /* Argument to xTask */
+ void *pResult; /* Result of xTask */
+};
+
+/* Create a new thread */
+SQLITE_PRIVATE int sqlite3ThreadCreate(
+ SQLiteThread **ppThread, /* OUT: Write the thread object here */
+ void *(*xTask)(void*), /* Routine to run in a separate thread */
+ void *pIn /* Argument passed into xTask() */
+){
+ SQLiteThread *p;
+
+ assert( ppThread!=0 );
+ assert( xTask!=0 );
+ *ppThread = 0;
+ p = sqlite3Malloc(sizeof(*p));
+ if( p==0 ) return SQLITE_NOMEM;
+ if( (SQLITE_PTR_TO_INT(p)/17)&1 ){
+ p->xTask = xTask;
+ p->pIn = pIn;
+ }else{
+ p->xTask = 0;
+ p->pResult = xTask(pIn);
+ }
+ *ppThread = p;
+ return SQLITE_OK;
+}
+
+/* Get the results of the thread */
+SQLITE_PRIVATE int sqlite3ThreadJoin(SQLiteThread *p, void **ppOut){
+
+ assert( ppOut!=0 );
+ if( NEVER(p==0) ) return SQLITE_NOMEM;
+ if( p->xTask ){
+ *ppOut = p->xTask(p->pIn);
+ }else{
+ *ppOut = p->pResult;
+ }
+ sqlite3_free(p);
+
+#if defined(SQLITE_TEST)
+ {
+ void *pTstAlloc = sqlite3Malloc(10);
+ if (!pTstAlloc) return SQLITE_NOMEM;
+ sqlite3_free(pTstAlloc);
+ }
+#endif
+
+ return SQLITE_OK;
+}
+
+#endif /* !defined(SQLITE_THREADS_IMPLEMENTED) */
+/****************************** End Single-Threaded *************************/
+#endif /* SQLITE_MAX_WORKER_THREADS>0 */
+
+/************** End of threads.c *********************************************/
/************** Begin file utf.c *********************************************/
/*
** 2004 April 13
@@ -21909,7 +22463,7 @@ SQLITE_PRIVATE u32 sqlite3Utf8Read(
** desiredEnc. It is an error if the string is already of the desired
** encoding, or if *pMem does not contain a string value.
*/
-SQLITE_PRIVATE int sqlite3VdbeMemTranslate(Mem *pMem, u8 desiredEnc){
+SQLITE_PRIVATE SQLITE_NOINLINE int sqlite3VdbeMemTranslate(Mem *pMem, u8 desiredEnc){
int len; /* Maximum length of output string in bytes */
unsigned char *zOut; /* Output buffer */
unsigned char *zIn; /* Input iterator */
@@ -22024,12 +22578,13 @@ SQLITE_PRIVATE int sqlite3VdbeMemTranslate(Mem *pMem, u8 desiredEnc){
*z = 0;
assert( (pMem->n+(desiredEnc==SQLITE_UTF8?1:2))<=len );
+ c = pMem->flags;
sqlite3VdbeMemRelease(pMem);
- pMem->flags &= ~(MEM_Static|MEM_Dyn|MEM_Ephem);
+ pMem->flags = MEM_Str|MEM_Term|(c&MEM_AffMask);
pMem->enc = desiredEnc;
- pMem->flags |= (MEM_Term);
pMem->z = (char*)zOut;
pMem->zMalloc = pMem->z;
+ pMem->szMalloc = sqlite3DbMallocSize(pMem->db, pMem->z);
translate_out:
#if defined(TRANSLATE_TRACE) && defined(SQLITE_DEBUG)
@@ -22353,6 +22908,15 @@ SQLITE_PRIVATE int sqlite3Strlen30(const char *z){
}
/*
+** Set the current error code to err_code and clear any prior error message.
+*/
+SQLITE_PRIVATE void sqlite3Error(sqlite3 *db, int err_code){
+ assert( db!=0 );
+ db->errCode = err_code;
+ if( db->pErr ) sqlite3ValueSetNull(db->pErr);
+}
+
+/*
** Set the most recent error code and error string for the sqlite
** handle "db". The error code is set to "err_code".
**
@@ -22373,18 +22937,18 @@ SQLITE_PRIVATE int sqlite3Strlen30(const char *z){
** should be called with err_code set to SQLITE_OK and zFormat set
** to NULL.
*/
-SQLITE_PRIVATE void sqlite3Error(sqlite3 *db, int err_code, const char *zFormat, ...){
+SQLITE_PRIVATE void sqlite3ErrorWithMsg(sqlite3 *db, int err_code, const char *zFormat, ...){
assert( db!=0 );
db->errCode = err_code;
- if( zFormat && (db->pErr || (db->pErr = sqlite3ValueNew(db))!=0) ){
+ if( zFormat==0 ){
+ sqlite3Error(db, err_code);
+ }else if( db->pErr || (db->pErr = sqlite3ValueNew(db))!=0 ){
char *z;
va_list ap;
va_start(ap, zFormat);
z = sqlite3VMPrintf(db, zFormat, ap);
va_end(ap);
sqlite3ValueSetStr(db->pErr, -1, z, SQLITE_UTF8, SQLITE_DYNAMIC);
- }else if( db->pErr ){
- sqlite3ValueSetNull(db->pErr);
}
}
@@ -22398,12 +22962,12 @@ SQLITE_PRIVATE void sqlite3Error(sqlite3 *db, int err_code, const char *zFormat,
** %T Insert a token
** %S Insert the first element of a SrcList
**
-** This function should be used to report any error that occurs whilst
+** This function should be used to report any error that occurs while
** compiling an SQL statement (i.e. within sqlite3_prepare()). The
** last thing the sqlite3_prepare() function does is copy the error
** stored by this function into the database handle using sqlite3Error().
-** Function sqlite3Error() should be used during statement execution
-** (sqlite3_step() etc.).
+** Functions sqlite3Error() or sqlite3ErrorWithMsg() should be used
+** during statement execution (sqlite3_step() etc.).
*/
SQLITE_PRIVATE void sqlite3ErrorMsg(Parse *pParse, const char *zFormat, ...){
char *zMsg;
@@ -22436,7 +23000,7 @@ SQLITE_PRIVATE void sqlite3ErrorMsg(Parse *pParse, const char *zFormat, ...){
** occur.
**
** 2002-Feb-14: This routine is extended to remove MS-Access style
-** brackets from around identifers. For example: "[a-b-c]" becomes
+** brackets from around identifiers. For example: "[a-b-c]" becomes
** "a-b-c".
*/
SQLITE_PRIVATE int sqlite3Dequote(char *z){
@@ -22940,7 +23504,7 @@ SQLITE_PRIVATE int sqlite3Atoi(const char *z){
** bit clear. Except, if we get to the 9th byte, it stores the full
** 8 bits and is the last byte.
*/
-SQLITE_PRIVATE int sqlite3PutVarint(unsigned char *p, u64 v){
+static int SQLITE_NOINLINE putVarint64(unsigned char *p, u64 v){
int i, j, n;
u8 buf[10];
if( v & (((u64)0xff000000)<<32) ){
@@ -22964,28 +23528,17 @@ SQLITE_PRIVATE int sqlite3PutVarint(unsigned char *p, u64 v){
}
return n;
}
-
-/*
-** This routine is a faster version of sqlite3PutVarint() that only
-** works for 32-bit positive integers and which is optimized for
-** the common case of small integers. A MACRO version, putVarint32,
-** is provided which inlines the single-byte case. All code should use
-** the MACRO version as this function assumes the single-byte case has
-** already been handled.
-*/
-SQLITE_PRIVATE int sqlite3PutVarint32(unsigned char *p, u32 v){
-#ifndef putVarint32
- if( (v & ~0x7f)==0 ){
- p[0] = v;
+SQLITE_PRIVATE int sqlite3PutVarint(unsigned char *p, u64 v){
+ if( v<=0x7f ){
+ p[0] = v&0x7f;
return 1;
}
-#endif
- if( (v & ~0x3fff)==0 ){
- p[0] = (u8)((v>>7) | 0x80);
- p[1] = (u8)(v & 0x7f);
+ if( v<=0x3fff ){
+ p[0] = ((v>>7)&0x7f)|0x80;
+ p[1] = v&0x7f;
return 2;
}
- return sqlite3PutVarint(p, v);
+ return putVarint64(p,v);
}
/*
@@ -23661,12 +24214,11 @@ SQLITE_PRIVATE void sqlite3HashClear(Hash *pH){
/*
** The hashing function.
*/
-static unsigned int strHash(const char *z, int nKey){
+static unsigned int strHash(const char *z){
unsigned int h = 0;
- assert( nKey>=0 );
- while( nKey > 0 ){
- h = (h<<3) ^ h ^ sqlite3UpperToLower[(unsigned char)*z++];
- nKey--;
+ unsigned char c;
+ while( (c = (unsigned char)*z++)!=0 ){
+ h = (h<<3) ^ h ^ sqlite3UpperToLower[c];
}
return h;
}
@@ -23738,7 +24290,7 @@ static int rehash(Hash *pH, unsigned int new_size){
pH->htsize = new_size = sqlite3MallocSize(new_ht)/sizeof(struct _ht);
memset(new_ht, 0, new_size*sizeof(struct _ht));
for(elem=pH->first, pH->first=0; elem; elem = next_elem){
- unsigned int h = strHash(elem->pKey, elem->nKey) % new_size;
+ unsigned int h = strHash(elem->pKey) % new_size;
next_elem = elem->next;
insertElement(pH, &new_ht[h], elem);
}
@@ -23746,28 +24298,33 @@ static int rehash(Hash *pH, unsigned int new_size){
}
/* This function (for internal use only) locates an element in an
-** hash table that matches the given key. The hash for this key has
-** already been computed and is passed as the 4th parameter.
+** hash table that matches the given key. The hash for this key is
+** also computed and returned in the *pH parameter.
*/
-static HashElem *findElementGivenHash(
+static HashElem *findElementWithHash(
const Hash *pH, /* The pH to be searched */
const char *pKey, /* The key we are searching for */
- int nKey, /* Bytes in key (not counting zero terminator) */
- unsigned int h /* The hash for this key. */
+ unsigned int *pHash /* Write the hash value here */
){
HashElem *elem; /* Used to loop thru the element list */
int count; /* Number of elements left to test */
+ unsigned int h; /* The computed hash */
if( pH->ht ){
- struct _ht *pEntry = &pH->ht[h];
+ struct _ht *pEntry;
+ h = strHash(pKey) % pH->htsize;
+ pEntry = &pH->ht[h];
elem = pEntry->chain;
count = pEntry->count;
}else{
+ h = 0;
elem = pH->first;
count = pH->count;
}
- while( count-- && ALWAYS(elem) ){
- if( elem->nKey==nKey && sqlite3StrNICmp(elem->pKey,pKey,nKey)==0 ){
+ *pHash = h;
+ while( count-- ){
+ assert( elem!=0 );
+ if( sqlite3StrICmp(elem->pKey,pKey)==0 ){
return elem;
}
elem = elem->next;
@@ -23810,26 +24367,20 @@ static void removeElementGivenHash(
}
/* Attempt to locate an element of the hash table pH with a key
-** that matches pKey,nKey. Return the data for this element if it is
+** that matches pKey. Return the data for this element if it is
** found, or NULL if there is no match.
*/
-SQLITE_PRIVATE void *sqlite3HashFind(const Hash *pH, const char *pKey, int nKey){
+SQLITE_PRIVATE void *sqlite3HashFind(const Hash *pH, const char *pKey){
HashElem *elem; /* The element that matches key */
unsigned int h; /* A hash on key */
assert( pH!=0 );
assert( pKey!=0 );
- assert( nKey>=0 );
- if( pH->ht ){
- h = strHash(pKey, nKey) % pH->htsize;
- }else{
- h = 0;
- }
- elem = findElementGivenHash(pH, pKey, nKey, h);
+ elem = findElementWithHash(pH, pKey, &h);
return elem ? elem->data : 0;
}
-/* Insert an element into the hash table pH. The key is pKey,nKey
+/* Insert an element into the hash table pH. The key is pKey
** and the data is "data".
**
** If no element exists with a matching key, then a new
@@ -23843,20 +24394,14 @@ SQLITE_PRIVATE void *sqlite3HashFind(const Hash *pH, const char *pKey, int nKey)
** If the "data" parameter to this function is NULL, then the
** element corresponding to "key" is removed from the hash table.
*/
-SQLITE_PRIVATE void *sqlite3HashInsert(Hash *pH, const char *pKey, int nKey, void *data){
+SQLITE_PRIVATE void *sqlite3HashInsert(Hash *pH, const char *pKey, void *data){
unsigned int h; /* the hash of the key modulo hash table size */
HashElem *elem; /* Used to loop thru the element list */
HashElem *new_elem; /* New element added to the pH */
assert( pH!=0 );
assert( pKey!=0 );
- assert( nKey>=0 );
- if( pH->htsize ){
- h = strHash(pKey, nKey) % pH->htsize;
- }else{
- h = 0;
- }
- elem = findElementGivenHash(pH,pKey,nKey,h);
+ elem = findElementWithHash(pH,pKey,&h);
if( elem ){
void *old_data = elem->data;
if( data==0 ){
@@ -23864,7 +24409,6 @@ SQLITE_PRIVATE void *sqlite3HashInsert(Hash *pH, const char *pKey, int nKey, voi
}else{
elem->data = data;
elem->pKey = pKey;
- assert(nKey==elem->nKey);
}
return old_data;
}
@@ -23872,20 +24416,15 @@ SQLITE_PRIVATE void *sqlite3HashInsert(Hash *pH, const char *pKey, int nKey, voi
new_elem = (HashElem*)sqlite3Malloc( sizeof(HashElem) );
if( new_elem==0 ) return data;
new_elem->pKey = pKey;
- new_elem->nKey = nKey;
new_elem->data = data;
pH->count++;
if( pH->count>=10 && pH->count > 2*pH->htsize ){
if( rehash(pH, pH->count*2) ){
assert( pH->htsize>0 );
- h = strHash(pKey, nKey) % pH->htsize;
+ h = strHash(pKey) % pH->htsize;
}
}
- if( pH->ht ){
- insertElement(pH, &pH->ht[h], new_elem);
- }else{
- insertElement(pH, 0, new_elem);
- }
+ insertElement(pH, pH->ht ? &pH->ht[h] : 0, new_elem);
return 0;
}
@@ -23940,42 +24479,42 @@ SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){
/* 37 */ "AddImm" OpHelp("r[P1]=r[P1]+P2"),
/* 38 */ "MustBeInt" OpHelp(""),
/* 39 */ "RealAffinity" OpHelp(""),
- /* 40 */ "Permutation" OpHelp(""),
- /* 41 */ "Compare" OpHelp("r[P1@P3] <-> r[P2@P3]"),
- /* 42 */ "Jump" OpHelp(""),
- /* 43 */ "Once" OpHelp(""),
- /* 44 */ "If" OpHelp(""),
- /* 45 */ "IfNot" OpHelp(""),
- /* 46 */ "Column" OpHelp("r[P3]=PX"),
- /* 47 */ "Affinity" OpHelp("affinity(r[P1@P2])"),
- /* 48 */ "MakeRecord" OpHelp("r[P3]=mkrec(r[P1@P2])"),
- /* 49 */ "Count" OpHelp("r[P2]=count()"),
- /* 50 */ "ReadCookie" OpHelp(""),
- /* 51 */ "SetCookie" OpHelp(""),
- /* 52 */ "ReopenIdx" OpHelp("root=P2 iDb=P3"),
- /* 53 */ "OpenRead" OpHelp("root=P2 iDb=P3"),
- /* 54 */ "OpenWrite" OpHelp("root=P2 iDb=P3"),
- /* 55 */ "OpenAutoindex" OpHelp("nColumn=P2"),
- /* 56 */ "OpenEphemeral" OpHelp("nColumn=P2"),
- /* 57 */ "SorterOpen" OpHelp(""),
- /* 58 */ "OpenPseudo" OpHelp("P3 columns in r[P2]"),
- /* 59 */ "Close" OpHelp(""),
- /* 60 */ "SeekLT" OpHelp("key=r[P3@P4]"),
- /* 61 */ "SeekLE" OpHelp("key=r[P3@P4]"),
- /* 62 */ "SeekGE" OpHelp("key=r[P3@P4]"),
- /* 63 */ "SeekGT" OpHelp("key=r[P3@P4]"),
- /* 64 */ "Seek" OpHelp("intkey=r[P2]"),
- /* 65 */ "NoConflict" OpHelp("key=r[P3@P4]"),
- /* 66 */ "NotFound" OpHelp("key=r[P3@P4]"),
- /* 67 */ "Found" OpHelp("key=r[P3@P4]"),
- /* 68 */ "NotExists" OpHelp("intkey=r[P3]"),
- /* 69 */ "Sequence" OpHelp("r[P2]=cursor[P1].ctr++"),
- /* 70 */ "NewRowid" OpHelp("r[P2]=rowid"),
+ /* 40 */ "Cast" OpHelp("affinity(r[P1])"),
+ /* 41 */ "Permutation" OpHelp(""),
+ /* 42 */ "Compare" OpHelp("r[P1@P3] <-> r[P2@P3]"),
+ /* 43 */ "Jump" OpHelp(""),
+ /* 44 */ "Once" OpHelp(""),
+ /* 45 */ "If" OpHelp(""),
+ /* 46 */ "IfNot" OpHelp(""),
+ /* 47 */ "Column" OpHelp("r[P3]=PX"),
+ /* 48 */ "Affinity" OpHelp("affinity(r[P1@P2])"),
+ /* 49 */ "MakeRecord" OpHelp("r[P3]=mkrec(r[P1@P2])"),
+ /* 50 */ "Count" OpHelp("r[P2]=count()"),
+ /* 51 */ "ReadCookie" OpHelp(""),
+ /* 52 */ "SetCookie" OpHelp(""),
+ /* 53 */ "ReopenIdx" OpHelp("root=P2 iDb=P3"),
+ /* 54 */ "OpenRead" OpHelp("root=P2 iDb=P3"),
+ /* 55 */ "OpenWrite" OpHelp("root=P2 iDb=P3"),
+ /* 56 */ "OpenAutoindex" OpHelp("nColumn=P2"),
+ /* 57 */ "OpenEphemeral" OpHelp("nColumn=P2"),
+ /* 58 */ "SorterOpen" OpHelp(""),
+ /* 59 */ "SequenceTest" OpHelp("if( cursor[P1].ctr++ ) pc = P2"),
+ /* 60 */ "OpenPseudo" OpHelp("P3 columns in r[P2]"),
+ /* 61 */ "Close" OpHelp(""),
+ /* 62 */ "SeekLT" OpHelp("key=r[P3@P4]"),
+ /* 63 */ "SeekLE" OpHelp("key=r[P3@P4]"),
+ /* 64 */ "SeekGE" OpHelp("key=r[P3@P4]"),
+ /* 65 */ "SeekGT" OpHelp("key=r[P3@P4]"),
+ /* 66 */ "Seek" OpHelp("intkey=r[P2]"),
+ /* 67 */ "NoConflict" OpHelp("key=r[P3@P4]"),
+ /* 68 */ "NotFound" OpHelp("key=r[P3@P4]"),
+ /* 69 */ "Found" OpHelp("key=r[P3@P4]"),
+ /* 70 */ "NotExists" OpHelp("intkey=r[P3]"),
/* 71 */ "Or" OpHelp("r[P3]=(r[P1] || r[P2])"),
/* 72 */ "And" OpHelp("r[P3]=(r[P1] && r[P2])"),
- /* 73 */ "Insert" OpHelp("intkey=r[P3] data=r[P2]"),
- /* 74 */ "InsertInt" OpHelp("intkey=P3 data=r[P2]"),
- /* 75 */ "Delete" OpHelp(""),
+ /* 73 */ "Sequence" OpHelp("r[P2]=cursor[P1].ctr++"),
+ /* 74 */ "NewRowid" OpHelp("r[P2]=rowid"),
+ /* 75 */ "Insert" OpHelp("intkey=r[P3] data=r[P2]"),
/* 76 */ "IsNull" OpHelp("if r[P1]==NULL goto P2"),
/* 77 */ "NotNull" OpHelp("if r[P1]!=NULL goto P2"),
/* 78 */ "Ne" OpHelp("if r[P1]!=r[P3] goto P2"),
@@ -23984,7 +24523,7 @@ SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){
/* 81 */ "Le" OpHelp("if r[P1]<=r[P3] goto P2"),
/* 82 */ "Lt" OpHelp("if r[P1]<r[P3] goto P2"),
/* 83 */ "Ge" OpHelp("if r[P1]>=r[P3] goto P2"),
- /* 84 */ "ResetCount" OpHelp(""),
+ /* 84 */ "InsertInt" OpHelp("intkey=P3 data=r[P2]"),
/* 85 */ "BitAnd" OpHelp("r[P3]=r[P1]&r[P2]"),
/* 86 */ "BitOr" OpHelp("r[P3]=r[P1]|r[P2]"),
/* 87 */ "ShiftLeft" OpHelp("r[P3]=r[P2]<<r[P1]"),
@@ -23995,70 +24534,67 @@ SQLITE_PRIVATE const char *sqlite3OpcodeName(int i){
/* 92 */ "Divide" OpHelp("r[P3]=r[P2]/r[P1]"),
/* 93 */ "Remainder" OpHelp("r[P3]=r[P2]%r[P1]"),
/* 94 */ "Concat" OpHelp("r[P3]=r[P2]+r[P1]"),
- /* 95 */ "SorterCompare" OpHelp("if key(P1)!=trim(r[P3],P4) goto P2"),
+ /* 95 */ "Delete" OpHelp(""),
/* 96 */ "BitNot" OpHelp("r[P1]= ~r[P1]"),
/* 97 */ "String8" OpHelp("r[P2]='P4'"),
- /* 98 */ "SorterData" OpHelp("r[P2]=data"),
- /* 99 */ "RowKey" OpHelp("r[P2]=key"),
- /* 100 */ "RowData" OpHelp("r[P2]=data"),
- /* 101 */ "Rowid" OpHelp("r[P2]=rowid"),
- /* 102 */ "NullRow" OpHelp(""),
- /* 103 */ "Last" OpHelp(""),
- /* 104 */ "SorterSort" OpHelp(""),
- /* 105 */ "Sort" OpHelp(""),
- /* 106 */ "Rewind" OpHelp(""),
- /* 107 */ "SorterInsert" OpHelp(""),
- /* 108 */ "IdxInsert" OpHelp("key=r[P2]"),
- /* 109 */ "IdxDelete" OpHelp("key=r[P2@P3]"),
- /* 110 */ "IdxRowid" OpHelp("r[P2]=rowid"),
- /* 111 */ "IdxLE" OpHelp("key=r[P3@P4]"),
- /* 112 */ "IdxGT" OpHelp("key=r[P3@P4]"),
- /* 113 */ "IdxLT" OpHelp("key=r[P3@P4]"),
- /* 114 */ "IdxGE" OpHelp("key=r[P3@P4]"),
- /* 115 */ "Destroy" OpHelp(""),
- /* 116 */ "Clear" OpHelp(""),
- /* 117 */ "ResetSorter" OpHelp(""),
- /* 118 */ "CreateIndex" OpHelp("r[P2]=root iDb=P1"),
- /* 119 */ "CreateTable" OpHelp("r[P2]=root iDb=P1"),
- /* 120 */ "ParseSchema" OpHelp(""),
- /* 121 */ "LoadAnalysis" OpHelp(""),
- /* 122 */ "DropTable" OpHelp(""),
- /* 123 */ "DropIndex" OpHelp(""),
- /* 124 */ "DropTrigger" OpHelp(""),
- /* 125 */ "IntegrityCk" OpHelp(""),
- /* 126 */ "RowSetAdd" OpHelp("rowset(P1)=r[P2]"),
- /* 127 */ "RowSetRead" OpHelp("r[P3]=rowset(P1)"),
- /* 128 */ "RowSetTest" OpHelp("if r[P3] in rowset(P1) goto P2"),
- /* 129 */ "Program" OpHelp(""),
- /* 130 */ "Param" OpHelp(""),
- /* 131 */ "FkCounter" OpHelp("fkctr[P1]+=P2"),
- /* 132 */ "FkIfZero" OpHelp("if fkctr[P1]==0 goto P2"),
+ /* 98 */ "ResetCount" OpHelp(""),
+ /* 99 */ "SorterCompare" OpHelp("if key(P1)!=trim(r[P3],P4) goto P2"),
+ /* 100 */ "SorterData" OpHelp("r[P2]=data"),
+ /* 101 */ "RowKey" OpHelp("r[P2]=key"),
+ /* 102 */ "RowData" OpHelp("r[P2]=data"),
+ /* 103 */ "Rowid" OpHelp("r[P2]=rowid"),
+ /* 104 */ "NullRow" OpHelp(""),
+ /* 105 */ "Last" OpHelp(""),
+ /* 106 */ "SorterSort" OpHelp(""),
+ /* 107 */ "Sort" OpHelp(""),
+ /* 108 */ "Rewind" OpHelp(""),
+ /* 109 */ "SorterInsert" OpHelp(""),
+ /* 110 */ "IdxInsert" OpHelp("key=r[P2]"),
+ /* 111 */ "IdxDelete" OpHelp("key=r[P2@P3]"),
+ /* 112 */ "IdxRowid" OpHelp("r[P2]=rowid"),
+ /* 113 */ "IdxLE" OpHelp("key=r[P3@P4]"),
+ /* 114 */ "IdxGT" OpHelp("key=r[P3@P4]"),
+ /* 115 */ "IdxLT" OpHelp("key=r[P3@P4]"),
+ /* 116 */ "IdxGE" OpHelp("key=r[P3@P4]"),
+ /* 117 */ "Destroy" OpHelp(""),
+ /* 118 */ "Clear" OpHelp(""),
+ /* 119 */ "ResetSorter" OpHelp(""),
+ /* 120 */ "CreateIndex" OpHelp("r[P2]=root iDb=P1"),
+ /* 121 */ "CreateTable" OpHelp("r[P2]=root iDb=P1"),
+ /* 122 */ "ParseSchema" OpHelp(""),
+ /* 123 */ "LoadAnalysis" OpHelp(""),
+ /* 124 */ "DropTable" OpHelp(""),
+ /* 125 */ "DropIndex" OpHelp(""),
+ /* 126 */ "DropTrigger" OpHelp(""),
+ /* 127 */ "IntegrityCk" OpHelp(""),
+ /* 128 */ "RowSetAdd" OpHelp("rowset(P1)=r[P2]"),
+ /* 129 */ "RowSetRead" OpHelp("r[P3]=rowset(P1)"),
+ /* 130 */ "RowSetTest" OpHelp("if r[P3] in rowset(P1) goto P2"),
+ /* 131 */ "Program" OpHelp(""),
+ /* 132 */ "Param" OpHelp(""),
/* 133 */ "Real" OpHelp("r[P2]=P4"),
- /* 134 */ "MemMax" OpHelp("r[P1]=max(r[P1],r[P2])"),
- /* 135 */ "IfPos" OpHelp("if r[P1]>0 goto P2"),
- /* 136 */ "IfNeg" OpHelp("r[P1]+=P3, if r[P1]<0 goto P2"),
- /* 137 */ "IfZero" OpHelp("r[P1]+=P3, if r[P1]==0 goto P2"),
- /* 138 */ "AggFinal" OpHelp("accum=r[P1] N=P2"),
- /* 139 */ "IncrVacuum" OpHelp(""),
- /* 140 */ "Expire" OpHelp(""),
- /* 141 */ "TableLock" OpHelp("iDb=P1 root=P2 write=P3"),
- /* 142 */ "VBegin" OpHelp(""),
- /* 143 */ "ToText" OpHelp(""),
- /* 144 */ "ToBlob" OpHelp(""),
- /* 145 */ "ToNumeric" OpHelp(""),
- /* 146 */ "ToInt" OpHelp(""),
- /* 147 */ "ToReal" OpHelp(""),
- /* 148 */ "VCreate" OpHelp(""),
- /* 149 */ "VDestroy" OpHelp(""),
- /* 150 */ "VOpen" OpHelp(""),
- /* 151 */ "VColumn" OpHelp("r[P3]=vcolumn(P2)"),
- /* 152 */ "VNext" OpHelp(""),
- /* 153 */ "VRename" OpHelp(""),
- /* 154 */ "Pagecount" OpHelp(""),
- /* 155 */ "MaxPgcnt" OpHelp(""),
- /* 156 */ "Init" OpHelp("Start at P2"),
- /* 157 */ "Noop" OpHelp(""),
- /* 158 */ "Explain" OpHelp(""),
+ /* 134 */ "FkCounter" OpHelp("fkctr[P1]+=P2"),
+ /* 135 */ "FkIfZero" OpHelp("if fkctr[P1]==0 goto P2"),
+ /* 136 */ "MemMax" OpHelp("r[P1]=max(r[P1],r[P2])"),
+ /* 137 */ "IfPos" OpHelp("if r[P1]>0 goto P2"),
+ /* 138 */ "IfNeg" OpHelp("r[P1]+=P3, if r[P1]<0 goto P2"),
+ /* 139 */ "IfZero" OpHelp("r[P1]+=P3, if r[P1]==0 goto P2"),
+ /* 140 */ "AggFinal" OpHelp("accum=r[P1] N=P2"),
+ /* 141 */ "IncrVacuum" OpHelp(""),
+ /* 142 */ "Expire" OpHelp(""),
+ /* 143 */ "TableLock" OpHelp("iDb=P1 root=P2 write=P3"),
+ /* 144 */ "VBegin" OpHelp(""),
+ /* 145 */ "VCreate" OpHelp(""),
+ /* 146 */ "VDestroy" OpHelp(""),
+ /* 147 */ "VOpen" OpHelp(""),
+ /* 148 */ "VColumn" OpHelp("r[P3]=vcolumn(P2)"),
+ /* 149 */ "VNext" OpHelp(""),
+ /* 150 */ "VRename" OpHelp(""),
+ /* 151 */ "Pagecount" OpHelp(""),
+ /* 152 */ "MaxPgcnt" OpHelp(""),
+ /* 153 */ "Init" OpHelp("Start at P2"),
+ /* 154 */ "Noop" OpHelp(""),
+ /* 155 */ "Explain" OpHelp(""),
};
return azName[i];
}
@@ -24575,6 +25111,14 @@ SQLITE_API int sqlite3_open_file_count = 0;
#endif
/*
+** Explicitly call the 64-bit version of lseek() on Android. Otherwise, lseek()
+** is the 32-bit version, even if _FILE_OFFSET_BITS=64 is defined.
+*/
+#ifdef __ANDROID__
+# define lseek lseek64
+#endif
+
+/*
** Different Unix systems declare open() in different ways. Same use
** open(const char*,int,mode_t). Others use open(const char*,int,...).
** The difference is important when using a pointer to the function.
@@ -24906,7 +25450,7 @@ static int unixMutexHeld(void) {
#if defined(SQLITE_TEST) && defined(SQLITE_DEBUG)
/*
** Helper function for printing out trace information from debugging
-** binaries. This returns the string represetation of the supplied
+** binaries. This returns the string representation of the supplied
** integer lock-type.
*/
static const char *azFileLock(int eFileLock){
@@ -24983,9 +25527,22 @@ static int lockTrace(int fd, int op, struct flock *p){
/*
** Retry ftruncate() calls that fail due to EINTR
+**
+** All calls to ftruncate() within this file should be made through this wrapper.
+** On the Android platform, bypassing the logic below could lead to a corrupt
+** database.
*/
static int robust_ftruncate(int h, sqlite3_int64 sz){
int rc;
+#ifdef __ANDROID__
+ /* On Android, ftruncate() always uses 32-bit offsets, even if
+ ** _FILE_OFFSET_BITS=64 is defined. This means it is unsafe to attempt to
+ ** truncate a file to any size larger than 2GiB. Silently ignore any
+ ** such attempts. */
+ if( sz>(sqlite3_int64)0x7FFFFFFF ){
+ rc = SQLITE_OK;
+ }else
+#endif
do{ rc = osFtruncate(h,sz); }while( rc<0 && errno==EINTR );
return rc;
}
@@ -27373,7 +27930,7 @@ static int nfsUnlock(sqlite3_file *id, int eFileLock){
** NB: If you define USE_PREAD or USE_PREAD64, then it might also
** be necessary to define _XOPEN_SOURCE to be 500. This varies from
** one system to another. Since SQLite does not define USE_PREAD
-** any any form by default, we will not attempt to define _XOPEN_SOURCE.
+** in any form by default, we will not attempt to define _XOPEN_SOURCE.
** See tickets #2741 and #2681.
**
** To avoid stomping the errno value on a failed read the lastErrno value
@@ -27870,7 +28427,7 @@ static int unixTruncate(sqlite3_file *id, i64 nByte){
nByte = ((nByte + pFile->szChunk - 1)/pFile->szChunk) * pFile->szChunk;
}
- rc = robust_ftruncate(pFile->h, (off_t)nByte);
+ rc = robust_ftruncate(pFile->h, nByte);
if( rc ){
pFile->lastErrno = errno;
return unixLogError(SQLITE_IOERR_TRUNCATE, "ftruncate", pFile->zPath);
@@ -28005,7 +28562,7 @@ static int fcntlSizeHint(unixFile *pFile, i64 nByte){
}
/*
-** If *pArg is inititially negative then this is a query. Set *pArg to
+** If *pArg is initially negative then this is a query. Set *pArg to
** 1 or 0 depending on whether or not bit mask of pFile->ctrlFlags is set.
**
** If *pArg is 0 or 1, then clear or set the mask bit of pFile->ctrlFlags.
@@ -28212,7 +28769,7 @@ static int unixSectorSize(sqlite3_file *id){
** Return the device characteristics for the file.
**
** This VFS is set up to return SQLITE_IOCAP_POWERSAFE_OVERWRITE by default.
-** However, that choice is contraversial since technically the underlying
+** However, that choice is controversial since technically the underlying
** file system does not always provide powersafe overwrites. (In other
** words, after a power-loss event, parts of the file that were never
** written might end up being altered.) However, non-PSOW behavior is very,
@@ -29184,7 +29741,7 @@ static int unixUnfetch(sqlite3_file *fd, i64 iOff, void *p){
** looks at the filesystem type and tries to guess the best locking
** strategy from that.
**
-** For finder-funtion F, two objects are created:
+** For finder-function F, two objects are created:
**
** (1) The real finder-function named "FImpt()".
**
@@ -29205,7 +29762,7 @@ static int unixUnfetch(sqlite3_file *fd, i64 iOff, void *p){
** * An I/O method finder function called FINDER that returns a pointer
** to the METHOD object in the previous bullet.
*/
-#define IOMETHODS(FINDER, METHOD, VERSION, CLOSE, LOCK, UNLOCK, CKLOCK) \
+#define IOMETHODS(FINDER, METHOD, VERSION, CLOSE, LOCK, UNLOCK, CKLOCK, SHMMAP) \
static const sqlite3_io_methods METHOD = { \
VERSION, /* iVersion */ \
CLOSE, /* xClose */ \
@@ -29220,7 +29777,7 @@ static const sqlite3_io_methods METHOD = { \
unixFileControl, /* xFileControl */ \
unixSectorSize, /* xSectorSize */ \
unixDeviceCharacteristics, /* xDeviceCapabilities */ \
- unixShmMap, /* xShmMap */ \
+ SHMMAP, /* xShmMap */ \
unixShmLock, /* xShmLock */ \
unixShmBarrier, /* xShmBarrier */ \
unixShmUnmap, /* xShmUnmap */ \
@@ -29246,16 +29803,18 @@ IOMETHODS(
unixClose, /* xClose method */
unixLock, /* xLock method */
unixUnlock, /* xUnlock method */
- unixCheckReservedLock /* xCheckReservedLock method */
+ unixCheckReservedLock, /* xCheckReservedLock method */
+ unixShmMap /* xShmMap method */
)
IOMETHODS(
nolockIoFinder, /* Finder function name */
nolockIoMethods, /* sqlite3_io_methods object name */
- 1, /* shared memory is disabled */
+ 3, /* shared memory is disabled */
nolockClose, /* xClose method */
nolockLock, /* xLock method */
nolockUnlock, /* xUnlock method */
- nolockCheckReservedLock /* xCheckReservedLock method */
+ nolockCheckReservedLock, /* xCheckReservedLock method */
+ 0 /* xShmMap method */
)
IOMETHODS(
dotlockIoFinder, /* Finder function name */
@@ -29264,7 +29823,8 @@ IOMETHODS(
dotlockClose, /* xClose method */
dotlockLock, /* xLock method */
dotlockUnlock, /* xUnlock method */
- dotlockCheckReservedLock /* xCheckReservedLock method */
+ dotlockCheckReservedLock, /* xCheckReservedLock method */
+ 0 /* xShmMap method */
)
#if SQLITE_ENABLE_LOCKING_STYLE && !OS_VXWORKS
@@ -29275,7 +29835,8 @@ IOMETHODS(
flockClose, /* xClose method */
flockLock, /* xLock method */
flockUnlock, /* xUnlock method */
- flockCheckReservedLock /* xCheckReservedLock method */
+ flockCheckReservedLock, /* xCheckReservedLock method */
+ 0 /* xShmMap method */
)
#endif
@@ -29287,7 +29848,8 @@ IOMETHODS(
semClose, /* xClose method */
semLock, /* xLock method */
semUnlock, /* xUnlock method */
- semCheckReservedLock /* xCheckReservedLock method */
+ semCheckReservedLock, /* xCheckReservedLock method */
+ 0 /* xShmMap method */
)
#endif
@@ -29299,7 +29861,8 @@ IOMETHODS(
afpClose, /* xClose method */
afpLock, /* xLock method */
afpUnlock, /* xUnlock method */
- afpCheckReservedLock /* xCheckReservedLock method */
+ afpCheckReservedLock, /* xCheckReservedLock method */
+ 0 /* xShmMap method */
)
#endif
@@ -29324,7 +29887,8 @@ IOMETHODS(
proxyClose, /* xClose method */
proxyLock, /* xLock method */
proxyUnlock, /* xUnlock method */
- proxyCheckReservedLock /* xCheckReservedLock method */
+ proxyCheckReservedLock, /* xCheckReservedLock method */
+ 0 /* xShmMap method */
)
#endif
@@ -29337,7 +29901,8 @@ IOMETHODS(
unixClose, /* xClose method */
unixLock, /* xLock method */
nfsUnlock, /* xUnlock method */
- unixCheckReservedLock /* xCheckReservedLock method */
+ unixCheckReservedLock, /* xCheckReservedLock method */
+ 0 /* xShmMap method */
)
#endif
@@ -29446,7 +30011,7 @@ static const sqlite3_io_methods
#endif /* OS_VXWORKS && SQLITE_ENABLE_LOCKING_STYLE */
/*
-** An abstract type for a pointer to a IO method finder function:
+** An abstract type for a pointer to an IO method finder function:
*/
typedef const sqlite3_io_methods *(*finder_type)(const char*,unixFile*);
@@ -29760,7 +30325,7 @@ static UnixUnusedFd *findReusableFd(const char *zPath, int flags){
** descriptor on the same path, fail, and return an error to SQLite.
**
** Even if a subsequent open() call does succeed, the consequences of
- ** not searching for a resusable file descriptor are not dire. */
+ ** not searching for a reusable file descriptor are not dire. */
if( 0==osStat(zPath, &sStat) ){
unixInodeInfo *pInode;
@@ -29791,7 +30356,7 @@ static UnixUnusedFd *findReusableFd(const char *zPath, int flags){
** written to *pMode. If an IO error occurs, an SQLite error code is
** returned and the value of *pMode is not modified.
**
-** In most cases cases, this routine sets *pMode to 0, which will become
+** In most cases, this routine sets *pMode to 0, which will become
** an indication to robust_open() to create the file using
** SQLITE_DEFAULT_FILE_PERMISSIONS adjusted by the umask.
** But if the file being opened is a WAL or regular journal file, then
@@ -30160,7 +30725,7 @@ static int unixDelete(
if( osUnlink(zPath)==(-1) ){
if( errno==ENOENT
#if OS_VXWORKS
- || errno==0x380003
+ || osAccess(zPath,0)!=0
#endif
){
rc = SQLITE_IOERR_DELETE_NOENT;
@@ -30583,7 +31148,7 @@ static int unixGetLastError(sqlite3_vfs *NotUsed, int NotUsed2, char *NotUsed3){
** proxy path against the values stored in the conch. The conch file is
** stored in the same directory as the database file and the file name
** is patterned after the database file name as ".<databasename>-conch".
-** If the conch file does not exist, or it's contents do not match the
+** If the conch file does not exist, or its contents do not match the
** host ID and/or proxy path, then the lock is escalated to an exclusive
** lock and the conch file contents is updated with the host ID and proxy
** path and the lock is downgraded to a shared lock again. If the conch
@@ -30635,7 +31200,7 @@ static int unixGetLastError(sqlite3_vfs *NotUsed, int NotUsed2, char *NotUsed3){
** setting the environment variable SQLITE_FORCE_PROXY_LOCKING to 1 will
** force proxy locking to be used for every database file opened, and 0
** will force automatic proxy locking to be disabled for all database
-** files (explicity calling the SQLITE_SET_LOCKPROXYFILE pragma or
+** files (explicitly calling the SQLITE_SET_LOCKPROXYFILE pragma or
** sqlite_file_control API is not affected by SQLITE_FORCE_PROXY_LOCKING).
*/
@@ -32397,9 +32962,9 @@ SQLITE_PRIVATE const sqlite3_mem_methods *sqlite3MemGetWin32(void);
** can manually set this value to 1 to emulate Win98 behavior.
*/
#ifdef SQLITE_TEST
-SQLITE_API LONG volatile sqlite3_os_type = 0;
+SQLITE_API LONG SQLITE_WIN32_VOLATILE sqlite3_os_type = 0;
#else
-static LONG volatile sqlite3_os_type = 0;
+static LONG SQLITE_WIN32_VOLATILE sqlite3_os_type = 0;
#endif
#ifndef SYSCALL
@@ -32930,7 +33495,7 @@ static struct win_syscall {
#define osWaitForSingleObject ((DWORD(WINAPI*)(HANDLE, \
DWORD))aSyscall[63].pCurrent)
-#if SQLITE_OS_WINRT
+#if !SQLITE_OS_WINCE
{ "WaitForSingleObjectEx", (SYSCALL)WaitForSingleObjectEx, 0 },
#else
{ "WaitForSingleObjectEx", (SYSCALL)0, 0 },
@@ -33042,8 +33607,8 @@ static struct win_syscall {
#else
{ "InterlockedCompareExchange", (SYSCALL)InterlockedCompareExchange, 0 },
-#define osInterlockedCompareExchange ((LONG(WINAPI*)(LONG volatile*, \
- LONG,LONG))aSyscall[76].pCurrent)
+#define osInterlockedCompareExchange ((LONG(WINAPI*)(LONG \
+ SQLITE_WIN32_VOLATILE*, LONG,LONG))aSyscall[76].pCurrent)
#endif /* defined(InterlockedCompareExchange) */
}; /* End of the overrideable system calls */
@@ -33277,6 +33842,16 @@ SQLITE_API void sqlite3_win32_sleep(DWORD milliseconds){
#endif
}
+#if SQLITE_MAX_WORKER_THREADS>0 && !SQLITE_OS_WINCE && !SQLITE_OS_WINRT && \
+ SQLITE_THREADSAFE>0
+SQLITE_PRIVATE DWORD sqlite3Win32Wait(HANDLE hObject){
+ DWORD rc;
+ while( (rc = osWaitForSingleObjectEx(hObject, INFINITE,
+ TRUE))==WAIT_IO_COMPLETION ){}
+ return rc;
+}
+#endif
+
/*
** Return true (non-zero) if we are running under WinNT, Win2K, WinXP,
** or WinCE. Return false (zero) for Win95, Win98, or WinME.
@@ -33304,19 +33879,24 @@ SQLITE_API void sqlite3_win32_sleep(DWORD milliseconds){
** based on the NT kernel.
*/
SQLITE_API int sqlite3_win32_is_nt(void){
-#if defined(SQLITE_WIN32_GETVERSIONEX) && SQLITE_WIN32_GETVERSIONEX
+#if SQLITE_OS_WINRT
+ /*
+ ** NOTE: The WinRT sub-platform is always assumed to be based on the NT
+ ** kernel.
+ */
+ return 1;
+#elif defined(SQLITE_WIN32_GETVERSIONEX) && SQLITE_WIN32_GETVERSIONEX
if( osInterlockedCompareExchange(&sqlite3_os_type, 0, 0)==0 ){
-#if !SQLITE_OS_WINRT && defined(SQLITE_WIN32_HAS_WIDE) && \
- defined(NTDDI_VERSION) && NTDDI_VERSION >= NTDDI_WIN8
- OSVERSIONINFOW sInfo;
+#if defined(SQLITE_WIN32_HAS_ANSI)
+ OSVERSIONINFOA sInfo;
sInfo.dwOSVersionInfoSize = sizeof(sInfo);
- osGetVersionExW(&sInfo);
+ osGetVersionExA(&sInfo);
osInterlockedCompareExchange(&sqlite3_os_type,
(sInfo.dwPlatformId == VER_PLATFORM_WIN32_NT) ? 2 : 1, 0);
-#elif defined(SQLITE_WIN32_HAS_ANSI)
- OSVERSIONINFOA sInfo;
+#elif defined(SQLITE_WIN32_HAS_WIDE)
+ OSVERSIONINFOW sInfo;
sInfo.dwOSVersionInfoSize = sizeof(sInfo);
- osGetVersionExA(&sInfo);
+ osGetVersionExW(&sInfo);
osInterlockedCompareExchange(&sqlite3_os_type,
(sInfo.dwPlatformId == VER_PLATFORM_WIN32_NT) ? 2 : 1, 0);
#endif
@@ -33325,6 +33905,10 @@ SQLITE_API int sqlite3_win32_is_nt(void){
#elif SQLITE_TEST
return osInterlockedCompareExchange(&sqlite3_os_type, 2, 2)==2;
#else
+ /*
+ ** NOTE: All sub-platforms where the GetVersionEx[AW] functions are
+ ** deprecated are always assumed to be based on the NT kernel.
+ */
return 1;
#endif
}
@@ -35101,7 +35685,7 @@ static int winUnlock(sqlite3_file *id, int locktype){
}
/*
-** If *pArg is inititially negative then this is a query. Set *pArg to
+** If *pArg is initially negative then this is a query. Set *pArg to
** 1 or 0 depending on whether or not bit mask of pFile->ctrlFlags is set.
**
** If *pArg is 0 or 1, then clear or set the mask bit of pFile->ctrlFlags.
@@ -36115,7 +36699,7 @@ static int winUnfetch(sqlite3_file *fd, i64 iOff, void *p){
}else{
/* FIXME: If Windows truly always prevents truncating or deleting a
** file while a mapping is held, then the following winUnmapfile() call
- ** is unnecessary can can be omitted - potentially improving
+ ** is unnecessary can be omitted - potentially improving
** performance. */
winUnmapfile(pFd);
}
@@ -37973,88 +38557,71 @@ struct PCache {
/********************************** Linked List Management ********************/
-#if !defined(NDEBUG) && defined(SQLITE_ENABLE_EXPENSIVE_ASSERT)
-/*
-** Check that the pCache->pSynced variable is set correctly. If it
-** is not, either fail an assert or return zero. Otherwise, return
-** non-zero. This is only used in debugging builds, as follows:
-**
-** expensive_assert( pcacheCheckSynced(pCache) );
-*/
-static int pcacheCheckSynced(PCache *pCache){
- PgHdr *p;
- for(p=pCache->pDirtyTail; p!=pCache->pSynced; p=p->pDirtyPrev){
- assert( p->nRef || (p->flags&PGHDR_NEED_SYNC) );
- }
- return (p==0 || p->nRef || (p->flags&PGHDR_NEED_SYNC)==0);
-}
-#endif /* !NDEBUG && SQLITE_ENABLE_EXPENSIVE_ASSERT */
+/* Allowed values for second argument to pcacheManageDirtyList() */
+#define PCACHE_DIRTYLIST_REMOVE 1 /* Remove pPage from dirty list */
+#define PCACHE_DIRTYLIST_ADD 2 /* Add pPage to the dirty list */
+#define PCACHE_DIRTYLIST_FRONT 3 /* Move pPage to the front of the list */
/*
-** Remove page pPage from the list of dirty pages.
+** Manage pPage's participation on the dirty list. Bits of the addRemove
+** argument determines what operation to do. The 0x01 bit means first
+** remove pPage from the dirty list. The 0x02 means add pPage back to
+** the dirty list. Doing both moves pPage to the front of the dirty list.
*/
-static void pcacheRemoveFromDirtyList(PgHdr *pPage){
+static void pcacheManageDirtyList(PgHdr *pPage, u8 addRemove){
PCache *p = pPage->pCache;
- assert( pPage->pDirtyNext || pPage==p->pDirtyTail );
- assert( pPage->pDirtyPrev || pPage==p->pDirty );
-
- /* Update the PCache1.pSynced variable if necessary. */
- if( p->pSynced==pPage ){
- PgHdr *pSynced = pPage->pDirtyPrev;
- while( pSynced && (pSynced->flags&PGHDR_NEED_SYNC) ){
- pSynced = pSynced->pDirtyPrev;
+ if( addRemove & PCACHE_DIRTYLIST_REMOVE ){
+ assert( pPage->pDirtyNext || pPage==p->pDirtyTail );
+ assert( pPage->pDirtyPrev || pPage==p->pDirty );
+
+ /* Update the PCache1.pSynced variable if necessary. */
+ if( p->pSynced==pPage ){
+ PgHdr *pSynced = pPage->pDirtyPrev;
+ while( pSynced && (pSynced->flags&PGHDR_NEED_SYNC) ){
+ pSynced = pSynced->pDirtyPrev;
+ }
+ p->pSynced = pSynced;
}
- p->pSynced = pSynced;
- }
-
- if( pPage->pDirtyNext ){
- pPage->pDirtyNext->pDirtyPrev = pPage->pDirtyPrev;
- }else{
- assert( pPage==p->pDirtyTail );
- p->pDirtyTail = pPage->pDirtyPrev;
- }
- if( pPage->pDirtyPrev ){
- pPage->pDirtyPrev->pDirtyNext = pPage->pDirtyNext;
- }else{
- assert( pPage==p->pDirty );
- p->pDirty = pPage->pDirtyNext;
- if( p->pDirty==0 && p->bPurgeable ){
- assert( p->eCreate==1 );
- p->eCreate = 2;
+
+ if( pPage->pDirtyNext ){
+ pPage->pDirtyNext->pDirtyPrev = pPage->pDirtyPrev;
+ }else{
+ assert( pPage==p->pDirtyTail );
+ p->pDirtyTail = pPage->pDirtyPrev;
}
+ if( pPage->pDirtyPrev ){
+ pPage->pDirtyPrev->pDirtyNext = pPage->pDirtyNext;
+ }else{
+ assert( pPage==p->pDirty );
+ p->pDirty = pPage->pDirtyNext;
+ if( p->pDirty==0 && p->bPurgeable ){
+ assert( p->eCreate==1 );
+ p->eCreate = 2;
+ }
+ }
+ pPage->pDirtyNext = 0;
+ pPage->pDirtyPrev = 0;
}
- pPage->pDirtyNext = 0;
- pPage->pDirtyPrev = 0;
-
- expensive_assert( pcacheCheckSynced(p) );
-}
-
-/*
-** Add page pPage to the head of the dirty list (PCache1.pDirty is set to
-** pPage).
-*/
-static void pcacheAddToDirtyList(PgHdr *pPage){
- PCache *p = pPage->pCache;
-
- assert( pPage->pDirtyNext==0 && pPage->pDirtyPrev==0 && p->pDirty!=pPage );
-
- pPage->pDirtyNext = p->pDirty;
- if( pPage->pDirtyNext ){
- assert( pPage->pDirtyNext->pDirtyPrev==0 );
- pPage->pDirtyNext->pDirtyPrev = pPage;
- }else if( p->bPurgeable ){
- assert( p->eCreate==2 );
- p->eCreate = 1;
- }
- p->pDirty = pPage;
- if( !p->pDirtyTail ){
- p->pDirtyTail = pPage;
- }
- if( !p->pSynced && 0==(pPage->flags&PGHDR_NEED_SYNC) ){
- p->pSynced = pPage;
+ if( addRemove & PCACHE_DIRTYLIST_ADD ){
+ assert( pPage->pDirtyNext==0 && pPage->pDirtyPrev==0 && p->pDirty!=pPage );
+
+ pPage->pDirtyNext = p->pDirty;
+ if( pPage->pDirtyNext ){
+ assert( pPage->pDirtyNext->pDirtyPrev==0 );
+ pPage->pDirtyNext->pDirtyPrev = pPage;
+ }else{
+ p->pDirtyTail = pPage;
+ if( p->bPurgeable ){
+ assert( p->eCreate==2 );
+ p->eCreate = 1;
+ }
+ }
+ p->pDirty = pPage;
+ if( !p->pSynced && 0==(pPage->flags&PGHDR_NEED_SYNC) ){
+ p->pSynced = pPage;
+ }
}
- expensive_assert( pcacheCheckSynced(p) );
}
/*
@@ -38062,12 +38629,22 @@ static void pcacheAddToDirtyList(PgHdr *pPage){
** being used for an in-memory database, this function is a no-op.
*/
static void pcacheUnpin(PgHdr *p){
- PCache *pCache = p->pCache;
- if( pCache->bPurgeable ){
+ if( p->pCache->bPurgeable ){
if( p->pgno==1 ){
- pCache->pPage1 = 0;
+ p->pCache->pPage1 = 0;
}
- sqlite3GlobalConfig.pcache2.xUnpin(pCache->pCache, p->pPage, 0);
+ sqlite3GlobalConfig.pcache2.xUnpin(p->pCache->pCache, p->pPage, 0);
+ }
+}
+
+/*
+** Compute the number of pages of cache requested.
+*/
+static int numberOfCachePages(PCache *p){
+ if( p->szCache>=0 ){
+ return p->szCache;
+ }else{
+ return (int)((-1024*(i64)p->szCache)/(p->szPage+p->szExtra));
}
}
@@ -38103,7 +38680,7 @@ SQLITE_PRIVATE int sqlite3PcacheSize(void){ return sizeof(PCache); }
** The caller discovers how much space needs to be allocated by
** calling sqlite3PcacheSize().
*/
-SQLITE_PRIVATE void sqlite3PcacheOpen(
+SQLITE_PRIVATE int sqlite3PcacheOpen(
int szPage, /* Size of every page */
int szExtra, /* Extra space associated with each page */
int bPurgeable, /* True if pages are on backing store */
@@ -38112,76 +38689,75 @@ SQLITE_PRIVATE void sqlite3PcacheOpen(
PCache *p /* Preallocated space for the PCache */
){
memset(p, 0, sizeof(PCache));
- p->szPage = szPage;
+ p->szPage = 1;
p->szExtra = szExtra;
p->bPurgeable = bPurgeable;
p->eCreate = 2;
p->xStress = xStress;
p->pStress = pStress;
p->szCache = 100;
+ return sqlite3PcacheSetPageSize(p, szPage);
}
/*
** Change the page size for PCache object. The caller must ensure that there
** are no outstanding page references when this function is called.
*/
-SQLITE_PRIVATE void sqlite3PcacheSetPageSize(PCache *pCache, int szPage){
+SQLITE_PRIVATE int sqlite3PcacheSetPageSize(PCache *pCache, int szPage){
assert( pCache->nRef==0 && pCache->pDirty==0 );
- if( pCache->pCache ){
- sqlite3GlobalConfig.pcache2.xDestroy(pCache->pCache);
- pCache->pCache = 0;
+ if( pCache->szPage ){
+ sqlite3_pcache *pNew;
+ pNew = sqlite3GlobalConfig.pcache2.xCreate(
+ szPage, pCache->szExtra + sizeof(PgHdr), pCache->bPurgeable
+ );
+ if( pNew==0 ) return SQLITE_NOMEM;
+ sqlite3GlobalConfig.pcache2.xCachesize(pNew, numberOfCachePages(pCache));
+ if( pCache->pCache ){
+ sqlite3GlobalConfig.pcache2.xDestroy(pCache->pCache);
+ }
+ pCache->pCache = pNew;
pCache->pPage1 = 0;
+ pCache->szPage = szPage;
}
- pCache->szPage = szPage;
-}
-
-/*
-** Compute the number of pages of cache requested.
-*/
-static int numberOfCachePages(PCache *p){
- if( p->szCache>=0 ){
- return p->szCache;
- }else{
- return (int)((-1024*(i64)p->szCache)/(p->szPage+p->szExtra));
- }
+ return SQLITE_OK;
}
/*
** Try to obtain a page from the cache.
+**
+** This routine returns a pointer to an sqlite3_pcache_page object if
+** such an object is already in cache, or if a new one is created.
+** This routine returns a NULL pointer if the object was not in cache
+** and could not be created.
+**
+** The createFlags should be 0 to check for existing pages and should
+** be 3 (not 1, but 3) to try to create a new page.
+**
+** If the createFlag is 0, then NULL is always returned if the page
+** is not already in the cache. If createFlag is 1, then a new page
+** is created only if that can be done without spilling dirty pages
+** and without exceeding the cache size limit.
+**
+** The caller needs to invoke sqlite3PcacheFetchFinish() to properly
+** initialize the sqlite3_pcache_page object and convert it into a
+** PgHdr object. The sqlite3PcacheFetch() and sqlite3PcacheFetchFinish()
+** routines are split this way for performance reasons. When separated
+** they can both (usually) operate without having to push values to
+** the stack on entry and pop them back off on exit, which saves a
+** lot of pushing and popping.
*/
-SQLITE_PRIVATE int sqlite3PcacheFetch(
+SQLITE_PRIVATE sqlite3_pcache_page *sqlite3PcacheFetch(
PCache *pCache, /* Obtain the page from this cache */
Pgno pgno, /* Page number to obtain */
- int createFlag, /* If true, create page if it does not exist already */
- PgHdr **ppPage /* Write the page here */
+ int createFlag /* If true, create page if it does not exist already */
){
- sqlite3_pcache_page *pPage;
- PgHdr *pPgHdr = 0;
int eCreate;
assert( pCache!=0 );
- assert( createFlag==1 || createFlag==0 );
+ assert( pCache->pCache!=0 );
+ assert( createFlag==3 || createFlag==0 );
assert( pgno>0 );
- /* If the pluggable cache (sqlite3_pcache*) has not been allocated,
- ** allocate it now.
- */
- if( !pCache->pCache ){
- sqlite3_pcache *p;
- if( !createFlag ){
- *ppPage = 0;
- return SQLITE_OK;
- }
- p = sqlite3GlobalConfig.pcache2.xCreate(
- pCache->szPage, pCache->szExtra + sizeof(PgHdr), pCache->bPurgeable
- );
- if( !p ){
- return SQLITE_NOMEM;
- }
- sqlite3GlobalConfig.pcache2.xCachesize(p, numberOfCachePages(pCache));
- pCache->pCache = p;
- }
-
/* eCreate defines what to do if the page does not exist.
** 0 Do not allocate a new page. (createFlag==0)
** 1 Allocate a new page if doing so is inexpensive.
@@ -38189,89 +38765,135 @@ SQLITE_PRIVATE int sqlite3PcacheFetch(
** 2 Allocate a new page even it doing so is difficult.
** (createFlag==1 AND !(bPurgeable AND pDirty)
*/
- eCreate = createFlag==0 ? 0 : pCache->eCreate;
- assert( (createFlag*(1+(!pCache->bPurgeable||!pCache->pDirty)))==eCreate );
- pPage = sqlite3GlobalConfig.pcache2.xFetch(pCache->pCache, pgno, eCreate);
- if( !pPage && eCreate==1 ){
- PgHdr *pPg;
+ eCreate = createFlag & pCache->eCreate;
+ assert( eCreate==0 || eCreate==1 || eCreate==2 );
+ assert( createFlag==0 || pCache->eCreate==eCreate );
+ assert( createFlag==0 || eCreate==1+(!pCache->bPurgeable||!pCache->pDirty) );
+ return sqlite3GlobalConfig.pcache2.xFetch(pCache->pCache, pgno, eCreate);
+}
- /* Find a dirty page to write-out and recycle. First try to find a
- ** page that does not require a journal-sync (one with PGHDR_NEED_SYNC
- ** cleared), but if that is not possible settle for any other
- ** unreferenced dirty page.
- */
- expensive_assert( pcacheCheckSynced(pCache) );
- for(pPg=pCache->pSynced;
- pPg && (pPg->nRef || (pPg->flags&PGHDR_NEED_SYNC));
- pPg=pPg->pDirtyPrev
- );
- pCache->pSynced = pPg;
- if( !pPg ){
- for(pPg=pCache->pDirtyTail; pPg && pPg->nRef; pPg=pPg->pDirtyPrev);
- }
- if( pPg ){
- int rc;
+/*
+** If the sqlite3PcacheFetch() routine is unable to allocate a new
+** page because new clean pages are available for reuse and the cache
+** size limit has been reached, then this routine can be invoked to
+** try harder to allocate a page. This routine might invoke the stress
+** callback to spill dirty pages to the journal. It will then try to
+** allocate the new page and will only fail to allocate a new page on
+** an OOM error.
+**
+** This routine should be invoked only after sqlite3PcacheFetch() fails.
+*/
+SQLITE_PRIVATE int sqlite3PcacheFetchStress(
+ PCache *pCache, /* Obtain the page from this cache */
+ Pgno pgno, /* Page number to obtain */
+ sqlite3_pcache_page **ppPage /* Write result here */
+){
+ PgHdr *pPg;
+ if( pCache->eCreate==2 ) return 0;
+
+
+ /* Find a dirty page to write-out and recycle. First try to find a
+ ** page that does not require a journal-sync (one with PGHDR_NEED_SYNC
+ ** cleared), but if that is not possible settle for any other
+ ** unreferenced dirty page.
+ */
+ for(pPg=pCache->pSynced;
+ pPg && (pPg->nRef || (pPg->flags&PGHDR_NEED_SYNC));
+ pPg=pPg->pDirtyPrev
+ );
+ pCache->pSynced = pPg;
+ if( !pPg ){
+ for(pPg=pCache->pDirtyTail; pPg && pPg->nRef; pPg=pPg->pDirtyPrev);
+ }
+ if( pPg ){
+ int rc;
#ifdef SQLITE_LOG_CACHE_SPILL
- sqlite3_log(SQLITE_FULL,
- "spill page %d making room for %d - cache used: %d/%d",
- pPg->pgno, pgno,
- sqlite3GlobalConfig.pcache.xPagecount(pCache->pCache),
- numberOfCachePages(pCache));
-#endif
- rc = pCache->xStress(pCache->pStress, pPg);
- if( rc!=SQLITE_OK && rc!=SQLITE_BUSY ){
- return rc;
- }
+ sqlite3_log(SQLITE_FULL,
+ "spill page %d making room for %d - cache used: %d/%d",
+ pPg->pgno, pgno,
+ sqlite3GlobalConfig.pcache.xPagecount(pCache->pCache),
+ numberOfCachePages(pCache));
+#endif
+ rc = pCache->xStress(pCache->pStress, pPg);
+ if( rc!=SQLITE_OK && rc!=SQLITE_BUSY ){
+ return rc;
}
-
- pPage = sqlite3GlobalConfig.pcache2.xFetch(pCache->pCache, pgno, 2);
}
+ *ppPage = sqlite3GlobalConfig.pcache2.xFetch(pCache->pCache, pgno, 2);
+ return *ppPage==0 ? SQLITE_NOMEM : SQLITE_OK;
+}
- if( pPage ){
- pPgHdr = (PgHdr *)pPage->pExtra;
-
- if( !pPgHdr->pPage ){
- memset(pPgHdr, 0, sizeof(PgHdr));
- pPgHdr->pPage = pPage;
- pPgHdr->pData = pPage->pBuf;
- pPgHdr->pExtra = (void *)&pPgHdr[1];
- memset(pPgHdr->pExtra, 0, pCache->szExtra);
- pPgHdr->pCache = pCache;
- pPgHdr->pgno = pgno;
- }
- assert( pPgHdr->pCache==pCache );
- assert( pPgHdr->pgno==pgno );
- assert( pPgHdr->pData==pPage->pBuf );
- assert( pPgHdr->pExtra==(void *)&pPgHdr[1] );
-
- if( 0==pPgHdr->nRef ){
- pCache->nRef++;
- }
- pPgHdr->nRef++;
- if( pgno==1 ){
- pCache->pPage1 = pPgHdr;
- }
+/*
+** This is a helper routine for sqlite3PcacheFetchFinish()
+**
+** In the uncommon case where the page being fetched has not been
+** initialized, this routine is invoked to do the initialization.
+** This routine is broken out into a separate function since it
+** requires extra stack manipulation that can be avoided in the common
+** case.
+*/
+static SQLITE_NOINLINE PgHdr *pcacheFetchFinishWithInit(
+ PCache *pCache, /* Obtain the page from this cache */
+ Pgno pgno, /* Page number obtained */
+ sqlite3_pcache_page *pPage /* Page obtained by prior PcacheFetch() call */
+){
+ PgHdr *pPgHdr;
+ assert( pPage!=0 );
+ pPgHdr = (PgHdr*)pPage->pExtra;
+ assert( pPgHdr->pPage==0 );
+ memset(pPgHdr, 0, sizeof(PgHdr));
+ pPgHdr->pPage = pPage;
+ pPgHdr->pData = pPage->pBuf;
+ pPgHdr->pExtra = (void *)&pPgHdr[1];
+ memset(pPgHdr->pExtra, 0, pCache->szExtra);
+ pPgHdr->pCache = pCache;
+ pPgHdr->pgno = pgno;
+ return sqlite3PcacheFetchFinish(pCache,pgno,pPage);
+}
+
+/*
+** This routine converts the sqlite3_pcache_page object returned by
+** sqlite3PcacheFetch() into an initialized PgHdr object. This routine
+** must be called after sqlite3PcacheFetch() in order to get a usable
+** result.
+*/
+SQLITE_PRIVATE PgHdr *sqlite3PcacheFetchFinish(
+ PCache *pCache, /* Obtain the page from this cache */
+ Pgno pgno, /* Page number obtained */
+ sqlite3_pcache_page *pPage /* Page obtained by prior PcacheFetch() call */
+){
+ PgHdr *pPgHdr;
+
+ if( pPage==0 ) return 0;
+ pPgHdr = (PgHdr *)pPage->pExtra;
+
+ if( !pPgHdr->pPage ){
+ return pcacheFetchFinishWithInit(pCache, pgno, pPage);
}
- *ppPage = pPgHdr;
- return (pPgHdr==0 && eCreate) ? SQLITE_NOMEM : SQLITE_OK;
+ if( 0==pPgHdr->nRef ){
+ pCache->nRef++;
+ }
+ pPgHdr->nRef++;
+ if( pgno==1 ){
+ pCache->pPage1 = pPgHdr;
+ }
+ return pPgHdr;
}
/*
** Decrement the reference count on a page. If the page is clean and the
-** reference count drops to 0, then it is made elible for recycling.
+** reference count drops to 0, then it is made eligible for recycling.
*/
-SQLITE_PRIVATE void sqlite3PcacheRelease(PgHdr *p){
+SQLITE_PRIVATE void SQLITE_NOINLINE sqlite3PcacheRelease(PgHdr *p){
assert( p->nRef>0 );
p->nRef--;
if( p->nRef==0 ){
- PCache *pCache = p->pCache;
- pCache->nRef--;
+ p->pCache->nRef--;
if( (p->flags&PGHDR_DIRTY)==0 ){
pcacheUnpin(p);
- }else{
+ }else if( p->pDirtyPrev!=0 ){
/* Move the page to the head of the dirty list. */
- pcacheRemoveFromDirtyList(p);
- pcacheAddToDirtyList(p);
+ pcacheManageDirtyList(p, PCACHE_DIRTYLIST_FRONT);
}
}
}
@@ -38290,17 +38912,15 @@ SQLITE_PRIVATE void sqlite3PcacheRef(PgHdr *p){
** page pointed to by p is invalid.
*/
SQLITE_PRIVATE void sqlite3PcacheDrop(PgHdr *p){
- PCache *pCache;
assert( p->nRef==1 );
if( p->flags&PGHDR_DIRTY ){
- pcacheRemoveFromDirtyList(p);
+ pcacheManageDirtyList(p, PCACHE_DIRTYLIST_REMOVE);
}
- pCache = p->pCache;
- pCache->nRef--;
+ p->pCache->nRef--;
if( p->pgno==1 ){
- pCache->pPage1 = 0;
+ p->pCache->pPage1 = 0;
}
- sqlite3GlobalConfig.pcache2.xUnpin(pCache->pCache, p->pPage, 1);
+ sqlite3GlobalConfig.pcache2.xUnpin(p->pCache->pCache, p->pPage, 1);
}
/*
@@ -38312,7 +38932,7 @@ SQLITE_PRIVATE void sqlite3PcacheMakeDirty(PgHdr *p){
assert( p->nRef>0 );
if( 0==(p->flags & PGHDR_DIRTY) ){
p->flags |= PGHDR_DIRTY;
- pcacheAddToDirtyList( p);
+ pcacheManageDirtyList(p, PCACHE_DIRTYLIST_ADD);
}
}
@@ -38322,7 +38942,7 @@ SQLITE_PRIVATE void sqlite3PcacheMakeDirty(PgHdr *p){
*/
SQLITE_PRIVATE void sqlite3PcacheMakeClean(PgHdr *p){
if( (p->flags & PGHDR_DIRTY) ){
- pcacheRemoveFromDirtyList(p);
+ pcacheManageDirtyList(p, PCACHE_DIRTYLIST_REMOVE);
p->flags &= ~(PGHDR_DIRTY|PGHDR_NEED_SYNC);
if( p->nRef==0 ){
pcacheUnpin(p);
@@ -38361,8 +38981,7 @@ SQLITE_PRIVATE void sqlite3PcacheMove(PgHdr *p, Pgno newPgno){
sqlite3GlobalConfig.pcache2.xRekey(pCache->pCache, p->pPage, p->pgno,newPgno);
p->pgno = newPgno;
if( (p->flags&PGHDR_DIRTY) && (p->flags&PGHDR_NEED_SYNC) ){
- pcacheRemoveFromDirtyList(p);
- pcacheAddToDirtyList(p);
+ pcacheManageDirtyList(p, PCACHE_DIRTYLIST_FRONT);
}
}
@@ -38403,9 +39022,8 @@ SQLITE_PRIVATE void sqlite3PcacheTruncate(PCache *pCache, Pgno pgno){
** Close a cache.
*/
SQLITE_PRIVATE void sqlite3PcacheClose(PCache *pCache){
- if( pCache->pCache ){
- sqlite3GlobalConfig.pcache2.xDestroy(pCache->pCache);
- }
+ assert( pCache->pCache!=0 );
+ sqlite3GlobalConfig.pcache2.xDestroy(pCache->pCache);
}
/*
@@ -38514,11 +39132,8 @@ SQLITE_PRIVATE int sqlite3PcachePageRefcount(PgHdr *p){
** Return the total number of pages in the cache.
*/
SQLITE_PRIVATE int sqlite3PcachePagecount(PCache *pCache){
- int nPage = 0;
- if( pCache->pCache ){
- nPage = sqlite3GlobalConfig.pcache2.xPagecount(pCache->pCache);
- }
- return nPage;
+ assert( pCache->pCache!=0 );
+ return sqlite3GlobalConfig.pcache2.xPagecount(pCache->pCache);
}
#ifdef SQLITE_TEST
@@ -38534,20 +39149,18 @@ SQLITE_PRIVATE int sqlite3PcacheGetCachesize(PCache *pCache){
** Set the suggested cache-size value.
*/
SQLITE_PRIVATE void sqlite3PcacheSetCachesize(PCache *pCache, int mxPage){
+ assert( pCache->pCache!=0 );
pCache->szCache = mxPage;
- if( pCache->pCache ){
- sqlite3GlobalConfig.pcache2.xCachesize(pCache->pCache,
- numberOfCachePages(pCache));
- }
+ sqlite3GlobalConfig.pcache2.xCachesize(pCache->pCache,
+ numberOfCachePages(pCache));
}
/*
** Free up as much memory as possible from the page cache.
*/
SQLITE_PRIVATE void sqlite3PcacheShrink(PCache *pCache){
- if( pCache->pCache ){
- sqlite3GlobalConfig.pcache2.xShrink(pCache->pCache);
- }
+ assert( pCache->pCache!=0 );
+ sqlite3GlobalConfig.pcache2.xShrink(pCache->pCache);
}
#if defined(SQLITE_CHECK_PAGES) || defined(SQLITE_DEBUG)
@@ -38581,7 +39194,7 @@ SQLITE_PRIVATE void sqlite3PcacheIterateDirty(PCache *pCache, void (*xIter)(PgHd
** This file implements the default page cache implementation (the
** sqlite3_pcache interface). It also contains part of the implementation
** of the SQLITE_CONFIG_PAGECACHE and sqlite3_release_memory() features.
-** If the default page cache implementation is overriden, then neither of
+** If the default page cache implementation is overridden, then neither of
** these two features are available.
*/
@@ -38592,7 +39205,7 @@ typedef struct PgFreeslot PgFreeslot;
typedef struct PGroup PGroup;
/* Each page cache (or PCache) belongs to a PGroup. A PGroup is a set
-** of one or more PCaches that are able to recycle each others unpinned
+** of one or more PCaches that are able to recycle each other's unpinned
** pages when they are under memory pressure. A PGroup is an instance of
** the following object.
**
@@ -38950,7 +39563,7 @@ static int pcache1UnderMemoryPressure(PCache1 *pCache){
**
** The PCache mutex must be held when this function is called.
*/
-static int pcache1ResizeHash(PCache1 *p){
+static void pcache1ResizeHash(PCache1 *p){
PgHdr1 **apNew;
unsigned int nNew;
unsigned int i;
@@ -38982,8 +39595,6 @@ static int pcache1ResizeHash(PCache1 *p){
p->apHash = apNew;
p->nHash = nNew;
}
-
- return (p->apHash ? SQLITE_OK : SQLITE_NOMEM);
}
/*
@@ -39118,6 +39729,9 @@ static void pcache1Shutdown(void *NotUsed){
memset(&pcache1, 0, sizeof(pcache1));
}
+/* forward declaration */
+static void pcache1Destroy(sqlite3_pcache *p);
+
/*
** Implementation of the sqlite3_pcache.xCreate method.
**
@@ -39162,12 +39776,17 @@ static sqlite3_pcache *pcache1Create(int szPage, int szExtra, int bPurgeable){
pCache->szPage = szPage;
pCache->szExtra = szExtra;
pCache->bPurgeable = (bPurgeable ? 1 : 0);
+ pcache1EnterMutex(pGroup);
+ pcache1ResizeHash(pCache);
if( bPurgeable ){
pCache->nMin = 10;
- pcache1EnterMutex(pGroup);
pGroup->nMinPage += pCache->nMin;
pGroup->mxPinned = pGroup->nMaxPage + 10 - pGroup->nMinPage;
- pcache1LeaveMutex(pGroup);
+ }
+ pcache1LeaveMutex(pGroup);
+ if( pCache->nHash==0 ){
+ pcache1Destroy((sqlite3_pcache*)pCache);
+ pCache = 0;
}
}
return (sqlite3_pcache *)pCache;
@@ -39223,6 +39842,95 @@ static int pcache1Pagecount(sqlite3_pcache *p){
return n;
}
+
+/*
+** Implement steps 3, 4, and 5 of the pcache1Fetch() algorithm described
+** in the header of the pcache1Fetch() procedure.
+**
+** This steps are broken out into a separate procedure because they are
+** usually not needed, and by avoiding the stack initialization required
+** for these steps, the main pcache1Fetch() procedure can run faster.
+*/
+static SQLITE_NOINLINE PgHdr1 *pcache1FetchStage2(
+ PCache1 *pCache,
+ unsigned int iKey,
+ int createFlag
+){
+ unsigned int nPinned;
+ PGroup *pGroup = pCache->pGroup;
+ PgHdr1 *pPage = 0;
+
+ /* Step 3: Abort if createFlag is 1 but the cache is nearly full */
+ assert( pCache->nPage >= pCache->nRecyclable );
+ nPinned = pCache->nPage - pCache->nRecyclable;
+ assert( pGroup->mxPinned == pGroup->nMaxPage + 10 - pGroup->nMinPage );
+ assert( pCache->n90pct == pCache->nMax*9/10 );
+ if( createFlag==1 && (
+ nPinned>=pGroup->mxPinned
+ || nPinned>=pCache->n90pct
+ || (pcache1UnderMemoryPressure(pCache) && pCache->nRecyclable<nPinned)
+ )){
+ return 0;
+ }
+
+ if( pCache->nPage>=pCache->nHash ) pcache1ResizeHash(pCache);
+ assert( pCache->nHash>0 && pCache->apHash );
+
+ /* Step 4. Try to recycle a page. */
+ if( pCache->bPurgeable && pGroup->pLruTail && (
+ (pCache->nPage+1>=pCache->nMax)
+ || pGroup->nCurrentPage>=pGroup->nMaxPage
+ || pcache1UnderMemoryPressure(pCache)
+ )){
+ PCache1 *pOther;
+ pPage = pGroup->pLruTail;
+ assert( pPage->isPinned==0 );
+ pcache1RemoveFromHash(pPage);
+ pcache1PinPage(pPage);
+ pOther = pPage->pCache;
+
+ /* We want to verify that szPage and szExtra are the same for pOther
+ ** and pCache. Assert that we can verify this by comparing sums. */
+ assert( (pCache->szPage & (pCache->szPage-1))==0 && pCache->szPage>=512 );
+ assert( pCache->szExtra<512 );
+ assert( (pOther->szPage & (pOther->szPage-1))==0 && pOther->szPage>=512 );
+ assert( pOther->szExtra<512 );
+
+ if( pOther->szPage+pOther->szExtra != pCache->szPage+pCache->szExtra ){
+ pcache1FreePage(pPage);
+ pPage = 0;
+ }else{
+ pGroup->nCurrentPage -= (pOther->bPurgeable - pCache->bPurgeable);
+ }
+ }
+
+ /* Step 5. If a usable page buffer has still not been found,
+ ** attempt to allocate a new one.
+ */
+ if( !pPage ){
+ if( createFlag==1 ) sqlite3BeginBenignMalloc();
+ pPage = pcache1AllocPage(pCache);
+ if( createFlag==1 ) sqlite3EndBenignMalloc();
+ }
+
+ if( pPage ){
+ unsigned int h = iKey % pCache->nHash;
+ pCache->nPage++;
+ pPage->iKey = iKey;
+ pPage->pNext = pCache->apHash[h];
+ pPage->pCache = pCache;
+ pPage->pLruPrev = 0;
+ pPage->pLruNext = 0;
+ pPage->isPinned = 1;
+ *(void **)pPage->page.pExtra = 0;
+ pCache->apHash[h] = pPage;
+ if( iKey>pCache->iMaxKey ){
+ pCache->iMaxKey = iKey;
+ }
+ }
+ return pPage;
+}
+
/*
** Implementation of the sqlite3_pcache.xFetch method.
**
@@ -39282,9 +39990,7 @@ static sqlite3_pcache_page *pcache1Fetch(
unsigned int iKey,
int createFlag
){
- unsigned int nPinned;
PCache1 *pCache = (PCache1 *)p;
- PGroup *pGroup;
PgHdr1 *pPage = 0;
assert( offsetof(PgHdr1,page)==0 );
@@ -39292,107 +39998,22 @@ static sqlite3_pcache_page *pcache1Fetch(
assert( pCache->bPurgeable || pCache->nMin==0 );
assert( pCache->bPurgeable==0 || pCache->nMin==10 );
assert( pCache->nMin==0 || pCache->bPurgeable );
- pcache1EnterMutex(pGroup = pCache->pGroup);
+ assert( pCache->nHash>0 );
+ pcache1EnterMutex(pCache->pGroup);
/* Step 1: Search the hash table for an existing entry. */
- if( pCache->nHash>0 ){
- unsigned int h = iKey % pCache->nHash;
- for(pPage=pCache->apHash[h]; pPage&&pPage->iKey!=iKey; pPage=pPage->pNext);
- }
+ pPage = pCache->apHash[iKey % pCache->nHash];
+ while( pPage && pPage->iKey!=iKey ){ pPage = pPage->pNext; }
/* Step 2: Abort if no existing page is found and createFlag is 0 */
if( pPage ){
if( !pPage->isPinned ) pcache1PinPage(pPage);
- goto fetch_out;
- }
- if( createFlag==0 ){
- goto fetch_out;
- }
-
- /* The pGroup local variable will normally be initialized by the
- ** pcache1EnterMutex() macro above. But if SQLITE_MUTEX_OMIT is defined,
- ** then pcache1EnterMutex() is a no-op, so we have to initialize the
- ** local variable here. Delaying the initialization of pGroup is an
- ** optimization: The common case is to exit the module before reaching
- ** this point.
- */
-#ifdef SQLITE_MUTEX_OMIT
- pGroup = pCache->pGroup;
-#endif
-
- /* Step 3: Abort if createFlag is 1 but the cache is nearly full */
- assert( pCache->nPage >= pCache->nRecyclable );
- nPinned = pCache->nPage - pCache->nRecyclable;
- assert( pGroup->mxPinned == pGroup->nMaxPage + 10 - pGroup->nMinPage );
- assert( pCache->n90pct == pCache->nMax*9/10 );
- if( createFlag==1 && (
- nPinned>=pGroup->mxPinned
- || nPinned>=pCache->n90pct
- || pcache1UnderMemoryPressure(pCache)
- )){
- goto fetch_out;
- }
-
- if( pCache->nPage>=pCache->nHash && pcache1ResizeHash(pCache) ){
- goto fetch_out;
+ }else if( createFlag ){
+ /* Steps 3, 4, and 5 implemented by this subroutine */
+ pPage = pcache1FetchStage2(pCache, iKey, createFlag);
}
- assert( pCache->nHash>0 && pCache->apHash );
-
- /* Step 4. Try to recycle a page. */
- if( pCache->bPurgeable && pGroup->pLruTail && (
- (pCache->nPage+1>=pCache->nMax)
- || pGroup->nCurrentPage>=pGroup->nMaxPage
- || pcache1UnderMemoryPressure(pCache)
- )){
- PCache1 *pOther;
- pPage = pGroup->pLruTail;
- assert( pPage->isPinned==0 );
- pcache1RemoveFromHash(pPage);
- pcache1PinPage(pPage);
- pOther = pPage->pCache;
-
- /* We want to verify that szPage and szExtra are the same for pOther
- ** and pCache. Assert that we can verify this by comparing sums. */
- assert( (pCache->szPage & (pCache->szPage-1))==0 && pCache->szPage>=512 );
- assert( pCache->szExtra<512 );
- assert( (pOther->szPage & (pOther->szPage-1))==0 && pOther->szPage>=512 );
- assert( pOther->szExtra<512 );
-
- if( pOther->szPage+pOther->szExtra != pCache->szPage+pCache->szExtra ){
- pcache1FreePage(pPage);
- pPage = 0;
- }else{
- pGroup->nCurrentPage -= (pOther->bPurgeable - pCache->bPurgeable);
- }
- }
-
- /* Step 5. If a usable page buffer has still not been found,
- ** attempt to allocate a new one.
- */
- if( !pPage ){
- if( createFlag==1 ) sqlite3BeginBenignMalloc();
- pPage = pcache1AllocPage(pCache);
- if( createFlag==1 ) sqlite3EndBenignMalloc();
- }
-
- if( pPage ){
- unsigned int h = iKey % pCache->nHash;
- pCache->nPage++;
- pPage->iKey = iKey;
- pPage->pNext = pCache->apHash[h];
- pPage->pCache = pCache;
- pPage->pLruPrev = 0;
- pPage->pLruNext = 0;
- pPage->isPinned = 1;
- *(void **)pPage->page.pExtra = 0;
- pCache->apHash[h] = pPage;
- }
-
-fetch_out:
- if( pPage && iKey>pCache->iMaxKey ){
- pCache->iMaxKey = iKey;
- }
- pcache1LeaveMutex(pGroup);
+ assert( pPage==0 || pCache->iMaxKey>=iKey );
+ pcache1LeaveMutex(pCache->pGroup);
return (sqlite3_pcache_page*)pPage;
}
@@ -39651,7 +40272,7 @@ SQLITE_PRIVATE void sqlite3PcacheStats(
** No INSERTs may occurs after a SMALLEST. An assertion will fail if
** that is attempted.
**
-** The cost of an INSERT is roughly constant. (Sometime new memory
+** The cost of an INSERT is roughly constant. (Sometimes new memory
** has to be allocated on an INSERT.) The cost of a TEST with a new
** batch number is O(NlogN) where N is the number of elements in the RowSet.
** The cost of a TEST using the same batch number is O(logN). The cost
@@ -40043,8 +40664,8 @@ SQLITE_PRIVATE int sqlite3RowSetNext(RowSet *p, i64 *pRowid){
** Check to see if element iRowid was inserted into the rowset as
** part of any insert batch prior to iBatch. Return 1 or 0.
**
-** If this is the first test of a new batch and if there exist entires
-** on pRowSet->pEntry, then sort those entires into the forest at
+** If this is the first test of a new batch and if there exist entries
+** on pRowSet->pEntry, then sort those entries into the forest at
** pRowSet->pForest so that they can be tested.
*/
SQLITE_PRIVATE int sqlite3RowSetTest(RowSet *pRowSet, int iBatch, sqlite3_int64 iRowid){
@@ -40326,12 +40947,12 @@ SQLITE_PRIVATE int sqlite3WalFramesize(Wal *pWal);
** Definition: Two databases (or the same database at two points it time)
** are said to be "logically equivalent" if they give the same answer to
** all queries. Note in particular the content of freelist leaf
-** pages can be changed arbitarily without effecting the logical equivalence
+** pages can be changed arbitrarily without affecting the logical equivalence
** of the database.
**
** (7) At any time, if any subset, including the empty set and the total set,
** of the unsynced changes to a rollback journal are removed and the
-** journal is rolled back, the resulting database file will be logical
+** journal is rolled back, the resulting database file will be logically
** equivalent to the database file at the beginning of the transaction.
**
** (8) When a transaction is rolled back, the xTruncate method of the VFS
@@ -40628,7 +41249,7 @@ int sqlite3PagerTrace=1; /* True to enable tracing */
**
** The exception is when the database file is unlocked as the pager moves
** from ERROR to OPEN state. At this point there may be a hot-journal file
-** in the file-system that needs to be rolled back (as part of a OPEN->SHARED
+** in the file-system that needs to be rolled back (as part of an OPEN->SHARED
** transition, by the same pager or any other). If the call to xUnlock()
** fails at this point and the pager is left holding an EXCLUSIVE lock, this
** can confuse the call to xCheckReservedLock() call made later as part
@@ -40711,7 +41332,7 @@ struct PagerSavepoint {
#define SPILLFLAG_NOSYNC 0x04 /* Spill is ok, but do not sync */
/*
-** A open page cache is an instance of struct Pager. A description of
+** An open page cache is an instance of struct Pager. A description of
** some of the more important member variables follows:
**
** eState
@@ -40883,7 +41504,7 @@ struct Pager {
/**************************************************************************
** The following block contains those class members that change during
- ** routine opertion. Class members not in this block are either fixed
+ ** routine operation. Class members not in this block are either fixed
** when the pager is first created or else only change when there is a
** significant mode change (such as changing the page_size, locking_mode,
** or the journal_mode). From another view, these class members describe
@@ -41928,21 +42549,6 @@ static int writeMasterJournal(Pager *pPager, const char *zMaster){
}
/*
-** Find a page in the hash table given its page number. Return
-** a pointer to the page or NULL if the requested page is not
-** already in memory.
-*/
-static PgHdr *pager_lookup(Pager *pPager, Pgno pgno){
- PgHdr *p = 0; /* Return value */
-
- /* It is not possible for a call to PcacheFetch() with createFlag==0 to
- ** fail, since no attempt to allocate dynamic memory will be made.
- */
- (void)sqlite3PcacheFetch(pPager->pPCache, pgno, 0, &p);
- return p;
-}
-
-/*
** Discard the entire contents of the in-memory page-cache.
*/
static void pager_reset(Pager *pPager){
@@ -42206,6 +42812,14 @@ static int pager_end_transaction(Pager *pPager, int hasMaster, int bCommit){
rc = SQLITE_OK;
}else{
rc = sqlite3OsTruncate(pPager->jfd, 0);
+ if( rc==SQLITE_OK && pPager->fullSync ){
+ /* Make sure the new file size is written into the inode right away.
+ ** Otherwise the journal might resurrect following a power loss and
+ ** cause the last transaction to roll back. See
+ ** https://bugzilla.mozilla.org/show_bug.cgi?id=1072773
+ */
+ rc = sqlite3OsSync(pPager->jfd, pPager->syncFlags);
+ }
}
pPager->journalOff = 0;
}else if( pPager->journalMode==PAGER_JOURNALMODE_PERSIST
@@ -42234,7 +42848,7 @@ static int pager_end_transaction(Pager *pPager, int hasMaster, int bCommit){
#ifdef SQLITE_CHECK_PAGES
sqlite3PcacheIterateDirty(pPager->pPCache, pager_set_pagehash);
if( pPager->dbSize==0 && sqlite3PcacheRefCount(pPager->pPCache)>0 ){
- PgHdr *p = pager_lookup(pPager, 1);
+ PgHdr *p = sqlite3PagerLookup(pPager, 1);
if( p ){
p->pageHash = 0;
sqlite3PagerUnrefNotNull(p);
@@ -42513,7 +43127,7 @@ static int pager_playback_one_page(
if( pagerUseWal(pPager) ){
pPg = 0;
}else{
- pPg = pager_lookup(pPager, pgno);
+ pPg = sqlite3PagerLookup(pPager, pgno);
}
assert( pPg || !MEMDB );
assert( pPager->eState!=PAGER_OPEN || pPg==0 );
@@ -42693,7 +43307,7 @@ static int pager_delmaster(Pager *pPager, const char *zMaster){
rc = sqlite3OsFileSize(pMaster, &nMasterJournal);
if( rc!=SQLITE_OK ) goto delmaster_out;
nMasterPtr = pVfs->mxPathname+1;
- zMasterJournal = sqlite3Malloc((int)nMasterJournal + nMasterPtr + 1);
+ zMasterJournal = sqlite3Malloc(nMasterJournal + nMasterPtr + 1);
if( !zMasterJournal ){
rc = SQLITE_NOMEM;
goto delmaster_out;
@@ -42762,7 +43376,7 @@ delmaster_out:
** If the file on disk is currently larger than nPage pages, then use the VFS
** xTruncate() method to truncate it.
**
-** Or, it might might be the case that the file on disk is smaller than
+** Or, it might be the case that the file on disk is smaller than
** nPage pages. Some operating system implementations can get confused if
** you try to truncate a file to some size that is larger than it
** currently is, so detect this case and write a single zero byte to
@@ -42821,7 +43435,7 @@ SQLITE_PRIVATE int sqlite3SectorSize(sqlite3_file *pFile){
/*
** Set the value of the Pager.sectorSize variable for the given
** pager based on the value returned by the xSectorSize method
-** of the open database file. The sector size will be used used
+** of the open database file. The sector size will be used
** to determine the size and alignment of journal header and
** master journal pointers within created journal files.
**
@@ -43883,11 +44497,15 @@ SQLITE_PRIVATE int sqlite3PagerSetPagesize(Pager *pPager, u32 *pPageSize, int nR
if( rc==SQLITE_OK ){
pager_reset(pPager);
- pPager->dbSize = (Pgno)((nByte+pageSize-1)/pageSize);
- pPager->pageSize = pageSize;
+ rc = sqlite3PcacheSetPageSize(pPager->pPCache, pageSize);
+ }
+ if( rc==SQLITE_OK ){
sqlite3PageFree(pPager->pTmpSpace);
pPager->pTmpSpace = pNew;
- sqlite3PcacheSetPageSize(pPager->pPCache, pageSize);
+ pPager->dbSize = (Pgno)((nByte+pageSize-1)/pageSize);
+ pPager->pageSize = pageSize;
+ }else{
+ sqlite3PageFree(pNew);
}
}
@@ -44021,7 +44639,7 @@ static int pager_wait_on_lock(Pager *pPager, int locktype){
int rc; /* Return code */
/* Check that this is either a no-op (because the requested lock is
- ** already held, or one of the transistions that the busy-handler
+ ** already held), or one of the transitions that the busy-handler
** may be invoked during, according to the comment above
** sqlite3PagerSetBusyhandler().
*/
@@ -44649,8 +45267,8 @@ static int pagerStress(void *p, PgHdr *pPg){
** a rollback or by user request, respectively.
**
** Spilling is also prohibited when in an error state since that could
- ** lead to database corruption. In the current implementaton it
- ** is impossible for sqlite3PcacheFetch() to be called with createFlag==1
+ ** lead to database corruption. In the current implementation it
+ ** is impossible for sqlite3PcacheFetch() to be called with createFlag==3
** while in the error state, hence it is impossible for this routine to
** be called in the error state. Nevertheless, we include a NEVER()
** test for the error state as a safeguard against future changes.
@@ -44986,22 +45604,23 @@ act_like_temp_file:
testcase( rc!=SQLITE_OK );
}
- /* If an error occurred in either of the blocks above, free the
- ** Pager structure and close the file.
+ /* Initialize the PCache object. */
+ if( rc==SQLITE_OK ){
+ assert( nExtra<1000 );
+ nExtra = ROUND8(nExtra);
+ rc = sqlite3PcacheOpen(szPageDflt, nExtra, !memDb,
+ !memDb?pagerStress:0, (void *)pPager, pPager->pPCache);
+ }
+
+ /* If an error occurred above, free the Pager structure and close the file.
*/
if( rc!=SQLITE_OK ){
- assert( !pPager->pTmpSpace );
sqlite3OsClose(pPager->fd);
+ sqlite3PageFree(pPager->pTmpSpace);
sqlite3_free(pPager);
return rc;
}
- /* Initialize the PCache object. */
- assert( nExtra<1000 );
- nExtra = ROUND8(nExtra);
- sqlite3PcacheOpen(szPageDflt, nExtra, !memDb,
- !memDb?pagerStress:0, (void *)pPager, pPager->pPCache);
-
PAGERTRACE(("OPEN %d %s\n", FILEHANDLEID(pPager->fd), pPager->zFilename));
IOTRACE(("OPEN %p %s\n", pPager, pPager->zFilename))
@@ -45188,7 +45807,7 @@ static int hasHotJournal(Pager *pPager, int *pExists){
*pExists = (first!=0);
}else if( rc==SQLITE_CANTOPEN ){
/* If we cannot open the rollback journal file in order to see if
- ** its has a zero header, that might be due to an I/O error, or
+ ** it has a zero header, that might be due to an I/O error, or
** it might be due to the race condition described above and in
** ticket #3883. Either way, assume that the journal is hot.
** This might be a false positive. But if it is, then the
@@ -45550,7 +46169,6 @@ SQLITE_PRIVATE int sqlite3PagerAcquire(
if( pPager->errCode!=SQLITE_OK ){
rc = pPager->errCode;
}else{
-
if( bMmapOk && pagerUseWal(pPager) ){
rc = sqlite3WalFindFrame(pPager->pWal, pgno, &iFrame);
if( rc!=SQLITE_OK ) goto pager_acquire_err;
@@ -45565,7 +46183,7 @@ SQLITE_PRIVATE int sqlite3PagerAcquire(
if( rc==SQLITE_OK && pData ){
if( pPager->eState>PAGER_READER ){
- (void)sqlite3PcacheFetch(pPager->pPCache, pgno, 0, &pPg);
+ pPg = sqlite3PagerLookup(pPager, pgno);
}
if( pPg==0 ){
rc = pagerAcquireMapPage(pPager, pgno, pData, &pPg);
@@ -45583,7 +46201,16 @@ SQLITE_PRIVATE int sqlite3PagerAcquire(
}
}
- rc = sqlite3PcacheFetch(pPager->pPCache, pgno, 1, ppPage);
+ {
+ sqlite3_pcache_page *pBase;
+ pBase = sqlite3PcacheFetch(pPager->pPCache, pgno, 3);
+ if( pBase==0 ){
+ rc = sqlite3PcacheFetchStress(pPager->pPCache, pgno, &pBase);
+ if( rc!=SQLITE_OK ) goto pager_acquire_err;
+ }
+ pPg = *ppPage = sqlite3PcacheFetchFinish(pPager->pPCache, pgno, pBase);
+ if( pPg==0 ) rc = SQLITE_NOMEM;
+ }
}
if( rc!=SQLITE_OK ){
@@ -45680,13 +46307,12 @@ pager_acquire_err:
** has ever happened.
*/
SQLITE_PRIVATE DbPage *sqlite3PagerLookup(Pager *pPager, Pgno pgno){
- PgHdr *pPg = 0;
+ sqlite3_pcache_page *pPage;
assert( pPager!=0 );
assert( pgno!=0 );
assert( pPager->pPCache!=0 );
- assert( pPager->eState>=PAGER_READER && pPager->eState!=PAGER_ERROR );
- sqlite3PcacheFetch(pPager->pPCache, pgno, 0, &pPg);
- return pPg;
+ pPage = sqlite3PcacheFetch(pPager->pPCache, pgno, 0);
+ return sqlite3PcacheFetchFinish(pPager->pPCache, pgno, pPage);
}
/*
@@ -46023,109 +46649,120 @@ static int pager_write(PgHdr *pPg){
}
/*
-** Mark a data page as writeable. This routine must be called before
-** making changes to a page. The caller must check the return value
-** of this function and be careful not to change any page data unless
-** this routine returns SQLITE_OK.
+** This is a variant of sqlite3PagerWrite() that runs when the sector size
+** is larger than the page size. SQLite makes the (reasonable) assumption that
+** all bytes of a sector are written together by hardware. Hence, all bytes of
+** a sector need to be journalled in case of a power loss in the middle of
+** a write.
**
-** The difference between this function and pager_write() is that this
-** function also deals with the special case where 2 or more pages
-** fit on a single disk sector. In this case all co-resident pages
-** must have been written to the journal file before returning.
-**
-** If an error occurs, SQLITE_NOMEM or an IO error code is returned
-** as appropriate. Otherwise, SQLITE_OK.
+** Usually, the sector size is less than or equal to the page size, in which
+** case pages can be individually written. This routine only runs in the exceptional
+** case where the page size is smaller than the sector size.
*/
-SQLITE_PRIVATE int sqlite3PagerWrite(DbPage *pDbPage){
- int rc = SQLITE_OK;
-
- PgHdr *pPg = pDbPage;
- Pager *pPager = pPg->pPager;
+static SQLITE_NOINLINE int pagerWriteLargeSector(PgHdr *pPg){
+ int rc = SQLITE_OK; /* Return code */
+ Pgno nPageCount; /* Total number of pages in database file */
+ Pgno pg1; /* First page of the sector pPg is located on. */
+ int nPage = 0; /* Number of pages starting at pg1 to journal */
+ int ii; /* Loop counter */
+ int needSync = 0; /* True if any page has PGHDR_NEED_SYNC */
+ Pager *pPager = pPg->pPager; /* The pager that owns pPg */
+ Pgno nPagePerSector = (pPager->sectorSize/pPager->pageSize);
- assert( (pPg->flags & PGHDR_MMAP)==0 );
- assert( pPager->eState>=PAGER_WRITER_LOCKED );
- assert( pPager->eState!=PAGER_ERROR );
- assert( assert_pager_state(pPager) );
+ /* Set the doNotSpill NOSYNC bit to 1. This is because we cannot allow
+ ** a journal header to be written between the pages journaled by
+ ** this function.
+ */
+ assert( !MEMDB );
+ assert( (pPager->doNotSpill & SPILLFLAG_NOSYNC)==0 );
+ pPager->doNotSpill |= SPILLFLAG_NOSYNC;
- if( pPager->sectorSize > (u32)pPager->pageSize ){
- Pgno nPageCount; /* Total number of pages in database file */
- Pgno pg1; /* First page of the sector pPg is located on. */
- int nPage = 0; /* Number of pages starting at pg1 to journal */
- int ii; /* Loop counter */
- int needSync = 0; /* True if any page has PGHDR_NEED_SYNC */
- Pgno nPagePerSector = (pPager->sectorSize/pPager->pageSize);
-
- /* Set the doNotSpill NOSYNC bit to 1. This is because we cannot allow
- ** a journal header to be written between the pages journaled by
- ** this function.
- */
- assert( !MEMDB );
- assert( (pPager->doNotSpill & SPILLFLAG_NOSYNC)==0 );
- pPager->doNotSpill |= SPILLFLAG_NOSYNC;
+ /* This trick assumes that both the page-size and sector-size are
+ ** an integer power of 2. It sets variable pg1 to the identifier
+ ** of the first page of the sector pPg is located on.
+ */
+ pg1 = ((pPg->pgno-1) & ~(nPagePerSector-1)) + 1;
- /* This trick assumes that both the page-size and sector-size are
- ** an integer power of 2. It sets variable pg1 to the identifier
- ** of the first page of the sector pPg is located on.
- */
- pg1 = ((pPg->pgno-1) & ~(nPagePerSector-1)) + 1;
+ nPageCount = pPager->dbSize;
+ if( pPg->pgno>nPageCount ){
+ nPage = (pPg->pgno - pg1)+1;
+ }else if( (pg1+nPagePerSector-1)>nPageCount ){
+ nPage = nPageCount+1-pg1;
+ }else{
+ nPage = nPagePerSector;
+ }
+ assert(nPage>0);
+ assert(pg1<=pPg->pgno);
+ assert((pg1+nPage)>pPg->pgno);
- nPageCount = pPager->dbSize;
- if( pPg->pgno>nPageCount ){
- nPage = (pPg->pgno - pg1)+1;
- }else if( (pg1+nPagePerSector-1)>nPageCount ){
- nPage = nPageCount+1-pg1;
- }else{
- nPage = nPagePerSector;
- }
- assert(nPage>0);
- assert(pg1<=pPg->pgno);
- assert((pg1+nPage)>pPg->pgno);
-
- for(ii=0; ii<nPage && rc==SQLITE_OK; ii++){
- Pgno pg = pg1+ii;
- PgHdr *pPage;
- if( pg==pPg->pgno || !sqlite3BitvecTest(pPager->pInJournal, pg) ){
- if( pg!=PAGER_MJ_PGNO(pPager) ){
- rc = sqlite3PagerGet(pPager, pg, &pPage);
- if( rc==SQLITE_OK ){
- rc = pager_write(pPage);
- if( pPage->flags&PGHDR_NEED_SYNC ){
- needSync = 1;
- }
- sqlite3PagerUnrefNotNull(pPage);
+ for(ii=0; ii<nPage && rc==SQLITE_OK; ii++){
+ Pgno pg = pg1+ii;
+ PgHdr *pPage;
+ if( pg==pPg->pgno || !sqlite3BitvecTest(pPager->pInJournal, pg) ){
+ if( pg!=PAGER_MJ_PGNO(pPager) ){
+ rc = sqlite3PagerGet(pPager, pg, &pPage);
+ if( rc==SQLITE_OK ){
+ rc = pager_write(pPage);
+ if( pPage->flags&PGHDR_NEED_SYNC ){
+ needSync = 1;
}
+ sqlite3PagerUnrefNotNull(pPage);
}
- }else if( (pPage = pager_lookup(pPager, pg))!=0 ){
- if( pPage->flags&PGHDR_NEED_SYNC ){
- needSync = 1;
- }
- sqlite3PagerUnrefNotNull(pPage);
}
+ }else if( (pPage = sqlite3PagerLookup(pPager, pg))!=0 ){
+ if( pPage->flags&PGHDR_NEED_SYNC ){
+ needSync = 1;
+ }
+ sqlite3PagerUnrefNotNull(pPage);
}
+ }
- /* If the PGHDR_NEED_SYNC flag is set for any of the nPage pages
- ** starting at pg1, then it needs to be set for all of them. Because
- ** writing to any of these nPage pages may damage the others, the
- ** journal file must contain sync()ed copies of all of them
- ** before any of them can be written out to the database file.
- */
- if( rc==SQLITE_OK && needSync ){
- assert( !MEMDB );
- for(ii=0; ii<nPage; ii++){
- PgHdr *pPage = pager_lookup(pPager, pg1+ii);
- if( pPage ){
- pPage->flags |= PGHDR_NEED_SYNC;
- sqlite3PagerUnrefNotNull(pPage);
- }
+ /* If the PGHDR_NEED_SYNC flag is set for any of the nPage pages
+ ** starting at pg1, then it needs to be set for all of them. Because
+ ** writing to any of these nPage pages may damage the others, the
+ ** journal file must contain sync()ed copies of all of them
+ ** before any of them can be written out to the database file.
+ */
+ if( rc==SQLITE_OK && needSync ){
+ assert( !MEMDB );
+ for(ii=0; ii<nPage; ii++){
+ PgHdr *pPage = sqlite3PagerLookup(pPager, pg1+ii);
+ if( pPage ){
+ pPage->flags |= PGHDR_NEED_SYNC;
+ sqlite3PagerUnrefNotNull(pPage);
}
}
+ }
+
+ assert( (pPager->doNotSpill & SPILLFLAG_NOSYNC)!=0 );
+ pPager->doNotSpill &= ~SPILLFLAG_NOSYNC;
+ return rc;
+}
- assert( (pPager->doNotSpill & SPILLFLAG_NOSYNC)!=0 );
- pPager->doNotSpill &= ~SPILLFLAG_NOSYNC;
+/*
+** Mark a data page as writeable. This routine must be called before
+** making changes to a page. The caller must check the return value
+** of this function and be careful not to change any page data unless
+** this routine returns SQLITE_OK.
+**
+** The difference between this function and pager_write() is that this
+** function also deals with the special case where 2 or more pages
+** fit on a single disk sector. In this case all co-resident pages
+** must have been written to the journal file before returning.
+**
+** If an error occurs, SQLITE_NOMEM or an IO error code is returned
+** as appropriate. Otherwise, SQLITE_OK.
+*/
+SQLITE_PRIVATE int sqlite3PagerWrite(PgHdr *pPg){
+ assert( (pPg->flags & PGHDR_MMAP)==0 );
+ assert( pPg->pPager->eState>=PAGER_WRITER_LOCKED );
+ assert( pPg->pPager->eState!=PAGER_ERROR );
+ assert( assert_pager_state(pPg->pPager) );
+ if( pPg->pPager->sectorSize > (u32)pPg->pPager->pageSize ){
+ return pagerWriteLargeSector(pPg);
}else{
- rc = pager_write(pDbPage);
+ return pager_write(pPg);
}
- return rc;
}
/*
@@ -47021,7 +47658,7 @@ SQLITE_PRIVATE int sqlite3PagerMovepage(Pager *pPager, DbPage *pPg, Pgno pgno, i
** for the page moved there.
*/
pPg->flags &= ~PGHDR_NEED_SYNC;
- pPgOld = pager_lookup(pPager, pgno);
+ pPgOld = sqlite3PagerLookup(pPager, pgno);
assert( !pPgOld || pPgOld->nRef==1 );
if( pPgOld ){
pPg->flags |= (pPgOld->flags&PGHDR_NEED_SYNC);
@@ -47474,7 +48111,7 @@ SQLITE_PRIVATE int sqlite3PagerCloseWal(Pager *pPager){
** is empty, return 0.
*/
SQLITE_PRIVATE int sqlite3PagerWalFramesize(Pager *pPager){
- assert( pPager->eState==PAGER_READER );
+ assert( pPager->eState>=PAGER_READER );
return sqlite3WalFramesize(pPager->pWal);
}
#endif
@@ -48058,7 +48695,7 @@ static volatile WalIndexHdr *walIndexHdr(Wal *pWal){
** The argument to this macro must be of type u32. On a little-endian
** architecture, it returns the u32 value that results from interpreting
** the 4 bytes as a big-endian value. On a big-endian architecture, it
-** returns the value that would be produced by intepreting the 4 bytes
+** returns the value that would be produced by interpreting the 4 bytes
** of the input value as a little-endian integer.
*/
#define BYTESWAP32(x) ( \
@@ -48472,7 +49109,7 @@ static int walIndexAppend(Wal *pWal, u32 iFrame, u32 iPage){
assert( idx <= HASHTABLE_NSLOT/2 + 1 );
/* If this is the first entry to be added to this hash-table, zero the
- ** entire hash table and aPgno[] array before proceding.
+ ** entire hash table and aPgno[] array before proceeding.
*/
if( idx==1 ){
int nByte = (int)((u8 *)&aHash[HASHTABLE_NSLOT] - (u8 *)&aPgno[1]);
@@ -49130,7 +49767,7 @@ static int walPagesize(Wal *pWal){
** database file.
**
** This routine uses and updates the nBackfill field of the wal-index header.
-** This is the only routine tha will increase the value of nBackfill.
+** This is the only routine that will increase the value of nBackfill.
** (A WAL reset or recovery will revert nBackfill to zero, but not increase
** its value.)
**
@@ -49434,7 +50071,7 @@ static int walIndexTryHdr(Wal *pWal, int *pChanged){
** wal-index from the WAL before returning.
**
** Set *pChanged to 1 if the wal-index header value in pWal->hdr is
-** changed by this opertion. If pWal->hdr is unchanged, set *pChanged
+** changed by this operation. If pWal->hdr is unchanged, set *pChanged
** to 0.
**
** If the wal-index header is successfully read, return SQLITE_OK.
@@ -49638,7 +50275,7 @@ static int walTryBeginRead(Wal *pWal, int *pChanged, int useWal, int cnt){
** may have been appended to the log before READ_LOCK(0) was obtained.
** When holding READ_LOCK(0), the reader ignores the entire log file,
** which implies that the database file contains a trustworthy
- ** snapshoT. Since holding READ_LOCK(0) prevents a checkpoint from
+ ** snapshot. Since holding READ_LOCK(0) prevents a checkpoint from
** happening, this is usually correct.
**
** However, if frames have been appended to the log (or if the log
@@ -50009,7 +50646,6 @@ SQLITE_PRIVATE int sqlite3WalUndo(Wal *pWal, int (*xUndo)(void *, Pgno), void *p
}
if( iMax!=pWal->hdr.mxFrame ) walCleanupHash(pWal);
}
- assert( rc==SQLITE_OK );
return rc;
}
@@ -50306,7 +50942,7 @@ SQLITE_PRIVATE int sqlite3WalFrames(
**
** Padding and syncing only occur if this set of frames complete a
** transaction and if PRAGMA synchronous=FULL. If synchronous==NORMAL
- ** or synchonous==OFF, then no padding or syncing are needed.
+ ** or synchronous==OFF, then no padding or syncing are needed.
**
** If SQLITE_IOCAP_POWERSAFE_OVERWRITE is defined, then padding is not
** needed and only the sync is done. If padding is needed, then the
@@ -50609,7 +51245,7 @@ SQLITE_PRIVATE int sqlite3WalFramesize(Wal *pWal){
** May you share freely, never taking more than you give.
**
*************************************************************************
-** This file implements a external (disk-based) database using BTrees.
+** This file implements an external (disk-based) database using BTrees.
** For a detailed discussion of BTrees, refer to
**
** Donald E. Knuth, THE ART OF COMPUTER PROGRAMMING, Volume 3:
@@ -50735,7 +51371,7 @@ SQLITE_PRIVATE int sqlite3WalFramesize(Wal *pWal){
**
** The flags define the format of this btree page. The leaf flag means that
** this page has no children. The zerodata flag means that this page carries
-** only keys and no data. The intkey flag means that the key is a integer
+** only keys and no data. The intkey flag means that the key is an integer
** which is stored in the key size entry of the cell header rather than in
** the payload area.
**
@@ -50872,9 +51508,10 @@ typedef struct BtLock BtLock;
struct MemPage {
u8 isInit; /* True if previously initialized. MUST BE FIRST! */
u8 nOverflow; /* Number of overflow cell bodies in aCell[] */
- u8 intKey; /* True if intkey flag is set */
- u8 leaf; /* True if leaf flag is set */
- u8 hasData; /* True if this page stores data */
+ u8 intKey; /* True if table b-trees. False for index b-trees */
+ u8 intKeyLeaf; /* True if the leaf of an intKey table */
+ u8 noPayload; /* True if internal intKey page (thus w/o data) */
+ u8 leaf; /* True if a leaf page */
u8 hdrOffset; /* 100 for page 1. 0 otherwise */
u8 childPtrSize; /* 0 if leaf==1. 4 if leaf==0 */
u8 max1bytePayload; /* min(maxLocal,127) */
@@ -51034,7 +51671,7 @@ struct BtShared {
BtLock *pLock; /* List of locks held on this shared-btree struct */
Btree *pWriter; /* Btree with currently open write transaction */
#endif
- u8 *pTmpSpace; /* BtShared.pageSize bytes of space for tmp use */
+ u8 *pTmpSpace; /* Temp space sufficient to hold a single cell */
};
/*
@@ -51055,12 +51692,10 @@ struct BtShared {
*/
typedef struct CellInfo CellInfo;
struct CellInfo {
- i64 nKey; /* The key for INTKEY tables, or number of bytes in key */
- u8 *pCell; /* Pointer to the start of cell content */
- u32 nData; /* Number of bytes of data */
- u32 nPayload; /* Total amount of payload */
- u16 nHeader; /* Size of the cell content header in bytes */
- u16 nLocal; /* Amount of payload held locally */
+ i64 nKey; /* The key for INTKEY tables, or nPayload otherwise */
+ u8 *pPayload; /* Pointer to the start of payload */
+ u32 nPayload; /* Bytes of payload */
+ u16 nLocal; /* Amount of payload held locally, not on overflow */
u16 iOverflow; /* Offset to overflow page number. Zero if no overflow */
u16 nSize; /* Size of the cell content on the main b-tree page */
};
@@ -51089,6 +51724,11 @@ struct CellInfo {
**
** Fields in this structure are accessed under the BtShared.mutex
** found at self->pBt->mutex.
+**
+** skipNext meaning:
+** eState==SKIPNEXT && skipNext>0: Next sqlite3BtreeNext() is no-op.
+** eState==SKIPNEXT && skipNext<0: Next sqlite3BtreePrevious() is no-op.
+** eState==FAULT: Cursor fault with skipNext as error code.
*/
struct BtCursor {
Btree *pBtree; /* The Btree to which this cursor belongs */
@@ -51101,7 +51741,8 @@ struct BtCursor {
void *pKey; /* Saved key that was cursor last known position */
Pgno pgnoRoot; /* The root page of this tree */
int nOvflAlloc; /* Allocated size of aOverflow[] array */
- int skipNext; /* Prev() is noop if negative. Next() is noop if positive */
+ int skipNext; /* Prev() is noop if negative. Next() is noop if positive.
+ ** Error code if eState==CURSOR_FAULT */
u8 curFlags; /* zero or more BTCF_* flags defined below */
u8 eState; /* One of the CURSOR_XXX constants (see below) */
u8 hints; /* As configured by CursorSetHints() */
@@ -51143,11 +51784,11 @@ struct BtCursor {
** seek the cursor to the saved position.
**
** CURSOR_FAULT:
-** A unrecoverable error (an I/O error or a malloc failure) has occurred
+** An unrecoverable error (an I/O error or a malloc failure) has occurred
** on a different connection that shares the BtShared cache with this
** cursor. The error has left the cache in an inconsistent state.
** Do nothing else with this cursor. Any attempt to use the cursor
-** should return the error code stored in BtCursor.skip
+** should return the error code stored in BtCursor.skipNext
*/
#define CURSOR_INVALID 0
#define CURSOR_VALID 1
@@ -51257,6 +51898,8 @@ struct IntegrityCk {
int mxErr; /* Stop accumulating errors when this reaches zero */
int nErr; /* Number of messages written to zErrMsg so far */
int mallocFailed; /* A memory allocation error has occurred */
+ const char *zPfx; /* Error message prefix */
+ int v1, v2; /* Values for up to two %d fields in zPfx */
StrAccum errMsg; /* Accumulate the error message text here */
};
@@ -51292,7 +51935,7 @@ static void lockBtreeMutex(Btree *p){
** Release the BtShared mutex associated with B-Tree handle p and
** clear the p->locked boolean.
*/
-static void unlockBtreeMutex(Btree *p){
+static void SQLITE_NOINLINE unlockBtreeMutex(Btree *p){
BtShared *pBt = p->pBt;
assert( p->locked==1 );
assert( sqlite3_mutex_held(pBt->mutex) );
@@ -51303,6 +51946,9 @@ static void unlockBtreeMutex(Btree *p){
p->locked = 0;
}
+/* Forward reference */
+static void SQLITE_NOINLINE btreeLockCarefully(Btree *p);
+
/*
** Enter a mutex on the given BTree object.
**
@@ -51320,8 +51966,6 @@ static void unlockBtreeMutex(Btree *p){
** subsequent Btrees that desire a lock.
*/
SQLITE_PRIVATE void sqlite3BtreeEnter(Btree *p){
- Btree *pLater;
-
/* Some basic sanity checking on the Btree. The list of Btrees
** connected by pNext and pPrev should be in sorted order by
** Btree.pBt value. All elements of the list should belong to
@@ -51346,9 +51990,20 @@ SQLITE_PRIVATE void sqlite3BtreeEnter(Btree *p){
if( !p->sharable ) return;
p->wantToLock++;
if( p->locked ) return;
+ btreeLockCarefully(p);
+}
+
+/* This is a helper function for sqlite3BtreeLock(). By moving
+** complex, but seldom used logic, out of sqlite3BtreeLock() and
+** into this routine, we avoid unnecessary stack pointer changes
+** and thus help the sqlite3BtreeLock() routine to run much faster
+** in the common case.
+*/
+static void SQLITE_NOINLINE btreeLockCarefully(Btree *p){
+ Btree *pLater;
/* In most cases, we should be able to acquire the lock we
- ** want without having to go throught the ascending lock
+ ** want without having to go through the ascending lock
** procedure that follows. Just be sure not to block.
*/
if( sqlite3_mutex_try(p->pBt->mutex)==SQLITE_OK ){
@@ -51378,6 +52033,7 @@ SQLITE_PRIVATE void sqlite3BtreeEnter(Btree *p){
}
}
+
/*
** Exit the recursive mutex on a Btree.
*/
@@ -51553,7 +52209,7 @@ SQLITE_PRIVATE void sqlite3BtreeEnterAll(sqlite3 *db){
** May you share freely, never taking more than you give.
**
*************************************************************************
-** This file implements a external (disk-based) database using BTrees.
+** This file implements an external (disk-based) database using BTrees.
** See the header comment on "btreeInt.h" for additional information.
** Including a description of file format and an overview of operation.
*/
@@ -52030,7 +52686,9 @@ static void invalidateIncrblobCursors(
BtShared *pBt = pBtree->pBt;
assert( sqlite3BtreeHoldsMutex(pBtree) );
for(p=pBt->pCursor; p; p=p->pNext){
- if( (p->curFlags & BTCF_Incrblob)!=0 && (isClearTable || p->info.nKey==iRow) ){
+ if( (p->curFlags & BTCF_Incrblob)!=0
+ && (isClearTable || p->info.nKey==iRow)
+ ){
p->eState = CURSOR_INVALID;
}
}
@@ -52149,7 +52807,7 @@ static int saveCursorPosition(BtCursor *pCur){
** data.
*/
if( 0==pCur->apPage[0]->intKey ){
- void *pKey = sqlite3Malloc( (int)pCur->nKey );
+ void *pKey = sqlite3Malloc( pCur->nKey );
if( pKey ){
rc = sqlite3BtreeKey(pCur, 0, (int)pCur->nKey, pKey);
if( rc==SQLITE_OK ){
@@ -52172,16 +52830,42 @@ static int saveCursorPosition(BtCursor *pCur){
return rc;
}
+/* Forward reference */
+static int SQLITE_NOINLINE saveCursorsOnList(BtCursor*,Pgno,BtCursor*);
+
/*
** Save the positions of all cursors (except pExcept) that are open on
-** the table with root-page iRoot. Usually, this is called just before cursor
-** pExcept is used to modify the table (BtreeDelete() or BtreeInsert()).
+** the table with root-page iRoot. "Saving the cursor position" means that
+** the location in the btree is remembered in such a way that it can be
+** moved back to the same spot after the btree has been modified. This
+** routine is called just before cursor pExcept is used to modify the
+** table, for example in BtreeDelete() or BtreeInsert().
+**
+** Implementation note: This routine merely checks to see if any cursors
+** need to be saved. It calls out to saveCursorsOnList() in the (unusual)
+** event that cursors are in need to being saved.
*/
static int saveAllCursors(BtShared *pBt, Pgno iRoot, BtCursor *pExcept){
BtCursor *p;
assert( sqlite3_mutex_held(pBt->mutex) );
assert( pExcept==0 || pExcept->pBt==pBt );
for(p=pBt->pCursor; p; p=p->pNext){
+ if( p!=pExcept && (0==iRoot || p->pgnoRoot==iRoot) ) break;
+ }
+ return p ? saveCursorsOnList(p, iRoot, pExcept) : SQLITE_OK;
+}
+
+/* This helper routine to saveAllCursors does the actual work of saving
+** the cursors if and when a cursor is found that actually requires saving.
+** The common case is that no cursors need to be saved, so this routine is
+** broken out from its caller to avoid unnecessary stack pointer movement.
+*/
+static int SQLITE_NOINLINE saveCursorsOnList(
+ BtCursor *p, /* The first cursor that needs saving */
+ Pgno iRoot, /* Only save cursor with this iRoot. Save all if zero */
+ BtCursor *pExcept /* Do not save this cursor */
+){
+ do{
if( p!=pExcept && (0==iRoot || p->pgnoRoot==iRoot) ){
if( p->eState==CURSOR_VALID ){
int rc = saveCursorPosition(p);
@@ -52193,7 +52877,8 @@ static int saveAllCursors(BtShared *pBt, Pgno iRoot, BtCursor *pExcept){
btreeReleaseAllCursorPages(p);
}
}
- }
+ p = p->pNext;
+ }while( p );
return SQLITE_OK;
}
@@ -52278,37 +52963,48 @@ static int btreeRestoreCursorPosition(BtCursor *pCur){
SQLITE_OK)
/*
-** Determine whether or not a cursor has moved from the position it
-** was last placed at. Cursors can move when the row they are pointing
-** at is deleted out from under them.
+** Determine whether or not a cursor has moved from the position where
+** it was last placed, or has been invalidated for any other reason.
+** Cursors can move when the row they are pointing at is deleted out
+** from under them, for example. Cursor might also move if a btree
+** is rebalanced.
+**
+** Calling this routine with a NULL cursor pointer returns false.
+**
+** Use the separate sqlite3BtreeCursorRestore() routine to restore a cursor
+** back to where it ought to be if this routine returns true.
+*/
+SQLITE_PRIVATE int sqlite3BtreeCursorHasMoved(BtCursor *pCur){
+ return pCur->eState!=CURSOR_VALID;
+}
+
+/*
+** This routine restores a cursor back to its original position after it
+** has been moved by some outside activity (such as a btree rebalance or
+** a row having been deleted out from under the cursor).
**
-** This routine returns an error code if something goes wrong. The
-** integer *pHasMoved is set as follows:
+** On success, the *pDifferentRow parameter is false if the cursor is left
+** pointing at exactly the same row. *pDifferntRow is the row the cursor
+** was pointing to has been deleted, forcing the cursor to point to some
+** nearby row.
**
-** 0: The cursor is unchanged
-** 1: The cursor is still pointing at the same row, but the pointers
-** returned by sqlite3BtreeKeyFetch() or sqlite3BtreeDataFetch()
-** might now be invalid because of a balance() or other change to the
-** b-tree.
-** 2: The cursor is no longer pointing to the row. The row might have
-** been deleted out from under the cursor.
+** This routine should only be called for a cursor that just returned
+** TRUE from sqlite3BtreeCursorHasMoved().
*/
-SQLITE_PRIVATE int sqlite3BtreeCursorHasMoved(BtCursor *pCur, int *pHasMoved){
+SQLITE_PRIVATE int sqlite3BtreeCursorRestore(BtCursor *pCur, int *pDifferentRow){
int rc;
- if( pCur->eState==CURSOR_VALID ){
- *pHasMoved = 0;
- return SQLITE_OK;
- }
+ assert( pCur!=0 );
+ assert( pCur->eState!=CURSOR_VALID );
rc = restoreCursorPosition(pCur);
if( rc ){
- *pHasMoved = 2;
+ *pDifferentRow = 1;
return rc;
}
if( pCur->eState!=CURSOR_VALID || NEVER(pCur->skipNext!=0) ){
- *pHasMoved = 2;
+ *pDifferentRow = 1;
}else{
- *pHasMoved = 1;
+ *pDifferentRow = 0;
}
return SQLITE_OK;
}
@@ -52473,47 +53169,44 @@ static u8 *findOverflowCell(MemPage *pPage, int iCell){
** are two versions of this function. btreeParseCell() takes a
** cell index as the second argument and btreeParseCellPtr()
** takes a pointer to the body of the cell as its second argument.
-**
-** Within this file, the parseCell() macro can be called instead of
-** btreeParseCellPtr(). Using some compilers, this will be faster.
*/
static void btreeParseCellPtr(
MemPage *pPage, /* Page containing the cell */
u8 *pCell, /* Pointer to the cell text. */
CellInfo *pInfo /* Fill in this structure */
){
- u16 n; /* Number bytes in cell content header */
+ u8 *pIter; /* For scanning through pCell */
u32 nPayload; /* Number of bytes of cell payload */
assert( sqlite3_mutex_held(pPage->pBt->mutex) );
-
- pInfo->pCell = pCell;
assert( pPage->leaf==0 || pPage->leaf==1 );
- n = pPage->childPtrSize;
- assert( n==4-4*pPage->leaf );
- if( pPage->intKey ){
- if( pPage->hasData ){
- assert( n==0 );
- n = getVarint32(pCell, nPayload);
- }else{
- nPayload = 0;
- }
- n += getVarint(&pCell[n], (u64*)&pInfo->nKey);
- pInfo->nData = nPayload;
+ if( pPage->intKeyLeaf ){
+ assert( pPage->childPtrSize==0 );
+ pIter = pCell + getVarint32(pCell, nPayload);
+ pIter += getVarint(pIter, (u64*)&pInfo->nKey);
+ }else if( pPage->noPayload ){
+ assert( pPage->childPtrSize==4 );
+ pInfo->nSize = 4 + getVarint(&pCell[4], (u64*)&pInfo->nKey);
+ pInfo->nPayload = 0;
+ pInfo->nLocal = 0;
+ pInfo->iOverflow = 0;
+ pInfo->pPayload = 0;
+ return;
}else{
- pInfo->nData = 0;
- n += getVarint32(&pCell[n], nPayload);
+ pIter = pCell + pPage->childPtrSize;
+ pIter += getVarint32(pIter, nPayload);
pInfo->nKey = nPayload;
}
pInfo->nPayload = nPayload;
- pInfo->nHeader = n;
+ pInfo->pPayload = pIter;
testcase( nPayload==pPage->maxLocal );
testcase( nPayload==pPage->maxLocal+1 );
- if( likely(nPayload<=pPage->maxLocal) ){
+ if( nPayload<=pPage->maxLocal ){
/* This is the (easy) common case where the entire payload fits
** on the local page. No overflow is required.
*/
- if( (pInfo->nSize = (u16)(n+nPayload))<4 ) pInfo->nSize = 4;
+ pInfo->nSize = nPayload + (u16)(pIter - pCell);
+ if( pInfo->nSize<4 ) pInfo->nSize = 4;
pInfo->nLocal = (u16)nPayload;
pInfo->iOverflow = 0;
}else{
@@ -52540,18 +53233,16 @@ static void btreeParseCellPtr(
}else{
pInfo->nLocal = (u16)minLocal;
}
- pInfo->iOverflow = (u16)(pInfo->nLocal + n);
+ pInfo->iOverflow = (u16)(&pInfo->pPayload[pInfo->nLocal] - pCell);
pInfo->nSize = pInfo->iOverflow + 4;
}
}
-#define parseCell(pPage, iCell, pInfo) \
- btreeParseCellPtr((pPage), findCell((pPage), (iCell)), (pInfo))
static void btreeParseCell(
MemPage *pPage, /* Page containing the cell */
int iCell, /* The cell index. First cell is 0 */
CellInfo *pInfo /* Fill in this structure */
){
- parseCell(pPage, iCell, pInfo);
+ btreeParseCellPtr(pPage, findCell(pPage, iCell), pInfo);
}
/*
@@ -52561,8 +53252,9 @@ static void btreeParseCell(
** the space used by the cell pointer.
*/
static u16 cellSizePtr(MemPage *pPage, u8 *pCell){
- u8 *pIter = &pCell[pPage->childPtrSize];
- u32 nSize;
+ u8 *pIter = pCell + pPage->childPtrSize; /* For looping over bytes of pCell */
+ u8 *pEnd; /* End mark for a varint */
+ u32 nSize; /* Size value to return */
#ifdef SQLITE_DEBUG
/* The value returned by this function should always be the same as
@@ -52573,26 +53265,34 @@ static u16 cellSizePtr(MemPage *pPage, u8 *pCell){
btreeParseCellPtr(pPage, pCell, &debuginfo);
#endif
+ if( pPage->noPayload ){
+ pEnd = &pIter[9];
+ while( (*pIter++)&0x80 && pIter<pEnd );
+ assert( pPage->childPtrSize==4 );
+ return (u16)(pIter - pCell);
+ }
+ nSize = *pIter;
+ if( nSize>=0x80 ){
+ pEnd = &pIter[9];
+ nSize &= 0x7f;
+ do{
+ nSize = (nSize<<7) | (*++pIter & 0x7f);
+ }while( *(pIter)>=0x80 && pIter<pEnd );
+ }
+ pIter++;
if( pPage->intKey ){
- u8 *pEnd;
- if( pPage->hasData ){
- pIter += getVarint32(pIter, nSize);
- }else{
- nSize = 0;
- }
-
/* pIter now points at the 64-bit integer key value, a variable length
** integer. The following block moves pIter to point at the first byte
** past the end of the key value. */
pEnd = &pIter[9];
while( (*pIter++)&0x80 && pIter<pEnd );
- }else{
- pIter += getVarint32(pIter, nSize);
}
-
testcase( nSize==pPage->maxLocal );
testcase( nSize==pPage->maxLocal+1 );
- if( nSize>pPage->maxLocal ){
+ if( nSize<=pPage->maxLocal ){
+ nSize += (u32)(pIter - pCell);
+ if( nSize<4 ) nSize = 4;
+ }else{
int minLocal = pPage->minLocal;
nSize = minLocal + (nSize - minLocal) % (pPage->pBt->usableSize - 4);
testcase( nSize==pPage->maxLocal );
@@ -52600,16 +53300,9 @@ static u16 cellSizePtr(MemPage *pPage, u8 *pCell){
if( nSize>pPage->maxLocal ){
nSize = minLocal;
}
- nSize += 4;
- }
- nSize += (u32)(pIter - pCell);
-
- /* The minimum size of any cell is 4 bytes. */
- if( nSize<4 ){
- nSize = 4;
+ nSize += 4 + (u16)(pIter - pCell);
}
-
- assert( nSize==debuginfo.nSize );
+ assert( nSize==debuginfo.nSize || CORRUPT_DB );
return (u16)nSize;
}
@@ -52632,7 +53325,6 @@ static void ptrmapPutOvflPtr(MemPage *pPage, u8 *pCell, int *pRC){
if( *pRC ) return;
assert( pCell!=0 );
btreeParseCellPtr(pPage, pCell, &info);
- assert( (info.nData+(pPage->intKey?0:info.nKey))==info.nPayload );
if( info.iOverflow ){
Pgno ovfl = get4byte(&pCell[info.iOverflow]);
ptrmapPut(pPage->pBt, ovfl, PTRMAP_OVERFLOW1, pPage->pgno, pRC);
@@ -52649,7 +53341,7 @@ static void ptrmapPutOvflPtr(MemPage *pPage, u8 *pCell, int *pRC){
*/
static int defragmentPage(MemPage *pPage){
int i; /* Loop counter */
- int pc; /* Address of a i-th cell */
+ int pc; /* Address of the i-th cell */
int hdr; /* Offset to the page header */
int size; /* Size of a cell */
int usableSize; /* Number of usable bytes on a page */
@@ -52740,7 +53432,6 @@ static int defragmentPage(MemPage *pPage){
static int allocateSpace(MemPage *pPage, int nByte, int *pIdx){
const int hdr = pPage->hdrOffset; /* Local cache of pPage->hdrOffset */
u8 * const data = pPage->aData; /* Local cache of pPage->aData */
- int nFrag; /* Number of fragmented bytes on pPage */
int top; /* First byte of cell content area */
int gap; /* First byte of gap between cell pointers and cell content */
int rc; /* Integer return code */
@@ -52755,25 +53446,26 @@ static int allocateSpace(MemPage *pPage, int nByte, int *pIdx){
usableSize = pPage->pBt->usableSize;
assert( nByte < usableSize-8 );
- nFrag = data[hdr+7];
assert( pPage->cellOffset == hdr + 12 - 4*pPage->leaf );
gap = pPage->cellOffset + 2*pPage->nCell;
- top = get2byteNotZero(&data[hdr+5]);
- if( gap>top ) return SQLITE_CORRUPT_BKPT;
+ assert( gap<=65536 );
+ top = get2byte(&data[hdr+5]);
+ if( gap>top ){
+ if( top==0 ){
+ top = 65536;
+ }else{
+ return SQLITE_CORRUPT_BKPT;
+ }
+ }
+
+ /* If there is enough space between gap and top for one more cell pointer
+ ** array entry offset, and if the freelist is not empty, then search the
+ ** freelist looking for a free slot big enough to satisfy the request.
+ */
testcase( gap+2==top );
testcase( gap+1==top );
testcase( gap==top );
-
- if( nFrag>=60 ){
- /* Always defragment highly fragmented pages */
- rc = defragmentPage(pPage);
- if( rc ) return rc;
- top = get2byteNotZero(&data[hdr+5]);
- }else if( gap+2<=top ){
- /* Search the freelist looking for a free slot big enough to satisfy
- ** the request. The allocation is made from the first free slot in
- ** the list that is large enough to accommodate it.
- */
+ if( gap+2<=top && (data[hdr+1] || data[hdr+2]) ){
int pc, addr;
for(addr=hdr+1; (pc = get2byte(&data[addr]))>0; addr=pc){
int size; /* Size of the free slot */
@@ -52786,10 +53478,11 @@ static int allocateSpace(MemPage *pPage, int nByte, int *pIdx){
testcase( x==4 );
testcase( x==3 );
if( x<4 ){
+ if( data[hdr+7]>=60 ) goto defragment_page;
/* Remove the slot from the free-list. Update the number of
** fragmented bytes within the page. */
memcpy(&data[addr], &data[pc], 2);
- data[hdr+7] = (u8)(nFrag + x);
+ data[hdr+7] += (u8)x;
}else if( size+pc > usableSize ){
return SQLITE_CORRUPT_BKPT;
}else{
@@ -52803,11 +53496,13 @@ static int allocateSpace(MemPage *pPage, int nByte, int *pIdx){
}
}
- /* Check to make sure there is enough space in the gap to satisfy
- ** the allocation. If not, defragment.
+ /* The request could not be fulfilled using a freelist slot. Check
+ ** to see if defragmentation is necessary.
*/
testcase( gap+2+nByte==top );
if( gap+2+nByte>top ){
+defragment_page:
+ testcase( pPage->nCell==0 );
rc = defragmentPage(pPage);
if( rc ) return rc;
top = get2byteNotZero(&data[hdr+5]);
@@ -52830,90 +53525,100 @@ static int allocateSpace(MemPage *pPage, int nByte, int *pIdx){
/*
** Return a section of the pPage->aData to the freelist.
-** The first byte of the new free block is pPage->aDisk[start]
-** and the size of the block is "size" bytes.
-**
-** Most of the effort here is involved in coalesing adjacent
-** free blocks into a single big free block.
-*/
-static int freeSpace(MemPage *pPage, int start, int size){
- int addr, pbegin, hdr;
- int iLast; /* Largest possible freeblock offset */
- unsigned char *data = pPage->aData;
+** The first byte of the new free block is pPage->aData[iStart]
+** and the size of the block is iSize bytes.
+**
+** Adjacent freeblocks are coalesced.
+**
+** Note that even though the freeblock list was checked by btreeInitPage(),
+** that routine will not detect overlap between cells or freeblocks. Nor
+** does it detect cells or freeblocks that encrouch into the reserved bytes
+** at the end of the page. So do additional corruption checks inside this
+** routine and return SQLITE_CORRUPT if any problems are found.
+*/
+static int freeSpace(MemPage *pPage, u16 iStart, u16 iSize){
+ u16 iPtr; /* Address of ptr to next freeblock */
+ u16 iFreeBlk; /* Address of the next freeblock */
+ u8 hdr; /* Page header size. 0 or 100 */
+ u8 nFrag = 0; /* Reduction in fragmentation */
+ u16 iOrigSize = iSize; /* Original value of iSize */
+ u32 iLast = pPage->pBt->usableSize-4; /* Largest possible freeblock offset */
+ u32 iEnd = iStart + iSize; /* First byte past the iStart buffer */
+ unsigned char *data = pPage->aData; /* Page content */
assert( pPage->pBt!=0 );
assert( sqlite3PagerIswriteable(pPage->pDbPage) );
- assert( start>=pPage->hdrOffset+6+pPage->childPtrSize );
- assert( (start + size) <= (int)pPage->pBt->usableSize );
+ assert( iStart>=pPage->hdrOffset+6+pPage->childPtrSize );
+ assert( iEnd <= pPage->pBt->usableSize );
assert( sqlite3_mutex_held(pPage->pBt->mutex) );
- assert( size>=0 ); /* Minimum cell size is 4 */
+ assert( iSize>=4 ); /* Minimum cell size is 4 */
+ assert( iStart<=iLast );
+ /* Overwrite deleted information with zeros when the secure_delete
+ ** option is enabled */
if( pPage->pBt->btsFlags & BTS_SECURE_DELETE ){
- /* Overwrite deleted information with zeros when the secure_delete
- ** option is enabled */
- memset(&data[start], 0, size);
+ memset(&data[iStart], 0, iSize);
}
- /* Add the space back into the linked list of freeblocks. Note that
- ** even though the freeblock list was checked by btreeInitPage(),
- ** btreeInitPage() did not detect overlapping cells or
- ** freeblocks that overlapped cells. Nor does it detect when the
- ** cell content area exceeds the value in the page header. If these
- ** situations arise, then subsequent insert operations might corrupt
- ** the freelist. So we do need to check for corruption while scanning
- ** the freelist.
+ /* The list of freeblocks must be in ascending order. Find the
+ ** spot on the list where iStart should be inserted.
*/
hdr = pPage->hdrOffset;
- addr = hdr + 1;
- iLast = pPage->pBt->usableSize - 4;
- assert( start<=iLast );
- while( (pbegin = get2byte(&data[addr]))<start && pbegin>0 ){
- if( pbegin<addr+4 ){
- return SQLITE_CORRUPT_BKPT;
+ iPtr = hdr + 1;
+ if( data[iPtr+1]==0 && data[iPtr]==0 ){
+ iFreeBlk = 0; /* Shortcut for the case when the freelist is empty */
+ }else{
+ while( (iFreeBlk = get2byte(&data[iPtr]))>0 && iFreeBlk<iStart ){
+ if( iFreeBlk<iPtr+4 ) return SQLITE_CORRUPT_BKPT;
+ iPtr = iFreeBlk;
}
- addr = pbegin;
- }
- if( pbegin>iLast ){
- return SQLITE_CORRUPT_BKPT;
- }
- assert( pbegin>addr || pbegin==0 );
- put2byte(&data[addr], start);
- put2byte(&data[start], pbegin);
- put2byte(&data[start+2], size);
- pPage->nFree = pPage->nFree + (u16)size;
-
- /* Coalesce adjacent free blocks */
- addr = hdr + 1;
- while( (pbegin = get2byte(&data[addr]))>0 ){
- int pnext, psize, x;
- assert( pbegin>addr );
- assert( pbegin <= (int)pPage->pBt->usableSize-4 );
- pnext = get2byte(&data[pbegin]);
- psize = get2byte(&data[pbegin+2]);
- if( pbegin + psize + 3 >= pnext && pnext>0 ){
- int frag = pnext - (pbegin+psize);
- if( (frag<0) || (frag>(int)data[hdr+7]) ){
- return SQLITE_CORRUPT_BKPT;
- }
- data[hdr+7] -= (u8)frag;
- x = get2byte(&data[pnext]);
- put2byte(&data[pbegin], x);
- x = pnext + get2byte(&data[pnext+2]) - pbegin;
- put2byte(&data[pbegin+2], x);
- }else{
- addr = pbegin;
+ if( iFreeBlk>iLast ) return SQLITE_CORRUPT_BKPT;
+ assert( iFreeBlk>iPtr || iFreeBlk==0 );
+
+ /* At this point:
+ ** iFreeBlk: First freeblock after iStart, or zero if none
+ ** iPtr: The address of a pointer iFreeBlk
+ **
+ ** Check to see if iFreeBlk should be coalesced onto the end of iStart.
+ */
+ if( iFreeBlk && iEnd+3>=iFreeBlk ){
+ nFrag = iFreeBlk - iEnd;
+ if( iEnd>iFreeBlk ) return SQLITE_CORRUPT_BKPT;
+ iEnd = iFreeBlk + get2byte(&data[iFreeBlk+2]);
+ iSize = iEnd - iStart;
+ iFreeBlk = get2byte(&data[iFreeBlk]);
}
- }
-
- /* If the cell content area begins with a freeblock, remove it. */
- if( data[hdr+1]==data[hdr+5] && data[hdr+2]==data[hdr+6] ){
- int top;
- pbegin = get2byte(&data[hdr+1]);
- memcpy(&data[hdr+1], &data[pbegin], 2);
- top = get2byte(&data[hdr+5]) + get2byte(&data[pbegin+2]);
- put2byte(&data[hdr+5], top);
- }
- assert( sqlite3PagerIswriteable(pPage->pDbPage) );
+
+ /* If iPtr is another freeblock (that is, if iPtr is not the freelist
+ ** pointer in the page header) then check to see if iStart should be
+ ** coalesced onto the end of iPtr.
+ */
+ if( iPtr>hdr+1 ){
+ int iPtrEnd = iPtr + get2byte(&data[iPtr+2]);
+ if( iPtrEnd+3>=iStart ){
+ if( iPtrEnd>iStart ) return SQLITE_CORRUPT_BKPT;
+ nFrag += iStart - iPtrEnd;
+ iSize = iEnd - iPtr;
+ iStart = iPtr;
+ }
+ }
+ if( nFrag>data[hdr+7] ) return SQLITE_CORRUPT_BKPT;
+ data[hdr+7] -= nFrag;
+ }
+ if( iStart==get2byte(&data[hdr+5]) ){
+ /* The new freeblock is at the beginning of the cell content area,
+ ** so just extend the cell content area rather than create another
+ ** freelist entry */
+ if( iPtr!=hdr+1 ) return SQLITE_CORRUPT_BKPT;
+ put2byte(&data[hdr+1], iFreeBlk);
+ put2byte(&data[hdr+5], iEnd);
+ }else{
+ /* Insert the new freeblock into the freelist */
+ put2byte(&data[iPtr], iStart);
+ put2byte(&data[iStart], iFreeBlk);
+ put2byte(&data[iStart+2], iSize);
+ }
+ pPage->nFree += iOrigSize;
return SQLITE_OK;
}
@@ -52940,12 +53645,14 @@ static int decodeFlags(MemPage *pPage, int flagByte){
pBt = pPage->pBt;
if( flagByte==(PTF_LEAFDATA | PTF_INTKEY) ){
pPage->intKey = 1;
- pPage->hasData = pPage->leaf;
+ pPage->intKeyLeaf = pPage->leaf;
+ pPage->noPayload = !pPage->leaf;
pPage->maxLocal = pBt->maxLeaf;
pPage->minLocal = pBt->minLeaf;
}else if( flagByte==PTF_ZERODATA ){
pPage->intKey = 0;
- pPage->hasData = 0;
+ pPage->intKeyLeaf = 0;
+ pPage->noPayload = 0;
pPage->maxLocal = pBt->maxLocal;
pPage->minLocal = pBt->minLocal;
}else{
@@ -53600,7 +54307,8 @@ static int removeFromSharingList(BtShared *pBt){
/*
** Make sure pBt->pTmpSpace points to an allocation of
-** MX_CELL_SIZE(pBt) bytes.
+** MX_CELL_SIZE(pBt) bytes with a 4-byte prefix for a left-child
+** pointer.
*/
static void allocateTempSpace(BtShared *pBt){
if( !pBt->pTmpSpace ){
@@ -53615,8 +54323,16 @@ static void allocateTempSpace(BtShared *pBt){
** it into a database page. This is not actually a problem, but it
** does cause a valgrind error when the 1 or 2 bytes of unitialized
** data is passed to system call write(). So to avoid this error,
- ** zero the first 4 bytes of temp space here. */
- if( pBt->pTmpSpace ) memset(pBt->pTmpSpace, 0, 4);
+ ** zero the first 4 bytes of temp space here.
+ **
+ ** Also: Provide four bytes of initialized space before the
+ ** beginning of pTmpSpace as an area available to prepend the
+ ** left-child pointer to the beginning of a cell.
+ */
+ if( pBt->pTmpSpace ){
+ memset(pBt->pTmpSpace, 0, 8);
+ pBt->pTmpSpace += 4;
+ }
}
}
@@ -53624,8 +54340,11 @@ static void allocateTempSpace(BtShared *pBt){
** Free the pBt->pTmpSpace allocation
*/
static void freeTempSpace(BtShared *pBt){
- sqlite3PageFree( pBt->pTmpSpace);
- pBt->pTmpSpace = 0;
+ if( pBt->pTmpSpace ){
+ pBt->pTmpSpace -= 4;
+ sqlite3PageFree(pBt->pTmpSpace);
+ pBt->pTmpSpace = 0;
+ }
}
/*
@@ -53651,7 +54370,7 @@ SQLITE_PRIVATE int sqlite3BtreeClose(Btree *p){
** The call to sqlite3BtreeRollback() drops any table-locks held by
** this handle.
*/
- sqlite3BtreeRollback(p, SQLITE_OK);
+ sqlite3BtreeRollback(p, SQLITE_OK, 0);
sqlite3BtreeLeave(p);
/* If there are still other outstanding references to the shared-btree
@@ -54093,7 +54812,7 @@ page1_init_failed:
** false then all cursors are counted.
**
** For the purposes of this routine, a cursor is any cursor that
-** is capable of reading or writing to the databse. Cursors that
+** is capable of reading or writing to the database. Cursors that
** have been tripped into the CURSOR_FAULT state are not counted.
*/
static int countValidCursors(BtShared *pBt, int wrOnly){
@@ -54119,11 +54838,11 @@ static void unlockBtreeIfUnused(BtShared *pBt){
assert( sqlite3_mutex_held(pBt->mutex) );
assert( countValidCursors(pBt,0)==0 || pBt->inTransaction>TRANS_NONE );
if( pBt->inTransaction==TRANS_NONE && pBt->pPage1!=0 ){
- assert( pBt->pPage1->aData );
+ MemPage *pPage1 = pBt->pPage1;
+ assert( pPage1->aData );
assert( sqlite3PagerRefcount(pBt->pPager)==1 );
- assert( pBt->pPage1->aData );
- releasePage(pBt->pPage1);
pBt->pPage1 = 0;
+ releasePage(pPage1);
}
}
@@ -54557,7 +55276,7 @@ static int allocateBtreePage(BtShared *, MemPage **, Pgno *, Pgno, u8);
** calling this function again), return SQLITE_DONE. Or, if an error
** occurs, return some other error code.
**
-** More specificly, this function attempts to re-organize the database so
+** More specifically, this function attempts to re-organize the database so
** that the last page of the file currently in use is no longer in use.
**
** Parameter nFin is the number of pages that this database would contain
@@ -54565,7 +55284,7 @@ static int allocateBtreePage(BtShared *, MemPage **, Pgno *, Pgno, u8);
**
** If the bCommit parameter is non-zero, this function assumes that the
** caller will keep calling incrVacuumStep() until it returns SQLITE_DONE
-** or an error. bCommit is passed true for an auto-vacuum-on-commmit
+** or an error. bCommit is passed true for an auto-vacuum-on-commit
** operation, or false for an incremental vacuum.
*/
static int incrVacuumStep(BtShared *pBt, Pgno nFin, Pgno iLastPg, int bCommit){
@@ -54944,60 +55663,91 @@ SQLITE_PRIVATE int sqlite3BtreeCommit(Btree *p){
/*
** This routine sets the state to CURSOR_FAULT and the error
-** code to errCode for every cursor on BtShared that pBtree
-** references.
-**
-** Every cursor is tripped, including cursors that belong
-** to other database connections that happen to be sharing
-** the cache with pBtree.
-**
-** This routine gets called when a rollback occurs.
-** All cursors using the same cache must be tripped
-** to prevent them from trying to use the btree after
-** the rollback. The rollback may have deleted tables
-** or moved root pages, so it is not sufficient to
-** save the state of the cursor. The cursor must be
-** invalidated.
-*/
-SQLITE_PRIVATE void sqlite3BtreeTripAllCursors(Btree *pBtree, int errCode){
+** code to errCode for every cursor on any BtShared that pBtree
+** references. Or if the writeOnly flag is set to 1, then only
+** trip write cursors and leave read cursors unchanged.
+**
+** Every cursor is a candidate to be tripped, including cursors
+** that belong to other database connections that happen to be
+** sharing the cache with pBtree.
+**
+** This routine gets called when a rollback occurs. If the writeOnly
+** flag is true, then only write-cursors need be tripped - read-only
+** cursors save their current positions so that they may continue
+** following the rollback. Or, if writeOnly is false, all cursors are
+** tripped. In general, writeOnly is false if the transaction being
+** rolled back modified the database schema. In this case b-tree root
+** pages may be moved or deleted from the database altogether, making
+** it unsafe for read cursors to continue.
+**
+** If the writeOnly flag is true and an error is encountered while
+** saving the current position of a read-only cursor, all cursors,
+** including all read-cursors are tripped.
+**
+** SQLITE_OK is returned if successful, or if an error occurs while
+** saving a cursor position, an SQLite error code.
+*/
+SQLITE_PRIVATE int sqlite3BtreeTripAllCursors(Btree *pBtree, int errCode, int writeOnly){
BtCursor *p;
- if( pBtree==0 ) return;
- sqlite3BtreeEnter(pBtree);
- for(p=pBtree->pBt->pCursor; p; p=p->pNext){
- int i;
- sqlite3BtreeClearCursor(p);
- p->eState = CURSOR_FAULT;
- p->skipNext = errCode;
- for(i=0; i<=p->iPage; i++){
- releasePage(p->apPage[i]);
- p->apPage[i] = 0;
+ int rc = SQLITE_OK;
+
+ assert( (writeOnly==0 || writeOnly==1) && BTCF_WriteFlag==1 );
+ if( pBtree ){
+ sqlite3BtreeEnter(pBtree);
+ for(p=pBtree->pBt->pCursor; p; p=p->pNext){
+ int i;
+ if( writeOnly && (p->curFlags & BTCF_WriteFlag)==0 ){
+ if( p->eState==CURSOR_VALID ){
+ rc = saveCursorPosition(p);
+ if( rc!=SQLITE_OK ){
+ (void)sqlite3BtreeTripAllCursors(pBtree, rc, 0);
+ break;
+ }
+ }
+ }else{
+ sqlite3BtreeClearCursor(p);
+ p->eState = CURSOR_FAULT;
+ p->skipNext = errCode;
+ }
+ for(i=0; i<=p->iPage; i++){
+ releasePage(p->apPage[i]);
+ p->apPage[i] = 0;
+ }
}
+ sqlite3BtreeLeave(pBtree);
}
- sqlite3BtreeLeave(pBtree);
+ return rc;
}
/*
-** Rollback the transaction in progress. All cursors will be
-** invalided by this operation. Any attempt to use a cursor
-** that was open at the beginning of this operation will result
-** in an error.
+** Rollback the transaction in progress.
+**
+** If tripCode is not SQLITE_OK then cursors will be invalidated (tripped).
+** Only write cursors are tripped if writeOnly is true but all cursors are
+** tripped if writeOnly is false. Any attempt to use
+** a tripped cursor will result in an error.
**
** This will release the write lock on the database file. If there
** are no active cursors, it also releases the read lock.
*/
-SQLITE_PRIVATE int sqlite3BtreeRollback(Btree *p, int tripCode){
+SQLITE_PRIVATE int sqlite3BtreeRollback(Btree *p, int tripCode, int writeOnly){
int rc;
BtShared *pBt = p->pBt;
MemPage *pPage1;
+ assert( writeOnly==1 || writeOnly==0 );
+ assert( tripCode==SQLITE_ABORT_ROLLBACK || tripCode==SQLITE_OK );
sqlite3BtreeEnter(p);
if( tripCode==SQLITE_OK ){
rc = tripCode = saveAllCursors(pBt, 0, 0);
+ if( rc ) writeOnly = 0;
}else{
rc = SQLITE_OK;
}
if( tripCode ){
- sqlite3BtreeTripAllCursors(p, tripCode);
+ int rc2 = sqlite3BtreeTripAllCursors(p, tripCode, writeOnly);
+ assert( rc==SQLITE_OK || (writeOnly==0 && rc2==SQLITE_OK) );
+ if( rc2!=SQLITE_OK ) rc = rc2;
}
btreeIntegrity(p);
@@ -55032,7 +55782,7 @@ SQLITE_PRIVATE int sqlite3BtreeRollback(Btree *p, int tripCode){
}
/*
-** Start a statement subtransaction. The subtransaction can can be rolled
+** Start a statement subtransaction. The subtransaction can be rolled
** back independently of the main transaction. You must start a transaction
** before starting a subtransaction. The subtransaction is ended automatically
** if the main transaction commits or rolls back.
@@ -55164,6 +55914,10 @@ static int btreeCursor(
if( NEVER(wrFlag && (pBt->btsFlags & BTS_READ_ONLY)!=0) ){
return SQLITE_READONLY;
}
+ if( wrFlag ){
+ allocateTempSpace(pBt);
+ if( pBt->pTmpSpace==0 ) return SQLITE_NOMEM;
+ }
if( iTable==1 && btreePagecount(pBt)==0 ){
assert( wrFlag==0 );
iTable = 0;
@@ -55266,7 +56020,7 @@ SQLITE_PRIVATE int sqlite3BtreeCloseCursor(BtCursor *pCur){
** compiler to crash when getCellInfo() is implemented as a macro.
** But there is a measureable speed advantage to using the macro on gcc
** (when less compiler optimizations like -Os or -O0 are used and the
-** compiler is not doing agressive inlining.) So we use a real function
+** compiler is not doing aggressive inlining.) So we use a real function
** for MSVC and a macro for everything else. Ticket #2457.
*/
#ifndef NDEBUG
@@ -55328,13 +56082,9 @@ SQLITE_PRIVATE int sqlite3BtreeCursorIsValid(BtCursor *pCur){
*/
SQLITE_PRIVATE int sqlite3BtreeKeySize(BtCursor *pCur, i64 *pSize){
assert( cursorHoldsMutex(pCur) );
- assert( pCur->eState==CURSOR_INVALID || pCur->eState==CURSOR_VALID );
- if( pCur->eState!=CURSOR_VALID ){
- *pSize = 0;
- }else{
- getCellInfo(pCur);
- *pSize = pCur->info.nKey;
- }
+ assert( pCur->eState==CURSOR_VALID );
+ getCellInfo(pCur);
+ *pSize = pCur->info.nKey;
return SQLITE_OK;
}
@@ -55353,8 +56103,9 @@ SQLITE_PRIVATE int sqlite3BtreeKeySize(BtCursor *pCur, i64 *pSize){
SQLITE_PRIVATE int sqlite3BtreeDataSize(BtCursor *pCur, u32 *pSize){
assert( cursorHoldsMutex(pCur) );
assert( pCur->eState==CURSOR_VALID );
+ assert( pCur->apPage[pCur->iPage]->intKeyLeaf==1 );
getCellInfo(pCur);
- *pSize = pCur->info.nData;
+ *pSize = pCur->info.nPayload;
return SQLITE_OK;
}
@@ -55483,7 +56234,7 @@ static int copyPayload(
**
** If the current cursor entry uses one or more overflow pages and the
** eOp argument is not 2, this function may allocate space for and lazily
-** popluates the overflow page-list cache array (BtCursor.aOverflow).
+** populates the overflow page-list cache array (BtCursor.aOverflow).
** Subsequent calls use this cache to make seeking to the supplied offset
** more efficient.
**
@@ -55505,30 +56256,28 @@ static int accessPayload(
){
unsigned char *aPayload;
int rc = SQLITE_OK;
- u32 nKey;
int iIdx = 0;
MemPage *pPage = pCur->apPage[pCur->iPage]; /* Btree page of current entry */
BtShared *pBt = pCur->pBt; /* Btree this cursor belongs to */
#ifdef SQLITE_DIRECT_OVERFLOW_READ
- int bEnd; /* True if reading to end of data */
+ unsigned char * const pBufStart = pBuf;
+ int bEnd; /* True if reading to end of data */
#endif
assert( pPage );
assert( pCur->eState==CURSOR_VALID );
assert( pCur->aiIdx[pCur->iPage]<pPage->nCell );
assert( cursorHoldsMutex(pCur) );
- assert( eOp!=2 || offset==0 ); /* Always start from beginning for eOp==2 */
+ assert( eOp!=2 || offset==0 ); /* Always start from beginning for eOp==2 */
getCellInfo(pCur);
- aPayload = pCur->info.pCell + pCur->info.nHeader;
- nKey = (pPage->intKey ? 0 : (int)pCur->info.nKey);
+ aPayload = pCur->info.pPayload;
#ifdef SQLITE_DIRECT_OVERFLOW_READ
- bEnd = (offset+amt==nKey+pCur->info.nData);
+ bEnd = offset+amt==pCur->info.nPayload;
#endif
+ assert( offset+amt <= pCur->info.nPayload );
- if( NEVER(offset+amt > nKey+pCur->info.nData)
- || &aPayload[pCur->info.nLocal] > &pPage->aData[pBt->usableSize]
- ){
+ if( &aPayload[pCur->info.nLocal] > &pPage->aData[pBt->usableSize] ){
/* Trying to read or write past the end of the data is an error */
return SQLITE_CORRUPT_BKPT;
}
@@ -55584,7 +56333,9 @@ static int accessPayload(
** entry for the first required overflow page is valid, skip
** directly to it.
*/
- if( (pCur->curFlags & BTCF_ValidOvfl)!=0 && pCur->aOverflow[offset/ovflSize] ){
+ if( (pCur->curFlags & BTCF_ValidOvfl)!=0
+ && pCur->aOverflow[offset/ovflSize]
+ ){
iIdx = (offset/ovflSize);
nextPage = pCur->aOverflow[iIdx];
offset = (offset%ovflSize);
@@ -55637,6 +56388,7 @@ static int accessPayload(
** 4) there is no open write-transaction, and
** 5) the database is not a WAL database,
** 6) all data from the page is being read.
+ ** 7) at least 4 bytes have already been read into the output buffer
**
** then data can be read directly from the database file into the
** output buffer, bypassing the page-cache altogether. This speeds
@@ -55648,9 +56400,11 @@ static int accessPayload(
&& pBt->inTransaction==TRANS_READ /* (4) */
&& (fd = sqlite3PagerFile(pBt->pPager))->pMethods /* (3) */
&& pBt->pPage1->aData[19]==0x01 /* (5) */
+ && &pBuf[-4]>=pBufStart /* (7) */
){
u8 aSave[4];
u8 *aWrite = &pBuf[-4];
+ assert( aWrite>=pBufStart ); /* hence (7) */
memcpy(aSave, aWrite, 4);
rc = sqlite3OsRead(fd, aWrite, a+4, (i64)pBt->pageSize*(nextPage-1));
nextPage = get4byte(aWrite);
@@ -55685,7 +56439,7 @@ static int accessPayload(
/*
** Read part of the key associated with cursor pCur. Exactly
-** "amt" bytes will be transfered into pBuf[]. The transfer
+** "amt" bytes will be transferred into pBuf[]. The transfer
** begins at "offset".
**
** The caller must ensure that pCur is pointing to a valid row
@@ -55762,7 +56516,7 @@ static const void *fetchPayload(
assert( pCur->aiIdx[pCur->iPage]<pCur->apPage[pCur->iPage]->nCell );
assert( pCur->info.nSize>0 );
*pAmt = pCur->info.nLocal;
- return (void*)(pCur->info.pCell + pCur->info.nHeader);
+ return (void*)pCur->info.pPayload;
}
@@ -56005,17 +56759,16 @@ static int moveToRightmost(BtCursor *pCur){
assert( cursorHoldsMutex(pCur) );
assert( pCur->eState==CURSOR_VALID );
- while( rc==SQLITE_OK && !(pPage = pCur->apPage[pCur->iPage])->leaf ){
+ while( !(pPage = pCur->apPage[pCur->iPage])->leaf ){
pgno = get4byte(&pPage->aData[pPage->hdrOffset+8]);
pCur->aiIdx[pCur->iPage] = pPage->nCell;
rc = moveToChild(pCur, pgno);
+ if( rc ) return rc;
}
- if( rc==SQLITE_OK ){
- pCur->aiIdx[pCur->iPage] = pPage->nCell-1;
- pCur->info.nSize = 0;
- pCur->curFlags &= ~BTCF_ValidNKey;
- }
- return rc;
+ pCur->aiIdx[pCur->iPage] = pPage->nCell-1;
+ assert( pCur->info.nSize==0 );
+ assert( (pCur->curFlags & BTCF_ValidNKey)==0 );
+ return SQLITE_OK;
}
/* Move the cursor to the first entry in the table. Return SQLITE_OK
@@ -56146,7 +56899,7 @@ SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked(
if( pIdxKey ){
xRecordCompare = sqlite3VdbeFindCompare(pIdxKey);
- pIdxKey->isCorrupt = 0;
+ pIdxKey->errCode = 0;
assert( pIdxKey->default_rc==1
|| pIdxKey->default_rc==0
|| pIdxKey->default_rc==-1
@@ -56191,7 +56944,7 @@ SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked(
for(;;){
i64 nCellKey;
pCell = findCell(pPage, idx) + pPage->childPtrSize;
- if( pPage->hasData ){
+ if( pPage->intKeyLeaf ){
while( 0x80 <= *(pCell++) ){
if( pCell>=pPage->aDataEnd ) return SQLITE_CORRUPT_BKPT;
}
@@ -56239,14 +56992,14 @@ SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked(
** single byte varint and the record fits entirely on the main
** b-tree page. */
testcase( pCell+nCell+1==pPage->aDataEnd );
- c = xRecordCompare(nCell, (void*)&pCell[1], pIdxKey, 0);
+ c = xRecordCompare(nCell, (void*)&pCell[1], pIdxKey);
}else if( !(pCell[1] & 0x80)
&& (nCell = ((nCell&0x7f)<<7) + pCell[1])<=pPage->maxLocal
){
/* The record-size field is a 2 byte varint and the record
** fits entirely on the main b-tree page. */
testcase( pCell+nCell+2==pPage->aDataEnd );
- c = xRecordCompare(nCell, (void*)&pCell[2], pIdxKey, 0);
+ c = xRecordCompare(nCell, (void*)&pCell[2], pIdxKey);
}else{
/* The record flows over onto one or more overflow pages. In
** this case the whole cell needs to be parsed, a buffer allocated
@@ -56267,10 +57020,13 @@ SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked(
sqlite3_free(pCellKey);
goto moveto_finish;
}
- c = xRecordCompare(nCell, pCellKey, pIdxKey, 0);
+ c = xRecordCompare(nCell, pCellKey, pIdxKey);
sqlite3_free(pCellKey);
}
- assert( pIdxKey->isCorrupt==0 || c==0 );
+ assert(
+ (pIdxKey->errCode!=SQLITE_CORRUPT || c==0)
+ && (pIdxKey->errCode!=SQLITE_NOMEM || pCur->pBtree->db->mallocFailed)
+ );
if( c<0 ){
lwr = idx+1;
}else if( c>0 ){
@@ -56280,7 +57036,7 @@ SQLITE_PRIVATE int sqlite3BtreeMovetoUnpacked(
*pRes = 0;
rc = SQLITE_OK;
pCur->aiIdx[pCur->iPage] = (u16)idx;
- if( pIdxKey->isCorrupt ) rc = SQLITE_CORRUPT;
+ if( pIdxKey->errCode ) rc = SQLITE_CORRUPT;
goto moveto_finish;
}
if( lwr>upr ) break;
@@ -56335,6 +57091,12 @@ SQLITE_PRIVATE int sqlite3BtreeEof(BtCursor *pCur){
** was already pointing to the last entry in the database before
** this routine was called, then set *pRes=1.
**
+** The main entry point is sqlite3BtreeNext(). That routine is optimized
+** for the common case of merely incrementing the cell counter BtCursor.aiIdx
+** to the next cell on the current page. The (slower) btreeNext() helper
+** routine is called when it is necessary to move to a different page or
+** to restore the cursor.
+**
** The calling function will set *pRes to 0 or 1. The initial *pRes value
** will be 1 if the cursor being stepped corresponds to an SQL index and
** if this routine could have been skipped if that SQL index had been
@@ -56344,20 +57106,18 @@ SQLITE_PRIVATE int sqlite3BtreeEof(BtCursor *pCur){
** SQLite btree implementation does not. (Note that the comdb2 btree
** implementation does use this hint, however.)
*/
-SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor *pCur, int *pRes){
+static SQLITE_NOINLINE int btreeNext(BtCursor *pCur, int *pRes){
int rc;
int idx;
MemPage *pPage;
assert( cursorHoldsMutex(pCur) );
- assert( pRes!=0 );
- assert( *pRes==0 || *pRes==1 );
assert( pCur->skipNext==0 || pCur->eState!=CURSOR_VALID );
+ assert( *pRes==0 );
if( pCur->eState!=CURSOR_VALID ){
- invalidateOverflowCache(pCur);
+ assert( (pCur->curFlags & BTCF_ValidOvfl)==0 );
rc = restoreCursorPosition(pCur);
if( rc!=SQLITE_OK ){
- *pRes = 0;
return rc;
}
if( CURSOR_INVALID==pCur->eState ){
@@ -56369,7 +57129,6 @@ SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor *pCur, int *pRes){
pCur->eState = CURSOR_VALID;
if( pCur->skipNext>0 ){
pCur->skipNext = 0;
- *pRes = 0;
return SQLITE_OK;
}
pCur->skipNext = 0;
@@ -56387,18 +57146,11 @@ SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor *pCur, int *pRes){
** page into more than one b-tree structure. */
testcase( idx>pPage->nCell );
- pCur->info.nSize = 0;
- pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl);
if( idx>=pPage->nCell ){
if( !pPage->leaf ){
rc = moveToChild(pCur, get4byte(&pPage->aData[pPage->hdrOffset+8]));
- if( rc ){
- *pRes = 0;
- return rc;
- }
- rc = moveToLeftmost(pCur);
- *pRes = 0;
- return rc;
+ if( rc ) return rc;
+ return moveToLeftmost(pCur);
}
do{
if( pCur->iPage==0 ){
@@ -56409,29 +57161,52 @@ SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor *pCur, int *pRes){
moveToParent(pCur);
pPage = pCur->apPage[pCur->iPage];
}while( pCur->aiIdx[pCur->iPage]>=pPage->nCell );
- *pRes = 0;
if( pPage->intKey ){
- rc = sqlite3BtreeNext(pCur, pRes);
+ return sqlite3BtreeNext(pCur, pRes);
}else{
- rc = SQLITE_OK;
+ return SQLITE_OK;
}
- return rc;
}
+ if( pPage->leaf ){
+ return SQLITE_OK;
+ }else{
+ return moveToLeftmost(pCur);
+ }
+}
+SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor *pCur, int *pRes){
+ MemPage *pPage;
+ assert( cursorHoldsMutex(pCur) );
+ assert( pRes!=0 );
+ assert( *pRes==0 || *pRes==1 );
+ assert( pCur->skipNext==0 || pCur->eState!=CURSOR_VALID );
+ pCur->info.nSize = 0;
+ pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl);
*pRes = 0;
+ if( pCur->eState!=CURSOR_VALID ) return btreeNext(pCur, pRes);
+ pPage = pCur->apPage[pCur->iPage];
+ if( (++pCur->aiIdx[pCur->iPage])>=pPage->nCell ){
+ pCur->aiIdx[pCur->iPage]--;
+ return btreeNext(pCur, pRes);
+ }
if( pPage->leaf ){
return SQLITE_OK;
+ }else{
+ return moveToLeftmost(pCur);
}
- rc = moveToLeftmost(pCur);
- return rc;
}
-
/*
** Step the cursor to the back to the previous entry in the database. If
** successful then set *pRes=0. If the cursor
** was already pointing to the first entry in the database before
** this routine was called, then set *pRes=1.
**
+** The main entry point is sqlite3BtreePrevious(). That routine is optimized
+** for the common case of merely decrementing the cell counter BtCursor.aiIdx
+** to the previous cell on the current page. The (slower) btreePrevious()
+** helper routine is called when it is necessary to move to a different page
+** or to restore the cursor.
+**
** The calling function will set *pRes to 0 or 1. The initial *pRes value
** will be 1 if the cursor being stepped corresponds to an SQL index and
** if this routine could have been skipped if that SQL index had been
@@ -56441,22 +57216,20 @@ SQLITE_PRIVATE int sqlite3BtreeNext(BtCursor *pCur, int *pRes){
** SQLite btree implementation does not. (Note that the comdb2 btree
** implementation does use this hint, however.)
*/
-SQLITE_PRIVATE int sqlite3BtreePrevious(BtCursor *pCur, int *pRes){
+static SQLITE_NOINLINE int btreePrevious(BtCursor *pCur, int *pRes){
int rc;
MemPage *pPage;
assert( cursorHoldsMutex(pCur) );
assert( pRes!=0 );
- assert( *pRes==0 || *pRes==1 );
+ assert( *pRes==0 );
assert( pCur->skipNext==0 || pCur->eState!=CURSOR_VALID );
- pCur->curFlags &= ~(BTCF_AtLast|BTCF_ValidOvfl);
+ assert( (pCur->curFlags & (BTCF_AtLast|BTCF_ValidOvfl|BTCF_ValidNKey))==0 );
+ assert( pCur->info.nSize==0 );
if( pCur->eState!=CURSOR_VALID ){
- if( ALWAYS(pCur->eState>=CURSOR_REQUIRESEEK) ){
- rc = btreeRestoreCursorPosition(pCur);
- if( rc!=SQLITE_OK ){
- *pRes = 0;
- return rc;
- }
+ rc = restoreCursorPosition(pCur);
+ if( rc!=SQLITE_OK ){
+ return rc;
}
if( CURSOR_INVALID==pCur->eState ){
*pRes = 1;
@@ -56467,7 +57240,6 @@ SQLITE_PRIVATE int sqlite3BtreePrevious(BtCursor *pCur, int *pRes){
pCur->eState = CURSOR_VALID;
if( pCur->skipNext<0 ){
pCur->skipNext = 0;
- *pRes = 0;
return SQLITE_OK;
}
pCur->skipNext = 0;
@@ -56479,10 +57251,7 @@ SQLITE_PRIVATE int sqlite3BtreePrevious(BtCursor *pCur, int *pRes){
if( !pPage->leaf ){
int idx = pCur->aiIdx[pCur->iPage];
rc = moveToChild(pCur, get4byte(findCell(pPage, idx)));
- if( rc ){
- *pRes = 0;
- return rc;
- }
+ if( rc ) return rc;
rc = moveToRightmost(pCur);
}else{
while( pCur->aiIdx[pCur->iPage]==0 ){
@@ -56493,8 +57262,8 @@ SQLITE_PRIVATE int sqlite3BtreePrevious(BtCursor *pCur, int *pRes){
}
moveToParent(pCur);
}
- pCur->info.nSize = 0;
- pCur->curFlags &= ~(BTCF_ValidNKey|BTCF_ValidOvfl);
+ assert( pCur->info.nSize==0 );
+ assert( (pCur->curFlags & (BTCF_ValidNKey|BTCF_ValidOvfl))==0 );
pCur->aiIdx[pCur->iPage]--;
pPage = pCur->apPage[pCur->iPage];
@@ -56504,9 +57273,25 @@ SQLITE_PRIVATE int sqlite3BtreePrevious(BtCursor *pCur, int *pRes){
rc = SQLITE_OK;
}
}
- *pRes = 0;
return rc;
}
+SQLITE_PRIVATE int sqlite3BtreePrevious(BtCursor *pCur, int *pRes){
+ assert( cursorHoldsMutex(pCur) );
+ assert( pRes!=0 );
+ assert( *pRes==0 || *pRes==1 );
+ assert( pCur->skipNext==0 || pCur->eState!=CURSOR_VALID );
+ *pRes = 0;
+ pCur->curFlags &= ~(BTCF_AtLast|BTCF_ValidOvfl|BTCF_ValidNKey);
+ pCur->info.nSize = 0;
+ if( pCur->eState!=CURSOR_VALID
+ || pCur->aiIdx[pCur->iPage]==0
+ || pCur->apPage[pCur->iPage]->leaf==0
+ ){
+ return btreePrevious(pCur, pRes);
+ }
+ pCur->aiIdx[pCur->iPage]--;
+ return SQLITE_OK;
+}
/*
** Allocate a new page from the database file.
@@ -56747,7 +57532,7 @@ static int allocateBtreePage(
memcpy(&aData[8+closest*4], &aData[4+k*4], 4);
}
put4byte(&aData[4], k-1);
- noContent = !btreeGetHasContent(pBt, *pPgno) ? PAGER_GET_NOCONTENT : 0;
+ noContent = !btreeGetHasContent(pBt, *pPgno)? PAGER_GET_NOCONTENT : 0;
rc = btreeGetPage(pBt, *pPgno, ppPage, noContent);
if( rc==SQLITE_OK ){
rc = sqlite3PagerWrite((*ppPage)->pDbPage);
@@ -56780,7 +57565,7 @@ static int allocateBtreePage(
** here are confined to those pages that lie between the end of the
** database image and the end of the database file.
*/
- int bNoContent = (0==IfNotOmitAV(pBt->bDoTruncate)) ? PAGER_GET_NOCONTENT : 0;
+ int bNoContent = (0==IfNotOmitAV(pBt->bDoTruncate))? PAGER_GET_NOCONTENT:0;
rc = sqlite3PagerWrite(pBt->pPage1->pDbPage);
if( rc ) return rc;
@@ -56979,9 +57764,15 @@ static void freePage(MemPage *pPage, int *pRC){
}
/*
-** Free any overflow pages associated with the given Cell.
+** Free any overflow pages associated with the given Cell. Write the
+** local Cell size (the number of bytes on the original page, omitting
+** overflow) into *pnSize.
*/
-static int clearCell(MemPage *pPage, unsigned char *pCell){
+static int clearCell(
+ MemPage *pPage, /* The page that contains the Cell */
+ unsigned char *pCell, /* First byte of the Cell */
+ u16 *pnSize /* Write the size of the Cell here */
+){
BtShared *pBt = pPage->pBt;
CellInfo info;
Pgno ovflPgno;
@@ -56991,6 +57782,7 @@ static int clearCell(MemPage *pPage, unsigned char *pCell){
assert( sqlite3_mutex_held(pPage->pBt->mutex) );
btreeParseCellPtr(pPage, pCell, &info);
+ *pnSize = info.nSize;
if( info.iOverflow==0 ){
return SQLITE_OK; /* No overflow pages. Return without doing anything */
}
@@ -57074,7 +57866,6 @@ static int fillInCell(
BtShared *pBt = pPage->pBt;
Pgno pgnoOvfl = 0;
int nHeader;
- CellInfo info;
assert( sqlite3_mutex_held(pPage->pBt->mutex) );
@@ -57084,23 +57875,17 @@ static int fillInCell(
|| sqlite3PagerIswriteable(pPage->pDbPage) );
/* Fill in the header. */
- nHeader = 0;
- if( !pPage->leaf ){
- nHeader += 4;
- }
- if( pPage->hasData ){
- nHeader += putVarint32(&pCell[nHeader], nData+nZero);
+ nHeader = pPage->childPtrSize;
+ nPayload = nData + nZero;
+ if( pPage->intKeyLeaf ){
+ nHeader += putVarint32(&pCell[nHeader], nPayload);
}else{
- nData = nZero = 0;
+ assert( nData==0 );
+ assert( nZero==0 );
}
nHeader += putVarint(&pCell[nHeader], *(u64*)&nKey);
- btreeParseCellPtr(pPage, pCell, &info);
- assert( info.nHeader==nHeader );
- assert( info.nKey==nKey );
- assert( info.nData==(u32)(nData+nZero) );
- /* Fill in the payload */
- nPayload = nData + nZero;
+ /* Fill in the payload size */
if( pPage->intKey ){
pSrc = pData;
nSrc = nData;
@@ -57109,15 +57894,55 @@ static int fillInCell(
if( NEVER(nKey>0x7fffffff || pKey==0) ){
return SQLITE_CORRUPT_BKPT;
}
- nPayload += (int)nKey;
+ nPayload = (int)nKey;
pSrc = pKey;
nSrc = (int)nKey;
}
- *pnSize = info.nSize;
- spaceLeft = info.nLocal;
+ if( nPayload<=pPage->maxLocal ){
+ n = nHeader + nPayload;
+ testcase( n==3 );
+ testcase( n==4 );
+ if( n<4 ) n = 4;
+ *pnSize = n;
+ spaceLeft = nPayload;
+ pPrior = pCell;
+ }else{
+ int mn = pPage->minLocal;
+ n = mn + (nPayload - mn) % (pPage->pBt->usableSize - 4);
+ testcase( n==pPage->maxLocal );
+ testcase( n==pPage->maxLocal+1 );
+ if( n > pPage->maxLocal ) n = mn;
+ spaceLeft = n;
+ *pnSize = n + nHeader + 4;
+ pPrior = &pCell[nHeader+n];
+ }
pPayload = &pCell[nHeader];
- pPrior = &pCell[info.iOverflow];
+ /* At this point variables should be set as follows:
+ **
+ ** nPayload Total payload size in bytes
+ ** pPayload Begin writing payload here
+ ** spaceLeft Space available at pPayload. If nPayload>spaceLeft,
+ ** that means content must spill into overflow pages.
+ ** *pnSize Size of the local cell (not counting overflow pages)
+ ** pPrior Where to write the pgno of the first overflow page
+ **
+ ** Use a call to btreeParseCellPtr() to verify that the values above
+ ** were computed correctly.
+ */
+#if SQLITE_DEBUG
+ {
+ CellInfo info;
+ btreeParseCellPtr(pPage, pCell, &info);
+ assert( nHeader=(int)(info.pPayload - pCell) );
+ assert( info.nKey==nKey );
+ assert( *pnSize == info.nSize );
+ assert( spaceLeft == info.nLocal );
+ assert( pPrior == &pCell[info.iOverflow] );
+ }
+#endif
+
+ /* Write the payload into the local Cell and any extra into overflow pages */
while( nPayload>0 ){
if( spaceLeft==0 ){
#ifndef SQLITE_OMIT_AUTOVACUUM
@@ -57258,11 +58083,6 @@ static void dropCell(MemPage *pPage, int idx, int sz, int *pRC){
** in pTemp or the original pCell) and also record its index.
** Allocating a new entry in pPage->aCell[] implies that
** pPage->nOverflow is incremented.
-**
-** If nSkip is non-zero, then do not copy the first nSkip bytes of the
-** cell. The caller will overwrite them after this function returns. If
-** nSkip is non-zero, then pCell may not point to an invalid memory location
-** (but pCell+nSkip is always valid).
*/
static void insertCell(
MemPage *pPage, /* Page into which we are copying */
@@ -57279,7 +58099,6 @@ static void insertCell(
int ins; /* Index in data[] where new cell pointer is inserted */
int cellOffset; /* Address of first cell pointer in data[] */
u8 *data; /* The content of the whole page */
- int nSkip = (iChild ? 4 : 0);
if( *pRC ) return;
@@ -57297,7 +58116,7 @@ static void insertCell(
assert( sz==cellSizePtr(pPage, pCell) || (sz==8 && iChild>0) );
if( pPage->nOverflow || sz+2>pPage->nFree ){
if( pTemp ){
- memcpy(pTemp+nSkip, pCell+nSkip, sz-nSkip);
+ memcpy(pTemp, pCell, sz);
pCell = pTemp;
}
if( iChild ){
@@ -57326,7 +58145,7 @@ static void insertCell(
assert( idx+sz <= (int)pPage->pBt->usableSize );
pPage->nCell++;
pPage->nFree -= (u16)(2 + sz);
- memcpy(&data[idx+nSkip], pCell+nSkip, sz-nSkip);
+ memcpy(&data[idx], pCell, sz);
if( iChild ){
put4byte(&data[idx], iChild);
}
@@ -57349,7 +58168,7 @@ static void insertCell(
** The cells are guaranteed to fit on the page.
*/
static void assemblePage(
- MemPage *pPage, /* The page to be assemblied */
+ MemPage *pPage, /* The page to be assembled */
int nCell, /* The number of cells to add to this page */
u8 **apCell, /* Pointers to cell bodies */
u16 *aSize /* Sizes of the cells */
@@ -57825,7 +58644,7 @@ static int balance_nonroot(
** leafData: 1 if pPage holds key+data and pParent holds only keys.
*/
leafCorrection = apOld[0]->leaf*4;
- leafData = apOld[0]->hasData;
+ leafData = apOld[0]->intKeyLeaf;
for(i=0; i<nOld; i++){
int limit;
@@ -58015,7 +58834,7 @@ static int balance_nonroot(
}
/*
- ** Put the new pages in accending order. This helps to
+ ** Put the new pages in ascending order. This helps to
** keep entries in the disk file in order so that a scan
** of the table is a linear scan through the file. That
** in turn helps the operating system to deliver pages
@@ -58401,7 +59220,7 @@ static int balance(BtCursor *pCur){
rc = sqlite3PagerWrite(pParent->pDbPage);
if( rc==SQLITE_OK ){
#ifndef SQLITE_OMIT_QUICKBALANCE
- if( pPage->hasData
+ if( pPage->intKeyLeaf
&& pPage->nOverflow==1
&& pPage->aiOvfl[0]==pPage->nCell
&& pParent->pgno!=1
@@ -58410,7 +59229,7 @@ static int balance(BtCursor *pCur){
/* Call balance_quick() to create a new sibling of pPage on which
** to store the overflow cell. balance_quick() inserts a new cell
** into pParent, which may cause pParent overflow. If this
- ** happens, the next interation of the do-loop will balance pParent
+ ** happens, the next iteration of the do-loop will balance pParent
** use either balance_nonroot() or balance_deeper(). Until this
** happens, the overflow cell is stored in the aBalanceQuickSpace[]
** buffer.
@@ -58487,7 +59306,7 @@ static int balance(BtCursor *pCur){
** MovetoUnpacked() to seek cursor pCur to (pKey, nKey) has already
** been performed. seekResult is the search result returned (a negative
** number if pCur points at an entry that is smaller than (pKey, nKey), or
-** a positive value if pCur points at an etry that is larger than
+** a positive value if pCur points at an entry that is larger than
** (pKey, nKey)).
**
** If the seekResult parameter is non-zero, then the caller guarantees that
@@ -58520,7 +59339,8 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(
}
assert( cursorHoldsMutex(pCur) );
- assert( (pCur->curFlags & BTCF_WriteFlag)!=0 && pBt->inTransaction==TRANS_WRITE
+ assert( (pCur->curFlags & BTCF_WriteFlag)!=0
+ && pBt->inTransaction==TRANS_WRITE
&& (pBt->btsFlags & BTS_READ_ONLY)==0 );
assert( hasSharedCacheTableLock(p, pCur->pgnoRoot, pCur->pKeyInfo!=0, 2) );
@@ -58553,7 +59373,8 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(
/* If the cursor is currently on the last row and we are appending a
** new row onto the end, set the "loc" to avoid an unnecessary btreeMoveto()
** call */
- if( (pCur->curFlags&BTCF_ValidNKey)!=0 && nKey>0 && pCur->info.nKey==nKey-1 ){
+ if( (pCur->curFlags&BTCF_ValidNKey)!=0 && nKey>0
+ && pCur->info.nKey==nKey-1 ){
loc = -1;
}
}
@@ -58572,9 +59393,8 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(
pCur->pgnoRoot, nKey, nData, pPage->pgno,
loc==0 ? "overwrite" : "new entry"));
assert( pPage->isInit );
- allocateTempSpace(pBt);
newCell = pBt->pTmpSpace;
- if( newCell==0 ) return SQLITE_NOMEM;
+ assert( newCell!=0 );
rc = fillInCell(pPage, newCell, pKey, nKey, pData, nData, nZero, &szNew);
if( rc ) goto end_insert;
assert( szNew==cellSizePtr(pPage, newCell) );
@@ -58591,8 +59411,7 @@ SQLITE_PRIVATE int sqlite3BtreeInsert(
if( !pPage->leaf ){
memcpy(newCell, oldCell, 4);
}
- szOld = cellSizePtr(pPage, oldCell);
- rc = clearCell(pPage, oldCell);
+ rc = clearCell(pPage, oldCell, &szOld);
dropCell(pPage, idx, szOld, &rc);
if( rc ) goto end_insert;
}else if( loc<0 && pPage->nCell>0 ){
@@ -58644,7 +59463,7 @@ end_insert:
/*
** Delete the entry that the cursor is pointing to. The cursor
-** is left pointing at a arbitrary location.
+** is left pointing at an arbitrary location.
*/
SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur){
Btree *p = pCur->pBtree;
@@ -58654,6 +59473,7 @@ SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur){
unsigned char *pCell; /* Pointer to cell to delete */
int iCellIdx; /* Index of cell to delete */
int iCellDepth; /* Depth of node containing pCell */
+ u16 szCell; /* Size of the cell being deleted */
assert( cursorHoldsMutex(pCur) );
assert( pBt->inTransaction==TRANS_WRITE );
@@ -58702,8 +59522,8 @@ SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur){
rc = sqlite3PagerWrite(pPage->pDbPage);
if( rc ) return rc;
- rc = clearCell(pPage, pCell);
- dropCell(pPage, iCellIdx, cellSizePtr(pPage, pCell), &rc);
+ rc = clearCell(pPage, pCell, &szCell);
+ dropCell(pPage, iCellIdx, szCell, &rc);
if( rc ) return rc;
/* If the cell deleted was not located on a leaf page, then the cursor
@@ -58720,10 +59540,8 @@ SQLITE_PRIVATE int sqlite3BtreeDelete(BtCursor *pCur){
pCell = findCell(pLeaf, pLeaf->nCell-1);
nCell = cellSizePtr(pLeaf, pCell);
assert( MX_CELL_SIZE(pBt) >= nCell );
-
- allocateTempSpace(pBt);
pTmp = pBt->pTmpSpace;
-
+ assert( pTmp!=0 );
rc = sqlite3PagerWrite(pLeaf->pDbPage);
insertCell(pPage, iCellIdx, pCell-4, nCell+4, pTmp, n, &rc);
dropCell(pLeaf, pLeaf->nCell-1, nCell, &rc);
@@ -58935,6 +59753,7 @@ static int clearDatabasePage(
unsigned char *pCell;
int i;
int hdr;
+ u16 szCell;
assert( sqlite3_mutex_held(pBt->mutex) );
if( pgno>btreePagecount(pBt) ){
@@ -58950,7 +59769,7 @@ static int clearDatabasePage(
rc = clearDatabasePage(pBt, get4byte(pCell), 1, pnChange);
if( rc ) goto cleardatabasepage_out;
}
- rc = clearCell(pPage, pCell);
+ rc = clearCell(pPage, pCell, &szCell);
if( rc ) goto cleardatabasepage_out;
}
if( !pPage->leaf ){
@@ -59296,11 +60115,11 @@ SQLITE_PRIVATE Pager *sqlite3BtreePager(Btree *p){
*/
static void checkAppendMsg(
IntegrityCk *pCheck,
- char *zMsg1,
const char *zFormat,
...
){
va_list ap;
+ char zBuf[200];
if( !pCheck->mxErr ) return;
pCheck->mxErr--;
pCheck->nErr++;
@@ -59308,8 +60127,9 @@ static void checkAppendMsg(
if( pCheck->errMsg.nChar ){
sqlite3StrAccumAppend(&pCheck->errMsg, "\n", 1);
}
- if( zMsg1 ){
- sqlite3StrAccumAppendAll(&pCheck->errMsg, zMsg1);
+ if( pCheck->zPfx ){
+ sqlite3_snprintf(sizeof(zBuf), zBuf, pCheck->zPfx, pCheck->v1, pCheck->v2);
+ sqlite3StrAccumAppendAll(&pCheck->errMsg, zBuf);
}
sqlite3VXPrintf(&pCheck->errMsg, 1, zFormat, ap);
va_end(ap);
@@ -59342,19 +60162,19 @@ static void setPageReferenced(IntegrityCk *pCheck, Pgno iPg){
/*
** Add 1 to the reference count for page iPage. If this is the second
** reference to the page, add an error message to pCheck->zErrMsg.
-** Return 1 if there are 2 ore more references to the page and 0 if
+** Return 1 if there are 2 or more references to the page and 0 if
** if this is the first reference to the page.
**
** Also check that the page number is in bounds.
*/
-static int checkRef(IntegrityCk *pCheck, Pgno iPage, char *zContext){
+static int checkRef(IntegrityCk *pCheck, Pgno iPage){
if( iPage==0 ) return 1;
if( iPage>pCheck->nPage ){
- checkAppendMsg(pCheck, zContext, "invalid page number %d", iPage);
+ checkAppendMsg(pCheck, "invalid page number %d", iPage);
return 1;
}
if( getPageReferenced(pCheck, iPage) ){
- checkAppendMsg(pCheck, zContext, "2nd reference to page %d", iPage);
+ checkAppendMsg(pCheck, "2nd reference to page %d", iPage);
return 1;
}
setPageReferenced(pCheck, iPage);
@@ -59371,8 +60191,7 @@ static void checkPtrmap(
IntegrityCk *pCheck, /* Integrity check context */
Pgno iChild, /* Child page number */
u8 eType, /* Expected pointer map type */
- Pgno iParent, /* Expected pointer map parent page number */
- char *zContext /* Context description (used for error msg) */
+ Pgno iParent /* Expected pointer map parent page number */
){
int rc;
u8 ePtrmapType;
@@ -59381,12 +60200,12 @@ static void checkPtrmap(
rc = ptrmapGet(pCheck->pBt, iChild, &ePtrmapType, &iPtrmapParent);
if( rc!=SQLITE_OK ){
if( rc==SQLITE_NOMEM || rc==SQLITE_IOERR_NOMEM ) pCheck->mallocFailed = 1;
- checkAppendMsg(pCheck, zContext, "Failed to read ptrmap key=%d", iChild);
+ checkAppendMsg(pCheck, "Failed to read ptrmap key=%d", iChild);
return;
}
if( ePtrmapType!=eType || iPtrmapParent!=iParent ){
- checkAppendMsg(pCheck, zContext,
+ checkAppendMsg(pCheck,
"Bad ptr map entry key=%d expected=(%d,%d) got=(%d,%d)",
iChild, eType, iParent, ePtrmapType, iPtrmapParent);
}
@@ -59401,8 +60220,7 @@ static void checkList(
IntegrityCk *pCheck, /* Integrity checking context */
int isFreeList, /* True for a freelist. False for overflow page list */
int iPage, /* Page number for first page in the list */
- int N, /* Expected number of pages in the list */
- char *zContext /* Context for error messages */
+ int N /* Expected number of pages in the list */
){
int i;
int expected = N;
@@ -59411,14 +60229,14 @@ static void checkList(
DbPage *pOvflPage;
unsigned char *pOvflData;
if( iPage<1 ){
- checkAppendMsg(pCheck, zContext,
+ checkAppendMsg(pCheck,
"%d of %d pages missing from overflow list starting at %d",
N+1, expected, iFirst);
break;
}
- if( checkRef(pCheck, iPage, zContext) ) break;
+ if( checkRef(pCheck, iPage) ) break;
if( sqlite3PagerGet(pCheck->pPager, (Pgno)iPage, &pOvflPage) ){
- checkAppendMsg(pCheck, zContext, "failed to get page %d", iPage);
+ checkAppendMsg(pCheck, "failed to get page %d", iPage);
break;
}
pOvflData = (unsigned char *)sqlite3PagerGetData(pOvflPage);
@@ -59426,11 +60244,11 @@ static void checkList(
int n = get4byte(&pOvflData[4]);
#ifndef SQLITE_OMIT_AUTOVACUUM
if( pCheck->pBt->autoVacuum ){
- checkPtrmap(pCheck, iPage, PTRMAP_FREEPAGE, 0, zContext);
+ checkPtrmap(pCheck, iPage, PTRMAP_FREEPAGE, 0);
}
#endif
if( n>(int)pCheck->pBt->usableSize/4-2 ){
- checkAppendMsg(pCheck, zContext,
+ checkAppendMsg(pCheck,
"freelist leaf count too big on page %d", iPage);
N--;
}else{
@@ -59438,10 +60256,10 @@ static void checkList(
Pgno iFreePage = get4byte(&pOvflData[8+i*4]);
#ifndef SQLITE_OMIT_AUTOVACUUM
if( pCheck->pBt->autoVacuum ){
- checkPtrmap(pCheck, iFreePage, PTRMAP_FREEPAGE, 0, zContext);
+ checkPtrmap(pCheck, iFreePage, PTRMAP_FREEPAGE, 0);
}
#endif
- checkRef(pCheck, iFreePage, zContext);
+ checkRef(pCheck, iFreePage);
}
N -= n;
}
@@ -59454,7 +60272,7 @@ static void checkList(
*/
if( pCheck->pBt->autoVacuum && N>0 ){
i = get4byte(pOvflData);
- checkPtrmap(pCheck, i, PTRMAP_OVERFLOW2, iPage, zContext);
+ checkPtrmap(pCheck, i, PTRMAP_OVERFLOW2, iPage);
}
}
#endif
@@ -59486,7 +60304,6 @@ static void checkList(
static int checkTreePage(
IntegrityCk *pCheck, /* Context for the sanity check */
int iPage, /* Page number of the page to check */
- char *zParentContext, /* Parent context */
i64 *pnParentMinKey,
i64 *pnParentMaxKey
){
@@ -59497,23 +60314,26 @@ static int checkTreePage(
u8 *data;
BtShared *pBt;
int usableSize;
- char zContext[100];
char *hit = 0;
i64 nMinKey = 0;
i64 nMaxKey = 0;
-
- sqlite3_snprintf(sizeof(zContext), zContext, "Page %d: ", iPage);
+ const char *saved_zPfx = pCheck->zPfx;
+ int saved_v1 = pCheck->v1;
+ int saved_v2 = pCheck->v2;
/* Check that the page exists
*/
pBt = pCheck->pBt;
usableSize = pBt->usableSize;
if( iPage==0 ) return 0;
- if( checkRef(pCheck, iPage, zParentContext) ) return 0;
+ if( checkRef(pCheck, iPage) ) return 0;
+ pCheck->zPfx = "Page %d: ";
+ pCheck->v1 = iPage;
if( (rc = btreeGetPage(pBt, (Pgno)iPage, &pPage, 0))!=0 ){
- checkAppendMsg(pCheck, zContext,
+ checkAppendMsg(pCheck,
"unable to get the page. error code=%d", rc);
- return 0;
+ depth = -1;
+ goto end_of_check;
}
/* Clear MemPage.isInit to make sure the corruption detection code in
@@ -59521,10 +60341,11 @@ static int checkTreePage(
pPage->isInit = 0;
if( (rc = btreeInitPage(pPage))!=0 ){
assert( rc==SQLITE_CORRUPT ); /* The only possible error from InitPage */
- checkAppendMsg(pCheck, zContext,
+ checkAppendMsg(pCheck,
"btreeInitPage() returns error code %d", rc);
releasePage(pPage);
- return 0;
+ depth = -1;
+ goto end_of_check;
}
/* Check out all the cells.
@@ -59537,23 +60358,23 @@ static int checkTreePage(
/* Check payload overflow pages
*/
- sqlite3_snprintf(sizeof(zContext), zContext,
- "On tree page %d cell %d: ", iPage, i);
+ pCheck->zPfx = "On tree page %d cell %d: ";
+ pCheck->v1 = iPage;
+ pCheck->v2 = i;
pCell = findCell(pPage,i);
btreeParseCellPtr(pPage, pCell, &info);
- sz = info.nData;
- if( !pPage->intKey ) sz += (int)info.nKey;
+ sz = info.nPayload;
/* For intKey pages, check that the keys are in order.
*/
- else if( i==0 ) nMinKey = nMaxKey = info.nKey;
- else{
- if( info.nKey <= nMaxKey ){
- checkAppendMsg(pCheck, zContext,
- "Rowid %lld out of order (previous was %lld)", info.nKey, nMaxKey);
+ if( pPage->intKey ){
+ if( i==0 ){
+ nMinKey = nMaxKey = info.nKey;
+ }else if( info.nKey <= nMaxKey ){
+ checkAppendMsg(pCheck,
+ "Rowid %lld out of order (previous was %lld)", info.nKey, nMaxKey);
}
nMaxKey = info.nKey;
}
- assert( sz==info.nPayload );
if( (sz>info.nLocal)
&& (&pCell[info.iOverflow]<=&pPage->aData[pBt->usableSize])
){
@@ -59561,10 +60382,10 @@ static int checkTreePage(
Pgno pgnoOvfl = get4byte(&pCell[info.iOverflow]);
#ifndef SQLITE_OMIT_AUTOVACUUM
if( pBt->autoVacuum ){
- checkPtrmap(pCheck, pgnoOvfl, PTRMAP_OVERFLOW1, iPage, zContext);
+ checkPtrmap(pCheck, pgnoOvfl, PTRMAP_OVERFLOW1, iPage);
}
#endif
- checkList(pCheck, 0, pgnoOvfl, nPage, zContext);
+ checkList(pCheck, 0, pgnoOvfl, nPage);
}
/* Check sanity of left child page.
@@ -59573,12 +60394,12 @@ static int checkTreePage(
pgno = get4byte(pCell);
#ifndef SQLITE_OMIT_AUTOVACUUM
if( pBt->autoVacuum ){
- checkPtrmap(pCheck, pgno, PTRMAP_BTREE, iPage, zContext);
+ checkPtrmap(pCheck, pgno, PTRMAP_BTREE, iPage);
}
#endif
- d2 = checkTreePage(pCheck, pgno, zContext, &nMinKey, i==0 ? NULL : &nMaxKey);
+ d2 = checkTreePage(pCheck, pgno, &nMinKey, i==0?NULL:&nMaxKey);
if( i>0 && d2!=depth ){
- checkAppendMsg(pCheck, zContext, "Child page depth differs");
+ checkAppendMsg(pCheck, "Child page depth differs");
}
depth = d2;
}
@@ -59586,37 +60407,39 @@ static int checkTreePage(
if( !pPage->leaf ){
pgno = get4byte(&pPage->aData[pPage->hdrOffset+8]);
- sqlite3_snprintf(sizeof(zContext), zContext,
- "On page %d at right child: ", iPage);
+ pCheck->zPfx = "On page %d at right child: ";
+ pCheck->v1 = iPage;
#ifndef SQLITE_OMIT_AUTOVACUUM
if( pBt->autoVacuum ){
- checkPtrmap(pCheck, pgno, PTRMAP_BTREE, iPage, zContext);
+ checkPtrmap(pCheck, pgno, PTRMAP_BTREE, iPage);
}
#endif
- checkTreePage(pCheck, pgno, zContext, NULL, !pPage->nCell ? NULL : &nMaxKey);
+ checkTreePage(pCheck, pgno, NULL, !pPage->nCell?NULL:&nMaxKey);
}
/* For intKey leaf pages, check that the min/max keys are in order
** with any left/parent/right pages.
*/
+ pCheck->zPfx = "Page %d: ";
+ pCheck->v1 = iPage;
if( pPage->leaf && pPage->intKey ){
/* if we are a left child page */
if( pnParentMinKey ){
/* if we are the left most child page */
if( !pnParentMaxKey ){
if( nMaxKey > *pnParentMinKey ){
- checkAppendMsg(pCheck, zContext,
+ checkAppendMsg(pCheck,
"Rowid %lld out of order (max larger than parent min of %lld)",
nMaxKey, *pnParentMinKey);
}
}else{
if( nMinKey <= *pnParentMinKey ){
- checkAppendMsg(pCheck, zContext,
+ checkAppendMsg(pCheck,
"Rowid %lld out of order (min less than parent min of %lld)",
nMinKey, *pnParentMinKey);
}
if( nMaxKey > *pnParentMaxKey ){
- checkAppendMsg(pCheck, zContext,
+ checkAppendMsg(pCheck,
"Rowid %lld out of order (max larger than parent max of %lld)",
nMaxKey, *pnParentMaxKey);
}
@@ -59625,7 +60448,7 @@ static int checkTreePage(
/* else if we're a right child page */
} else if( pnParentMaxKey ){
if( nMinKey <= *pnParentMaxKey ){
- checkAppendMsg(pCheck, zContext,
+ checkAppendMsg(pCheck,
"Rowid %lld out of order (min less than parent max of %lld)",
nMinKey, *pnParentMaxKey);
}
@@ -59637,6 +60460,7 @@ static int checkTreePage(
data = pPage->aData;
hdr = pPage->hdrOffset;
hit = sqlite3PageMalloc( pBt->pageSize );
+ pCheck->zPfx = 0;
if( hit==0 ){
pCheck->mallocFailed = 1;
}else{
@@ -59654,7 +60478,8 @@ static int checkTreePage(
size = cellSizePtr(pPage, &data[pc]);
}
if( (int)(pc+size-1)>=usableSize ){
- checkAppendMsg(pCheck, 0,
+ pCheck->zPfx = 0;
+ checkAppendMsg(pCheck,
"Corruption detected in cell %d on page %d",i,iPage);
}else{
for(j=pc+size-1; j>=pc; j--) hit[j]++;
@@ -59676,19 +60501,24 @@ static int checkTreePage(
if( hit[i]==0 ){
cnt++;
}else if( hit[i]>1 ){
- checkAppendMsg(pCheck, 0,
+ checkAppendMsg(pCheck,
"Multiple uses for byte %d of page %d", i, iPage);
break;
}
}
if( cnt!=data[hdr+7] ){
- checkAppendMsg(pCheck, 0,
+ checkAppendMsg(pCheck,
"Fragmentation of %d bytes reported as %d on page %d",
cnt, data[hdr+7], iPage);
}
}
sqlite3PageFree(hit);
releasePage(pPage);
+
+end_of_check:
+ pCheck->zPfx = saved_zPfx;
+ pCheck->v1 = saved_v1;
+ pCheck->v2 = saved_v2;
return depth+1;
}
#endif /* SQLITE_OMIT_INTEGRITY_CHECK */
@@ -59729,6 +60559,9 @@ SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck(
sCheck.mxErr = mxErr;
sCheck.nErr = 0;
sCheck.mallocFailed = 0;
+ sCheck.zPfx = 0;
+ sCheck.v1 = 0;
+ sCheck.v2 = 0;
*pnErr = 0;
if( sCheck.nPage==0 ){
sqlite3BtreeLeave(p);
@@ -59748,8 +60581,10 @@ SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck(
/* Check the integrity of the freelist
*/
+ sCheck.zPfx = "Main freelist: ";
checkList(&sCheck, 1, get4byte(&pBt->pPage1->aData[32]),
- get4byte(&pBt->pPage1->aData[36]), "Main freelist: ");
+ get4byte(&pBt->pPage1->aData[36]));
+ sCheck.zPfx = 0;
/* Check all the tables.
*/
@@ -59757,10 +60592,12 @@ SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck(
if( aRoot[i]==0 ) continue;
#ifndef SQLITE_OMIT_AUTOVACUUM
if( pBt->autoVacuum && aRoot[i]>1 ){
- checkPtrmap(&sCheck, aRoot[i], PTRMAP_ROOTPAGE, 0, 0);
+ checkPtrmap(&sCheck, aRoot[i], PTRMAP_ROOTPAGE, 0);
}
#endif
- checkTreePage(&sCheck, aRoot[i], "List of tree roots: ", NULL, NULL);
+ sCheck.zPfx = "List of tree roots: ";
+ checkTreePage(&sCheck, aRoot[i], NULL, NULL);
+ sCheck.zPfx = 0;
}
/* Make sure every page in the file is referenced
@@ -59768,7 +60605,7 @@ SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck(
for(i=1; i<=sCheck.nPage && sCheck.mxErr; i++){
#ifdef SQLITE_OMIT_AUTOVACUUM
if( getPageReferenced(&sCheck, i)==0 ){
- checkAppendMsg(&sCheck, 0, "Page %d is never used", i);
+ checkAppendMsg(&sCheck, "Page %d is never used", i);
}
#else
/* If the database supports auto-vacuum, make sure no tables contain
@@ -59776,11 +60613,11 @@ SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck(
*/
if( getPageReferenced(&sCheck, i)==0 &&
(PTRMAP_PAGENO(pBt, i)!=i || !pBt->autoVacuum) ){
- checkAppendMsg(&sCheck, 0, "Page %d is never used", i);
+ checkAppendMsg(&sCheck, "Page %d is never used", i);
}
if( getPageReferenced(&sCheck, i)!=0 &&
(PTRMAP_PAGENO(pBt, i)==i && pBt->autoVacuum) ){
- checkAppendMsg(&sCheck, 0, "Pointer map page %d is referenced", i);
+ checkAppendMsg(&sCheck, "Pointer map page %d is referenced", i);
}
#endif
}
@@ -59790,7 +60627,7 @@ SQLITE_PRIVATE char *sqlite3BtreeIntegrityCheck(
** of the integrity check.
*/
if( NEVER(nRef != sqlite3PagerRefcount(pBt->pPager)) ){
- checkAppendMsg(&sCheck, 0,
+ checkAppendMsg(&sCheck,
"Outstanding page count goes from %d to %d during this analysis",
nRef, sqlite3PagerRefcount(pBt->pPager)
);
@@ -59986,7 +60823,7 @@ SQLITE_PRIVATE int sqlite3BtreePutData(BtCursor *pCsr, u32 offset, u32 amt, void
** required in case any of them are holding references to an xFetch
** version of the b-tree page modified by the accessPayload call below.
**
- ** Note that pCsr must be open on a BTREE_INTKEY table and saveCursorPosition()
+ ** Note that pCsr must be open on a INTKEY table and saveCursorPosition()
** and hence saveAllCursors() cannot fail on a BTREE_INTKEY table, hence
** saveAllCursors can only return SQLITE_OK.
*/
@@ -60161,12 +60998,12 @@ static Btree *findBtree(sqlite3 *pErrorDb, sqlite3 *pDb, const char *zDb){
int rc = 0;
pParse = sqlite3StackAllocZero(pErrorDb, sizeof(*pParse));
if( pParse==0 ){
- sqlite3Error(pErrorDb, SQLITE_NOMEM, "out of memory");
+ sqlite3ErrorWithMsg(pErrorDb, SQLITE_NOMEM, "out of memory");
rc = SQLITE_NOMEM;
}else{
pParse->db = pDb;
if( sqlite3OpenTempDatabase(pParse) ){
- sqlite3Error(pErrorDb, pParse->rc, "%s", pParse->zErrMsg);
+ sqlite3ErrorWithMsg(pErrorDb, pParse->rc, "%s", pParse->zErrMsg);
rc = SQLITE_ERROR;
}
sqlite3DbFree(pErrorDb, pParse->zErrMsg);
@@ -60179,7 +61016,7 @@ static Btree *findBtree(sqlite3 *pErrorDb, sqlite3 *pDb, const char *zDb){
}
if( i<0 ){
- sqlite3Error(pErrorDb, SQLITE_ERROR, "unknown database %s", zDb);
+ sqlite3ErrorWithMsg(pErrorDb, SQLITE_ERROR, "unknown database %s", zDb);
return 0;
}
@@ -60224,7 +61061,7 @@ SQLITE_API sqlite3_backup *sqlite3_backup_init(
sqlite3_mutex_enter(pDestDb->mutex);
if( pSrcDb==pDestDb ){
- sqlite3Error(
+ sqlite3ErrorWithMsg(
pDestDb, SQLITE_ERROR, "source and destination must be distinct"
);
p = 0;
@@ -60235,7 +61072,7 @@ SQLITE_API sqlite3_backup *sqlite3_backup_init(
** sqlite3_backup_finish(). */
p = (sqlite3_backup *)sqlite3MallocZero(sizeof(sqlite3_backup));
if( !p ){
- sqlite3Error(pDestDb, SQLITE_NOMEM, 0);
+ sqlite3Error(pDestDb, SQLITE_NOMEM);
}
}
@@ -60671,12 +61508,12 @@ SQLITE_API int sqlite3_backup_finish(sqlite3_backup *p){
}
/* If a transaction is still open on the Btree, roll it back. */
- sqlite3BtreeRollback(p->pDest, SQLITE_OK);
+ sqlite3BtreeRollback(p->pDest, SQLITE_OK, 0);
/* Set the error code of the destination database handle. */
rc = (p->rc==SQLITE_DONE) ? SQLITE_OK : p->rc;
if( p->pDestDb ){
- sqlite3Error(p->pDestDb, rc, 0);
+ sqlite3Error(p->pDestDb, rc);
/* Exit the mutexes and free the backup context structure. */
sqlite3LeaveMutexAndCloseZombie(p->pDestDb);
@@ -60849,29 +61686,40 @@ copy_finished:
** this: assert( sqlite3VdbeCheckMemInvariants(pMem) );
*/
SQLITE_PRIVATE int sqlite3VdbeCheckMemInvariants(Mem *p){
- /* The MEM_Dyn bit is set if and only if Mem.xDel is a non-NULL destructor
- ** function for Mem.z
+ /* If MEM_Dyn is set then Mem.xDel!=0.
+ ** Mem.xDel is might not be initialized if MEM_Dyn is clear.
*/
assert( (p->flags & MEM_Dyn)==0 || p->xDel!=0 );
- assert( (p->flags & MEM_Dyn)!=0 || p->xDel==0 );
+
+ /* MEM_Dyn may only be set if Mem.szMalloc==0. In this way we
+ ** ensure that if Mem.szMalloc>0 then it is safe to do
+ ** Mem.z = Mem.zMalloc without having to check Mem.flags&MEM_Dyn.
+ ** That saves a few cycles in inner loops. */
+ assert( (p->flags & MEM_Dyn)==0 || p->szMalloc==0 );
+
+ /* Cannot be both MEM_Int and MEM_Real at the same time */
+ assert( (p->flags & (MEM_Int|MEM_Real))!=(MEM_Int|MEM_Real) );
+
+ /* The szMalloc field holds the correct memory allocation size */
+ assert( p->szMalloc==0
+ || p->szMalloc==sqlite3DbMallocSize(p->db,p->zMalloc) );
/* If p holds a string or blob, the Mem.z must point to exactly
** one of the following:
**
** (1) Memory in Mem.zMalloc and managed by the Mem object
** (2) Memory to be freed using Mem.xDel
- ** (3) An ephermal string or blob
+ ** (3) An ephemeral string or blob
** (4) A static string or blob
*/
- if( (p->flags & (MEM_Str|MEM_Blob)) && p->z!=0 ){
+ if( (p->flags & (MEM_Str|MEM_Blob)) && p->n>0 ){
assert(
- ((p->z==p->zMalloc)? 1 : 0) +
+ ((p->szMalloc>0 && p->z==p->zMalloc)? 1 : 0) +
((p->flags&MEM_Dyn)!=0 ? 1 : 0) +
((p->flags&MEM_Ephem)!=0 ? 1 : 0) +
((p->flags&MEM_Static)!=0 ? 1 : 0) == 1
);
}
-
return 1;
}
#endif
@@ -60925,7 +61773,7 @@ SQLITE_PRIVATE int sqlite3VdbeChangeEncoding(Mem *pMem, int desiredEnc){
** blob if bPreserve is true. If bPreserve is false, any prior content
** in pMem->z is discarded.
*/
-SQLITE_PRIVATE int sqlite3VdbeMemGrow(Mem *pMem, int n, int bPreserve){
+SQLITE_PRIVATE SQLITE_NOINLINE int sqlite3VdbeMemGrow(Mem *pMem, int n, int bPreserve){
assert( sqlite3VdbeCheckMemInvariants(pMem) );
assert( (pMem->flags&MEM_RowSet)==0 );
@@ -60934,24 +61782,28 @@ SQLITE_PRIVATE int sqlite3VdbeMemGrow(Mem *pMem, int n, int bPreserve){
assert( bPreserve==0 || pMem->flags&(MEM_Blob|MEM_Str) );
testcase( bPreserve && pMem->z==0 );
- if( pMem->zMalloc==0 || sqlite3DbMallocSize(pMem->db, pMem->zMalloc)<n ){
+ assert( pMem->szMalloc==0
+ || pMem->szMalloc==sqlite3DbMallocSize(pMem->db, pMem->zMalloc) );
+ if( pMem->szMalloc<n ){
if( n<32 ) n = 32;
- if( bPreserve && pMem->z==pMem->zMalloc ){
+ if( bPreserve && pMem->szMalloc>0 && pMem->z==pMem->zMalloc ){
pMem->z = pMem->zMalloc = sqlite3DbReallocOrFree(pMem->db, pMem->z, n);
bPreserve = 0;
}else{
- sqlite3DbFree(pMem->db, pMem->zMalloc);
+ if( pMem->szMalloc>0 ) sqlite3DbFree(pMem->db, pMem->zMalloc);
pMem->zMalloc = sqlite3DbMallocRaw(pMem->db, n);
}
if( pMem->zMalloc==0 ){
- VdbeMemRelease(pMem);
+ sqlite3VdbeMemSetNull(pMem);
pMem->z = 0;
- pMem->flags = MEM_Null;
+ pMem->szMalloc = 0;
return SQLITE_NOMEM;
+ }else{
+ pMem->szMalloc = sqlite3DbMallocSize(pMem->db, pMem->zMalloc);
}
}
- if( pMem->z && bPreserve && pMem->z!=pMem->zMalloc ){
+ if( bPreserve && pMem->z && pMem->z!=pMem->zMalloc ){
memcpy(pMem->zMalloc, pMem->z, pMem->n);
}
if( (pMem->flags&MEM_Dyn)!=0 ){
@@ -60961,15 +61813,37 @@ SQLITE_PRIVATE int sqlite3VdbeMemGrow(Mem *pMem, int n, int bPreserve){
pMem->z = pMem->zMalloc;
pMem->flags &= ~(MEM_Dyn|MEM_Ephem|MEM_Static);
- pMem->xDel = 0;
return SQLITE_OK;
}
/*
-** Make the given Mem object MEM_Dyn. In other words, make it so
-** that any TEXT or BLOB content is stored in memory obtained from
-** malloc(). In this way, we know that the memory is safe to be
-** overwritten or altered.
+** Change the pMem->zMalloc allocation to be at least szNew bytes.
+** If pMem->zMalloc already meets or exceeds the requested size, this
+** routine is a no-op.
+**
+** Any prior string or blob content in the pMem object may be discarded.
+** The pMem->xDel destructor is called, if it exists. Though MEM_Str
+** and MEM_Blob values may be discarded, MEM_Int, MEM_Real, and MEM_Null
+** values are preserved.
+**
+** Return SQLITE_OK on success or an error code (probably SQLITE_NOMEM)
+** if unable to complete the resizing.
+*/
+SQLITE_PRIVATE int sqlite3VdbeMemClearAndResize(Mem *pMem, int szNew){
+ assert( szNew>0 );
+ assert( (pMem->flags & MEM_Dyn)==0 || pMem->szMalloc==0 );
+ if( pMem->szMalloc<szNew ){
+ return sqlite3VdbeMemGrow(pMem, szNew, 0);
+ }
+ assert( (pMem->flags & MEM_Dyn)==0 );
+ pMem->z = pMem->zMalloc;
+ pMem->flags &= (MEM_Null|MEM_Int|MEM_Real);
+ return SQLITE_OK;
+}
+
+/*
+** Change pMem so that its MEM_Str or MEM_Blob value is stored in
+** MEM.zMalloc, where it can be safely written.
**
** Return SQLITE_OK on success or SQLITE_NOMEM if malloc fails.
*/
@@ -60979,7 +61853,7 @@ SQLITE_PRIVATE int sqlite3VdbeMemMakeWriteable(Mem *pMem){
assert( (pMem->flags&MEM_RowSet)==0 );
ExpandBlob(pMem);
f = pMem->flags;
- if( (f&(MEM_Str|MEM_Blob)) && pMem->z!=pMem->zMalloc ){
+ if( (f&(MEM_Str|MEM_Blob)) && (pMem->szMalloc==0 || pMem->z!=pMem->zMalloc) ){
if( sqlite3VdbeMemGrow(pMem, pMem->n + 2, 1) ){
return SQLITE_NOMEM;
}
@@ -61023,15 +61897,11 @@ SQLITE_PRIVATE int sqlite3VdbeMemExpandBlob(Mem *pMem){
}
#endif
-
/*
-** Make sure the given Mem is \u0000 terminated.
+** It is already known that pMem contains an unterminated string.
+** Add the zero terminator.
*/
-SQLITE_PRIVATE int sqlite3VdbeMemNulTerminate(Mem *pMem){
- assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
- if( (pMem->flags & MEM_Term)!=0 || (pMem->flags & MEM_Str)==0 ){
- return SQLITE_OK; /* Nothing to do */
- }
+static SQLITE_NOINLINE int vdbeMemAddTerminator(Mem *pMem){
if( sqlite3VdbeMemGrow(pMem, pMem->n+2, 1) ){
return SQLITE_NOMEM;
}
@@ -61042,20 +61912,34 @@ SQLITE_PRIVATE int sqlite3VdbeMemNulTerminate(Mem *pMem){
}
/*
+** Make sure the given Mem is \u0000 terminated.
+*/
+SQLITE_PRIVATE int sqlite3VdbeMemNulTerminate(Mem *pMem){
+ assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
+ testcase( (pMem->flags & (MEM_Term|MEM_Str))==(MEM_Term|MEM_Str) );
+ testcase( (pMem->flags & (MEM_Term|MEM_Str))==0 );
+ if( (pMem->flags & (MEM_Term|MEM_Str))!=MEM_Str ){
+ return SQLITE_OK; /* Nothing to do */
+ }else{
+ return vdbeMemAddTerminator(pMem);
+ }
+}
+
+/*
** Add MEM_Str to the set of representations for the given Mem. Numbers
** are converted using sqlite3_snprintf(). Converting a BLOB to a string
** is a no-op.
**
-** Existing representations MEM_Int and MEM_Real are *not* invalidated.
+** Existing representations MEM_Int and MEM_Real are invalidated if
+** bForce is true but are retained if bForce is false.
**
** A MEM_Null value will never be passed to this function. This function is
** used for converting values to text for returning to the user (i.e. via
** sqlite3_value_text()), or for ensuring that values to be used as btree
** keys are strings. In the former case a NULL pointer is returned the
-** user and the later is an internal programming error.
+** user and the latter is an internal programming error.
*/
-SQLITE_PRIVATE int sqlite3VdbeMemStringify(Mem *pMem, int enc){
- int rc = SQLITE_OK;
+SQLITE_PRIVATE int sqlite3VdbeMemStringify(Mem *pMem, u8 enc, u8 bForce){
int fg = pMem->flags;
const int nByte = 32;
@@ -61067,11 +61951,11 @@ SQLITE_PRIVATE int sqlite3VdbeMemStringify(Mem *pMem, int enc){
assert( EIGHT_BYTE_ALIGNMENT(pMem) );
- if( sqlite3VdbeMemGrow(pMem, nByte, 0) ){
+ if( sqlite3VdbeMemClearAndResize(pMem, nByte) ){
return SQLITE_NOMEM;
}
- /* For a Real or Integer, use sqlite3_mprintf() to produce the UTF-8
+ /* For a Real or Integer, use sqlite3_snprintf() to produce the UTF-8
** string representation of the value. Then, if the required encoding
** is UTF-16le or UTF-16be do a translation.
**
@@ -61081,13 +61965,14 @@ SQLITE_PRIVATE int sqlite3VdbeMemStringify(Mem *pMem, int enc){
sqlite3_snprintf(nByte, pMem->z, "%lld", pMem->u.i);
}else{
assert( fg & MEM_Real );
- sqlite3_snprintf(nByte, pMem->z, "%!.15g", pMem->r);
+ sqlite3_snprintf(nByte, pMem->z, "%!.15g", pMem->u.r);
}
pMem->n = sqlite3Strlen30(pMem->z);
pMem->enc = SQLITE_UTF8;
pMem->flags |= MEM_Str|MEM_Term;
+ if( bForce ) pMem->flags &= ~(MEM_Int|MEM_Real);
sqlite3VdbeChangeEncoding(pMem, enc);
- return rc;
+ return SQLITE_OK;
}
/*
@@ -61102,59 +61987,90 @@ SQLITE_PRIVATE int sqlite3VdbeMemFinalize(Mem *pMem, FuncDef *pFunc){
int rc = SQLITE_OK;
if( ALWAYS(pFunc && pFunc->xFinalize) ){
sqlite3_context ctx;
+ Mem t;
assert( (pMem->flags & MEM_Null)!=0 || pFunc==pMem->u.pDef );
assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
memset(&ctx, 0, sizeof(ctx));
- ctx.s.flags = MEM_Null;
- ctx.s.db = pMem->db;
+ memset(&t, 0, sizeof(t));
+ t.flags = MEM_Null;
+ t.db = pMem->db;
+ ctx.pOut = &t;
ctx.pMem = pMem;
ctx.pFunc = pFunc;
pFunc->xFinalize(&ctx); /* IMP: R-24505-23230 */
- assert( 0==(pMem->flags&MEM_Dyn) && !pMem->xDel );
- sqlite3DbFree(pMem->db, pMem->zMalloc);
- memcpy(pMem, &ctx.s, sizeof(ctx.s));
+ assert( (pMem->flags & MEM_Dyn)==0 );
+ if( pMem->szMalloc>0 ) sqlite3DbFree(pMem->db, pMem->zMalloc);
+ memcpy(pMem, &t, sizeof(t));
rc = ctx.isError;
}
return rc;
}
/*
-** If the memory cell contains a string value that must be freed by
-** invoking an external callback, free it now. Calling this function
-** does not free any Mem.zMalloc buffer.
+** If the memory cell contains a value that must be freed by
+** invoking the external callback in Mem.xDel, then this routine
+** will free that value. It also sets Mem.flags to MEM_Null.
+**
+** This is a helper routine for sqlite3VdbeMemSetNull() and
+** for sqlite3VdbeMemRelease(). Use those other routines as the
+** entry point for releasing Mem resources.
*/
-SQLITE_PRIVATE void sqlite3VdbeMemReleaseExternal(Mem *p){
+static SQLITE_NOINLINE void vdbeMemClearExternAndSetNull(Mem *p){
assert( p->db==0 || sqlite3_mutex_held(p->db->mutex) );
+ assert( VdbeMemDynamic(p) );
if( p->flags&MEM_Agg ){
sqlite3VdbeMemFinalize(p, p->u.pDef);
assert( (p->flags & MEM_Agg)==0 );
- sqlite3VdbeMemRelease(p);
- }else if( p->flags&MEM_Dyn ){
+ testcase( p->flags & MEM_Dyn );
+ }
+ if( p->flags&MEM_Dyn ){
assert( (p->flags&MEM_RowSet)==0 );
assert( p->xDel!=SQLITE_DYNAMIC && p->xDel!=0 );
p->xDel((void *)p->z);
- p->xDel = 0;
}else if( p->flags&MEM_RowSet ){
sqlite3RowSetClear(p->u.pRowSet);
}else if( p->flags&MEM_Frame ){
- sqlite3VdbeMemSetNull(p);
+ VdbeFrame *pFrame = p->u.pFrame;
+ pFrame->pParent = pFrame->v->pDelFrame;
+ pFrame->v->pDelFrame = pFrame;
}
+ p->flags = MEM_Null;
}
/*
-** Release any memory held by the Mem. This may leave the Mem in an
-** inconsistent state, for example with (Mem.z==0) and
-** (Mem.flags==MEM_Str).
+** Release memory held by the Mem p, both external memory cleared
+** by p->xDel and memory in p->zMalloc.
+**
+** This is a helper routine invoked by sqlite3VdbeMemRelease() in
+** the unusual case where there really is memory in p that needs
+** to be freed.
*/
-SQLITE_PRIVATE void sqlite3VdbeMemRelease(Mem *p){
- assert( sqlite3VdbeCheckMemInvariants(p) );
- VdbeMemRelease(p);
- if( p->zMalloc ){
+static SQLITE_NOINLINE void vdbeMemClear(Mem *p){
+ if( VdbeMemDynamic(p) ){
+ vdbeMemClearExternAndSetNull(p);
+ }
+ if( p->szMalloc ){
sqlite3DbFree(p->db, p->zMalloc);
- p->zMalloc = 0;
+ p->szMalloc = 0;
}
p->z = 0;
- assert( p->xDel==0 ); /* Zeroed by VdbeMemRelease() above */
+}
+
+/*
+** Release any memory resources held by the Mem. Both the memory that is
+** free by Mem.xDel and the Mem.zMalloc allocation are freed.
+**
+** Use this routine prior to clean up prior to abandoning a Mem, or to
+** reset a Mem back to its minimum memory utilization.
+**
+** Use sqlite3VdbeMemSetNull() to release just the Mem.xDel space
+** prior to inserting new content into the Mem.
+*/
+SQLITE_PRIVATE void sqlite3VdbeMemRelease(Mem *p){
+ assert( sqlite3VdbeCheckMemInvariants(p) );
+ if( VdbeMemDynamic(p) || p->szMalloc ){
+ vdbeMemClear(p);
+ }
}
/*
@@ -61193,7 +62109,7 @@ static i64 doubleToInt64(double r){
** If pMem is an integer, then the value is exact. If pMem is
** a floating-point then the value returned is the integer part.
** If pMem is a string or blob, then we make an attempt to convert
-** it into a integer and return that. If pMem represents an
+** it into an integer and return that. If pMem represents an
** an SQL-NULL value, return 0.
**
** If pMem represents a string value, its encoding might be changed.
@@ -61206,11 +62122,10 @@ SQLITE_PRIVATE i64 sqlite3VdbeIntValue(Mem *pMem){
if( flags & MEM_Int ){
return pMem->u.i;
}else if( flags & MEM_Real ){
- return doubleToInt64(pMem->r);
+ return doubleToInt64(pMem->u.r);
}else if( flags & (MEM_Str|MEM_Blob) ){
i64 value = 0;
assert( pMem->z || pMem->n==0 );
- testcase( pMem->z==0 );
sqlite3Atoi64(pMem->z, &value, pMem->n, pMem->enc);
return value;
}else{
@@ -61228,7 +62143,7 @@ SQLITE_PRIVATE double sqlite3VdbeRealValue(Mem *pMem){
assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
assert( EIGHT_BYTE_ALIGNMENT(pMem) );
if( pMem->flags & MEM_Real ){
- return pMem->r;
+ return pMem->u.r;
}else if( pMem->flags & MEM_Int ){
return (double)pMem->u.i;
}else if( pMem->flags & (MEM_Str|MEM_Blob) ){
@@ -61247,12 +62162,13 @@ SQLITE_PRIVATE double sqlite3VdbeRealValue(Mem *pMem){
** MEM_Int if we can.
*/
SQLITE_PRIVATE void sqlite3VdbeIntegerAffinity(Mem *pMem){
+ i64 ix;
assert( pMem->flags & MEM_Real );
assert( (pMem->flags & MEM_RowSet)==0 );
assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
assert( EIGHT_BYTE_ALIGNMENT(pMem) );
- pMem->u.i = doubleToInt64(pMem->r);
+ ix = doubleToInt64(pMem->u.r);
/* Only mark the value as an integer if
**
@@ -61264,11 +62180,9 @@ SQLITE_PRIVATE void sqlite3VdbeIntegerAffinity(Mem *pMem){
** the second condition under the assumption that addition overflow causes
** values to wrap around.
*/
- if( pMem->r==(double)pMem->u.i
- && pMem->u.i>SMALLEST_INT64
- && pMem->u.i<LARGEST_INT64
- ){
- pMem->flags |= MEM_Int;
+ if( pMem->u.r==ix && ix>SMALLEST_INT64 && ix<LARGEST_INT64 ){
+ pMem->u.i = ix;
+ MemSetTypeFlag(pMem, MEM_Int);
}
}
@@ -61293,7 +62207,7 @@ SQLITE_PRIVATE int sqlite3VdbeMemRealify(Mem *pMem){
assert( pMem->db==0 || sqlite3_mutex_held(pMem->db->mutex) );
assert( EIGHT_BYTE_ALIGNMENT(pMem) );
- pMem->r = sqlite3VdbeRealValue(pMem);
+ pMem->u.r = sqlite3VdbeRealValue(pMem);
MemSetTypeFlag(pMem, MEM_Real);
return SQLITE_OK;
}
@@ -61313,7 +62227,7 @@ SQLITE_PRIVATE int sqlite3VdbeMemNumerify(Mem *pMem){
if( 0==sqlite3Atoi64(pMem->z, &pMem->u.i, pMem->n, pMem->enc) ){
MemSetTypeFlag(pMem, MEM_Int);
}else{
- pMem->r = sqlite3VdbeRealValue(pMem);
+ pMem->u.r = sqlite3VdbeRealValue(pMem);
MemSetTypeFlag(pMem, MEM_Real);
sqlite3VdbeIntegerAffinity(pMem);
}
@@ -61324,18 +62238,80 @@ SQLITE_PRIVATE int sqlite3VdbeMemNumerify(Mem *pMem){
}
/*
+** Cast the datatype of the value in pMem according to the affinity
+** "aff". Casting is different from applying affinity in that a cast
+** is forced. In other words, the value is converted into the desired
+** affinity even if that results in loss of data. This routine is
+** used (for example) to implement the SQL "cast()" operator.
+*/
+SQLITE_PRIVATE void sqlite3VdbeMemCast(Mem *pMem, u8 aff, u8 encoding){
+ if( pMem->flags & MEM_Null ) return;
+ switch( aff ){
+ case SQLITE_AFF_NONE: { /* Really a cast to BLOB */
+ if( (pMem->flags & MEM_Blob)==0 ){
+ sqlite3ValueApplyAffinity(pMem, SQLITE_AFF_TEXT, encoding);
+ assert( pMem->flags & MEM_Str || pMem->db->mallocFailed );
+ MemSetTypeFlag(pMem, MEM_Blob);
+ }else{
+ pMem->flags &= ~(MEM_TypeMask&~MEM_Blob);
+ }
+ break;
+ }
+ case SQLITE_AFF_NUMERIC: {
+ sqlite3VdbeMemNumerify(pMem);
+ break;
+ }
+ case SQLITE_AFF_INTEGER: {
+ sqlite3VdbeMemIntegerify(pMem);
+ break;
+ }
+ case SQLITE_AFF_REAL: {
+ sqlite3VdbeMemRealify(pMem);
+ break;
+ }
+ default: {
+ assert( aff==SQLITE_AFF_TEXT );
+ assert( MEM_Str==(MEM_Blob>>3) );
+ pMem->flags |= (pMem->flags&MEM_Blob)>>3;
+ sqlite3ValueApplyAffinity(pMem, SQLITE_AFF_TEXT, encoding);
+ assert( pMem->flags & MEM_Str || pMem->db->mallocFailed );
+ pMem->flags &= ~(MEM_Int|MEM_Real|MEM_Blob|MEM_Zero);
+ break;
+ }
+ }
+}
+
+/*
+** Initialize bulk memory to be a consistent Mem object.
+**
+** The minimum amount of initialization feasible is performed.
+*/
+SQLITE_PRIVATE void sqlite3VdbeMemInit(Mem *pMem, sqlite3 *db, u16 flags){
+ assert( (flags & ~MEM_TypeMask)==0 );
+ pMem->flags = flags;
+ pMem->db = db;
+ pMem->szMalloc = 0;
+}
+
+
+/*
** Delete any previous value and set the value stored in *pMem to NULL.
+**
+** This routine calls the Mem.xDel destructor to dispose of values that
+** require the destructor. But it preserves the Mem.zMalloc memory allocation.
+** To free all resources, use sqlite3VdbeMemRelease(), which both calls this
+** routine to invoke the destructor and deallocates Mem.zMalloc.
+**
+** Use this routine to reset the Mem prior to insert a new value.
+**
+** Use sqlite3VdbeMemRelease() to complete erase the Mem prior to abandoning it.
*/
SQLITE_PRIVATE void sqlite3VdbeMemSetNull(Mem *pMem){
- if( pMem->flags & MEM_Frame ){
- VdbeFrame *pFrame = pMem->u.pFrame;
- pFrame->pParent = pFrame->v->pDelFrame;
- pFrame->v->pDelFrame = pFrame;
- }
- if( pMem->flags & MEM_RowSet ){
- sqlite3RowSetClear(pMem->u.pRowSet);
+ if( VdbeMemDynamic(pMem) ){
+ vdbeMemClearExternAndSetNull(pMem);
+ }else{
+ pMem->flags = MEM_Null;
}
- MemSetTypeFlag(pMem, MEM_Null);
}
SQLITE_PRIVATE void sqlite3ValueSetNull(sqlite3_value *p){
sqlite3VdbeMemSetNull((Mem*)p);
@@ -61352,14 +62328,18 @@ SQLITE_PRIVATE void sqlite3VdbeMemSetZeroBlob(Mem *pMem, int n){
if( n<0 ) n = 0;
pMem->u.nZero = n;
pMem->enc = SQLITE_UTF8;
+ pMem->z = 0;
+}
-#ifdef SQLITE_OMIT_INCRBLOB
- sqlite3VdbeMemGrow(pMem, n, 0);
- if( pMem->z ){
- pMem->n = n;
- memset(pMem->z, 0, n);
- }
-#endif
+/*
+** The pMem is known to contain content that needs to be destroyed prior
+** to a value change. So invoke the destructor, then set the value to
+** a 64-bit integer.
+*/
+static SQLITE_NOINLINE void vdbeReleaseAndSetInt64(Mem *pMem, i64 val){
+ sqlite3VdbeMemSetNull(pMem);
+ pMem->u.i = val;
+ pMem->flags = MEM_Int;
}
/*
@@ -61367,9 +62347,12 @@ SQLITE_PRIVATE void sqlite3VdbeMemSetZeroBlob(Mem *pMem, int n){
** manifest type INTEGER.
*/
SQLITE_PRIVATE void sqlite3VdbeMemSetInt64(Mem *pMem, i64 val){
- sqlite3VdbeMemRelease(pMem);
- pMem->u.i = val;
- pMem->flags = MEM_Int;
+ if( VdbeMemDynamic(pMem) ){
+ vdbeReleaseAndSetInt64(pMem, val);
+ }else{
+ pMem->u.i = val;
+ pMem->flags = MEM_Int;
+ }
}
#ifndef SQLITE_OMIT_FLOATING_POINT
@@ -61378,11 +62361,9 @@ SQLITE_PRIVATE void sqlite3VdbeMemSetInt64(Mem *pMem, i64 val){
** manifest type REAL.
*/
SQLITE_PRIVATE void sqlite3VdbeMemSetDouble(Mem *pMem, double val){
- if( sqlite3IsNaN(val) ){
- sqlite3VdbeMemSetNull(pMem);
- }else{
- sqlite3VdbeMemRelease(pMem);
- pMem->r = val;
+ sqlite3VdbeMemSetNull(pMem);
+ if( !sqlite3IsNaN(val) ){
+ pMem->u.r = val;
pMem->flags = MEM_Real;
}
}
@@ -61400,10 +62381,11 @@ SQLITE_PRIVATE void sqlite3VdbeMemSetRowSet(Mem *pMem){
pMem->zMalloc = sqlite3DbMallocRaw(db, 64);
if( db->mallocFailed ){
pMem->flags = MEM_Null;
+ pMem->szMalloc = 0;
}else{
assert( pMem->zMalloc );
- pMem->u.pRowSet = sqlite3RowSetInit(db, pMem->zMalloc,
- sqlite3DbMallocSize(db, pMem->zMalloc));
+ pMem->szMalloc = sqlite3DbMallocSize(db, pMem->zMalloc);
+ pMem->u.pRowSet = sqlite3RowSetInit(db, pMem->zMalloc, pMem->szMalloc);
assert( pMem->u.pRowSet!=0 );
pMem->flags = MEM_RowSet;
}
@@ -61427,7 +62409,7 @@ SQLITE_PRIVATE int sqlite3VdbeMemTooBig(Mem *p){
#ifdef SQLITE_DEBUG
/*
-** This routine prepares a memory cell for modication by breaking
+** This routine prepares a memory cell for modification by breaking
** its link to a shallow copy and by marking any current shallow
** copies of this cell as invalid.
**
@@ -61460,9 +62442,9 @@ SQLITE_PRIVATE void sqlite3VdbeMemAboutToChange(Vdbe *pVdbe, Mem *pMem){
*/
SQLITE_PRIVATE void sqlite3VdbeMemShallowCopy(Mem *pTo, const Mem *pFrom, int srcType){
assert( (pFrom->flags & MEM_RowSet)==0 );
- VdbeMemRelease(pTo);
+ assert( pTo->db==pFrom->db );
+ if( VdbeMemDynamic(pTo) ) vdbeMemClearExternAndSetNull(pTo);
memcpy(pTo, pFrom, MEMCELLSIZE);
- pTo->xDel = 0;
if( (pFrom->flags&MEM_Static)==0 ){
pTo->flags &= ~(MEM_Dyn|MEM_Static|MEM_Ephem);
assert( srcType==MEM_Ephem || srcType==MEM_Static );
@@ -61477,12 +62459,11 @@ SQLITE_PRIVATE void sqlite3VdbeMemShallowCopy(Mem *pTo, const Mem *pFrom, int sr
SQLITE_PRIVATE int sqlite3VdbeMemCopy(Mem *pTo, const Mem *pFrom){
int rc = SQLITE_OK;
+ assert( pTo->db==pFrom->db );
assert( (pFrom->flags & MEM_RowSet)==0 );
- VdbeMemRelease(pTo);
+ if( VdbeMemDynamic(pTo) ) vdbeMemClearExternAndSetNull(pTo);
memcpy(pTo, pFrom, MEMCELLSIZE);
pTo->flags &= ~MEM_Dyn;
- pTo->xDel = 0;
-
if( pTo->flags&(MEM_Str|MEM_Blob) ){
if( 0==(pFrom->flags&MEM_Static) ){
pTo->flags |= MEM_Ephem;
@@ -61507,8 +62488,7 @@ SQLITE_PRIVATE void sqlite3VdbeMemMove(Mem *pTo, Mem *pFrom){
sqlite3VdbeMemRelease(pTo);
memcpy(pTo, pFrom, sizeof(Mem));
pFrom->flags = MEM_Null;
- pFrom->xDel = 0;
- pFrom->zMalloc = 0;
+ pFrom->szMalloc = 0;
}
/*
@@ -61555,7 +62535,8 @@ SQLITE_PRIVATE int sqlite3VdbeMemSetStr(
if( nByte<0 ){
assert( enc!=0 );
if( enc==SQLITE_UTF8 ){
- for(nByte=0; nByte<=iLimit && z[nByte]; nByte++){}
+ nByte = sqlite3Strlen30(z);
+ if( nByte>iLimit ) nByte = iLimit+1;
}else{
for(nByte=0; nByte<=iLimit && (z[nByte] | z[nByte+1]); nByte+=2){}
}
@@ -61574,14 +62555,17 @@ SQLITE_PRIVATE int sqlite3VdbeMemSetStr(
if( nByte>iLimit ){
return SQLITE_TOOBIG;
}
- if( sqlite3VdbeMemGrow(pMem, nAlloc, 0) ){
+ testcase( nAlloc==0 );
+ testcase( nAlloc==31 );
+ testcase( nAlloc==32 );
+ if( sqlite3VdbeMemClearAndResize(pMem, MAX(nAlloc,32)) ){
return SQLITE_NOMEM;
}
memcpy(pMem->z, z, nAlloc);
}else if( xDel==SQLITE_DYNAMIC ){
sqlite3VdbeMemRelease(pMem);
pMem->zMalloc = pMem->z = (char *)z;
- pMem->xDel = 0;
+ pMem->szMalloc = sqlite3DbMallocSize(pMem->db, pMem->zMalloc);
}else{
sqlite3VdbeMemRelease(pMem);
pMem->z = (char *)z;
@@ -61613,8 +62597,11 @@ SQLITE_PRIVATE int sqlite3VdbeMemSetStr(
** key is true to get the key or false to get data. The result is written
** into the pMem element.
**
-** The pMem structure is assumed to be uninitialized. Any prior content
-** is overwritten without being freed.
+** The pMem object must have been initialized. This routine will use
+** pMem->zMalloc to hold the content from the btree, if possible. New
+** pMem->zMalloc space will be allocated if necessary. The calling routine
+** is responsible for making sure that the pMem object is eventually
+** destroyed.
**
** If this routine fails for any reason (malloc returns NULL or unable
** to read from the disk) then the pMem is left in an inconsistent state.
@@ -61631,6 +62618,7 @@ SQLITE_PRIVATE int sqlite3VdbeMemFromBtree(
int rc = SQLITE_OK; /* Return code */
assert( sqlite3BtreeCursorIsValid(pCur) );
+ assert( !VdbeMemDynamic(pMem) );
/* Note: the calls to BtreeKeyFetch() and DataFetch() below assert()
** that both the BtShared and database handle mutexes are held. */
@@ -61643,54 +62631,50 @@ SQLITE_PRIVATE int sqlite3VdbeMemFromBtree(
assert( zData!=0 );
if( offset+amt<=available ){
- sqlite3VdbeMemRelease(pMem);
pMem->z = &zData[offset];
pMem->flags = MEM_Blob|MEM_Ephem;
pMem->n = (int)amt;
- }else if( SQLITE_OK==(rc = sqlite3VdbeMemGrow(pMem, amt+2, 0)) ){
- if( key ){
- rc = sqlite3BtreeKey(pCur, offset, amt, pMem->z);
- }else{
- rc = sqlite3BtreeData(pCur, offset, amt, pMem->z);
- }
- if( rc==SQLITE_OK ){
- pMem->z[amt] = 0;
- pMem->z[amt+1] = 0;
- pMem->flags = MEM_Blob|MEM_Term;
- pMem->n = (int)amt;
- }else{
- sqlite3VdbeMemRelease(pMem);
+ }else{
+ pMem->flags = MEM_Null;
+ if( SQLITE_OK==(rc = sqlite3VdbeMemClearAndResize(pMem, amt+2)) ){
+ if( key ){
+ rc = sqlite3BtreeKey(pCur, offset, amt, pMem->z);
+ }else{
+ rc = sqlite3BtreeData(pCur, offset, amt, pMem->z);
+ }
+ if( rc==SQLITE_OK ){
+ pMem->z[amt] = 0;
+ pMem->z[amt+1] = 0;
+ pMem->flags = MEM_Blob|MEM_Term;
+ pMem->n = (int)amt;
+ }else{
+ sqlite3VdbeMemRelease(pMem);
+ }
}
}
return rc;
}
-/* This function is only available internally, it is not part of the
-** external API. It works in a similar way to sqlite3_value_text(),
-** except the data returned is in the encoding specified by the second
-** parameter, which must be one of SQLITE_UTF16BE, SQLITE_UTF16LE or
-** SQLITE_UTF8.
-**
-** (2006-02-16:) The enc value can be or-ed with SQLITE_UTF16_ALIGNED.
-** If that is the case, then the result must be aligned on an even byte
-** boundary.
+/*
+** The pVal argument is known to be a value other than NULL.
+** Convert it into a string with encoding enc and return a pointer
+** to a zero-terminated version of that string.
*/
-SQLITE_PRIVATE const void *sqlite3ValueText(sqlite3_value* pVal, u8 enc){
- if( !pVal ) return 0;
-
+static SQLITE_NOINLINE const void *valueToText(sqlite3_value* pVal, u8 enc){
+ assert( pVal!=0 );
assert( pVal->db==0 || sqlite3_mutex_held(pVal->db->mutex) );
assert( (enc&3)==(enc&~SQLITE_UTF16_ALIGNED) );
assert( (pVal->flags & MEM_RowSet)==0 );
-
- if( pVal->flags&MEM_Null ){
- return 0;
- }
- assert( (MEM_Blob>>3) == MEM_Str );
- pVal->flags |= (pVal->flags & MEM_Blob)>>3;
- ExpandBlob(pVal);
- if( pVal->flags&MEM_Str ){
- sqlite3VdbeChangeEncoding(pVal, enc & ~SQLITE_UTF16_ALIGNED);
+ assert( (pVal->flags & (MEM_Null))==0 );
+ if( pVal->flags & (MEM_Blob|MEM_Str) ){
+ pVal->flags |= MEM_Str;
+ if( pVal->flags & MEM_Zero ){
+ sqlite3VdbeMemExpandBlob(pVal);
+ }
+ if( pVal->enc != (enc & ~SQLITE_UTF16_ALIGNED) ){
+ sqlite3VdbeChangeEncoding(pVal, enc & ~SQLITE_UTF16_ALIGNED);
+ }
if( (enc & SQLITE_UTF16_ALIGNED)!=0 && 1==(1&SQLITE_PTR_TO_INT(pVal->z)) ){
assert( (pVal->flags & (MEM_Ephem|MEM_Static))!=0 );
if( sqlite3VdbeMemMakeWriteable(pVal)!=SQLITE_OK ){
@@ -61699,8 +62683,7 @@ SQLITE_PRIVATE const void *sqlite3ValueText(sqlite3_value* pVal, u8 enc){
}
sqlite3VdbeMemNulTerminate(pVal); /* IMP: R-31275-44060 */
}else{
- assert( (pVal->flags&MEM_Blob)==0 );
- sqlite3VdbeMemStringify(pVal, enc);
+ sqlite3VdbeMemStringify(pVal, enc, 0);
assert( 0==(1&SQLITE_PTR_TO_INT(pVal->z)) );
}
assert(pVal->enc==(enc & ~SQLITE_UTF16_ALIGNED) || pVal->db==0
@@ -61712,6 +62695,30 @@ SQLITE_PRIVATE const void *sqlite3ValueText(sqlite3_value* pVal, u8 enc){
}
}
+/* This function is only available internally, it is not part of the
+** external API. It works in a similar way to sqlite3_value_text(),
+** except the data returned is in the encoding specified by the second
+** parameter, which must be one of SQLITE_UTF16BE, SQLITE_UTF16LE or
+** SQLITE_UTF8.
+**
+** (2006-02-16:) The enc value can be or-ed with SQLITE_UTF16_ALIGNED.
+** If that is the case, then the result must be aligned on an even byte
+** boundary.
+*/
+SQLITE_PRIVATE const void *sqlite3ValueText(sqlite3_value* pVal, u8 enc){
+ if( !pVal ) return 0;
+ assert( pVal->db==0 || sqlite3_mutex_held(pVal->db->mutex) );
+ assert( (enc&3)==(enc&~SQLITE_UTF16_ALIGNED) );
+ assert( (pVal->flags & MEM_RowSet)==0 );
+ if( (pVal->flags&(MEM_Str|MEM_Term))==(MEM_Str|MEM_Term) && pVal->enc==enc ){
+ return pVal->z;
+ }
+ if( pVal->flags&MEM_Null ){
+ return 0;
+ }
+ return valueToText(pVal, enc);
+}
+
/*
** Create a new sqlite3_value object.
*/
@@ -61816,9 +62823,20 @@ static int valueFromExpr(
*ppVal = 0;
return SQLITE_OK;
}
- op = pExpr->op;
+ while( (op = pExpr->op)==TK_UPLUS ) pExpr = pExpr->pLeft;
if( NEVER(op==TK_REGISTER) ) op = pExpr->op2;
+ if( op==TK_CAST ){
+ u8 aff = sqlite3AffinityType(pExpr->u.zToken,0);
+ rc = valueFromExpr(db, pExpr->pLeft, enc, aff, ppVal, pCtx);
+ testcase( rc!=SQLITE_OK );
+ if( *ppVal ){
+ sqlite3VdbeMemCast(*ppVal, aff, SQLITE_UTF8);
+ sqlite3ValueApplyAffinity(*ppVal, affinity, SQLITE_UTF8);
+ }
+ return rc;
+ }
+
/* Handle negative integers in a single step. This is needed in the
** case when the value is -9223372036854775808.
*/
@@ -61855,14 +62873,14 @@ static int valueFromExpr(
&& pVal!=0
){
sqlite3VdbeMemNumerify(pVal);
- if( pVal->u.i==SMALLEST_INT64 ){
- pVal->flags &= ~MEM_Int;
- pVal->flags |= MEM_Real;
- pVal->r = (double)SMALLEST_INT64;
+ if( pVal->flags & MEM_Real ){
+ pVal->u.r = -pVal->u.r;
+ }else if( pVal->u.i==SMALLEST_INT64 ){
+ pVal->u.r = -(double)SMALLEST_INT64;
+ MemSetTypeFlag(pVal, MEM_Real);
}else{
pVal->u.i = -pVal->u.i;
}
- pVal->r = -pVal->r;
sqlite3ValueApplyAffinity(pVal, affinity, enc);
}
}else if( op==TK_NULL ){
@@ -61953,7 +62971,7 @@ static void recordFunc(
sqlite3_result_error_nomem(context);
}else{
aRet[0] = nSerial+1;
- sqlite3PutVarint(&aRet[1], iSerial);
+ putVarint32(&aRet[1], iSerial);
sqlite3VdbeSerialPut(&aRet[1+nSerial], argv[0], iSerial);
sqlite3_result_blob(context, aRet, nRet, SQLITE_TRANSIENT);
sqlite3DbFree(db, aRet);
@@ -62170,7 +63188,7 @@ SQLITE_PRIVATE void sqlite3Stat4ProbeFree(UnpackedRecord *pRec){
Mem *aMem = pRec->aMem;
sqlite3 *db = aMem[0].db;
for(i=0; i<nCol; i++){
- sqlite3DbFree(db, aMem[i].zMalloc);
+ if( aMem[i].szMalloc ) sqlite3DbFree(db, aMem[i].zMalloc);
}
sqlite3KeyInfoUnref(pRec->pKeyInfo);
sqlite3DbFree(db, pRec);
@@ -62230,9 +63248,7 @@ SQLITE_PRIVATE int sqlite3ValueBytes(sqlite3_value *pVal, u8 enc){
**
*************************************************************************
** This file contains code used for creating, destroying, and populating
-** a VDBE (or an "sqlite3_stmt" as it is known to the outside world.) Prior
-** to version 2.8.7, all this code was combined into the vdbe.c source file.
-** But that file was getting too big so this subroutines were split out.
+** a VDBE (or an "sqlite3_stmt" as it is known to the outside world.)
*/
/*
@@ -62916,7 +63932,7 @@ static void freeP4(sqlite3 *db, int p4type, void *p4){
sqlite3ValueFree((sqlite3_value*)p4);
}else{
Mem *p = (Mem*)p4;
- sqlite3DbFree(db, p->zMalloc);
+ if( p->szMalloc ) sqlite3DbFree(db, p->zMalloc);
sqlite3DbFree(db, p);
}
break;
@@ -62972,7 +63988,8 @@ SQLITE_PRIVATE void sqlite3VdbeChangeToNoop(Vdbe *p, int addr){
}
/*
-** Remove the last opcode inserted
+** If the last opcode is "op" and it is not a jump destination,
+** then remove it. Return true if and only if an opcode was removed.
*/
SQLITE_PRIVATE int sqlite3VdbeDeletePriorOpcode(Vdbe *p, u8 op){
if( (p->nOp-1)>(p->pParse->iFixedOp) && p->aOp[p->nOp-1].opcode==op ){
@@ -63113,7 +64130,7 @@ SQLITE_PRIVATE void sqlite3VdbeSetLineNumber(Vdbe *v, int iLine){
** routine, then a pointer to a dummy VdbeOp will be returned. That opcode
** is readable but not writable, though it is cast to a writable value.
** The return of a dummy opcode allows the call to continue functioning
-** after a OOM fault without having to check to see if the return from
+** after an OOM fault without having to check to see if the return from
** this routine is a valid pointer. But because the dummy.opcode is 0,
** dummy will never be written to. This is verified by code inspection and
** by running with Valgrind.
@@ -63294,7 +64311,7 @@ static char *displayP4(Op *pOp, char *zTemp, int nTemp){
}else if( pMem->flags & MEM_Int ){
sqlite3_snprintf(nTemp, zTemp, "%lld", pMem->u.i);
}else if( pMem->flags & MEM_Real ){
- sqlite3_snprintf(nTemp, zTemp, "%.16g", pMem->r);
+ sqlite3_snprintf(nTemp, zTemp, "%.16g", pMem->u.r);
}else if( pMem->flags & MEM_Null ){
sqlite3_snprintf(nTemp, zTemp, "NULL");
}else{
@@ -63444,16 +64461,16 @@ SQLITE_PRIVATE void sqlite3VdbePrintOp(FILE *pOut, int pc, Op *pOp){
*/
static void releaseMemArray(Mem *p, int N){
if( p && N ){
- Mem *pEnd;
+ Mem *pEnd = &p[N];
sqlite3 *db = p->db;
u8 malloc_failed = db->mallocFailed;
if( db->pnBytesFreed ){
- for(pEnd=&p[N]; p<pEnd; p++){
- sqlite3DbFree(db, p->zMalloc);
- }
+ do{
+ if( p->szMalloc ) sqlite3DbFree(db, p->zMalloc);
+ }while( (++p)<pEnd );
return;
}
- for(pEnd=&p[N]; p<pEnd; p++){
+ do{
assert( (&p[1])==pEnd || p[0].db==p[1].db );
assert( sqlite3VdbeCheckMemInvariants(p) );
@@ -63475,13 +64492,13 @@ static void releaseMemArray(Mem *p, int N){
testcase( p->flags & MEM_RowSet );
if( p->flags&(MEM_Agg|MEM_Dyn|MEM_Frame|MEM_RowSet) ){
sqlite3VdbeMemRelease(p);
- }else if( p->zMalloc ){
+ }else if( p->szMalloc ){
sqlite3DbFree(db, p->zMalloc);
- p->zMalloc = 0;
+ p->szMalloc = 0;
}
p->flags = MEM_Undefined;
- }
+ }while( (++p)<pEnd );
db->mallocFailed = malloc_failed;
}
}
@@ -63644,7 +64661,7 @@ SQLITE_PRIVATE int sqlite3VdbeList(
pMem->u.i = pOp->p3; /* P3 */
pMem++;
- if( sqlite3VdbeMemGrow(pMem, 32, 0) ){ /* P4 */
+ if( sqlite3VdbeMemClearAndResize(pMem, 32) ){ /* P4 */
assert( p->db->mallocFailed );
return SQLITE_ERROR;
}
@@ -63660,7 +64677,7 @@ SQLITE_PRIVATE int sqlite3VdbeList(
pMem++;
if( p->explain==1 ){
- if( sqlite3VdbeMemGrow(pMem, 4, 0) ){
+ if( sqlite3VdbeMemClearAndResize(pMem, 4) ){
assert( p->db->mallocFailed );
return SQLITE_ERROR;
}
@@ -63671,7 +64688,7 @@ SQLITE_PRIVATE int sqlite3VdbeList(
pMem++;
#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS
- if( sqlite3VdbeMemGrow(pMem, 500, 0) ){
+ if( sqlite3VdbeMemClearAndResize(pMem, 500) ){
assert( p->db->mallocFailed );
return SQLITE_ERROR;
}
@@ -63824,13 +64841,13 @@ SQLITE_PRIVATE void sqlite3VdbeRewind(Vdbe *p){
/*
** Prepare a virtual machine for execution for the first time after
** creating the virtual machine. This involves things such
-** as allocating stack space and initializing the program counter.
+** as allocating registers and initializing the program counter.
** After the VDBE has be prepped, it can be executed by one or more
** calls to sqlite3VdbeExec().
**
-** This function may be called exact once on a each virtual machine.
+** This function may be called exactly once on each virtual machine.
** After this routine is called the VM has been "packaged" and is ready
-** to run. After this routine is called, futher calls to
+** to run. After this routine is called, further calls to
** sqlite3VdbeAddOp() functions are prohibited. This routine disconnects
** the Vdbe from the Parse object that helped generate it so that the
** the Vdbe becomes an independent entity and the Parse object can be
@@ -63964,7 +64981,7 @@ SQLITE_PRIVATE void sqlite3VdbeFreeCursor(Vdbe *p, VdbeCursor *pCx){
sqlite3BtreeCloseCursor(pCx->pCursor);
}
#ifndef SQLITE_OMIT_VIRTUALTABLE
- if( pCx->pVtabCursor ){
+ else if( pCx->pVtabCursor ){
sqlite3_vtab_cursor *pVtabCursor = pCx->pVtabCursor;
const sqlite3_module *pModule = pVtabCursor->pVtab->pModule;
p->inVtabMethod = 1;
@@ -64007,9 +65024,10 @@ static void closeAllCursors(Vdbe *p){
VdbeFrame *pFrame;
for(pFrame=p->pFrame; pFrame->pParent; pFrame=pFrame->pParent);
sqlite3VdbeFrameRestore(pFrame);
+ p->pFrame = 0;
+ p->nFrame = 0;
}
- p->pFrame = 0;
- p->nFrame = 0;
+ assert( p->nFrame==0 );
if( p->apCsr ){
int i;
@@ -64031,16 +65049,12 @@ static void closeAllCursors(Vdbe *p){
}
/* Delete any auxdata allocations made by the VM */
- sqlite3VdbeDeleteAuxData(p, -1, 0);
+ if( p->pAuxData ) sqlite3VdbeDeleteAuxData(p, -1, 0);
assert( p->pAuxData==0 );
}
/*
-** Clean up the VM after execution.
-**
-** This routine will automatically close any cursors, lists, and/or
-** sorters that were left open. It also deletes the values of
-** variables in the aVar[] array.
+** Clean up the VM after a single run.
*/
static void Cleanup(Vdbe *p){
sqlite3 *db = p->db;
@@ -64208,7 +65222,7 @@ static int vdbeCommit(sqlite3 *db, Vdbe *p){
/* The complex case - There is a multi-file write-transaction active.
** This requires a master journal file to ensure the transaction is
- ** committed atomicly.
+ ** committed atomically.
*/
#ifndef SQLITE_OMIT_DISKIO
else{
@@ -64715,7 +65729,7 @@ SQLITE_PRIVATE int sqlite3VdbeTransferError(Vdbe *p){
db->mallocFailed = mallocFailed;
db->errCode = rc;
}else{
- sqlite3Error(db, rc, 0);
+ sqlite3Error(db, rc);
}
return rc;
}
@@ -64778,7 +65792,7 @@ SQLITE_PRIVATE int sqlite3VdbeReset(Vdbe *p){
** to sqlite3_step(). For consistency (since sqlite3_step() was
** called), set the database error in this case as well.
*/
- sqlite3Error(db, p->rc, p->zErrMsg ? "%s" : 0, p->zErrMsg);
+ sqlite3ErrorWithMsg(db, p->rc, p->zErrMsg ? "%s" : 0, p->zErrMsg);
sqlite3DbFree(db, p->zErrMsg);
p->zErrMsg = 0;
}
@@ -64856,7 +65870,7 @@ SQLITE_PRIVATE int sqlite3VdbeFinalize(Vdbe *p){
** from left to right), or
**
** * the corresponding bit in argument mask is clear (where the first
-** function parameter corrsponds to bit 0 etc.).
+** function parameter corresponds to bit 0 etc.).
*/
SQLITE_PRIVATE void sqlite3VdbeDeleteAuxData(Vdbe *pVdbe, int iOp, int mask){
AuxData **pp = &pVdbe->pAuxData;
@@ -64901,10 +65915,6 @@ SQLITE_PRIVATE void sqlite3VdbeClearObject(sqlite3 *db, Vdbe *p){
sqlite3DbFree(db, p->aColName);
sqlite3DbFree(db, p->zSql);
sqlite3DbFree(db, p->pFree);
-#if defined(SQLITE_ENABLE_TREE_EXPLAIN)
- sqlite3DbFree(db, p->zExplain);
- sqlite3DbFree(db, p->pExplain);
-#endif
}
/*
@@ -64932,6 +65942,57 @@ SQLITE_PRIVATE void sqlite3VdbeDelete(Vdbe *p){
}
/*
+** The cursor "p" has a pending seek operation that has not yet been
+** carried out. Seek the cursor now. If an error occurs, return
+** the appropriate error code.
+*/
+static int SQLITE_NOINLINE handleDeferredMoveto(VdbeCursor *p){
+ int res, rc;
+#ifdef SQLITE_TEST
+ extern int sqlite3_search_count;
+#endif
+ assert( p->deferredMoveto );
+ assert( p->isTable );
+ rc = sqlite3BtreeMovetoUnpacked(p->pCursor, 0, p->movetoTarget, 0, &res);
+ if( rc ) return rc;
+ if( res!=0 ) return SQLITE_CORRUPT_BKPT;
+#ifdef SQLITE_TEST
+ sqlite3_search_count++;
+#endif
+ p->deferredMoveto = 0;
+ p->cacheStatus = CACHE_STALE;
+ return SQLITE_OK;
+}
+
+/*
+** Something has moved cursor "p" out of place. Maybe the row it was
+** pointed to was deleted out from under it. Or maybe the btree was
+** rebalanced. Whatever the cause, try to restore "p" to the place it
+** is supposed to be pointing. If the row was deleted out from under the
+** cursor, set the cursor to point to a NULL row.
+*/
+static int SQLITE_NOINLINE handleMovedCursor(VdbeCursor *p){
+ int isDifferentRow, rc;
+ assert( p->pCursor!=0 );
+ assert( sqlite3BtreeCursorHasMoved(p->pCursor) );
+ rc = sqlite3BtreeCursorRestore(p->pCursor, &isDifferentRow);
+ p->cacheStatus = CACHE_STALE;
+ if( isDifferentRow ) p->nullRow = 1;
+ return rc;
+}
+
+/*
+** Check to ensure that the cursor is valid. Restore the cursor
+** if need be. Return any I/O error from the restore operation.
+*/
+SQLITE_PRIVATE int sqlite3VdbeCursorRestore(VdbeCursor *p){
+ if( sqlite3BtreeCursorHasMoved(p->pCursor) ){
+ return handleMovedCursor(p);
+ }
+ return SQLITE_OK;
+}
+
+/*
** Make sure the cursor p is ready to read or write the row to which it
** was last positioned. Return an error code if an OOM fault or I/O error
** prevents us from positioning the cursor to its correct position.
@@ -64946,29 +66007,10 @@ SQLITE_PRIVATE void sqlite3VdbeDelete(Vdbe *p){
*/
SQLITE_PRIVATE int sqlite3VdbeCursorMoveto(VdbeCursor *p){
if( p->deferredMoveto ){
- int res, rc;
-#ifdef SQLITE_TEST
- extern int sqlite3_search_count;
-#endif
- assert( p->isTable );
- rc = sqlite3BtreeMovetoUnpacked(p->pCursor, 0, p->movetoTarget, 0, &res);
- if( rc ) return rc;
- p->lastRowid = p->movetoTarget;
- if( res!=0 ) return SQLITE_CORRUPT_BKPT;
- p->rowidIsValid = 1;
-#ifdef SQLITE_TEST
- sqlite3_search_count++;
-#endif
- p->deferredMoveto = 0;
- p->cacheStatus = CACHE_STALE;
- }else if( p->pCursor ){
- int hasMoved;
- int rc = sqlite3BtreeCursorHasMoved(p->pCursor, &hasMoved);
- if( rc ) return rc;
- if( hasMoved ){
- p->cacheStatus = CACHE_STALE;
- if( hasMoved==2 ) p->nullRow = 1;
- }
+ return handleDeferredMoveto(p);
+ }
+ if( p->pCursor && sqlite3BtreeCursorHasMoved(p->pCursor) ){
+ return handleMovedCursor(p);
}
return SQLITE_OK;
}
@@ -65144,17 +66186,18 @@ SQLITE_PRIVATE u32 sqlite3VdbeSerialPut(u8 *buf, Mem *pMem, u32 serial_type){
u64 v;
u32 i;
if( serial_type==7 ){
- assert( sizeof(v)==sizeof(pMem->r) );
- memcpy(&v, &pMem->r, sizeof(v));
+ assert( sizeof(v)==sizeof(pMem->u.r) );
+ memcpy(&v, &pMem->u.r, sizeof(v));
swapMixedEndianFloat(v);
}else{
v = pMem->u.i;
}
len = i = sqlite3VdbeSerialTypeLen(serial_type);
- while( i-- ){
- buf[i] = (u8)(v&0xFF);
+ assert( i>0 );
+ do{
+ buf[--i] = (u8)(v&0xFF);
v >>= 8;
- }
+ }while( i );
return len;
}
@@ -65178,18 +66221,54 @@ SQLITE_PRIVATE u32 sqlite3VdbeSerialPut(u8 *buf, Mem *pMem, u32 serial_type){
#define TWO_BYTE_INT(x) (256*(i8)((x)[0])|(x)[1])
#define THREE_BYTE_INT(x) (65536*(i8)((x)[0])|((x)[1]<<8)|(x)[2])
#define FOUR_BYTE_UINT(x) (((u32)(x)[0]<<24)|((x)[1]<<16)|((x)[2]<<8)|(x)[3])
+#define FOUR_BYTE_INT(x) (16777216*(i8)((x)[0])|((x)[1]<<16)|((x)[2]<<8)|(x)[3])
/*
** Deserialize the data blob pointed to by buf as serial type serial_type
** and store the result in pMem. Return the number of bytes read.
+**
+** This function is implemented as two separate routines for performance.
+** The few cases that require local variables are broken out into a separate
+** routine so that in most cases the overhead of moving the stack pointer
+** is avoided.
*/
+static u32 SQLITE_NOINLINE serialGet(
+ const unsigned char *buf, /* Buffer to deserialize from */
+ u32 serial_type, /* Serial type to deserialize */
+ Mem *pMem /* Memory cell to write value into */
+){
+ u64 x = FOUR_BYTE_UINT(buf);
+ u32 y = FOUR_BYTE_UINT(buf+4);
+ x = (x<<32) + y;
+ if( serial_type==6 ){
+ pMem->u.i = *(i64*)&x;
+ pMem->flags = MEM_Int;
+ testcase( pMem->u.i<0 );
+ }else{
+#if !defined(NDEBUG) && !defined(SQLITE_OMIT_FLOATING_POINT)
+ /* Verify that integers and floating point values use the same
+ ** byte order. Or, that if SQLITE_MIXED_ENDIAN_64BIT_FLOAT is
+ ** defined that 64-bit floating point values really are mixed
+ ** endian.
+ */
+ static const u64 t1 = ((u64)0x3ff00000)<<32;
+ static const double r1 = 1.0;
+ u64 t2 = t1;
+ swapMixedEndianFloat(t2);
+ assert( sizeof(r1)==sizeof(t2) && memcmp(&r1, &t2, sizeof(r1))==0 );
+#endif
+ assert( sizeof(x)==8 && sizeof(pMem->u.r)==8 );
+ swapMixedEndianFloat(x);
+ memcpy(&pMem->u.r, &x, sizeof(x));
+ pMem->flags = sqlite3IsNaN(pMem->u.r) ? MEM_Null : MEM_Real;
+ }
+ return 8;
+}
SQLITE_PRIVATE u32 sqlite3VdbeSerialGet(
const unsigned char *buf, /* Buffer to deserialize from */
u32 serial_type, /* Serial type to deserialize */
Mem *pMem /* Memory cell to write value into */
){
- u64 x;
- u32 y;
switch( serial_type ){
case 10: /* Reserved for future use */
case 11: /* Reserved for future use */
@@ -65216,8 +66295,7 @@ SQLITE_PRIVATE u32 sqlite3VdbeSerialGet(
return 3;
}
case 4: { /* 4-byte signed integer */
- y = FOUR_BYTE_UINT(buf);
- pMem->u.i = (i64)*(int*)&y;
+ pMem->u.i = FOUR_BYTE_INT(buf);
pMem->flags = MEM_Int;
testcase( pMem->u.i<0 );
return 4;
@@ -65230,32 +66308,9 @@ SQLITE_PRIVATE u32 sqlite3VdbeSerialGet(
}
case 6: /* 8-byte signed integer */
case 7: { /* IEEE floating point */
-#if !defined(NDEBUG) && !defined(SQLITE_OMIT_FLOATING_POINT)
- /* Verify that integers and floating point values use the same
- ** byte order. Or, that if SQLITE_MIXED_ENDIAN_64BIT_FLOAT is
- ** defined that 64-bit floating point values really are mixed
- ** endian.
- */
- static const u64 t1 = ((u64)0x3ff00000)<<32;
- static const double r1 = 1.0;
- u64 t2 = t1;
- swapMixedEndianFloat(t2);
- assert( sizeof(r1)==sizeof(t2) && memcmp(&r1, &t2, sizeof(r1))==0 );
-#endif
- x = FOUR_BYTE_UINT(buf);
- y = FOUR_BYTE_UINT(buf+4);
- x = (x<<32) | y;
- if( serial_type==6 ){
- pMem->u.i = *(i64*)&x;
- pMem->flags = MEM_Int;
- testcase( pMem->u.i<0 );
- }else{
- assert( sizeof(x)==8 && sizeof(pMem->r)==8 );
- swapMixedEndianFloat(x);
- memcpy(&pMem->r, &x, sizeof(x));
- pMem->flags = sqlite3IsNaN(pMem->r) ? MEM_Null : MEM_Real;
- }
- return 8;
+ /* These use local variables, so do them in a separate routine
+ ** to avoid having to move the frame pointer in the common case */
+ return serialGet(buf,serial_type,pMem);
}
case 8: /* Integer 0 */
case 9: { /* Integer 1 */
@@ -65265,17 +66320,14 @@ SQLITE_PRIVATE u32 sqlite3VdbeSerialGet(
}
default: {
static const u16 aFlag[] = { MEM_Blob|MEM_Ephem, MEM_Str|MEM_Ephem };
- u32 len = (serial_type-12)/2;
pMem->z = (char *)buf;
- pMem->n = len;
- pMem->xDel = 0;
+ pMem->n = (serial_type-12)/2;
pMem->flags = aFlag[serial_type&1];
- return len;
+ return pMem->n;
}
}
return 0;
}
-
/*
** This routine is used to allocate sufficient space for an UnpackedRecord
** structure large enough to be used with sqlite3VdbeRecordUnpack() if
@@ -65345,17 +66397,17 @@ SQLITE_PRIVATE void sqlite3VdbeRecordUnpack(
idx = getVarint32(aKey, szHdr);
d = szHdr;
u = 0;
- while( idx<szHdr && u<p->nField && d<=nKey ){
+ while( idx<szHdr && d<=nKey ){
u32 serial_type;
idx += getVarint32(&aKey[idx], serial_type);
pMem->enc = pKeyInfo->enc;
pMem->db = pKeyInfo->db;
/* pMem->flags = 0; // sqlite3VdbeSerialGet() will set this for us */
- pMem->zMalloc = 0;
+ pMem->szMalloc = 0;
d += sqlite3VdbeSerialGet(&aKey[d], serial_type, pMem);
pMem++;
- u++;
+ if( (++u)>=p->nField ) break;
}
assert( u<=pKeyInfo->nField + 1 );
p->nField = u;
@@ -65369,10 +66421,14 @@ SQLITE_PRIVATE void sqlite3VdbeRecordUnpack(
** sqlite3VdbeSerialGet() and sqlite3MemCompare() functions. It is used
** in assert() statements to ensure that the optimized code in
** sqlite3VdbeRecordCompare() returns results with these two primitives.
+**
+** Return true if the result of comparison is equivalent to desiredResult.
+** Return false if there is a disagreement.
*/
static int vdbeRecordCompareDebug(
int nKey1, const void *pKey1, /* Left key */
- const UnpackedRecord *pPKey2 /* Right key */
+ const UnpackedRecord *pPKey2, /* Right key */
+ int desiredResult /* Correct answer */
){
u32 d1; /* Offset into aKey[] of next data element */
u32 idx1; /* Offset into aKey[] of next header element */
@@ -65384,10 +66440,11 @@ static int vdbeRecordCompareDebug(
Mem mem1;
pKeyInfo = pPKey2->pKeyInfo;
+ if( pKeyInfo->db==0 ) return 1;
mem1.enc = pKeyInfo->enc;
mem1.db = pKeyInfo->db;
/* mem1.flags = 0; // Will be initialized by sqlite3VdbeSerialGet() */
- VVA_ONLY( mem1.zMalloc = 0; ) /* Only needed by assert() statements */
+ VVA_ONLY( mem1.szMalloc = 0; ) /* Only needed by assert() statements */
/* Compilers may complain that mem1.u.i is potentially uninitialized.
** We could initialize it, as shown here, to silence those complaints.
@@ -65430,11 +66487,11 @@ static int vdbeRecordCompareDebug(
*/
rc = sqlite3MemCompare(&mem1, &pPKey2->aMem[i], pKeyInfo->aColl[i]);
if( rc!=0 ){
- assert( mem1.zMalloc==0 ); /* See comment below */
+ assert( mem1.szMalloc==0 ); /* See comment below */
if( pKeyInfo->aSortOrder[i] ){
rc = -rc; /* Invert the result for DESC sort order. */
}
- return rc;
+ goto debugCompareEnd;
}
i++;
}while( idx1<szHdr1 && i<pPKey2->nField );
@@ -65443,12 +66500,20 @@ static int vdbeRecordCompareDebug(
** the following assert(). If the assert() fails, it indicates a
** memory leak and a need to call sqlite3VdbeMemRelease(&mem1).
*/
- assert( mem1.zMalloc==0 );
+ assert( mem1.szMalloc==0 );
/* rc==0 here means that one of the keys ran out of fields and
- ** all the fields up to that point were equal. Return the the default_rc
+ ** all the fields up to that point were equal. Return the default_rc
** value. */
- return pPKey2->default_rc;
+ rc = pPKey2->default_rc;
+
+debugCompareEnd:
+ if( desiredResult==0 && rc==0 ) return 1;
+ if( desiredResult<0 && rc<0 ) return 1;
+ if( desiredResult>0 && rc>0 ) return 1;
+ if( CORRUPT_DB ) return 1;
+ if( pKeyInfo->db->mallocFailed ) return 1;
+ return 0;
}
#endif
@@ -65461,7 +66526,8 @@ static int vdbeRecordCompareDebug(
static int vdbeCompareMemString(
const Mem *pMem1,
const Mem *pMem2,
- const CollSeq *pColl
+ const CollSeq *pColl,
+ u8 *prcErr /* If an OOM occurs, set to SQLITE_NOMEM */
){
if( pMem1->enc==pColl->enc ){
/* The strings are already in the correct encoding. Call the
@@ -65473,8 +66539,8 @@ static int vdbeCompareMemString(
int n1, n2;
Mem c1;
Mem c2;
- memset(&c1, 0, sizeof(c1));
- memset(&c2, 0, sizeof(c2));
+ sqlite3VdbeMemInit(&c1, pMem1->db, MEM_Null);
+ sqlite3VdbeMemInit(&c2, pMem1->db, MEM_Null);
sqlite3VdbeMemShallowCopy(&c1, pMem1, MEM_Ephem);
sqlite3VdbeMemShallowCopy(&c2, pMem2, MEM_Ephem);
v1 = sqlite3ValueText((sqlite3_value*)&c1, pColl->enc);
@@ -65484,11 +66550,24 @@ static int vdbeCompareMemString(
rc = pColl->xCmp(pColl->pUser, n1, v1, n2, v2);
sqlite3VdbeMemRelease(&c1);
sqlite3VdbeMemRelease(&c2);
+ if( (v1==0 || v2==0) && prcErr ) *prcErr = SQLITE_NOMEM;
return rc;
}
}
/*
+** Compare two blobs. Return negative, zero, or positive if the first
+** is less than, equal to, or greater than the second, respectively.
+** If one blob is a prefix of the other, then the shorter is the lessor.
+*/
+static SQLITE_NOINLINE int sqlite3BlobCompare(const Mem *pB1, const Mem *pB2){
+ int c = memcmp(pB1->z, pB2->z, pB1->n>pB2->n ? pB2->n : pB1->n);
+ if( c ) return c;
+ return pB1->n - pB2->n;
+}
+
+
+/*
** Compare the values contained by the two memory cells, returning
** negative, zero or positive if pMem1 is less than, equal to, or greater
** than pMem2. Sorting order is NULL's first, followed by numbers (integers
@@ -65498,7 +66577,6 @@ static int vdbeCompareMemString(
** Two NULL values are considered equal by this function.
*/
SQLITE_PRIVATE int sqlite3MemCompare(const Mem *pMem1, const Mem *pMem2, const CollSeq *pColl){
- int rc;
int f1, f2;
int combined_flags;
@@ -65526,14 +66604,14 @@ SQLITE_PRIVATE int sqlite3MemCompare(const Mem *pMem1, const Mem *pMem2, const C
return 0;
}
if( (f1&MEM_Real)!=0 ){
- r1 = pMem1->r;
+ r1 = pMem1->u.r;
}else if( (f1&MEM_Int)!=0 ){
r1 = (double)pMem1->u.i;
}else{
return 1;
}
if( (f2&MEM_Real)!=0 ){
- r2 = pMem2->r;
+ r2 = pMem2->u.r;
}else if( (f2&MEM_Int)!=0 ){
r2 = (double)pMem2->u.i;
}else{
@@ -65566,18 +66644,14 @@ SQLITE_PRIVATE int sqlite3MemCompare(const Mem *pMem1, const Mem *pMem2, const C
assert( !pColl || pColl->xCmp );
if( pColl ){
- return vdbeCompareMemString(pMem1, pMem2, pColl);
+ return vdbeCompareMemString(pMem1, pMem2, pColl, 0);
}
/* If a NULL pointer was passed as the collate function, fall through
** to the blob case and use memcmp(). */
}
/* Both values must be blobs. Compare using memcmp(). */
- rc = memcmp(pMem1->z, pMem2->z, (pMem1->n>pMem2->n)?pMem2->n:pMem1->n);
- if( rc==0 ){
- rc = pMem1->n - pMem2->n;
- }
- return rc;
+ return sqlite3BlobCompare(pMem1, pMem2);
}
@@ -65627,7 +66701,7 @@ static i64 vdbeRecordDecodeInt(u32 serial_type, const u8 *aKey){
** specified by {nKey1, pKey1} and pPKey2. It returns a negative, zero
** or positive integer if key1 is less than, equal to or
** greater than key2. The {nKey1, pKey1} key must be a blob
-** created by th OP_MakeRecord opcode of the VDBE. The pPKey2
+** created by the OP_MakeRecord opcode of the VDBE. The pPKey2
** key must be a parsed key such as obtained from
** sqlite3VdbeParseRecord.
**
@@ -65638,10 +66712,12 @@ static i64 vdbeRecordDecodeInt(u32 serial_type, const u8 *aKey){
** fields that appear in both keys are equal, then pPKey2->default_rc is
** returned.
**
-** If database corruption is discovered, set pPKey2->isCorrupt to non-zero
-** and return 0.
+** If database corruption is discovered, set pPKey2->errCode to
+** SQLITE_CORRUPT and return 0. If an OOM error is encountered,
+** pPKey2->errCode is set to SQLITE_NOMEM and, if it is not NULL, the
+** malloc-failed flag set on database handle (pPKey2->pKeyInfo->db).
*/
-SQLITE_PRIVATE int sqlite3VdbeRecordCompare(
+static int vdbeRecordCompareWithSkip(
int nKey1, const void *pKey1, /* Left key */
UnpackedRecord *pPKey2, /* Right key */
int bSkip /* If true, skip the first field */
@@ -65670,13 +66746,13 @@ SQLITE_PRIVATE int sqlite3VdbeRecordCompare(
idx1 = getVarint32(aKey1, szHdr1);
d1 = szHdr1;
if( d1>(unsigned)nKey1 ){
- pPKey2->isCorrupt = (u8)SQLITE_CORRUPT_BKPT;
+ pPKey2->errCode = (u8)SQLITE_CORRUPT_BKPT;
return 0; /* Corruption */
}
i = 0;
}
- VVA_ONLY( mem1.zMalloc = 0; ) /* Only needed by assert() statements */
+ VVA_ONLY( mem1.szMalloc = 0; ) /* Only needed by assert() statements */
assert( pPKey2->pKeyInfo->nField+pPKey2->pKeyInfo->nXField>=pPKey2->nField
|| CORRUPT_DB );
assert( pPKey2->pKeyInfo->aSortOrder!=0 );
@@ -65696,9 +66772,9 @@ SQLITE_PRIVATE int sqlite3VdbeRecordCompare(
}else if( serial_type==7 ){
double rhs = (double)pRhs->u.i;
sqlite3VdbeSerialGet(&aKey1[d1], serial_type, &mem1);
- if( mem1.r<rhs ){
+ if( mem1.u.r<rhs ){
rc = -1;
- }else if( mem1.r>rhs ){
+ }else if( mem1.u.r>rhs ){
rc = +1;
}
}else{
@@ -65720,11 +66796,11 @@ SQLITE_PRIVATE int sqlite3VdbeRecordCompare(
}else if( serial_type==0 ){
rc = -1;
}else{
- double rhs = pRhs->r;
+ double rhs = pRhs->u.r;
double lhs;
sqlite3VdbeSerialGet(&aKey1[d1], serial_type, &mem1);
if( serial_type==7 ){
- lhs = mem1.r;
+ lhs = mem1.u.r;
}else{
lhs = (double)mem1.u.i;
}
@@ -65749,14 +66825,16 @@ SQLITE_PRIVATE int sqlite3VdbeRecordCompare(
testcase( (d1+mem1.n)==(unsigned)nKey1 );
testcase( (d1+mem1.n+1)==(unsigned)nKey1 );
if( (d1+mem1.n) > (unsigned)nKey1 ){
- pPKey2->isCorrupt = (u8)SQLITE_CORRUPT_BKPT;
+ pPKey2->errCode = (u8)SQLITE_CORRUPT_BKPT;
return 0; /* Corruption */
}else if( pKeyInfo->aColl[i] ){
mem1.enc = pKeyInfo->enc;
mem1.db = pKeyInfo->db;
mem1.flags = MEM_Str;
mem1.z = (char*)&aKey1[d1];
- rc = vdbeCompareMemString(&mem1, pRhs, pKeyInfo->aColl[i]);
+ rc = vdbeCompareMemString(
+ &mem1, pRhs, pKeyInfo->aColl[i], &pPKey2->errCode
+ );
}else{
int nCmp = MIN(mem1.n, pRhs->n);
rc = memcmp(&aKey1[d1], pRhs->z, nCmp);
@@ -65776,7 +66854,7 @@ SQLITE_PRIVATE int sqlite3VdbeRecordCompare(
testcase( (d1+nStr)==(unsigned)nKey1 );
testcase( (d1+nStr+1)==(unsigned)nKey1 );
if( (d1+nStr) > (unsigned)nKey1 ){
- pPKey2->isCorrupt = (u8)SQLITE_CORRUPT_BKPT;
+ pPKey2->errCode = (u8)SQLITE_CORRUPT_BKPT;
return 0; /* Corruption */
}else{
int nCmp = MIN(nStr, pRhs->n);
@@ -65796,12 +66874,8 @@ SQLITE_PRIVATE int sqlite3VdbeRecordCompare(
if( pKeyInfo->aSortOrder[i] ){
rc = -rc;
}
- assert( CORRUPT_DB
- || (rc<0 && vdbeRecordCompareDebug(nKey1, pKey1, pPKey2)<0)
- || (rc>0 && vdbeRecordCompareDebug(nKey1, pKey1, pPKey2)>0)
- || pKeyInfo->db->mallocFailed
- );
- assert( mem1.zMalloc==0 ); /* See comment below */
+ assert( vdbeRecordCompareDebug(nKey1, pKey1, pPKey2, rc) );
+ assert( mem1.szMalloc==0 ); /* See comment below */
return rc;
}
@@ -65814,17 +66888,24 @@ SQLITE_PRIVATE int sqlite3VdbeRecordCompare(
/* No memory allocation is ever used on mem1. Prove this using
** the following assert(). If the assert() fails, it indicates a
** memory leak and a need to call sqlite3VdbeMemRelease(&mem1). */
- assert( mem1.zMalloc==0 );
+ assert( mem1.szMalloc==0 );
/* rc==0 here means that one or both of the keys ran out of fields and
- ** all the fields up to that point were equal. Return the the default_rc
+ ** all the fields up to that point were equal. Return the default_rc
** value. */
assert( CORRUPT_DB
- || pPKey2->default_rc==vdbeRecordCompareDebug(nKey1, pKey1, pPKey2)
+ || vdbeRecordCompareDebug(nKey1, pKey1, pPKey2, pPKey2->default_rc)
|| pKeyInfo->db->mallocFailed
);
return pPKey2->default_rc;
}
+SQLITE_PRIVATE int sqlite3VdbeRecordCompare(
+ int nKey1, const void *pKey1, /* Left key */
+ UnpackedRecord *pPKey2 /* Right key */
+){
+ return vdbeRecordCompareWithSkip(nKey1, pKey1, pPKey2, 0);
+}
+
/*
** This function is an optimized version of sqlite3VdbeRecordCompare()
@@ -65837,8 +66918,7 @@ SQLITE_PRIVATE int sqlite3VdbeRecordCompare(
*/
static int vdbeRecordCompareInt(
int nKey1, const void *pKey1, /* Left key */
- UnpackedRecord *pPKey2, /* Right key */
- int bSkip /* Ignored */
+ UnpackedRecord *pPKey2 /* Right key */
){
const u8 *aKey = &((const u8*)pKey1)[*(const u8*)pKey1 & 0x3F];
int serial_type = ((const u8*)pKey1)[1];
@@ -65847,9 +66927,7 @@ static int vdbeRecordCompareInt(
u64 x;
i64 v = pPKey2->aMem[0].u.i;
i64 lhs;
- UNUSED_PARAMETER(bSkip);
- assert( bSkip==0 );
assert( (*(u8*)pKey1)<=0x3F || CORRUPT_DB );
switch( serial_type ){
case 1: { /* 1-byte signed integer */
@@ -65899,10 +66977,10 @@ static int vdbeRecordCompareInt(
** (as gcc is clever enough to combine the two like cases). Other
** compilers might be similar. */
case 0: case 7:
- return sqlite3VdbeRecordCompare(nKey1, pKey1, pPKey2, 0);
+ return sqlite3VdbeRecordCompare(nKey1, pKey1, pPKey2);
default:
- return sqlite3VdbeRecordCompare(nKey1, pKey1, pPKey2, 0);
+ return sqlite3VdbeRecordCompare(nKey1, pKey1, pPKey2);
}
if( v>lhs ){
@@ -65912,18 +66990,14 @@ static int vdbeRecordCompareInt(
}else if( pPKey2->nField>1 ){
/* The first fields of the two keys are equal. Compare the trailing
** fields. */
- res = sqlite3VdbeRecordCompare(nKey1, pKey1, pPKey2, 1);
+ res = vdbeRecordCompareWithSkip(nKey1, pKey1, pPKey2, 1);
}else{
/* The first fields of the two keys are equal and there are no trailing
** fields. Return pPKey2->default_rc in this case. */
res = pPKey2->default_rc;
}
- assert( (res==0 && vdbeRecordCompareDebug(nKey1, pKey1, pPKey2)==0)
- || (res<0 && vdbeRecordCompareDebug(nKey1, pKey1, pPKey2)<0)
- || (res>0 && vdbeRecordCompareDebug(nKey1, pKey1, pPKey2)>0)
- || CORRUPT_DB
- );
+ assert( vdbeRecordCompareDebug(nKey1, pKey1, pPKey2, res) );
return res;
}
@@ -65935,17 +67009,13 @@ static int vdbeRecordCompareInt(
*/
static int vdbeRecordCompareString(
int nKey1, const void *pKey1, /* Left key */
- UnpackedRecord *pPKey2, /* Right key */
- int bSkip
+ UnpackedRecord *pPKey2 /* Right key */
){
const u8 *aKey1 = (const u8*)pKey1;
int serial_type;
int res;
- UNUSED_PARAMETER(bSkip);
- assert( bSkip==0 );
getVarint32(&aKey1[1], serial_type);
-
if( serial_type<12 ){
res = pPKey2->r1; /* (pKey1/nKey1) is a number or a null */
}else if( !(serial_type & 0x01) ){
@@ -65957,7 +67027,7 @@ static int vdbeRecordCompareString(
nStr = (serial_type-12) / 2;
if( (szHdr + nStr) > nKey1 ){
- pPKey2->isCorrupt = (u8)SQLITE_CORRUPT_BKPT;
+ pPKey2->errCode = (u8)SQLITE_CORRUPT_BKPT;
return 0; /* Corruption */
}
nCmp = MIN( pPKey2->aMem[0].n, nStr );
@@ -65967,7 +67037,7 @@ static int vdbeRecordCompareString(
res = nStr - pPKey2->aMem[0].n;
if( res==0 ){
if( pPKey2->nField>1 ){
- res = sqlite3VdbeRecordCompare(nKey1, pKey1, pPKey2, 1);
+ res = vdbeRecordCompareWithSkip(nKey1, pKey1, pPKey2, 1);
}else{
res = pPKey2->default_rc;
}
@@ -65983,9 +67053,7 @@ static int vdbeRecordCompareString(
}
}
- assert( (res==0 && vdbeRecordCompareDebug(nKey1, pKey1, pPKey2)==0)
- || (res<0 && vdbeRecordCompareDebug(nKey1, pKey1, pPKey2)<0)
- || (res>0 && vdbeRecordCompareDebug(nKey1, pKey1, pPKey2)>0)
+ assert( vdbeRecordCompareDebug(nKey1, pKey1, pPKey2, res)
|| CORRUPT_DB
|| pPKey2->pKeyInfo->db->mallocFailed
);
@@ -66051,8 +67119,6 @@ SQLITE_PRIVATE int sqlite3VdbeIdxRowid(sqlite3 *db, BtCursor *pCur, i64 *rowid){
u32 lenRowid; /* Size of the rowid */
Mem m, v;
- UNUSED_PARAMETER(db);
-
/* Get the size of the index entry. Only indices entries of less
** than 2GiB are support - anything large must be database corruption.
** Any corruption is detected in sqlite3BtreeParseCellPtr(), though, so
@@ -66064,7 +67130,7 @@ SQLITE_PRIVATE int sqlite3VdbeIdxRowid(sqlite3 *db, BtCursor *pCur, i64 *rowid){
assert( (nCellKey & SQLITE_MAX_U32)==(u64)nCellKey );
/* Read in the complete content of the index entry */
- memset(&m, 0, sizeof(m));
+ sqlite3VdbeMemInit(&m, db, 0);
rc = sqlite3VdbeMemFromBtree(pCur, 0, (u32)nCellKey, 1, &m);
if( rc ){
return rc;
@@ -66107,7 +67173,7 @@ SQLITE_PRIVATE int sqlite3VdbeIdxRowid(sqlite3 *db, BtCursor *pCur, i64 *rowid){
/* Jump here if database corruption is detected after m has been
** allocated. Free the m object and return SQLITE_CORRUPT. */
idx_rowid_corruption:
- testcase( m.zMalloc!=0 );
+ testcase( m.szMalloc!=0 );
sqlite3VdbeMemRelease(&m);
return SQLITE_CORRUPT_BKPT;
}
@@ -66124,6 +67190,7 @@ idx_rowid_corruption:
** of the keys prior to the final rowid, not the entire key.
*/
SQLITE_PRIVATE int sqlite3VdbeIdxKeyCompare(
+ sqlite3 *db, /* Database connection */
VdbeCursor *pC, /* The cursor to compare against */
UnpackedRecord *pUnpacked, /* Unpacked version of key */
int *res /* Write the comparison result here */
@@ -66142,12 +67209,12 @@ SQLITE_PRIVATE int sqlite3VdbeIdxKeyCompare(
*res = 0;
return SQLITE_CORRUPT_BKPT;
}
- memset(&m, 0, sizeof(m));
+ sqlite3VdbeMemInit(&m, db, 0);
rc = sqlite3VdbeMemFromBtree(pC->pCursor, 0, (u32)nCellKey, 1, &m);
if( rc ){
return rc;
}
- *res = sqlite3VdbeRecordCompare(m.n, m.z, pUnpacked, 0);
+ *res = sqlite3VdbeRecordCompare(m.n, m.z, pUnpacked);
sqlite3VdbeMemRelease(&m);
return SQLITE_OK;
}
@@ -66461,9 +67528,12 @@ SQLITE_API int sqlite3_value_type(sqlite3_value* pVal){
** The following routines are used by user-defined functions to specify
** the function result.
**
-** The setStrOrError() funtion calls sqlite3VdbeMemSetStr() to store the
+** The setStrOrError() function calls sqlite3VdbeMemSetStr() to store the
** result as a string or blob but if the string or blob is too large, it
** then sets the error code to SQLITE_TOOBIG
+**
+** The invokeValueDestructor(P,X) routine invokes destructor function X()
+** on value P is not going to be used and need to be destroyed.
*/
static void setResultStrOrError(
sqlite3_context *pCtx, /* Function context */
@@ -66472,10 +67542,26 @@ static void setResultStrOrError(
u8 enc, /* Encoding of z. 0 for BLOBs */
void (*xDel)(void*) /* Destructor function */
){
- if( sqlite3VdbeMemSetStr(&pCtx->s, z, n, enc, xDel)==SQLITE_TOOBIG ){
+ if( sqlite3VdbeMemSetStr(pCtx->pOut, z, n, enc, xDel)==SQLITE_TOOBIG ){
sqlite3_result_error_toobig(pCtx);
}
}
+static int invokeValueDestructor(
+ const void *p, /* Value to destroy */
+ void (*xDel)(void*), /* The destructor */
+ sqlite3_context *pCtx /* Set a SQLITE_TOOBIG error if no NULL */
+){
+ assert( xDel!=SQLITE_DYNAMIC );
+ if( xDel==0 ){
+ /* noop */
+ }else if( xDel==SQLITE_TRANSIENT ){
+ /* noop */
+ }else{
+ xDel((void*)p);
+ }
+ if( pCtx ) sqlite3_result_error_toobig(pCtx);
+ return SQLITE_TOOBIG;
+}
SQLITE_API void sqlite3_result_blob(
sqlite3_context *pCtx,
const void *z,
@@ -66483,38 +67569,52 @@ SQLITE_API void sqlite3_result_blob(
void (*xDel)(void *)
){
assert( n>=0 );
- assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
+ assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
setResultStrOrError(pCtx, z, n, 0, xDel);
}
+SQLITE_API void sqlite3_result_blob64(
+ sqlite3_context *pCtx,
+ const void *z,
+ sqlite3_uint64 n,
+ void (*xDel)(void *)
+){
+ assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
+ assert( xDel!=SQLITE_DYNAMIC );
+ if( n>0x7fffffff ){
+ (void)invokeValueDestructor(z, xDel, pCtx);
+ }else{
+ setResultStrOrError(pCtx, z, (int)n, 0, xDel);
+ }
+}
SQLITE_API void sqlite3_result_double(sqlite3_context *pCtx, double rVal){
- assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
- sqlite3VdbeMemSetDouble(&pCtx->s, rVal);
+ assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
+ sqlite3VdbeMemSetDouble(pCtx->pOut, rVal);
}
SQLITE_API void sqlite3_result_error(sqlite3_context *pCtx, const char *z, int n){
- assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
+ assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
pCtx->isError = SQLITE_ERROR;
pCtx->fErrorOrAux = 1;
- sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF8, SQLITE_TRANSIENT);
+ sqlite3VdbeMemSetStr(pCtx->pOut, z, n, SQLITE_UTF8, SQLITE_TRANSIENT);
}
#ifndef SQLITE_OMIT_UTF16
SQLITE_API void sqlite3_result_error16(sqlite3_context *pCtx, const void *z, int n){
- assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
+ assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
pCtx->isError = SQLITE_ERROR;
pCtx->fErrorOrAux = 1;
- sqlite3VdbeMemSetStr(&pCtx->s, z, n, SQLITE_UTF16NATIVE, SQLITE_TRANSIENT);
+ sqlite3VdbeMemSetStr(pCtx->pOut, z, n, SQLITE_UTF16NATIVE, SQLITE_TRANSIENT);
}
#endif
SQLITE_API void sqlite3_result_int(sqlite3_context *pCtx, int iVal){
- assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
- sqlite3VdbeMemSetInt64(&pCtx->s, (i64)iVal);
+ assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
+ sqlite3VdbeMemSetInt64(pCtx->pOut, (i64)iVal);
}
SQLITE_API void sqlite3_result_int64(sqlite3_context *pCtx, i64 iVal){
- assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
- sqlite3VdbeMemSetInt64(&pCtx->s, iVal);
+ assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
+ sqlite3VdbeMemSetInt64(pCtx->pOut, iVal);
}
SQLITE_API void sqlite3_result_null(sqlite3_context *pCtx){
- assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
- sqlite3VdbeMemSetNull(&pCtx->s);
+ assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
+ sqlite3VdbeMemSetNull(pCtx->pOut);
}
SQLITE_API void sqlite3_result_text(
sqlite3_context *pCtx,
@@ -66522,9 +67622,25 @@ SQLITE_API void sqlite3_result_text(
int n,
void (*xDel)(void *)
){
- assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
+ assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
setResultStrOrError(pCtx, z, n, SQLITE_UTF8, xDel);
}
+SQLITE_API void sqlite3_result_text64(
+ sqlite3_context *pCtx,
+ const char *z,
+ sqlite3_uint64 n,
+ void (*xDel)(void *),
+ unsigned char enc
+){
+ assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
+ assert( xDel!=SQLITE_DYNAMIC );
+ if( enc==SQLITE_UTF16 ) enc = SQLITE_UTF16NATIVE;
+ if( n>0x7fffffff ){
+ (void)invokeValueDestructor(z, xDel, pCtx);
+ }else{
+ setResultStrOrError(pCtx, z, (int)n, enc, xDel);
+ }
+}
#ifndef SQLITE_OMIT_UTF16
SQLITE_API void sqlite3_result_text16(
sqlite3_context *pCtx,
@@ -66532,7 +67648,7 @@ SQLITE_API void sqlite3_result_text16(
int n,
void (*xDel)(void *)
){
- assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
+ assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
setResultStrOrError(pCtx, z, n, SQLITE_UTF16NATIVE, xDel);
}
SQLITE_API void sqlite3_result_text16be(
@@ -66541,7 +67657,7 @@ SQLITE_API void sqlite3_result_text16be(
int n,
void (*xDel)(void *)
){
- assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
+ assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
setResultStrOrError(pCtx, z, n, SQLITE_UTF16BE, xDel);
}
SQLITE_API void sqlite3_result_text16le(
@@ -66550,43 +67666,43 @@ SQLITE_API void sqlite3_result_text16le(
int n,
void (*xDel)(void *)
){
- assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
+ assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
setResultStrOrError(pCtx, z, n, SQLITE_UTF16LE, xDel);
}
#endif /* SQLITE_OMIT_UTF16 */
SQLITE_API void sqlite3_result_value(sqlite3_context *pCtx, sqlite3_value *pValue){
- assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
- sqlite3VdbeMemCopy(&pCtx->s, pValue);
+ assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
+ sqlite3VdbeMemCopy(pCtx->pOut, pValue);
}
SQLITE_API void sqlite3_result_zeroblob(sqlite3_context *pCtx, int n){
- assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
- sqlite3VdbeMemSetZeroBlob(&pCtx->s, n);
+ assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
+ sqlite3VdbeMemSetZeroBlob(pCtx->pOut, n);
}
SQLITE_API void sqlite3_result_error_code(sqlite3_context *pCtx, int errCode){
pCtx->isError = errCode;
pCtx->fErrorOrAux = 1;
- if( pCtx->s.flags & MEM_Null ){
- sqlite3VdbeMemSetStr(&pCtx->s, sqlite3ErrStr(errCode), -1,
+ if( pCtx->pOut->flags & MEM_Null ){
+ sqlite3VdbeMemSetStr(pCtx->pOut, sqlite3ErrStr(errCode), -1,
SQLITE_UTF8, SQLITE_STATIC);
}
}
/* Force an SQLITE_TOOBIG error. */
SQLITE_API void sqlite3_result_error_toobig(sqlite3_context *pCtx){
- assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
+ assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
pCtx->isError = SQLITE_TOOBIG;
pCtx->fErrorOrAux = 1;
- sqlite3VdbeMemSetStr(&pCtx->s, "string or blob too big", -1,
+ sqlite3VdbeMemSetStr(pCtx->pOut, "string or blob too big", -1,
SQLITE_UTF8, SQLITE_STATIC);
}
/* An SQLITE_NOMEM error. */
SQLITE_API void sqlite3_result_error_nomem(sqlite3_context *pCtx){
- assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
- sqlite3VdbeMemSetNull(&pCtx->s);
+ assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
+ sqlite3VdbeMemSetNull(pCtx->pOut);
pCtx->isError = SQLITE_NOMEM;
pCtx->fErrorOrAux = 1;
- pCtx->s.db->mallocFailed = 1;
+ pCtx->pOut->db->mallocFailed = 1;
}
/*
@@ -66762,10 +67878,12 @@ SQLITE_API int sqlite3_step(sqlite3_stmt *pStmt){
sqlite3_mutex_enter(db->mutex);
v->doingRerun = 0;
while( (rc = sqlite3Step(v))==SQLITE_SCHEMA
- && cnt++ < SQLITE_MAX_SCHEMA_RETRY
- && (rc2 = rc = sqlite3Reprepare(v))==SQLITE_OK ){
+ && cnt++ < SQLITE_MAX_SCHEMA_RETRY ){
+ int savedPc = v->pc;
+ rc2 = rc = sqlite3Reprepare(v);
+ if( rc!=SQLITE_OK) break;
sqlite3_reset(pStmt);
- v->doingRerun = 1;
+ if( savedPc>=0 ) v->doingRerun = 1;
assert( v->expired==0 );
}
if( rc2!=SQLITE_OK ){
@@ -66815,7 +67933,7 @@ SQLITE_API void *sqlite3_user_data(sqlite3_context *p){
*/
SQLITE_API sqlite3 *sqlite3_context_db_handle(sqlite3_context *p){
assert( p && p->pFunc );
- return p->s.db;
+ return p->pOut->db;
}
/*
@@ -66825,7 +67943,7 @@ SQLITE_PRIVATE sqlite3_int64 sqlite3StmtCurrentTime(sqlite3_context *p){
Vdbe *v = p->pVdbe;
int rc;
if( v->iCurrentTime==0 ){
- rc = sqlite3OsCurrentTimeInt64(p->s.db->pVfs, &v->iCurrentTime);
+ rc = sqlite3OsCurrentTimeInt64(p->pOut->db->pVfs, &v->iCurrentTime);
if( rc ) v->iCurrentTime = 0;
}
return v->iCurrentTime;
@@ -66854,41 +67972,50 @@ SQLITE_PRIVATE void sqlite3InvalidFunction(
}
/*
+** Create a new aggregate context for p and return a pointer to
+** its pMem->z element.
+*/
+static SQLITE_NOINLINE void *createAggContext(sqlite3_context *p, int nByte){
+ Mem *pMem = p->pMem;
+ assert( (pMem->flags & MEM_Agg)==0 );
+ if( nByte<=0 ){
+ sqlite3VdbeMemSetNull(pMem);
+ pMem->z = 0;
+ }else{
+ sqlite3VdbeMemClearAndResize(pMem, nByte);
+ pMem->flags = MEM_Agg;
+ pMem->u.pDef = p->pFunc;
+ if( pMem->z ){
+ memset(pMem->z, 0, nByte);
+ }
+ }
+ return (void*)pMem->z;
+}
+
+/*
** Allocate or return the aggregate context for a user function. A new
** context is allocated on the first call. Subsequent calls return the
** same context that was returned on prior calls.
*/
SQLITE_API void *sqlite3_aggregate_context(sqlite3_context *p, int nByte){
- Mem *pMem;
assert( p && p->pFunc && p->pFunc->xStep );
- assert( sqlite3_mutex_held(p->s.db->mutex) );
- pMem = p->pMem;
+ assert( sqlite3_mutex_held(p->pOut->db->mutex) );
testcase( nByte<0 );
- if( (pMem->flags & MEM_Agg)==0 ){
- if( nByte<=0 ){
- sqlite3VdbeMemReleaseExternal(pMem);
- pMem->flags = MEM_Null;
- pMem->z = 0;
- }else{
- sqlite3VdbeMemGrow(pMem, nByte, 0);
- pMem->flags = MEM_Agg;
- pMem->u.pDef = p->pFunc;
- if( pMem->z ){
- memset(pMem->z, 0, nByte);
- }
- }
+ if( (p->pMem->flags & MEM_Agg)==0 ){
+ return createAggContext(p, nByte);
+ }else{
+ return (void*)p->pMem->z;
}
- return (void*)pMem->z;
}
/*
-** Return the auxilary data pointer, if any, for the iArg'th argument to
+** Return the auxiliary data pointer, if any, for the iArg'th argument to
** the user-function defined by pCtx.
*/
SQLITE_API void *sqlite3_get_auxdata(sqlite3_context *pCtx, int iArg){
AuxData *pAuxData;
- assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
+ assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
for(pAuxData=pCtx->pVdbe->pAuxData; pAuxData; pAuxData=pAuxData->pNext){
if( pAuxData->iOp==pCtx->iOp && pAuxData->iArg==iArg ) break;
}
@@ -66897,7 +68024,7 @@ SQLITE_API void *sqlite3_get_auxdata(sqlite3_context *pCtx, int iArg){
}
/*
-** Set the auxilary data pointer and delete function, for the iArg'th
+** Set the auxiliary data pointer and delete function, for the iArg'th
** argument to the user-function defined by pCtx. Any previous value is
** deleted by calling the delete function specified when it was set.
*/
@@ -66910,7 +68037,7 @@ SQLITE_API void sqlite3_set_auxdata(
AuxData *pAuxData;
Vdbe *pVdbe = pCtx->pVdbe;
- assert( sqlite3_mutex_held(pCtx->s.db->mutex) );
+ assert( sqlite3_mutex_held(pCtx->pOut->db->mutex) );
if( iArg<0 ) goto failed;
for(pAuxData=pVdbe->pAuxData; pAuxData; pAuxData=pAuxData->pNext){
@@ -66943,7 +68070,7 @@ failed:
#ifndef SQLITE_OMIT_DEPRECATED
/*
-** Return the number of times the Step function of a aggregate has been
+** Return the number of times the Step function of an aggregate has been
** called.
**
** This function is deprecated. Do not use it for new code. It is
@@ -66992,11 +68119,22 @@ static const Mem *columnNullValue(void){
#if defined(SQLITE_DEBUG) && defined(__GNUC__)
__attribute__((aligned(8)))
#endif
- = {0, "", (double)0, {0}, 0, MEM_Null, 0,
+ = {
+ /* .u = */ {0},
+ /* .flags = */ MEM_Null,
+ /* .enc = */ 0,
+ /* .n = */ 0,
+ /* .z = */ 0,
+ /* .zMalloc = */ 0,
+ /* .szMalloc = */ 0,
+ /* .iPadding1 = */ 0,
+ /* .db = */ 0,
+ /* .xDel = */ 0,
#ifdef SQLITE_DEBUG
- 0, 0, /* pScopyFrom, pFiller */
+ /* .pScopyFrom = */ 0,
+ /* .pFiller = */ 0,
#endif
- 0, 0 };
+ };
return &nullMem;
}
@@ -67017,7 +68155,7 @@ static Mem *columnMem(sqlite3_stmt *pStmt, int i){
}else{
if( pVm && ALWAYS(pVm->db) ){
sqlite3_mutex_enter(pVm->db->mutex);
- sqlite3Error(pVm->db, SQLITE_RANGE, 0);
+ sqlite3Error(pVm->db, SQLITE_RANGE);
}
pOut = (Mem*)columnNullValue();
}
@@ -67213,7 +68351,7 @@ SQLITE_API const void *sqlite3_column_decltype16(sqlite3_stmt *pStmt, int N){
/*
** Return the name of the database from which a result column derives.
** NULL is returned if the result column is an expression or constant or
-** anything else which is not an unabiguous reference to a database column.
+** anything else which is not an unambiguous reference to a database column.
*/
SQLITE_API const char *sqlite3_column_database_name(sqlite3_stmt *pStmt, int N){
return columnName(
@@ -67229,7 +68367,7 @@ SQLITE_API const void *sqlite3_column_database_name16(sqlite3_stmt *pStmt, int N
/*
** Return the name of the table from which a result column derives.
** NULL is returned if the result column is an expression or constant or
-** anything else which is not an unabiguous reference to a database column.
+** anything else which is not an unambiguous reference to a database column.
*/
SQLITE_API const char *sqlite3_column_table_name(sqlite3_stmt *pStmt, int N){
return columnName(
@@ -67245,7 +68383,7 @@ SQLITE_API const void *sqlite3_column_table_name16(sqlite3_stmt *pStmt, int N){
/*
** Return the name of the table column from which a result column derives.
** NULL is returned if the result column is an expression or constant or
-** anything else which is not an unabiguous reference to a database column.
+** anything else which is not an unambiguous reference to a database column.
*/
SQLITE_API const char *sqlite3_column_origin_name(sqlite3_stmt *pStmt, int N){
return columnName(
@@ -67282,14 +68420,14 @@ static int vdbeUnbind(Vdbe *p, int i){
}
sqlite3_mutex_enter(p->db->mutex);
if( p->magic!=VDBE_MAGIC_RUN || p->pc>=0 ){
- sqlite3Error(p->db, SQLITE_MISUSE, 0);
+ sqlite3Error(p->db, SQLITE_MISUSE);
sqlite3_mutex_leave(p->db->mutex);
sqlite3_log(SQLITE_MISUSE,
"bind on a busy prepared statement: [%s]", p->zSql);
return SQLITE_MISUSE_BKPT;
}
if( i<1 || i>p->nVar ){
- sqlite3Error(p->db, SQLITE_RANGE, 0);
+ sqlite3Error(p->db, SQLITE_RANGE);
sqlite3_mutex_leave(p->db->mutex);
return SQLITE_RANGE;
}
@@ -67297,7 +68435,7 @@ static int vdbeUnbind(Vdbe *p, int i){
pVar = &p->aVar[i];
sqlite3VdbeMemRelease(pVar);
pVar->flags = MEM_Null;
- sqlite3Error(p->db, SQLITE_OK, 0);
+ sqlite3Error(p->db, SQLITE_OK);
/* If the bit corresponding to this variable in Vdbe.expmask is set, then
** binding a new value to this variable invalidates the current query plan.
@@ -67339,7 +68477,7 @@ static int bindText(
if( rc==SQLITE_OK && encoding!=0 ){
rc = sqlite3VdbeChangeEncoding(pVar, ENC(p->db));
}
- sqlite3Error(p->db, rc, 0);
+ sqlite3Error(p->db, rc);
rc = sqlite3ApiExit(p->db, rc);
}
sqlite3_mutex_leave(p->db->mutex);
@@ -67362,6 +68500,20 @@ SQLITE_API int sqlite3_bind_blob(
){
return bindText(pStmt, i, zData, nData, xDel, 0);
}
+SQLITE_API int sqlite3_bind_blob64(
+ sqlite3_stmt *pStmt,
+ int i,
+ const void *zData,
+ sqlite3_uint64 nData,
+ void (*xDel)(void*)
+){
+ assert( xDel!=SQLITE_DYNAMIC );
+ if( nData>0x7fffffff ){
+ return invokeValueDestructor(zData, xDel, 0);
+ }else{
+ return bindText(pStmt, i, zData, (int)nData, xDel, 0);
+ }
+}
SQLITE_API int sqlite3_bind_double(sqlite3_stmt *pStmt, int i, double rValue){
int rc;
Vdbe *p = (Vdbe *)pStmt;
@@ -67403,6 +68555,22 @@ SQLITE_API int sqlite3_bind_text(
){
return bindText(pStmt, i, zData, nData, xDel, SQLITE_UTF8);
}
+SQLITE_API int sqlite3_bind_text64(
+ sqlite3_stmt *pStmt,
+ int i,
+ const char *zData,
+ sqlite3_uint64 nData,
+ void (*xDel)(void*),
+ unsigned char enc
+){
+ assert( xDel!=SQLITE_DYNAMIC );
+ if( nData>0x7fffffff ){
+ return invokeValueDestructor(zData, xDel, 0);
+ }else{
+ if( enc==SQLITE_UTF16 ) enc = SQLITE_UTF16NATIVE;
+ return bindText(pStmt, i, zData, (int)nData, xDel, enc);
+ }
+}
#ifndef SQLITE_OMIT_UTF16
SQLITE_API int sqlite3_bind_text16(
sqlite3_stmt *pStmt,
@@ -67422,7 +68590,7 @@ SQLITE_API int sqlite3_bind_value(sqlite3_stmt *pStmt, int i, const sqlite3_valu
break;
}
case SQLITE_FLOAT: {
- rc = sqlite3_bind_double(pStmt, i, pValue->r);
+ rc = sqlite3_bind_double(pStmt, i, pValue->u.r);
break;
}
case SQLITE_BLOB: {
@@ -67525,7 +68693,7 @@ SQLITE_PRIVATE int sqlite3TransferBindings(sqlite3_stmt *pFromStmt, sqlite3_stmt
** Deprecated external interface. Internal/core SQLite code
** should call sqlite3TransferBindings.
**
-** Is is misuse to call this routine with statements from different
+** It is misuse to call this routine with statements from different
** database connections. But as this is a deprecated interface, we
** will not bother to check for that condition.
**
@@ -67669,7 +68837,7 @@ static int findNextHostParameter(const char *zSql, int *pnToken){
** ALGORITHM: Scan the input string looking for host parameters in any of
** these forms: ?, ?N, $A, @A, :A. Take care to avoid text within
** string literals, quoted identifier names, and comments. For text forms,
-** the host parameter index is found by scanning the perpared
+** the host parameter index is found by scanning the prepared
** statement for the corresponding OP_Variable opcode. Once the host
** parameter index is known, locate the value in p->aVar[]. Then render
** the value as a literal in place of the host parameter name.
@@ -67732,7 +68900,7 @@ SQLITE_PRIVATE char *sqlite3VdbeExpandSql(
}else if( pVar->flags & MEM_Int ){
sqlite3XPrintf(&out, 0, "%lld", pVar->u.i);
}else if( pVar->flags & MEM_Real ){
- sqlite3XPrintf(&out, 0, "%!.15g", pVar->r);
+ sqlite3XPrintf(&out, 0, "%!.15g", pVar->u.r);
}else if( pVar->flags & MEM_Str ){
int nOut; /* Number of bytes of the string text to include in output */
#ifndef SQLITE_OMIT_UTF16
@@ -67789,121 +68957,6 @@ SQLITE_PRIVATE char *sqlite3VdbeExpandSql(
#endif /* #ifndef SQLITE_OMIT_TRACE */
-/*****************************************************************************
-** The following code implements the data-structure explaining logic
-** for the Vdbe.
-*/
-
-#if defined(SQLITE_ENABLE_TREE_EXPLAIN)
-
-/*
-** Allocate a new Explain object
-*/
-SQLITE_PRIVATE void sqlite3ExplainBegin(Vdbe *pVdbe){
- if( pVdbe ){
- Explain *p;
- sqlite3BeginBenignMalloc();
- p = (Explain *)sqlite3MallocZero( sizeof(Explain) );
- if( p ){
- p->pVdbe = pVdbe;
- sqlite3_free(pVdbe->pExplain);
- pVdbe->pExplain = p;
- sqlite3StrAccumInit(&p->str, p->zBase, sizeof(p->zBase),
- SQLITE_MAX_LENGTH);
- p->str.useMalloc = 2;
- }else{
- sqlite3EndBenignMalloc();
- }
- }
-}
-
-/*
-** Return true if the Explain ends with a new-line.
-*/
-static int endsWithNL(Explain *p){
- return p && p->str.zText && p->str.nChar
- && p->str.zText[p->str.nChar-1]=='\n';
-}
-
-/*
-** Append text to the indentation
-*/
-SQLITE_PRIVATE void sqlite3ExplainPrintf(Vdbe *pVdbe, const char *zFormat, ...){
- Explain *p;
- if( pVdbe && (p = pVdbe->pExplain)!=0 ){
- va_list ap;
- if( p->nIndent && endsWithNL(p) ){
- int n = p->nIndent;
- if( n>ArraySize(p->aIndent) ) n = ArraySize(p->aIndent);
- sqlite3AppendSpace(&p->str, p->aIndent[n-1]);
- }
- va_start(ap, zFormat);
- sqlite3VXPrintf(&p->str, SQLITE_PRINTF_INTERNAL, zFormat, ap);
- va_end(ap);
- }
-}
-
-/*
-** Append a '\n' if there is not already one.
-*/
-SQLITE_PRIVATE void sqlite3ExplainNL(Vdbe *pVdbe){
- Explain *p;
- if( pVdbe && (p = pVdbe->pExplain)!=0 && !endsWithNL(p) ){
- sqlite3StrAccumAppend(&p->str, "\n", 1);
- }
-}
-
-/*
-** Push a new indentation level. Subsequent lines will be indented
-** so that they begin at the current cursor position.
-*/
-SQLITE_PRIVATE void sqlite3ExplainPush(Vdbe *pVdbe){
- Explain *p;
- if( pVdbe && (p = pVdbe->pExplain)!=0 ){
- if( p->str.zText && p->nIndent<ArraySize(p->aIndent) ){
- const char *z = p->str.zText;
- int i = p->str.nChar-1;
- int x;
- while( i>=0 && z[i]!='\n' ){ i--; }
- x = (p->str.nChar - 1) - i;
- if( p->nIndent && x<p->aIndent[p->nIndent-1] ){
- x = p->aIndent[p->nIndent-1];
- }
- p->aIndent[p->nIndent] = x;
- }
- p->nIndent++;
- }
-}
-
-/*
-** Pop the indentation stack by one level.
-*/
-SQLITE_PRIVATE void sqlite3ExplainPop(Vdbe *p){
- if( p && p->pExplain ) p->pExplain->nIndent--;
-}
-
-/*
-** Free the indentation structure
-*/
-SQLITE_PRIVATE void sqlite3ExplainFinish(Vdbe *pVdbe){
- if( pVdbe && pVdbe->pExplain ){
- sqlite3_free(pVdbe->zExplain);
- sqlite3ExplainNL(pVdbe);
- pVdbe->zExplain = sqlite3StrAccumFinish(&pVdbe->pExplain->str);
- sqlite3_free(pVdbe->pExplain);
- pVdbe->pExplain = 0;
- sqlite3EndBenignMalloc();
- }
-}
-
-/*
-** Return the explanation of a virtual machine.
-*/
-SQLITE_PRIVATE const char *sqlite3VdbeExplanation(Vdbe *pVdbe){
- return (pVdbe && pVdbe->zExplain) ? pVdbe->zExplain : 0;
-}
-#endif /* defined(SQLITE_DEBUG) */
-
/************** End of vdbetrace.c *******************************************/
/************** Begin file vdbe.c ********************************************/
/*
@@ -68052,7 +69105,7 @@ SQLITE_API int sqlite3_found_count = 0;
** already. Return non-zero if a malloc() fails.
*/
#define Stringify(P, enc) \
- if(((P)->flags&(MEM_Str|MEM_Blob))==0 && sqlite3VdbeMemStringify(P,enc)) \
+ if(((P)->flags&(MEM_Str|MEM_Blob))==0 && sqlite3VdbeMemStringify(P,enc,0)) \
{ goto no_mem; }
/*
@@ -68115,11 +69168,12 @@ static VdbeCursor *allocateCursor(
sqlite3VdbeFreeCursor(p, p->apCsr[iCur]);
p->apCsr[iCur] = 0;
}
- if( SQLITE_OK==sqlite3VdbeMemGrow(pMem, nByte, 0) ){
+ if( SQLITE_OK==sqlite3VdbeMemClearAndResize(pMem, nByte) ){
p->apCsr[iCur] = pCx = (VdbeCursor*)pMem->z;
memset(pCx, 0, sizeof(VdbeCursor));
pCx->iDb = iDb;
pCx->nField = nField;
+ pCx->aOffset = &pCx->aType[nField];
if( isBtreeCursor ){
pCx->pCursor = (BtCursor*)
&pMem->z[ROUND8(sizeof(VdbeCursor))+2*sizeof(u32)*nField];
@@ -68134,23 +69188,31 @@ static VdbeCursor *allocateCursor(
** do so without loss of information. In other words, if the string
** looks like a number, convert it into a number. If it does not
** look like a number, leave it alone.
+**
+** If the bTryForInt flag is true, then extra effort is made to give
+** an integer representation. Strings that look like floating point
+** values but which have no fractional component (example: '48.00')
+** will have a MEM_Int representation when bTryForInt is true.
+**
+** If bTryForInt is false, then if the input string contains a decimal
+** point or exponential notation, the result is only MEM_Real, even
+** if there is an exact integer representation of the quantity.
*/
-static void applyNumericAffinity(Mem *pRec){
+static void applyNumericAffinity(Mem *pRec, int bTryForInt){
double rValue;
i64 iValue;
u8 enc = pRec->enc;
- if( (pRec->flags&MEM_Str)==0 ) return;
+ assert( (pRec->flags & (MEM_Str|MEM_Int|MEM_Real))==MEM_Str );
if( sqlite3AtoF(pRec->z, &rValue, pRec->n, enc)==0 ) return;
if( 0==sqlite3Atoi64(pRec->z, &iValue, pRec->n, enc) ){
pRec->u.i = iValue;
pRec->flags |= MEM_Int;
}else{
- pRec->r = rValue;
+ pRec->u.r = rValue;
pRec->flags |= MEM_Real;
+ if( bTryForInt ) sqlite3VdbeIntegerAffinity(pRec);
}
}
-#define ApplyNumericAffinity(X) \
- if(((X)->flags&(MEM_Real|MEM_Int))==0){applyNumericAffinity(X);}
/*
** Processing is determine by the affinity parameter:
@@ -68175,21 +69237,23 @@ static void applyAffinity(
char affinity, /* The affinity to be applied */
u8 enc /* Use this text encoding */
){
- if( affinity==SQLITE_AFF_TEXT ){
+ if( affinity>=SQLITE_AFF_NUMERIC ){
+ assert( affinity==SQLITE_AFF_INTEGER || affinity==SQLITE_AFF_REAL
+ || affinity==SQLITE_AFF_NUMERIC );
+ if( (pRec->flags & MEM_Int)==0 ){
+ if( (pRec->flags & MEM_Real)==0 ){
+ if( pRec->flags & MEM_Str ) applyNumericAffinity(pRec,1);
+ }else{
+ sqlite3VdbeIntegerAffinity(pRec);
+ }
+ }
+ }else if( affinity==SQLITE_AFF_TEXT ){
/* Only attempt the conversion to TEXT if there is an integer or real
** representation (blob and NULL do not get converted) but no string
** representation.
*/
if( 0==(pRec->flags&MEM_Str) && (pRec->flags&(MEM_Real|MEM_Int)) ){
- sqlite3VdbeMemStringify(pRec, enc);
- }
- pRec->flags &= ~(MEM_Real|MEM_Int);
- }else if( affinity!=SQLITE_AFF_NONE ){
- assert( affinity==SQLITE_AFF_INTEGER || affinity==SQLITE_AFF_REAL
- || affinity==SQLITE_AFF_NUMERIC );
- ApplyNumericAffinity(pRec);
- if( pRec->flags & MEM_Real ){
- sqlite3VdbeIntegerAffinity(pRec);
+ sqlite3VdbeMemStringify(pRec, enc, 1);
}
}
}
@@ -68204,7 +69268,7 @@ SQLITE_API int sqlite3_value_numeric_type(sqlite3_value *pVal){
int eType = sqlite3_value_type(pVal);
if( eType==SQLITE_TEXT ){
Mem *pMem = (Mem*)pVal;
- applyNumericAffinity(pMem);
+ applyNumericAffinity(pMem, 0);
eType = sqlite3_value_type(pVal);
}
return eType;
@@ -68223,24 +69287,36 @@ SQLITE_PRIVATE void sqlite3ValueApplyAffinity(
}
/*
+** pMem currently only holds a string type (or maybe a BLOB that we can
+** interpret as a string if we want to). Compute its corresponding
+** numeric type, if has one. Set the pMem->u.r and pMem->u.i fields
+** accordingly.
+*/
+static u16 SQLITE_NOINLINE computeNumericType(Mem *pMem){
+ assert( (pMem->flags & (MEM_Int|MEM_Real))==0 );
+ assert( (pMem->flags & (MEM_Str|MEM_Blob))!=0 );
+ if( sqlite3AtoF(pMem->z, &pMem->u.r, pMem->n, pMem->enc)==0 ){
+ return 0;
+ }
+ if( sqlite3Atoi64(pMem->z, &pMem->u.i, pMem->n, pMem->enc)==SQLITE_OK ){
+ return MEM_Int;
+ }
+ return MEM_Real;
+}
+
+/*
** Return the numeric type for pMem, either MEM_Int or MEM_Real or both or
** none.
**
** Unlike applyNumericAffinity(), this routine does not modify pMem->flags.
-** But it does set pMem->r and pMem->u.i appropriately.
+** But it does set pMem->u.r and pMem->u.i appropriately.
*/
static u16 numericType(Mem *pMem){
if( pMem->flags & (MEM_Int|MEM_Real) ){
return pMem->flags & (MEM_Int|MEM_Real);
}
if( pMem->flags & (MEM_Str|MEM_Blob) ){
- if( sqlite3AtoF(pMem->z, &pMem->r, pMem->n, pMem->enc)==0 ){
- return 0;
- }
- if( sqlite3Atoi64(pMem->z, &pMem->u.i, pMem->n, pMem->enc)==SQLITE_OK ){
- return MEM_Int;
- }
- return MEM_Real;
+ return computeNumericType(pMem);
}
return 0;
}
@@ -68343,7 +69419,7 @@ static void memTracePrint(Mem *p){
printf(" i:%lld", p->u.i);
#ifndef SQLITE_OMIT_FLOATING_POINT
}else if( p->flags & MEM_Real ){
- printf(" r:%g", p->r);
+ printf(" r:%g", p->u.r);
#endif
}else if( p->flags & MEM_RowSet ){
printf(" (rowset)");
@@ -68613,7 +69689,7 @@ SQLITE_PRIVATE int sqlite3VdbeExec(
assert( pOp->p2<=(p->nMem-p->nCursor) );
pOut = &aMem[pOp->p2];
memAboutToChange(p, pOut);
- VdbeMemRelease(pOut);
+ if( VdbeMemDynamic(pOut) ) sqlite3VdbeMemSetNull(pOut);
pOut->flags = MEM_Int;
}
@@ -68975,7 +70051,7 @@ case OP_Int64: { /* out2-prerelease */
case OP_Real: { /* same as TK_FLOAT, out2-prerelease */
pOut->flags = MEM_Real;
assert( !sqlite3IsNaN(*pOp->p4.pReal) );
- pOut->r = *pOp->p4.pReal;
+ pOut->u.r = *pOp->p4.pReal;
break;
}
#endif
@@ -68998,9 +70074,9 @@ case OP_String8: { /* same as TK_STRING, out2-prerelease */
rc = sqlite3VdbeMemSetStr(pOut, pOp->p4.z, -1, SQLITE_UTF8, SQLITE_STATIC);
if( rc==SQLITE_TOOBIG ) goto too_big;
if( SQLITE_OK!=sqlite3VdbeChangeEncoding(pOut, encoding) ) goto no_mem;
- assert( pOut->zMalloc==pOut->z );
+ assert( pOut->szMalloc>0 && pOut->zMalloc==pOut->z );
assert( VdbeMemDynamic(pOut)==0 );
- pOut->zMalloc = 0;
+ pOut->szMalloc = 0;
pOut->flags |= MEM_Static;
if( pOp->p4type==P4_DYNAMIC ){
sqlite3DbFree(db, pOp->p4.z);
@@ -69052,7 +70128,7 @@ case OP_Null: { /* out2-prerelease */
while( cnt>0 ){
pOut++;
memAboutToChange(p, pOut);
- VdbeMemRelease(pOut);
+ sqlite3VdbeMemSetNull(pOut);
pOut->flags = nullFlag;
cnt--;
}
@@ -69120,7 +70196,6 @@ case OP_Variable: { /* out2-prerelease */
** for P3 to be less than 1.
*/
case OP_Move: {
- char *zMalloc; /* Holding variable for allocated memory */
int n; /* Number of registers left to copy */
int p1; /* Register to copy from */
int p2; /* Register to copy to */
@@ -69138,17 +70213,12 @@ case OP_Move: {
assert( pIn1<=&aMem[(p->nMem-p->nCursor)] );
assert( memIsValid(pIn1) );
memAboutToChange(p, pOut);
- VdbeMemRelease(pOut);
- zMalloc = pOut->zMalloc;
- memcpy(pOut, pIn1, sizeof(Mem));
+ sqlite3VdbeMemMove(pOut, pIn1);
#ifdef SQLITE_DEBUG
if( pOut->pScopyFrom>=&aMem[p1] && pOut->pScopyFrom<&aMem[p1+pOp->p3] ){
pOut->pScopyFrom += p1 - pOp->p2;
}
#endif
- pIn1->flags = MEM_Undefined;
- pIn1->xDel = 0;
- pIn1->zMalloc = zMalloc;
REGISTER_TRACE(p2++, pOut);
pIn1++;
pOut++;
@@ -69453,7 +70523,7 @@ fp_math:
if( sqlite3IsNaN(rB) ){
goto arithmetic_result_is_null;
}
- pOut->r = rB;
+ pOut->u.r = rB;
MemSetTypeFlag(pOut, MEM_Real);
if( ((type1|type2)&MEM_Real)==0 && !bIntint ){
sqlite3VdbeIntegerAffinity(pOut);
@@ -69518,8 +70588,8 @@ case OP_Function: {
apVal = p->apArg;
assert( apVal || n==0 );
assert( pOp->p3>0 && pOp->p3<=(p->nMem-p->nCursor) );
- pOut = &aMem[pOp->p3];
- memAboutToChange(p, pOut);
+ ctx.pOut = &aMem[pOp->p3];
+ memAboutToChange(p, ctx.pOut);
assert( n==0 || (pOp->p2>0 && pOp->p2+n<=(p->nMem-p->nCursor)+1) );
assert( pOp->p3<pOp->p2 || pOp->p3>=pOp->p2+n );
@@ -69535,65 +70605,29 @@ case OP_Function: {
ctx.pFunc = pOp->p4.pFunc;
ctx.iOp = pc;
ctx.pVdbe = p;
-
- /* The output cell may already have a buffer allocated. Move
- ** the pointer to ctx.s so in case the user-function can use
- ** the already allocated buffer instead of allocating a new one.
- */
- memcpy(&ctx.s, pOut, sizeof(Mem));
- pOut->flags = MEM_Null;
- pOut->xDel = 0;
- pOut->zMalloc = 0;
- MemSetTypeFlag(&ctx.s, MEM_Null);
-
+ MemSetTypeFlag(ctx.pOut, MEM_Null);
ctx.fErrorOrAux = 0;
- if( ctx.pFunc->funcFlags & SQLITE_FUNC_NEEDCOLL ){
- assert( pOp>aOp );
- assert( pOp[-1].p4type==P4_COLLSEQ );
- assert( pOp[-1].opcode==OP_CollSeq );
- ctx.pColl = pOp[-1].p4.pColl;
- }
db->lastRowid = lastRowid;
(*ctx.pFunc->xFunc)(&ctx, n, apVal); /* IMP: R-24505-23230 */
- lastRowid = db->lastRowid;
-
- if( db->mallocFailed ){
- /* Even though a malloc() has failed, the implementation of the
- ** user function may have called an sqlite3_result_XXX() function
- ** to return a value. The following call releases any resources
- ** associated with such a value.
- */
- sqlite3VdbeMemRelease(&ctx.s);
- goto no_mem;
- }
+ lastRowid = db->lastRowid; /* Remember rowid changes made by xFunc */
/* If the function returned an error, throw an exception */
if( ctx.fErrorOrAux ){
if( ctx.isError ){
- sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(&ctx.s));
+ sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(ctx.pOut));
rc = ctx.isError;
}
sqlite3VdbeDeleteAuxData(p, pc, pOp->p1);
}
/* Copy the result of the function into register P3 */
- sqlite3VdbeChangeEncoding(&ctx.s, encoding);
- assert( pOut->flags==MEM_Null );
- memcpy(pOut, &ctx.s, sizeof(Mem));
- if( sqlite3VdbeMemTooBig(pOut) ){
+ sqlite3VdbeChangeEncoding(ctx.pOut, encoding);
+ if( sqlite3VdbeMemTooBig(ctx.pOut) ){
goto too_big;
}
-#if 0
- /* The app-defined function has done something that as caused this
- ** statement to expire. (Perhaps the function called sqlite3_exec()
- ** with a CREATE TABLE statement.)
- */
- if( p->expired ) rc = SQLITE_ABORT;
-#endif
-
- REGISTER_TRACE(pOp->p3, pOut);
- UPDATE_MAX_BLOBSIZE(pOut);
+ REGISTER_TRACE(pOp->p3, ctx.pOut);
+ UPDATE_MAX_BLOBSIZE(ctx.pOut);
break;
}
@@ -69741,106 +70775,37 @@ case OP_RealAffinity: { /* in1 */
#endif
#ifndef SQLITE_OMIT_CAST
-/* Opcode: ToText P1 * * * *
+/* Opcode: Cast P1 P2 * * *
+** Synopsis: affinity(r[P1])
**
-** Force the value in register P1 to be text.
-** If the value is numeric, convert it to a string using the
-** equivalent of sprintf(). Blob values are unchanged and
-** are afterwards simply interpreted as text.
+** Force the value in register P1 to be the type defined by P2.
+**
+** <ul>
+** <li value="97"> TEXT
+** <li value="98"> BLOB
+** <li value="99"> NUMERIC
+** <li value="100"> INTEGER
+** <li value="101"> REAL
+** </ul>
**
** A NULL value is not changed by this routine. It remains NULL.
*/
-case OP_ToText: { /* same as TK_TO_TEXT, in1 */
+case OP_Cast: { /* in1 */
+ assert( pOp->p2>=SQLITE_AFF_NONE && pOp->p2<=SQLITE_AFF_REAL );
+ testcase( pOp->p2==SQLITE_AFF_TEXT );
+ testcase( pOp->p2==SQLITE_AFF_NONE );
+ testcase( pOp->p2==SQLITE_AFF_NUMERIC );
+ testcase( pOp->p2==SQLITE_AFF_INTEGER );
+ testcase( pOp->p2==SQLITE_AFF_REAL );
pIn1 = &aMem[pOp->p1];
memAboutToChange(p, pIn1);
- if( pIn1->flags & MEM_Null ) break;
- assert( MEM_Str==(MEM_Blob>>3) );
- pIn1->flags |= (pIn1->flags&MEM_Blob)>>3;
- applyAffinity(pIn1, SQLITE_AFF_TEXT, encoding);
rc = ExpandBlob(pIn1);
- assert( pIn1->flags & MEM_Str || db->mallocFailed );
- pIn1->flags &= ~(MEM_Int|MEM_Real|MEM_Blob|MEM_Zero);
- UPDATE_MAX_BLOBSIZE(pIn1);
- break;
-}
-
-/* Opcode: ToBlob P1 * * * *
-**
-** Force the value in register P1 to be a BLOB.
-** If the value is numeric, convert it to a string first.
-** Strings are simply reinterpreted as blobs with no change
-** to the underlying data.
-**
-** A NULL value is not changed by this routine. It remains NULL.
-*/
-case OP_ToBlob: { /* same as TK_TO_BLOB, in1 */
- pIn1 = &aMem[pOp->p1];
- if( pIn1->flags & MEM_Null ) break;
- if( (pIn1->flags & MEM_Blob)==0 ){
- applyAffinity(pIn1, SQLITE_AFF_TEXT, encoding);
- assert( pIn1->flags & MEM_Str || db->mallocFailed );
- MemSetTypeFlag(pIn1, MEM_Blob);
- }else{
- pIn1->flags &= ~(MEM_TypeMask&~MEM_Blob);
- }
+ sqlite3VdbeMemCast(pIn1, pOp->p2, encoding);
UPDATE_MAX_BLOBSIZE(pIn1);
break;
}
-
-/* Opcode: ToNumeric P1 * * * *
-**
-** Force the value in register P1 to be numeric (either an
-** integer or a floating-point number.)
-** If the value is text or blob, try to convert it to an using the
-** equivalent of atoi() or atof() and store 0 if no such conversion
-** is possible.
-**
-** A NULL value is not changed by this routine. It remains NULL.
-*/
-case OP_ToNumeric: { /* same as TK_TO_NUMERIC, in1 */
- pIn1 = &aMem[pOp->p1];
- sqlite3VdbeMemNumerify(pIn1);
- break;
-}
#endif /* SQLITE_OMIT_CAST */
-/* Opcode: ToInt P1 * * * *
-**
-** Force the value in register P1 to be an integer. If
-** The value is currently a real number, drop its fractional part.
-** If the value is text or blob, try to convert it to an integer using the
-** equivalent of atoi() and store 0 if no such conversion is possible.
-**
-** A NULL value is not changed by this routine. It remains NULL.
-*/
-case OP_ToInt: { /* same as TK_TO_INT, in1 */
- pIn1 = &aMem[pOp->p1];
- if( (pIn1->flags & MEM_Null)==0 ){
- sqlite3VdbeMemIntegerify(pIn1);
- }
- break;
-}
-
-#if !defined(SQLITE_OMIT_CAST) && !defined(SQLITE_OMIT_FLOATING_POINT)
-/* Opcode: ToReal P1 * * * *
-**
-** Force the value in register P1 to be a floating point number.
-** If The value is currently an integer, convert it.
-** If the value is text or blob, try to convert it to an integer using the
-** equivalent of atoi() and store 0.0 if no such conversion is possible.
-**
-** A NULL value is not changed by this routine. It remains NULL.
-*/
-case OP_ToReal: { /* same as TK_TO_REAL, in1 */
- pIn1 = &aMem[pOp->p1];
- memAboutToChange(p, pIn1);
- if( (pIn1->flags & MEM_Null)==0 ){
- sqlite3VdbeMemRealify(pIn1);
- }
- break;
-}
-#endif /* !defined(SQLITE_OMIT_CAST) && !defined(SQLITE_OMIT_FLOATING_POINT) */
-
/* Opcode: Lt P1 P2 P3 P4 P5
** Synopsis: if r[P1]<r[P3] goto P2
**
@@ -69976,15 +70941,35 @@ case OP_Ge: { /* same as TK_GE, jump, in1, in3 */
}else{
/* Neither operand is NULL. Do a comparison. */
affinity = pOp->p5 & SQLITE_AFF_MASK;
- if( affinity ){
- applyAffinity(pIn1, affinity, encoding);
- applyAffinity(pIn3, affinity, encoding);
- if( db->mallocFailed ) goto no_mem;
+ if( affinity>=SQLITE_AFF_NUMERIC ){
+ if( (pIn1->flags & (MEM_Int|MEM_Real|MEM_Str))==MEM_Str ){
+ applyNumericAffinity(pIn1,0);
+ }
+ if( (pIn3->flags & (MEM_Int|MEM_Real|MEM_Str))==MEM_Str ){
+ applyNumericAffinity(pIn3,0);
+ }
+ }else if( affinity==SQLITE_AFF_TEXT ){
+ if( (pIn1->flags & MEM_Str)==0 && (pIn1->flags & (MEM_Int|MEM_Real))!=0 ){
+ testcase( pIn1->flags & MEM_Int );
+ testcase( pIn1->flags & MEM_Real );
+ sqlite3VdbeMemStringify(pIn1, encoding, 1);
+ }
+ if( (pIn3->flags & MEM_Str)==0 && (pIn3->flags & (MEM_Int|MEM_Real))!=0 ){
+ testcase( pIn3->flags & MEM_Int );
+ testcase( pIn3->flags & MEM_Real );
+ sqlite3VdbeMemStringify(pIn3, encoding, 1);
+ }
}
-
assert( pOp->p4type==P4_COLLSEQ || pOp->p4.pColl==0 );
- ExpandBlob(pIn1);
- ExpandBlob(pIn3);
+ if( pIn1->flags & MEM_Zero ){
+ sqlite3VdbeMemExpandBlob(pIn1);
+ flags1 &= ~MEM_Zero;
+ }
+ if( pIn3->flags & MEM_Zero ){
+ sqlite3VdbeMemExpandBlob(pIn3);
+ flags3 &= ~MEM_Zero;
+ }
+ if( db->mallocFailed ) goto no_mem;
res = sqlite3MemCompare(pIn3, pIn1, pOp->p4.pColl);
}
switch( pOp->opcode ){
@@ -70009,8 +70994,8 @@ case OP_Ge: { /* same as TK_GE, jump, in1, in3 */
}
}
/* Undo any changes made by applyAffinity() to the input registers. */
- pIn1->flags = (pIn1->flags&~MEM_TypeMask) | (flags1&MEM_TypeMask);
- pIn3->flags = (pIn3->flags&~MEM_TypeMask) | (flags3&MEM_TypeMask);
+ pIn1->flags = flags1;
+ pIn3->flags = flags3;
break;
}
@@ -70178,10 +71163,10 @@ case OP_Or: { /* same as TK_OR, in1, in2, out3 */
case OP_Not: { /* same as TK_NOT, in1, out2 */
pIn1 = &aMem[pOp->p1];
pOut = &aMem[pOp->p2];
- if( pIn1->flags & MEM_Null ){
- sqlite3VdbeMemSetNull(pOut);
- }else{
- sqlite3VdbeMemSetInt64(pOut, !sqlite3VdbeIntValue(pIn1));
+ sqlite3VdbeMemSetNull(pOut);
+ if( (pIn1->flags & MEM_Null)==0 ){
+ pOut->flags = MEM_Int;
+ pOut->u.i = !sqlite3VdbeIntValue(pIn1);
}
break;
}
@@ -70196,10 +71181,10 @@ case OP_Not: { /* same as TK_NOT, in1, out2 */
case OP_BitNot: { /* same as TK_BITNOT, in1, out2 */
pIn1 = &aMem[pOp->p1];
pOut = &aMem[pOp->p2];
- if( pIn1->flags & MEM_Null ){
- sqlite3VdbeMemSetNull(pOut);
- }else{
- sqlite3VdbeMemSetInt64(pOut, ~sqlite3VdbeIntValue(pIn1));
+ sqlite3VdbeMemSetNull(pOut);
+ if( (pIn1->flags & MEM_Null)==0 ){
+ pOut->flags = MEM_Int;
+ pOut->u.i = ~sqlite3VdbeIntValue(pIn1);
}
break;
}
@@ -70317,7 +71302,6 @@ case OP_Column: {
int p2; /* column number to retrieve */
VdbeCursor *pC; /* The VDBE cursor */
BtCursor *pCrsr; /* The BTree cursor */
- u32 *aType; /* aType[i] holds the numeric type of the i-th column */
u32 *aOffset; /* aOffset[i] is offset to start of data for i-th column */
int len; /* The length of the serialized data for the column */
int i; /* Loop counter */
@@ -70330,6 +71314,7 @@ case OP_Column: {
u32 szField; /* Number of bytes in the content of a field */
u32 avail; /* Number of bytes of available data */
u32 t; /* A type code from the record header */
+ u16 fx; /* pDest->flags value */
Mem *pReg; /* PseudoTable input register */
p2 = pOp->p2;
@@ -70340,8 +71325,7 @@ case OP_Column: {
pC = p->apCsr[pOp->p1];
assert( pC!=0 );
assert( p2<pC->nField );
- aType = pC->aType;
- aOffset = aType + pC->nField;
+ aOffset = pC->aOffset;
#ifndef SQLITE_OMIT_VIRTUALTABLE
assert( pC->pVtabCursor==0 ); /* OP_Column never called on virtual table */
#endif
@@ -70352,7 +71336,7 @@ case OP_Column: {
/* If the cursor cache is stale, bring it up-to-date */
rc = sqlite3VdbeCursorMoveto(pC);
if( rc ) goto abort_due_to_error;
- if( pC->cacheStatus!=p->cacheCtr || (pOp->p5&OPFLAG_CLEARCACHE)!=0 ){
+ if( pC->cacheStatus!=p->cacheCtr ){
if( pC->nullRow ){
if( pCrsr==0 ){
assert( pC->pseudoTableReg>0 );
@@ -70362,7 +71346,7 @@ case OP_Column: {
pC->payloadSize = pC->szRow = avail = pReg->n;
pC->aRow = (u8*)pReg->z;
}else{
- MemSetTypeFlag(pDest, MEM_Null);
+ sqlite3VdbeMemSetNull(pDest);
goto op_column_out;
}
}else{
@@ -70397,14 +71381,6 @@ case OP_Column: {
pC->iHdrOffset = getVarint32(pC->aRow, offset);
pC->nHdrParsed = 0;
aOffset[0] = offset;
- if( avail<offset ){
- /* pC->aRow does not have to hold the entire row, but it does at least
- ** need to cover the header of the record. If pC->aRow does not contain
- ** the complete header, then set it to zero, forcing the header to be
- ** dynamically allocated. */
- pC->aRow = 0;
- pC->szRow = 0;
- }
/* Make sure a corrupt database has not given us an oversize header.
** Do this now to avoid an oversize memory allocation.
@@ -70419,15 +71395,32 @@ case OP_Column: {
rc = SQLITE_CORRUPT_BKPT;
goto op_column_error;
}
+
+ if( avail<offset ){
+ /* pC->aRow does not have to hold the entire row, but it does at least
+ ** need to cover the header of the record. If pC->aRow does not contain
+ ** the complete header, then set it to zero, forcing the header to be
+ ** dynamically allocated. */
+ pC->aRow = 0;
+ pC->szRow = 0;
+ }
+
+ /* The following goto is an optimization. It can be omitted and
+ ** everything will still work. But OP_Column is measurably faster
+ ** by skipping the subsequent conditional, which is always true.
+ */
+ assert( pC->nHdrParsed<=p2 ); /* Conditional skipped */
+ goto op_column_read_header;
}
/* Make sure at least the first p2+1 entries of the header have been
- ** parsed and valid information is in aOffset[] and aType[].
+ ** parsed and valid information is in aOffset[] and pC->aType[].
*/
if( pC->nHdrParsed<=p2 ){
/* If there is more header available for parsing in the record, try
** to extract additional fields up through the p2+1-th field
*/
+ op_column_read_header:
if( pC->iHdrOffset<aOffset[0] ){
/* Make sure zData points to enough of the record to cover the header. */
if( pC->aRow==0 ){
@@ -70442,7 +71435,7 @@ case OP_Column: {
zData = pC->aRow;
}
- /* Fill in aType[i] and aOffset[i] values through the p2-th field. */
+ /* Fill in pC->aType[i] and aOffset[i] values through the p2-th field. */
i = pC->nHdrParsed;
offset = aOffset[i];
zHdr = zData + pC->iHdrOffset;
@@ -70455,7 +71448,7 @@ case OP_Column: {
}else{
zHdr += sqlite3GetVarint32(zHdr, &t);
}
- aType[i] = t;
+ pC->aType[i] = t;
szField = sqlite3VdbeSerialTypeLen(t);
offset += szField;
if( offset<szField ){ /* True if offset overflows */
@@ -70472,15 +71465,16 @@ case OP_Column: {
sMem.flags = MEM_Null;
}
- /* If we have read more header data than was contained in the header,
- ** or if the end of the last field appears to be past the end of the
- ** record, or if the end of the last field appears to be before the end
- ** of the record (when all fields present), then we must be dealing
- ** with a corrupt database.
+ /* The record is corrupt if any of the following are true:
+ ** (1) the bytes of the header extend past the declared header size
+ ** (zHdr>zEndHdr)
+ ** (2) the entire header was used but not all data was used
+ ** (zHdr==zEndHdr && offset!=pC->payloadSize)
+ ** (3) the end of the data extends beyond the end of the record.
+ ** (offset > pC->payloadSize)
*/
- if( (zHdr > zEndHdr)
+ if( (zHdr>=zEndHdr && (zHdr>zEndHdr || offset!=pC->payloadSize))
|| (offset > pC->payloadSize)
- || (zHdr==zEndHdr && offset!=pC->payloadSize)
){
rc = SQLITE_CORRUPT_BKPT;
goto op_column_error;
@@ -70495,68 +71489,68 @@ case OP_Column: {
if( pOp->p4type==P4_MEM ){
sqlite3VdbeMemShallowCopy(pDest, pOp->p4.pMem, MEM_Static);
}else{
- MemSetTypeFlag(pDest, MEM_Null);
+ sqlite3VdbeMemSetNull(pDest);
}
goto op_column_out;
}
}
/* Extract the content for the p2+1-th column. Control can only
- ** reach this point if aOffset[p2], aOffset[p2+1], and aType[p2] are
+ ** reach this point if aOffset[p2], aOffset[p2+1], and pC->aType[p2] are
** all valid.
*/
assert( p2<pC->nHdrParsed );
assert( rc==SQLITE_OK );
assert( sqlite3VdbeCheckMemInvariants(pDest) );
+ if( VdbeMemDynamic(pDest) ) sqlite3VdbeMemSetNull(pDest);
+ t = pC->aType[p2];
if( pC->szRow>=aOffset[p2+1] ){
/* This is the common case where the desired content fits on the original
** page - where the content is not on an overflow page */
- VdbeMemRelease(pDest);
- sqlite3VdbeSerialGet(pC->aRow+aOffset[p2], aType[p2], pDest);
+ sqlite3VdbeSerialGet(pC->aRow+aOffset[p2], t, pDest);
}else{
/* This branch happens only when content is on overflow pages */
- t = aType[p2];
if( ((pOp->p5 & (OPFLAG_LENGTHARG|OPFLAG_TYPEOFARG))!=0
&& ((t>=12 && (t&1)==0) || (pOp->p5 & OPFLAG_TYPEOFARG)!=0))
|| (len = sqlite3VdbeSerialTypeLen(t))==0
){
- /* Content is irrelevant for the typeof() function and for
- ** the length(X) function if X is a blob. So we might as well use
- ** bogus content rather than reading content from disk. NULL works
- ** for text and blob and whatever is in the payloadSize64 variable
- ** will work for everything else. Content is also irrelevant if
- ** the content length is 0. */
- zData = t<=13 ? (u8*)&payloadSize64 : 0;
- sMem.zMalloc = 0;
+ /* Content is irrelevant for
+ ** 1. the typeof() function,
+ ** 2. the length(X) function if X is a blob, and
+ ** 3. if the content length is zero.
+ ** So we might as well use bogus content rather than reading
+ ** content from disk. NULL will work for the value for strings
+ ** and blobs and whatever is in the payloadSize64 variable
+ ** will work for everything else. */
+ sqlite3VdbeSerialGet(t<=13 ? (u8*)&payloadSize64 : 0, t, pDest);
}else{
- memset(&sMem, 0, sizeof(sMem));
- sqlite3VdbeMemMove(&sMem, pDest);
rc = sqlite3VdbeMemFromBtree(pCrsr, aOffset[p2], len, !pC->isTable,
- &sMem);
+ pDest);
if( rc!=SQLITE_OK ){
goto op_column_error;
}
- zData = (u8*)sMem.z;
- }
- sqlite3VdbeSerialGet(zData, t, pDest);
- /* If we dynamically allocated space to hold the data (in the
- ** sqlite3VdbeMemFromBtree() call above) then transfer control of that
- ** dynamically allocated space over to the pDest structure.
- ** This prevents a memory copy. */
- if( sMem.zMalloc ){
- assert( sMem.z==sMem.zMalloc );
- assert( VdbeMemDynamic(pDest)==0 );
- assert( (pDest->flags & (MEM_Blob|MEM_Str))==0 || pDest->z==sMem.z );
- pDest->flags &= ~(MEM_Ephem|MEM_Static);
- pDest->flags |= MEM_Term;
- pDest->z = sMem.z;
- pDest->zMalloc = sMem.zMalloc;
+ sqlite3VdbeSerialGet((const u8*)pDest->z, t, pDest);
+ pDest->flags &= ~MEM_Ephem;
}
}
pDest->enc = encoding;
op_column_out:
- Deephemeralize(pDest);
+ /* If the column value is an ephemeral string, go ahead and persist
+ ** that string in case the cursor moves before the column value is
+ ** used. The following code does the equivalent of Deephemeralize()
+ ** but does it faster. */
+ if( (pDest->flags & MEM_Ephem)!=0 && pDest->z ){
+ fx = pDest->flags & (MEM_Str|MEM_Blob);
+ assert( fx!=0 );
+ zData = (const u8*)pDest->z;
+ len = pDest->n;
+ if( sqlite3VdbeMemClearAndResize(pDest, len+2) ) goto no_mem;
+ memcpy(pDest->z, zData, len);
+ pDest->z[len] = 0;
+ pDest->z[len+1] = 0;
+ pDest->flags = fx|MEM_Term;
+ }
op_column_error:
UPDATE_MAX_BLOBSIZE(pDest);
REGISTER_TRACE(pOp->p3, pDest);
@@ -70631,7 +71625,7 @@ case OP_MakeRecord: {
** ------------------------------------------------------------------------
**
** Data(0) is taken from register P1. Data(1) comes from register P1+1
- ** and so froth.
+ ** and so forth.
**
** Each type field is a varint representing the serial type of the
** corresponding data element (see sqlite3VdbeSerialType()). The
@@ -70671,7 +71665,7 @@ case OP_MakeRecord: {
pRec = pLast;
do{
assert( memIsValid(pRec) );
- serial_type = sqlite3VdbeSerialType(pRec, file_format);
+ pRec->uTemp = serial_type = sqlite3VdbeSerialType(pRec, file_format);
len = sqlite3VdbeSerialTypeLen(serial_type);
if( pRec->flags & MEM_Zero ){
if( nData ){
@@ -70707,9 +71701,9 @@ case OP_MakeRecord: {
/* Make sure the output register has a buffer large enough to store
** the new record. The output register (pOp->p3) is not allowed to
** be one of the input registers (because the following call to
- ** sqlite3VdbeMemGrow() could clobber the value before it is used).
+ ** sqlite3VdbeMemClearAndResize() could clobber the value before it is used).
*/
- if( sqlite3VdbeMemGrow(pOut, (int)nByte, 0) ){
+ if( sqlite3VdbeMemClearAndResize(pOut, (int)nByte) ){
goto no_mem;
}
zNewRecord = (u8 *)pOut->z;
@@ -70720,7 +71714,7 @@ case OP_MakeRecord: {
assert( pData0<=pLast );
pRec = pData0;
do{
- serial_type = sqlite3VdbeSerialType(pRec, file_format);
+ serial_type = pRec->uTemp;
i += putVarint32(&zNewRecord[i], serial_type); /* serial type */
j += sqlite3VdbeSerialPut(&zNewRecord[j], pRec, serial_type); /* content */
}while( (++pRec)<=pLast );
@@ -70730,7 +71724,6 @@ case OP_MakeRecord: {
assert( pOp->p3>0 && pOp->p3<=(p->nMem-p->nCursor) );
pOut->n = (int)nByte;
pOut->flags = MEM_Blob;
- pOut->xDel = 0;
if( nZero ){
pOut->u.nZero = nZero;
pOut->flags |= MEM_Zero;
@@ -70877,11 +71870,18 @@ case OP_Savepoint: {
db->isTransactionSavepoint = 0;
rc = p->rc;
}else{
+ int isSchemaChange;
iSavepoint = db->nSavepoint - iSavepoint - 1;
if( p1==SAVEPOINT_ROLLBACK ){
+ isSchemaChange = (db->flags & SQLITE_InternChanges)!=0;
for(ii=0; ii<db->nDb; ii++){
- sqlite3BtreeTripAllCursors(db->aDb[ii].pBt, SQLITE_ABORT);
+ rc = sqlite3BtreeTripAllCursors(db->aDb[ii].pBt,
+ SQLITE_ABORT_ROLLBACK,
+ isSchemaChange==0);
+ if( rc!=SQLITE_OK ) goto abort_due_to_error;
}
+ }else{
+ isSchemaChange = 0;
}
for(ii=0; ii<db->nDb; ii++){
rc = sqlite3BtreeSavepoint(db->aDb[ii].pBt, p1, iSavepoint);
@@ -70889,7 +71889,7 @@ case OP_Savepoint: {
goto abort_due_to_error;
}
}
- if( p1==SAVEPOINT_ROLLBACK && (db->flags&SQLITE_InternChanges)!=0 ){
+ if( isSchemaChange ){
sqlite3ExpirePreparedStatements(db);
sqlite3ResetAllSchemasOfConnection(db);
db->flags = (db->flags | SQLITE_InternChanges);
@@ -71286,7 +72286,7 @@ case OP_OpenWrite: {
|| p->readOnly==0 );
if( p->expired ){
- rc = SQLITE_ABORT;
+ rc = SQLITE_ABORT_ROLLBACK;
break;
}
@@ -71346,10 +72346,6 @@ case OP_OpenWrite: {
assert( OPFLAG_BULKCSR==BTREE_BULKLOAD );
sqlite3BtreeCursorHints(pCur->pCursor, (pOp->p5 & OPFLAG_BULKCSR));
- /* Since it performs no memory allocation or IO, the only value that
- ** sqlite3BtreeCursor() may return is SQLITE_OK. */
- assert( rc==SQLITE_OK );
-
/* Set the VdbeCursor.isTable variable. Previous versions of
** SQLite used to check if the root-page flags were sane at this point
** and report database corruption if they were not, but this check has
@@ -71433,11 +72429,15 @@ case OP_OpenEphemeral: {
break;
}
-/* Opcode: SorterOpen P1 P2 * P4 *
+/* Opcode: SorterOpen P1 P2 P3 P4 *
**
** This opcode works like OP_OpenEphemeral except that it opens
** a transient index that is specifically designed to sort large
** tables using an external merge-sort algorithm.
+**
+** If argument P3 is non-zero, then it indicates that the sorter may
+** assume that a stable sort considering the first P3 fields of each
+** key is sufficient to produce the required results.
*/
case OP_SorterOpen: {
VdbeCursor *pCx;
@@ -71449,7 +72449,25 @@ case OP_SorterOpen: {
pCx->pKeyInfo = pOp->p4.pKeyInfo;
assert( pCx->pKeyInfo->db==db );
assert( pCx->pKeyInfo->enc==ENC(db) );
- rc = sqlite3VdbeSorterInit(db, pCx);
+ rc = sqlite3VdbeSorterInit(db, pOp->p3, pCx);
+ break;
+}
+
+/* Opcode: SequenceTest P1 P2 * * *
+** Synopsis: if( cursor[P1].ctr++ ) pc = P2
+**
+** P1 is a sorter cursor. If the sequence counter is currently zero, jump
+** to P2. Regardless of whether or not the jump is taken, increment the
+** the sequence value.
+*/
+case OP_SequenceTest: {
+ VdbeCursor *pC;
+ assert( pOp->p1>=0 && pOp->p1<p->nCursor );
+ pC = p->apCsr[pOp->p1];
+ assert( pC->pSorter );
+ if( (pC->seqCount++)==0 ){
+ pc = pOp->p2 - 1;
+ }
break;
}
@@ -71596,11 +72614,12 @@ case OP_SeekGT: { /* jump, in3 */
if( pC->isTable ){
/* The input value in P3 might be of any type: integer, real, string,
** blob, or NULL. But it needs to be an integer before we can do
- ** the seek, so covert it. */
+ ** the seek, so convert it. */
pIn3 = &aMem[pOp->p3];
- ApplyNumericAffinity(pIn3);
+ if( (pIn3->flags & (MEM_Int|MEM_Real|MEM_Str))==MEM_Str ){
+ applyNumericAffinity(pIn3, 0);
+ }
iKey = sqlite3VdbeIntValue(pIn3);
- pC->rowidIsValid = 0;
/* If the P3 value could not be converted into an integer without
** loss of information, then special processing is required... */
@@ -71619,7 +72638,7 @@ case OP_SeekGT: { /* jump, in3 */
** (x > 4.9) -> (x >= 5)
** (x <= 4.9) -> (x < 5)
*/
- if( pIn3->r<(double)iKey ){
+ if( pIn3->u.r<(double)iKey ){
assert( OP_SeekGE==(OP_SeekGT-1) );
assert( OP_SeekLT==(OP_SeekLE-1) );
assert( (OP_SeekLE & 0x0001)==(OP_SeekGT & 0x0001) );
@@ -71628,7 +72647,7 @@ case OP_SeekGT: { /* jump, in3 */
/* If the approximation iKey is smaller than the actual real search
** term, substitute <= for < and > for >=. */
- else if( pIn3->r>(double)iKey ){
+ else if( pIn3->u.r>(double)iKey ){
assert( OP_SeekLE==(OP_SeekLT+1) );
assert( OP_SeekGT==(OP_SeekGE+1) );
assert( (OP_SeekLT & 0x0001)==(OP_SeekGE & 0x0001) );
@@ -71636,13 +72655,10 @@ case OP_SeekGT: { /* jump, in3 */
}
}
rc = sqlite3BtreeMovetoUnpacked(pC->pCursor, 0, (u64)iKey, 0, &res);
+ pC->movetoTarget = iKey; /* Used by OP_Delete */
if( rc!=SQLITE_OK ){
goto abort_due_to_error;
}
- if( res==0 ){
- pC->rowidIsValid = 1;
- pC->lastRowid = iKey;
- }
}else{
nField = pOp->p4.i;
assert( pOp->p4type==P4_INT32 );
@@ -71672,7 +72688,6 @@ case OP_SeekGT: { /* jump, in3 */
if( rc!=SQLITE_OK ){
goto abort_due_to_error;
}
- pC->rowidIsValid = 0;
}
pC->deferredMoveto = 0;
pC->cacheStatus = CACHE_STALE;
@@ -71684,7 +72699,6 @@ case OP_SeekGT: { /* jump, in3 */
res = 0;
rc = sqlite3BtreeNext(pC->pCursor, &res);
if( rc!=SQLITE_OK ) goto abort_due_to_error;
- pC->rowidIsValid = 0;
}else{
res = 0;
}
@@ -71694,7 +72708,6 @@ case OP_SeekGT: { /* jump, in3 */
res = 0;
rc = sqlite3BtreePrevious(pC->pCursor, &res);
if( rc!=SQLITE_OK ) goto abort_due_to_error;
- pC->rowidIsValid = 0;
}else{
/* res might be negative because the table is empty. Check to
** see if this is the case.
@@ -71731,7 +72744,6 @@ case OP_Seek: { /* in2 */
pC->nullRow = 0;
pIn2 = &aMem[pOp->p2];
pC->movetoTarget = sqlite3VdbeIntValue(pIn2);
- pC->rowidIsValid = 0;
pC->deferredMoveto = 1;
break;
}
@@ -71917,15 +72929,13 @@ case OP_NotExists: { /* jump, in3 */
res = 0;
iKey = pIn3->u.i;
rc = sqlite3BtreeMovetoUnpacked(pCrsr, 0, iKey, 0, &res);
- pC->lastRowid = pIn3->u.i;
- pC->rowidIsValid = res==0 ?1:0;
+ pC->movetoTarget = iKey; /* Used by OP_Delete */
pC->nullRow = 0;
pC->cacheStatus = CACHE_STALE;
pC->deferredMoveto = 0;
VdbeBranchTaken(res!=0,2);
if( res!=0 ){
pc = pOp->p2 - 1;
- assert( pC->rowidIsValid==0 );
}
pC->seekResult = res;
break;
@@ -72059,32 +73069,20 @@ case OP_NewRowid: { /* out2-prerelease */
** it finds one that is not previously used. */
assert( pOp->p3==0 ); /* We cannot be in random rowid mode if this is
** an AUTOINCREMENT table. */
- /* on the first attempt, simply do one more than previous */
- v = lastRowid;
- v &= (MAX_ROWID>>1); /* ensure doesn't go negative */
- v++; /* ensure non-zero */
cnt = 0;
- while( ((rc = sqlite3BtreeMovetoUnpacked(pC->pCursor, 0, (u64)v,
+ do{
+ sqlite3_randomness(sizeof(v), &v);
+ v &= (MAX_ROWID>>1); v++; /* Ensure that v is greater than zero */
+ }while( ((rc = sqlite3BtreeMovetoUnpacked(pC->pCursor, 0, (u64)v,
0, &res))==SQLITE_OK)
&& (res==0)
- && (++cnt<100)){
- /* collision - try another random rowid */
- sqlite3_randomness(sizeof(v), &v);
- if( cnt<5 ){
- /* try "small" random rowids for the initial attempts */
- v &= 0xffffff;
- }else{
- v &= (MAX_ROWID>>1); /* ensure doesn't go negative */
- }
- v++; /* ensure non-zero */
- }
+ && (++cnt<100));
if( rc==SQLITE_OK && res==0 ){
rc = SQLITE_FULL; /* IMP: R-38219-53002 */
goto abort_due_to_error;
}
assert( v>0 ); /* EV: R-40812-03570 */
}
- pC->rowidIsValid = 0;
pC->deferredMoveto = 0;
pC->cacheStatus = CACHE_STALE;
}
@@ -72189,7 +73187,6 @@ case OP_InsertInt: {
pData->z, pData->n, nZero,
(pOp->p5 & OPFLAG_APPEND)!=0, seekResult
);
- pC->rowidIsValid = 0;
pC->deferredMoveto = 0;
pC->cacheStatus = CACHE_STALE;
@@ -72226,33 +73223,32 @@ case OP_InsertInt: {
** using OP_NotFound prior to invoking this opcode.
*/
case OP_Delete: {
- i64 iKey;
VdbeCursor *pC;
assert( pOp->p1>=0 && pOp->p1<p->nCursor );
pC = p->apCsr[pOp->p1];
assert( pC!=0 );
assert( pC->pCursor!=0 ); /* Only valid for real tables, no pseudotables */
- iKey = pC->lastRowid; /* Only used for the update hook */
-
- /* The OP_Delete opcode always follows an OP_NotExists or OP_Last or
- ** OP_Column on the same table without any intervening operations that
- ** might move or invalidate the cursor. Hence cursor pC is always pointing
- ** to the row to be deleted and the sqlite3VdbeCursorMoveto() operation
- ** below is always a no-op and cannot fail. We will run it anyhow, though,
- ** to guard against future changes to the code generator.
- **/
assert( pC->deferredMoveto==0 );
- rc = sqlite3VdbeCursorMoveto(pC);
- if( NEVER(rc!=SQLITE_OK) ) goto abort_due_to_error;
+#ifdef SQLITE_DEBUG
+ /* The seek operation that positioned the cursor prior to OP_Delete will
+ ** have also set the pC->movetoTarget field to the rowid of the row that
+ ** is being deleted */
+ if( pOp->p4.z && pC->isTable ){
+ i64 iKey = 0;
+ sqlite3BtreeKeySize(pC->pCursor, &iKey);
+ assert( pC->movetoTarget==iKey );
+ }
+#endif
+
rc = sqlite3BtreeDelete(pC->pCursor);
pC->cacheStatus = CACHE_STALE;
/* Invoke the update-hook if required. */
if( rc==SQLITE_OK && db->xUpdateCallback && pOp->p4.z && pC->isTable ){
db->xUpdateCallback(db->pUpdateArg, SQLITE_DELETE,
- db->aDb[pC->iDb].zName, pOp->p4.z, iKey);
+ db->aDb[pC->iDb].zName, pOp->p4.z, pC->movetoTarget);
assert( pC->iDb>=0 );
}
if( pOp->p2 & OPFLAG_NCHANGE ) p->nChange++;
@@ -72296,6 +73292,7 @@ case OP_SorterCompare: {
assert( pOp->p4type==P4_INT32 );
pIn3 = &aMem[pOp->p3];
nKeyCol = pOp->p4.i;
+ res = 0;
rc = sqlite3VdbeSorterCompare(pC, pIn3, nKeyCol, &res);
VdbeBranchTaken(res!=0,2);
if( res ){
@@ -72304,10 +73301,17 @@ case OP_SorterCompare: {
break;
};
-/* Opcode: SorterData P1 P2 * * *
+/* Opcode: SorterData P1 P2 P3 * *
** Synopsis: r[P2]=data
**
** Write into register P2 the current sorter data for sorter cursor P1.
+** Then clear the column header cache on cursor P3.
+**
+** This opcode is normally use to move a record out of the sorter and into
+** a register that is the source for a pseudo-table cursor created using
+** OpenPseudo. That pseudo-table cursor is the one that is identified by
+** parameter P3. Clearing the P3 column cache as part of this opcode saves
+** us from having to issue a separate NullRow instruction to clear that cache.
*/
case OP_SorterData: {
VdbeCursor *pC;
@@ -72317,6 +73321,8 @@ case OP_SorterData: {
assert( isSorter(pC) );
rc = sqlite3VdbeSorterRowkey(pC, pOut);
assert( rc!=SQLITE_OK || (pOut->flags & MEM_Blob) );
+ assert( pOp->p1>=0 && pOp->p1<p->nCursor );
+ p->apCsr[pOp->p3]->cacheStatus = CACHE_STALE;
break;
}
@@ -72363,16 +73369,20 @@ case OP_RowData: {
assert( pC->pseudoTableReg==0 );
assert( pC->pCursor!=0 );
pCrsr = pC->pCursor;
- assert( sqlite3BtreeCursorIsValid(pCrsr) );
/* The OP_RowKey and OP_RowData opcodes always follow OP_NotExists or
** OP_Rewind/Op_Next with no intervening instructions that might invalidate
- ** the cursor. Hence the following sqlite3VdbeCursorMoveto() call is always
- ** a no-op and can never fail. But we leave it in place as a safety.
+ ** the cursor. If this where not the case, on of the following assert()s
+ ** would fail. Should this ever change (because of changes in the code
+ ** generator) then the fix would be to insert a call to
+ ** sqlite3VdbeCursorMoveto().
*/
assert( pC->deferredMoveto==0 );
+ assert( sqlite3BtreeCursorIsValid(pCrsr) );
+#if 0 /* Not required due to the previous to assert() statements */
rc = sqlite3VdbeCursorMoveto(pC);
- if( NEVER(rc!=SQLITE_OK) ) goto abort_due_to_error;
+ if( rc!=SQLITE_OK ) goto abort_due_to_error;
+#endif
if( pC->isTable==0 ){
assert( !pC->isTable );
@@ -72389,7 +73399,8 @@ case OP_RowData: {
goto too_big;
}
}
- if( sqlite3VdbeMemGrow(pOut, n, 0) ){
+ testcase( n==0 );
+ if( sqlite3VdbeMemClearAndResize(pOut, MAX(n,32)) ){
goto no_mem;
}
pOut->n = n;
@@ -72440,14 +73451,14 @@ case OP_Rowid: { /* out2-prerelease */
#endif /* SQLITE_OMIT_VIRTUALTABLE */
}else{
assert( pC->pCursor!=0 );
- rc = sqlite3VdbeCursorMoveto(pC);
+ rc = sqlite3VdbeCursorRestore(pC);
if( rc ) goto abort_due_to_error;
- if( pC->rowidIsValid ){
- v = pC->lastRowid;
- }else{
- rc = sqlite3BtreeKeySize(pC->pCursor, &v);
- assert( rc==SQLITE_OK ); /* Always so because of CursorMoveto() above */
+ if( pC->nullRow ){
+ pOut->flags = MEM_Null;
+ break;
}
+ rc = sqlite3BtreeKeySize(pC->pCursor, &v);
+ assert( rc==SQLITE_OK ); /* Always so because of CursorRestore() above */
}
pOut->u.i = v;
break;
@@ -72466,7 +73477,6 @@ case OP_NullRow: {
pC = p->apCsr[pOp->p1];
assert( pC!=0 );
pC->nullRow = 1;
- pC->rowidIsValid = 0;
pC->cacheStatus = CACHE_STALE;
if( pC->pCursor ){
sqlite3BtreeClearCursor(pC->pCursor);
@@ -72500,7 +73510,6 @@ case OP_Last: { /* jump */
rc = sqlite3BtreeLast(pCrsr, &res);
pC->nullRow = (u8)res;
pC->deferredMoveto = 0;
- pC->rowidIsValid = 0;
pC->cacheStatus = CACHE_STALE;
#ifdef SQLITE_DEBUG
pC->seekOp = OP_Last;
@@ -72560,14 +73569,13 @@ case OP_Rewind: { /* jump */
pC->seekOp = OP_Rewind;
#endif
if( isSorter(pC) ){
- rc = sqlite3VdbeSorterRewind(db, pC, &res);
+ rc = sqlite3VdbeSorterRewind(pC, &res);
}else{
pCrsr = pC->pCursor;
assert( pCrsr );
rc = sqlite3BtreeFirst(pCrsr, &res);
pC->deferredMoveto = 0;
pC->cacheStatus = CACHE_STALE;
- pC->rowidIsValid = 0;
}
pC->nullRow = (u8)res;
assert( pOp->p2>0 && pOp->p2<p->nOp );
@@ -72693,7 +73701,6 @@ next_tail:
}else{
pC->nullRow = 1;
}
- pC->rowidIsValid = 0;
goto check_for_interrupt;
}
@@ -72738,7 +73745,7 @@ case OP_IdxInsert: { /* in2 */
rc = ExpandBlob(pIn2);
if( rc==SQLITE_OK ){
if( isSorter(pC) ){
- rc = sqlite3VdbeSorterWrite(db, pC, pIn2);
+ rc = sqlite3VdbeSorterWrite(pC, pIn2);
}else{
nKey = pIn2->n;
zKey = pIn2->z;
@@ -72809,10 +73816,16 @@ case OP_IdxRowid: { /* out2-prerelease */
pCrsr = pC->pCursor;
assert( pCrsr!=0 );
pOut->flags = MEM_Null;
- rc = sqlite3VdbeCursorMoveto(pC);
- if( NEVER(rc) ) goto abort_due_to_error;
- assert( pC->deferredMoveto==0 );
assert( pC->isTable==0 );
+ assert( pC->deferredMoveto==0 );
+
+ /* sqlite3VbeCursorRestore() can only fail if the record has been deleted
+ ** out from under the cursor. That will never happend for an IdxRowid
+ ** opcode, hence the NEVER() arround the check of the return value.
+ */
+ rc = sqlite3VdbeCursorRestore(pC);
+ if( NEVER(rc!=SQLITE_OK) ) goto abort_due_to_error;
+
if( !pC->nullRow ){
rowid = 0; /* Not needed. Only used to silence a warning. */
rc = sqlite3VdbeIdxRowid(db, pCrsr, &rowid);
@@ -72899,7 +73912,7 @@ case OP_IdxGE: { /* jump */
{ int i; for(i=0; i<r.nField; i++) assert( memIsValid(&r.aMem[i]) ); }
#endif
res = 0; /* Not needed. Only used to silence a warning. */
- rc = sqlite3VdbeIdxKeyCompare(pC, &r, &res);
+ rc = sqlite3VdbeIdxKeyCompare(db, pC, &r, &res);
assert( (OP_IdxLE&1)==(OP_IdxLT&1) && (OP_IdxGE&1)==(OP_IdxGT&1) );
if( (pOp->opcode&1)==(OP_IdxLT&1) ){
assert( pOp->opcode==OP_IdxLE || pOp->opcode==OP_IdxLT );
@@ -73651,6 +74664,7 @@ case OP_AggStep: {
int i;
Mem *pMem;
Mem *pRec;
+ Mem t;
sqlite3_context ctx;
sqlite3_value **apVal;
@@ -73668,23 +74682,15 @@ case OP_AggStep: {
assert( pOp->p3>0 && pOp->p3<=(p->nMem-p->nCursor) );
ctx.pMem = pMem = &aMem[pOp->p3];
pMem->n++;
- ctx.s.flags = MEM_Null;
- ctx.s.z = 0;
- ctx.s.zMalloc = 0;
- ctx.s.xDel = 0;
- ctx.s.db = db;
+ sqlite3VdbeMemInit(&t, db, MEM_Null);
+ ctx.pOut = &t;
ctx.isError = 0;
- ctx.pColl = 0;
+ ctx.pVdbe = p;
+ ctx.iOp = pc;
ctx.skipFlag = 0;
- if( ctx.pFunc->funcFlags & SQLITE_FUNC_NEEDCOLL ){
- assert( pOp>p->aOp );
- assert( pOp[-1].p4type==P4_COLLSEQ );
- assert( pOp[-1].opcode==OP_CollSeq );
- ctx.pColl = pOp[-1].p4.pColl;
- }
(ctx.pFunc->xStep)(&ctx, n, apVal); /* IMP: R-24505-23230 */
if( ctx.isError ){
- sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(&ctx.s));
+ sqlite3SetString(&p->zErrMsg, db, "%s", sqlite3_value_text(&t));
rc = ctx.isError;
}
if( ctx.skipFlag ){
@@ -73692,9 +74698,7 @@ case OP_AggStep: {
i = pOp[-1].p1;
if( i ) sqlite3VdbeMemSetInt64(&aMem[i], 1);
}
-
- sqlite3VdbeMemRelease(&ctx.s);
-
+ sqlite3VdbeMemRelease(&t);
break;
}
@@ -74144,27 +75148,14 @@ case OP_VColumn: {
pModule = pVtab->pModule;
assert( pModule->xColumn );
memset(&sContext, 0, sizeof(sContext));
-
- /* The output cell may already have a buffer allocated. Move
- ** the current contents to sContext.s so in case the user-function
- ** can use the already allocated buffer instead of allocating a
- ** new one.
- */
- sqlite3VdbeMemMove(&sContext.s, pDest);
- MemSetTypeFlag(&sContext.s, MEM_Null);
-
+ sContext.pOut = pDest;
+ MemSetTypeFlag(pDest, MEM_Null);
rc = pModule->xColumn(pCur->pVtabCursor, &sContext, pOp->p2);
sqlite3VtabImportErrmsg(p, pVtab);
if( sContext.isError ){
rc = sContext.isError;
}
-
- /* Copy the result of the function to the P3 register. We
- ** do this regardless of whether or not an error occurred to ensure any
- ** dynamic allocation in sContext.s (a Mem struct) is released.
- */
- sqlite3VdbeChangeEncoding(&sContext.s, encoding);
- sqlite3VdbeMemMove(pDest, &sContext.s);
+ sqlite3VdbeChangeEncoding(pDest, encoding);
REGISTER_TRACE(pOp->p3, pDest);
UPDATE_MAX_BLOBSIZE(pDest);
@@ -74854,7 +75845,7 @@ blob_open_out:
if( pBlob && pBlob->pStmt ) sqlite3VdbeFinalize((Vdbe *)pBlob->pStmt);
sqlite3DbFree(db, pBlob);
}
- sqlite3Error(db, rc, (zErr ? "%s" : 0), zErr);
+ sqlite3ErrorWithMsg(db, rc, (zErr ? "%s" : 0), zErr);
sqlite3DbFree(db, zErr);
sqlite3ParserReset(pParse);
sqlite3StackFree(db, pParse);
@@ -74907,7 +75898,7 @@ static int blobReadWrite(
if( n<0 || iOffset<0 || (iOffset+n)>p->nByte ){
/* Request is out of range. Return a transient error. */
rc = SQLITE_ERROR;
- sqlite3Error(db, SQLITE_ERROR, 0);
+ sqlite3Error(db, SQLITE_ERROR);
}else if( v==0 ){
/* If there is no statement handle, then the blob-handle has
** already been invalidated. Return SQLITE_ABORT in this case.
@@ -74987,7 +75978,7 @@ SQLITE_API int sqlite3_blob_reopen(sqlite3_blob *pBlob, sqlite3_int64 iRow){
char *zErr;
rc = blobSeekToRow(p, iRow, &zErr);
if( rc!=SQLITE_OK ){
- sqlite3Error(db, rc, (zErr ? "%s" : 0), zErr);
+ sqlite3ErrorWithMsg(db, rc, (zErr ? "%s" : 0), zErr);
sqlite3DbFree(db, zErr);
}
assert( rc!=SQLITE_SCHEMA );
@@ -75004,7 +75995,7 @@ SQLITE_API int sqlite3_blob_reopen(sqlite3_blob *pBlob, sqlite3_int64 iRow){
/************** End of vdbeblob.c ********************************************/
/************** Begin file vdbesort.c ****************************************/
/*
-** 2011 July 9
+** 2011-07-09
**
** The author disclaims copyright to this source code. In place of
** a legal notice, here is a blessing:
@@ -75015,42 +76006,196 @@ SQLITE_API int sqlite3_blob_reopen(sqlite3_blob *pBlob, sqlite3_int64 iRow){
**
*************************************************************************
** This file contains code for the VdbeSorter object, used in concert with
-** a VdbeCursor to sort large numbers of keys (as may be required, for
-** example, by CREATE INDEX statements on tables too large to fit in main
-** memory).
+** a VdbeCursor to sort large numbers of keys for CREATE INDEX statements
+** or by SELECT statements with ORDER BY clauses that cannot be satisfied
+** using indexes and without LIMIT clauses.
+**
+** The VdbeSorter object implements a multi-threaded external merge sort
+** algorithm that is efficient even if the number of elements being sorted
+** exceeds the available memory.
+**
+** Here is the (internal, non-API) interface between this module and the
+** rest of the SQLite system:
+**
+** sqlite3VdbeSorterInit() Create a new VdbeSorter object.
+**
+** sqlite3VdbeSorterWrite() Add a single new row to the VdbeSorter
+** object. The row is a binary blob in the
+** OP_MakeRecord format that contains both
+** the ORDER BY key columns and result columns
+** in the case of a SELECT w/ ORDER BY, or
+** the complete record for an index entry
+** in the case of a CREATE INDEX.
+**
+** sqlite3VdbeSorterRewind() Sort all content previously added.
+** Position the read cursor on the
+** first sorted element.
+**
+** sqlite3VdbeSorterNext() Advance the read cursor to the next sorted
+** element.
+**
+** sqlite3VdbeSorterRowkey() Return the complete binary blob for the
+** row currently under the read cursor.
+**
+** sqlite3VdbeSorterCompare() Compare the binary blob for the row
+** currently under the read cursor against
+** another binary blob X and report if
+** X is strictly less than the read cursor.
+** Used to enforce uniqueness in a
+** CREATE UNIQUE INDEX statement.
+**
+** sqlite3VdbeSorterClose() Close the VdbeSorter object and reclaim
+** all resources.
+**
+** sqlite3VdbeSorterReset() Refurbish the VdbeSorter for reuse. This
+** is like Close() followed by Init() only
+** much faster.
+**
+** The interfaces above must be called in a particular order. Write() can
+** only occur in between Init()/Reset() and Rewind(). Next(), Rowkey(), and
+** Compare() can only occur in between Rewind() and Close()/Reset(). i.e.
+**
+** Init()
+** for each record: Write()
+** Rewind()
+** Rowkey()/Compare()
+** Next()
+** Close()
+**
+** Algorithm:
+**
+** Records passed to the sorter via calls to Write() are initially held
+** unsorted in main memory. Assuming the amount of memory used never exceeds
+** a threshold, when Rewind() is called the set of records is sorted using
+** an in-memory merge sort. In this case, no temporary files are required
+** and subsequent calls to Rowkey(), Next() and Compare() read records
+** directly from main memory.
+**
+** If the amount of space used to store records in main memory exceeds the
+** threshold, then the set of records currently in memory are sorted and
+** written to a temporary file in "Packed Memory Array" (PMA) format.
+** A PMA created at this point is known as a "level-0 PMA". Higher levels
+** of PMAs may be created by merging existing PMAs together - for example
+** merging two or more level-0 PMAs together creates a level-1 PMA.
+**
+** The threshold for the amount of main memory to use before flushing
+** records to a PMA is roughly the same as the limit configured for the
+** page-cache of the main database. Specifically, the threshold is set to
+** the value returned by "PRAGMA main.page_size" multipled by
+** that returned by "PRAGMA main.cache_size", in bytes.
+**
+** If the sorter is running in single-threaded mode, then all PMAs generated
+** are appended to a single temporary file. Or, if the sorter is running in
+** multi-threaded mode then up to (N+1) temporary files may be opened, where
+** N is the configured number of worker threads. In this case, instead of
+** sorting the records and writing the PMA to a temporary file itself, the
+** calling thread usually launches a worker thread to do so. Except, if
+** there are already N worker threads running, the main thread does the work
+** itself.
+**
+** The sorter is running in multi-threaded mode if (a) the library was built
+** with pre-processor symbol SQLITE_MAX_WORKER_THREADS set to a value greater
+** than zero, and (b) worker threads have been enabled at runtime by calling
+** sqlite3_config(SQLITE_CONFIG_WORKER_THREADS, ...).
+**
+** When Rewind() is called, any data remaining in memory is flushed to a
+** final PMA. So at this point the data is stored in some number of sorted
+** PMAs within temporary files on disk.
+**
+** If there are fewer than SORTER_MAX_MERGE_COUNT PMAs in total and the
+** sorter is running in single-threaded mode, then these PMAs are merged
+** incrementally as keys are retreived from the sorter by the VDBE. The
+** MergeEngine object, described in further detail below, performs this
+** merge.
+**
+** Or, if running in multi-threaded mode, then a background thread is
+** launched to merge the existing PMAs. Once the background thread has
+** merged T bytes of data into a single sorted PMA, the main thread
+** begins reading keys from that PMA while the background thread proceeds
+** with merging the next T bytes of data. And so on.
+**
+** Parameter T is set to half the value of the memory threshold used
+** by Write() above to determine when to create a new PMA.
+**
+** If there are more than SORTER_MAX_MERGE_COUNT PMAs in total when
+** Rewind() is called, then a hierarchy of incremental-merges is used.
+** First, T bytes of data from the first SORTER_MAX_MERGE_COUNT PMAs on
+** disk are merged together. Then T bytes of data from the second set, and
+** so on, such that no operation ever merges more than SORTER_MAX_MERGE_COUNT
+** PMAs at a time. This done is to improve locality.
+**
+** If running in multi-threaded mode and there are more than
+** SORTER_MAX_MERGE_COUNT PMAs on disk when Rewind() is called, then more
+** than one background thread may be created. Specifically, there may be
+** one background thread for each temporary file on disk, and one background
+** thread to merge the output of each of the others to a single PMA for
+** the main thread to read from.
*/
+/*
+** If SQLITE_DEBUG_SORTER_THREADS is defined, this module outputs various
+** messages to stderr that may be helpful in understanding the performance
+** characteristics of the sorter in multi-threaded mode.
+*/
+#if 0
+# define SQLITE_DEBUG_SORTER_THREADS 1
+#endif
+/*
+** Private objects used by the sorter
+*/
+typedef struct MergeEngine MergeEngine; /* Merge PMAs together */
+typedef struct PmaReader PmaReader; /* Incrementally read one PMA */
+typedef struct PmaWriter PmaWriter; /* Incrementally write one PMA */
+typedef struct SorterRecord SorterRecord; /* A record being sorted */
+typedef struct SortSubtask SortSubtask; /* A sub-task in the sort process */
+typedef struct SorterFile SorterFile; /* Temporary file object wrapper */
+typedef struct SorterList SorterList; /* In-memory list of records */
+typedef struct IncrMerger IncrMerger; /* Read & merge multiple PMAs */
-typedef struct VdbeSorterIter VdbeSorterIter;
-typedef struct SorterRecord SorterRecord;
-typedef struct FileWriter FileWriter;
+/*
+** A container for a temp file handle and the current amount of data
+** stored in the file.
+*/
+struct SorterFile {
+ sqlite3_file *pFd; /* File handle */
+ i64 iEof; /* Bytes of data stored in pFd */
+};
/*
-** NOTES ON DATA STRUCTURE USED FOR N-WAY MERGES:
+** An in-memory list of objects to be sorted.
**
-** As keys are added to the sorter, they are written to disk in a series
-** of sorted packed-memory-arrays (PMAs). The size of each PMA is roughly
-** the same as the cache-size allowed for temporary databases. In order
-** to allow the caller to extract keys from the sorter in sorted order,
-** all PMAs currently stored on disk must be merged together. This comment
-** describes the data structure used to do so. The structure supports
-** merging any number of arrays in a single pass with no redundant comparison
-** operations.
+** If aMemory==0 then each object is allocated separately and the objects
+** are connected using SorterRecord.u.pNext. If aMemory!=0 then all objects
+** are stored in the aMemory[] bulk memory, one right after the other, and
+** are connected using SorterRecord.u.iNext.
+*/
+struct SorterList {
+ SorterRecord *pList; /* Linked list of records */
+ u8 *aMemory; /* If non-NULL, bulk memory to hold pList */
+ int szPMA; /* Size of pList as PMA in bytes */
+};
+
+/*
+** The MergeEngine object is used to combine two or more smaller PMAs into
+** one big PMA using a merge operation. Separate PMAs all need to be
+** combined into one big PMA in order to be able to step through the sorted
+** records in order.
**
-** The aIter[] array contains an iterator for each of the PMAs being merged.
-** An aIter[] iterator either points to a valid key or else is at EOF. For
-** the purposes of the paragraphs below, we assume that the array is actually
-** N elements in size, where N is the smallest power of 2 greater to or equal
-** to the number of iterators being merged. The extra aIter[] elements are
-** treated as if they are empty (always at EOF).
+** The aReadr[] array contains a PmaReader object for each of the PMAs being
+** merged. An aReadr[] object either points to a valid key or else is at EOF.
+** ("EOF" means "End Of File". When aReadr[] is at EOF there is no more data.)
+** For the purposes of the paragraphs below, we assume that the array is
+** actually N elements in size, where N is the smallest power of 2 greater
+** to or equal to the number of PMAs being merged. The extra aReadr[] elements
+** are treated as if they are empty (always at EOF).
**
** The aTree[] array is also N elements in size. The value of N is stored in
-** the VdbeSorter.nTree variable.
+** the MergeEngine.nTree variable.
**
** The final (N/2) elements of aTree[] contain the results of comparing
-** pairs of iterator keys together. Element i contains the result of
-** comparing aIter[2*i-N] and aIter[2*i-N+1]. Whichever key is smaller, the
+** pairs of PMA keys together. Element i contains the result of
+** comparing aReadr[2*i-N] and aReadr[2*i-N+1]. Whichever key is smaller, the
** aTree element is set to the index of it.
**
** For the purposes of this comparison, EOF is considered greater than any
@@ -75058,34 +76203,34 @@ typedef struct FileWriter FileWriter;
** values), it doesn't matter which index is stored.
**
** The (N/4) elements of aTree[] that precede the final (N/2) described
-** above contains the index of the smallest of each block of 4 iterators.
-** And so on. So that aTree[1] contains the index of the iterator that
+** above contains the index of the smallest of each block of 4 PmaReaders
+** And so on. So that aTree[1] contains the index of the PmaReader that
** currently points to the smallest key value. aTree[0] is unused.
**
** Example:
**
-** aIter[0] -> Banana
-** aIter[1] -> Feijoa
-** aIter[2] -> Elderberry
-** aIter[3] -> Currant
-** aIter[4] -> Grapefruit
-** aIter[5] -> Apple
-** aIter[6] -> Durian
-** aIter[7] -> EOF
+** aReadr[0] -> Banana
+** aReadr[1] -> Feijoa
+** aReadr[2] -> Elderberry
+** aReadr[3] -> Currant
+** aReadr[4] -> Grapefruit
+** aReadr[5] -> Apple
+** aReadr[6] -> Durian
+** aReadr[7] -> EOF
**
** aTree[] = { X, 5 0, 5 0, 3, 5, 6 }
**
** The current element is "Apple" (the value of the key indicated by
-** iterator 5). When the Next() operation is invoked, iterator 5 will
+** PmaReader 5). When the Next() operation is invoked, PmaReader 5 will
** be advanced to the next key in its segment. Say the next key is
** "Eggplant":
**
-** aIter[5] -> Eggplant
+** aReadr[5] -> Eggplant
**
-** The contents of aTree[] are updated first by comparing the new iterator
-** 5 key to the current key of iterator 4 (still "Grapefruit"). The iterator
+** The contents of aTree[] are updated first by comparing the new PmaReader
+** 5 key to the current key of PmaReader 4 (still "Grapefruit"). The PmaReader
** 5 value is still smaller, so aTree[6] is set to 5. And so on up the tree.
-** The value of iterator 6 - "Durian" - is now smaller than that of iterator
+** The value of PmaReader 6 - "Durian" - is now smaller than that of PmaReader
** 5, so aTree[3] is set to 6. Key 0 is smaller than key 6 (Banana<Durian),
** so the value written into element 1 of the array is 0. As follows:
**
@@ -75095,97 +76240,246 @@ typedef struct FileWriter FileWriter;
** key comparison operations are required, where N is the number of segments
** being merged (rounded up to the next power of 2).
*/
+struct MergeEngine {
+ int nTree; /* Used size of aTree/aReadr (power of 2) */
+ SortSubtask *pTask; /* Used by this thread only */
+ int *aTree; /* Current state of incremental merge */
+ PmaReader *aReadr; /* Array of PmaReaders to merge data from */
+};
+
+/*
+** This object represents a single thread of control in a sort operation.
+** Exactly VdbeSorter.nTask instances of this object are allocated
+** as part of each VdbeSorter object. Instances are never allocated any
+** other way. VdbeSorter.nTask is set to the number of worker threads allowed
+** (see SQLITE_CONFIG_WORKER_THREADS) plus one (the main thread). Thus for
+** single-threaded operation, there is exactly one instance of this object
+** and for multi-threaded operation there are two or more instances.
+**
+** Essentially, this structure contains all those fields of the VdbeSorter
+** structure for which each thread requires a separate instance. For example,
+** each thread requries its own UnpackedRecord object to unpack records in
+** as part of comparison operations.
+**
+** Before a background thread is launched, variable bDone is set to 0. Then,
+** right before it exits, the thread itself sets bDone to 1. This is used for
+** two purposes:
+**
+** 1. When flushing the contents of memory to a level-0 PMA on disk, to
+** attempt to select a SortSubtask for which there is not already an
+** active background thread (since doing so causes the main thread
+** to block until it finishes).
+**
+** 2. If SQLITE_DEBUG_SORTER_THREADS is defined, to determine if a call
+** to sqlite3ThreadJoin() is likely to block. Cases that are likely to
+** block provoke debugging output.
+**
+** In both cases, the effects of the main thread seeing (bDone==0) even
+** after the thread has finished are not dire. So we don't worry about
+** memory barriers and such here.
+*/
+struct SortSubtask {
+ SQLiteThread *pThread; /* Background thread, if any */
+ int bDone; /* Set if thread is finished but not joined */
+ VdbeSorter *pSorter; /* Sorter that owns this sub-task */
+ UnpackedRecord *pUnpacked; /* Space to unpack a record */
+ SorterList list; /* List for thread to write to a PMA */
+ int nPMA; /* Number of PMAs currently in file */
+ SorterFile file; /* Temp file for level-0 PMAs */
+ SorterFile file2; /* Space for other PMAs */
+};
+
+/*
+** Main sorter structure. A single instance of this is allocated for each
+** sorter cursor created by the VDBE.
+**
+** mxKeysize:
+** As records are added to the sorter by calls to sqlite3VdbeSorterWrite(),
+** this variable is updated so as to be set to the size on disk of the
+** largest record in the sorter.
+*/
struct VdbeSorter {
- i64 iWriteOff; /* Current write offset within file pTemp1 */
- i64 iReadOff; /* Current read offset within file pTemp1 */
- int nInMemory; /* Current size of pRecord list as PMA */
- int nTree; /* Used size of aTree/aIter (power of 2) */
- int nPMA; /* Number of PMAs stored in pTemp1 */
int mnPmaSize; /* Minimum PMA size, in bytes */
int mxPmaSize; /* Maximum PMA size, in bytes. 0==no limit */
- VdbeSorterIter *aIter; /* Array of iterators to merge */
- int *aTree; /* Current state of incremental merge */
- sqlite3_file *pTemp1; /* PMA file 1 */
- SorterRecord *pRecord; /* Head of in-memory record list */
- UnpackedRecord *pUnpacked; /* Used to unpack keys */
+ int mxKeysize; /* Largest serialized key seen so far */
+ int pgsz; /* Main database page size */
+ PmaReader *pReader; /* Readr data from here after Rewind() */
+ MergeEngine *pMerger; /* Or here, if bUseThreads==0 */
+ sqlite3 *db; /* Database connection */
+ KeyInfo *pKeyInfo; /* How to compare records */
+ UnpackedRecord *pUnpacked; /* Used by VdbeSorterCompare() */
+ SorterList list; /* List of in-memory records */
+ int iMemory; /* Offset of free space in list.aMemory */
+ int nMemory; /* Size of list.aMemory allocation in bytes */
+ u8 bUsePMA; /* True if one or more PMAs created */
+ u8 bUseThreads; /* True to use background threads */
+ u8 iPrev; /* Previous thread used to flush PMA */
+ u8 nTask; /* Size of aTask[] array */
+ SortSubtask aTask[1]; /* One or more subtasks */
};
/*
-** The following type is an iterator for a PMA. It caches the current key in
-** variables nKey/aKey. If the iterator is at EOF, pFile==0.
-*/
-struct VdbeSorterIter {
- i64 iReadOff; /* Current read offset */
- i64 iEof; /* 1 byte past EOF for this iterator */
- int nAlloc; /* Bytes of space at aAlloc */
- int nKey; /* Number of bytes in key */
- sqlite3_file *pFile; /* File iterator is reading from */
- u8 *aAlloc; /* Allocated space */
- u8 *aKey; /* Pointer to current key */
- u8 *aBuffer; /* Current read buffer */
- int nBuffer; /* Size of read buffer in bytes */
+** An instance of the following object is used to read records out of a
+** PMA, in sorted order. The next key to be read is cached in nKey/aKey.
+** aKey might point into aMap or into aBuffer. If neither of those locations
+** contain a contiguous representation of the key, then aAlloc is allocated
+** and the key is copied into aAlloc and aKey is made to poitn to aAlloc.
+**
+** pFd==0 at EOF.
+*/
+struct PmaReader {
+ i64 iReadOff; /* Current read offset */
+ i64 iEof; /* 1 byte past EOF for this PmaReader */
+ int nAlloc; /* Bytes of space at aAlloc */
+ int nKey; /* Number of bytes in key */
+ sqlite3_file *pFd; /* File handle we are reading from */
+ u8 *aAlloc; /* Space for aKey if aBuffer and pMap wont work */
+ u8 *aKey; /* Pointer to current key */
+ u8 *aBuffer; /* Current read buffer */
+ int nBuffer; /* Size of read buffer in bytes */
+ u8 *aMap; /* Pointer to mapping of entire file */
+ IncrMerger *pIncr; /* Incremental merger */
+};
+
+/*
+** Normally, a PmaReader object iterates through an existing PMA stored
+** within a temp file. However, if the PmaReader.pIncr variable points to
+** an object of the following type, it may be used to iterate/merge through
+** multiple PMAs simultaneously.
+**
+** There are two types of IncrMerger object - single (bUseThread==0) and
+** multi-threaded (bUseThread==1).
+**
+** A multi-threaded IncrMerger object uses two temporary files - aFile[0]
+** and aFile[1]. Neither file is allowed to grow to more than mxSz bytes in
+** size. When the IncrMerger is initialized, it reads enough data from
+** pMerger to populate aFile[0]. It then sets variables within the
+** corresponding PmaReader object to read from that file and kicks off
+** a background thread to populate aFile[1] with the next mxSz bytes of
+** sorted record data from pMerger.
+**
+** When the PmaReader reaches the end of aFile[0], it blocks until the
+** background thread has finished populating aFile[1]. It then exchanges
+** the contents of the aFile[0] and aFile[1] variables within this structure,
+** sets the PmaReader fields to read from the new aFile[0] and kicks off
+** another background thread to populate the new aFile[1]. And so on, until
+** the contents of pMerger are exhausted.
+**
+** A single-threaded IncrMerger does not open any temporary files of its
+** own. Instead, it has exclusive access to mxSz bytes of space beginning
+** at offset iStartOff of file pTask->file2. And instead of using a
+** background thread to prepare data for the PmaReader, with a single
+** threaded IncrMerger the allocate part of pTask->file2 is "refilled" with
+** keys from pMerger by the calling thread whenever the PmaReader runs out
+** of data.
+*/
+struct IncrMerger {
+ SortSubtask *pTask; /* Task that owns this merger */
+ MergeEngine *pMerger; /* Merge engine thread reads data from */
+ i64 iStartOff; /* Offset to start writing file at */
+ int mxSz; /* Maximum bytes of data to store */
+ int bEof; /* Set to true when merge is finished */
+ int bUseThread; /* True to use a bg thread for this object */
+ SorterFile aFile[2]; /* aFile[0] for reading, [1] for writing */
};
/*
-** An instance of this structure is used to organize the stream of records
-** being written to files by the merge-sort code into aligned, page-sized
-** blocks. Doing all I/O in aligned page-sized blocks helps I/O to go
-** faster on many operating systems.
+** An instance of this object is used for writing a PMA.
+**
+** The PMA is written one record at a time. Each record is of an arbitrary
+** size. But I/O is more efficient if it occurs in page-sized blocks where
+** each block is aligned on a page boundary. This object caches writes to
+** the PMA so that aligned, page-size blocks are written.
*/
-struct FileWriter {
+struct PmaWriter {
int eFWErr; /* Non-zero if in an error state */
u8 *aBuffer; /* Pointer to write buffer */
int nBuffer; /* Size of write buffer in bytes */
int iBufStart; /* First byte of buffer to write */
int iBufEnd; /* Last byte of buffer to write */
i64 iWriteOff; /* Offset of start of buffer in file */
- sqlite3_file *pFile; /* File to write to */
+ sqlite3_file *pFd; /* File handle to write to */
};
/*
-** A structure to store a single record. All in-memory records are connected
-** together into a linked list headed at VdbeSorter.pRecord using the
-** SorterRecord.pNext pointer.
+** This object is the header on a single record while that record is being
+** held in memory and prior to being written out as part of a PMA.
+**
+** How the linked list is connected depends on how memory is being managed
+** by this module. If using a separate allocation for each in-memory record
+** (VdbeSorter.list.aMemory==0), then the list is always connected using the
+** SorterRecord.u.pNext pointers.
+**
+** Or, if using the single large allocation method (VdbeSorter.list.aMemory!=0),
+** then while records are being accumulated the list is linked using the
+** SorterRecord.u.iNext offset. This is because the aMemory[] array may
+** be sqlite3Realloc()ed while records are being accumulated. Once the VM
+** has finished passing records to the sorter, or when the in-memory buffer
+** is full, the list is sorted. As part of the sorting process, it is
+** converted to use the SorterRecord.u.pNext pointers. See function
+** vdbeSorterSort() for details.
*/
struct SorterRecord {
- void *pVal;
- int nVal;
- SorterRecord *pNext;
+ int nVal; /* Size of the record in bytes */
+ union {
+ SorterRecord *pNext; /* Pointer to next record in list */
+ int iNext; /* Offset within aMemory of next record */
+ } u;
+ /* The data for the record immediately follows this header */
};
-/* Minimum allowable value for the VdbeSorter.nWorking variable */
+/* Return a pointer to the buffer containing the record data for SorterRecord
+** object p. Should be used as if:
+**
+** void *SRVAL(SorterRecord *p) { return (void*)&p[1]; }
+*/
+#define SRVAL(p) ((void*)((SorterRecord*)(p) + 1))
+
+/* The minimum PMA size is set to this value multiplied by the database
+** page size in bytes. */
#define SORTER_MIN_WORKING 10
-/* Maximum number of segments to merge in a single pass. */
+/* Maximum number of PMAs that a single MergeEngine can merge */
#define SORTER_MAX_MERGE_COUNT 16
+static int vdbeIncrSwap(IncrMerger*);
+static void vdbeIncrFree(IncrMerger *);
+
/*
-** Free all memory belonging to the VdbeSorterIter object passed as the second
+** Free all memory belonging to the PmaReader object passed as the
** argument. All structure fields are set to zero before returning.
*/
-static void vdbeSorterIterZero(sqlite3 *db, VdbeSorterIter *pIter){
- sqlite3DbFree(db, pIter->aAlloc);
- sqlite3DbFree(db, pIter->aBuffer);
- memset(pIter, 0, sizeof(VdbeSorterIter));
+static void vdbePmaReaderClear(PmaReader *pReadr){
+ sqlite3_free(pReadr->aAlloc);
+ sqlite3_free(pReadr->aBuffer);
+ if( pReadr->aMap ) sqlite3OsUnfetch(pReadr->pFd, 0, pReadr->aMap);
+ vdbeIncrFree(pReadr->pIncr);
+ memset(pReadr, 0, sizeof(PmaReader));
}
/*
-** Read nByte bytes of data from the stream of data iterated by object p.
+** Read the next nByte bytes of data from the PMA p.
** If successful, set *ppOut to point to a buffer containing the data
** and return SQLITE_OK. Otherwise, if an error occurs, return an SQLite
** error code.
**
-** The buffer indicated by *ppOut may only be considered valid until the
+** The buffer returned in *ppOut is only valid until the
** next call to this function.
*/
-static int vdbeSorterIterRead(
- sqlite3 *db, /* Database handle (for malloc) */
- VdbeSorterIter *p, /* Iterator */
+static int vdbePmaReadBlob(
+ PmaReader *p, /* PmaReader from which to take the blob */
int nByte, /* Bytes of data to read */
u8 **ppOut /* OUT: Pointer to buffer containing data */
){
int iBuf; /* Offset within buffer to read from */
int nAvail; /* Bytes of data available in buffer */
+
+ if( p->aMap ){
+ *ppOut = &p->aMap[p->iReadOff];
+ p->iReadOff += nByte;
+ return SQLITE_OK;
+ }
+
assert( p->aBuffer );
/* If there is no more data to be read from the buffer, read the next
@@ -75204,8 +76498,8 @@ static int vdbeSorterIterRead(
}
assert( nRead>0 );
- /* Read data from the file. Return early if an error occurs. */
- rc = sqlite3OsRead(p->pFile, p->aBuffer, nRead, p->iReadOff);
+ /* Readr data from the file. Return early if an error occurs. */
+ rc = sqlite3OsRead(p->pFd, p->aBuffer, nRead, p->iReadOff);
assert( rc!=SQLITE_IOERR_SHORT_READ );
if( rc!=SQLITE_OK ) return rc;
}
@@ -75225,11 +76519,13 @@ static int vdbeSorterIterRead(
/* Extend the p->aAlloc[] allocation if required. */
if( p->nAlloc<nByte ){
- int nNew = p->nAlloc*2;
+ u8 *aNew;
+ int nNew = MAX(128, p->nAlloc*2);
while( nByte>nNew ) nNew = nNew*2;
- p->aAlloc = sqlite3DbReallocOrFree(db, p->aAlloc, nNew);
- if( !p->aAlloc ) return SQLITE_NOMEM;
+ aNew = sqlite3Realloc(p->aAlloc, nNew);
+ if( !aNew ) return SQLITE_NOMEM;
p->nAlloc = nNew;
+ p->aAlloc = aNew;
}
/* Copy as much data as is available in the buffer into the start of
@@ -75241,13 +76537,13 @@ static int vdbeSorterIterRead(
/* The following loop copies up to p->nBuffer bytes per iteration into
** the p->aAlloc[] buffer. */
while( nRem>0 ){
- int rc; /* vdbeSorterIterRead() return code */
+ int rc; /* vdbePmaReadBlob() return code */
int nCopy; /* Number of bytes to copy */
u8 *aNext; /* Pointer to buffer to copy data from */
nCopy = nRem;
if( nRem>p->nBuffer ) nCopy = p->nBuffer;
- rc = vdbeSorterIterRead(db, p, nCopy, &aNext);
+ rc = vdbePmaReadBlob(p, nCopy, &aNext);
if( rc!=SQLITE_OK ) return rc;
assert( aNext!=p->aAlloc );
memcpy(&p->aAlloc[nByte - nRem], aNext, nCopy);
@@ -75264,108 +76560,174 @@ static int vdbeSorterIterRead(
** Read a varint from the stream of data accessed by p. Set *pnOut to
** the value read.
*/
-static int vdbeSorterIterVarint(sqlite3 *db, VdbeSorterIter *p, u64 *pnOut){
+static int vdbePmaReadVarint(PmaReader *p, u64 *pnOut){
int iBuf;
- iBuf = p->iReadOff % p->nBuffer;
- if( iBuf && (p->nBuffer-iBuf)>=9 ){
- p->iReadOff += sqlite3GetVarint(&p->aBuffer[iBuf], pnOut);
+ if( p->aMap ){
+ p->iReadOff += sqlite3GetVarint(&p->aMap[p->iReadOff], pnOut);
}else{
- u8 aVarint[16], *a;
- int i = 0, rc;
- do{
- rc = vdbeSorterIterRead(db, p, 1, &a);
- if( rc ) return rc;
- aVarint[(i++)&0xf] = a[0];
- }while( (a[0]&0x80)!=0 );
- sqlite3GetVarint(aVarint, pnOut);
+ iBuf = p->iReadOff % p->nBuffer;
+ if( iBuf && (p->nBuffer-iBuf)>=9 ){
+ p->iReadOff += sqlite3GetVarint(&p->aBuffer[iBuf], pnOut);
+ }else{
+ u8 aVarint[16], *a;
+ int i = 0, rc;
+ do{
+ rc = vdbePmaReadBlob(p, 1, &a);
+ if( rc ) return rc;
+ aVarint[(i++)&0xf] = a[0];
+ }while( (a[0]&0x80)!=0 );
+ sqlite3GetVarint(aVarint, pnOut);
+ }
}
return SQLITE_OK;
}
+/*
+** Attempt to memory map file pFile. If successful, set *pp to point to the
+** new mapping and return SQLITE_OK. If the mapping is not attempted
+** (because the file is too large or the VFS layer is configured not to use
+** mmap), return SQLITE_OK and set *pp to NULL.
+**
+** Or, if an error occurs, return an SQLite error code. The final value of
+** *pp is undefined in this case.
+*/
+static int vdbeSorterMapFile(SortSubtask *pTask, SorterFile *pFile, u8 **pp){
+ int rc = SQLITE_OK;
+ if( pFile->iEof<=(i64)(pTask->pSorter->db->nMaxSorterMmap) ){
+ sqlite3_file *pFd = pFile->pFd;
+ if( pFd->pMethods->iVersion>=3 ){
+ rc = sqlite3OsFetch(pFd, 0, (int)pFile->iEof, (void**)pp);
+ testcase( rc!=SQLITE_OK );
+ }
+ }
+ return rc;
+}
/*
-** Advance iterator pIter to the next key in its PMA. Return SQLITE_OK if
-** no error occurs, or an SQLite error code if one does.
+** Attach PmaReader pReadr to file pFile (if it is not already attached to
+** that file) and seek it to offset iOff within the file. Return SQLITE_OK
+** if successful, or an SQLite error code if an error occurs.
*/
-static int vdbeSorterIterNext(
- sqlite3 *db, /* Database handle (for sqlite3DbMalloc() ) */
- VdbeSorterIter *pIter /* Iterator to advance */
+static int vdbePmaReaderSeek(
+ SortSubtask *pTask, /* Task context */
+ PmaReader *pReadr, /* Reader whose cursor is to be moved */
+ SorterFile *pFile, /* Sorter file to read from */
+ i64 iOff /* Offset in pFile */
){
- int rc; /* Return Code */
+ int rc = SQLITE_OK;
+
+ assert( pReadr->pIncr==0 || pReadr->pIncr->bEof==0 );
+
+ if( sqlite3FaultSim(201) ) return SQLITE_IOERR_READ;
+ if( pReadr->aMap ){
+ sqlite3OsUnfetch(pReadr->pFd, 0, pReadr->aMap);
+ pReadr->aMap = 0;
+ }
+ pReadr->iReadOff = iOff;
+ pReadr->iEof = pFile->iEof;
+ pReadr->pFd = pFile->pFd;
+
+ rc = vdbeSorterMapFile(pTask, pFile, &pReadr->aMap);
+ if( rc==SQLITE_OK && pReadr->aMap==0 ){
+ int pgsz = pTask->pSorter->pgsz;
+ int iBuf = pReadr->iReadOff % pgsz;
+ if( pReadr->aBuffer==0 ){
+ pReadr->aBuffer = (u8*)sqlite3Malloc(pgsz);
+ if( pReadr->aBuffer==0 ) rc = SQLITE_NOMEM;
+ pReadr->nBuffer = pgsz;
+ }
+ if( rc==SQLITE_OK && iBuf ){
+ int nRead = pgsz - iBuf;
+ if( (pReadr->iReadOff + nRead) > pReadr->iEof ){
+ nRead = (int)(pReadr->iEof - pReadr->iReadOff);
+ }
+ rc = sqlite3OsRead(
+ pReadr->pFd, &pReadr->aBuffer[iBuf], nRead, pReadr->iReadOff
+ );
+ testcase( rc!=SQLITE_OK );
+ }
+ }
+
+ return rc;
+}
+
+/*
+** Advance PmaReader pReadr to the next key in its PMA. Return SQLITE_OK if
+** no error occurs, or an SQLite error code if one does.
+*/
+static int vdbePmaReaderNext(PmaReader *pReadr){
+ int rc = SQLITE_OK; /* Return Code */
u64 nRec = 0; /* Size of record in bytes */
- if( pIter->iReadOff>=pIter->iEof ){
- /* This is an EOF condition */
- vdbeSorterIterZero(db, pIter);
- return SQLITE_OK;
+
+ if( pReadr->iReadOff>=pReadr->iEof ){
+ IncrMerger *pIncr = pReadr->pIncr;
+ int bEof = 1;
+ if( pIncr ){
+ rc = vdbeIncrSwap(pIncr);
+ if( rc==SQLITE_OK && pIncr->bEof==0 ){
+ rc = vdbePmaReaderSeek(
+ pIncr->pTask, pReadr, &pIncr->aFile[0], pIncr->iStartOff
+ );
+ bEof = 0;
+ }
+ }
+
+ if( bEof ){
+ /* This is an EOF condition */
+ vdbePmaReaderClear(pReadr);
+ testcase( rc!=SQLITE_OK );
+ return rc;
+ }
}
- rc = vdbeSorterIterVarint(db, pIter, &nRec);
if( rc==SQLITE_OK ){
- pIter->nKey = (int)nRec;
- rc = vdbeSorterIterRead(db, pIter, (int)nRec, &pIter->aKey);
+ rc = vdbePmaReadVarint(pReadr, &nRec);
+ }
+ if( rc==SQLITE_OK ){
+ pReadr->nKey = (int)nRec;
+ rc = vdbePmaReadBlob(pReadr, (int)nRec, &pReadr->aKey);
+ testcase( rc!=SQLITE_OK );
}
return rc;
}
/*
-** Initialize iterator pIter to scan through the PMA stored in file pFile
+** Initialize PmaReader pReadr to scan through the PMA stored in file pFile
** starting at offset iStart and ending at offset iEof-1. This function
-** leaves the iterator pointing to the first key in the PMA (or EOF if the
+** leaves the PmaReader pointing to the first key in the PMA (or EOF if the
** PMA is empty).
+**
+** If the pnByte parameter is NULL, then it is assumed that the file
+** contains a single PMA, and that that PMA omits the initial length varint.
*/
-static int vdbeSorterIterInit(
- sqlite3 *db, /* Database handle */
- const VdbeSorter *pSorter, /* Sorter object */
+static int vdbePmaReaderInit(
+ SortSubtask *pTask, /* Task context */
+ SorterFile *pFile, /* Sorter file to read from */
i64 iStart, /* Start offset in pFile */
- VdbeSorterIter *pIter, /* Iterator to populate */
+ PmaReader *pReadr, /* PmaReader to populate */
i64 *pnByte /* IN/OUT: Increment this value by PMA size */
){
- int rc = SQLITE_OK;
- int nBuf;
-
- nBuf = sqlite3BtreeGetPageSize(db->aDb[0].pBt);
+ int rc;
- assert( pSorter->iWriteOff>iStart );
- assert( pIter->aAlloc==0 );
- assert( pIter->aBuffer==0 );
- pIter->pFile = pSorter->pTemp1;
- pIter->iReadOff = iStart;
- pIter->nAlloc = 128;
- pIter->aAlloc = (u8 *)sqlite3DbMallocRaw(db, pIter->nAlloc);
- pIter->nBuffer = nBuf;
- pIter->aBuffer = (u8 *)sqlite3DbMallocRaw(db, nBuf);
+ assert( pFile->iEof>iStart );
+ assert( pReadr->aAlloc==0 && pReadr->nAlloc==0 );
+ assert( pReadr->aBuffer==0 );
+ assert( pReadr->aMap==0 );
- if( !pIter->aBuffer ){
- rc = SQLITE_NOMEM;
- }else{
- int iBuf;
-
- iBuf = iStart % nBuf;
- if( iBuf ){
- int nRead = nBuf - iBuf;
- if( (iStart + nRead) > pSorter->iWriteOff ){
- nRead = (int)(pSorter->iWriteOff - iStart);
- }
- rc = sqlite3OsRead(
- pSorter->pTemp1, &pIter->aBuffer[iBuf], nRead, iStart
- );
- }
-
- if( rc==SQLITE_OK ){
- u64 nByte; /* Size of PMA in bytes */
- pIter->iEof = pSorter->iWriteOff;
- rc = vdbeSorterIterVarint(db, pIter, &nByte);
- pIter->iEof = pIter->iReadOff + nByte;
- *pnByte += nByte;
- }
+ rc = vdbePmaReaderSeek(pTask, pReadr, pFile, iStart);
+ if( rc==SQLITE_OK ){
+ u64 nByte; /* Size of PMA in bytes */
+ rc = vdbePmaReadVarint(pReadr, &nByte);
+ pReadr->iEof = pReadr->iReadOff + nByte;
+ *pnByte += nByte;
}
if( rc==SQLITE_OK ){
- rc = vdbeSorterIterNext(db, pIter);
+ rc = vdbePmaReaderNext(pReadr);
}
return rc;
}
@@ -75373,135 +76735,330 @@ static int vdbeSorterIterInit(
/*
** Compare key1 (buffer pKey1, size nKey1 bytes) with key2 (buffer pKey2,
-** size nKey2 bytes). Argument pKeyInfo supplies the collation functions
-** used by the comparison. If an error occurs, return an SQLite error code.
-** Otherwise, return SQLITE_OK and set *pRes to a negative, zero or positive
-** value, depending on whether key1 is smaller, equal to or larger than key2.
-**
-** If the bOmitRowid argument is non-zero, assume both keys end in a rowid
-** field. For the purposes of the comparison, ignore it. Also, if bOmitRowid
-** is true and key1 contains even a single NULL value, it is considered to
-** be less than key2. Even if key2 also contains NULL values.
-**
-** If pKey2 is passed a NULL pointer, then it is assumed that the pCsr->aSpace
-** has been allocated and contains an unpacked record that is used as key2.
-*/
-static void vdbeSorterCompare(
- const VdbeCursor *pCsr, /* Cursor object (for pKeyInfo) */
- int nKeyCol, /* Num of columns. 0 means "all" */
+** size nKey2 bytes). Use (pTask->pKeyInfo) for the collation sequences
+** used by the comparison. Return the result of the comparison.
+**
+** Before returning, object (pTask->pUnpacked) is populated with the
+** unpacked version of key2. Or, if pKey2 is passed a NULL pointer, then it
+** is assumed that the (pTask->pUnpacked) structure already contains the
+** unpacked key to use as key2.
+**
+** If an OOM error is encountered, (pTask->pUnpacked->error_rc) is set
+** to SQLITE_NOMEM.
+*/
+static int vdbeSorterCompare(
+ SortSubtask *pTask, /* Subtask context (for pKeyInfo) */
const void *pKey1, int nKey1, /* Left side of comparison */
- const void *pKey2, int nKey2, /* Right side of comparison */
- int *pRes /* OUT: Result of comparison */
+ const void *pKey2, int nKey2 /* Right side of comparison */
){
- KeyInfo *pKeyInfo = pCsr->pKeyInfo;
- VdbeSorter *pSorter = pCsr->pSorter;
- UnpackedRecord *r2 = pSorter->pUnpacked;
- int i;
-
+ UnpackedRecord *r2 = pTask->pUnpacked;
if( pKey2 ){
- sqlite3VdbeRecordUnpack(pKeyInfo, nKey2, pKey2, r2);
+ sqlite3VdbeRecordUnpack(pTask->pSorter->pKeyInfo, nKey2, pKey2, r2);
}
+ return sqlite3VdbeRecordCompare(nKey1, pKey1, r2);
+}
- if( nKeyCol ){
- r2->nField = nKeyCol;
- for(i=0; i<nKeyCol; i++){
- if( r2->aMem[i].flags & MEM_Null ){
- *pRes = -1;
- return;
+/*
+** Initialize the temporary index cursor just opened as a sorter cursor.
+**
+** Usually, the sorter module uses the value of (pCsr->pKeyInfo->nField)
+** to determine the number of fields that should be compared from the
+** records being sorted. However, if the value passed as argument nField
+** is non-zero and the sorter is able to guarantee a stable sort, nField
+** is used instead. This is used when sorting records for a CREATE INDEX
+** statement. In this case, keys are always delivered to the sorter in
+** order of the primary key, which happens to be make up the final part
+** of the records being sorted. So if the sort is stable, there is never
+** any reason to compare PK fields and they can be ignored for a small
+** performance boost.
+**
+** The sorter can guarantee a stable sort when running in single-threaded
+** mode, but not in multi-threaded mode.
+**
+** SQLITE_OK is returned if successful, or an SQLite error code otherwise.
+*/
+SQLITE_PRIVATE int sqlite3VdbeSorterInit(
+ sqlite3 *db, /* Database connection (for malloc()) */
+ int nField, /* Number of key fields in each record */
+ VdbeCursor *pCsr /* Cursor that holds the new sorter */
+){
+ int pgsz; /* Page size of main database */
+ int i; /* Used to iterate through aTask[] */
+ int mxCache; /* Cache size */
+ VdbeSorter *pSorter; /* The new sorter */
+ KeyInfo *pKeyInfo; /* Copy of pCsr->pKeyInfo with db==0 */
+ int szKeyInfo; /* Size of pCsr->pKeyInfo in bytes */
+ int sz; /* Size of pSorter in bytes */
+ int rc = SQLITE_OK;
+#if SQLITE_MAX_WORKER_THREADS==0
+# define nWorker 0
+#else
+ int nWorker;
+#endif
+
+ /* Initialize the upper limit on the number of worker threads */
+#if SQLITE_MAX_WORKER_THREADS>0
+ if( sqlite3TempInMemory(db) || sqlite3GlobalConfig.bCoreMutex==0 ){
+ nWorker = 0;
+ }else{
+ nWorker = db->aLimit[SQLITE_LIMIT_WORKER_THREADS];
+ }
+#endif
+
+ /* Do not allow the total number of threads (main thread + all workers)
+ ** to exceed the maximum merge count */
+#if SQLITE_MAX_WORKER_THREADS>=SORTER_MAX_MERGE_COUNT
+ if( nWorker>=SORTER_MAX_MERGE_COUNT ){
+ nWorker = SORTER_MAX_MERGE_COUNT-1;
+ }
+#endif
+
+ assert( pCsr->pKeyInfo && pCsr->pBt==0 );
+ szKeyInfo = sizeof(KeyInfo) + (pCsr->pKeyInfo->nField-1)*sizeof(CollSeq*);
+ sz = sizeof(VdbeSorter) + nWorker * sizeof(SortSubtask);
+
+ pSorter = (VdbeSorter*)sqlite3DbMallocZero(db, sz + szKeyInfo);
+ pCsr->pSorter = pSorter;
+ if( pSorter==0 ){
+ rc = SQLITE_NOMEM;
+ }else{
+ pSorter->pKeyInfo = pKeyInfo = (KeyInfo*)((u8*)pSorter + sz);
+ memcpy(pKeyInfo, pCsr->pKeyInfo, szKeyInfo);
+ pKeyInfo->db = 0;
+ if( nField && nWorker==0 ) pKeyInfo->nField = nField;
+ pSorter->pgsz = pgsz = sqlite3BtreeGetPageSize(db->aDb[0].pBt);
+ pSorter->nTask = nWorker + 1;
+ pSorter->bUseThreads = (pSorter->nTask>1);
+ pSorter->db = db;
+ for(i=0; i<pSorter->nTask; i++){
+ SortSubtask *pTask = &pSorter->aTask[i];
+ pTask->pSorter = pSorter;
+ }
+
+ if( !sqlite3TempInMemory(db) ){
+ pSorter->mnPmaSize = SORTER_MIN_WORKING * pgsz;
+ mxCache = db->aDb[0].pSchema->cache_size;
+ if( mxCache<SORTER_MIN_WORKING ) mxCache = SORTER_MIN_WORKING;
+ pSorter->mxPmaSize = mxCache * pgsz;
+
+ /* If the application has not configure scratch memory using
+ ** SQLITE_CONFIG_SCRATCH then we assume it is OK to do large memory
+ ** allocations. If scratch memory has been configured, then assume
+ ** large memory allocations should be avoided to prevent heap
+ ** fragmentation.
+ */
+ if( sqlite3GlobalConfig.pScratch==0 ){
+ assert( pSorter->iMemory==0 );
+ pSorter->nMemory = pgsz;
+ pSorter->list.aMemory = (u8*)sqlite3Malloc(pgsz);
+ if( !pSorter->list.aMemory ) rc = SQLITE_NOMEM;
}
}
- assert( r2->default_rc==0 );
}
- *pRes = sqlite3VdbeRecordCompare(nKey1, pKey1, r2, 0);
+ return rc;
}
+#undef nWorker /* Defined at the top of this function */
/*
-** This function is called to compare two iterator keys when merging
-** multiple b-tree segments. Parameter iOut is the index of the aTree[]
-** value to recalculate.
+** Free the list of sorted records starting at pRecord.
*/
-static int vdbeSorterDoCompare(const VdbeCursor *pCsr, int iOut){
- VdbeSorter *pSorter = pCsr->pSorter;
- int i1;
- int i2;
- int iRes;
- VdbeSorterIter *p1;
- VdbeSorterIter *p2;
-
- assert( iOut<pSorter->nTree && iOut>0 );
+static void vdbeSorterRecordFree(sqlite3 *db, SorterRecord *pRecord){
+ SorterRecord *p;
+ SorterRecord *pNext;
+ for(p=pRecord; p; p=pNext){
+ pNext = p->u.pNext;
+ sqlite3DbFree(db, p);
+ }
+}
- if( iOut>=(pSorter->nTree/2) ){
- i1 = (iOut - pSorter->nTree/2) * 2;
- i2 = i1 + 1;
- }else{
- i1 = pSorter->aTree[iOut*2];
- i2 = pSorter->aTree[iOut*2+1];
+/*
+** Free all resources owned by the object indicated by argument pTask. All
+** fields of *pTask are zeroed before returning.
+*/
+static void vdbeSortSubtaskCleanup(sqlite3 *db, SortSubtask *pTask){
+ sqlite3DbFree(db, pTask->pUnpacked);
+ pTask->pUnpacked = 0;
+#if SQLITE_MAX_WORKER_THREADS>0
+ /* pTask->list.aMemory can only be non-zero if it was handed memory
+ ** from the main thread. That only occurs SQLITE_MAX_WORKER_THREADS>0 */
+ if( pTask->list.aMemory ){
+ sqlite3_free(pTask->list.aMemory);
+ pTask->list.aMemory = 0;
+ }else
+#endif
+ {
+ assert( pTask->list.aMemory==0 );
+ vdbeSorterRecordFree(0, pTask->list.pList);
+ }
+ pTask->list.pList = 0;
+ if( pTask->file.pFd ){
+ sqlite3OsCloseFree(pTask->file.pFd);
+ pTask->file.pFd = 0;
+ pTask->file.iEof = 0;
}
+ if( pTask->file2.pFd ){
+ sqlite3OsCloseFree(pTask->file2.pFd);
+ pTask->file2.pFd = 0;
+ pTask->file2.iEof = 0;
+ }
+}
- p1 = &pSorter->aIter[i1];
- p2 = &pSorter->aIter[i2];
+#ifdef SQLITE_DEBUG_SORTER_THREADS
+static void vdbeSorterWorkDebug(SortSubtask *pTask, const char *zEvent){
+ i64 t;
+ int iTask = (pTask - pTask->pSorter->aTask);
+ sqlite3OsCurrentTimeInt64(pTask->pSorter->db->pVfs, &t);
+ fprintf(stderr, "%lld:%d %s\n", t, iTask, zEvent);
+}
+static void vdbeSorterRewindDebug(const char *zEvent){
+ i64 t;
+ sqlite3OsCurrentTimeInt64(sqlite3_vfs_find(0), &t);
+ fprintf(stderr, "%lld:X %s\n", t, zEvent);
+}
+static void vdbeSorterPopulateDebug(
+ SortSubtask *pTask,
+ const char *zEvent
+){
+ i64 t;
+ int iTask = (pTask - pTask->pSorter->aTask);
+ sqlite3OsCurrentTimeInt64(pTask->pSorter->db->pVfs, &t);
+ fprintf(stderr, "%lld:bg%d %s\n", t, iTask, zEvent);
+}
+static void vdbeSorterBlockDebug(
+ SortSubtask *pTask,
+ int bBlocked,
+ const char *zEvent
+){
+ if( bBlocked ){
+ i64 t;
+ sqlite3OsCurrentTimeInt64(pTask->pSorter->db->pVfs, &t);
+ fprintf(stderr, "%lld:main %s\n", t, zEvent);
+ }
+}
+#else
+# define vdbeSorterWorkDebug(x,y)
+# define vdbeSorterRewindDebug(y)
+# define vdbeSorterPopulateDebug(x,y)
+# define vdbeSorterBlockDebug(x,y,z)
+#endif
- if( p1->pFile==0 ){
- iRes = i2;
- }else if( p2->pFile==0 ){
- iRes = i1;
- }else{
- int res;
- assert( pCsr->pSorter->pUnpacked!=0 ); /* allocated in vdbeSorterMerge() */
- vdbeSorterCompare(
- pCsr, 0, p1->aKey, p1->nKey, p2->aKey, p2->nKey, &res
- );
- if( res<=0 ){
- iRes = i1;
- }else{
- iRes = i2;
- }
+#if SQLITE_MAX_WORKER_THREADS>0
+/*
+** Join thread pTask->thread.
+*/
+static int vdbeSorterJoinThread(SortSubtask *pTask){
+ int rc = SQLITE_OK;
+ if( pTask->pThread ){
+#ifdef SQLITE_DEBUG_SORTER_THREADS
+ int bDone = pTask->bDone;
+#endif
+ void *pRet = SQLITE_INT_TO_PTR(SQLITE_ERROR);
+ vdbeSorterBlockDebug(pTask, !bDone, "enter");
+ (void)sqlite3ThreadJoin(pTask->pThread, &pRet);
+ vdbeSorterBlockDebug(pTask, !bDone, "exit");
+ rc = SQLITE_PTR_TO_INT(pRet);
+ assert( pTask->bDone==1 );
+ pTask->bDone = 0;
+ pTask->pThread = 0;
}
+ return rc;
+}
- pSorter->aTree[iOut] = iRes;
- return SQLITE_OK;
+/*
+** Launch a background thread to run xTask(pIn).
+*/
+static int vdbeSorterCreateThread(
+ SortSubtask *pTask, /* Thread will use this task object */
+ void *(*xTask)(void*), /* Routine to run in a separate thread */
+ void *pIn /* Argument passed into xTask() */
+){
+ assert( pTask->pThread==0 && pTask->bDone==0 );
+ return sqlite3ThreadCreate(&pTask->pThread, xTask, pIn);
}
/*
-** Initialize the temporary index cursor just opened as a sorter cursor.
+** Join all outstanding threads launched by SorterWrite() to create
+** level-0 PMAs.
*/
-SQLITE_PRIVATE int sqlite3VdbeSorterInit(sqlite3 *db, VdbeCursor *pCsr){
- int pgsz; /* Page size of main database */
- int mxCache; /* Cache size */
- VdbeSorter *pSorter; /* The new sorter */
- char *d; /* Dummy */
+static int vdbeSorterJoinAll(VdbeSorter *pSorter, int rcin){
+ int rc = rcin;
+ int i;
- assert( pCsr->pKeyInfo && pCsr->pBt==0 );
- pCsr->pSorter = pSorter = sqlite3DbMallocZero(db, sizeof(VdbeSorter));
- if( pSorter==0 ){
- return SQLITE_NOMEM;
+ /* This function is always called by the main user thread.
+ **
+ ** If this function is being called after SorterRewind() has been called,
+ ** it is possible that thread pSorter->aTask[pSorter->nTask-1].pThread
+ ** is currently attempt to join one of the other threads. To avoid a race
+ ** condition where this thread also attempts to join the same object, join
+ ** thread pSorter->aTask[pSorter->nTask-1].pThread first. */
+ for(i=pSorter->nTask-1; i>=0; i--){
+ SortSubtask *pTask = &pSorter->aTask[i];
+ int rc2 = vdbeSorterJoinThread(pTask);
+ if( rc==SQLITE_OK ) rc = rc2;
}
-
- pSorter->pUnpacked = sqlite3VdbeAllocUnpackedRecord(pCsr->pKeyInfo, 0, 0, &d);
- if( pSorter->pUnpacked==0 ) return SQLITE_NOMEM;
- assert( pSorter->pUnpacked==(UnpackedRecord *)d );
+ return rc;
+}
+#else
+# define vdbeSorterJoinAll(x,rcin) (rcin)
+# define vdbeSorterJoinThread(pTask) SQLITE_OK
+#endif
+
+/*
+** Allocate a new MergeEngine object capable of handling up to
+** nReader PmaReader inputs.
+**
+** nReader is automatically rounded up to the next power of two.
+** nReader may not exceed SORTER_MAX_MERGE_COUNT even after rounding up.
+*/
+static MergeEngine *vdbeMergeEngineNew(int nReader){
+ int N = 2; /* Smallest power of two >= nReader */
+ int nByte; /* Total bytes of space to allocate */
+ MergeEngine *pNew; /* Pointer to allocated object to return */
+
+ assert( nReader<=SORTER_MAX_MERGE_COUNT );
+
+ while( N<nReader ) N += N;
+ nByte = sizeof(MergeEngine) + N * (sizeof(int) + sizeof(PmaReader));
- if( !sqlite3TempInMemory(db) ){
- pgsz = sqlite3BtreeGetPageSize(db->aDb[0].pBt);
- pSorter->mnPmaSize = SORTER_MIN_WORKING * pgsz;
- mxCache = db->aDb[0].pSchema->cache_size;
- if( mxCache<SORTER_MIN_WORKING ) mxCache = SORTER_MIN_WORKING;
- pSorter->mxPmaSize = mxCache * pgsz;
+ pNew = sqlite3FaultSim(100) ? 0 : (MergeEngine*)sqlite3MallocZero(nByte);
+ if( pNew ){
+ pNew->nTree = N;
+ pNew->pTask = 0;
+ pNew->aReadr = (PmaReader*)&pNew[1];
+ pNew->aTree = (int*)&pNew->aReadr[N];
}
+ return pNew;
+}
- return SQLITE_OK;
+/*
+** Free the MergeEngine object passed as the only argument.
+*/
+static void vdbeMergeEngineFree(MergeEngine *pMerger){
+ int i;
+ if( pMerger ){
+ for(i=0; i<pMerger->nTree; i++){
+ vdbePmaReaderClear(&pMerger->aReadr[i]);
+ }
+ }
+ sqlite3_free(pMerger);
}
/*
-** Free the list of sorted records starting at pRecord.
+** Free all resources associated with the IncrMerger object indicated by
+** the first argument.
*/
-static void vdbeSorterRecordFree(sqlite3 *db, SorterRecord *pRecord){
- SorterRecord *p;
- SorterRecord *pNext;
- for(p=pRecord; p; p=pNext){
- pNext = p->pNext;
- sqlite3DbFree(db, p);
+static void vdbeIncrFree(IncrMerger *pIncr){
+ if( pIncr ){
+#if SQLITE_MAX_WORKER_THREADS>0
+ if( pIncr->bUseThread ){
+ vdbeSorterJoinThread(pIncr->pTask);
+ if( pIncr->aFile[0].pFd ) sqlite3OsCloseFree(pIncr->aFile[0].pFd);
+ if( pIncr->aFile[1].pFd ) sqlite3OsCloseFree(pIncr->aFile[1].pFd);
+ }
+#endif
+ vdbeMergeEngineFree(pIncr->pMerger);
+ sqlite3_free(pIncr);
}
}
@@ -75509,29 +77066,34 @@ static void vdbeSorterRecordFree(sqlite3 *db, SorterRecord *pRecord){
** Reset a sorting cursor back to its original empty state.
*/
SQLITE_PRIVATE void sqlite3VdbeSorterReset(sqlite3 *db, VdbeSorter *pSorter){
- if( pSorter->aIter ){
- int i;
- for(i=0; i<pSorter->nTree; i++){
- vdbeSorterIterZero(db, &pSorter->aIter[i]);
- }
- sqlite3DbFree(db, pSorter->aIter);
- pSorter->aIter = 0;
+ int i;
+ (void)vdbeSorterJoinAll(pSorter, SQLITE_OK);
+ assert( pSorter->bUseThreads || pSorter->pReader==0 );
+#if SQLITE_MAX_WORKER_THREADS>0
+ if( pSorter->pReader ){
+ vdbePmaReaderClear(pSorter->pReader);
+ sqlite3DbFree(db, pSorter->pReader);
+ pSorter->pReader = 0;
}
- if( pSorter->pTemp1 ){
- sqlite3OsCloseFree(pSorter->pTemp1);
- pSorter->pTemp1 = 0;
+#endif
+ vdbeMergeEngineFree(pSorter->pMerger);
+ pSorter->pMerger = 0;
+ for(i=0; i<pSorter->nTask; i++){
+ SortSubtask *pTask = &pSorter->aTask[i];
+ vdbeSortSubtaskCleanup(db, pTask);
+ }
+ if( pSorter->list.aMemory==0 ){
+ vdbeSorterRecordFree(0, pSorter->list.pList);
}
- vdbeSorterRecordFree(db, pSorter->pRecord);
- pSorter->pRecord = 0;
- pSorter->iWriteOff = 0;
- pSorter->iReadOff = 0;
- pSorter->nInMemory = 0;
- pSorter->nTree = 0;
- pSorter->nPMA = 0;
- pSorter->aTree = 0;
+ pSorter->list.pList = 0;
+ pSorter->list.szPMA = 0;
+ pSorter->bUsePMA = 0;
+ pSorter->iMemory = 0;
+ pSorter->mxKeysize = 0;
+ sqlite3DbFree(db, pSorter->pUnpacked);
+ pSorter->pUnpacked = 0;
}
-
/*
** Free any cursor components allocated by sqlite3VdbeSorterXXX routines.
*/
@@ -75539,54 +77101,110 @@ SQLITE_PRIVATE void sqlite3VdbeSorterClose(sqlite3 *db, VdbeCursor *pCsr){
VdbeSorter *pSorter = pCsr->pSorter;
if( pSorter ){
sqlite3VdbeSorterReset(db, pSorter);
- sqlite3DbFree(db, pSorter->pUnpacked);
+ sqlite3_free(pSorter->list.aMemory);
sqlite3DbFree(db, pSorter);
pCsr->pSorter = 0;
}
}
+#if SQLITE_MAX_MMAP_SIZE>0
+/*
+** The first argument is a file-handle open on a temporary file. The file
+** is guaranteed to be nByte bytes or smaller in size. This function
+** attempts to extend the file to nByte bytes in size and to ensure that
+** the VFS has memory mapped it.
+**
+** Whether or not the file does end up memory mapped of course depends on
+** the specific VFS implementation.
+*/
+static void vdbeSorterExtendFile(sqlite3 *db, sqlite3_file *pFd, i64 nByte){
+ if( nByte<=(i64)(db->nMaxSorterMmap) && pFd->pMethods->iVersion>=3 ){
+ int rc = sqlite3OsTruncate(pFd, nByte);
+ if( rc==SQLITE_OK ){
+ void *p = 0;
+ sqlite3OsFetch(pFd, 0, (int)nByte, &p);
+ sqlite3OsUnfetch(pFd, 0, p);
+ }
+ }
+}
+#else
+# define vdbeSorterExtendFile(x,y,z)
+#endif
+
/*
** Allocate space for a file-handle and open a temporary file. If successful,
-** set *ppFile to point to the malloc'd file-handle and return SQLITE_OK.
-** Otherwise, set *ppFile to 0 and return an SQLite error code.
+** set *ppFd to point to the malloc'd file-handle and return SQLITE_OK.
+** Otherwise, set *ppFd to 0 and return an SQLite error code.
*/
-static int vdbeSorterOpenTempFile(sqlite3 *db, sqlite3_file **ppFile){
- int dummy;
- return sqlite3OsOpenMalloc(db->pVfs, 0, ppFile,
+static int vdbeSorterOpenTempFile(
+ sqlite3 *db, /* Database handle doing sort */
+ i64 nExtend, /* Attempt to extend file to this size */
+ sqlite3_file **ppFd
+){
+ int rc;
+ rc = sqlite3OsOpenMalloc(db->pVfs, 0, ppFd,
SQLITE_OPEN_TEMP_JOURNAL |
SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE |
- SQLITE_OPEN_EXCLUSIVE | SQLITE_OPEN_DELETEONCLOSE, &dummy
+ SQLITE_OPEN_EXCLUSIVE | SQLITE_OPEN_DELETEONCLOSE, &rc
);
+ if( rc==SQLITE_OK ){
+ i64 max = SQLITE_MAX_MMAP_SIZE;
+ sqlite3OsFileControlHint(*ppFd, SQLITE_FCNTL_MMAP_SIZE, (void*)&max);
+ if( nExtend>0 ){
+ vdbeSorterExtendFile(db, *ppFd, nExtend);
+ }
+ }
+ return rc;
+}
+
+/*
+** If it has not already been allocated, allocate the UnpackedRecord
+** structure at pTask->pUnpacked. Return SQLITE_OK if successful (or
+** if no allocation was required), or SQLITE_NOMEM otherwise.
+*/
+static int vdbeSortAllocUnpacked(SortSubtask *pTask){
+ if( pTask->pUnpacked==0 ){
+ char *pFree;
+ pTask->pUnpacked = sqlite3VdbeAllocUnpackedRecord(
+ pTask->pSorter->pKeyInfo, 0, 0, &pFree
+ );
+ assert( pTask->pUnpacked==(UnpackedRecord*)pFree );
+ if( pFree==0 ) return SQLITE_NOMEM;
+ pTask->pUnpacked->nField = pTask->pSorter->pKeyInfo->nField;
+ pTask->pUnpacked->errCode = 0;
+ }
+ return SQLITE_OK;
}
+
/*
** Merge the two sorted lists p1 and p2 into a single list.
** Set *ppOut to the head of the new list.
*/
static void vdbeSorterMerge(
- const VdbeCursor *pCsr, /* For pKeyInfo */
+ SortSubtask *pTask, /* Calling thread context */
SorterRecord *p1, /* First list to merge */
SorterRecord *p2, /* Second list to merge */
SorterRecord **ppOut /* OUT: Head of merged list */
){
SorterRecord *pFinal = 0;
SorterRecord **pp = &pFinal;
- void *pVal2 = p2 ? p2->pVal : 0;
+ void *pVal2 = p2 ? SRVAL(p2) : 0;
while( p1 && p2 ){
int res;
- vdbeSorterCompare(pCsr, 0, p1->pVal, p1->nVal, pVal2, p2->nVal, &res);
+ res = vdbeSorterCompare(pTask, SRVAL(p1), p1->nVal, pVal2, p2->nVal);
if( res<=0 ){
*pp = p1;
- pp = &p1->pNext;
- p1 = p1->pNext;
+ pp = &p1->u.pNext;
+ p1 = p1->u.pNext;
pVal2 = 0;
}else{
*pp = p2;
- pp = &p2->pNext;
- p2 = p2->pNext;
+ pp = &p2->u.pNext;
+ p2 = p2->u.pNext;
if( p2==0 ) break;
- pVal2 = p2->pVal;
+ pVal2 = SRVAL(p2);
}
}
*pp = p1 ? p1 : p2;
@@ -75594,27 +77212,41 @@ static void vdbeSorterMerge(
}
/*
-** Sort the linked list of records headed at pCsr->pRecord. Return SQLITE_OK
-** if successful, or an SQLite error code (i.e. SQLITE_NOMEM) if an error
-** occurs.
+** Sort the linked list of records headed at pTask->pList. Return
+** SQLITE_OK if successful, or an SQLite error code (i.e. SQLITE_NOMEM) if
+** an error occurs.
*/
-static int vdbeSorterSort(const VdbeCursor *pCsr){
+static int vdbeSorterSort(SortSubtask *pTask, SorterList *pList){
int i;
SorterRecord **aSlot;
SorterRecord *p;
- VdbeSorter *pSorter = pCsr->pSorter;
+ int rc;
+
+ rc = vdbeSortAllocUnpacked(pTask);
+ if( rc!=SQLITE_OK ) return rc;
aSlot = (SorterRecord **)sqlite3MallocZero(64 * sizeof(SorterRecord *));
if( !aSlot ){
return SQLITE_NOMEM;
}
- p = pSorter->pRecord;
+ p = pList->pList;
while( p ){
- SorterRecord *pNext = p->pNext;
- p->pNext = 0;
+ SorterRecord *pNext;
+ if( pList->aMemory ){
+ if( (u8*)p==pList->aMemory ){
+ pNext = 0;
+ }else{
+ assert( p->u.iNext<sqlite3MallocSize(pList->aMemory) );
+ pNext = (SorterRecord*)&pList->aMemory[p->u.iNext];
+ }
+ }else{
+ pNext = p->u.pNext;
+ }
+
+ p->u.pNext = 0;
for(i=0; aSlot[i]; i++){
- vdbeSorterMerge(pCsr, p, aSlot[i], &p);
+ vdbeSorterMerge(pTask, p, aSlot[i], &p);
aSlot[i] = 0;
}
aSlot[i] = p;
@@ -75623,42 +77255,43 @@ static int vdbeSorterSort(const VdbeCursor *pCsr){
p = 0;
for(i=0; i<64; i++){
- vdbeSorterMerge(pCsr, p, aSlot[i], &p);
+ vdbeSorterMerge(pTask, p, aSlot[i], &p);
}
- pSorter->pRecord = p;
+ pList->pList = p;
sqlite3_free(aSlot);
- return SQLITE_OK;
+ assert( pTask->pUnpacked->errCode==SQLITE_OK
+ || pTask->pUnpacked->errCode==SQLITE_NOMEM
+ );
+ return pTask->pUnpacked->errCode;
}
/*
-** Initialize a file-writer object.
+** Initialize a PMA-writer object.
*/
-static void fileWriterInit(
- sqlite3 *db, /* Database (for malloc) */
- sqlite3_file *pFile, /* File to write to */
- FileWriter *p, /* Object to populate */
- i64 iStart /* Offset of pFile to begin writing at */
+static void vdbePmaWriterInit(
+ sqlite3_file *pFd, /* File handle to write to */
+ PmaWriter *p, /* Object to populate */
+ int nBuf, /* Buffer size */
+ i64 iStart /* Offset of pFd to begin writing at */
){
- int nBuf = sqlite3BtreeGetPageSize(db->aDb[0].pBt);
-
- memset(p, 0, sizeof(FileWriter));
- p->aBuffer = (u8 *)sqlite3DbMallocRaw(db, nBuf);
+ memset(p, 0, sizeof(PmaWriter));
+ p->aBuffer = (u8*)sqlite3Malloc(nBuf);
if( !p->aBuffer ){
p->eFWErr = SQLITE_NOMEM;
}else{
p->iBufEnd = p->iBufStart = (iStart % nBuf);
p->iWriteOff = iStart - p->iBufStart;
p->nBuffer = nBuf;
- p->pFile = pFile;
+ p->pFd = pFd;
}
}
/*
-** Write nData bytes of data to the file-write object. Return SQLITE_OK
+** Write nData bytes of data to the PMA. Return SQLITE_OK
** if successful, or an SQLite error code if an error occurs.
*/
-static void fileWriterWrite(FileWriter *p, u8 *pData, int nData){
+static void vdbePmaWriteBlob(PmaWriter *p, u8 *pData, int nData){
int nRem = nData;
while( nRem>0 && p->eFWErr==0 ){
int nCopy = nRem;
@@ -75669,7 +77302,7 @@ static void fileWriterWrite(FileWriter *p, u8 *pData, int nData){
memcpy(&p->aBuffer[p->iBufEnd], &pData[nData-nRem], nCopy);
p->iBufEnd += nCopy;
if( p->iBufEnd==p->nBuffer ){
- p->eFWErr = sqlite3OsWrite(p->pFile,
+ p->eFWErr = sqlite3OsWrite(p->pFd,
&p->aBuffer[p->iBufStart], p->iBufEnd - p->iBufStart,
p->iWriteOff + p->iBufStart
);
@@ -75683,43 +77316,44 @@ static void fileWriterWrite(FileWriter *p, u8 *pData, int nData){
}
/*
-** Flush any buffered data to disk and clean up the file-writer object.
-** The results of using the file-writer after this call are undefined.
+** Flush any buffered data to disk and clean up the PMA-writer object.
+** The results of using the PMA-writer after this call are undefined.
** Return SQLITE_OK if flushing the buffered data succeeds or is not
** required. Otherwise, return an SQLite error code.
**
** Before returning, set *piEof to the offset immediately following the
** last byte written to the file.
*/
-static int fileWriterFinish(sqlite3 *db, FileWriter *p, i64 *piEof){
+static int vdbePmaWriterFinish(PmaWriter *p, i64 *piEof){
int rc;
if( p->eFWErr==0 && ALWAYS(p->aBuffer) && p->iBufEnd>p->iBufStart ){
- p->eFWErr = sqlite3OsWrite(p->pFile,
+ p->eFWErr = sqlite3OsWrite(p->pFd,
&p->aBuffer[p->iBufStart], p->iBufEnd - p->iBufStart,
p->iWriteOff + p->iBufStart
);
}
*piEof = (p->iWriteOff + p->iBufEnd);
- sqlite3DbFree(db, p->aBuffer);
+ sqlite3_free(p->aBuffer);
rc = p->eFWErr;
- memset(p, 0, sizeof(FileWriter));
+ memset(p, 0, sizeof(PmaWriter));
return rc;
}
/*
-** Write value iVal encoded as a varint to the file-write object. Return
+** Write value iVal encoded as a varint to the PMA. Return
** SQLITE_OK if successful, or an SQLite error code if an error occurs.
*/
-static void fileWriterWriteVarint(FileWriter *p, u64 iVal){
+static void vdbePmaWriteVarint(PmaWriter *p, u64 iVal){
int nByte;
u8 aByte[10];
nByte = sqlite3PutVarint(aByte, iVal);
- fileWriterWrite(p, aByte, nByte);
+ vdbePmaWriteBlob(p, aByte, nByte);
}
/*
-** Write the current contents of the in-memory linked-list to a PMA. Return
-** SQLITE_OK if successful, or an SQLite error code otherwise.
+** Write the current contents of in-memory linked-list pList to a level-0
+** PMA in the temp file belonging to sub-task pTask. Return SQLITE_OK if
+** successful, or an SQLite error code otherwise.
**
** The format of a PMA is:
**
@@ -75730,76 +77364,246 @@ static void fileWriterWriteVarint(FileWriter *p, u64 iVal){
** Each record consists of a varint followed by a blob of data (the
** key). The varint is the number of bytes in the blob of data.
*/
-static int vdbeSorterListToPMA(sqlite3 *db, const VdbeCursor *pCsr){
+static int vdbeSorterListToPMA(SortSubtask *pTask, SorterList *pList){
+ sqlite3 *db = pTask->pSorter->db;
int rc = SQLITE_OK; /* Return code */
- VdbeSorter *pSorter = pCsr->pSorter;
- FileWriter writer;
+ PmaWriter writer; /* Object used to write to the file */
- memset(&writer, 0, sizeof(FileWriter));
+#ifdef SQLITE_DEBUG
+ /* Set iSz to the expected size of file pTask->file after writing the PMA.
+ ** This is used by an assert() statement at the end of this function. */
+ i64 iSz = pList->szPMA + sqlite3VarintLen(pList->szPMA) + pTask->file.iEof;
+#endif
- if( pSorter->nInMemory==0 ){
- assert( pSorter->pRecord==0 );
- return rc;
+ vdbeSorterWorkDebug(pTask, "enter");
+ memset(&writer, 0, sizeof(PmaWriter));
+ assert( pList->szPMA>0 );
+
+ /* If the first temporary PMA file has not been opened, open it now. */
+ if( pTask->file.pFd==0 ){
+ rc = vdbeSorterOpenTempFile(db, 0, &pTask->file.pFd);
+ assert( rc!=SQLITE_OK || pTask->file.pFd );
+ assert( pTask->file.iEof==0 );
+ assert( pTask->nPMA==0 );
}
- rc = vdbeSorterSort(pCsr);
+ /* Try to get the file to memory map */
+ if( rc==SQLITE_OK ){
+ vdbeSorterExtendFile(db, pTask->file.pFd, pTask->file.iEof+pList->szPMA+9);
+ }
- /* If the first temporary PMA file has not been opened, open it now. */
- if( rc==SQLITE_OK && pSorter->pTemp1==0 ){
- rc = vdbeSorterOpenTempFile(db, &pSorter->pTemp1);
- assert( rc!=SQLITE_OK || pSorter->pTemp1 );
- assert( pSorter->iWriteOff==0 );
- assert( pSorter->nPMA==0 );
+ /* Sort the list */
+ if( rc==SQLITE_OK ){
+ rc = vdbeSorterSort(pTask, pList);
}
if( rc==SQLITE_OK ){
SorterRecord *p;
SorterRecord *pNext = 0;
- fileWriterInit(db, pSorter->pTemp1, &writer, pSorter->iWriteOff);
- pSorter->nPMA++;
- fileWriterWriteVarint(&writer, pSorter->nInMemory);
- for(p=pSorter->pRecord; p; p=pNext){
- pNext = p->pNext;
- fileWriterWriteVarint(&writer, p->nVal);
- fileWriterWrite(&writer, p->pVal, p->nVal);
- sqlite3DbFree(db, p);
+ vdbePmaWriterInit(pTask->file.pFd, &writer, pTask->pSorter->pgsz,
+ pTask->file.iEof);
+ pTask->nPMA++;
+ vdbePmaWriteVarint(&writer, pList->szPMA);
+ for(p=pList->pList; p; p=pNext){
+ pNext = p->u.pNext;
+ vdbePmaWriteVarint(&writer, p->nVal);
+ vdbePmaWriteBlob(&writer, SRVAL(p), p->nVal);
+ if( pList->aMemory==0 ) sqlite3_free(p);
}
- pSorter->pRecord = p;
- rc = fileWriterFinish(db, &writer, &pSorter->iWriteOff);
+ pList->pList = p;
+ rc = vdbePmaWriterFinish(&writer, &pTask->file.iEof);
}
+ vdbeSorterWorkDebug(pTask, "exit");
+ assert( rc!=SQLITE_OK || pList->pList==0 );
+ assert( rc!=SQLITE_OK || pTask->file.iEof==iSz );
return rc;
}
/*
+** Advance the MergeEngine to its next entry.
+** Set *pbEof to true there is no next entry because
+** the MergeEngine has reached the end of all its inputs.
+**
+** Return SQLITE_OK if successful or an error code if an error occurs.
+*/
+static int vdbeMergeEngineStep(
+ MergeEngine *pMerger, /* The merge engine to advance to the next row */
+ int *pbEof /* Set TRUE at EOF. Set false for more content */
+){
+ int rc;
+ int iPrev = pMerger->aTree[1];/* Index of PmaReader to advance */
+ SortSubtask *pTask = pMerger->pTask;
+
+ /* Advance the current PmaReader */
+ rc = vdbePmaReaderNext(&pMerger->aReadr[iPrev]);
+
+ /* Update contents of aTree[] */
+ if( rc==SQLITE_OK ){
+ int i; /* Index of aTree[] to recalculate */
+ PmaReader *pReadr1; /* First PmaReader to compare */
+ PmaReader *pReadr2; /* Second PmaReader to compare */
+ u8 *pKey2; /* To pReadr2->aKey, or 0 if record cached */
+
+ /* Find the first two PmaReaders to compare. The one that was just
+ ** advanced (iPrev) and the one next to it in the array. */
+ pReadr1 = &pMerger->aReadr[(iPrev & 0xFFFE)];
+ pReadr2 = &pMerger->aReadr[(iPrev | 0x0001)];
+ pKey2 = pReadr2->aKey;
+
+ for(i=(pMerger->nTree+iPrev)/2; i>0; i=i/2){
+ /* Compare pReadr1 and pReadr2. Store the result in variable iRes. */
+ int iRes;
+ if( pReadr1->pFd==0 ){
+ iRes = +1;
+ }else if( pReadr2->pFd==0 ){
+ iRes = -1;
+ }else{
+ iRes = vdbeSorterCompare(pTask,
+ pReadr1->aKey, pReadr1->nKey, pKey2, pReadr2->nKey
+ );
+ }
+
+ /* If pReadr1 contained the smaller value, set aTree[i] to its index.
+ ** Then set pReadr2 to the next PmaReader to compare to pReadr1. In this
+ ** case there is no cache of pReadr2 in pTask->pUnpacked, so set
+ ** pKey2 to point to the record belonging to pReadr2.
+ **
+ ** Alternatively, if pReadr2 contains the smaller of the two values,
+ ** set aTree[i] to its index and update pReadr1. If vdbeSorterCompare()
+ ** was actually called above, then pTask->pUnpacked now contains
+ ** a value equivalent to pReadr2. So set pKey2 to NULL to prevent
+ ** vdbeSorterCompare() from decoding pReadr2 again.
+ **
+ ** If the two values were equal, then the value from the oldest
+ ** PMA should be considered smaller. The VdbeSorter.aReadr[] array
+ ** is sorted from oldest to newest, so pReadr1 contains older values
+ ** than pReadr2 iff (pReadr1<pReadr2). */
+ if( iRes<0 || (iRes==0 && pReadr1<pReadr2) ){
+ pMerger->aTree[i] = (int)(pReadr1 - pMerger->aReadr);
+ pReadr2 = &pMerger->aReadr[ pMerger->aTree[i ^ 0x0001] ];
+ pKey2 = pReadr2->aKey;
+ }else{
+ if( pReadr1->pFd ) pKey2 = 0;
+ pMerger->aTree[i] = (int)(pReadr2 - pMerger->aReadr);
+ pReadr1 = &pMerger->aReadr[ pMerger->aTree[i ^ 0x0001] ];
+ }
+ }
+ *pbEof = (pMerger->aReadr[pMerger->aTree[1]].pFd==0);
+ }
+
+ return (rc==SQLITE_OK ? pTask->pUnpacked->errCode : rc);
+}
+
+#if SQLITE_MAX_WORKER_THREADS>0
+/*
+** The main routine for background threads that write level-0 PMAs.
+*/
+static void *vdbeSorterFlushThread(void *pCtx){
+ SortSubtask *pTask = (SortSubtask*)pCtx;
+ int rc; /* Return code */
+ assert( pTask->bDone==0 );
+ rc = vdbeSorterListToPMA(pTask, &pTask->list);
+ pTask->bDone = 1;
+ return SQLITE_INT_TO_PTR(rc);
+}
+#endif /* SQLITE_MAX_WORKER_THREADS>0 */
+
+/*
+** Flush the current contents of VdbeSorter.list to a new PMA, possibly
+** using a background thread.
+*/
+static int vdbeSorterFlushPMA(VdbeSorter *pSorter){
+#if SQLITE_MAX_WORKER_THREADS==0
+ pSorter->bUsePMA = 1;
+ return vdbeSorterListToPMA(&pSorter->aTask[0], &pSorter->list);
+#else
+ int rc = SQLITE_OK;
+ int i;
+ SortSubtask *pTask = 0; /* Thread context used to create new PMA */
+ int nWorker = (pSorter->nTask-1);
+
+ /* Set the flag to indicate that at least one PMA has been written.
+ ** Or will be, anyhow. */
+ pSorter->bUsePMA = 1;
+
+ /* Select a sub-task to sort and flush the current list of in-memory
+ ** records to disk. If the sorter is running in multi-threaded mode,
+ ** round-robin between the first (pSorter->nTask-1) tasks. Except, if
+ ** the background thread from a sub-tasks previous turn is still running,
+ ** skip it. If the first (pSorter->nTask-1) sub-tasks are all still busy,
+ ** fall back to using the final sub-task. The first (pSorter->nTask-1)
+ ** sub-tasks are prefered as they use background threads - the final
+ ** sub-task uses the main thread. */
+ for(i=0; i<nWorker; i++){
+ int iTest = (pSorter->iPrev + i + 1) % nWorker;
+ pTask = &pSorter->aTask[iTest];
+ if( pTask->bDone ){
+ rc = vdbeSorterJoinThread(pTask);
+ }
+ if( rc!=SQLITE_OK || pTask->pThread==0 ) break;
+ }
+
+ if( rc==SQLITE_OK ){
+ if( i==nWorker ){
+ /* Use the foreground thread for this operation */
+ rc = vdbeSorterListToPMA(&pSorter->aTask[nWorker], &pSorter->list);
+ }else{
+ /* Launch a background thread for this operation */
+ u8 *aMem = pTask->list.aMemory;
+ void *pCtx = (void*)pTask;
+
+ assert( pTask->pThread==0 && pTask->bDone==0 );
+ assert( pTask->list.pList==0 );
+ assert( pTask->list.aMemory==0 || pSorter->list.aMemory!=0 );
+
+ pSorter->iPrev = (u8)(pTask - pSorter->aTask);
+ pTask->list = pSorter->list;
+ pSorter->list.pList = 0;
+ pSorter->list.szPMA = 0;
+ if( aMem ){
+ pSorter->list.aMemory = aMem;
+ pSorter->nMemory = sqlite3MallocSize(aMem);
+ }else if( pSorter->list.aMemory ){
+ pSorter->list.aMemory = sqlite3Malloc(pSorter->nMemory);
+ if( !pSorter->list.aMemory ) return SQLITE_NOMEM;
+ }
+
+ rc = vdbeSorterCreateThread(pTask, vdbeSorterFlushThread, pCtx);
+ }
+ }
+
+ return rc;
+#endif /* SQLITE_MAX_WORKER_THREADS!=0 */
+}
+
+/*
** Add a record to the sorter.
*/
SQLITE_PRIVATE int sqlite3VdbeSorterWrite(
- sqlite3 *db, /* Database handle */
- const VdbeCursor *pCsr, /* Sorter cursor */
+ const VdbeCursor *pCsr, /* Sorter cursor */
Mem *pVal /* Memory cell containing record */
){
VdbeSorter *pSorter = pCsr->pSorter;
int rc = SQLITE_OK; /* Return Code */
SorterRecord *pNew; /* New list element */
- assert( pSorter );
- pSorter->nInMemory += sqlite3VarintLen(pVal->n) + pVal->n;
+ int bFlush; /* True to flush contents of memory to PMA */
+ int nReq; /* Bytes of memory required */
+ int nPMA; /* Bytes of PMA space required */
- pNew = (SorterRecord *)sqlite3DbMallocRaw(db, pVal->n + sizeof(SorterRecord));
- if( pNew==0 ){
- rc = SQLITE_NOMEM;
- }else{
- pNew->pVal = (void *)&pNew[1];
- memcpy(pNew->pVal, pVal->z, pVal->n);
- pNew->nVal = pVal->n;
- pNew->pNext = pSorter->pRecord;
- pSorter->pRecord = pNew;
- }
+ assert( pSorter );
- /* See if the contents of the sorter should now be written out. They
- ** are written out when either of the following are true:
+ /* Figure out whether or not the current contents of memory should be
+ ** flushed to a PMA before continuing. If so, do so.
+ **
+ ** If using the single large allocation mode (pSorter->aMemory!=0), then
+ ** flush the contents of memory to a new PMA if (a) at least one value is
+ ** already in memory and (b) the new value will not fit in memory.
+ **
+ ** Or, if using separate allocations for each record, flush the contents
+ ** of memory to a PMA if either of the following are true:
**
** * The total memory allocated for the in-memory list is greater
** than (page-size * cache-size), or
@@ -75807,161 +77611,778 @@ SQLITE_PRIVATE int sqlite3VdbeSorterWrite(
** * The total memory allocated for the in-memory list is greater
** than (page-size * 10) and sqlite3HeapNearlyFull() returns true.
*/
- if( rc==SQLITE_OK && pSorter->mxPmaSize>0 && (
- (pSorter->nInMemory>pSorter->mxPmaSize)
- || (pSorter->nInMemory>pSorter->mnPmaSize && sqlite3HeapNearlyFull())
- )){
-#ifdef SQLITE_DEBUG
- i64 nExpect = pSorter->iWriteOff
- + sqlite3VarintLen(pSorter->nInMemory)
- + pSorter->nInMemory;
+ nReq = pVal->n + sizeof(SorterRecord);
+ nPMA = pVal->n + sqlite3VarintLen(pVal->n);
+ if( pSorter->mxPmaSize ){
+ if( pSorter->list.aMemory ){
+ bFlush = pSorter->iMemory && (pSorter->iMemory+nReq) > pSorter->mxPmaSize;
+ }else{
+ bFlush = (
+ (pSorter->list.szPMA > pSorter->mxPmaSize)
+ || (pSorter->list.szPMA > pSorter->mnPmaSize && sqlite3HeapNearlyFull())
+ );
+ }
+ if( bFlush ){
+ rc = vdbeSorterFlushPMA(pSorter);
+ pSorter->list.szPMA = 0;
+ pSorter->iMemory = 0;
+ assert( rc!=SQLITE_OK || pSorter->list.pList==0 );
+ }
+ }
+
+ pSorter->list.szPMA += nPMA;
+ if( nPMA>pSorter->mxKeysize ){
+ pSorter->mxKeysize = nPMA;
+ }
+
+ if( pSorter->list.aMemory ){
+ int nMin = pSorter->iMemory + nReq;
+
+ if( nMin>pSorter->nMemory ){
+ u8 *aNew;
+ int nNew = pSorter->nMemory * 2;
+ while( nNew < nMin ) nNew = nNew*2;
+ if( nNew > pSorter->mxPmaSize ) nNew = pSorter->mxPmaSize;
+ if( nNew < nMin ) nNew = nMin;
+
+ aNew = sqlite3Realloc(pSorter->list.aMemory, nNew);
+ if( !aNew ) return SQLITE_NOMEM;
+ pSorter->list.pList = (SorterRecord*)(
+ aNew + ((u8*)pSorter->list.pList - pSorter->list.aMemory)
+ );
+ pSorter->list.aMemory = aNew;
+ pSorter->nMemory = nNew;
+ }
+
+ pNew = (SorterRecord*)&pSorter->list.aMemory[pSorter->iMemory];
+ pSorter->iMemory += ROUND8(nReq);
+ pNew->u.iNext = (int)((u8*)(pSorter->list.pList) - pSorter->list.aMemory);
+ }else{
+ pNew = (SorterRecord *)sqlite3Malloc(nReq);
+ if( pNew==0 ){
+ return SQLITE_NOMEM;
+ }
+ pNew->u.pNext = pSorter->list.pList;
+ }
+
+ memcpy(SRVAL(pNew), pVal->z, pVal->n);
+ pNew->nVal = pVal->n;
+ pSorter->list.pList = pNew;
+
+ return rc;
+}
+
+/*
+** Read keys from pIncr->pMerger and populate pIncr->aFile[1]. The format
+** of the data stored in aFile[1] is the same as that used by regular PMAs,
+** except that the number-of-bytes varint is omitted from the start.
+*/
+static int vdbeIncrPopulate(IncrMerger *pIncr){
+ int rc = SQLITE_OK;
+ int rc2;
+ i64 iStart = pIncr->iStartOff;
+ SorterFile *pOut = &pIncr->aFile[1];
+ SortSubtask *pTask = pIncr->pTask;
+ MergeEngine *pMerger = pIncr->pMerger;
+ PmaWriter writer;
+ assert( pIncr->bEof==0 );
+
+ vdbeSorterPopulateDebug(pTask, "enter");
+
+ vdbePmaWriterInit(pOut->pFd, &writer, pTask->pSorter->pgsz, iStart);
+ while( rc==SQLITE_OK ){
+ int dummy;
+ PmaReader *pReader = &pMerger->aReadr[ pMerger->aTree[1] ];
+ int nKey = pReader->nKey;
+ i64 iEof = writer.iWriteOff + writer.iBufEnd;
+
+ /* Check if the output file is full or if the input has been exhausted.
+ ** In either case exit the loop. */
+ if( pReader->pFd==0 ) break;
+ if( (iEof + nKey + sqlite3VarintLen(nKey))>(iStart + pIncr->mxSz) ) break;
+
+ /* Write the next key to the output. */
+ vdbePmaWriteVarint(&writer, nKey);
+ vdbePmaWriteBlob(&writer, pReader->aKey, nKey);
+ assert( pIncr->pMerger->pTask==pTask );
+ rc = vdbeMergeEngineStep(pIncr->pMerger, &dummy);
+ }
+
+ rc2 = vdbePmaWriterFinish(&writer, &pOut->iEof);
+ if( rc==SQLITE_OK ) rc = rc2;
+ vdbeSorterPopulateDebug(pTask, "exit");
+ return rc;
+}
+
+#if SQLITE_MAX_WORKER_THREADS>0
+/*
+** The main routine for background threads that populate aFile[1] of
+** multi-threaded IncrMerger objects.
+*/
+static void *vdbeIncrPopulateThread(void *pCtx){
+ IncrMerger *pIncr = (IncrMerger*)pCtx;
+ void *pRet = SQLITE_INT_TO_PTR( vdbeIncrPopulate(pIncr) );
+ pIncr->pTask->bDone = 1;
+ return pRet;
+}
+
+/*
+** Launch a background thread to populate aFile[1] of pIncr.
+*/
+static int vdbeIncrBgPopulate(IncrMerger *pIncr){
+ void *p = (void*)pIncr;
+ assert( pIncr->bUseThread );
+ return vdbeSorterCreateThread(pIncr->pTask, vdbeIncrPopulateThread, p);
+}
+#endif
+
+/*
+** This function is called when the PmaReader corresponding to pIncr has
+** finished reading the contents of aFile[0]. Its purpose is to "refill"
+** aFile[0] such that the PmaReader should start rereading it from the
+** beginning.
+**
+** For single-threaded objects, this is accomplished by literally reading
+** keys from pIncr->pMerger and repopulating aFile[0].
+**
+** For multi-threaded objects, all that is required is to wait until the
+** background thread is finished (if it is not already) and then swap
+** aFile[0] and aFile[1] in place. If the contents of pMerger have not
+** been exhausted, this function also launches a new background thread
+** to populate the new aFile[1].
+**
+** SQLITE_OK is returned on success, or an SQLite error code otherwise.
+*/
+static int vdbeIncrSwap(IncrMerger *pIncr){
+ int rc = SQLITE_OK;
+
+#if SQLITE_MAX_WORKER_THREADS>0
+ if( pIncr->bUseThread ){
+ rc = vdbeSorterJoinThread(pIncr->pTask);
+
+ if( rc==SQLITE_OK ){
+ SorterFile f0 = pIncr->aFile[0];
+ pIncr->aFile[0] = pIncr->aFile[1];
+ pIncr->aFile[1] = f0;
+ }
+
+ if( rc==SQLITE_OK ){
+ if( pIncr->aFile[0].iEof==pIncr->iStartOff ){
+ pIncr->bEof = 1;
+ }else{
+ rc = vdbeIncrBgPopulate(pIncr);
+ }
+ }
+ }else
#endif
- rc = vdbeSorterListToPMA(db, pCsr);
- pSorter->nInMemory = 0;
- assert( rc!=SQLITE_OK || (nExpect==pSorter->iWriteOff) );
+ {
+ rc = vdbeIncrPopulate(pIncr);
+ pIncr->aFile[0] = pIncr->aFile[1];
+ if( pIncr->aFile[0].iEof==pIncr->iStartOff ){
+ pIncr->bEof = 1;
+ }
}
return rc;
}
/*
-** Helper function for sqlite3VdbeSorterRewind().
+** Allocate and return a new IncrMerger object to read data from pMerger.
+**
+** If an OOM condition is encountered, return NULL. In this case free the
+** pMerger argument before returning.
*/
-static int vdbeSorterInitMerge(
- sqlite3 *db, /* Database handle */
- const VdbeCursor *pCsr, /* Cursor handle for this sorter */
- i64 *pnByte /* Sum of bytes in all opened PMAs */
+static int vdbeIncrMergerNew(
+ SortSubtask *pTask, /* The thread that will be using the new IncrMerger */
+ MergeEngine *pMerger, /* The MergeEngine that the IncrMerger will control */
+ IncrMerger **ppOut /* Write the new IncrMerger here */
){
- VdbeSorter *pSorter = pCsr->pSorter;
- int rc = SQLITE_OK; /* Return code */
- int i; /* Used to iterator through aIter[] */
- i64 nByte = 0; /* Total bytes in all opened PMAs */
+ int rc = SQLITE_OK;
+ IncrMerger *pIncr = *ppOut = (IncrMerger*)
+ (sqlite3FaultSim(100) ? 0 : sqlite3MallocZero(sizeof(*pIncr)));
+ if( pIncr ){
+ pIncr->pMerger = pMerger;
+ pIncr->pTask = pTask;
+ pIncr->mxSz = MAX(pTask->pSorter->mxKeysize+9,pTask->pSorter->mxPmaSize/2);
+ pTask->file2.iEof += pIncr->mxSz;
+ }else{
+ vdbeMergeEngineFree(pMerger);
+ rc = SQLITE_NOMEM;
+ }
+ return rc;
+}
+
+#if SQLITE_MAX_WORKER_THREADS>0
+/*
+** Set the "use-threads" flag on object pIncr.
+*/
+static void vdbeIncrMergerSetThreads(IncrMerger *pIncr){
+ pIncr->bUseThread = 1;
+ pIncr->pTask->file2.iEof -= pIncr->mxSz;
+}
+#endif /* SQLITE_MAX_WORKER_THREADS>0 */
- /* Initialize the iterators. */
- for(i=0; i<SORTER_MAX_MERGE_COUNT; i++){
- VdbeSorterIter *pIter = &pSorter->aIter[i];
- rc = vdbeSorterIterInit(db, pSorter, pSorter->iReadOff, pIter, &nByte);
- pSorter->iReadOff = pIter->iEof;
- assert( rc!=SQLITE_OK || pSorter->iReadOff<=pSorter->iWriteOff );
- if( rc!=SQLITE_OK || pSorter->iReadOff>=pSorter->iWriteOff ) break;
+
+
+/*
+** Recompute pMerger->aTree[iOut] by comparing the next keys on the
+** two PmaReaders that feed that entry. Neither of the PmaReaders
+** are advanced. This routine merely does the comparison.
+*/
+static void vdbeMergeEngineCompare(
+ MergeEngine *pMerger, /* Merge engine containing PmaReaders to compare */
+ int iOut /* Store the result in pMerger->aTree[iOut] */
+){
+ int i1;
+ int i2;
+ int iRes;
+ PmaReader *p1;
+ PmaReader *p2;
+
+ assert( iOut<pMerger->nTree && iOut>0 );
+
+ if( iOut>=(pMerger->nTree/2) ){
+ i1 = (iOut - pMerger->nTree/2) * 2;
+ i2 = i1 + 1;
+ }else{
+ i1 = pMerger->aTree[iOut*2];
+ i2 = pMerger->aTree[iOut*2+1];
}
- /* Initialize the aTree[] array. */
- for(i=pSorter->nTree-1; rc==SQLITE_OK && i>0; i--){
- rc = vdbeSorterDoCompare(pCsr, i);
+ p1 = &pMerger->aReadr[i1];
+ p2 = &pMerger->aReadr[i2];
+
+ if( p1->pFd==0 ){
+ iRes = i2;
+ }else if( p2->pFd==0 ){
+ iRes = i1;
+ }else{
+ int res;
+ assert( pMerger->pTask->pUnpacked!=0 ); /* from vdbeSortSubtaskMain() */
+ res = vdbeSorterCompare(
+ pMerger->pTask, p1->aKey, p1->nKey, p2->aKey, p2->nKey
+ );
+ if( res<=0 ){
+ iRes = i1;
+ }else{
+ iRes = i2;
+ }
}
- *pnByte = nByte;
- return rc;
+ pMerger->aTree[iOut] = iRes;
}
/*
-** Once the sorter has been populated, this function is called to prepare
-** for iterating through its contents in sorted order.
+** Allowed values for the eMode parameter to vdbeMergeEngineInit()
+** and vdbePmaReaderIncrMergeInit().
+**
+** Only INCRINIT_NORMAL is valid in single-threaded builds (when
+** SQLITE_MAX_WORKER_THREADS==0). The other values are only used
+** when there exists one or more separate worker threads.
*/
-SQLITE_PRIVATE int sqlite3VdbeSorterRewind(sqlite3 *db, const VdbeCursor *pCsr, int *pbEof){
- VdbeSorter *pSorter = pCsr->pSorter;
- int rc; /* Return code */
- sqlite3_file *pTemp2 = 0; /* Second temp file to use */
- i64 iWrite2 = 0; /* Write offset for pTemp2 */
- int nIter; /* Number of iterators used */
- int nByte; /* Bytes of space required for aIter/aTree */
- int N = 2; /* Power of 2 >= nIter */
+#define INCRINIT_NORMAL 0
+#define INCRINIT_TASK 1
+#define INCRINIT_ROOT 2
- assert( pSorter );
+/* Forward reference.
+** The vdbeIncrMergeInit() and vdbePmaReaderIncrMergeInit() routines call each
+** other (when building a merge tree).
+*/
+static int vdbePmaReaderIncrMergeInit(PmaReader *pReadr, int eMode);
- /* If no data has been written to disk, then do not do so now. Instead,
- ** sort the VdbeSorter.pRecord list. The vdbe layer will read data directly
- ** from the in-memory list. */
- if( pSorter->nPMA==0 ){
- *pbEof = !pSorter->pRecord;
- assert( pSorter->aTree==0 );
- return vdbeSorterSort(pCsr);
+/*
+** Initialize the MergeEngine object passed as the second argument. Once this
+** function returns, the first key of merged data may be read from the
+** MergeEngine object in the usual fashion.
+**
+** If argument eMode is INCRINIT_ROOT, then it is assumed that any IncrMerge
+** objects attached to the PmaReader objects that the merger reads from have
+** already been populated, but that they have not yet populated aFile[0] and
+** set the PmaReader objects up to read from it. In this case all that is
+** required is to call vdbePmaReaderNext() on each PmaReader to point it at
+** its first key.
+**
+** Otherwise, if eMode is any value other than INCRINIT_ROOT, then use
+** vdbePmaReaderIncrMergeInit() to initialize each PmaReader that feeds data
+** to pMerger.
+**
+** SQLITE_OK is returned if successful, or an SQLite error code otherwise.
+*/
+static int vdbeMergeEngineInit(
+ SortSubtask *pTask, /* Thread that will run pMerger */
+ MergeEngine *pMerger, /* MergeEngine to initialize */
+ int eMode /* One of the INCRINIT_XXX constants */
+){
+ int rc = SQLITE_OK; /* Return code */
+ int i; /* For looping over PmaReader objects */
+ int nTree = pMerger->nTree;
+
+ /* eMode is always INCRINIT_NORMAL in single-threaded mode */
+ assert( SQLITE_MAX_WORKER_THREADS>0 || eMode==INCRINIT_NORMAL );
+
+ /* Verify that the MergeEngine is assigned to a single thread */
+ assert( pMerger->pTask==0 );
+ pMerger->pTask = pTask;
+
+ for(i=0; i<nTree; i++){
+ if( SQLITE_MAX_WORKER_THREADS>0 && eMode==INCRINIT_ROOT ){
+ /* PmaReaders should be normally initialized in order, as if they are
+ ** reading from the same temp file this makes for more linear file IO.
+ ** However, in the INCRINIT_ROOT case, if PmaReader aReadr[nTask-1] is
+ ** in use it will block the vdbePmaReaderNext() call while it uses
+ ** the main thread to fill its buffer. So calling PmaReaderNext()
+ ** on this PmaReader before any of the multi-threaded PmaReaders takes
+ ** better advantage of multi-processor hardware. */
+ rc = vdbePmaReaderNext(&pMerger->aReadr[nTree-i-1]);
+ }else{
+ rc = vdbePmaReaderIncrMergeInit(&pMerger->aReadr[i], INCRINIT_NORMAL);
+ }
+ if( rc!=SQLITE_OK ) return rc;
}
- /* Write the current in-memory list to a PMA. */
- rc = vdbeSorterListToPMA(db, pCsr);
- if( rc!=SQLITE_OK ) return rc;
+ for(i=pMerger->nTree-1; i>0; i--){
+ vdbeMergeEngineCompare(pMerger, i);
+ }
+ return pTask->pUnpacked->errCode;
+}
- /* Allocate space for aIter[] and aTree[]. */
- nIter = pSorter->nPMA;
- if( nIter>SORTER_MAX_MERGE_COUNT ) nIter = SORTER_MAX_MERGE_COUNT;
- assert( nIter>0 );
- while( N<nIter ) N += N;
- nByte = N * (sizeof(int) + sizeof(VdbeSorterIter));
- pSorter->aIter = (VdbeSorterIter *)sqlite3DbMallocZero(db, nByte);
- if( !pSorter->aIter ) return SQLITE_NOMEM;
- pSorter->aTree = (int *)&pSorter->aIter[N];
- pSorter->nTree = N;
+/*
+** Initialize the IncrMerge field of a PmaReader.
+**
+** If the PmaReader passed as the first argument is not an incremental-reader
+** (if pReadr->pIncr==0), then this function is a no-op. Otherwise, it serves
+** to open and/or initialize the temp file related fields of the IncrMerge
+** object at (pReadr->pIncr).
+**
+** If argument eMode is set to INCRINIT_NORMAL, then all PmaReaders
+** in the sub-tree headed by pReadr are also initialized. Data is then loaded
+** into the buffers belonging to pReadr and it is set to
+** point to the first key in its range.
+**
+** If argument eMode is set to INCRINIT_TASK, then pReadr is guaranteed
+** to be a multi-threaded PmaReader and this function is being called in a
+** background thread. In this case all PmaReaders in the sub-tree are
+** initialized as for INCRINIT_NORMAL and the aFile[1] buffer belonging to
+** pReadr is populated. However, pReadr itself is not set up to point
+** to its first key. A call to vdbePmaReaderNext() is still required to do
+** that.
+**
+** The reason this function does not call vdbePmaReaderNext() immediately
+** in the INCRINIT_TASK case is that vdbePmaReaderNext() assumes that it has
+** to block on thread (pTask->thread) before accessing aFile[1]. But, since
+** this entire function is being run by thread (pTask->thread), that will
+** lead to the current background thread attempting to join itself.
+**
+** Finally, if argument eMode is set to INCRINIT_ROOT, it may be assumed
+** that pReadr->pIncr is a multi-threaded IncrMerge objects, and that all
+** child-trees have already been initialized using IncrInit(INCRINIT_TASK).
+** In this case vdbePmaReaderNext() is called on all child PmaReaders and
+** the current PmaReader set to point to the first key in its range.
+**
+** SQLITE_OK is returned if successful, or an SQLite error code otherwise.
+*/
+static int vdbePmaReaderIncrMergeInit(PmaReader *pReadr, int eMode){
+ int rc = SQLITE_OK;
+ IncrMerger *pIncr = pReadr->pIncr;
- do {
- int iNew; /* Index of new, merged, PMA */
+ /* eMode is always INCRINIT_NORMAL in single-threaded mode */
+ assert( SQLITE_MAX_WORKER_THREADS>0 || eMode==INCRINIT_NORMAL );
+
+ if( pIncr ){
+ SortSubtask *pTask = pIncr->pTask;
+ sqlite3 *db = pTask->pSorter->db;
+
+ rc = vdbeMergeEngineInit(pTask, pIncr->pMerger, eMode);
+
+ /* Set up the required files for pIncr. A multi-theaded IncrMerge object
+ ** requires two temp files to itself, whereas a single-threaded object
+ ** only requires a region of pTask->file2. */
+ if( rc==SQLITE_OK ){
+ int mxSz = pIncr->mxSz;
+#if SQLITE_MAX_WORKER_THREADS>0
+ if( pIncr->bUseThread ){
+ rc = vdbeSorterOpenTempFile(db, mxSz, &pIncr->aFile[0].pFd);
+ if( rc==SQLITE_OK ){
+ rc = vdbeSorterOpenTempFile(db, mxSz, &pIncr->aFile[1].pFd);
+ }
+ }else
+#endif
+ /*if( !pIncr->bUseThread )*/{
+ if( pTask->file2.pFd==0 ){
+ assert( pTask->file2.iEof>0 );
+ rc = vdbeSorterOpenTempFile(db, pTask->file2.iEof, &pTask->file2.pFd);
+ pTask->file2.iEof = 0;
+ }
+ if( rc==SQLITE_OK ){
+ pIncr->aFile[1].pFd = pTask->file2.pFd;
+ pIncr->iStartOff = pTask->file2.iEof;
+ pTask->file2.iEof += mxSz;
+ }
+ }
+ }
- for(iNew=0;
- rc==SQLITE_OK && iNew*SORTER_MAX_MERGE_COUNT<pSorter->nPMA;
- iNew++
+#if SQLITE_MAX_WORKER_THREADS>0
+ if( rc==SQLITE_OK && pIncr->bUseThread ){
+ /* Use the current thread to populate aFile[1], even though this
+ ** PmaReader is multi-threaded. The reason being that this function
+ ** is already running in background thread pIncr->pTask->thread. */
+ assert( eMode==INCRINIT_ROOT || eMode==INCRINIT_TASK );
+ rc = vdbeIncrPopulate(pIncr);
+ }
+#endif
+
+ if( rc==SQLITE_OK
+ && (SQLITE_MAX_WORKER_THREADS==0 || eMode!=INCRINIT_TASK)
){
- int rc2; /* Return code from fileWriterFinish() */
- FileWriter writer; /* Object used to write to disk */
- i64 nWrite; /* Number of bytes in new PMA */
+ rc = vdbePmaReaderNext(pReadr);
+ }
+ }
+ return rc;
+}
- memset(&writer, 0, sizeof(FileWriter));
+#if SQLITE_MAX_WORKER_THREADS>0
+/*
+** The main routine for vdbePmaReaderIncrMergeInit() operations run in
+** background threads.
+*/
+static void *vdbePmaReaderBgInit(void *pCtx){
+ PmaReader *pReader = (PmaReader*)pCtx;
+ void *pRet = SQLITE_INT_TO_PTR(
+ vdbePmaReaderIncrMergeInit(pReader,INCRINIT_TASK)
+ );
+ pReader->pIncr->pTask->bDone = 1;
+ return pRet;
+}
- /* If there are SORTER_MAX_MERGE_COUNT or less PMAs in file pTemp1,
- ** initialize an iterator for each of them and break out of the loop.
- ** These iterators will be incrementally merged as the VDBE layer calls
- ** sqlite3VdbeSorterNext().
- **
- ** Otherwise, if pTemp1 contains more than SORTER_MAX_MERGE_COUNT PMAs,
- ** initialize interators for SORTER_MAX_MERGE_COUNT of them. These PMAs
- ** are merged into a single PMA that is written to file pTemp2.
- */
- rc = vdbeSorterInitMerge(db, pCsr, &nWrite);
- assert( rc!=SQLITE_OK || pSorter->aIter[ pSorter->aTree[1] ].pFile );
- if( rc!=SQLITE_OK || pSorter->nPMA<=SORTER_MAX_MERGE_COUNT ){
- break;
+/*
+** Use a background thread to invoke vdbePmaReaderIncrMergeInit(INCRINIT_TASK)
+** on the PmaReader object passed as the first argument.
+**
+** This call will initialize the various fields of the pReadr->pIncr
+** structure and, if it is a multi-threaded IncrMerger, launch a
+** background thread to populate aFile[1].
+*/
+static int vdbePmaReaderBgIncrInit(PmaReader *pReadr){
+ void *pCtx = (void*)pReadr;
+ return vdbeSorterCreateThread(pReadr->pIncr->pTask, vdbePmaReaderBgInit, pCtx);
+}
+#endif
+
+/*
+** Allocate a new MergeEngine object to merge the contents of nPMA level-0
+** PMAs from pTask->file. If no error occurs, set *ppOut to point to
+** the new object and return SQLITE_OK. Or, if an error does occur, set *ppOut
+** to NULL and return an SQLite error code.
+**
+** When this function is called, *piOffset is set to the offset of the
+** first PMA to read from pTask->file. Assuming no error occurs, it is
+** set to the offset immediately following the last byte of the last
+** PMA before returning. If an error does occur, then the final value of
+** *piOffset is undefined.
+*/
+static int vdbeMergeEngineLevel0(
+ SortSubtask *pTask, /* Sorter task to read from */
+ int nPMA, /* Number of PMAs to read */
+ i64 *piOffset, /* IN/OUT: Readr offset in pTask->file */
+ MergeEngine **ppOut /* OUT: New merge-engine */
+){
+ MergeEngine *pNew; /* Merge engine to return */
+ i64 iOff = *piOffset;
+ int i;
+ int rc = SQLITE_OK;
+
+ *ppOut = pNew = vdbeMergeEngineNew(nPMA);
+ if( pNew==0 ) rc = SQLITE_NOMEM;
+
+ for(i=0; i<nPMA && rc==SQLITE_OK; i++){
+ i64 nDummy;
+ PmaReader *pReadr = &pNew->aReadr[i];
+ rc = vdbePmaReaderInit(pTask, &pTask->file, iOff, pReadr, &nDummy);
+ iOff = pReadr->iEof;
+ }
+
+ if( rc!=SQLITE_OK ){
+ vdbeMergeEngineFree(pNew);
+ *ppOut = 0;
+ }
+ *piOffset = iOff;
+ return rc;
+}
+
+/*
+** Return the depth of a tree comprising nPMA PMAs, assuming a fanout of
+** SORTER_MAX_MERGE_COUNT. The returned value does not include leaf nodes.
+**
+** i.e.
+**
+** nPMA<=16 -> TreeDepth() == 0
+** nPMA<=256 -> TreeDepth() == 1
+** nPMA<=65536 -> TreeDepth() == 2
+*/
+static int vdbeSorterTreeDepth(int nPMA){
+ int nDepth = 0;
+ i64 nDiv = SORTER_MAX_MERGE_COUNT;
+ while( nDiv < (i64)nPMA ){
+ nDiv = nDiv * SORTER_MAX_MERGE_COUNT;
+ nDepth++;
+ }
+ return nDepth;
+}
+
+/*
+** pRoot is the root of an incremental merge-tree with depth nDepth (according
+** to vdbeSorterTreeDepth()). pLeaf is the iSeq'th leaf to be added to the
+** tree, counting from zero. This function adds pLeaf to the tree.
+**
+** If successful, SQLITE_OK is returned. If an error occurs, an SQLite error
+** code is returned and pLeaf is freed.
+*/
+static int vdbeSorterAddToTree(
+ SortSubtask *pTask, /* Task context */
+ int nDepth, /* Depth of tree according to TreeDepth() */
+ int iSeq, /* Sequence number of leaf within tree */
+ MergeEngine *pRoot, /* Root of tree */
+ MergeEngine *pLeaf /* Leaf to add to tree */
+){
+ int rc = SQLITE_OK;
+ int nDiv = 1;
+ int i;
+ MergeEngine *p = pRoot;
+ IncrMerger *pIncr;
+
+ rc = vdbeIncrMergerNew(pTask, pLeaf, &pIncr);
+
+ for(i=1; i<nDepth; i++){
+ nDiv = nDiv * SORTER_MAX_MERGE_COUNT;
+ }
+
+ for(i=1; i<nDepth && rc==SQLITE_OK; i++){
+ int iIter = (iSeq / nDiv) % SORTER_MAX_MERGE_COUNT;
+ PmaReader *pReadr = &p->aReadr[iIter];
+
+ if( pReadr->pIncr==0 ){
+ MergeEngine *pNew = vdbeMergeEngineNew(SORTER_MAX_MERGE_COUNT);
+ if( pNew==0 ){
+ rc = SQLITE_NOMEM;
+ }else{
+ rc = vdbeIncrMergerNew(pTask, pNew, &pReadr->pIncr);
}
+ }
+ if( rc==SQLITE_OK ){
+ p = pReadr->pIncr->pMerger;
+ nDiv = nDiv / SORTER_MAX_MERGE_COUNT;
+ }
+ }
+
+ if( rc==SQLITE_OK ){
+ p->aReadr[iSeq % SORTER_MAX_MERGE_COUNT].pIncr = pIncr;
+ }else{
+ vdbeIncrFree(pIncr);
+ }
+ return rc;
+}
+
+/*
+** This function is called as part of a SorterRewind() operation on a sorter
+** that has already written two or more level-0 PMAs to one or more temp
+** files. It builds a tree of MergeEngine/IncrMerger/PmaReader objects that
+** can be used to incrementally merge all PMAs on disk.
+**
+** If successful, SQLITE_OK is returned and *ppOut set to point to the
+** MergeEngine object at the root of the tree before returning. Or, if an
+** error occurs, an SQLite error code is returned and the final value
+** of *ppOut is undefined.
+*/
+static int vdbeSorterMergeTreeBuild(
+ VdbeSorter *pSorter, /* The VDBE cursor that implements the sort */
+ MergeEngine **ppOut /* Write the MergeEngine here */
+){
+ MergeEngine *pMain = 0;
+ int rc = SQLITE_OK;
+ int iTask;
+
+#if SQLITE_MAX_WORKER_THREADS>0
+ /* If the sorter uses more than one task, then create the top-level
+ ** MergeEngine here. This MergeEngine will read data from exactly
+ ** one PmaReader per sub-task. */
+ assert( pSorter->bUseThreads || pSorter->nTask==1 );
+ if( pSorter->nTask>1 ){
+ pMain = vdbeMergeEngineNew(pSorter->nTask);
+ if( pMain==0 ) rc = SQLITE_NOMEM;
+ }
+#endif
- /* Open the second temp file, if it is not already open. */
- if( pTemp2==0 ){
- assert( iWrite2==0 );
- rc = vdbeSorterOpenTempFile(db, &pTemp2);
+ for(iTask=0; rc==SQLITE_OK && iTask<pSorter->nTask; iTask++){
+ SortSubtask *pTask = &pSorter->aTask[iTask];
+ assert( pTask->nPMA>0 || SQLITE_MAX_WORKER_THREADS>0 );
+ if( SQLITE_MAX_WORKER_THREADS==0 || pTask->nPMA ){
+ MergeEngine *pRoot = 0; /* Root node of tree for this task */
+ int nDepth = vdbeSorterTreeDepth(pTask->nPMA);
+ i64 iReadOff = 0;
+
+ if( pTask->nPMA<=SORTER_MAX_MERGE_COUNT ){
+ rc = vdbeMergeEngineLevel0(pTask, pTask->nPMA, &iReadOff, &pRoot);
+ }else{
+ int i;
+ int iSeq = 0;
+ pRoot = vdbeMergeEngineNew(SORTER_MAX_MERGE_COUNT);
+ if( pRoot==0 ) rc = SQLITE_NOMEM;
+ for(i=0; i<pTask->nPMA && rc==SQLITE_OK; i += SORTER_MAX_MERGE_COUNT){
+ MergeEngine *pMerger = 0; /* New level-0 PMA merger */
+ int nReader; /* Number of level-0 PMAs to merge */
+
+ nReader = MIN(pTask->nPMA - i, SORTER_MAX_MERGE_COUNT);
+ rc = vdbeMergeEngineLevel0(pTask, nReader, &iReadOff, &pMerger);
+ if( rc==SQLITE_OK ){
+ rc = vdbeSorterAddToTree(pTask, nDepth, iSeq++, pRoot, pMerger);
+ }
+ }
}
if( rc==SQLITE_OK ){
- int bEof = 0;
- fileWriterInit(db, pTemp2, &writer, iWrite2);
- fileWriterWriteVarint(&writer, nWrite);
- while( rc==SQLITE_OK && bEof==0 ){
- VdbeSorterIter *pIter = &pSorter->aIter[ pSorter->aTree[1] ];
- assert( pIter->pFile );
+#if SQLITE_MAX_WORKER_THREADS>0
+ if( pMain!=0 ){
+ rc = vdbeIncrMergerNew(pTask, pRoot, &pMain->aReadr[iTask].pIncr);
+ }else
+#endif
+ {
+ assert( pMain==0 );
+ pMain = pRoot;
+ }
+ }else{
+ vdbeMergeEngineFree(pRoot);
+ }
+ }
+ }
+
+ if( rc!=SQLITE_OK ){
+ vdbeMergeEngineFree(pMain);
+ pMain = 0;
+ }
+ *ppOut = pMain;
+ return rc;
+}
- fileWriterWriteVarint(&writer, pIter->nKey);
- fileWriterWrite(&writer, pIter->aKey, pIter->nKey);
- rc = sqlite3VdbeSorterNext(db, pCsr, &bEof);
+/*
+** This function is called as part of an sqlite3VdbeSorterRewind() operation
+** on a sorter that has written two or more PMAs to temporary files. It sets
+** up either VdbeSorter.pMerger (for single threaded sorters) or pReader
+** (for multi-threaded sorters) so that it can be used to iterate through
+** all records stored in the sorter.
+**
+** SQLITE_OK is returned if successful, or an SQLite error code otherwise.
+*/
+static int vdbeSorterSetupMerge(VdbeSorter *pSorter){
+ int rc; /* Return code */
+ SortSubtask *pTask0 = &pSorter->aTask[0];
+ MergeEngine *pMain = 0;
+#if SQLITE_MAX_WORKER_THREADS
+ sqlite3 *db = pTask0->pSorter->db;
+#endif
+
+ rc = vdbeSorterMergeTreeBuild(pSorter, &pMain);
+ if( rc==SQLITE_OK ){
+#if SQLITE_MAX_WORKER_THREADS
+ assert( pSorter->bUseThreads==0 || pSorter->nTask>1 );
+ if( pSorter->bUseThreads ){
+ int iTask;
+ PmaReader *pReadr = 0;
+ SortSubtask *pLast = &pSorter->aTask[pSorter->nTask-1];
+ rc = vdbeSortAllocUnpacked(pLast);
+ if( rc==SQLITE_OK ){
+ pReadr = (PmaReader*)sqlite3DbMallocZero(db, sizeof(PmaReader));
+ pSorter->pReader = pReadr;
+ if( pReadr==0 ) rc = SQLITE_NOMEM;
+ }
+ if( rc==SQLITE_OK ){
+ rc = vdbeIncrMergerNew(pLast, pMain, &pReadr->pIncr);
+ if( rc==SQLITE_OK ){
+ vdbeIncrMergerSetThreads(pReadr->pIncr);
+ for(iTask=0; iTask<(pSorter->nTask-1); iTask++){
+ IncrMerger *pIncr;
+ if( (pIncr = pMain->aReadr[iTask].pIncr) ){
+ vdbeIncrMergerSetThreads(pIncr);
+ assert( pIncr->pTask!=pLast );
+ }
+ }
+ for(iTask=0; rc==SQLITE_OK && iTask<pSorter->nTask; iTask++){
+ PmaReader *p = &pMain->aReadr[iTask];
+ assert( p->pIncr==0 || p->pIncr->pTask==&pSorter->aTask[iTask] );
+ if( p->pIncr ){
+ if( iTask==pSorter->nTask-1 ){
+ rc = vdbePmaReaderIncrMergeInit(p, INCRINIT_TASK);
+ }else{
+ rc = vdbePmaReaderBgIncrInit(p);
+ }
+ }
+ }
}
- rc2 = fileWriterFinish(db, &writer, &iWrite2);
- if( rc==SQLITE_OK ) rc = rc2;
+ pMain = 0;
+ }
+ if( rc==SQLITE_OK ){
+ rc = vdbePmaReaderIncrMergeInit(pReadr, INCRINIT_ROOT);
}
+ }else
+#endif
+ {
+ rc = vdbeMergeEngineInit(pTask0, pMain, INCRINIT_NORMAL);
+ pSorter->pMerger = pMain;
+ pMain = 0;
}
+ }
- if( pSorter->nPMA<=SORTER_MAX_MERGE_COUNT ){
- break;
+ if( rc!=SQLITE_OK ){
+ vdbeMergeEngineFree(pMain);
+ }
+ return rc;
+}
+
+
+/*
+** Once the sorter has been populated by calls to sqlite3VdbeSorterWrite,
+** this function is called to prepare for iterating through the records
+** in sorted order.
+*/
+SQLITE_PRIVATE int sqlite3VdbeSorterRewind(const VdbeCursor *pCsr, int *pbEof){
+ VdbeSorter *pSorter = pCsr->pSorter;
+ int rc = SQLITE_OK; /* Return code */
+
+ assert( pSorter );
+
+ /* If no data has been written to disk, then do not do so now. Instead,
+ ** sort the VdbeSorter.pRecord list. The vdbe layer will read data directly
+ ** from the in-memory list. */
+ if( pSorter->bUsePMA==0 ){
+ if( pSorter->list.pList ){
+ *pbEof = 0;
+ rc = vdbeSorterSort(&pSorter->aTask[0], &pSorter->list);
}else{
- sqlite3_file *pTmp = pSorter->pTemp1;
- pSorter->nPMA = iNew;
- pSorter->pTemp1 = pTemp2;
- pTemp2 = pTmp;
- pSorter->iWriteOff = iWrite2;
- pSorter->iReadOff = 0;
- iWrite2 = 0;
+ *pbEof = 1;
}
- }while( rc==SQLITE_OK );
+ return rc;
+ }
+
+ /* Write the current in-memory list to a PMA. When the VdbeSorterWrite()
+ ** function flushes the contents of memory to disk, it immediately always
+ ** creates a new list consisting of a single key immediately afterwards.
+ ** So the list is never empty at this point. */
+ assert( pSorter->list.pList );
+ rc = vdbeSorterFlushPMA(pSorter);
- if( pTemp2 ){
- sqlite3OsCloseFree(pTemp2);
+ /* Join all threads */
+ rc = vdbeSorterJoinAll(pSorter, rc);
+
+ vdbeSorterRewindDebug("rewind");
+
+ /* Assuming no errors have occurred, set up a merger structure to
+ ** incrementally read and merge all remaining PMAs. */
+ assert( pSorter->pReader==0 );
+ if( rc==SQLITE_OK ){
+ rc = vdbeSorterSetupMerge(pSorter);
+ *pbEof = 0;
}
- *pbEof = (pSorter->aIter[pSorter->aTree[1]].pFile==0);
+
+ vdbeSorterRewindDebug("rewinddone");
return rc;
}
@@ -75972,63 +78393,27 @@ SQLITE_PRIVATE int sqlite3VdbeSorterNext(sqlite3 *db, const VdbeCursor *pCsr, in
VdbeSorter *pSorter = pCsr->pSorter;
int rc; /* Return code */
- if( pSorter->aTree ){
- int iPrev = pSorter->aTree[1];/* Index of iterator to advance */
- rc = vdbeSorterIterNext(db, &pSorter->aIter[iPrev]);
- if( rc==SQLITE_OK ){
- int i; /* Index of aTree[] to recalculate */
- VdbeSorterIter *pIter1; /* First iterator to compare */
- VdbeSorterIter *pIter2; /* Second iterator to compare */
- u8 *pKey2; /* To pIter2->aKey, or 0 if record cached */
-
- /* Find the first two iterators to compare. The one that was just
- ** advanced (iPrev) and the one next to it in the array. */
- pIter1 = &pSorter->aIter[(iPrev & 0xFFFE)];
- pIter2 = &pSorter->aIter[(iPrev | 0x0001)];
- pKey2 = pIter2->aKey;
-
- for(i=(pSorter->nTree+iPrev)/2; i>0; i=i/2){
- /* Compare pIter1 and pIter2. Store the result in variable iRes. */
- int iRes;
- if( pIter1->pFile==0 ){
- iRes = +1;
- }else if( pIter2->pFile==0 ){
- iRes = -1;
- }else{
- vdbeSorterCompare(pCsr, 0,
- pIter1->aKey, pIter1->nKey, pKey2, pIter2->nKey, &iRes
- );
- }
-
- /* If pIter1 contained the smaller value, set aTree[i] to its index.
- ** Then set pIter2 to the next iterator to compare to pIter1. In this
- ** case there is no cache of pIter2 in pSorter->pUnpacked, so set
- ** pKey2 to point to the record belonging to pIter2.
- **
- ** Alternatively, if pIter2 contains the smaller of the two values,
- ** set aTree[i] to its index and update pIter1. If vdbeSorterCompare()
- ** was actually called above, then pSorter->pUnpacked now contains
- ** a value equivalent to pIter2. So set pKey2 to NULL to prevent
- ** vdbeSorterCompare() from decoding pIter2 again. */
- if( iRes<=0 ){
- pSorter->aTree[i] = (int)(pIter1 - pSorter->aIter);
- pIter2 = &pSorter->aIter[ pSorter->aTree[i ^ 0x0001] ];
- pKey2 = pIter2->aKey;
- }else{
- if( pIter1->pFile ) pKey2 = 0;
- pSorter->aTree[i] = (int)(pIter2 - pSorter->aIter);
- pIter1 = &pSorter->aIter[ pSorter->aTree[i ^ 0x0001] ];
- }
-
- }
- *pbEof = (pSorter->aIter[pSorter->aTree[1]].pFile==0);
+ assert( pSorter->bUsePMA || (pSorter->pReader==0 && pSorter->pMerger==0) );
+ if( pSorter->bUsePMA ){
+ assert( pSorter->pReader==0 || pSorter->pMerger==0 );
+ assert( pSorter->bUseThreads==0 || pSorter->pReader );
+ assert( pSorter->bUseThreads==1 || pSorter->pMerger );
+#if SQLITE_MAX_WORKER_THREADS>0
+ if( pSorter->bUseThreads ){
+ rc = vdbePmaReaderNext(pSorter->pReader);
+ *pbEof = (pSorter->pReader->pFd==0);
+ }else
+#endif
+ /*if( !pSorter->bUseThreads )*/ {
+ assert( pSorter->pMerger->pTask==(&pSorter->aTask[0]) );
+ rc = vdbeMergeEngineStep(pSorter->pMerger, pbEof);
}
}else{
- SorterRecord *pFree = pSorter->pRecord;
- pSorter->pRecord = pFree->pNext;
- pFree->pNext = 0;
- vdbeSorterRecordFree(db, pFree);
- *pbEof = !pSorter->pRecord;
+ SorterRecord *pFree = pSorter->list.pList;
+ pSorter->list.pList = pFree->u.pNext;
+ pFree->u.pNext = 0;
+ if( pSorter->list.aMemory==0 ) vdbeSorterRecordFree(db, pFree);
+ *pbEof = !pSorter->list.pList;
rc = SQLITE_OK;
}
return rc;
@@ -76043,14 +78428,21 @@ static void *vdbeSorterRowkey(
int *pnKey /* OUT: Size of current key in bytes */
){
void *pKey;
- if( pSorter->aTree ){
- VdbeSorterIter *pIter;
- pIter = &pSorter->aIter[ pSorter->aTree[1] ];
- *pnKey = pIter->nKey;
- pKey = pIter->aKey;
+ if( pSorter->bUsePMA ){
+ PmaReader *pReader;
+#if SQLITE_MAX_WORKER_THREADS>0
+ if( pSorter->bUseThreads ){
+ pReader = pSorter->pReader;
+ }else
+#endif
+ /*if( !pSorter->bUseThreads )*/{
+ pReader = &pSorter->pMerger->aReadr[pSorter->pMerger->aTree[1]];
+ }
+ *pnKey = pReader->nKey;
+ pKey = pReader->aKey;
}else{
- *pnKey = pSorter->pRecord->nVal;
- pKey = pSorter->pRecord->pVal;
+ *pnKey = pSorter->list.pList->nVal;
+ pKey = SRVAL(pSorter->list.pList);
}
return pKey;
}
@@ -76063,7 +78455,7 @@ SQLITE_PRIVATE int sqlite3VdbeSorterRowkey(const VdbeCursor *pCsr, Mem *pOut){
void *pKey; int nKey; /* Sorter key to copy into pOut */
pKey = vdbeSorterRowkey(pSorter, &nKey);
- if( sqlite3VdbeMemGrow(pOut, nKey, 0) ){
+ if( sqlite3VdbeMemClearAndResize(pOut, nKey) ){
return SQLITE_NOMEM;
}
pOut->n = nKey;
@@ -76078,22 +78470,48 @@ SQLITE_PRIVATE int sqlite3VdbeSorterRowkey(const VdbeCursor *pCsr, Mem *pOut){
** passed as the first argument currently points to. For the purposes of
** the comparison, ignore the rowid field at the end of each record.
**
+** If the sorter cursor key contains any NULL values, consider it to be
+** less than pVal. Even if pVal also contains NULL values.
+**
** If an error occurs, return an SQLite error code (i.e. SQLITE_NOMEM).
** Otherwise, set *pRes to a negative, zero or positive value if the
** key in pVal is smaller than, equal to or larger than the current sorter
** key.
+**
+** This routine forms the core of the OP_SorterCompare opcode, which in
+** turn is used to verify uniqueness when constructing a UNIQUE INDEX.
*/
SQLITE_PRIVATE int sqlite3VdbeSorterCompare(
const VdbeCursor *pCsr, /* Sorter cursor */
Mem *pVal, /* Value to compare to current sorter key */
- int nKeyCol, /* Only compare this many fields */
+ int nKeyCol, /* Compare this many columns */
int *pRes /* OUT: Result of comparison */
){
VdbeSorter *pSorter = pCsr->pSorter;
+ UnpackedRecord *r2 = pSorter->pUnpacked;
+ KeyInfo *pKeyInfo = pCsr->pKeyInfo;
+ int i;
void *pKey; int nKey; /* Sorter key to compare pVal with */
+ if( r2==0 ){
+ char *p;
+ r2 = pSorter->pUnpacked = sqlite3VdbeAllocUnpackedRecord(pKeyInfo,0,0,&p);
+ assert( pSorter->pUnpacked==(UnpackedRecord*)p );
+ if( r2==0 ) return SQLITE_NOMEM;
+ r2->nField = nKeyCol;
+ }
+ assert( r2->nField==nKeyCol );
+
pKey = vdbeSorterRowkey(pSorter, &nKey);
- vdbeSorterCompare(pCsr, nKeyCol, pVal->z, pVal->n, pKey, nKey, pRes);
+ sqlite3VdbeRecordUnpack(pKeyInfo, nKey, pKey, r2);
+ for(i=0; i<nKeyCol; i++){
+ if( r2->aMem[i].flags & MEM_Null ){
+ *pRes = -1;
+ return SQLITE_OK;
+ }
+ }
+
+ *pRes = sqlite3VdbeRecordCompare(pVal->n, pVal->z, r2);
return SQLITE_OK;
}
@@ -76384,7 +78802,7 @@ typedef struct FileChunk FileChunk;
**
** The size chosen is a little less than a power of two. That way,
** the FileChunk object will have a size that almost exactly fills
-** a power-of-two allocation. This mimimizes wasted space in power-of-two
+** a power-of-two allocation. This minimizes wasted space in power-of-two
** memory allocators.
*/
#define JOURNAL_CHUNKSIZE ((int)(1024-sizeof(FileChunk*)))
@@ -76634,7 +79052,7 @@ SQLITE_PRIVATE int sqlite3MemJournalSize(void){
/*
** Walk an expression tree. Invoke the callback once for each node
-** of the expression, while decending. (In other words, the callback
+** of the expression, while descending. (In other words, the callback
** is invoked before visiting children.)
**
** The return value from the callback should be one of the WRC_*
@@ -77091,6 +79509,10 @@ static int lookupName(
if( pMatch ){
pExpr->iTable = pMatch->iCursor;
pExpr->pTab = pMatch->pTab;
+ assert( (pMatch->jointype & JT_RIGHT)==0 ); /* RIGHT JOIN not (yet) supported */
+ if( (pMatch->jointype & JT_LEFT)!=0 ){
+ ExprSetProperty(pExpr, EP_CanBeNull);
+ }
pSchema = pExpr->pTab->pSchema;
}
} /* if( pSrcList ) */
@@ -77490,9 +79912,7 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
pExpr->iTable = pDef->zName[0]=='u' ? 62 : 938;
}
}
- }
#ifndef SQLITE_OMIT_AUTHORIZATION
- if( pDef ){
auth = sqlite3AuthCheck(pParse, SQLITE_FUNCTION, 0, pDef->zName, 0);
if( auth!=SQLITE_OK ){
if( auth==SQLITE_DENY ){
@@ -77503,9 +79923,9 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
pExpr->op = TK_NULL;
return WRC_Prune;
}
+#endif
if( pDef->funcFlags & SQLITE_FUNC_CONSTANT ) ExprSetProperty(pExpr,EP_Constant);
}
-#endif
if( is_agg && (pNC->ncFlags & NC_AllowAgg)==0 ){
sqlite3ErrorMsg(pParse, "misuse of aggregate function %.*s()", nId,zId);
pNC->nErr++;
@@ -77528,7 +79948,13 @@ static int resolveExprStep(Walker *pWalker, Expr *pExpr){
pExpr->op2++;
pNC2 = pNC2->pNext;
}
- if( pNC2 ) pNC2->ncFlags |= NC_HasAgg;
+ assert( pDef!=0 );
+ if( pNC2 ){
+ assert( SQLITE_FUNC_MINMAX==NC_MinMaxAgg );
+ testcase( (pDef->funcFlags & SQLITE_FUNC_MINMAX)!=0 );
+ pNC2->ncFlags |= NC_HasAgg | (pDef->funcFlags & SQLITE_FUNC_MINMAX);
+
+ }
pNC->ncFlags |= NC_AllowAgg;
}
/* FIX ME: Compute pExpr->affinity based on the expected return
@@ -77889,7 +80315,7 @@ static int resolveOrderGroupBy(
}
/*
-** Resolve names in the SELECT statement p and all of its descendents.
+** Resolve names in the SELECT statement p and all of its descendants.
*/
static int resolveSelectStep(Walker *pWalker, Select *p){
NameContext *pOuterNC; /* Context that contains this SELECT */
@@ -77993,7 +80419,8 @@ static int resolveSelectStep(Walker *pWalker, Select *p){
assert( (p->selFlags & SF_Aggregate)==0 );
pGroupBy = p->pGroupBy;
if( pGroupBy || (sNC.ncFlags & NC_HasAgg)!=0 ){
- p->selFlags |= SF_Aggregate;
+ assert( NC_MinMaxAgg==SF_MinMaxAgg );
+ p->selFlags |= SF_Aggregate | (sNC.ncFlags&NC_MinMaxAgg);
}else{
sNC.ncFlags &= ~NC_AllowAgg;
}
@@ -78121,7 +80548,7 @@ SQLITE_PRIVATE int sqlite3ResolveExprNames(
NameContext *pNC, /* Namespace to resolve expressions in. */
Expr *pExpr /* The expression to be analyzed. */
){
- u8 savedHasAgg;
+ u16 savedHasAgg;
Walker w;
if( pExpr==0 ) return 0;
@@ -78134,8 +80561,8 @@ SQLITE_PRIVATE int sqlite3ResolveExprNames(
pParse->nHeight += pExpr->nHeight;
}
#endif
- savedHasAgg = pNC->ncFlags & NC_HasAgg;
- pNC->ncFlags &= ~NC_HasAgg;
+ savedHasAgg = pNC->ncFlags & (NC_HasAgg|NC_MinMaxAgg);
+ pNC->ncFlags &= ~(NC_HasAgg|NC_MinMaxAgg);
memset(&w, 0, sizeof(w));
w.xExprCallback = resolveExprStep;
w.xSelectCallback = resolveSelectStep;
@@ -78150,9 +80577,8 @@ SQLITE_PRIVATE int sqlite3ResolveExprNames(
}
if( pNC->ncFlags & NC_HasAgg ){
ExprSetProperty(pExpr, EP_Agg);
- }else if( savedHasAgg ){
- pNC->ncFlags |= NC_HasAgg;
}
+ pNC->ncFlags |= savedHasAgg;
return ExprHasProperty(pExpr, EP_Error);
}
@@ -78252,7 +80678,7 @@ SQLITE_PRIVATE void sqlite3ResolveSelfReference(
** affinity of that column is returned. Otherwise, 0x00 is returned,
** indicating no affinity for the expression.
**
-** i.e. the WHERE clause expresssions in the following statements all
+** i.e. the WHERE clause expressions in the following statements all
** have an affinity:
**
** CREATE TABLE t1(a);
@@ -78731,7 +81157,7 @@ SQLITE_PRIVATE void sqlite3ExprAttachSubtrees(
}
/*
-** Allocate a Expr node which joins as many as two subtrees.
+** Allocate an Expr node which joins as many as two subtrees.
**
** One or both of the subtrees can be NULL. Return a pointer to the new
** Expr node. Or, if an OOM error occurs, set pParse->db->mallocFailed,
@@ -78841,7 +81267,7 @@ SQLITE_PRIVATE Expr *sqlite3ExprFunction(Parse *pParse, ExprList *pList, Token *
**
** Wildcards of the form ":aaa", "@aaa", or "$aaa" are assigned the same number
** as the previous instance of the same wildcard. Or if this is the first
-** instance of the wildcard, the next sequenial variable number is
+** instance of the wildcard, the next sequential variable number is
** assigned.
*/
SQLITE_PRIVATE void sqlite3ExprAssignVarNumber(Parse *pParse, Expr *pExpr){
@@ -78976,7 +81402,7 @@ static int exprStructSize(Expr *p){
** During expression analysis, extra information is computed and moved into
** later parts of teh Expr object and that extra information might get chopped
** off if the expression is reduced. Note also that it does not work to
-** make a EXPRDUP_REDUCE copy of a reduced expression. It is only legal
+** make an EXPRDUP_REDUCE copy of a reduced expression. It is only legal
** to reduce a pristine expression tree from the parser. The implementation
** of dupedExprStructSize() contain multiple assert() statements that attempt
** to enforce this constraint.
@@ -79045,7 +81471,7 @@ static int dupedExprSize(Expr *p, int flags){
** is not NULL then *pzBuffer is assumed to point to a buffer large enough
** to store the copy of expression p, the copies of p->u.zToken
** (if applicable), and the copies of the p->pLeft and p->pRight expressions,
-** if any. Before returning, *pzBuffer is set to the first byte passed the
+** if any. Before returning, *pzBuffer is set to the first byte past the
** portion of the buffer copied into by this function.
*/
static Expr *exprDup(sqlite3 *db, Expr *p, int flags, u8 **pzBuffer){
@@ -79299,6 +81725,7 @@ SQLITE_PRIVATE Select *sqlite3SelectDup(sqlite3 *db, Select *p, int flags){
pNew->addrOpenEphm[1] = -1;
pNew->nSelectRow = p->nSelectRow;
pNew->pWith = withDup(db, p->pWith);
+ sqlite3SelectSetName(pNew, p->zSelName);
return pNew;
}
#else
@@ -79441,32 +81868,40 @@ SQLITE_PRIVATE void sqlite3ExprListDelete(sqlite3 *db, ExprList *pList){
/*
** These routines are Walker callbacks. Walker.u.pi is a pointer
** to an integer. These routines are checking an expression to see
-** if it is a constant. Set *Walker.u.pi to 0 if the expression is
+** if it is a constant. Set *Walker.u.i to 0 if the expression is
** not constant.
**
** These callback routines are used to implement the following:
**
-** sqlite3ExprIsConstant()
-** sqlite3ExprIsConstantNotJoin()
-** sqlite3ExprIsConstantOrFunction()
+** sqlite3ExprIsConstant() pWalker->u.i==1
+** sqlite3ExprIsConstantNotJoin() pWalker->u.i==2
+** sqlite3ExprIsConstantOrFunction() pWalker->u.i==3 or 4
**
+** The sqlite3ExprIsConstantOrFunction() is used for evaluating expressions
+** in a CREATE TABLE statement. The Walker.u.i value is 4 when parsing
+** an existing schema and 3 when processing a new statement. A bound
+** parameter raises an error for new statements, but is silently converted
+** to NULL for existing schemas. This allows sqlite_master tables that
+** contain a bound parameter because they were generated by older versions
+** of SQLite to be parsed by newer versions of SQLite without raising a
+** malformed schema error.
*/
static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){
- /* If pWalker->u.i is 3 then any term of the expression that comes from
+ /* If pWalker->u.i is 2 then any term of the expression that comes from
** the ON or USING clauses of a join disqualifies the expression
** from being considered constant. */
- if( pWalker->u.i==3 && ExprHasProperty(pExpr, EP_FromJoin) ){
+ if( pWalker->u.i==2 && ExprHasProperty(pExpr, EP_FromJoin) ){
pWalker->u.i = 0;
return WRC_Abort;
}
switch( pExpr->op ){
/* Consider functions to be constant if all their arguments are constant
- ** and either pWalker->u.i==2 or the function as the SQLITE_FUNC_CONST
+ ** and either pWalker->u.i==3 or 4 or the function as the SQLITE_FUNC_CONST
** flag. */
case TK_FUNCTION:
- if( pWalker->u.i==2 || ExprHasProperty(pExpr,EP_Constant) ){
+ if( pWalker->u.i>=3 || ExprHasProperty(pExpr,EP_Constant) ){
return WRC_Continue;
}
/* Fall through */
@@ -79480,6 +81915,19 @@ static int exprNodeIsConstant(Walker *pWalker, Expr *pExpr){
testcase( pExpr->op==TK_AGG_COLUMN );
pWalker->u.i = 0;
return WRC_Abort;
+ case TK_VARIABLE:
+ if( pWalker->u.i==4 ){
+ /* Silently convert bound parameters that appear inside of CREATE
+ ** statements into a NULL when parsing the CREATE statement text out
+ ** of the sqlite_master table */
+ pExpr->op = TK_NULL;
+ }else if( pWalker->u.i==3 ){
+ /* A bound parameter in a CREATE statement that originates from
+ ** sqlite3_prepare() causes an error */
+ pWalker->u.i = 0;
+ return WRC_Abort;
+ }
+ /* Fall through */
default:
testcase( pExpr->op==TK_SELECT ); /* selectNodeIsConstant will disallow */
testcase( pExpr->op==TK_EXISTS ); /* selectNodeIsConstant will disallow */
@@ -79520,7 +81968,7 @@ SQLITE_PRIVATE int sqlite3ExprIsConstant(Expr *p){
** an ON or USING clause.
*/
SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr *p){
- return exprIsConst(p, 3);
+ return exprIsConst(p, 2);
}
/*
@@ -79532,8 +81980,9 @@ SQLITE_PRIVATE int sqlite3ExprIsConstantNotJoin(Expr *p){
** is considered a variable but a single-quoted string (ex: 'abc') is
** a constant.
*/
-SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr *p){
- return exprIsConst(p, 2);
+SQLITE_PRIVATE int sqlite3ExprIsConstantOrFunction(Expr *p, u8 isInit){
+ assert( isInit==0 || isInit==1 );
+ return exprIsConst(p, 3+isInit);
}
/*
@@ -79600,7 +82049,8 @@ SQLITE_PRIVATE int sqlite3ExprCanBeNull(const Expr *p){
return 0;
case TK_COLUMN:
assert( p->pTab!=0 );
- return p->iColumn>=0 && p->pTab->aCol[p->iColumn].notNull==0;
+ return ExprHasProperty(p, EP_CanBeNull) ||
+ (p->iColumn>=0 && p->pTab->aCol[p->iColumn].notNull==0);
default:
return 1;
}
@@ -79771,7 +82221,7 @@ static int sqlite3InRhsIsConstant(Expr *pIn){
**
** If the RHS of the IN operator is a list or a more complex subquery, then
** an ephemeral table might need to be generated from the RHS and then
-** pX->iTable made to point to the ephermeral table instead of an
+** pX->iTable made to point to the ephemeral table instead of an
** existing table.
**
** The inFlags parameter must contain exactly one of the bits
@@ -79901,7 +82351,7 @@ SQLITE_PRIVATE int sqlite3FindInIndex(Parse *pParse, Expr *pX, u32 inFlags, int
** and IN_INDEX_NOOP is an allowed reply
** and the RHS of the IN operator is a list, not a subquery
** and the RHS is not contant or has two or fewer terms,
- ** then it is not worth creating an ephermeral table to evaluate
+ ** then it is not worth creating an ephemeral table to evaluate
** the IN operator so return IN_INDEX_NOOP.
*/
if( eType==0
@@ -80043,7 +82493,6 @@ SQLITE_PRIVATE int sqlite3CodeSubselect(
assert( (pExpr->iTable&0x0000FFFF)==pExpr->iTable );
pSelect->iLimit = 0;
testcase( pSelect->selFlags & SF_Distinct );
- pSelect->selFlags &= ~SF_Distinct;
testcase( pKeyInfo==0 ); /* Caused by OOM in sqlite3KeyInfoAlloc() */
if( sqlite3Select(pParse, pSelect, &dest) ){
sqlite3KeyInfoUnref(pKeyInfo);
@@ -80142,6 +82591,7 @@ SQLITE_PRIVATE int sqlite3CodeSubselect(
sqlite3SelectDestInit(&dest, 0, ++pParse->nMem);
if( pExpr->op==TK_SELECT ){
dest.eDest = SRT_Mem;
+ dest.iSdst = dest.iSDParm;
sqlite3VdbeAddOp2(v, OP_Null, 0, dest.iSDParm);
VdbeComment((v, "Init subquery result"));
}else{
@@ -80661,16 +83111,9 @@ SQLITE_PRIVATE void sqlite3ExprCacheAffinityChange(Parse *pParse, int iStart, in
** over to iTo..iTo+nReg-1. Keep the column cache up-to-date.
*/
SQLITE_PRIVATE void sqlite3ExprCodeMove(Parse *pParse, int iFrom, int iTo, int nReg){
- int i;
- struct yColCache *p;
assert( iFrom>=iTo+nReg || iFrom+nReg<=iTo );
sqlite3VdbeAddOp3(pParse->pVdbe, OP_Move, iFrom, iTo, nReg);
- for(i=0, p=pParse->aColCache; i<SQLITE_N_COLCACHE; i++, p++){
- int x = p->iReg;
- if( x>=iFrom && x<iFrom+nReg ){
- p->iReg += iTo-iFrom;
- }
- }
+ sqlite3ExprCacheRemove(pParse, iFrom, nReg);
}
#if defined(SQLITE_DEBUG) || defined(SQLITE_COVERAGE_TEST)
@@ -80825,26 +83268,13 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target)
#ifndef SQLITE_OMIT_CAST
case TK_CAST: {
/* Expressions of the form: CAST(pLeft AS token) */
- int aff, to_op;
inReg = sqlite3ExprCodeTarget(pParse, pExpr->pLeft, target);
- assert( !ExprHasProperty(pExpr, EP_IntValue) );
- aff = sqlite3AffinityType(pExpr->u.zToken, 0);
- to_op = aff - SQLITE_AFF_TEXT + OP_ToText;
- assert( to_op==OP_ToText || aff!=SQLITE_AFF_TEXT );
- assert( to_op==OP_ToBlob || aff!=SQLITE_AFF_NONE );
- assert( to_op==OP_ToNumeric || aff!=SQLITE_AFF_NUMERIC );
- assert( to_op==OP_ToInt || aff!=SQLITE_AFF_INTEGER );
- assert( to_op==OP_ToReal || aff!=SQLITE_AFF_REAL );
- testcase( to_op==OP_ToText );
- testcase( to_op==OP_ToBlob );
- testcase( to_op==OP_ToNumeric );
- testcase( to_op==OP_ToInt );
- testcase( to_op==OP_ToReal );
if( inReg!=target ){
sqlite3VdbeAddOp2(v, OP_SCopy, inReg, target);
inReg = target;
}
- sqlite3VdbeAddOp1(v, to_op, inReg);
+ sqlite3VdbeAddOp2(v, OP_Cast, target,
+ sqlite3AffinityType(pExpr->u.zToken, 0));
testcase( usedAsColumnCache(pParse, inReg, inReg) );
sqlite3ExprCacheAffinityChange(pParse, inReg, 1);
break;
@@ -81000,7 +83430,7 @@ SQLITE_PRIVATE int sqlite3ExprCodeTarget(Parse *pParse, Expr *pExpr, int target)
}
/* Attempt a direct implementation of the built-in COALESCE() and
- ** IFNULL() functions. This avoids unnecessary evalation of
+ ** IFNULL() functions. This avoids unnecessary evaluation of
** arguments past the first non-NULL argument.
*/
if( pDef->funcFlags & SQLITE_FUNC_COALESCE ){
@@ -81439,7 +83869,7 @@ SQLITE_PRIVATE void sqlite3ExprCodeFactorable(Parse *pParse, Expr *pExpr, int ta
}
/*
-** Generate code that evalutes the given expression and puts the result
+** Generate code that evaluates the given expression and puts the result
** in register target.
**
** Also make a copy of the expression results into another "cache" register
@@ -81462,90 +83892,86 @@ SQLITE_PRIVATE void sqlite3ExprCodeAndCache(Parse *pParse, Expr *pExpr, int targ
exprToRegister(pExpr, iMem);
}
-#if defined(SQLITE_ENABLE_TREE_EXPLAIN)
+#ifdef SQLITE_DEBUG
/*
** Generate a human-readable explanation of an expression tree.
*/
-SQLITE_PRIVATE void sqlite3ExplainExpr(Vdbe *pOut, Expr *pExpr){
- int op; /* The opcode being coded */
+SQLITE_PRIVATE void sqlite3TreeViewExpr(TreeView *pView, const Expr *pExpr, u8 moreToFollow){
const char *zBinOp = 0; /* Binary operator */
const char *zUniOp = 0; /* Unary operator */
+ pView = sqlite3TreeViewPush(pView, moreToFollow);
if( pExpr==0 ){
- op = TK_NULL;
- }else{
- op = pExpr->op;
+ sqlite3TreeViewLine(pView, "nil");
+ sqlite3TreeViewPop(pView);
+ return;
}
- switch( op ){
+ switch( pExpr->op ){
case TK_AGG_COLUMN: {
- sqlite3ExplainPrintf(pOut, "AGG{%d:%d}",
+ sqlite3TreeViewLine(pView, "AGG{%d:%d}",
pExpr->iTable, pExpr->iColumn);
break;
}
case TK_COLUMN: {
if( pExpr->iTable<0 ){
/* This only happens when coding check constraints */
- sqlite3ExplainPrintf(pOut, "COLUMN(%d)", pExpr->iColumn);
+ sqlite3TreeViewLine(pView, "COLUMN(%d)", pExpr->iColumn);
}else{
- sqlite3ExplainPrintf(pOut, "{%d:%d}",
+ sqlite3TreeViewLine(pView, "{%d:%d}",
pExpr->iTable, pExpr->iColumn);
}
break;
}
case TK_INTEGER: {
if( pExpr->flags & EP_IntValue ){
- sqlite3ExplainPrintf(pOut, "%d", pExpr->u.iValue);
+ sqlite3TreeViewLine(pView, "%d", pExpr->u.iValue);
}else{
- sqlite3ExplainPrintf(pOut, "%s", pExpr->u.zToken);
+ sqlite3TreeViewLine(pView, "%s", pExpr->u.zToken);
}
break;
}
#ifndef SQLITE_OMIT_FLOATING_POINT
case TK_FLOAT: {
- sqlite3ExplainPrintf(pOut,"%s", pExpr->u.zToken);
+ sqlite3TreeViewLine(pView,"%s", pExpr->u.zToken);
break;
}
#endif
case TK_STRING: {
- sqlite3ExplainPrintf(pOut,"%Q", pExpr->u.zToken);
+ sqlite3TreeViewLine(pView,"%Q", pExpr->u.zToken);
break;
}
case TK_NULL: {
- sqlite3ExplainPrintf(pOut,"NULL");
+ sqlite3TreeViewLine(pView,"NULL");
break;
}
#ifndef SQLITE_OMIT_BLOB_LITERAL
case TK_BLOB: {
- sqlite3ExplainPrintf(pOut,"%s", pExpr->u.zToken);
+ sqlite3TreeViewLine(pView,"%s", pExpr->u.zToken);
break;
}
#endif
case TK_VARIABLE: {
- sqlite3ExplainPrintf(pOut,"VARIABLE(%s,%d)",
- pExpr->u.zToken, pExpr->iColumn);
+ sqlite3TreeViewLine(pView,"VARIABLE(%s,%d)",
+ pExpr->u.zToken, pExpr->iColumn);
break;
}
case TK_REGISTER: {
- sqlite3ExplainPrintf(pOut,"REGISTER(%d)", pExpr->iTable);
+ sqlite3TreeViewLine(pView,"REGISTER(%d)", pExpr->iTable);
break;
}
case TK_AS: {
- sqlite3ExplainExpr(pOut, pExpr->pLeft);
+ sqlite3TreeViewLine(pView,"AS %Q", pExpr->u.zToken);
+ sqlite3TreeViewExpr(pView, pExpr->pLeft, 0);
+ break;
+ }
+ case TK_ID: {
+ sqlite3TreeViewLine(pView,"ID %Q", pExpr->u.zToken);
break;
}
#ifndef SQLITE_OMIT_CAST
case TK_CAST: {
/* Expressions of the form: CAST(pLeft AS token) */
- const char *zAff = "unk";
- switch( sqlite3AffinityType(pExpr->u.zToken, 0) ){
- case SQLITE_AFF_TEXT: zAff = "TEXT"; break;
- case SQLITE_AFF_NONE: zAff = "NONE"; break;
- case SQLITE_AFF_NUMERIC: zAff = "NUMERIC"; break;
- case SQLITE_AFF_INTEGER: zAff = "INTEGER"; break;
- case SQLITE_AFF_REAL: zAff = "REAL"; break;
- }
- sqlite3ExplainPrintf(pOut, "CAST-%s(", zAff);
- sqlite3ExplainExpr(pOut, pExpr->pLeft);
- sqlite3ExplainPrintf(pOut, ")");
+ sqlite3TreeViewLine(pView,"CAST %Q", pExpr->u.zToken);
+ sqlite3TreeViewExpr(pView, pExpr->pLeft, 0);
break;
}
#endif /* SQLITE_OMIT_CAST */
@@ -81569,6 +83995,7 @@ SQLITE_PRIVATE void sqlite3ExplainExpr(Vdbe *pOut, Expr *pExpr){
case TK_LSHIFT: zBinOp = "LSHIFT"; break;
case TK_RSHIFT: zBinOp = "RSHIFT"; break;
case TK_CONCAT: zBinOp = "CONCAT"; break;
+ case TK_DOT: zBinOp = "DOT"; break;
case TK_UMINUS: zUniOp = "UMINUS"; break;
case TK_UPLUS: zUniOp = "UPLUS"; break;
@@ -81578,8 +84005,8 @@ SQLITE_PRIVATE void sqlite3ExplainExpr(Vdbe *pOut, Expr *pExpr){
case TK_NOTNULL: zUniOp = "NOTNULL"; break;
case TK_COLLATE: {
- sqlite3ExplainExpr(pOut, pExpr->pLeft);
- sqlite3ExplainPrintf(pOut,".COLLATE(%s)",pExpr->u.zToken);
+ sqlite3TreeViewLine(pView, "COLLATE %Q", pExpr->u.zToken);
+ sqlite3TreeViewExpr(pView, pExpr->pLeft, 0);
break;
}
@@ -81591,41 +84018,36 @@ SQLITE_PRIVATE void sqlite3ExplainExpr(Vdbe *pOut, Expr *pExpr){
}else{
pFarg = pExpr->x.pList;
}
- if( op==TK_AGG_FUNCTION ){
- sqlite3ExplainPrintf(pOut, "AGG_FUNCTION%d:%s(",
+ if( pExpr->op==TK_AGG_FUNCTION ){
+ sqlite3TreeViewLine(pView, "AGG_FUNCTION%d %Q",
pExpr->op2, pExpr->u.zToken);
}else{
- sqlite3ExplainPrintf(pOut, "FUNCTION:%s(", pExpr->u.zToken);
+ sqlite3TreeViewLine(pView, "FUNCTION %Q", pExpr->u.zToken);
}
if( pFarg ){
- sqlite3ExplainExprList(pOut, pFarg);
+ sqlite3TreeViewExprList(pView, pFarg, 0, 0);
}
- sqlite3ExplainPrintf(pOut, ")");
break;
}
#ifndef SQLITE_OMIT_SUBQUERY
case TK_EXISTS: {
- sqlite3ExplainPrintf(pOut, "EXISTS(");
- sqlite3ExplainSelect(pOut, pExpr->x.pSelect);
- sqlite3ExplainPrintf(pOut,")");
+ sqlite3TreeViewLine(pView, "EXISTS-expr");
+ sqlite3TreeViewSelect(pView, pExpr->x.pSelect, 0);
break;
}
case TK_SELECT: {
- sqlite3ExplainPrintf(pOut, "(");
- sqlite3ExplainSelect(pOut, pExpr->x.pSelect);
- sqlite3ExplainPrintf(pOut, ")");
+ sqlite3TreeViewLine(pView, "SELECT-expr");
+ sqlite3TreeViewSelect(pView, pExpr->x.pSelect, 0);
break;
}
case TK_IN: {
- sqlite3ExplainPrintf(pOut, "IN(");
- sqlite3ExplainExpr(pOut, pExpr->pLeft);
- sqlite3ExplainPrintf(pOut, ",");
+ sqlite3TreeViewLine(pView, "IN");
+ sqlite3TreeViewExpr(pView, pExpr->pLeft, 1);
if( ExprHasProperty(pExpr, EP_xIsSelect) ){
- sqlite3ExplainSelect(pOut, pExpr->x.pSelect);
+ sqlite3TreeViewSelect(pView, pExpr->x.pSelect, 0);
}else{
- sqlite3ExplainExprList(pOut, pExpr->x.pList);
+ sqlite3TreeViewExprList(pView, pExpr->x.pList, 0, 0);
}
- sqlite3ExplainPrintf(pOut, ")");
break;
}
#endif /* SQLITE_OMIT_SUBQUERY */
@@ -81645,13 +84067,10 @@ SQLITE_PRIVATE void sqlite3ExplainExpr(Vdbe *pOut, Expr *pExpr){
Expr *pX = pExpr->pLeft;
Expr *pY = pExpr->x.pList->a[0].pExpr;
Expr *pZ = pExpr->x.pList->a[1].pExpr;
- sqlite3ExplainPrintf(pOut, "BETWEEN(");
- sqlite3ExplainExpr(pOut, pX);
- sqlite3ExplainPrintf(pOut, ",");
- sqlite3ExplainExpr(pOut, pY);
- sqlite3ExplainPrintf(pOut, ",");
- sqlite3ExplainExpr(pOut, pZ);
- sqlite3ExplainPrintf(pOut, ")");
+ sqlite3TreeViewLine(pView, "BETWEEN");
+ sqlite3TreeViewExpr(pView, pX, 1);
+ sqlite3TreeViewExpr(pView, pY, 1);
+ sqlite3TreeViewExpr(pView, pZ, 0);
break;
}
case TK_TRIGGER: {
@@ -81662,15 +84081,14 @@ SQLITE_PRIVATE void sqlite3ExplainExpr(Vdbe *pOut, Expr *pExpr){
** is set to the column of the pseudo-table to read, or to -1 to
** read the rowid field.
*/
- sqlite3ExplainPrintf(pOut, "%s(%d)",
+ sqlite3TreeViewLine(pView, "%s(%d)",
pExpr->iTable ? "NEW" : "OLD", pExpr->iColumn);
break;
}
case TK_CASE: {
- sqlite3ExplainPrintf(pOut, "CASE(");
- sqlite3ExplainExpr(pOut, pExpr->pLeft);
- sqlite3ExplainPrintf(pOut, ",");
- sqlite3ExplainExprList(pOut, pExpr->x.pList);
+ sqlite3TreeViewLine(pView, "CASE");
+ sqlite3TreeViewExpr(pView, pExpr->pLeft, 1);
+ sqlite3TreeViewExprList(pView, pExpr->x.pList, 0, 0);
break;
}
#ifndef SQLITE_OMIT_TRIGGER
@@ -81682,55 +84100,57 @@ SQLITE_PRIVATE void sqlite3ExplainExpr(Vdbe *pOut, Expr *pExpr){
case OE_Fail: zType = "fail"; break;
case OE_Ignore: zType = "ignore"; break;
}
- sqlite3ExplainPrintf(pOut, "RAISE-%s(%s)", zType, pExpr->u.zToken);
+ sqlite3TreeViewLine(pView, "RAISE %s(%Q)", zType, pExpr->u.zToken);
break;
}
#endif
+ default: {
+ sqlite3TreeViewLine(pView, "op=%d", pExpr->op);
+ break;
+ }
}
if( zBinOp ){
- sqlite3ExplainPrintf(pOut,"%s(", zBinOp);
- sqlite3ExplainExpr(pOut, pExpr->pLeft);
- sqlite3ExplainPrintf(pOut,",");
- sqlite3ExplainExpr(pOut, pExpr->pRight);
- sqlite3ExplainPrintf(pOut,")");
+ sqlite3TreeViewLine(pView, "%s", zBinOp);
+ sqlite3TreeViewExpr(pView, pExpr->pLeft, 1);
+ sqlite3TreeViewExpr(pView, pExpr->pRight, 0);
}else if( zUniOp ){
- sqlite3ExplainPrintf(pOut,"%s(", zUniOp);
- sqlite3ExplainExpr(pOut, pExpr->pLeft);
- sqlite3ExplainPrintf(pOut,")");
+ sqlite3TreeViewLine(pView, "%s", zUniOp);
+ sqlite3TreeViewExpr(pView, pExpr->pLeft, 0);
}
+ sqlite3TreeViewPop(pView);
}
-#endif /* defined(SQLITE_ENABLE_TREE_EXPLAIN) */
+#endif /* SQLITE_DEBUG */
-#if defined(SQLITE_ENABLE_TREE_EXPLAIN)
+#ifdef SQLITE_DEBUG
/*
** Generate a human-readable explanation of an expression list.
*/
-SQLITE_PRIVATE void sqlite3ExplainExprList(Vdbe *pOut, ExprList *pList){
+SQLITE_PRIVATE void sqlite3TreeViewExprList(
+ TreeView *pView,
+ const ExprList *pList,
+ u8 moreToFollow,
+ const char *zLabel
+){
int i;
- if( pList==0 || pList->nExpr==0 ){
- sqlite3ExplainPrintf(pOut, "(empty-list)");
- return;
- }else if( pList->nExpr==1 ){
- sqlite3ExplainExpr(pOut, pList->a[0].pExpr);
+ pView = sqlite3TreeViewPush(pView, moreToFollow);
+ if( zLabel==0 || zLabel[0]==0 ) zLabel = "LIST";
+ if( pList==0 ){
+ sqlite3TreeViewLine(pView, "%s (empty)", zLabel);
}else{
- sqlite3ExplainPush(pOut);
+ sqlite3TreeViewLine(pView, "%s", zLabel);
for(i=0; i<pList->nExpr; i++){
- sqlite3ExplainPrintf(pOut, "item[%d] = ", i);
- sqlite3ExplainPush(pOut);
- sqlite3ExplainExpr(pOut, pList->a[i].pExpr);
- sqlite3ExplainPop(pOut);
- if( pList->a[i].zName ){
+ sqlite3TreeViewExpr(pView, pList->a[i].pExpr, i<pList->nExpr-1);
+#if 0
+ if( pList->a[i].zName ){
sqlite3ExplainPrintf(pOut, " AS %s", pList->a[i].zName);
}
if( pList->a[i].bSpanIsTab ){
sqlite3ExplainPrintf(pOut, " (%s)", pList->a[i].zSpan);
}
- if( i<pList->nExpr-1 ){
- sqlite3ExplainNL(pOut);
- }
+#endif
}
- sqlite3ExplainPop(pOut);
}
+ sqlite3TreeViewPop(pView);
}
#endif /* SQLITE_DEBUG */
@@ -81794,7 +84214,7 @@ SQLITE_PRIVATE int sqlite3ExprCodeExprList(
** x>=y AND x<=z
**
** Code it as such, taking care to do the common subexpression
-** elementation of x.
+** elimination of x.
*/
static void exprCodeBetween(
Parse *pParse, /* Parsing and code generating context */
@@ -82531,7 +84951,7 @@ SQLITE_PRIVATE int sqlite3GetTempReg(Parse *pParse){
** purpose.
**
** If a register is currently being used by the column cache, then
-** the dallocation is deferred until the column cache line that uses
+** the deallocation is deferred until the column cache line that uses
** the register becomes stale.
*/
SQLITE_PRIVATE void sqlite3ReleaseTempReg(Parse *pParse, int iReg){
@@ -82758,8 +85178,8 @@ static void renameTriggerFunc(
UNUSED_PARAMETER(NotUsed);
/* The principle used to locate the table name in the CREATE TRIGGER
- ** statement is that the table name is the first token that is immediatedly
- ** preceded by either TK_ON or TK_DOT and immediatedly followed by one
+ ** statement is that the table name is the first token that is immediately
+ ** preceded by either TK_ON or TK_DOT and immediately followed by one
** of TK_WHEN, TK_BEGIN or TK_FOR.
*/
if( zSql ){
@@ -83450,7 +85870,7 @@ exit_begin_add_column:
** not possible to enable both STAT3 and STAT4 at the same time. If they
** are both enabled, then STAT4 takes precedence.
**
-** For most applications, sqlite_stat1 provides all the statisics required
+** For most applications, sqlite_stat1 provides all the statistics required
** for the query planner to make good choices.
**
** Format of sqlite_stat1:
@@ -83801,8 +86221,9 @@ static void stat4Destructor(void *pOld){
** original WITHOUT ROWID table as N==K as a special case.
**
** This routine allocates the Stat4Accum object in heap memory. The return
-** value is a pointer to the the Stat4Accum object encoded as a blob (i.e.
-** the size of the blob is sizeof(void*) bytes).
+** value is a pointer to the Stat4Accum object. The datatype of the
+** return value is BLOB, but it is really just a pointer to the Stat4Accum
+** object.
*/
static void statInit(
sqlite3_context *context,
@@ -83880,8 +86301,11 @@ static void statInit(
}
#endif
- /* Return a pointer to the allocated object to the caller */
- sqlite3_result_blob(context, p, sizeof(p), stat4Destructor);
+ /* Return a pointer to the allocated object to the caller. Note that
+ ** only the pointer (the 2nd parameter) matters. The size of the object
+ ** (given by the 3rd parameter) is never used and can be any positive
+ ** value. */
+ sqlite3_result_blob(context, p, sizeof(*p), stat4Destructor);
}
static const FuncDef statInitFuncdef = {
2+IsStat34, /* nArg */
@@ -84207,7 +86631,7 @@ static const FuncDef statPushFuncdef = {
** Implementation of the stat_get(P,J) SQL function. This routine is
** used to query statistical information that has been gathered into
** the Stat4Accum object by prior calls to stat_push(). The P parameter
-** is a BLOB which is decoded into a pointer to the Stat4Accum objects.
+** has type BLOB but it is really just a pointer to the Stat4Accum object.
** The content to returned is determined by the parameter J
** which is one of the STAT_GET_xxxx values defined above.
**
@@ -84611,7 +87035,8 @@ static void analyzeOneTable(
/* Add the entry to the stat1 table. */
callStatGet(v, regStat4, STAT_GET_STAT1, regStat1);
- sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 3, regTemp, "aaa", 0);
+ assert( "BBB"[0]==SQLITE_AFF_TEXT );
+ sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 3, regTemp, "BBB", 0);
sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur, regNewRowid);
sqlite3VdbeAddOp3(v, OP_Insert, iStatCur, regTemp, regNewRowid);
sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
@@ -84674,7 +87099,8 @@ static void analyzeOneTable(
sqlite3VdbeAddOp2(v, OP_Count, iTabCur, regStat1);
jZeroRows = sqlite3VdbeAddOp1(v, OP_IfNot, regStat1); VdbeCoverage(v);
sqlite3VdbeAddOp2(v, OP_Null, 0, regIdxname);
- sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 3, regTemp, "aaa", 0);
+ assert( "BBB"[0]==SQLITE_AFF_TEXT );
+ sqlite3VdbeAddOp4(v, OP_MakeRecord, regTabname, 3, regTemp, "BBB", 0);
sqlite3VdbeAddOp2(v, OP_NewRowid, iStatCur, regNewRowid);
sqlite3VdbeAddOp3(v, OP_Insert, iStatCur, regTemp, regNewRowid);
sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
@@ -84845,7 +87271,7 @@ static void decodeIntArray(
#ifdef SQLITE_ENABLE_STAT3_OR_STAT4
if( z==0 ) z = "";
#else
- if( NEVER(z==0) ) z = "";
+ assert( z!=0 );
#endif
for(i=0; *z && i<nOut; i++){
v = 0;
@@ -84854,16 +87280,14 @@ static void decodeIntArray(
z++;
}
#ifdef SQLITE_ENABLE_STAT3_OR_STAT4
- if( aOut ){
- aOut[i] = v;
- }else
+ if( aOut ) aOut[i] = v;
+ if( aLog ) aLog[i] = sqlite3LogEst(v);
#else
assert( aOut==0 );
UNUSED_PARAMETER(aOut);
+ assert( aLog!=0 );
+ aLog[i] = sqlite3LogEst(v);
#endif
- {
- aLog[i] = sqlite3LogEst(v);
- }
if( *z==' ' ) z++;
}
#ifndef SQLITE_ENABLE_STAT3_OR_STAT4
@@ -84924,8 +87348,17 @@ static int analysisLoader(void *pData, int argc, char **argv, char **NotUsed){
z = argv[2];
if( pIndex ){
+ int nCol = pIndex->nKeyCol+1;
+#ifdef SQLITE_ENABLE_STAT3_OR_STAT4
+ tRowcnt * const aiRowEst = pIndex->aiRowEst = (tRowcnt*)sqlite3MallocZero(
+ sizeof(tRowcnt) * nCol
+ );
+ if( aiRowEst==0 ) pInfo->db->mallocFailed = 1;
+#else
+ tRowcnt * const aiRowEst = 0;
+#endif
pIndex->bUnordered = 0;
- decodeIntArray((char*)z, pIndex->nKeyCol+1, 0, pIndex->aiRowLogEst, pIndex);
+ decodeIntArray((char*)z, nCol, aiRowEst, pIndex->aiRowLogEst, pIndex);
if( pIndex->pPartIdxWhere==0 ) pTable->nRowLogEst = pIndex->aiRowLogEst[0];
}else{
Index fakeIdx;
@@ -84984,25 +87417,38 @@ static void initAvgEq(Index *pIdx){
pIdx->aAvgEq[nCol] = 1;
}
for(iCol=0; iCol<nCol; iCol++){
+ int nSample = pIdx->nSample;
int i; /* Used to iterate through samples */
tRowcnt sumEq = 0; /* Sum of the nEq values */
- tRowcnt nSum = 0; /* Number of terms contributing to sumEq */
tRowcnt avgEq = 0;
- tRowcnt nDLt = pFinal->anDLt[iCol];
+ tRowcnt nRow; /* Number of rows in index */
+ i64 nSum100 = 0; /* Number of terms contributing to sumEq */
+ i64 nDist100; /* Number of distinct values in index */
+
+ if( !pIdx->aiRowEst || iCol>=pIdx->nKeyCol || pIdx->aiRowEst[iCol+1]==0 ){
+ nRow = pFinal->anLt[iCol];
+ nDist100 = (i64)100 * pFinal->anDLt[iCol];
+ nSample--;
+ }else{
+ nRow = pIdx->aiRowEst[0];
+ nDist100 = ((i64)100 * pIdx->aiRowEst[0]) / pIdx->aiRowEst[iCol+1];
+ }
/* Set nSum to the number of distinct (iCol+1) field prefixes that
- ** occur in the stat4 table for this index before pFinal. Set
- ** sumEq to the sum of the nEq values for column iCol for the same
- ** set (adding the value only once where there exist dupicate
- ** prefixes). */
- for(i=0; i<(pIdx->nSample-1); i++){
- if( aSample[i].anDLt[iCol]!=aSample[i+1].anDLt[iCol] ){
+ ** occur in the stat4 table for this index. Set sumEq to the sum of
+ ** the nEq values for column iCol for the same set (adding the value
+ ** only once where there exist duplicate prefixes). */
+ for(i=0; i<nSample; i++){
+ if( i==(pIdx->nSample-1)
+ || aSample[i].anDLt[iCol]!=aSample[i+1].anDLt[iCol]
+ ){
sumEq += aSample[i].anEq[iCol];
- nSum++;
+ nSum100 += 100;
}
}
- if( nDLt>nSum ){
- avgEq = (pFinal->anLt[iCol] - sumEq)/(nDLt - nSum);
+
+ if( nDist100>nSum100 ){
+ avgEq = ((i64)100 * (nRow - sumEq))/(nDist100 - nSum100);
}
if( avgEq==0 ) avgEq = 1;
pIdx->aAvgEq[iCol] = avgEq;
@@ -85254,6 +87700,11 @@ SQLITE_PRIVATE int sqlite3AnalysisLoad(sqlite3 *db, int iDb){
rc = loadStat4(db, sInfo.zDatabase);
db->lookaside.bEnabled = lookasideEnabled;
}
+ for(i=sqliteHashFirst(&db->aDb[iDb].pSchema->idxHash);i;i=sqliteHashNext(i)){
+ Index *pIdx = sqliteHashData(i);
+ sqlite3_free(pIdx->aiRowEst);
+ pIdx->aiRowEst = 0;
+ }
#endif
if( rc==SQLITE_NOMEM ){
@@ -85475,6 +87926,15 @@ static void attachFunc(
rc = sqlite3Init(db, &zErrDyn);
sqlite3BtreeLeaveAll(db);
}
+#ifdef SQLITE_USER_AUTHENTICATION
+ if( rc==SQLITE_OK ){
+ u8 newAuth = 0;
+ rc = sqlite3UserAuthCheckLogin(db, zName, &newAuth);
+ if( newAuth<db->auth.authLevel ){
+ rc = SQLITE_AUTH_USER;
+ }
+ }
+#endif
if( rc ){
int iDb = db->nDb - 1;
assert( iDb>=2 );
@@ -85917,7 +88377,7 @@ SQLITE_API int sqlite3_set_authorizer(
void *pArg
){
sqlite3_mutex_enter(db->mutex);
- db->xAuth = xAuth;
+ db->xAuth = (sqlite3_xauth)xAuth;
db->pAuthArg = pArg;
sqlite3ExpirePreparedStatements(db);
sqlite3_mutex_leave(db->mutex);
@@ -85952,7 +88412,11 @@ SQLITE_PRIVATE int sqlite3AuthReadCol(
char *zDb = db->aDb[iDb].zName; /* Name of attached database */
int rc; /* Auth callback return code */
- rc = db->xAuth(db->pAuthArg, SQLITE_READ, zTab,zCol,zDb,pParse->zAuthContext);
+ rc = db->xAuth(db->pAuthArg, SQLITE_READ, zTab,zCol,zDb,pParse->zAuthContext
+#ifdef SQLITE_USER_AUTHENTICATION
+ ,db->auth.zAuthUser
+#endif
+ );
if( rc==SQLITE_DENY ){
if( db->nDb>2 || iDb!=0 ){
sqlite3ErrorMsg(pParse, "access to %s.%s.%s is prohibited",zDb,zTab,zCol);
@@ -86052,7 +88516,11 @@ SQLITE_PRIVATE int sqlite3AuthCheck(
if( db->xAuth==0 ){
return SQLITE_OK;
}
- rc = db->xAuth(db->pAuthArg, code, zArg1, zArg2, zArg3, pParse->zAuthContext);
+ rc = db->xAuth(db->pAuthArg, code, zArg1, zArg2, zArg3, pParse->zAuthContext
+#ifdef SQLITE_USER_AUTHENTICATION
+ ,db->auth.zAuthUser
+#endif
+ );
if( rc==SQLITE_DENY ){
sqlite3ErrorMsg(pParse, "not authorized");
pParse->rc = SQLITE_AUTH;
@@ -86251,6 +88719,17 @@ SQLITE_PRIVATE void sqlite3FinishCoding(Parse *pParse){
while( sqlite3VdbeDeletePriorOpcode(v, OP_Close) ){}
sqlite3VdbeAddOp0(v, OP_Halt);
+#if SQLITE_USER_AUTHENTICATION
+ if( pParse->nTableLock>0 && db->init.busy==0 ){
+ sqlite3UserAuthInit(db);
+ if( db->auth.authLevel<UAUTH_User ){
+ pParse->rc = SQLITE_AUTH_USER;
+ sqlite3ErrorMsg(pParse, "user not authenticated");
+ return;
+ }
+ }
+#endif
+
/* The cookie mask contains one bit for each database file open.
** (Bit 0 is for main, bit 1 is for temp, and so forth.) Bits are
** set for each database that is used. Generate code to start a
@@ -86366,6 +88845,16 @@ SQLITE_PRIVATE void sqlite3NestedParse(Parse *pParse, const char *zFormat, ...){
pParse->nested--;
}
+#if SQLITE_USER_AUTHENTICATION
+/*
+** Return TRUE if zTable is the name of the system table that stores the
+** list of users and their access credentials.
+*/
+SQLITE_PRIVATE int sqlite3UserAuthTable(const char *zTable){
+ return sqlite3_stricmp(zTable, "sqlite_user")==0;
+}
+#endif
+
/*
** Locate the in-memory structure that describes a particular database
** table given the name of that table and (optionally) the name of the
@@ -86381,16 +88870,21 @@ SQLITE_PRIVATE void sqlite3NestedParse(Parse *pParse, const char *zFormat, ...){
SQLITE_PRIVATE Table *sqlite3FindTable(sqlite3 *db, const char *zName, const char *zDatabase){
Table *p = 0;
int i;
- int nName;
assert( zName!=0 );
- nName = sqlite3Strlen30(zName);
/* All mutexes are required for schema access. Make sure we hold them. */
assert( zDatabase!=0 || sqlite3BtreeHoldsAllMutexes(db) );
+#if SQLITE_USER_AUTHENTICATION
+ /* Only the admin user is allowed to know that the sqlite_user table
+ ** exists */
+ if( db->auth.authLevel<UAUTH_Admin && sqlite3UserAuthTable(zName)!=0 ){
+ return 0;
+ }
+#endif
for(i=OMIT_TEMPDB; i<db->nDb; i++){
int j = (i<2) ? i^1 : i; /* Search TEMP before MAIN */
if( zDatabase!=0 && sqlite3StrICmp(zDatabase, db->aDb[j].zName) ) continue;
assert( sqlite3SchemaMutexHeld(db, j, 0) );
- p = sqlite3HashFind(&db->aDb[j].pSchema->tblHash, zName, nName);
+ p = sqlite3HashFind(&db->aDb[j].pSchema->tblHash, zName);
if( p ) break;
}
return p;
@@ -86430,6 +88924,12 @@ SQLITE_PRIVATE Table *sqlite3LocateTable(
}
pParse->checkSchema = 1;
}
+#if SQLITE_USER_AUTHENICATION
+ else if( pParse->db->auth.authLevel<UAUTH_User ){
+ sqlite3ErrorMsg(pParse, "user not authenticated");
+ p = 0;
+ }
+#endif
return p;
}
@@ -86473,7 +88973,6 @@ SQLITE_PRIVATE Table *sqlite3LocateTableItem(
SQLITE_PRIVATE Index *sqlite3FindIndex(sqlite3 *db, const char *zName, const char *zDb){
Index *p = 0;
int i;
- int nName = sqlite3Strlen30(zName);
/* All mutexes are required for schema access. Make sure we hold them. */
assert( zDb!=0 || sqlite3BtreeHoldsAllMutexes(db) );
for(i=OMIT_TEMPDB; i<db->nDb; i++){
@@ -86482,7 +88981,7 @@ SQLITE_PRIVATE Index *sqlite3FindIndex(sqlite3 *db, const char *zName, const cha
assert( pSchema );
if( zDb && sqlite3StrICmp(zDb, db->aDb[j].zName) ) continue;
assert( sqlite3SchemaMutexHeld(db, j, 0) );
- p = sqlite3HashFind(&pSchema->idxHash, zName, nName);
+ p = sqlite3HashFind(&pSchema->idxHash, zName);
if( p ) break;
}
return p;
@@ -86499,6 +88998,9 @@ static void freeIndex(sqlite3 *db, Index *p){
sqlite3ExprDelete(db, p->pPartIdxWhere);
sqlite3DbFree(db, p->zColAff);
if( p->isResized ) sqlite3DbFree(db, p->azColl);
+#ifdef SQLITE_ENABLE_STAT3_OR_STAT4
+ sqlite3_free(p->aiRowEst);
+#endif
sqlite3DbFree(db, p);
}
@@ -86510,13 +89012,11 @@ static void freeIndex(sqlite3 *db, Index *p){
*/
SQLITE_PRIVATE void sqlite3UnlinkAndDeleteIndex(sqlite3 *db, int iDb, const char *zIdxName){
Index *pIndex;
- int len;
Hash *pHash;
assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
pHash = &db->aDb[iDb].pSchema->idxHash;
- len = sqlite3Strlen30(zIdxName);
- pIndex = sqlite3HashInsert(pHash, zIdxName, len, 0);
+ pIndex = sqlite3HashInsert(pHash, zIdxName, 0);
if( ALWAYS(pIndex) ){
if( pIndex->pTable->pIndex==pIndex ){
pIndex->pTable->pIndex = pIndex->pNext;
@@ -86676,7 +89176,7 @@ SQLITE_PRIVATE void sqlite3DeleteTable(sqlite3 *db, Table *pTable){
if( !db || db->pnBytesFreed==0 ){
char *zName = pIndex->zName;
TESTONLY ( Index *pOld = ) sqlite3HashInsert(
- &pIndex->pSchema->idxHash, zName, sqlite3Strlen30(zName), 0
+ &pIndex->pSchema->idxHash, zName, 0
);
assert( db==0 || sqlite3SchemaMutexHeld(db, 0, pIndex->pSchema) );
assert( pOld==pIndex || pOld==0 );
@@ -86719,8 +89219,7 @@ SQLITE_PRIVATE void sqlite3UnlinkAndDeleteTable(sqlite3 *db, int iDb, const char
assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
testcase( zTabName[0]==0 ); /* Zero-length table names are allowed */
pDb = &db->aDb[iDb];
- p = sqlite3HashInsert(&pDb->pSchema->tblHash, zTabName,
- sqlite3Strlen30(zTabName),0);
+ p = sqlite3HashInsert(&pDb->pSchema->tblHash, zTabName, 0);
sqlite3DeleteTable(db, p);
db->flags |= SQLITE_InternChanges;
}
@@ -87244,7 +89743,7 @@ SQLITE_PRIVATE char sqlite3AffinityType(const char *zIn, u8 *pszEst){
** estimate is scaled so that the size of an integer is 1. */
if( pszEst ){
*pszEst = 1; /* default size is approx 4 bytes */
- if( aff<=SQLITE_AFF_NONE ){
+ if( aff<SQLITE_AFF_NUMERIC ){
if( zChar ){
while( zChar[0] ){
if( sqlite3Isdigit(zChar[0]) ){
@@ -87303,7 +89802,7 @@ SQLITE_PRIVATE void sqlite3AddDefaultValue(Parse *pParse, ExprSpan *pSpan){
p = pParse->pNewTable;
if( p!=0 ){
pCol = &(p->aCol[p->nCol-1]);
- if( !sqlite3ExprIsConstantOrFunction(pSpan->pExpr) ){
+ if( !sqlite3ExprIsConstantOrFunction(pSpan->pExpr, db->init.busy) ){
sqlite3ErrorMsg(pParse, "default value of column [%s] is not constant",
pCol->zName);
}else{
@@ -87615,8 +90114,8 @@ static char *createTableStmt(sqlite3 *db, Table *p){
zStmt[k++] = '(';
for(pCol=p->aCol, i=0; i<p->nCol; i++, pCol++){
static const char * const azType[] = {
- /* SQLITE_AFF_TEXT */ " TEXT",
/* SQLITE_AFF_NONE */ "",
+ /* SQLITE_AFF_TEXT */ " TEXT",
/* SQLITE_AFF_NUMERIC */ " NUM",
/* SQLITE_AFF_INTEGER */ " INT",
/* SQLITE_AFF_REAL */ " REAL"
@@ -87628,15 +90127,15 @@ static char *createTableStmt(sqlite3 *db, Table *p){
k += sqlite3Strlen30(&zStmt[k]);
zSep = zSep2;
identPut(zStmt, &k, pCol->zName);
- assert( pCol->affinity-SQLITE_AFF_TEXT >= 0 );
- assert( pCol->affinity-SQLITE_AFF_TEXT < ArraySize(azType) );
- testcase( pCol->affinity==SQLITE_AFF_TEXT );
+ assert( pCol->affinity-SQLITE_AFF_NONE >= 0 );
+ assert( pCol->affinity-SQLITE_AFF_NONE < ArraySize(azType) );
testcase( pCol->affinity==SQLITE_AFF_NONE );
+ testcase( pCol->affinity==SQLITE_AFF_TEXT );
testcase( pCol->affinity==SQLITE_AFF_NUMERIC );
testcase( pCol->affinity==SQLITE_AFF_INTEGER );
testcase( pCol->affinity==SQLITE_AFF_REAL );
- zType = azType[pCol->affinity - SQLITE_AFF_TEXT];
+ zType = azType[pCol->affinity - SQLITE_AFF_NONE];
len = sqlite3Strlen30(zType);
assert( pCol->affinity==SQLITE_AFF_NONE
|| pCol->affinity==sqlite3AffinityType(zType, 0) );
@@ -87720,7 +90219,7 @@ static int hasColumn(const i16 *aiCol, int nCol, int x){
** no rowid btree for a WITHOUT ROWID. Instead, the canonical
** data storage is a covering index btree.
** (2) Bypass the creation of the sqlite_master table entry
-** for the PRIMARY KEY as the the primary key index is now
+** for the PRIMARY KEY as the primary key index is now
** identified by the sqlite_master table entry of the table itself.
** (3) Set the Index.tnum of the PRIMARY KEY Index object in the
** schema to the rootpage from the main table.
@@ -87741,7 +90240,7 @@ static void convertToWithoutRowidTable(Parse *pParse, Table *pTab){
Vdbe *v = pParse->pVdbe;
/* Convert the OP_CreateTable opcode that would normally create the
- ** root-page for the table into a OP_CreateIndex opcode. The index
+ ** root-page for the table into an OP_CreateIndex opcode. The index
** created will become the PRIMARY KEY index.
*/
if( pParse->addrCrTab ){
@@ -88042,8 +90541,7 @@ SQLITE_PRIVATE void sqlite3EndTable(
Table *pOld;
Schema *pSchema = p->pSchema;
assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
- pOld = sqlite3HashInsert(&pSchema->tblHash, p->zName,
- sqlite3Strlen30(p->zName),p);
+ pOld = sqlite3HashInsert(&pSchema->tblHash, p->zName, p);
if( pOld ){
assert( p==pOld ); /* Malloc must have failed inside HashInsert() */
db->mallocFailed = 1;
@@ -88154,7 +90652,7 @@ SQLITE_PRIVATE int sqlite3ViewGetColumnNames(Parse *pParse, Table *pTable){
int nErr = 0; /* Number of errors encountered */
int n; /* Temporarily holds the number of cursors assigned */
sqlite3 *db = pParse->db; /* Database connection for malloc errors */
- int (*xAuth)(void*,int,const char*,const char*,const char*,const char*);
+ sqlite3_xauth xAuth; /* Saved xAuth pointer */
assert( pTable );
@@ -88693,7 +91191,7 @@ SQLITE_PRIVATE void sqlite3CreateForeignKey(
assert( sqlite3SchemaMutexHeld(db, 0, p->pSchema) );
pNextTo = (FKey *)sqlite3HashInsert(&p->pSchema->fkeyHash,
- pFKey->zTo, sqlite3Strlen30(pFKey->zTo), (void *)pFKey
+ pFKey->zTo, (void *)pFKey
);
if( pNextTo==pFKey ){
db->mallocFailed = 1;
@@ -88756,7 +91254,7 @@ static void sqlite3RefillIndex(Parse *pParse, Index *pIndex, int memRootPage){
int iPartIdxLabel; /* Jump to this label to skip a row */
Vdbe *v; /* Generate code into this virtual machine */
KeyInfo *pKey; /* KeyInfo for index */
- int regRecord; /* Register holding assemblied index record */
+ int regRecord; /* Register holding assembled index record */
sqlite3 *db = pParse->db; /* The database connection */
int iDb = sqlite3SchemaToIndex(db, pIndex->pSchema);
@@ -88781,7 +91279,7 @@ static void sqlite3RefillIndex(Parse *pParse, Index *pIndex, int memRootPage){
/* Open the sorter cursor if we are to use one. */
iSorter = pParse->nTab++;
- sqlite3VdbeAddOp4(v, OP_SorterOpen, iSorter, 0, 0, (char*)
+ sqlite3VdbeAddOp4(v, OP_SorterOpen, iSorter, 0, pIndex->nKeyCol, (char*)
sqlite3KeyInfoRef(pKey), P4_KEYINFO);
/* Open the table. Loop through all rows of the table, inserting index
@@ -88812,7 +91310,7 @@ static void sqlite3RefillIndex(Parse *pParse, Index *pIndex, int memRootPage){
}else{
addr2 = sqlite3VdbeCurrentAddr(v);
}
- sqlite3VdbeAddOp2(v, OP_SorterData, iSorter, regRecord);
+ sqlite3VdbeAddOp3(v, OP_SorterData, iSorter, regRecord, iIdx);
sqlite3VdbeAddOp3(v, OP_IdxInsert, iIdx, regRecord, 1);
sqlite3VdbeChangeP5(v, OPFLAG_USESEEKRESULT);
sqlite3ReleaseTempReg(pParse, regRecord);
@@ -88969,6 +91467,10 @@ SQLITE_PRIVATE Index *sqlite3CreateIndex(
assert( pTab!=0 );
assert( pParse->nErr==0 );
if( sqlite3StrNICmp(pTab->zName, "sqlite_", 7)==0
+ && db->init.busy==0
+#if SQLITE_USER_AUTHENTICATION
+ && sqlite3UserAuthTable(pTab->zName)==0
+#endif
&& sqlite3StrNICmp(&pTab->zName[7],"altertab_",9)!=0 ){
sqlite3ErrorMsg(pParse, "table %s may not be indexed", pTab->zName);
goto exit_create_index;
@@ -89130,7 +91632,7 @@ SQLITE_PRIVATE Index *sqlite3CreateIndex(
pParse->checkSchema = 1;
goto exit_create_index;
}
- assert( pTab->nCol<=0x7fff && j<=0x7fff );
+ assert( j<=0x7fff );
pIndex->aiColumn[i] = (i16)j;
if( pListItem->pExpr ){
int nColl;
@@ -89241,8 +91743,7 @@ SQLITE_PRIVATE Index *sqlite3CreateIndex(
Index *p;
assert( sqlite3SchemaMutexHeld(db, 0, pIndex->pSchema) );
p = sqlite3HashInsert(&pIndex->pSchema->idxHash,
- pIndex->zName, sqlite3Strlen30(pIndex->zName),
- pIndex);
+ pIndex->zName, pIndex);
if( p ){
assert( p==pIndex ); /* Malloc must have failed */
db->mallocFailed = 1;
@@ -89357,7 +91858,7 @@ exit_create_index:
** Fill the Index.aiRowEst[] array with default information - information
** to be used when we have not run the ANALYZE command.
**
-** aiRowEst[0] is suppose to contain the number of elements in the index.
+** aiRowEst[0] is supposed to contain the number of elements in the index.
** Since we do not know, guess 1 million. aiRowEst[1] is an estimate of the
** number of rows in the table that match any particular value of the
** first column of the index. aiRowEst[2] is an estimate of the number
@@ -89736,7 +92237,7 @@ SQLITE_PRIVATE void sqlite3SrcListDelete(sqlite3 *db, SrcList *pList){
** if this is the first term of the FROM clause. pTable and pDatabase
** are the name of the table and database named in the FROM clause term.
** pDatabase is NULL if the database name qualifier is missing - the
-** usual case. If the term has a alias, then pAlias points to the
+** usual case. If the term has an alias, then pAlias points to the
** alias token. If the term is a subquery, then pSubquery is the
** SELECT statement that the subquery encodes. The pTable and
** pDatabase parameters are NULL for subqueries. The pOn and pUsing
@@ -90499,7 +93000,7 @@ SQLITE_PRIVATE int sqlite3CheckCollSeq(Parse *pParse, CollSeq *pColl){
**
** Each pointer stored in the sqlite3.aCollSeq hash table contains an
** array of three CollSeq structures. The first is the collation sequence
-** prefferred for UTF-8, the second UTF-16le, and the third UTF-16be.
+** preferred for UTF-8, the second UTF-16le, and the third UTF-16be.
**
** Stored immediately after the three collation sequences is a copy of
** the collation sequence name. A pointer to this string is stored in
@@ -90511,11 +93012,11 @@ static CollSeq *findCollSeqEntry(
int create /* Create a new entry if true */
){
CollSeq *pColl;
- int nName = sqlite3Strlen30(zName);
- pColl = sqlite3HashFind(&db->aCollSeq, zName, nName);
+ pColl = sqlite3HashFind(&db->aCollSeq, zName);
if( 0==pColl && create ){
- pColl = sqlite3DbMallocZero(db, 3*sizeof(*pColl) + nName + 1 );
+ int nName = sqlite3Strlen30(zName);
+ pColl = sqlite3DbMallocZero(db, 3*sizeof(*pColl) + nName + 1);
if( pColl ){
CollSeq *pDel = 0;
pColl[0].zName = (char*)&pColl[3];
@@ -90526,7 +93027,7 @@ static CollSeq *findCollSeqEntry(
pColl[2].enc = SQLITE_UTF16BE;
memcpy(pColl[0].zName, zName, nName);
pColl[0].zName[nName] = 0;
- pDel = sqlite3HashInsert(&db->aCollSeq, pColl[0].zName, nName, pColl);
+ pDel = sqlite3HashInsert(&db->aCollSeq, pColl[0].zName, pColl);
/* If a malloc() failure occurred in sqlite3HashInsert(), it will
** return the pColl pointer to be deleted (because it wasn't added
@@ -90926,7 +93427,7 @@ SQLITE_PRIVATE void sqlite3MaterializeView(
Parse *pParse, /* Parsing context */
Table *pView, /* View definition */
Expr *pWhere, /* Optional WHERE clause to be added */
- int iCur /* Cursor number for ephemerial table */
+ int iCur /* Cursor number for ephemeral table */
){
SelectDest dest;
Select *pSel;
@@ -91084,7 +93585,7 @@ SQLITE_PRIVATE void sqlite3DeleteFrom(
int addrBypass = 0; /* Address of jump over the delete logic */
int addrLoop = 0; /* Top of the delete loop */
int addrDelete = 0; /* Jump directly to the delete logic */
- int addrEphOpen = 0; /* Instruction to open the Ephermeral table */
+ int addrEphOpen = 0; /* Instruction to open the Ephemeral table */
#ifndef SQLITE_OMIT_TRIGGER
int isView; /* True if attempting to delete from a view */
@@ -91164,7 +93665,7 @@ SQLITE_PRIVATE void sqlite3DeleteFrom(
sqlite3BeginWriteOperation(pParse, 1, iDb);
/* If we are trying to delete from a view, realize that view into
- ** a ephemeral table.
+ ** an ephemeral table.
*/
#if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER)
if( isView ){
@@ -91218,7 +93719,7 @@ SQLITE_PRIVATE void sqlite3DeleteFrom(
iRowSet = ++pParse->nMem;
sqlite3VdbeAddOp2(v, OP_Null, 0, iRowSet);
}else{
- /* For a WITHOUT ROWID table, create an ephermeral table used to
+ /* For a WITHOUT ROWID table, create an ephemeral table used to
** hold all primary keys for rows to be deleted. */
pPk = sqlite3PrimaryKeyIndex(pTab);
assert( pPk!=0 );
@@ -91302,10 +93803,11 @@ SQLITE_PRIVATE void sqlite3DeleteFrom(
** triggers.
*/
if( !isView ){
+ testcase( IsVirtual(pTab) );
sqlite3OpenTableAndIndices(pParse, pTab, OP_OpenWrite, iTabCur, aToOpen,
&iDataCur, &iIdxCur);
- assert( pPk || iDataCur==iTabCur );
- assert( pPk || iIdxCur==iDataCur+1 );
+ assert( pPk || IsVirtual(pTab) || iDataCur==iTabCur );
+ assert( pPk || IsVirtual(pTab) || iIdxCur==iDataCur+1 );
}
/* Set up a loop over the rowids/primary-keys that were found in the
@@ -91313,9 +93815,10 @@ SQLITE_PRIVATE void sqlite3DeleteFrom(
*/
if( okOnePass ){
/* Just one row. Hence the top-of-loop is a no-op */
- assert( nKey==nPk ); /* OP_Found will use an unpacked key */
+ assert( nKey==nPk ); /* OP_Found will use an unpacked key */
+ assert( !IsVirtual(pTab) );
if( aToOpen[iDataCur-iTabCur] ){
- assert( pPk!=0 );
+ assert( pPk!=0 || pTab->pSelect!=0 );
sqlite3VdbeAddOp4Int(v, OP_NotFound, iDataCur, addrBypass, iKey, nKey);
VdbeCoverage(v);
}
@@ -91391,7 +93894,7 @@ delete_from_cleanup:
return;
}
/* Make sure "isView" and other macros defined above are undefined. Otherwise
-** thely may interfere with compilation of other functions in this file
+** they may interfere with compilation of other functions in this file
** (or in another file, if this file becomes part of the amalgamation). */
#ifdef isView
#undef isView
@@ -91685,7 +94188,7 @@ SQLITE_PRIVATE void sqlite3ResolvePartIdxLabel(Parse *pParse, int iLabel){
** May you share freely, never taking more than you give.
**
*************************************************************************
-** This file contains the C-language implementions for many of the SQL
+** This file contains the C-language implementations for many of the SQL
** functions of SQLite. (Some function, and in particular the date and
** time functions, are implemented separately.)
*/
@@ -91696,7 +94199,10 @@ SQLITE_PRIVATE void sqlite3ResolvePartIdxLabel(Parse *pParse, int iLabel){
** Return the collating function associated with a function.
*/
static CollSeq *sqlite3GetFuncCollSeq(sqlite3_context *context){
- return context->pColl;
+ VdbeOp *pOp = &context->pVdbe->aOp[context->iOp-1];
+ assert( pOp->opcode==OP_CollSeq );
+ assert( pOp->p4type==P4_COLLSEQ );
+ return pOp->p4.pColl;
}
/*
@@ -91999,13 +94505,14 @@ static void substrFunc(
for(z2=z; *z2 && p2; p2--){
SQLITE_SKIP_UTF8(z2);
}
- sqlite3_result_text(context, (char*)z, (int)(z2-z), SQLITE_TRANSIENT);
+ sqlite3_result_text64(context, (char*)z, z2-z, SQLITE_TRANSIENT,
+ SQLITE_UTF8);
}else{
if( p1+p2>len ){
p2 = len-p1;
if( p2<0 ) p2 = 0;
}
- sqlite3_result_blob(context, (char*)&z[p1], (int)p2, SQLITE_TRANSIENT);
+ sqlite3_result_blob64(context, (char*)&z[p1], (u64)p2, SQLITE_TRANSIENT);
}
}
@@ -92064,7 +94571,7 @@ static void *contextMalloc(sqlite3_context *context, i64 nByte){
sqlite3_result_error_toobig(context);
z = 0;
}else{
- z = sqlite3Malloc((int)nByte);
+ z = sqlite3Malloc(nByte);
if( !z ){
sqlite3_result_error_nomem(context);
}
@@ -92240,10 +94747,12 @@ struct compareInfo {
** whereas only characters less than 0x80 do in ASCII.
*/
#if defined(SQLITE_EBCDIC)
-# define sqlite3Utf8Read(A) (*((*A)++))
-# define GlobUpperToLower(A) A = sqlite3UpperToLower[A]
+# define sqlite3Utf8Read(A) (*((*A)++))
+# define GlobUpperToLower(A) A = sqlite3UpperToLower[A]
+# define GlobUpperToLowerAscii(A) A = sqlite3UpperToLower[A]
#else
-# define GlobUpperToLower(A) if( !((A)&~0x7f) ){ A = sqlite3UpperToLower[A]; }
+# define GlobUpperToLower(A) if( A<=0x7f ){ A = sqlite3UpperToLower[A]; }
+# define GlobUpperToLowerAscii(A) A = sqlite3UpperToLower[A]
#endif
static const struct compareInfo globInfo = { '*', '?', '[', 0 };
@@ -92256,7 +94765,7 @@ static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };
/*
** Compare two UTF-8 strings for equality where the first string can
-** potentially be a "glob" expression. Return true (1) if they
+** potentially be a "glob" or "like" expression. Return true (1) if they
** are the same and false (0) if they are different.
**
** Globbing rules:
@@ -92276,11 +94785,18 @@ static const struct compareInfo likeInfoAlt = { '%', '_', 0, 0 };
** "[a-z]" matches any single lower-case letter. To match a '-', make
** it the last character in the list.
**
-** This routine is usually quick, but can be N**2 in the worst case.
+** Like matching rules:
+**
+** '%' Matches any sequence of zero or more characters
**
-** Hints: to match '*' or '?', put them in "[]". Like this:
+*** '_' Matches any one character
**
-** abc[*]xyz Matches "abc*xyz" only
+** Ec Where E is the "esc" character and c is any other
+** character, including '%', '_', and esc, match exactly c.
+**
+** The comments through this routine usually assume glob matching.
+**
+** This routine is usually quick, but can be N**2 in the worst case.
*/
static int patternCompare(
const u8 *zPattern, /* The glob pattern */
@@ -92288,17 +94804,25 @@ static int patternCompare(
const struct compareInfo *pInfo, /* Information about how to do the compare */
u32 esc /* The escape character */
){
- u32 c, c2;
- int invert;
- int seen;
- u8 matchOne = pInfo->matchOne;
- u8 matchAll = pInfo->matchAll;
- u8 matchSet = pInfo->matchSet;
- u8 noCase = pInfo->noCase;
- int prevEscape = 0; /* True if the previous character was 'escape' */
+ u32 c, c2; /* Next pattern and input string chars */
+ u32 matchOne = pInfo->matchOne; /* "?" or "_" */
+ u32 matchAll = pInfo->matchAll; /* "*" or "%" */
+ u32 matchOther; /* "[" or the escape character */
+ u8 noCase = pInfo->noCase; /* True if uppercase==lowercase */
+ const u8 *zEscaped = 0; /* One past the last escaped input char */
+
+ /* The GLOB operator does not have an ESCAPE clause. And LIKE does not
+ ** have the matchSet operator. So we either have to look for one or
+ ** the other, never both. Hence the single variable matchOther is used
+ ** to store the one we have to look for.
+ */
+ matchOther = esc ? esc : pInfo->matchSet;
while( (c = sqlite3Utf8Read(&zPattern))!=0 ){
- if( c==matchAll && !prevEscape ){
+ if( c==matchAll ){ /* Match "*" */
+ /* Skip over multiple "*" characters in the pattern. If there
+ ** are also "?" characters, skip those as well, but consume a
+ ** single character of the input string for each "?" skipped */
while( (c=sqlite3Utf8Read(&zPattern)) == matchAll
|| c == matchOne ){
if( c==matchOne && sqlite3Utf8Read(&zString)==0 ){
@@ -92306,86 +94830,98 @@ static int patternCompare(
}
}
if( c==0 ){
- return 1;
- }else if( c==esc ){
- c = sqlite3Utf8Read(&zPattern);
- if( c==0 ){
- return 0;
- }
- }else if( c==matchSet ){
- assert( esc==0 ); /* This is GLOB, not LIKE */
- assert( matchSet<0x80 ); /* '[' is a single-byte character */
- while( *zString && patternCompare(&zPattern[-1],zString,pInfo,esc)==0 ){
- SQLITE_SKIP_UTF8(zString);
+ return 1; /* "*" at the end of the pattern matches */
+ }else if( c==matchOther ){
+ if( esc ){
+ c = sqlite3Utf8Read(&zPattern);
+ if( c==0 ) return 0;
+ }else{
+ /* "[...]" immediately follows the "*". We have to do a slow
+ ** recursive search in this case, but it is an unusual case. */
+ assert( matchOther<0x80 ); /* '[' is a single-byte character */
+ while( *zString
+ && patternCompare(&zPattern[-1],zString,pInfo,esc)==0 ){
+ SQLITE_SKIP_UTF8(zString);
+ }
+ return *zString!=0;
}
- return *zString!=0;
}
- while( (c2 = sqlite3Utf8Read(&zString))!=0 ){
+
+ /* At this point variable c contains the first character of the
+ ** pattern string past the "*". Search in the input string for the
+ ** first matching character and recursively contine the match from
+ ** that point.
+ **
+ ** For a case-insensitive search, set variable cx to be the same as
+ ** c but in the other case and search the input string for either
+ ** c or cx.
+ */
+ if( c<=0x80 ){
+ u32 cx;
if( noCase ){
- GlobUpperToLower(c2);
- GlobUpperToLower(c);
- while( c2 != 0 && c2 != c ){
- c2 = sqlite3Utf8Read(&zString);
- GlobUpperToLower(c2);
- }
+ cx = sqlite3Toupper(c);
+ c = sqlite3Tolower(c);
}else{
- while( c2 != 0 && c2 != c ){
- c2 = sqlite3Utf8Read(&zString);
- }
+ cx = c;
+ }
+ while( (c2 = *(zString++))!=0 ){
+ if( c2!=c && c2!=cx ) continue;
+ if( patternCompare(zPattern,zString,pInfo,esc) ) return 1;
+ }
+ }else{
+ while( (c2 = sqlite3Utf8Read(&zString))!=0 ){
+ if( c2!=c ) continue;
+ if( patternCompare(zPattern,zString,pInfo,esc) ) return 1;
}
- if( c2==0 ) return 0;
- if( patternCompare(zPattern,zString,pInfo,esc) ) return 1;
}
return 0;
- }else if( c==matchOne && !prevEscape ){
- if( sqlite3Utf8Read(&zString)==0 ){
- return 0;
- }
- }else if( c==matchSet ){
- u32 prior_c = 0;
- assert( esc==0 ); /* This only occurs for GLOB, not LIKE */
- seen = 0;
- invert = 0;
- c = sqlite3Utf8Read(&zString);
- if( c==0 ) return 0;
- c2 = sqlite3Utf8Read(&zPattern);
- if( c2=='^' ){
- invert = 1;
- c2 = sqlite3Utf8Read(&zPattern);
- }
- if( c2==']' ){
- if( c==']' ) seen = 1;
+ }
+ if( c==matchOther ){
+ if( esc ){
+ c = sqlite3Utf8Read(&zPattern);
+ if( c==0 ) return 0;
+ zEscaped = zPattern;
+ }else{
+ u32 prior_c = 0;
+ int seen = 0;
+ int invert = 0;
+ c = sqlite3Utf8Read(&zString);
+ if( c==0 ) return 0;
c2 = sqlite3Utf8Read(&zPattern);
- }
- while( c2 && c2!=']' ){
- if( c2=='-' && zPattern[0]!=']' && zPattern[0]!=0 && prior_c>0 ){
+ if( c2=='^' ){
+ invert = 1;
c2 = sqlite3Utf8Read(&zPattern);
- if( c>=prior_c && c<=c2 ) seen = 1;
- prior_c = 0;
- }else{
- if( c==c2 ){
- seen = 1;
+ }
+ if( c2==']' ){
+ if( c==']' ) seen = 1;
+ c2 = sqlite3Utf8Read(&zPattern);
+ }
+ while( c2 && c2!=']' ){
+ if( c2=='-' && zPattern[0]!=']' && zPattern[0]!=0 && prior_c>0 ){
+ c2 = sqlite3Utf8Read(&zPattern);
+ if( c>=prior_c && c<=c2 ) seen = 1;
+ prior_c = 0;
+ }else{
+ if( c==c2 ){
+ seen = 1;
+ }
+ prior_c = c2;
}
- prior_c = c2;
+ c2 = sqlite3Utf8Read(&zPattern);
}
- c2 = sqlite3Utf8Read(&zPattern);
- }
- if( c2==0 || (seen ^ invert)==0 ){
- return 0;
- }
- }else if( esc==c && !prevEscape ){
- prevEscape = 1;
- }else{
- c2 = sqlite3Utf8Read(&zString);
- if( noCase ){
- GlobUpperToLower(c);
- GlobUpperToLower(c2);
- }
- if( c!=c2 ){
- return 0;
+ if( c2==0 || (seen ^ invert)==0 ){
+ return 0;
+ }
+ continue;
}
- prevEscape = 0;
}
+ c2 = sqlite3Utf8Read(&zString);
+ if( c==c2 ) continue;
+ if( noCase && c<0x80 && c2<0x80 && sqlite3Tolower(c)==sqlite3Tolower(c2) ){
+ continue;
+ }
+ if( c==matchOne && zPattern!=zEscaped && c2!=0 ) continue;
+ return 0;
}
return *zString==0;
}
@@ -92715,7 +95251,7 @@ static void charFunc(
*zOut++ = 0x80 + (u8)(c & 0x3F);
} \
}
- sqlite3_result_text(context, (char*)z, (int)(zOut-z), sqlite3_free);
+ sqlite3_result_text64(context, (char*)z, zOut-z, sqlite3_free, SQLITE_UTF8);
}
/*
@@ -93165,6 +95701,7 @@ static void minmaxStep(
sqlite3SkipAccumulatorLoad(context);
}
}else{
+ pBest->db = sqlite3_context_db_handle(context);
sqlite3VdbeMemCopy(pBest, pArg);
}
}
@@ -93312,7 +95849,7 @@ SQLITE_PRIVATE int sqlite3IsLikeFunction(sqlite3 *db, Expr *pExpr, int *pIsNocas
}
/*
-** All all of the FuncDef structures in the aBuiltinFunc[] array above
+** All of the FuncDef structures in the aBuiltinFunc[] array above
** to the global function hash table. This occurs at start-time (as
** a consequence of calling sqlite3_initialize()).
**
@@ -93336,10 +95873,12 @@ SQLITE_PRIVATE void sqlite3RegisterGlobalFunctions(void){
FUNCTION(trim, 2, 3, 0, trimFunc ),
FUNCTION(min, -1, 0, 1, minmaxFunc ),
FUNCTION(min, 0, 0, 1, 0 ),
- AGGREGATE(min, 1, 0, 1, minmaxStep, minMaxFinalize ),
+ AGGREGATE2(min, 1, 0, 1, minmaxStep, minMaxFinalize,
+ SQLITE_FUNC_MINMAX ),
FUNCTION(max, -1, 1, 1, minmaxFunc ),
FUNCTION(max, 0, 1, 1, 0 ),
- AGGREGATE(max, 1, 1, 1, minmaxStep, minMaxFinalize ),
+ AGGREGATE2(max, 1, 1, 1, minmaxStep, minMaxFinalize,
+ SQLITE_FUNC_MINMAX ),
FUNCTION2(typeof, 1, 0, 0, typeofFunc, SQLITE_FUNC_TYPEOF),
FUNCTION2(length, 1, 0, 0, lengthFunc, SQLITE_FUNC_LENGTH),
FUNCTION(instr, 2, 0, 0, instrFunc ),
@@ -93369,6 +95908,9 @@ SQLITE_PRIVATE void sqlite3RegisterGlobalFunctions(void){
FUNCTION(sqlite_version, 0, 0, 0, versionFunc ),
FUNCTION(sqlite_source_id, 0, 0, 0, sourceidFunc ),
FUNCTION(sqlite_log, 2, 0, 0, errlogFunc ),
+#if SQLITE_USER_AUTHENTICATION
+ FUNCTION(sqlite_crypt, 2, 0, 0, sqlite3CryptFunc ),
+#endif
#ifndef SQLITE_OMIT_COMPILEOPTION_DIAGS
FUNCTION(sqlite_compileoption_used,1, 0, 0, compileoptionusedFunc ),
FUNCTION(sqlite_compileoption_get, 1, 0, 0, compileoptiongetFunc ),
@@ -93389,8 +95931,8 @@ SQLITE_PRIVATE void sqlite3RegisterGlobalFunctions(void){
AGGREGATE(sum, 1, 0, 0, sumStep, sumFinalize ),
AGGREGATE(total, 1, 0, 0, sumStep, totalFinalize ),
AGGREGATE(avg, 1, 0, 0, sumStep, avgFinalize ),
- /* AGGREGATE(count, 0, 0, 0, countStep, countFinalize ), */
- {0,SQLITE_UTF8|SQLITE_FUNC_COUNT,0,0,0,countStep,countFinalize,"count",0,0},
+ AGGREGATE2(count, 0, 0, 0, countStep, countFinalize,
+ SQLITE_FUNC_COUNT ),
AGGREGATE(count, 1, 0, 0, countStep, countFinalize ),
AGGREGATE(group_concat, 1, 0, 0, groupConcatStep, groupConcatFinalize),
AGGREGATE(group_concat, 2, 0, 0, groupConcatStep, groupConcatFinalize),
@@ -93597,7 +96139,7 @@ SQLITE_PRIVATE void sqlite3RegisterGlobalFunctions(void){
**
** 4) No parent key columns were provided explicitly as part of the
** foreign key definition, and the PRIMARY KEY of the parent table
-** consists of a a different number of columns to the child key in
+** consists of a different number of columns to the child key in
** the child table.
**
** then non-zero is returned, and a "foreign key mismatch" error loaded
@@ -94083,8 +96625,7 @@ static void fkScanChildren(
** table).
*/
SQLITE_PRIVATE FKey *sqlite3FkReferences(Table *pTab){
- int nName = sqlite3Strlen30(pTab->zName);
- return (FKey *)sqlite3HashFind(&pTab->pSchema->fkeyHash, pTab->zName, nName);
+ return (FKey *)sqlite3HashFind(&pTab->pSchema->fkeyHash, pTab->zName);
}
/*
@@ -94762,7 +97303,7 @@ SQLITE_PRIVATE void sqlite3FkDelete(sqlite3 *db, Table *pTab){
}else{
void *p = (void *)pFKey->pNextTo;
const char *z = (p ? pFKey->pNextTo->zTo : pFKey->zTo);
- sqlite3HashInsert(&pTab->pSchema->fkeyHash, z, sqlite3Strlen30(z), p);
+ sqlite3HashInsert(&pTab->pSchema->fkeyHash, z, p);
}
if( pFKey->pNextTo ){
pFKey->pNextTo->pPrevTo = pFKey->pPrevTo;
@@ -94845,13 +97386,13 @@ SQLITE_PRIVATE void sqlite3OpenTable(
**
** Character Column affinity
** ------------------------------
-** 'a' TEXT
-** 'b' NONE
-** 'c' NUMERIC
-** 'd' INTEGER
-** 'e' REAL
+** 'A' NONE
+** 'B' TEXT
+** 'C' NUMERIC
+** 'D' INTEGER
+** 'F' REAL
**
-** An extra 'd' is appended to the end of the string to cover the
+** An extra 'D' is appended to the end of the string to cover the
** rowid that appears as the last column in every index.
**
** Memory for the buffer containing the column index affinity string
@@ -94900,11 +97441,11 @@ SQLITE_PRIVATE const char *sqlite3IndexAffinityStr(Vdbe *v, Index *pIdx){
**
** Character Column affinity
** ------------------------------
-** 'a' TEXT
-** 'b' NONE
-** 'c' NUMERIC
-** 'd' INTEGER
-** 'e' REAL
+** 'A' NONE
+** 'B' TEXT
+** 'C' NUMERIC
+** 'D' INTEGER
+** 'E' REAL
*/
SQLITE_PRIVATE void sqlite3TableAffinity(Vdbe *v, Table *pTab, int iReg){
int i;
@@ -95199,7 +97740,7 @@ static int xferOptimization(
** The 4th template is used if the insert statement takes its
** values from a SELECT but the data is being inserted into a table
** that is also read as part of the SELECT. In the third form,
-** we have to use a intermediate table to store the results of
+** we have to use an intermediate table to store the results of
** the select. The template is like this:
**
** X <- A
@@ -95364,7 +97905,7 @@ SQLITE_PRIVATE void sqlite3Insert(
regAutoinc = autoIncBegin(pParse, iDb, pTab);
/* Allocate registers for holding the rowid of the new row,
- ** the content of the new row, and the assemblied row record.
+ ** the content of the new row, and the assembled row record.
*/
regRowid = regIns = pParse->nMem+1;
pParse->nMem += pTab->nCol + 1;
@@ -95816,7 +98357,7 @@ insert_cleanup:
}
/* Make sure "isView" and other macros defined above are undefined. Otherwise
-** thely may interfere with compilation of other functions in this file
+** they may interfere with compilation of other functions in this file
** (or in another file, if this file becomes part of the amalgamation). */
#ifdef isView
#undef isView
@@ -95932,7 +98473,7 @@ SQLITE_PRIVATE void sqlite3GenerateConstraintChecks(
int ix; /* Index loop counter */
int nCol; /* Number of columns */
int onError; /* Conflict resolution strategy */
- int j1; /* Addresss of jump instruction */
+ int j1; /* Address of jump instruction */
int seenReplace = 0; /* True if REPLACE is used to resolve INT PK conflict */
int nPkField; /* Number of fields in PRIMARY KEY. 1 for ROWID tables */
int ipkTop = 0; /* Top of the rowid change constraint check */
@@ -96336,7 +98877,7 @@ SQLITE_PRIVATE void sqlite3CompleteInsertion(
Index *pIdx; /* An index being inserted or updated */
u8 pik_flags; /* flag values passed to the btree insert */
int regData; /* Content registers (after the rowid) */
- int regRec; /* Register holding assemblied record for the table */
+ int regRec; /* Register holding assembled record for the table */
int i; /* Loop counter */
u8 bAffinityDone = 0; /* True if OP_Affinity has been run already */
@@ -96401,6 +98942,9 @@ SQLITE_PRIVATE void sqlite3CompleteInsertion(
** For a WITHOUT ROWID table, *piDataCur will be somewhere in the range
** of *piIdxCurs, depending on where the PRIMARY KEY index appears on the
** pTab->pIndex list.
+**
+** If pTab is a virtual table, then this routine is a no-op and the
+** *piDataCur and *piIdxCur values are left uninitialized.
*/
SQLITE_PRIVATE int sqlite3OpenTableAndIndices(
Parse *pParse, /* Parsing context */
@@ -96419,9 +98963,9 @@ SQLITE_PRIVATE int sqlite3OpenTableAndIndices(
assert( op==OP_OpenRead || op==OP_OpenWrite );
if( IsVirtual(pTab) ){
- assert( aToOpen==0 );
- *piDataCur = 0;
- *piIdxCur = 1;
+ /* This routine is a no-op for virtual tables. Leave the output
+ ** variables *piDataCur and *piIdxCur uninitialized so that valgrind
+ ** can detect if they are used by mistake in the caller. */
return 0;
}
iDb = sqlite3SchemaToIndex(pParse->db, pTab->pSchema);
@@ -96458,7 +99002,7 @@ SQLITE_PRIVATE int sqlite3OpenTableAndIndices(
** The following global variable is incremented whenever the
** transfer optimization is used. This is used for testing
** purposes only - to make sure the transfer optimization really
-** is happening when it is suppose to.
+** is happening when it is supposed to.
*/
SQLITE_API int sqlite3_xferopt_count;
#endif /* SQLITE_TEST */
@@ -96525,7 +99069,7 @@ static int xferCompatibleIndex(Index *pDest, Index *pSrc){
** INSERT INTO tab1 SELECT * FROM tab2;
**
** The xfer optimization transfers raw records from tab2 over to tab1.
-** Columns are not decoded and reassemblied, which greatly improves
+** Columns are not decoded and reassembled, which greatly improves
** performance. Raw index records are transferred in the same way.
**
** The xfer optimization is only attempted if tab1 and tab2 are compatible.
@@ -96853,7 +99397,7 @@ SQLITE_API int sqlite3_exec(
if( zSql==0 ) zSql = "";
sqlite3_mutex_enter(db->mutex);
- sqlite3Error(db, SQLITE_OK, 0);
+ sqlite3Error(db, SQLITE_OK);
while( rc==SQLITE_OK && zSql[0] ){
int nCol;
char **azVals = 0;
@@ -96911,7 +99455,7 @@ SQLITE_API int sqlite3_exec(
rc = SQLITE_ABORT;
sqlite3VdbeFinalize((Vdbe *)pStmt);
pStmt = 0;
- sqlite3Error(db, SQLITE_ABORT, 0);
+ sqlite3Error(db, SQLITE_ABORT);
goto exec_out;
}
}
@@ -96934,14 +99478,14 @@ exec_out:
sqlite3DbFree(db, azCols);
rc = sqlite3ApiExit(db, rc);
- if( rc!=SQLITE_OK && ALWAYS(rc==sqlite3_errcode(db)) && pzErrMsg ){
+ if( rc!=SQLITE_OK && pzErrMsg ){
int nErrMsg = 1 + sqlite3Strlen30(sqlite3_errmsg(db));
*pzErrMsg = sqlite3Malloc(nErrMsg);
if( *pzErrMsg ){
memcpy(*pzErrMsg, sqlite3_errmsg(db), nErrMsg);
}else{
rc = SQLITE_NOMEM;
- sqlite3Error(db, SQLITE_NOMEM, 0);
+ sqlite3Error(db, SQLITE_NOMEM);
}
}else if( pzErrMsg ){
*pzErrMsg = 0;
@@ -97003,7 +99547,7 @@ typedef struct sqlite3_api_routines sqlite3_api_routines;
** WARNING: In order to maintain backwards compatibility, add new
** interfaces to the end of this structure only. If you insert new
** interfaces in the middle of this structure, then older different
-** versions of SQLite will not be able to load each others' shared
+** versions of SQLite will not be able to load each other's shared
** libraries!
*/
struct sqlite3_api_routines {
@@ -97225,11 +99769,28 @@ struct sqlite3_api_routines {
const char *(*uri_parameter)(const char*,const char*);
char *(*vsnprintf)(int,char*,const char*,va_list);
int (*wal_checkpoint_v2)(sqlite3*,const char*,int,int*,int*);
+ /* Version 3.8.7 and later */
+ int (*auto_extension)(void(*)(void));
+ int (*bind_blob64)(sqlite3_stmt*,int,const void*,sqlite3_uint64,
+ void(*)(void*));
+ int (*bind_text64)(sqlite3_stmt*,int,const char*,sqlite3_uint64,
+ void(*)(void*),unsigned char);
+ int (*cancel_auto_extension)(void(*)(void));
+ int (*load_extension)(sqlite3*,const char*,const char*,char**);
+ void *(*malloc64)(sqlite3_uint64);
+ sqlite3_uint64 (*msize)(void*);
+ void *(*realloc64)(void*,sqlite3_uint64);
+ void (*reset_auto_extension)(void);
+ void (*result_blob64)(sqlite3_context*,const void*,sqlite3_uint64,
+ void(*)(void*));
+ void (*result_text64)(sqlite3_context*,const char*,sqlite3_uint64,
+ void(*)(void*), unsigned char);
+ int (*strglob)(const char*,const char*);
};
/*
** The following macros redefine the API routines so that they are
-** redirected throught the global sqlite3_api structure.
+** redirected through the global sqlite3_api structure.
**
** This header file is also used by the loadext.c source file
** (part of the main SQLite library - not an extension) so that
@@ -97442,6 +100003,19 @@ struct sqlite3_api_routines {
#define sqlite3_uri_parameter sqlite3_api->uri_parameter
#define sqlite3_uri_vsnprintf sqlite3_api->vsnprintf
#define sqlite3_wal_checkpoint_v2 sqlite3_api->wal_checkpoint_v2
+/* Version 3.8.7 and later */
+#define sqlite3_auto_extension sqlite3_api->auto_extension
+#define sqlite3_bind_blob64 sqlite3_api->bind_blob64
+#define sqlite3_bind_text64 sqlite3_api->bind_text64
+#define sqlite3_cancel_auto_extension sqlite3_api->cancel_auto_extension
+#define sqlite3_load_extension sqlite3_api->load_extension
+#define sqlite3_malloc64 sqlite3_api->malloc64
+#define sqlite3_msize sqlite3_api->msize
+#define sqlite3_realloc64 sqlite3_api->realloc64
+#define sqlite3_reset_auto_extension sqlite3_api->reset_auto_extension
+#define sqlite3_result_blob64 sqlite3_api->result_blob64
+#define sqlite3_result_text64 sqlite3_api->result_text64
+#define sqlite3_strglob sqlite3_api->strglob
#endif /* SQLITE_CORE */
#ifndef SQLITE_CORE
@@ -97835,7 +100409,20 @@ static const sqlite3_api_routines sqlite3Apis = {
sqlite3_uri_int64,
sqlite3_uri_parameter,
sqlite3_vsnprintf,
- sqlite3_wal_checkpoint_v2
+ sqlite3_wal_checkpoint_v2,
+ /* Version 3.8.7 and later */
+ sqlite3_auto_extension,
+ sqlite3_bind_blob64,
+ sqlite3_bind_text64,
+ sqlite3_cancel_auto_extension,
+ sqlite3_load_extension,
+ sqlite3_malloc64,
+ sqlite3_msize,
+ sqlite3_realloc64,
+ sqlite3_reset_auto_extension,
+ sqlite3_result_blob64,
+ sqlite3_result_text64,
+ sqlite3_strglob
};
/*
@@ -98194,7 +100781,7 @@ SQLITE_PRIVATE void sqlite3AutoLoadExtensions(sqlite3 *db){
sqlite3_mutex_leave(mutex);
zErrmsg = 0;
if( xInit && (rc = xInit(db, &zErrmsg, &sqlite3Apis))!=0 ){
- sqlite3Error(db, rc,
+ sqlite3ErrorWithMsg(db, rc,
"automatic extension loading failed: %s", zErrmsg);
go = 0;
}
@@ -98266,14 +100853,15 @@ SQLITE_PRIVATE void sqlite3AutoLoadExtensions(sqlite3 *db){
#define PragTyp_TABLE_INFO 30
#define PragTyp_TEMP_STORE 31
#define PragTyp_TEMP_STORE_DIRECTORY 32
-#define PragTyp_WAL_AUTOCHECKPOINT 33
-#define PragTyp_WAL_CHECKPOINT 34
-#define PragTyp_ACTIVATE_EXTENSIONS 35
-#define PragTyp_HEXKEY 36
-#define PragTyp_KEY 37
-#define PragTyp_REKEY 38
-#define PragTyp_LOCK_STATUS 39
-#define PragTyp_PARSER_TRACE 40
+#define PragTyp_THREADS 33
+#define PragTyp_WAL_AUTOCHECKPOINT 34
+#define PragTyp_WAL_CHECKPOINT 35
+#define PragTyp_ACTIVATE_EXTENSIONS 36
+#define PragTyp_HEXKEY 37
+#define PragTyp_KEY 38
+#define PragTyp_REKEY 39
+#define PragTyp_LOCK_STATUS 40
+#define PragTyp_PARSER_TRACE 41
#define PragFlag_NeedSchema 0x01
static const struct sPragmaNames {
const char *const zName; /* Name of pragma */
@@ -98623,6 +101211,10 @@ static const struct sPragmaNames {
/* ePragFlag: */ 0,
/* iArg: */ 0 },
#endif
+ { /* zName: */ "threads",
+ /* ePragTyp: */ PragTyp_THREADS,
+ /* ePragFlag: */ 0,
+ /* iArg: */ 0 },
#if !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
{ /* zName: */ "user_version",
/* ePragTyp: */ PragTyp_HEADER_VALUE,
@@ -98670,7 +101262,7 @@ static const struct sPragmaNames {
/* iArg: */ SQLITE_WriteSchema|SQLITE_RecoveryMode },
#endif
};
-/* Number of pragmas: 56 on by default, 69 total. */
+/* Number of pragmas: 57 on by default, 70 total. */
/* End of the automatically generated pragma table.
***************************************************************************/
@@ -99597,6 +102189,12 @@ SQLITE_PRIVATE void sqlite3Pragma(
** in auto-commit mode. */
mask &= ~(SQLITE_ForeignKeys);
}
+#if SQLITE_USER_AUTHENTICATION
+ if( db->auth.authLevel==UAUTH_User ){
+ /* Do not allow non-admin users to modify the schema arbitrarily */
+ mask &= ~(SQLITE_WriteSchema);
+ }
+#endif
if( sqlite3GetBoolean(zRight, 0) ){
db->flags |= mask;
@@ -100478,6 +103076,26 @@ SQLITE_PRIVATE void sqlite3Pragma(
break;
}
+ /*
+ ** PRAGMA threads
+ ** PRAGMA threads = N
+ **
+ ** Configure the maximum number of worker threads. Return the new
+ ** maximum, which might be less than requested.
+ */
+ case PragTyp_THREADS: {
+ sqlite3_int64 N;
+ if( zRight
+ && sqlite3DecOrHexToI64(zRight, &N)==SQLITE_OK
+ && N>=0
+ ){
+ sqlite3_limit(db, SQLITE_LIMIT_WORKER_THREADS, (int)(N&0x7fffffff));
+ }
+ returnSingleInt(pParse, "threads",
+ sqlite3_limit(db, SQLITE_LIMIT_WORKER_THREADS, -1));
+ break;
+ }
+
#if defined(SQLITE_DEBUG) || defined(SQLITE_TEST)
/*
** Report the current state of file logs for all databases
@@ -100894,7 +103512,7 @@ static int sqlite3InitOne(sqlite3 *db, int iDb, char **pzErrMsg){
db->aDb[iDb].zName, zMasterName);
#ifndef SQLITE_OMIT_AUTHORIZATION
{
- int (*xAuth)(void*,int,const char*,const char*,const char*,const char*);
+ sqlite3_xauth xAuth;
xAuth = db->xAuth;
db->xAuth = 0;
#endif
@@ -100960,6 +103578,7 @@ SQLITE_PRIVATE int sqlite3Init(sqlite3 *db, char **pzErrMsg){
int commit_internal = !(db->flags&SQLITE_InternChanges);
assert( sqlite3_mutex_held(db->mutex) );
+ assert( db->init.busy==0 );
rc = SQLITE_OK;
db->init.busy = 1;
for(i=0; rc==SQLITE_OK && i<db->nDb; i++){
@@ -100975,8 +103594,8 @@ SQLITE_PRIVATE int sqlite3Init(sqlite3 *db, char **pzErrMsg){
** schema may contain references to objects in other databases.
*/
#ifndef SQLITE_OMIT_TEMPDB
- if( rc==SQLITE_OK && ALWAYS(db->nDb>1)
- && !DbHasProperty(db, 1, DB_SchemaLoaded) ){
+ assert( db->nDb>1 );
+ if( rc==SQLITE_OK && !DbHasProperty(db, 1, DB_SchemaLoaded) ){
rc = sqlite3InitOne(db, 1, pzErrMsg);
if( rc ){
sqlite3ResetOneSchema(db, 1);
@@ -101159,7 +103778,7 @@ static int sqlite3Prepare(
rc = sqlite3BtreeSchemaLocked(pBt);
if( rc ){
const char *zDb = db->aDb[i].zName;
- sqlite3Error(db, rc, "database schema is locked: %s", zDb);
+ sqlite3ErrorWithMsg(db, rc, "database schema is locked: %s", zDb);
testcase( db->flags & SQLITE_ReadUncommitted );
goto end_prepare;
}
@@ -101176,7 +103795,7 @@ static int sqlite3Prepare(
testcase( nBytes==mxLen );
testcase( nBytes==mxLen+1 );
if( nBytes>mxLen ){
- sqlite3Error(db, SQLITE_TOOBIG, "statement too long");
+ sqlite3ErrorWithMsg(db, SQLITE_TOOBIG, "statement too long");
rc = sqlite3ApiExit(db, SQLITE_TOOBIG);
goto end_prepare;
}
@@ -101243,10 +103862,10 @@ static int sqlite3Prepare(
}
if( zErrMsg ){
- sqlite3Error(db, rc, "%s", zErrMsg);
+ sqlite3ErrorWithMsg(db, rc, "%s", zErrMsg);
sqlite3DbFree(db, zErrMsg);
}else{
- sqlite3Error(db, rc, 0);
+ sqlite3Error(db, rc);
}
/* Delete any TriggerPrg structures allocated while parsing this statement. */
@@ -101468,6 +104087,20 @@ SQLITE_API int sqlite3_prepare16_v2(
*/
/*
+** Trace output macros
+*/
+#if SELECTTRACE_ENABLED
+/***/ int sqlite3SelectTrace = 0;
+# define SELECTTRACE(K,P,S,X) \
+ if(sqlite3SelectTrace&(K)) \
+ sqlite3DebugPrintf("%*s%s.%p: ",(P)->nSelectIndent*2-2,"",(S)->zSelName,(S)),\
+ sqlite3DebugPrintf X
+#else
+# define SELECTTRACE(K,P,S,X)
+#endif
+
+
+/*
** An instance of the following object is used to record information about
** how to process the DISTINCT keyword, to simplify passing that information
** into the selectInnerLoop() routine.
@@ -101579,6 +104212,18 @@ SQLITE_PRIVATE Select *sqlite3SelectNew(
return pNew;
}
+#if SELECTTRACE_ENABLED
+/*
+** Set the name of a Select object
+*/
+SQLITE_PRIVATE void sqlite3SelectSetName(Select *p, const char *zName){
+ if( p && zName ){
+ sqlite3_snprintf(sizeof(p->zSelName), p->zSelName, "%s", zName);
+ }
+}
+#endif
+
+
/*
** Delete the given Select structure and all of its substructures.
*/
@@ -101908,28 +104553,43 @@ static KeyInfo *keyInfoFromExprList(
);
/*
-** Insert code into "v" that will push the record in register regData
-** into the sorter.
+** Generate code that will push the record in registers regData
+** through regData+nData-1 onto the sorter.
*/
static void pushOntoSorter(
Parse *pParse, /* Parser context */
SortCtx *pSort, /* Information about the ORDER BY clause */
Select *pSelect, /* The whole SELECT statement */
- int regData /* Register holding data to be sorted */
+ int regData, /* First register holding data to be sorted */
+ int nData, /* Number of elements in the data array */
+ int nPrefixReg /* No. of reg prior to regData available for use */
){
- Vdbe *v = pParse->pVdbe;
- int nExpr = pSort->pOrderBy->nExpr;
- int regRecord = ++pParse->nMem;
- int regBase = pParse->nMem+1;
- int nOBSat = pSort->nOBSat;
- int op;
+ Vdbe *v = pParse->pVdbe; /* Stmt under construction */
+ int bSeq = ((pSort->sortFlags & SORTFLAG_UseSorter)==0);
+ int nExpr = pSort->pOrderBy->nExpr; /* No. of ORDER BY terms */
+ int nBase = nExpr + bSeq + nData; /* Fields in sorter record */
+ int regBase; /* Regs for sorter record */
+ int regRecord = ++pParse->nMem; /* Assembled sorter record */
+ int nOBSat = pSort->nOBSat; /* ORDER BY terms to skip */
+ int op; /* Opcode to add sorter record to sorter */
- pParse->nMem += nExpr+2; /* nExpr+2 registers allocated at regBase */
- sqlite3ExprCacheClear(pParse);
- sqlite3ExprCodeExprList(pParse, pSort->pOrderBy, regBase, 0);
- sqlite3VdbeAddOp2(v, OP_Sequence, pSort->iECursor, regBase+nExpr);
- sqlite3ExprCodeMove(pParse, regData, regBase+nExpr+1, 1);
- sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase+nOBSat, nExpr+2-nOBSat,regRecord);
+ assert( bSeq==0 || bSeq==1 );
+ if( nPrefixReg ){
+ assert( nPrefixReg==nExpr+bSeq );
+ regBase = regData - nExpr - bSeq;
+ }else{
+ regBase = pParse->nMem + 1;
+ pParse->nMem += nBase;
+ }
+ sqlite3ExprCodeExprList(pParse, pSort->pOrderBy, regBase, SQLITE_ECEL_DUP);
+ if( bSeq ){
+ sqlite3VdbeAddOp2(v, OP_Sequence, pSort->iECursor, regBase+nExpr);
+ }
+ if( nPrefixReg==0 ){
+ sqlite3ExprCodeMove(pParse, regData, regBase+nExpr+bSeq, nData);
+ }
+
+ sqlite3VdbeAddOp3(v, OP_MakeRecord, regBase+nOBSat, nBase-nOBSat, regRecord);
if( nOBSat>0 ){
int regPrevKey; /* The first nOBSat columns of the previous row */
int addrFirst; /* Address of the OP_IfNot opcode */
@@ -101940,12 +104600,17 @@ static void pushOntoSorter(
regPrevKey = pParse->nMem+1;
pParse->nMem += pSort->nOBSat;
- nKey = nExpr - pSort->nOBSat + 1;
- addrFirst = sqlite3VdbeAddOp1(v, OP_IfNot, regBase+nExpr); VdbeCoverage(v);
+ nKey = nExpr - pSort->nOBSat + bSeq;
+ if( bSeq ){
+ addrFirst = sqlite3VdbeAddOp1(v, OP_IfNot, regBase+nExpr);
+ }else{
+ addrFirst = sqlite3VdbeAddOp1(v, OP_SequenceTest, pSort->iECursor);
+ }
+ VdbeCoverage(v);
sqlite3VdbeAddOp3(v, OP_Compare, regPrevKey, regBase, pSort->nOBSat);
pOp = sqlite3VdbeGetOp(v, pSort->addrSortIndex);
if( pParse->db->mallocFailed ) return;
- pOp->p2 = nKey + 1;
+ pOp->p2 = nKey + nData;
pKI = pOp->p4.pKeyInfo;
memset(pKI->aSortOrder, 0, pKI->nField); /* Makes OP_Jump below testable */
sqlite3VdbeChangeP4(v, -1, (char*)pKI, P4_KEYINFO);
@@ -101957,7 +104622,7 @@ static void pushOntoSorter(
sqlite3VdbeAddOp2(v, OP_Gosub, pSort->regReturn, pSort->labelBkOut);
sqlite3VdbeAddOp1(v, OP_ResetSorter, pSort->iECursor);
sqlite3VdbeJumpHere(v, addrFirst);
- sqlite3VdbeAddOp3(v, OP_Move, regBase, regPrevKey, pSort->nOBSat);
+ sqlite3ExprCodeMove(pParse, regBase, regPrevKey, pSort->nOBSat);
sqlite3VdbeJumpHere(v, addrJmp);
}
if( pSort->sortFlags & SORTFLAG_UseSorter ){
@@ -102079,6 +104744,7 @@ static void selectInnerLoop(
int eDest = pDest->eDest; /* How to dispose of results */
int iParm = pDest->iSDParm; /* First argument to disposal method */
int nResultCol; /* Number of result columns */
+ int nPrefixReg = 0; /* Number of extra registers before regResult */
assert( v );
assert( pEList!=0 );
@@ -102094,6 +104760,11 @@ static void selectInnerLoop(
nResultCol = pEList->nExpr;
if( pDest->iSdst==0 ){
+ if( pSort ){
+ nPrefixReg = pSort->pOrderBy->nExpr;
+ if( !(pSort->sortFlags & SORTFLAG_UseSorter) ) nPrefixReg++;
+ pParse->nMem += nPrefixReg;
+ }
pDest->iSdst = pParse->nMem+1;
pParse->nMem += nResultCol;
}else if( pDest->iSdst+nResultCol > pParse->nMem ){
@@ -102210,10 +104881,10 @@ static void selectInnerLoop(
case SRT_DistFifo:
case SRT_Table:
case SRT_EphemTab: {
- int r1 = sqlite3GetTempReg(pParse);
+ int r1 = sqlite3GetTempRange(pParse, nPrefixReg+1);
testcase( eDest==SRT_Table );
testcase( eDest==SRT_EphemTab );
- sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nResultCol, r1);
+ sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nResultCol, r1+nPrefixReg);
#ifndef SQLITE_OMIT_CTE
if( eDest==SRT_DistFifo ){
/* If the destination is DistFifo, then cursor (iParm+1) is open
@@ -102228,7 +104899,7 @@ static void selectInnerLoop(
}
#endif
if( pSort ){
- pushOntoSorter(pParse, pSort, p, r1);
+ pushOntoSorter(pParse, pSort, p, r1+nPrefixReg, 1, nPrefixReg);
}else{
int r2 = sqlite3GetTempReg(pParse);
sqlite3VdbeAddOp2(v, OP_NewRowid, iParm, r2);
@@ -102236,7 +104907,7 @@ static void selectInnerLoop(
sqlite3VdbeChangeP5(v, OPFLAG_APPEND);
sqlite3ReleaseTempReg(pParse, r2);
}
- sqlite3ReleaseTempReg(pParse, r1);
+ sqlite3ReleaseTempRange(pParse, r1, nPrefixReg+1);
break;
}
@@ -102254,7 +104925,7 @@ static void selectInnerLoop(
** ORDER BY in this case since the order of entries in the set
** does not matter. But there might be a LIMIT clause, in which
** case the order does matter */
- pushOntoSorter(pParse, pSort, p, regResult);
+ pushOntoSorter(pParse, pSort, p, regResult, 1, nPrefixReg);
}else{
int r1 = sqlite3GetTempReg(pParse);
sqlite3VdbeAddOp4(v, OP_MakeRecord, regResult,1,r1, &pDest->affSdst, 1);
@@ -102280,9 +104951,9 @@ static void selectInnerLoop(
case SRT_Mem: {
assert( nResultCol==1 );
if( pSort ){
- pushOntoSorter(pParse, pSort, p, regResult);
+ pushOntoSorter(pParse, pSort, p, regResult, 1, nPrefixReg);
}else{
- sqlite3ExprCodeMove(pParse, regResult, iParm, 1);
+ assert( regResult==iParm );
/* The LIMIT clause will jump out of the loop for us */
}
break;
@@ -102294,10 +104965,7 @@ static void selectInnerLoop(
testcase( eDest==SRT_Coroutine );
testcase( eDest==SRT_Output );
if( pSort ){
- int r1 = sqlite3GetTempReg(pParse);
- sqlite3VdbeAddOp3(v, OP_MakeRecord, regResult, nResultCol, r1);
- pushOntoSorter(pParse, pSort, p, r1);
- sqlite3ReleaseTempReg(pParse, r1);
+ pushOntoSorter(pParse, pSort, p, regResult, nResultCol, nPrefixReg);
}else if( eDest==SRT_Coroutine ){
sqlite3VdbeAddOp1(v, OP_Yield, pDest->iSDParm);
}else{
@@ -102440,7 +105108,7 @@ SQLITE_PRIVATE int sqlite3KeyInfoIsWriteable(KeyInfo *p){ return p->nRef==1; }
** then the KeyInfo structure is appropriate for initializing a virtual
** index to implement a DISTINCT test.
**
-** Space to hold the KeyInfo structure is obtain from malloc. The calling
+** Space to hold the KeyInfo structure is obtained from malloc. The calling
** function is responsible for seeing that this structure is eventually
** freed.
*/
@@ -102577,46 +105245,58 @@ static void generateSortTail(
int addr;
int addrOnce = 0;
int iTab;
- int pseudoTab = 0;
ExprList *pOrderBy = pSort->pOrderBy;
int eDest = pDest->eDest;
int iParm = pDest->iSDParm;
int regRow;
int regRowid;
int nKey;
+ int iSortTab; /* Sorter cursor to read from */
+ int nSortData; /* Trailing values to read from sorter */
+ int i;
+ int bSeq; /* True if sorter record includes seq. no. */
+#ifdef SQLITE_ENABLE_EXPLAIN_COMMENTS
+ struct ExprList_item *aOutEx = p->pEList->a;
+#endif
if( pSort->labelBkOut ){
sqlite3VdbeAddOp2(v, OP_Gosub, pSort->regReturn, pSort->labelBkOut);
sqlite3VdbeAddOp2(v, OP_Goto, 0, addrBreak);
sqlite3VdbeResolveLabel(v, pSort->labelBkOut);
- addrOnce = sqlite3CodeOnce(pParse); VdbeCoverage(v);
}
iTab = pSort->iECursor;
- regRow = sqlite3GetTempReg(pParse);
if( eDest==SRT_Output || eDest==SRT_Coroutine ){
- pseudoTab = pParse->nTab++;
- sqlite3VdbeAddOp3(v, OP_OpenPseudo, pseudoTab, regRow, nColumn);
regRowid = 0;
+ regRow = pDest->iSdst;
+ nSortData = nColumn;
}else{
regRowid = sqlite3GetTempReg(pParse);
+ regRow = sqlite3GetTempReg(pParse);
+ nSortData = 1;
}
nKey = pOrderBy->nExpr - pSort->nOBSat;
if( pSort->sortFlags & SORTFLAG_UseSorter ){
int regSortOut = ++pParse->nMem;
- int ptab2 = pParse->nTab++;
- sqlite3VdbeAddOp3(v, OP_OpenPseudo, ptab2, regSortOut, nKey+2);
+ iSortTab = pParse->nTab++;
+ if( pSort->labelBkOut ){
+ addrOnce = sqlite3CodeOnce(pParse); VdbeCoverage(v);
+ }
+ sqlite3VdbeAddOp3(v, OP_OpenPseudo, iSortTab, regSortOut, nKey+1+nSortData);
if( addrOnce ) sqlite3VdbeJumpHere(v, addrOnce);
addr = 1 + sqlite3VdbeAddOp2(v, OP_SorterSort, iTab, addrBreak);
VdbeCoverage(v);
codeOffset(v, p->iOffset, addrContinue);
- sqlite3VdbeAddOp2(v, OP_SorterData, iTab, regSortOut);
- sqlite3VdbeAddOp3(v, OP_Column, ptab2, nKey+1, regRow);
- sqlite3VdbeChangeP5(v, OPFLAG_CLEARCACHE);
+ sqlite3VdbeAddOp3(v, OP_SorterData, iTab, regSortOut, iSortTab);
+ bSeq = 0;
}else{
- if( addrOnce ) sqlite3VdbeJumpHere(v, addrOnce);
addr = 1 + sqlite3VdbeAddOp2(v, OP_Sort, iTab, addrBreak); VdbeCoverage(v);
codeOffset(v, p->iOffset, addrContinue);
- sqlite3VdbeAddOp3(v, OP_Column, iTab, nKey+1, regRow);
+ iSortTab = iTab;
+ bSeq = 1;
+ }
+ for(i=0; i<nSortData; i++){
+ sqlite3VdbeAddOp3(v, OP_Column, iSortTab, nKey+bSeq+i, regRow+i);
+ VdbeComment((v, "%s", aOutEx[i].zName ? aOutEx[i].zName : aOutEx[i].zSpan));
}
switch( eDest ){
case SRT_Table:
@@ -102645,17 +105325,9 @@ static void generateSortTail(
}
#endif
default: {
- int i;
assert( eDest==SRT_Output || eDest==SRT_Coroutine );
testcase( eDest==SRT_Output );
testcase( eDest==SRT_Coroutine );
- for(i=0; i<nColumn; i++){
- assert( regRow!=pDest->iSdst+i );
- sqlite3VdbeAddOp3(v, OP_Column, pseudoTab, i, pDest->iSdst+i);
- if( i==0 ){
- sqlite3VdbeChangeP5(v, OPFLAG_CLEARCACHE);
- }
- }
if( eDest==SRT_Output ){
sqlite3VdbeAddOp2(v, OP_ResultRow, pDest->iSdst, nColumn);
sqlite3ExprCacheAffinityChange(pParse, pDest->iSdst, nColumn);
@@ -102665,9 +105337,10 @@ static void generateSortTail(
break;
}
}
- sqlite3ReleaseTempReg(pParse, regRow);
- sqlite3ReleaseTempReg(pParse, regRowid);
-
+ if( regRowid ){
+ sqlite3ReleaseTempReg(pParse, regRow);
+ sqlite3ReleaseTempReg(pParse, regRowid);
+ }
/* The bottom of the loop
*/
sqlite3VdbeResolveLabel(v, addrContinue);
@@ -102962,7 +105635,7 @@ static void generateColumnNames(
}
/*
-** Given a an expression list (which is really the list of expressions
+** Given an expression list (which is really the list of expressions
** that form the result set of a SELECT statement) compute appropriate
** column names for a table that would hold the expression list.
**
@@ -103035,7 +105708,7 @@ static int selectColumnsFromExprList(
}
/* Make sure the column name is unique. If the name is not unique,
- ** append a integer to the name so that it becomes unique.
+ ** append an integer to the name so that it becomes unique.
*/
nName = sqlite3Strlen30(zName);
for(j=cnt=0; j<i; j++){
@@ -104519,7 +107192,7 @@ static void substSelect(
**
** SELECT x+y AS a FROM t1 WHERE z<100 AND a>5
**
-** The code generated for this simpification gives the same result
+** The code generated for this simplification gives the same result
** but only has to scan the data once. And because indices might
** exist on the table t1, a complete scan of the data might be
** avoided.
@@ -104552,8 +107225,10 @@ static void substSelect(
** (9) The subquery does not use LIMIT or the outer query does not use
** aggregates.
**
-** (10) The subquery does not use aggregates or the outer query does not
-** use LIMIT.
+** (**) Restriction (10) was removed from the code on 2005-02-05 but we
+** accidently carried the comment forward until 2014-09-15. Original
+** text: "The subquery does not use aggregates or the outer query does not
+** use LIMIT."
**
** (11) The subquery and the outer query do not both have ORDER BY clauses.
**
@@ -104616,6 +107291,11 @@ static void substSelect(
** parent to a compound query confuses the code that handles
** recursive queries in multiSelect().
**
+** (24) The subquery is not an aggregate that uses the built-in min() or
+** or max() functions. (Without this restriction, a query like:
+** "SELECT x FROM (SELECT max(y), x FROM t1)" would not necessarily
+** return the value X for which Y was maximal.)
+**
**
** In this routine, the "p" parameter is a pointer to the outer query.
** The subquery is p->pSrc->a[iFrom]. isAgg is true if the outer query
@@ -104663,7 +107343,7 @@ static int flattenSubquery(
pSubSrc = pSub->pSrc;
assert( pSubSrc );
/* Prior to version 3.1.2, when LIMIT and OFFSET had to be simple constants,
- ** not arbitrary expresssions, we allowed some combining of LIMIT and OFFSET
+ ** not arbitrary expressions, we allowed some combining of LIMIT and OFFSET
** because they could be computed at compile-time. But when LIMIT and OFFSET
** became arbitrary expressions, we were forced to add restrictions (13)
** and (14). */
@@ -104688,8 +107368,14 @@ static int flattenSubquery(
if( pSub->pLimit && (p->selFlags & SF_Distinct)!=0 ){
return 0; /* Restriction (21) */
}
- if( pSub->selFlags & SF_Recursive ) return 0; /* Restriction (22) */
- if( (p->selFlags & SF_Recursive) && pSub->pPrior ) return 0; /* (23) */
+ testcase( pSub->selFlags & SF_Recursive );
+ testcase( pSub->selFlags & SF_MinMaxAgg );
+ if( pSub->selFlags & (SF_Recursive|SF_MinMaxAgg) ){
+ return 0; /* Restrictions (22) and (24) */
+ }
+ if( (p->selFlags & SF_Recursive) && pSub->pPrior ){
+ return 0; /* Restriction (23) */
+ }
/* OBSOLETE COMMENT 1:
** Restriction 3: If the subquery is a join, make sure the subquery is
@@ -104763,6 +107449,8 @@ static int flattenSubquery(
}
/***** If we reach this point, flattening is permitted. *****/
+ SELECTTRACE(1,pParse,p,("flatten %s.%p from term %d\n",
+ pSub->zSelName, pSub, iFrom));
/* Authorize the subquery */
pParse->zAuthContext = pSubitem->zName;
@@ -104815,6 +107503,7 @@ static int flattenSubquery(
p->pLimit = 0;
p->pOffset = 0;
pNew = sqlite3SelectDup(db, p, 0);
+ sqlite3SelectSetName(pNew, pSub->zSelName);
p->pOffset = pOffset;
p->pLimit = pLimit;
p->pOrderBy = pOrderBy;
@@ -104827,6 +107516,9 @@ static int flattenSubquery(
if( pPrior ) pPrior->pNext = pNew;
pNew->pNext = p;
p->pPrior = pNew;
+ SELECTTRACE(2,pParse,p,
+ ("compound-subquery flattener creates %s.%p as peer\n",
+ pNew->zSelName, pNew));
}
if( db->mallocFailed ) return 1;
}
@@ -104956,8 +107648,23 @@ static int flattenSubquery(
pParent->pHaving = substExpr(db, pParent->pHaving, iParent, pSub->pEList);
}
if( pSub->pOrderBy ){
+ /* At this point, any non-zero iOrderByCol values indicate that the
+ ** ORDER BY column expression is identical to the iOrderByCol'th
+ ** expression returned by SELECT statement pSub. Since these values
+ ** do not necessarily correspond to columns in SELECT statement pParent,
+ ** zero them before transfering the ORDER BY clause.
+ **
+ ** Not doing this may cause an error if a subsequent call to this
+ ** function attempts to flatten a compound sub-query into pParent
+ ** (the only way this can happen is if the compound sub-query is
+ ** currently part of pSub->pSrc). See ticket [d11a6e908f]. */
+ ExprList *pOrderBy = pSub->pOrderBy;
+ for(i=0; i<pOrderBy->nExpr; i++){
+ pOrderBy->a[i].u.x.iOrderByCol = 0;
+ }
assert( pParent->pOrderBy==0 );
- pParent->pOrderBy = pSub->pOrderBy;
+ assert( pSub->pPrior==0 );
+ pParent->pOrderBy = pOrderBy;
pSub->pOrderBy = 0;
}else if( pParent->pOrderBy ){
substExprList(db, pParent->pOrderBy, iParent, pSub->pEList);
@@ -105003,6 +107710,13 @@ static int flattenSubquery(
*/
sqlite3SelectDelete(db, pSub1);
+#if SELECTTRACE_ENABLED
+ if( sqlite3SelectTrace & 0x100 ){
+ sqlite3DebugPrintf("After flattening:\n");
+ sqlite3TreeViewSelect(0, p, 0);
+ }
+#endif
+
return 1;
}
#endif /* !defined(SQLITE_OMIT_SUBQUERY) || !defined(SQLITE_OMIT_VIEW) */
@@ -105049,7 +107763,7 @@ static u8 minMaxQuery(AggInfo *pAggInfo, ExprList **ppMinMax){
/*
** The select statement passed as the first argument is an aggregate query.
-** The second argment is the associated aggregate-info object. This
+** The second argument is the associated aggregate-info object. This
** function tests if the SELECT is of the form:
**
** SELECT count(*) FROM <tbl>
@@ -105379,10 +108093,10 @@ static void selectPopWith(Walker *pWalker, Select *p){
** fill pTabList->a[].pSelect with a copy of the SELECT statement
** that implements the view. A copy is made of the view's SELECT
** statement so that we can freely modify or delete that statement
-** without worrying about messing up the presistent representation
+** without worrying about messing up the persistent representation
** of the view.
**
-** (3) Add terms to the WHERE clause to accomodate the NATURAL keyword
+** (3) Add terms to the WHERE clause to accommodate the NATURAL keyword
** on joins and the ON and USING clause of joins.
**
** (4) Scan the list of columns in the result set (pEList) looking
@@ -105473,6 +108187,7 @@ static int selectExpander(Walker *pWalker, Select *p){
if( sqlite3ViewGetColumnNames(pParse, pTab) ) return WRC_Abort;
assert( pFrom->pSelect==0 );
pFrom->pSelect = sqlite3SelectDup(db, pTab->pSelect, 0);
+ sqlite3SelectSetName(pFrom->pSelect, pTab->zName);
sqlite3WalkSelect(pWalker, pFrom->pSelect);
}
#endif
@@ -106007,6 +108722,13 @@ SQLITE_PRIVATE int sqlite3Select(
}
if( sqlite3AuthCheck(pParse, SQLITE_SELECT, 0, 0, 0) ) return 1;
memset(&sAggInfo, 0, sizeof(sAggInfo));
+#if SELECTTRACE_ENABLED
+ pParse->nSelectIndent++;
+ SELECTTRACE(1,pParse,p, ("begin processing:\n"));
+ if( sqlite3SelectTrace & 0x100 ){
+ sqlite3TreeViewSelect(0, p, 0);
+ }
+#endif
assert( p->pOrderBy==0 || pDest->eDest!=SRT_DistFifo );
assert( p->pOrderBy==0 || pDest->eDest!=SRT_Fifo );
@@ -106163,6 +108885,10 @@ SQLITE_PRIVATE int sqlite3Select(
if( p->pPrior ){
rc = multiSelect(pParse, p, pDest);
explainSetInteger(pParse->iSelectId, iRestoreSelectId);
+#if SELECTTRACE_ENABLED
+ SELECTTRACE(1,pParse,p,("end compound-select processing\n"));
+ pParse->nSelectIndent--;
+#endif
return rc;
}
#endif
@@ -106208,8 +108934,9 @@ SQLITE_PRIVATE int sqlite3Select(
sSort.iECursor = pParse->nTab++;
sSort.addrSortIndex =
sqlite3VdbeAddOp4(v, OP_OpenEphemeral,
- sSort.iECursor, sSort.pOrderBy->nExpr+2, 0,
- (char*)pKeyInfo, P4_KEYINFO);
+ sSort.iECursor, sSort.pOrderBy->nExpr+1+pEList->nExpr, 0,
+ (char*)pKeyInfo, P4_KEYINFO
+ );
}else{
sSort.addrSortIndex = -1;
}
@@ -106340,7 +109067,7 @@ SQLITE_PRIVATE int sqlite3Select(
sNC.pSrcList = pTabList;
sNC.pAggInfo = &sAggInfo;
sAggInfo.mnReg = pParse->nMem+1;
- sAggInfo.nSortingColumn = pGroupBy ? pGroupBy->nExpr+1 : 0;
+ sAggInfo.nSortingColumn = pGroupBy ? pGroupBy->nExpr : 0;
sAggInfo.pGroupBy = pGroupBy;
sqlite3ExprAnalyzeAggList(&sNC, pEList);
sqlite3ExprAnalyzeAggList(&sNC, sSort.pOrderBy);
@@ -106433,8 +109160,8 @@ SQLITE_PRIVATE int sqlite3Select(
groupBySort = 1;
nGroupBy = pGroupBy->nExpr;
- nCol = nGroupBy + 1;
- j = nGroupBy+1;
+ nCol = nGroupBy;
+ j = nGroupBy;
for(i=0; i<sAggInfo.nColumn; i++){
if( sAggInfo.aCol[i].iSorterColumn>=j ){
nCol++;
@@ -106444,8 +109171,7 @@ SQLITE_PRIVATE int sqlite3Select(
regBase = sqlite3GetTempRange(pParse, nCol);
sqlite3ExprCacheClear(pParse);
sqlite3ExprCodeExprList(pParse, pGroupBy, regBase, 0);
- sqlite3VdbeAddOp2(v, OP_Sequence, sAggInfo.sortingIdx,regBase+nGroupBy);
- j = nGroupBy+1;
+ j = nGroupBy;
for(i=0; i<sAggInfo.nColumn; i++){
struct AggInfo_col *pCol = &sAggInfo.aCol[i];
if( pCol->iSorterColumn>=j ){
@@ -106498,12 +109224,11 @@ SQLITE_PRIVATE int sqlite3Select(
addrTopOfLoop = sqlite3VdbeCurrentAddr(v);
sqlite3ExprCacheClear(pParse);
if( groupBySort ){
- sqlite3VdbeAddOp2(v, OP_SorterData, sAggInfo.sortingIdx, sortOut);
+ sqlite3VdbeAddOp3(v, OP_SorterData, sAggInfo.sortingIdx, sortOut,sortPTab);
}
for(j=0; j<pGroupBy->nExpr; j++){
if( groupBySort ){
sqlite3VdbeAddOp3(v, OP_Column, sortPTab, j, iBMem+j);
- if( j==0 ) sqlite3VdbeChangeP5(v, OPFLAG_CLEARCACHE);
}else{
sAggInfo.directMode = 1;
sqlite3ExprCode(pParse, pGroupBy->a[j].pExpr, iBMem+j);
@@ -106762,103 +109487,106 @@ select_end:
sqlite3DbFree(db, sAggInfo.aCol);
sqlite3DbFree(db, sAggInfo.aFunc);
+#if SELECTTRACE_ENABLED
+ SELECTTRACE(1,pParse,p,("end processing\n"));
+ pParse->nSelectIndent--;
+#endif
return rc;
}
-#if defined(SQLITE_ENABLE_TREE_EXPLAIN)
+#ifdef SQLITE_DEBUG
/*
** Generate a human-readable description of a the Select object.
*/
-static void explainOneSelect(Vdbe *pVdbe, Select *p){
- sqlite3ExplainPrintf(pVdbe, "SELECT ");
- if( p->selFlags & (SF_Distinct|SF_Aggregate) ){
- if( p->selFlags & SF_Distinct ){
- sqlite3ExplainPrintf(pVdbe, "DISTINCT ");
- }
- if( p->selFlags & SF_Aggregate ){
- sqlite3ExplainPrintf(pVdbe, "agg_flag ");
- }
- sqlite3ExplainNL(pVdbe);
- sqlite3ExplainPrintf(pVdbe, " ");
- }
- sqlite3ExplainExprList(pVdbe, p->pEList);
- sqlite3ExplainNL(pVdbe);
+SQLITE_PRIVATE void sqlite3TreeViewSelect(TreeView *pView, const Select *p, u8 moreToFollow){
+ int n = 0;
+ pView = sqlite3TreeViewPush(pView, moreToFollow);
+ sqlite3TreeViewLine(pView, "SELECT%s%s",
+ ((p->selFlags & SF_Distinct) ? " DISTINCT" : ""),
+ ((p->selFlags & SF_Aggregate) ? " agg_flag" : "")
+ );
+ if( p->pSrc && p->pSrc->nSrc ) n++;
+ if( p->pWhere ) n++;
+ if( p->pGroupBy ) n++;
+ if( p->pHaving ) n++;
+ if( p->pOrderBy ) n++;
+ if( p->pLimit ) n++;
+ if( p->pOffset ) n++;
+ if( p->pPrior ) n++;
+ sqlite3TreeViewExprList(pView, p->pEList, (n--)>0, "result-set");
if( p->pSrc && p->pSrc->nSrc ){
int i;
- sqlite3ExplainPrintf(pVdbe, "FROM ");
- sqlite3ExplainPush(pVdbe);
+ pView = sqlite3TreeViewPush(pView, (n--)>0);
+ sqlite3TreeViewLine(pView, "FROM");
for(i=0; i<p->pSrc->nSrc; i++){
struct SrcList_item *pItem = &p->pSrc->a[i];
- sqlite3ExplainPrintf(pVdbe, "{%d,*} = ", pItem->iCursor);
- if( pItem->pSelect ){
- sqlite3ExplainSelect(pVdbe, pItem->pSelect);
- if( pItem->pTab ){
- sqlite3ExplainPrintf(pVdbe, " (tabname=%s)", pItem->pTab->zName);
- }
+ StrAccum x;
+ char zLine[100];
+ sqlite3StrAccumInit(&x, zLine, sizeof(zLine), 0);
+ sqlite3XPrintf(&x, 0, "{%d,*}", pItem->iCursor);
+ if( pItem->zDatabase ){
+ sqlite3XPrintf(&x, 0, " %s.%s", pItem->zDatabase, pItem->zName);
}else if( pItem->zName ){
- sqlite3ExplainPrintf(pVdbe, "%s", pItem->zName);
+ sqlite3XPrintf(&x, 0, " %s", pItem->zName);
+ }
+ if( pItem->pTab ){
+ sqlite3XPrintf(&x, 0, " tabname=%Q", pItem->pTab->zName);
}
if( pItem->zAlias ){
- sqlite3ExplainPrintf(pVdbe, " (AS %s)", pItem->zAlias);
+ sqlite3XPrintf(&x, 0, " (AS %s)", pItem->zAlias);
}
if( pItem->jointype & JT_LEFT ){
- sqlite3ExplainPrintf(pVdbe, " LEFT-JOIN");
+ sqlite3XPrintf(&x, 0, " LEFT-JOIN");
+ }
+ sqlite3StrAccumFinish(&x);
+ sqlite3TreeViewItem(pView, zLine, i<p->pSrc->nSrc-1);
+ if( pItem->pSelect ){
+ sqlite3TreeViewSelect(pView, pItem->pSelect, 0);
}
- sqlite3ExplainNL(pVdbe);
+ sqlite3TreeViewPop(pView);
}
- sqlite3ExplainPop(pVdbe);
+ sqlite3TreeViewPop(pView);
}
if( p->pWhere ){
- sqlite3ExplainPrintf(pVdbe, "WHERE ");
- sqlite3ExplainExpr(pVdbe, p->pWhere);
- sqlite3ExplainNL(pVdbe);
+ sqlite3TreeViewItem(pView, "WHERE", (n--)>0);
+ sqlite3TreeViewExpr(pView, p->pWhere, 0);
+ sqlite3TreeViewPop(pView);
}
if( p->pGroupBy ){
- sqlite3ExplainPrintf(pVdbe, "GROUPBY ");
- sqlite3ExplainExprList(pVdbe, p->pGroupBy);
- sqlite3ExplainNL(pVdbe);
+ sqlite3TreeViewExprList(pView, p->pGroupBy, (n--)>0, "GROUPBY");
}
if( p->pHaving ){
- sqlite3ExplainPrintf(pVdbe, "HAVING ");
- sqlite3ExplainExpr(pVdbe, p->pHaving);
- sqlite3ExplainNL(pVdbe);
+ sqlite3TreeViewItem(pView, "HAVING", (n--)>0);
+ sqlite3TreeViewExpr(pView, p->pHaving, 0);
+ sqlite3TreeViewPop(pView);
}
if( p->pOrderBy ){
- sqlite3ExplainPrintf(pVdbe, "ORDERBY ");
- sqlite3ExplainExprList(pVdbe, p->pOrderBy);
- sqlite3ExplainNL(pVdbe);
+ sqlite3TreeViewExprList(pView, p->pOrderBy, (n--)>0, "ORDERBY");
}
if( p->pLimit ){
- sqlite3ExplainPrintf(pVdbe, "LIMIT ");
- sqlite3ExplainExpr(pVdbe, p->pLimit);
- sqlite3ExplainNL(pVdbe);
+ sqlite3TreeViewItem(pView, "LIMIT", (n--)>0);
+ sqlite3TreeViewExpr(pView, p->pLimit, 0);
+ sqlite3TreeViewPop(pView);
}
if( p->pOffset ){
- sqlite3ExplainPrintf(pVdbe, "OFFSET ");
- sqlite3ExplainExpr(pVdbe, p->pOffset);
- sqlite3ExplainNL(pVdbe);
- }
-}
-SQLITE_PRIVATE void sqlite3ExplainSelect(Vdbe *pVdbe, Select *p){
- if( p==0 ){
- sqlite3ExplainPrintf(pVdbe, "(null-select)");
- return;
+ sqlite3TreeViewItem(pView, "OFFSET", (n--)>0);
+ sqlite3TreeViewExpr(pView, p->pOffset, 0);
+ sqlite3TreeViewPop(pView);
}
- sqlite3ExplainPush(pVdbe);
- while( p ){
- explainOneSelect(pVdbe, p);
- p = p->pNext;
- if( p==0 ) break;
- sqlite3ExplainNL(pVdbe);
- sqlite3ExplainPrintf(pVdbe, "%s\n", selectOpName(p->op));
+ if( p->pPrior ){
+ const char *zOp = "UNION";
+ switch( p->op ){
+ case TK_ALL: zOp = "UNION ALL"; break;
+ case TK_INTERSECT: zOp = "INTERSECT"; break;
+ case TK_EXCEPT: zOp = "EXCEPT"; break;
+ }
+ sqlite3TreeViewItem(pView, zOp, (n--)>0);
+ sqlite3TreeViewSelect(pView, p->pPrior, 0);
+ sqlite3TreeViewPop(pView);
}
- sqlite3ExplainPrintf(pVdbe, "END");
- sqlite3ExplainPop(pVdbe);
+ sqlite3TreeViewPop(pView);
}
-
-/* End of the structure debug printing code
-*****************************************************************************/
-#endif /* defined(SQLITE_ENABLE_TREE_EXPLAIN) */
+#endif /* SQLITE_DEBUG */
/************** End of select.c **********************************************/
/************** Begin file table.c *******************************************/
@@ -106892,10 +109620,10 @@ SQLITE_PRIVATE void sqlite3ExplainSelect(Vdbe *pVdbe, Select *p){
typedef struct TabResult {
char **azResult; /* Accumulated output */
char *zErrMsg; /* Error message text, if an error occurs */
- int nAlloc; /* Slots allocated for azResult[] */
- int nRow; /* Number of rows in the result */
- int nColumn; /* Number of columns in the result */
- int nData; /* Slots used in azResult[]. (nRow+1)*nColumn */
+ u32 nAlloc; /* Slots allocated for azResult[] */
+ u32 nRow; /* Number of rows in the result */
+ u32 nColumn; /* Number of columns in the result */
+ u32 nData; /* Slots used in azResult[]. (nRow+1)*nColumn */
int rc; /* Return code from sqlite3_exec() */
} TabResult;
@@ -106921,7 +109649,7 @@ static int sqlite3_get_table_cb(void *pArg, int nCol, char **argv, char **colv){
if( p->nData + need > p->nAlloc ){
char **azNew;
p->nAlloc = p->nAlloc*2 + need;
- azNew = sqlite3_realloc( p->azResult, sizeof(char*)*p->nAlloc );
+ azNew = sqlite3_realloc64( p->azResult, sizeof(char*)*p->nAlloc );
if( azNew==0 ) goto malloc_failed;
p->azResult = azNew;
}
@@ -106936,7 +109664,7 @@ static int sqlite3_get_table_cb(void *pArg, int nCol, char **argv, char **colv){
if( z==0 ) goto malloc_failed;
p->azResult[p->nData++] = z;
}
- }else if( p->nColumn!=nCol ){
+ }else if( (int)p->nColumn!=nCol ){
sqlite3_free(p->zErrMsg);
p->zErrMsg = sqlite3_mprintf(
"sqlite3_get_table() called with two or more incompatible queries"
@@ -107045,7 +109773,7 @@ SQLITE_API int sqlite3_get_table(
** This routine frees the space the sqlite3_get_table() malloced.
*/
SQLITE_API void sqlite3_free_table(
- char **azResult /* Result returned from from sqlite3_get_table() */
+ char **azResult /* Result returned from sqlite3_get_table() */
){
if( azResult ){
int i, n;
@@ -107189,7 +109917,7 @@ SQLITE_PRIVATE void sqlite3BeginTrigger(
** ^^^^^^^^
**
** To maintain backwards compatibility, ignore the database
- ** name on pTableName if we are reparsing our of SQLITE_MASTER.
+ ** name on pTableName if we are reparsing out of SQLITE_MASTER.
*/
if( db->init.busy && iDb!=1 ){
sqlite3DbFree(db, pTableName->a[0].zDatabase);
@@ -107242,8 +109970,7 @@ SQLITE_PRIVATE void sqlite3BeginTrigger(
goto trigger_cleanup;
}
assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
- if( sqlite3HashFind(&(db->aDb[iDb].pSchema->trigHash),
- zName, sqlite3Strlen30(zName)) ){
+ if( sqlite3HashFind(&(db->aDb[iDb].pSchema->trigHash),zName) ){
if( !noErr ){
sqlite3ErrorMsg(pParse, "trigger %T already exists", pName);
}else{
@@ -107386,13 +110113,12 @@ SQLITE_PRIVATE void sqlite3FinishTrigger(
Trigger *pLink = pTrig;
Hash *pHash = &db->aDb[iDb].pSchema->trigHash;
assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
- pTrig = sqlite3HashInsert(pHash, zName, sqlite3Strlen30(zName), pTrig);
+ pTrig = sqlite3HashInsert(pHash, zName, pTrig);
if( pTrig ){
db->mallocFailed = 1;
}else if( pLink->pSchema==pLink->pTabSchema ){
Table *pTab;
- int n = sqlite3Strlen30(pLink->table);
- pTab = sqlite3HashFind(&pLink->pTabSchema->tblHash, pLink->table, n);
+ pTab = sqlite3HashFind(&pLink->pTabSchema->tblHash, pLink->table);
assert( pTab!=0 );
pLink->pNext = pTab->pTrigger;
pTab->pTrigger = pLink;
@@ -107551,7 +110277,6 @@ SQLITE_PRIVATE void sqlite3DropTrigger(Parse *pParse, SrcList *pName, int noErr)
int i;
const char *zDb;
const char *zName;
- int nName;
sqlite3 *db = pParse->db;
if( db->mallocFailed ) goto drop_trigger_cleanup;
@@ -107562,13 +110287,12 @@ SQLITE_PRIVATE void sqlite3DropTrigger(Parse *pParse, SrcList *pName, int noErr)
assert( pName->nSrc==1 );
zDb = pName->a[0].zDatabase;
zName = pName->a[0].zName;
- nName = sqlite3Strlen30(zName);
assert( zDb!=0 || sqlite3BtreeHoldsAllMutexes(db) );
for(i=OMIT_TEMPDB; i<db->nDb; i++){
int j = (i<2) ? i^1 : i; /* Search TEMP before MAIN */
if( zDb && sqlite3StrICmp(db->aDb[j].zName, zDb) ) continue;
assert( sqlite3SchemaMutexHeld(db, j, 0) );
- pTrigger = sqlite3HashFind(&(db->aDb[j].pSchema->trigHash), zName, nName);
+ pTrigger = sqlite3HashFind(&(db->aDb[j].pSchema->trigHash), zName);
if( pTrigger ) break;
}
if( !pTrigger ){
@@ -107591,8 +110315,7 @@ drop_trigger_cleanup:
** is set on.
*/
static Table *tableOfTrigger(Trigger *pTrigger){
- int n = sqlite3Strlen30(pTrigger->table);
- return sqlite3HashFind(&pTrigger->pTabSchema->tblHash, pTrigger->table, n);
+ return sqlite3HashFind(&pTrigger->pTabSchema->tblHash, pTrigger->table);
}
@@ -107664,7 +110387,7 @@ SQLITE_PRIVATE void sqlite3UnlinkAndDeleteTrigger(sqlite3 *db, int iDb, const ch
assert( sqlite3SchemaMutexHeld(db, iDb, 0) );
pHash = &(db->aDb[iDb].pSchema->trigHash);
- pTrigger = sqlite3HashInsert(pHash, zName, sqlite3Strlen30(zName), 0);
+ pTrigger = sqlite3HashInsert(pHash, zName, 0);
if( ALWAYS(pTrigger) ){
if( pTrigger->pSchema==pTrigger->pTabSchema ){
Table *pTab = tableOfTrigger(pTrigger);
@@ -108515,7 +111238,7 @@ SQLITE_PRIVATE void sqlite3Update(
}
/* If we are trying to update a view, realize that view into
- ** a ephemeral table.
+ ** an ephemeral table.
*/
#if !defined(SQLITE_OMIT_VIEW) && !defined(SQLITE_OMIT_TRIGGER)
if( isView ){
@@ -108619,8 +111342,8 @@ SQLITE_PRIVATE void sqlite3Update(
/* Top of the update loop */
if( okOnePass ){
- if( aToOpen[iDataCur-iBaseCur] ){
- assert( pPk!=0 );
+ if( aToOpen[iDataCur-iBaseCur] && !isView ){
+ assert( pPk );
sqlite3VdbeAddOp4Int(v, OP_NotFound, iDataCur, labelBreak, regKey, nKey);
VdbeCoverageNeverTaken(v);
}
@@ -108676,7 +111399,7 @@ SQLITE_PRIVATE void sqlite3Update(
}
/* Populate the array of registers beginning at regNew with the new
- ** row data. This array is used to check constaints, create the new
+ ** row data. This array is used to check constants, create the new
** table and index records, and as the values for any new.* references
** made by triggers.
**
@@ -108856,7 +111579,7 @@ update_cleanup:
return;
}
/* Make sure "isView" and other macros defined above are undefined. Otherwise
-** thely may interfere with compilation of other functions in this file
+** they may interfere with compilation of other functions in this file
** (or in another file, if this file becomes part of the amalgamation). */
#ifdef isView
#undef isView
@@ -108869,7 +111592,7 @@ update_cleanup:
/*
** Generate code for an UPDATE of a virtual table.
**
-** The strategy is that we create an ephemerial table that contains
+** The strategy is that we create an ephemeral table that contains
** for each row to be changed:
**
** (A) The original rowid of that row.
@@ -108877,7 +111600,7 @@ update_cleanup:
** (C) The content of every column in the row.
**
** Then we loop over this ephemeral table and for each row in
-** the ephermeral table call VUpdate.
+** the ephemeral table call VUpdate.
**
** When finished, drop the ephemeral table.
**
@@ -109050,7 +111773,7 @@ static int execExecSql(sqlite3 *db, char **pzErrMsg, const char *zSql){
** step (3) requires additional temporary disk space approximately equal
** to the size of the original database for the rollback journal.
** Hence, temporary disk space that is approximately 2x the size of the
-** orginal database is required. Every page of the database is written
+** original database is required. Every page of the database is written
** approximately 3 times: Once for step (2) and twice for step (3).
** Two writes per page are required in step (3) because the original
** database content must be written into the rollback journal prior to
@@ -109377,7 +112100,7 @@ static int createModule(
sqlite3_mutex_enter(db->mutex);
nName = sqlite3Strlen30(zName);
- if( sqlite3HashFind(&db->aModule, zName, nName) ){
+ if( sqlite3HashFind(&db->aModule, zName) ){
rc = SQLITE_MISUSE_BKPT;
}else{
Module *pMod;
@@ -109390,7 +112113,7 @@ static int createModule(
pMod->pModule = pModule;
pMod->pAux = pAux;
pMod->xDestroy = xDestroy;
- pDel = (Module *)sqlite3HashInsert(&db->aModule,zCopy,nName,(void*)pMod);
+ pDel = (Module *)sqlite3HashInsert(&db->aModule,zCopy,(void*)pMod);
assert( pDel==0 || pDel==pMod );
if( pDel ){
db->mallocFailed = 1;
@@ -109759,9 +112482,8 @@ SQLITE_PRIVATE void sqlite3VtabFinishParse(Parse *pParse, Token *pEnd){
Table *pOld;
Schema *pSchema = pTab->pSchema;
const char *zName = pTab->zName;
- int nName = sqlite3Strlen30(zName);
assert( sqlite3SchemaMutexHeld(db, 0, pSchema) );
- pOld = sqlite3HashInsert(&pSchema->tblHash, zName, nName, pTab);
+ pOld = sqlite3HashInsert(&pSchema->tblHash, zName, pTab);
if( pOld ){
db->mallocFailed = 1;
assert( pTab==pOld ); /* Malloc must have failed inside HashInsert() */
@@ -109854,6 +112576,7 @@ static int vtabCallConstructor(
}else if( ALWAYS(pVTable->pVtab) ){
/* Justification of ALWAYS(): A correct vtab constructor must allocate
** the sqlite3_vtab object if successful. */
+ memset(pVTable->pVtab, 0, sizeof(pVTable->pVtab[0]));
pVTable->pVtab->pModule = pMod->pModule;
pVTable->nRef = 1;
if( sCtx.pTab ){
@@ -109927,7 +112650,7 @@ SQLITE_PRIVATE int sqlite3VtabCallConnect(Parse *pParse, Table *pTab){
/* Locate the required virtual table module */
zMod = pTab->azModuleArg[0];
- pMod = (Module*)sqlite3HashFind(&db->aModule, zMod, sqlite3Strlen30(zMod));
+ pMod = (Module*)sqlite3HashFind(&db->aModule, zMod);
if( !pMod ){
const char *zModule = pTab->azModuleArg[0];
@@ -109995,7 +112718,7 @@ SQLITE_PRIVATE int sqlite3VtabCallCreate(sqlite3 *db, int iDb, const char *zTab,
/* Locate the required virtual table module */
zMod = pTab->azModuleArg[0];
- pMod = (Module*)sqlite3HashFind(&db->aModule, zMod, sqlite3Strlen30(zMod));
+ pMod = (Module*)sqlite3HashFind(&db->aModule, zMod);
/* If the module has been registered and includes a Create method,
** invoke it now. If the module has not been registered, return an
@@ -110034,7 +112757,7 @@ SQLITE_API int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable){
sqlite3_mutex_enter(db->mutex);
if( !db->pVtabCtx || !(pTab = db->pVtabCtx->pTab) ){
- sqlite3Error(db, SQLITE_MISUSE, 0);
+ sqlite3Error(db, SQLITE_MISUSE);
sqlite3_mutex_leave(db->mutex);
return SQLITE_MISUSE_BKPT;
}
@@ -110062,7 +112785,7 @@ SQLITE_API int sqlite3_declare_vtab(sqlite3 *db, const char *zCreateTable){
}
db->pVtabCtx->pTab = 0;
}else{
- sqlite3Error(db, SQLITE_ERROR, (zErr ? "%s" : 0), zErr);
+ sqlite3ErrorWithMsg(db, SQLITE_ERROR, (zErr ? "%s" : 0), zErr);
sqlite3DbFree(db, zErr);
rc = SQLITE_ERROR;
}
@@ -110423,7 +113146,7 @@ SQLITE_API int sqlite3_vtab_config(sqlite3 *db, int op, ...){
}
va_end(ap);
- if( rc!=SQLITE_OK ) sqlite3Error(db, rc, 0);
+ if( rc!=SQLITE_OK ) sqlite3Error(db, rc);
sqlite3_mutex_leave(db->mutex);
return rc;
}
@@ -110630,7 +113353,7 @@ static int whereLoopResize(sqlite3*, WhereLoop*, int);
** 1. Then using those as a basis to compute the N best WherePath objects
** of length 2. And so forth until the length of WherePaths equals the
** number of nodes in the FROM clause. The best (lowest cost) WherePath
-** at the end is the choosen query plan.
+** at the end is the chosen query plan.
*/
struct WherePath {
Bitmask maskLoop; /* Bitmask of all WhereLoop objects in this path */
@@ -111263,11 +113986,6 @@ static int allowedOp(int op){
}
/*
-** Swap two objects of type TYPE.
-*/
-#define SWAP(TYPE,A,B) {TYPE t=A; A=B; B=t;}
-
-/*
** Commute a comparison operator. Expressions of the form "X op Y"
** are converted into "Y op X".
**
@@ -111599,7 +114317,7 @@ static int isLikeOrGlob(
** value of the variable means there is no need to invoke the LIKE
** function, then no OP_Variable will be added to the program.
** This causes problems for the sqlite3_bind_parameter_name()
- ** API. To workaround them, add a dummy OP_Variable here.
+ ** API. To work around them, add a dummy OP_Variable here.
*/
int r1 = sqlite3GetTempReg(pParse);
sqlite3ExprCodeTarget(pParse, pRight, r1);
@@ -111719,7 +114437,7 @@ static void transferJoinMarkings(Expr *pDerived, Expr *pBase){
** appropriate for indexing exist.
**
** All examples A through E above satisfy case 2. But if a term
-** also statisfies case 1 (such as B) we know that the optimizer will
+** also satisfies case 1 (such as B) we know that the optimizer will
** always prefer case 1, so in that case we pretend that case 2 is not
** satisfied.
**
@@ -111877,7 +114595,7 @@ static void exprAnalyzeOrTerm(
}
if( (chngToIN & getMask(&pWInfo->sMaskSet, pOrTerm->leftCursor))==0 ){
/* This term must be of the form t1.a==t2.b where t2 is in the
- ** chngToIN set but t1 is not. This term will be either preceeded
+ ** chngToIN set but t1 is not. This term will be either preceded
** or follwed by an inverted copy (t2.b==t1.a). Skip this term
** and use its inversion. */
testcase( pOrTerm->wtFlags & TERM_COPIED );
@@ -112288,7 +115006,7 @@ static void exprAnalyze(
}
/*
-** This function searches pList for a entry that matches the iCol-th column
+** This function searches pList for an entry that matches the iCol-th column
** of index pIdx.
**
** If such an expression is found, its index in pList->a[] is returned. If
@@ -112811,7 +115529,7 @@ static void whereKeyStats(
assert( pRec->nField>0 && iCol<pIdx->nSampleCol );
do{
iTest = (iMin+i)/2;
- res = sqlite3VdbeRecordCompare(aSample[iTest].n, aSample[iTest].p, pRec, 0);
+ res = sqlite3VdbeRecordCompare(aSample[iTest].n, aSample[iTest].p, pRec);
if( res<0 ){
iMin = iTest+1;
}else{
@@ -112826,16 +115544,16 @@ static void whereKeyStats(
if( res==0 ){
/* If (res==0) is true, then sample $i must be equal to pRec */
assert( i<pIdx->nSample );
- assert( 0==sqlite3VdbeRecordCompare(aSample[i].n, aSample[i].p, pRec, 0)
+ assert( 0==sqlite3VdbeRecordCompare(aSample[i].n, aSample[i].p, pRec)
|| pParse->db->mallocFailed );
}else{
/* Otherwise, pRec must be smaller than sample $i and larger than
** sample ($i-1). */
assert( i==pIdx->nSample
- || sqlite3VdbeRecordCompare(aSample[i].n, aSample[i].p, pRec, 0)>0
+ || sqlite3VdbeRecordCompare(aSample[i].n, aSample[i].p, pRec)>0
|| pParse->db->mallocFailed );
assert( i==0
- || sqlite3VdbeRecordCompare(aSample[i-1].n, aSample[i-1].p, pRec, 0)<0
+ || sqlite3VdbeRecordCompare(aSample[i-1].n, aSample[i-1].p, pRec)<0
|| pParse->db->mallocFailed );
}
#endif /* ifdef SQLITE_DEBUG */
@@ -113038,7 +115756,7 @@ static int whereRangeSkipScanEst(
** number of rows that the index scan is expected to visit without
** considering the range constraints. If nEq is 0, this is the number of
** rows in the index. Assuming no error occurs, *pnOut is adjusted (reduced)
-** to account for the range contraints pLower and pUpper.
+** to account for the range constraints pLower and pUpper.
**
** In the absence of sqlite_stat4 ANALYZE data, or if such data cannot be
** used, a single range inequality reduces the search space by a factor of 4.
@@ -113089,6 +115807,10 @@ static int whereRangeScanEst(
tRowcnt iLower;
tRowcnt iUpper;
+ if( pRec ){
+ testcase( pRec->nField!=pBuilder->nRecValid );
+ pRec->nField = pBuilder->nRecValid;
+ }
if( nEq==p->nKeyCol ){
aff = SQLITE_AFF_INTEGER;
}else{
@@ -113106,18 +115828,26 @@ static int whereRangeScanEst(
iUpper = a[0] + a[1];
}
+ assert( pLower==0 || (pLower->eOperator & (WO_GT|WO_GE))!=0 );
+ assert( pUpper==0 || (pUpper->eOperator & (WO_LT|WO_LE))!=0 );
+ assert( p->aSortOrder!=0 );
+ if( p->aSortOrder[nEq] ){
+ /* The roles of pLower and pUpper are swapped for a DESC index */
+ SWAP(WhereTerm*, pLower, pUpper);
+ }
+
/* If possible, improve on the iLower estimate using ($P:$L). */
if( pLower ){
int bOk; /* True if value is extracted from pExpr */
Expr *pExpr = pLower->pExpr->pRight;
- assert( (pLower->eOperator & (WO_GT|WO_GE))!=0 );
rc = sqlite3Stat4ProbeSetValue(pParse, p, &pRec, pExpr, aff, nEq, &bOk);
if( rc==SQLITE_OK && bOk ){
tRowcnt iNew;
whereKeyStats(pParse, p, pRec, 0, a);
- iNew = a[0] + ((pLower->eOperator & WO_GT) ? a[1] : 0);
+ iNew = a[0] + ((pLower->eOperator & (WO_GT|WO_LE)) ? a[1] : 0);
if( iNew>iLower ) iLower = iNew;
nOut--;
+ pLower = 0;
}
}
@@ -113125,14 +115855,14 @@ static int whereRangeScanEst(
if( pUpper ){
int bOk; /* True if value is extracted from pExpr */
Expr *pExpr = pUpper->pExpr->pRight;
- assert( (pUpper->eOperator & (WO_LT|WO_LE))!=0 );
rc = sqlite3Stat4ProbeSetValue(pParse, p, &pRec, pExpr, aff, nEq, &bOk);
if( rc==SQLITE_OK && bOk ){
tRowcnt iNew;
whereKeyStats(pParse, p, pRec, 1, a);
- iNew = a[0] + ((pUpper->eOperator & WO_LE) ? a[1] : 0);
+ iNew = a[0] + ((pUpper->eOperator & (WO_GT|WO_LE)) ? a[1] : 0);
if( iNew<iUpper ) iUpper = iNew;
nOut--;
+ pUpper = 0;
}
}
@@ -113146,10 +115876,8 @@ static int whereRangeScanEst(
if( nNew<nOut ){
nOut = nNew;
}
- pLoop->nOut = (LogEst)nOut;
- WHERETRACE(0x10, ("range scan regions: %u..%u est=%d\n",
+ WHERETRACE(0x10, ("STAT4 range scan: %u..%u est=%d\n",
(u32)iLower, (u32)iUpper, nOut));
- return SQLITE_OK;
}
}else{
int bDone = 0;
@@ -113160,8 +115888,8 @@ static int whereRangeScanEst(
#else
UNUSED_PARAMETER(pParse);
UNUSED_PARAMETER(pBuilder);
-#endif
assert( pLower || pUpper );
+#endif
assert( pUpper==0 || (pUpper->wtFlags & TERM_VNULL)==0 );
nNew = whereRangeAdjust(pLower, nOut);
nNew = whereRangeAdjust(pUpper, nNew);
@@ -113176,6 +115904,12 @@ static int whereRangeScanEst(
nOut -= (pLower!=0) + (pUpper!=0);
if( nNew<10 ) nNew = 10;
if( nNew<nOut ) nOut = nNew;
+#if defined(WHERETRACE_ENABLED)
+ if( pLoop->nOut>nOut ){
+ WHERETRACE(0x10,("Range scan lowers nOut from %d to %d\n",
+ pLoop->nOut, nOut));
+ }
+#endif
pLoop->nOut = (LogEst)nOut;
return rc;
}
@@ -113288,7 +116022,7 @@ static int whereInScanEst(
if( rc==SQLITE_OK ){
if( nRowEst > nRow0 ) nRowEst = nRow0;
*pnRow = nRowEst;
- WHERETRACE(0x10,("IN row estimate: est=%g\n", nRowEst));
+ WHERETRACE(0x10,("IN row estimate: est=%d\n", nRowEst));
}
assert( pBuilder->nRecValid==nRecValid );
return rc;
@@ -113624,9 +116358,8 @@ static void explainAppendTerm(
/*
** Argument pLevel describes a strategy for scanning table pTab. This
-** function returns a pointer to a string buffer containing a description
-** of the subset of table rows scanned by the strategy in the form of an
-** SQL expression. Or, if all rows are scanned, NULL is returned.
+** function appends text to pStr that describes the subset of table
+** rows scanned by the strategy in the form of an SQL expression.
**
** For example, if the query:
**
@@ -113636,49 +116369,37 @@ static void explainAppendTerm(
** string similar to:
**
** "a=? AND b>?"
-**
-** The returned pointer points to memory obtained from sqlite3DbMalloc().
-** It is the responsibility of the caller to free the buffer when it is
-** no longer required.
*/
-static char *explainIndexRange(sqlite3 *db, WhereLoop *pLoop, Table *pTab){
+static void explainIndexRange(StrAccum *pStr, WhereLoop *pLoop, Table *pTab){
Index *pIndex = pLoop->u.btree.pIndex;
u16 nEq = pLoop->u.btree.nEq;
u16 nSkip = pLoop->u.btree.nSkip;
int i, j;
Column *aCol = pTab->aCol;
i16 *aiColumn = pIndex->aiColumn;
- StrAccum txt;
- if( nEq==0 && (pLoop->wsFlags & (WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))==0 ){
- return 0;
- }
- sqlite3StrAccumInit(&txt, 0, 0, SQLITE_MAX_LENGTH);
- txt.db = db;
- sqlite3StrAccumAppend(&txt, " (", 2);
+ if( nEq==0 && (pLoop->wsFlags&(WHERE_BTM_LIMIT|WHERE_TOP_LIMIT))==0 ) return;
+ sqlite3StrAccumAppend(pStr, " (", 2);
for(i=0; i<nEq; i++){
char *z = aiColumn[i] < 0 ? "rowid" : aCol[aiColumn[i]].zName;
if( i>=nSkip ){
- explainAppendTerm(&txt, i, z, "=");
+ explainAppendTerm(pStr, i, z, "=");
}else{
- if( i ) sqlite3StrAccumAppend(&txt, " AND ", 5);
- sqlite3StrAccumAppend(&txt, "ANY(", 4);
- sqlite3StrAccumAppendAll(&txt, z);
- sqlite3StrAccumAppend(&txt, ")", 1);
+ if( i ) sqlite3StrAccumAppend(pStr, " AND ", 5);
+ sqlite3XPrintf(pStr, 0, "ANY(%s)", z);
}
}
j = i;
if( pLoop->wsFlags&WHERE_BTM_LIMIT ){
char *z = aiColumn[j] < 0 ? "rowid" : aCol[aiColumn[j]].zName;
- explainAppendTerm(&txt, i++, z, ">");
+ explainAppendTerm(pStr, i++, z, ">");
}
if( pLoop->wsFlags&WHERE_TOP_LIMIT ){
char *z = aiColumn[j] < 0 ? "rowid" : aCol[aiColumn[j]].zName;
- explainAppendTerm(&txt, i, z, "<");
+ explainAppendTerm(pStr, i, z, "<");
}
- sqlite3StrAccumAppend(&txt, ")", 1);
- return sqlite3StrAccumFinish(&txt);
+ sqlite3StrAccumAppend(pStr, ")", 1);
}
/*
@@ -113702,11 +116423,13 @@ static void explainOneScan(
struct SrcList_item *pItem = &pTabList->a[pLevel->iFrom];
Vdbe *v = pParse->pVdbe; /* VM being constructed */
sqlite3 *db = pParse->db; /* Database handle */
- char *zMsg; /* Text to add to EQP output */
int iId = pParse->iSelectId; /* Select id (left-most output column) */
int isSearch; /* True for a SEARCH. False for SCAN. */
WhereLoop *pLoop; /* The controlling WhereLoop object */
u32 flags; /* Flags that describe this loop */
+ char *zMsg; /* Text to add to EQP output */
+ StrAccum str; /* EQP output string */
+ char zBuf[100]; /* Initial space for EQP output string */
pLoop = pLevel->pWLoop;
flags = pLoop->wsFlags;
@@ -113716,54 +116439,70 @@ static void explainOneScan(
|| ((flags&WHERE_VIRTUALTABLE)==0 && (pLoop->u.btree.nEq>0))
|| (wctrlFlags&(WHERE_ORDERBY_MIN|WHERE_ORDERBY_MAX));
- zMsg = sqlite3MPrintf(db, "%s", isSearch?"SEARCH":"SCAN");
+ sqlite3StrAccumInit(&str, zBuf, sizeof(zBuf), SQLITE_MAX_LENGTH);
+ str.db = db;
+ sqlite3StrAccumAppendAll(&str, isSearch ? "SEARCH" : "SCAN");
if( pItem->pSelect ){
- zMsg = sqlite3MAppendf(db, zMsg, "%s SUBQUERY %d", zMsg,pItem->iSelectId);
+ sqlite3XPrintf(&str, 0, " SUBQUERY %d", pItem->iSelectId);
}else{
- zMsg = sqlite3MAppendf(db, zMsg, "%s TABLE %s", zMsg, pItem->zName);
+ sqlite3XPrintf(&str, 0, " TABLE %s", pItem->zName);
}
if( pItem->zAlias ){
- zMsg = sqlite3MAppendf(db, zMsg, "%s AS %s", zMsg, pItem->zAlias);
+ sqlite3XPrintf(&str, 0, " AS %s", pItem->zAlias);
}
- if( (flags & (WHERE_IPK|WHERE_VIRTUALTABLE))==0
- && ALWAYS(pLoop->u.btree.pIndex!=0)
- ){
- const char *zFmt;
- Index *pIdx = pLoop->u.btree.pIndex;
- char *zWhere = explainIndexRange(db, pLoop, pItem->pTab);
+ if( (flags & (WHERE_IPK|WHERE_VIRTUALTABLE))==0 ){
+ const char *zFmt = 0;
+ Index *pIdx;
+
+ assert( pLoop->u.btree.pIndex!=0 );
+ pIdx = pLoop->u.btree.pIndex;
assert( !(flags&WHERE_AUTO_INDEX) || (flags&WHERE_IDX_ONLY) );
if( !HasRowid(pItem->pTab) && IsPrimaryKeyIndex(pIdx) ){
- zFmt = zWhere ? "%s USING PRIMARY KEY%.0s%s" : "%s%.0s%s";
+ if( isSearch ){
+ zFmt = "PRIMARY KEY";
+ }
}else if( flags & WHERE_AUTO_INDEX ){
- zFmt = "%s USING AUTOMATIC COVERING INDEX%.0s%s";
+ zFmt = "AUTOMATIC COVERING INDEX";
}else if( flags & WHERE_IDX_ONLY ){
- zFmt = "%s USING COVERING INDEX %s%s";
+ zFmt = "COVERING INDEX %s";
}else{
- zFmt = "%s USING INDEX %s%s";
+ zFmt = "INDEX %s";
+ }
+ if( zFmt ){
+ sqlite3StrAccumAppend(&str, " USING ", 7);
+ sqlite3XPrintf(&str, 0, zFmt, pIdx->zName);
+ explainIndexRange(&str, pLoop, pItem->pTab);
}
- zMsg = sqlite3MAppendf(db, zMsg, zFmt, zMsg, pIdx->zName, zWhere);
- sqlite3DbFree(db, zWhere);
}else if( (flags & WHERE_IPK)!=0 && (flags & WHERE_CONSTRAINT)!=0 ){
- zMsg = sqlite3MAppendf(db, zMsg, "%s USING INTEGER PRIMARY KEY", zMsg);
-
+ const char *zRange;
if( flags&(WHERE_COLUMN_EQ|WHERE_COLUMN_IN) ){
- zMsg = sqlite3MAppendf(db, zMsg, "%s (rowid=?)", zMsg);
+ zRange = "(rowid=?)";
}else if( (flags&WHERE_BOTH_LIMIT)==WHERE_BOTH_LIMIT ){
- zMsg = sqlite3MAppendf(db, zMsg, "%s (rowid>? AND rowid<?)", zMsg);
+ zRange = "(rowid>? AND rowid<?)";
}else if( flags&WHERE_BTM_LIMIT ){
- zMsg = sqlite3MAppendf(db, zMsg, "%s (rowid>?)", zMsg);
- }else if( ALWAYS(flags&WHERE_TOP_LIMIT) ){
- zMsg = sqlite3MAppendf(db, zMsg, "%s (rowid<?)", zMsg);
+ zRange = "(rowid>?)";
+ }else{
+ assert( flags&WHERE_TOP_LIMIT);
+ zRange = "(rowid<?)";
}
+ sqlite3StrAccumAppendAll(&str, " USING INTEGER PRIMARY KEY ");
+ sqlite3StrAccumAppendAll(&str, zRange);
}
#ifndef SQLITE_OMIT_VIRTUALTABLE
else if( (flags & WHERE_VIRTUALTABLE)!=0 ){
- zMsg = sqlite3MAppendf(db, zMsg, "%s VIRTUAL TABLE INDEX %d:%s", zMsg,
+ sqlite3XPrintf(&str, 0, " VIRTUAL TABLE INDEX %d:%s",
pLoop->u.vtab.idxNum, pLoop->u.vtab.idxStr);
}
#endif
- zMsg = sqlite3MAppendf(db, zMsg, "%s", zMsg);
+#ifdef SQLITE_EXPLAIN_ESTIMATED_ROWS
+ if( pLoop->nOut>=10 ){
+ sqlite3XPrintf(&str, 0, " (~%llu rows)", sqlite3LogEstToInt(pLoop->nOut));
+ }else{
+ sqlite3StrAccumAppend(&str, " (~1 row)", 9);
+ }
+#endif
+ zMsg = sqlite3StrAccumFinish(&str);
sqlite3VdbeAddOp4(v, OP_Explain, iId, iLevel, iFrom, zMsg, P4_DYNAMIC);
}
}
@@ -114305,7 +117044,7 @@ static Bitmask codeOneLoopStart(
** B: <after the loop>
**
** Added 2014-05-26: If the table is a WITHOUT ROWID table, then
- ** use an ephermeral index instead of a RowSet to record the primary
+ ** use an ephemeral index instead of a RowSet to record the primary
** keys of the rows we have already seen.
**
*/
@@ -114356,7 +117095,7 @@ static Bitmask codeOneLoopStart(
}
/* Initialize the rowset register to contain NULL. An SQL NULL is
- ** equivalent to an empty rowset. Or, create an ephermeral index
+ ** equivalent to an empty rowset. Or, create an ephemeral index
** capable of holding primary keys in the case of a WITHOUT ROWID.
**
** Also initialize regReturn to contain the address of the instruction
@@ -114417,8 +117156,9 @@ static Bitmask codeOneLoopStart(
** eliminating duplicates from other WHERE clauses, the action for each
** sub-WHERE clause is to to invoke the main loop body as a subroutine.
*/
- wctrlFlags = WHERE_OMIT_OPEN_CLOSE | WHERE_AND_ONLY |
- WHERE_FORCE_TABLE | WHERE_ONETABLE_ONLY;
+ wctrlFlags = WHERE_OMIT_OPEN_CLOSE
+ | WHERE_FORCE_TABLE
+ | WHERE_ONETABLE_ONLY;
for(ii=0; ii<pOrWc->nTerm; ii++){
WhereTerm *pOrTerm = &pOrWc->a[ii];
if( pOrTerm->leftCursor==iCur || (pOrTerm->eOperator & WO_AND)!=0 ){
@@ -114430,6 +117170,7 @@ static Bitmask codeOneLoopStart(
pOrExpr = pAndExpr;
}
/* Loop through table entries that match term pOrTerm. */
+ WHERETRACE(0xffff, ("Subplan for OR-clause:\n"));
pSubWInfo = sqlite3WhereBegin(pParse, pOrTab, pOrExpr, 0, 0,
wctrlFlags, iCovCur);
assert( pSubWInfo || pParse->nErr || db->mallocFailed );
@@ -114649,21 +117390,26 @@ static Bitmask codeOneLoopStart(
return pLevel->notReady;
}
-#if defined(WHERETRACE_ENABLED) && defined(SQLITE_ENABLE_TREE_EXPLAIN)
+#ifdef WHERETRACE_ENABLED
/*
-** Generate "Explanation" text for a WhereTerm.
+** Print the content of a WhereTerm object
*/
-static void whereExplainTerm(Vdbe *v, WhereTerm *pTerm){
- char zType[4];
- memcpy(zType, "...", 4);
- if( pTerm->wtFlags & TERM_VIRTUAL ) zType[0] = 'V';
- if( pTerm->eOperator & WO_EQUIV ) zType[1] = 'E';
- if( ExprHasProperty(pTerm->pExpr, EP_FromJoin) ) zType[2] = 'L';
- sqlite3ExplainPrintf(v, "%s ", zType);
- sqlite3ExplainExpr(v, pTerm->pExpr);
+static void whereTermPrint(WhereTerm *pTerm, int iTerm){
+ if( pTerm==0 ){
+ sqlite3DebugPrintf("TERM-%-3d NULL\n", iTerm);
+ }else{
+ char zType[4];
+ memcpy(zType, "...", 4);
+ if( pTerm->wtFlags & TERM_VIRTUAL ) zType[0] = 'V';
+ if( pTerm->eOperator & WO_EQUIV ) zType[1] = 'E';
+ if( ExprHasProperty(pTerm->pExpr, EP_FromJoin) ) zType[2] = 'L';
+ sqlite3DebugPrintf("TERM-%-3d %p %s cursor=%-3d prob=%-3d op=0x%03x\n",
+ iTerm, pTerm, zType, pTerm->leftCursor, pTerm->truthProb,
+ pTerm->eOperator);
+ sqlite3TreeViewExpr(0, pTerm->pExpr, 0);
+ }
}
-#endif /* WHERETRACE_ENABLED && SQLITE_ENABLE_TREE_EXPLAIN */
-
+#endif
#ifdef WHERETRACE_ENABLED
/*
@@ -114679,8 +117425,8 @@ static void whereLoopPrint(WhereLoop *p, WhereClause *pWC){
sqlite3DebugPrintf(" %12s",
pItem->zAlias ? pItem->zAlias : pTab->zName);
if( (p->wsFlags & WHERE_VIRTUALTABLE)==0 ){
- const char *zName;
- if( p->u.btree.pIndex && (zName = p->u.btree.pIndex->zName)!=0 ){
+ const char *zName;
+ if( p->u.btree.pIndex && (zName = p->u.btree.pIndex->zName)!=0 ){
if( strncmp(zName, "sqlite_autoindex_", 17)==0 ){
int i = sqlite3Strlen30(zName) - 1;
while( zName[i]!='_' ) i--;
@@ -114701,29 +117447,18 @@ static void whereLoopPrint(WhereLoop *p, WhereClause *pWC){
sqlite3DebugPrintf(" %-19s", z);
sqlite3_free(z);
}
- sqlite3DebugPrintf(" f %05x N %d", p->wsFlags, p->nLTerm);
+ if( p->wsFlags & WHERE_SKIPSCAN ){
+ sqlite3DebugPrintf(" f %05x %d-%d", p->wsFlags, p->nLTerm,p->u.btree.nSkip);
+ }else{
+ sqlite3DebugPrintf(" f %05x N %d", p->wsFlags, p->nLTerm);
+ }
sqlite3DebugPrintf(" cost %d,%d,%d\n", p->rSetup, p->rRun, p->nOut);
-#ifdef SQLITE_ENABLE_TREE_EXPLAIN
- /* If the 0x100 bit of wheretracing is set, then show all of the constraint
- ** expressions in the WhereLoop.aLTerm[] array.
- */
- if( p->nLTerm && (sqlite3WhereTrace & 0x100)!=0 ){ /* WHERETRACE 0x100 */
+ if( p->nLTerm && (sqlite3WhereTrace & 0x100)!=0 ){
int i;
- Vdbe *v = pWInfo->pParse->pVdbe;
- sqlite3ExplainBegin(v);
for(i=0; i<p->nLTerm; i++){
- WhereTerm *pTerm = p->aLTerm[i];
- if( pTerm==0 ) continue;
- sqlite3ExplainPrintf(v, " (%d) #%-2d ", i+1, (int)(pTerm-pWC->a));
- sqlite3ExplainPush(v);
- whereExplainTerm(v, pTerm);
- sqlite3ExplainPop(v);
- sqlite3ExplainNL(v);
+ whereTermPrint(p->aLTerm[i], i);
}
- sqlite3ExplainFinish(v);
- sqlite3DebugPrintf("%s", sqlite3VdbeExplanation(v));
}
-#endif
}
#endif
@@ -115036,7 +117771,7 @@ static int whereLoopInsert(WhereLoopBuilder *pBuilder, WhereLoop *pTemplate){
** than pTemplate, so just ignore pTemplate */
#if WHERETRACE_ENABLED /* 0x8 */
if( sqlite3WhereTrace & 0x8 ){
- sqlite3DebugPrintf("ins-noop: ");
+ sqlite3DebugPrintf(" skip: ");
whereLoopPrint(pTemplate, pBuilder->pWC);
}
#endif
@@ -115052,10 +117787,10 @@ static int whereLoopInsert(WhereLoopBuilder *pBuilder, WhereLoop *pTemplate){
#if WHERETRACE_ENABLED /* 0x8 */
if( sqlite3WhereTrace & 0x8 ){
if( p!=0 ){
- sqlite3DebugPrintf("ins-del: ");
+ sqlite3DebugPrintf("replace: ");
whereLoopPrint(p, pBuilder->pWC);
}
- sqlite3DebugPrintf("ins-new: ");
+ sqlite3DebugPrintf(" add: ");
whereLoopPrint(pTemplate, pBuilder->pWC);
}
#endif
@@ -115079,7 +117814,7 @@ static int whereLoopInsert(WhereLoopBuilder *pBuilder, WhereLoop *pTemplate){
*ppTail = pToDel->pNextLoop;
#if WHERETRACE_ENABLED /* 0x8 */
if( sqlite3WhereTrace & 0x8 ){
- sqlite3DebugPrintf("ins-del: ");
+ sqlite3DebugPrintf(" delete: ");
whereLoopPrint(pToDel, pBuilder->pWC);
}
#endif
@@ -115105,14 +117840,16 @@ static int whereLoopInsert(WhereLoopBuilder *pBuilder, WhereLoop *pTemplate){
** the number of output rows by a factor of 10 and each additional term
** reduces the number of output rows by sqrt(2).
*/
-static void whereLoopOutputAdjust(WhereClause *pWC, WhereLoop *pLoop){
+static void whereLoopOutputAdjust(
+ WhereClause *pWC, /* The WHERE clause */
+ WhereLoop *pLoop, /* The loop to adjust downward */
+ LogEst nRow /* Number of rows in the entire table */
+){
WhereTerm *pTerm, *pX;
Bitmask notAllowed = ~(pLoop->prereq|pLoop->maskSelf);
int i, j;
+ int nEq = 0; /* Number of = constraints not within likely()/unlikely() */
- if( !OptimizationEnabled(pWC->pWInfo->pParse->db, SQLITE_AdjustOutEst) ){
- return;
- }
for(i=pWC->nTerm, pTerm=pWC->a; i>0; i--, pTerm++){
if( (pTerm->wtFlags & TERM_VIRTUAL)!=0 ) break;
if( (pTerm->prereqAll & pLoop->maskSelf)==0 ) continue;
@@ -115124,9 +117861,21 @@ static void whereLoopOutputAdjust(WhereClause *pWC, WhereLoop *pLoop){
if( pX->iParent>=0 && (&pWC->a[pX->iParent])==pTerm ) break;
}
if( j<0 ){
- pLoop->nOut += (pTerm->truthProb<=0 ? pTerm->truthProb : -1);
+ if( pTerm->truthProb<=0 ){
+ pLoop->nOut += pTerm->truthProb;
+ }else{
+ pLoop->nOut--;
+ if( pTerm->eOperator&WO_EQ ) nEq++;
+ }
}
}
+ /* TUNING: If there is at least one equality constraint in the WHERE
+ ** clause that does not have a likelihood() explicitly assigned to it
+ ** then do not let the estimated number of output rows exceed half
+ ** the number of rows in the table. */
+ if( nEq && pLoop->nOut>nRow-10 ){
+ pLoop->nOut = nRow - 10;
+ }
}
/*
@@ -115172,6 +117921,7 @@ static int whereLoopAddBtreeIndex(
LogEst saved_nOut; /* Original value of pNew->nOut */
int iCol; /* Index of the column in the table */
int rc = SQLITE_OK; /* Return code */
+ LogEst rSize; /* Number of rows in the table */
LogEst rLogSize; /* Logarithm of table size */
WhereTerm *pTop = 0, *pBtm = 0; /* Top and bottom range constraints */
@@ -115201,7 +117951,8 @@ static int whereLoopAddBtreeIndex(
saved_prereq = pNew->prereq;
saved_nOut = pNew->nOut;
pNew->rSetup = 0;
- rLogSize = estLog(pProbe->aiRowLogEst[0]);
+ rSize = pProbe->aiRowLogEst[0];
+ rLogSize = estLog(rSize);
/* Consider using a skip-scan if there are no WHERE clause constraints
** available for the left-most terms of the index, and if the average
@@ -115214,8 +117965,7 @@ static int whereLoopAddBtreeIndex(
** On the other hand, the extra seeks could end up being significantly
** more expensive. */
assert( 42==sqlite3LogEst(18) );
- if( pTerm==0
- && saved_nEq==saved_nSkip
+ if( saved_nEq==saved_nSkip
&& saved_nEq+1<pProbe->nKeyCol
&& pProbe->aiRowLogEst[saved_nEq+1]>=42 /* TUNING: Minimum for skip-scan */
&& (rc = whereLoopResize(db, pNew, pNew->nLTerm+1))==SQLITE_OK
@@ -115226,9 +117976,20 @@ static int whereLoopAddBtreeIndex(
pNew->aLTerm[pNew->nLTerm++] = 0;
pNew->wsFlags |= WHERE_SKIPSCAN;
nIter = pProbe->aiRowLogEst[saved_nEq] - pProbe->aiRowLogEst[saved_nEq+1];
+ if( pTerm ){
+ /* TUNING: When estimating skip-scan for a term that is also indexable,
+ ** multiply the cost of the skip-scan by 2.0, to make it a little less
+ ** desirable than the regular index lookup. */
+ nIter += 10; assert( 10==sqlite3LogEst(2) );
+ }
pNew->nOut -= nIter;
+ /* TUNING: Because uncertainties in the estimates for skip-scan queries,
+ ** add a 1.375 fudge factor to make skip-scan slightly less likely. */
+ nIter += 5;
whereLoopAddBtreeIndex(pBuilder, pSrc, pProbe, nIter + nInMul);
pNew->nOut = saved_nOut;
+ pNew->u.btree.nEq = saved_nEq;
+ pNew->u.btree.nSkip = saved_nSkip;
}
for(; rc==SQLITE_OK && pTerm!=0; pTerm = whereScanNext(&scan)){
u16 eOp = pTerm->eOperator; /* Shorthand for pTerm->eOperator */
@@ -115371,7 +118132,7 @@ static int whereLoopAddBtreeIndex(
nOutUnadjusted = pNew->nOut;
pNew->rRun += nInMul + nIn;
pNew->nOut += nInMul + nIn;
- whereLoopOutputAdjust(pBuilder->pWC, pNew);
+ whereLoopOutputAdjust(pBuilder->pWC, pNew, rSize);
rc = whereLoopInsert(pBuilder, pNew);
if( pNew->wsFlags & WHERE_COLUMN_RANGE ){
@@ -115421,6 +118182,7 @@ static int indexMightHelpWithOrderBy(
Expr *pExpr = sqlite3ExprSkipCollate(pOB->a[ii].pExpr);
if( pExpr->op!=TK_COLUMN ) return 0;
if( pExpr->iTable==iCursor ){
+ if( pExpr->iColumn<0 ) return 1;
for(jj=0; jj<pIndex->nKeyCol; jj++){
if( pExpr->iColumn==pIndex->aiColumn[jj] ) return 1;
}
@@ -115578,13 +118340,21 @@ static int whereLoopAddBtree(
pNew->nLTerm = 1;
pNew->aLTerm[0] = pTerm;
/* TUNING: One-time cost for computing the automatic index is
- ** approximately 7*N*log2(N) where N is the number of rows in
- ** the table being indexed. */
- pNew->rSetup = rLogSize + rSize + 28; assert( 28==sqlite3LogEst(7) );
+ ** estimated to be X*N*log2(N) where N is the number of rows in
+ ** the table being indexed and where X is 7 (LogEst=28) for normal
+ ** tables or 1.375 (LogEst=4) for views and subqueries. The value
+ ** of X is smaller for views and subqueries so that the query planner
+ ** will be more aggressive about generating automatic indexes for
+ ** those objects, since there is no opportunity to add schema
+ ** indexes on subqueries and views. */
+ pNew->rSetup = rLogSize + rSize + 4;
+ if( pTab->pSelect==0 && (pTab->tabFlags & TF_Ephemeral)==0 ){
+ pNew->rSetup += 24;
+ }
ApplyCostMultiplier(pNew->rSetup, pTab->costMult);
/* TUNING: Each index lookup yields 20 rows in the table. This
** is more than the usual guess of 10 rows, since we have no way
- ** of knowning how selective the index will ultimately be. It would
+ ** of knowing how selective the index will ultimately be. It would
** not be unreasonable to make this value much larger. */
pNew->nOut = 43; assert( 43==sqlite3LogEst(20) );
pNew->rRun = sqlite3LogEstAdd(rLogSize,pNew->nOut);
@@ -115600,7 +118370,8 @@ static int whereLoopAddBtree(
*/
for(; rc==SQLITE_OK && pProbe; pProbe=pProbe->pNext, iSortIdx++){
if( pProbe->pPartIdxWhere!=0
- && !whereUsablePartialIndex(pNew->iTab, pWC, pProbe->pPartIdxWhere) ){
+ && !whereUsablePartialIndex(pSrc->iCursor, pWC, pProbe->pPartIdxWhere) ){
+ testcase( pNew->iTab!=pSrc->iCursor ); /* See ticket [98d973b8f5] */
continue; /* Partial index inappropriate for this query */
}
rSize = pProbe->aiRowLogEst[0];
@@ -115624,7 +118395,7 @@ static int whereLoopAddBtree(
/* TUNING: Cost of full table scan is (N*3.0). */
pNew->rRun = rSize + 16;
ApplyCostMultiplier(pNew->rRun, pTab->costMult);
- whereLoopOutputAdjust(pWC, pNew);
+ whereLoopOutputAdjust(pWC, pNew, rSize);
rc = whereLoopInsert(pBuilder, pNew);
pNew->nOut = rSize;
if( rc ) break;
@@ -115660,7 +118431,7 @@ static int whereLoopAddBtree(
pNew->rRun = sqlite3LogEstAdd(pNew->rRun, rSize+16);
}
ApplyCostMultiplier(pNew->rRun, pTab->costMult);
- whereLoopOutputAdjust(pWC, pNew);
+ whereLoopOutputAdjust(pWC, pNew, rSize);
rc = whereLoopInsert(pBuilder, pNew);
pNew->nOut = rSize;
if( rc ) break;
@@ -115867,7 +118638,6 @@ static int whereLoopAddOr(WhereLoopBuilder *pBuilder, Bitmask mExtra){
struct SrcList_item *pItem;
pWC = pBuilder->pWC;
- if( pWInfo->wctrlFlags & WHERE_AND_ONLY ) return SQLITE_OK;
pWCEnd = pWC->a + pWC->nTerm;
pNew = pBuilder->pNew;
memset(&sSum, 0, sizeof(sSum));
@@ -115888,6 +118658,7 @@ static int whereLoopAddOr(WhereLoopBuilder *pBuilder, Bitmask mExtra){
sSubBuild.pOrderBy = 0;
sSubBuild.pOrSet = &sCur;
+ WHERETRACE(0x200, ("Begin processing OR-clause %p\n", pTerm));
for(pOrTerm=pOrWC->a; pOrTerm<pOrWCEnd; pOrTerm++){
if( (pOrTerm->eOperator & WO_AND)!=0 ){
sSubBuild.pWC = &pOrTerm->u.pAndInfo->wc;
@@ -115902,6 +118673,15 @@ static int whereLoopAddOr(WhereLoopBuilder *pBuilder, Bitmask mExtra){
continue;
}
sCur.n = 0;
+#ifdef WHERETRACE_ENABLED
+ WHERETRACE(0x200, ("OR-term %d of %p has %d subterms:\n",
+ (int)(pOrTerm-pOrWC->a), pTerm, sSubBuild.pWC->nTerm));
+ if( sqlite3WhereTrace & 0x400 ){
+ for(i=0; i<sSubBuild.pWC->nTerm; i++){
+ whereTermPrint(&sSubBuild.pWC->a[i], i);
+ }
+ }
+#endif
#ifndef SQLITE_OMIT_VIRTUALTABLE
if( IsVirtual(pItem->pTab) ){
rc = whereLoopAddVirtual(&sSubBuild, mExtra);
@@ -115910,6 +118690,9 @@ static int whereLoopAddOr(WhereLoopBuilder *pBuilder, Bitmask mExtra){
{
rc = whereLoopAddBtree(&sSubBuild, mExtra);
}
+ if( rc==SQLITE_OK ){
+ rc = whereLoopAddOr(&sSubBuild, mExtra);
+ }
assert( rc==SQLITE_OK || sCur.n==0 );
if( sCur.n==0 ){
sSum.n = 0;
@@ -115954,6 +118737,7 @@ static int whereLoopAddOr(WhereLoopBuilder *pBuilder, Bitmask mExtra){
pNew->prereq = sSum.a[i].prereq;
rc = whereLoopInsert(pBuilder, pNew);
}
+ WHERETRACE(0x200, ("End processing OR-clause %p\n", pTerm));
}
}
return rc;
@@ -116013,7 +118797,7 @@ static int whereLoopAddAll(WhereLoopBuilder *pBuilder){
** strict. With GROUP BY and DISTINCT the only requirement is that
** equivalent rows appear immediately adjacent to one another. GROUP BY
** and DISTINCT do not require rows to appear in any particular order as long
-** as equivelent rows are grouped together. Thus for GROUP BY and DISTINCT
+** as equivalent rows are grouped together. Thus for GROUP BY and DISTINCT
** the pOrderBy terms can be matched in any order. With ORDER BY, the
** pOrderBy terms must be matched in strict left-to-right order.
*/
@@ -116197,7 +118981,7 @@ static i8 wherePathSatisfiesOrderBy(
isMatch = 1;
break;
}
- if( isMatch && (pWInfo->wctrlFlags & WHERE_GROUPBY)==0 ){
+ if( isMatch && (wctrlFlags & WHERE_GROUPBY)==0 ){
/* Make sure the sort order is compatible in an ORDER BY clause.
** Sort order is irrelevant for a GROUP BY clause. */
if( revSet ){
@@ -116662,12 +119446,15 @@ static int wherePathSolver(WhereInfo *pWInfo, LogEst nRowEst){
if( (pWInfo->wctrlFlags & WHERE_SORTBYGROUP)
&& pWInfo->nOBSat==pWInfo->pOrderBy->nExpr
){
- Bitmask notUsed = 0;
+ Bitmask revMask = 0;
int nOrder = wherePathSatisfiesOrderBy(pWInfo, pWInfo->pOrderBy,
- pFrom, 0, nLoop-1, pFrom->aLoop[nLoop-1], &notUsed
+ pFrom, 0, nLoop-1, pFrom->aLoop[nLoop-1], &revMask
);
assert( pWInfo->sorted==0 );
- pWInfo->sorted = (nOrder==pWInfo->pOrderBy->nExpr);
+ if( nOrder==pWInfo->pOrderBy->nExpr ){
+ pWInfo->sorted = 1;
+ pWInfo->revMask = revMask;
+ }
}
}
@@ -117020,23 +119807,16 @@ SQLITE_PRIVATE WhereInfo *sqlite3WhereBegin(
/* Construct the WhereLoop objects */
WHERETRACE(0xffff,("*** Optimizer Start ***\n"));
+#if defined(WHERETRACE_ENABLED)
/* Display all terms of the WHERE clause */
-#if defined(WHERETRACE_ENABLED) && defined(SQLITE_ENABLE_TREE_EXPLAIN)
if( sqlite3WhereTrace & 0x100 ){
int i;
- Vdbe *v = pParse->pVdbe;
- sqlite3ExplainBegin(v);
for(i=0; i<sWLB.pWC->nTerm; i++){
- sqlite3ExplainPrintf(v, "#%-2d ", i);
- sqlite3ExplainPush(v);
- whereExplainTerm(v, &sWLB.pWC->a[i]);
- sqlite3ExplainPop(v);
- sqlite3ExplainNL(v);
+ whereTermPrint(&sWLB.pWC->a[i], i);
}
- sqlite3ExplainFinish(v);
- sqlite3DebugPrintf("%s", sqlite3VdbeExplanation(v));
}
#endif
+
if( nTabList!=1 || whereShortCut(&sWLB)==0 ){
rc = whereLoopAddAll(&sWLB);
if( rc ) goto whereBeginError;
@@ -117563,7 +120343,7 @@ struct AttachKey { int type; Token key; };
** unary TK_ISNULL or TK_NOTNULL expression. */
static void binaryToUnaryIfNull(Parse *pParse, Expr *pY, Expr *pA, int op){
sqlite3 *db = pParse->db;
- if( db->mallocFailed==0 && pY->op==TK_NULL ){
+ if( pY && pA && pY->op==TK_NULL ){
pA->op = (u8)op;
sqlite3ExprDelete(db, pA->pRight);
pA->pRight = 0;
@@ -118790,9 +121570,9 @@ static void yyGrowStack(yyParser *p){
** A pointer to a parser. This pointer is used in subsequent calls
** to sqlite3Parser and sqlite3ParserFree.
*/
-SQLITE_PRIVATE void *sqlite3ParserAlloc(void *(*mallocProc)(size_t)){
+SQLITE_PRIVATE void *sqlite3ParserAlloc(void *(*mallocProc)(u64)){
yyParser *pParser;
- pParser = (yyParser*)(*mallocProc)( (size_t)sizeof(yyParser) );
+ pParser = (yyParser*)(*mallocProc)( (u64)sizeof(yyParser) );
if( pParser ){
pParser->yyidx = -1;
#ifdef YYTRACKMAXSTACKDEPTH
@@ -119822,9 +122602,6 @@ static void yy_reduce(
{
SelectDest dest = {SRT_Output, 0, 0, 0, 0, 0};
sqlite3Select(pParse, yymsp[0].minor.yy3, &dest);
- sqlite3ExplainBegin(pParse->pVdbe);
- sqlite3ExplainSelect(pParse->pVdbe, yymsp[0].minor.yy3);
- sqlite3ExplainFinish(pParse->pVdbe);
sqlite3SelectDelete(pParse->db, yymsp[0].minor.yy3);
}
break;
@@ -119881,6 +122658,30 @@ static void yy_reduce(
case 118: /* oneselect ::= SELECT distinct selcollist from where_opt groupby_opt having_opt orderby_opt limit_opt */
{
yygotominor.yy3 = sqlite3SelectNew(pParse,yymsp[-6].minor.yy14,yymsp[-5].minor.yy65,yymsp[-4].minor.yy132,yymsp[-3].minor.yy14,yymsp[-2].minor.yy132,yymsp[-1].minor.yy14,yymsp[-7].minor.yy381,yymsp[0].minor.yy476.pLimit,yymsp[0].minor.yy476.pOffset);
+#if SELECTTRACE_ENABLED
+ /* Populate the Select.zSelName[] string that is used to help with
+ ** query planner debugging, to differentiate between multiple Select
+ ** objects in a complex query.
+ **
+ ** If the SELECT keyword is immediately followed by a C-style comment
+ ** then extract the first few alphanumeric characters from within that
+ ** comment to be the zSelName value. Otherwise, the label is #N where
+ ** is an integer that is incremented with each SELECT statement seen.
+ */
+ if( yygotominor.yy3!=0 ){
+ const char *z = yymsp[-8].minor.yy0.z+6;
+ int i;
+ sqlite3_snprintf(sizeof(yygotominor.yy3->zSelName), yygotominor.yy3->zSelName, "#%d",
+ ++pParse->nSelect);
+ while( z[0]==' ' ) z++;
+ if( z[0]=='/' && z[1]=='*' ){
+ z += 2;
+ while( z[0]==' ' ) z++;
+ for(i=0; sqlite3Isalnum(z[i]); i++){}
+ sqlite3_snprintf(sizeof(yygotominor.yy3->zSelName), yygotominor.yy3->zSelName, "%.*s", i, z);
+ }
+ }
+#endif /* SELECTRACE_ENABLED */
}
break;
case 120: /* values ::= VALUES LP nexprlist RP */
@@ -121347,7 +124148,7 @@ SQLITE_PRIVATE int sqlite3KeywordCode(const unsigned char *z, int n){
** end result.
**
** Ticket #1066. the SQL standard does not allow '$' in the
-** middle of identfiers. But many SQL implementations do.
+** middle of identifiers. But many SQL implementations do.
** SQLite will allow '$' in identifiers for compatibility.
** But the feature is undocumented.
*/
@@ -121372,6 +124173,7 @@ SQLITE_PRIVATE const char sqlite3IsEbcdicIdChar[] = {
};
#define IdChar(C) (((c=C)>=0x42 && sqlite3IsEbcdicIdChar[c-0x40]))
#endif
+SQLITE_PRIVATE int sqlite3IsIdChar(u8 c){ return IdChar(c); }
/*
@@ -121668,7 +124470,7 @@ SQLITE_PRIVATE int sqlite3RunParser(Parse *pParse, const char *zSql, char **pzEr
pParse->zTail = zSql;
i = 0;
assert( pzErrMsg!=0 );
- pEngine = sqlite3ParserAlloc((void*(*)(size_t))sqlite3Malloc);
+ pEngine = sqlite3ParserAlloc(sqlite3Malloc);
if( pEngine==0 ){
db->mallocFailed = 1;
return SQLITE_NOMEM;
@@ -121863,7 +124665,7 @@ SQLITE_PRIVATE const char sqlite3IsEbcdicIdChar[];
** a statement.
**
** (4) CREATE The keyword CREATE has been seen at the beginning of a
-** statement, possibly preceeded by EXPLAIN and/or followed by
+** statement, possibly preceded by EXPLAIN and/or followed by
** TEMP or TEMPORARY
**
** (5) TRIGGER We are in the middle of a trigger definition that must be
@@ -121873,7 +124675,7 @@ SQLITE_PRIVATE const char sqlite3IsEbcdicIdChar[];
** the end of a trigger definition.
**
** (7) END We've seen the ";END" of the ";END;" that occurs at the end
-** of a trigger difinition.
+** of a trigger definition.
**
** Transitions between states above are determined by tokens extracted
** from the input. The following tokens are significant:
@@ -121916,7 +124718,7 @@ SQLITE_API int sqlite3_complete(const char *zSql){
};
#else
/* If triggers are not supported by this compile then the statement machine
- ** used to detect the end of a statement is much simplier
+ ** used to detect the end of a statement is much simpler
*/
static const u8 trans[3][3] = {
/* Token: */
@@ -122642,6 +125444,11 @@ SQLITE_API int sqlite3_config(int op, ...){
break;
}
+ /* EVIDENCE-OF: R-55548-33817 The compile-time setting for URI filenames
+ ** can be changed at start-time using the
+ ** sqlite3_config(SQLITE_CONFIG_URI,1) or
+ ** sqlite3_config(SQLITE_CONFIG_URI,0) configuration calls.
+ */
case SQLITE_CONFIG_URI: {
sqlite3GlobalConfig.bOpenUri = va_arg(ap, int);
break;
@@ -123018,7 +125825,7 @@ static int sqlite3Close(sqlite3 *db, int forceZombie){
** SQLITE_BUSY if the connection can not be closed immediately.
*/
if( !forceZombie && connectionIsBusy(db) ){
- sqlite3Error(db, SQLITE_BUSY, "unable to close due to unfinalized "
+ sqlite3ErrorWithMsg(db, SQLITE_BUSY, "unable to close due to unfinalized "
"statements or unfinished backups");
sqlite3_mutex_leave(db->mutex);
return SQLITE_BUSY;
@@ -123091,6 +125898,16 @@ SQLITE_PRIVATE void sqlite3LeaveMutexAndCloseZombie(sqlite3 *db){
for(j=0; j<db->nDb; j++){
struct Db *pDb = &db->aDb[j];
if( pDb->pBt ){
+ if( pDb->pSchema ){
+ /* Must clear the KeyInfo cache. See ticket [e4a18565a36884b00edf] */
+ sqlite3BtreeEnter(pDb->pBt);
+ for(i=sqliteHashFirst(&pDb->pSchema->idxHash); i; i=sqliteHashNext(i)){
+ Index *pIdx = sqliteHashData(i);
+ sqlite3KeyInfoUnref(pIdx->pKeyInfo);
+ pIdx->pKeyInfo = 0;
+ }
+ sqlite3BtreeLeave(pDb->pBt);
+ }
sqlite3BtreeClose(pDb->pBt);
pDb->pBt = 0;
if( j!=1 ){
@@ -123148,9 +125965,13 @@ SQLITE_PRIVATE void sqlite3LeaveMutexAndCloseZombie(sqlite3 *db){
sqlite3HashClear(&db->aModule);
#endif
- sqlite3Error(db, SQLITE_OK, 0); /* Deallocates any cached error strings. */
+ sqlite3Error(db, SQLITE_OK); /* Deallocates any cached error strings. */
sqlite3ValueFree(db->pErr);
sqlite3CloseExtensions(db);
+#if SQLITE_USER_AUTHENTICATION
+ sqlite3_free(db->auth.zAuthUser);
+ sqlite3_free(db->auth.zAuthPW);
+#endif
db->magic = SQLITE_MAGIC_ERROR;
@@ -123173,13 +125994,15 @@ SQLITE_PRIVATE void sqlite3LeaveMutexAndCloseZombie(sqlite3 *db){
/*
** Rollback all database files. If tripCode is not SQLITE_OK, then
-** any open cursors are invalidated ("tripped" - as in "tripping a circuit
+** any write cursors are invalidated ("tripped" - as in "tripping a circuit
** breaker") and made to return tripCode if there are any further
-** attempts to use that cursor.
+** attempts to use that cursor. Read cursors remain open and valid
+** but are "saved" in case the table pages are moved around.
*/
SQLITE_PRIVATE void sqlite3RollbackAll(sqlite3 *db, int tripCode){
int i;
int inTrans = 0;
+ int schemaChange;
assert( sqlite3_mutex_held(db->mutex) );
sqlite3BeginBenignMalloc();
@@ -123190,6 +126013,7 @@ SQLITE_PRIVATE void sqlite3RollbackAll(sqlite3 *db, int tripCode){
** the database rollback and schema reset, which can cause false
** corruption reports in some cases. */
sqlite3BtreeEnterAll(db);
+ schemaChange = (db->flags & SQLITE_InternChanges)!=0 && db->init.busy==0;
for(i=0; i<db->nDb; i++){
Btree *p = db->aDb[i].pBt;
@@ -123197,7 +126021,7 @@ SQLITE_PRIVATE void sqlite3RollbackAll(sqlite3 *db, int tripCode){
if( sqlite3BtreeIsInTrans(p) ){
inTrans = 1;
}
- sqlite3BtreeRollback(p, tripCode);
+ sqlite3BtreeRollback(p, tripCode, !schemaChange);
}
}
sqlite3VtabRollback(db);
@@ -123581,7 +126405,7 @@ SQLITE_PRIVATE int sqlite3CreateFunc(
p = sqlite3FindFunction(db, zFunctionName, nName, nArg, (u8)enc, 0);
if( p && (p->funcFlags & SQLITE_FUNC_ENCMASK)==enc && p->nArg==nArg ){
if( db->nVdbeActive ){
- sqlite3Error(db, SQLITE_BUSY,
+ sqlite3ErrorWithMsg(db, SQLITE_BUSY,
"unable to delete/modify user-function due to active statements");
assert( !db->mallocFailed );
return SQLITE_BUSY;
@@ -123919,10 +126743,10 @@ SQLITE_API int sqlite3_wal_checkpoint_v2(
}
if( iDb<0 ){
rc = SQLITE_ERROR;
- sqlite3Error(db, SQLITE_ERROR, "unknown database: %s", zDb);
+ sqlite3ErrorWithMsg(db, SQLITE_ERROR, "unknown database: %s", zDb);
}else{
rc = sqlite3Checkpoint(db, iDb, eMode, pnLog, pnCkpt);
- sqlite3Error(db, rc, 0);
+ sqlite3Error(db, rc);
}
rc = sqlite3ApiExit(db, rc);
sqlite3_mutex_leave(db->mutex);
@@ -124077,7 +126901,7 @@ SQLITE_API const void *sqlite3_errmsg16(sqlite3 *db){
}else{
z = sqlite3_value_text16(db->pErr);
if( z==0 ){
- sqlite3Error(db, db->errCode, sqlite3ErrStr(db->errCode));
+ sqlite3ErrorWithMsg(db, db->errCode, sqlite3ErrStr(db->errCode));
z = sqlite3_value_text16(db->pErr);
}
/* A malloc() may have failed within the call to sqlite3_value_text16()
@@ -124164,7 +126988,6 @@ static int createCollation(
){
CollSeq *pColl;
int enc2;
- int nName = sqlite3Strlen30(zName);
assert( sqlite3_mutex_held(db->mutex) );
@@ -124189,7 +127012,7 @@ static int createCollation(
pColl = sqlite3FindCollSeq(db, (u8)enc2, zName, 0);
if( pColl && pColl->xCmp ){
if( db->nVdbeActive ){
- sqlite3Error(db, SQLITE_BUSY,
+ sqlite3ErrorWithMsg(db, SQLITE_BUSY,
"unable to delete/modify collation sequence due to active statements");
return SQLITE_BUSY;
}
@@ -124203,7 +127026,7 @@ static int createCollation(
** to be called.
*/
if( (pColl->enc & ~SQLITE_UTF16_ALIGNED)==enc2 ){
- CollSeq *aColl = sqlite3HashFind(&db->aCollSeq, zName, nName);
+ CollSeq *aColl = sqlite3HashFind(&db->aCollSeq, zName);
int j;
for(j=0; j<3; j++){
CollSeq *p = &aColl[j];
@@ -124223,7 +127046,7 @@ static int createCollation(
pColl->pUser = pCtx;
pColl->xDel = xDel;
pColl->enc = (u8)(enc2 | (enc & SQLITE_UTF16_ALIGNED));
- sqlite3Error(db, SQLITE_OK, 0);
+ sqlite3Error(db, SQLITE_OK);
return SQLITE_OK;
}
@@ -124245,6 +127068,7 @@ static const int aHardLimit[] = {
SQLITE_MAX_LIKE_PATTERN_LENGTH,
SQLITE_MAX_VARIABLE_NUMBER, /* IMP: R-38091-32352 */
SQLITE_MAX_TRIGGER_DEPTH,
+ SQLITE_MAX_WORKER_THREADS,
};
/*
@@ -124280,6 +127104,9 @@ static const int aHardLimit[] = {
#if SQLITE_MAX_TRIGGER_DEPTH<1
# error SQLITE_MAX_TRIGGER_DEPTH must be at least 1
#endif
+#if SQLITE_MAX_WORKER_THREADS<0 || SQLITE_MAX_WORKER_THREADS>50
+# error SQLITE_MAX_WORKER_THREADS must be between 0 and 50
+#endif
/*
@@ -124313,7 +127140,8 @@ SQLITE_API int sqlite3_limit(sqlite3 *db, int limitId, int newLimit){
SQLITE_MAX_LIKE_PATTERN_LENGTH );
assert( aHardLimit[SQLITE_LIMIT_VARIABLE_NUMBER]==SQLITE_MAX_VARIABLE_NUMBER);
assert( aHardLimit[SQLITE_LIMIT_TRIGGER_DEPTH]==SQLITE_MAX_TRIGGER_DEPTH );
- assert( SQLITE_LIMIT_TRIGGER_DEPTH==(SQLITE_N_LIMIT-1) );
+ assert( aHardLimit[SQLITE_LIMIT_WORKER_THREADS]==SQLITE_MAX_WORKER_THREADS );
+ assert( SQLITE_LIMIT_WORKER_THREADS==(SQLITE_N_LIMIT-1) );
if( limitId<0 || limitId>=SQLITE_N_LIMIT ){
@@ -124371,7 +127199,7 @@ SQLITE_PRIVATE int sqlite3ParseUri(
assert( *pzErrMsg==0 );
if( ((flags & SQLITE_OPEN_URI) || sqlite3GlobalConfig.bOpenUri)
- && nUri>=5 && memcmp(zUri, "file:", 5)==0
+ && nUri>=5 && memcmp(zUri, "file:", 5)==0 /* IMP: R-57884-37496 */
){
char *zOpt;
int eState; /* Parser state when parsing URI */
@@ -124601,7 +127429,9 @@ static int openDatabase(
testcase( (1<<(flags&7))==0x02 ); /* READONLY */
testcase( (1<<(flags&7))==0x04 ); /* READWRITE */
testcase( (1<<(flags&7))==0x40 ); /* READWRITE | CREATE */
- if( ((1<<(flags&7)) & 0x46)==0 ) return SQLITE_MISUSE_BKPT;
+ if( ((1<<(flags&7)) & 0x46)==0 ){
+ return SQLITE_MISUSE_BKPT; /* IMP: R-65497-44594 */
+ }
if( sqlite3GlobalConfig.bCoreMutex==0 ){
isThreadsafe = 0;
@@ -124660,10 +127490,12 @@ static int openDatabase(
assert( sizeof(db->aLimit)==sizeof(aHardLimit) );
memcpy(db->aLimit, aHardLimit, sizeof(db->aLimit));
+ db->aLimit[SQLITE_LIMIT_WORKER_THREADS] = SQLITE_DEFAULT_WORKER_THREADS;
db->autoCommit = 1;
db->nextAutovac = -1;
db->szMmap = sqlite3GlobalConfig.szMmap;
db->nextPagesize = 0;
+ db->nMaxSorterMmap = 0x7FFFFFFF;
db->flags |= SQLITE_ShortColNames | SQLITE_EnableTrigger | SQLITE_CacheSpill
#if !defined(SQLITE_DEFAULT_AUTOMATIC_INDEX) || SQLITE_DEFAULT_AUTOMATIC_INDEX
| SQLITE_AutoIndex
@@ -124708,7 +127540,7 @@ static int openDatabase(
rc = sqlite3ParseUri(zVfs, zFilename, &flags, &db->pVfs, &zOpen, &zErrMsg);
if( rc!=SQLITE_OK ){
if( rc==SQLITE_NOMEM ) db->mallocFailed = 1;
- sqlite3Error(db, rc, zErrMsg ? "%s" : 0, zErrMsg);
+ sqlite3ErrorWithMsg(db, rc, zErrMsg ? "%s" : 0, zErrMsg);
sqlite3_free(zErrMsg);
goto opendb_out;
}
@@ -124720,13 +127552,14 @@ static int openDatabase(
if( rc==SQLITE_IOERR_NOMEM ){
rc = SQLITE_NOMEM;
}
- sqlite3Error(db, rc, 0);
+ sqlite3Error(db, rc);
goto opendb_out;
}
+ sqlite3BtreeEnter(db->aDb[0].pBt);
db->aDb[0].pSchema = sqlite3SchemaGet(db, db->aDb[0].pBt);
+ sqlite3BtreeLeave(db->aDb[0].pBt);
db->aDb[1].pSchema = sqlite3SchemaGet(db, 0);
-
/* The default safety_level for the main database is 'full'; for the temp
** database it is 'NONE'. This matches the pager layer defaults.
*/
@@ -124744,7 +127577,7 @@ static int openDatabase(
** database schema yet. This is delayed until the first time the database
** is accessed.
*/
- sqlite3Error(db, SQLITE_OK, 0);
+ sqlite3Error(db, SQLITE_OK);
sqlite3RegisterBuiltinFunctions(db);
/* Load automatic extensions - extensions that have been registered
@@ -124801,7 +127634,7 @@ static int openDatabase(
SQLITE_DEFAULT_LOCKING_MODE);
#endif
- if( rc ) sqlite3Error(db, rc, 0);
+ if( rc ) sqlite3Error(db, rc);
/* Enable the lookaside-malloc subsystem */
setupLookaside(db, 0, sqlite3GlobalConfig.szLookaside,
@@ -125013,9 +127846,9 @@ SQLITE_API int sqlite3_get_autocommit(sqlite3 *db){
}
/*
-** The following routines are subtitutes for constants SQLITE_CORRUPT,
+** The following routines are substitutes for constants SQLITE_CORRUPT,
** SQLITE_MISUSE, SQLITE_CANTOPEN, SQLITE_IOERR and possibly other error
-** constants. They server two purposes:
+** constants. They serve two purposes:
**
** 1. Serve as a convenient place to set a breakpoint in a debugger
** to detect when version error conditions occurs.
@@ -125163,7 +127996,7 @@ error_out:
zColumnName);
rc = SQLITE_ERROR;
}
- sqlite3Error(db, rc, (zErrMsg?"%s":0), zErrMsg);
+ sqlite3ErrorWithMsg(db, rc, (zErrMsg?"%s":0), zErrMsg);
sqlite3DbFree(db, zErrMsg);
rc = sqlite3ApiExit(db, rc);
sqlite3_mutex_leave(db->mutex);
@@ -125329,7 +128162,7 @@ SQLITE_API int sqlite3_test_control(int op, ...){
** IMPORTANT: Changing the PENDING byte from 0x40000000 results in
** an incompatible database file format. Changing the PENDING byte
** while any database connection is open results in undefined and
- ** dileterious behavior.
+ ** deleterious behavior.
*/
case SQLITE_TESTCTRL_PENDING_BYTE: {
rc = PENDING_BYTE;
@@ -125484,22 +128317,6 @@ SQLITE_API int sqlite3_test_control(int op, ...){
break;
}
-#if defined(SQLITE_ENABLE_TREE_EXPLAIN)
- /* sqlite3_test_control(SQLITE_TESTCTRL_EXPLAIN_STMT,
- ** sqlite3_stmt*,const char**);
- **
- ** If compiled with SQLITE_ENABLE_TREE_EXPLAIN, each sqlite3_stmt holds
- ** a string that describes the optimized parse tree. This test-control
- ** returns a pointer to that string.
- */
- case SQLITE_TESTCTRL_EXPLAIN_STMT: {
- sqlite3_stmt *pStmt = va_arg(ap, sqlite3_stmt*);
- const char **pzRet = va_arg(ap, const char**);
- *pzRet = sqlite3VdbeExplanation((Vdbe*)pStmt);
- break;
- }
-#endif
-
/* sqlite3_test_control(SQLITE_TESTCTRL_NEVER_CORRUPT, int);
**
** Set or clear a flag that indicates that the database file is always well-
@@ -125528,6 +128345,13 @@ SQLITE_API int sqlite3_test_control(int op, ...){
break;
}
+ /* sqlite3_test_control(SQLITE_TESTCTRL_SORTER_MMAP, db, nMax); */
+ case SQLITE_TESTCTRL_SORTER_MMAP: {
+ sqlite3 *db = va_arg(ap, sqlite3*);
+ db->nMaxSorterMmap = va_arg(ap, int);
+ break;
+ }
+
/* sqlite3_test_control(SQLITE_TESTCTRL_ISINIT);
**
** Return SQLITE_OK if SQLite has been initialized and SQLITE_ERROR if
@@ -125537,7 +128361,6 @@ SQLITE_API int sqlite3_test_control(int op, ...){
if( sqlite3GlobalConfig.isInit==0 ) rc = SQLITE_ERROR;
break;
}
-
}
va_end(ap);
#endif /* SQLITE_OMIT_BUILTIN_TEST */
@@ -125811,7 +128634,7 @@ SQLITE_API int sqlite3_unlock_notify(
leaveMutex();
assert( !db->mallocFailed );
- sqlite3Error(db, rc, (rc?"database is deadlocked":0));
+ sqlite3ErrorWithMsg(db, rc, (rc?"database is deadlocked":0));
sqlite3_mutex_leave(db->mutex);
return rc;
}
@@ -129953,6 +132776,7 @@ static int fts3FilterMethod(
/* In case the cursor has been used before, clear it now. */
sqlite3_finalize(pCsr->pStmt);
sqlite3_free(pCsr->aDoclist);
+ sqlite3_free(pCsr->aMatchinfo);
sqlite3Fts3ExprFree(pCsr->pExpr);
memset(&pCursor[1], 0, sizeof(Fts3Cursor)-sizeof(sqlite3_vtab_cursor));
@@ -131263,7 +134087,7 @@ static int fts3EvalIncrPhraseNext(
bMaxSet = 1;
}
}
- assert( rc!=SQLITE_OK || a[p->nToken-1].bIgnore==0 );
+ assert( rc!=SQLITE_OK || (p->nToken>=1 && a[p->nToken-1].bIgnore==0) );
assert( rc!=SQLITE_OK || bMaxSet );
/* Keep advancing iterators until they all point to the same document */
@@ -133380,7 +136204,7 @@ static int getNextToken(
/* Set variable i to the maximum number of bytes of input to tokenize. */
for(i=0; i<n; i++){
if( sqlite3_fts3_enable_parentheses && (z[i]=='(' || z[i]==')') ) break;
- if( z[i]=='*' || z[i]=='"' ) break;
+ if( z[i]=='"' ) break;
}
*pnConsumed = i;
diff --git a/src/3rdparty/sqlite/sqlite3.h b/src/3rdparty/sqlite/sqlite3.h
index 9879f80d40..c31f126dbb 100644
--- a/src/3rdparty/sqlite/sqlite3.h
+++ b/src/3rdparty/sqlite/sqlite3.h
@@ -107,9 +107,9 @@ extern "C" {
** [sqlite3_libversion_number()], [sqlite3_sourceid()],
** [sqlite_version()] and [sqlite_source_id()].
*/
-#define SQLITE_VERSION "3.8.6"
-#define SQLITE_VERSION_NUMBER 3008006
-#define SQLITE_SOURCE_ID "2014-08-15 11:46:33 9491ba7d738528f168657adb43a198238abde19e"
+#define SQLITE_VERSION "3.8.7.4"
+#define SQLITE_VERSION_NUMBER 3008007
+#define SQLITE_SOURCE_ID "2014-12-09 01:34:36 f66f7a17b78ba617acde90fc810107f34f1a1f2e"
/*
** CAPI3REF: Run-Time Library Version Numbers
@@ -497,6 +497,7 @@ SQLITE_API int sqlite3_exec(
#define SQLITE_NOTICE_RECOVER_WAL (SQLITE_NOTICE | (1<<8))
#define SQLITE_NOTICE_RECOVER_ROLLBACK (SQLITE_NOTICE | (2<<8))
#define SQLITE_WARNING_AUTOINDEX (SQLITE_WARNING | (1<<8))
+#define SQLITE_AUTH_USER (SQLITE_AUTH | (1<<8))
/*
** CAPI3REF: Flags For File Open Operations
@@ -2099,7 +2100,7 @@ SQLITE_API int sqlite3_busy_handler(sqlite3*, int(*)(void*,int), void*);
** turns off all busy handlers.
**
** ^(There can only be a single busy handler for a particular
-** [database connection] any any given moment. If another busy handler
+** [database connection] at any given moment. If another busy handler
** was defined (using [sqlite3_busy_handler()]) prior to calling
** this routine, that other busy handler is cleared.)^
**
@@ -2303,6 +2304,10 @@ SQLITE_API char *sqlite3_vsnprintf(int,char*,const char*, va_list);
** sqlite3_malloc() is zero or negative then sqlite3_malloc() returns
** a NULL pointer.
**
+** ^The sqlite3_malloc64(N) routine works just like
+** sqlite3_malloc(N) except that N is an unsigned 64-bit integer instead
+** of a signed 32-bit integer.
+**
** ^Calling sqlite3_free() with a pointer previously returned
** by sqlite3_malloc() or sqlite3_realloc() releases that memory so
** that it might be reused. ^The sqlite3_free() routine is
@@ -2314,24 +2319,38 @@ SQLITE_API char *sqlite3_vsnprintf(int,char*,const char*, va_list);
** might result if sqlite3_free() is called with a non-NULL pointer that
** was not obtained from sqlite3_malloc() or sqlite3_realloc().
**
-** ^(The sqlite3_realloc() interface attempts to resize a
-** prior memory allocation to be at least N bytes, where N is the
-** second parameter. The memory allocation to be resized is the first
-** parameter.)^ ^ If the first parameter to sqlite3_realloc()
+** ^The sqlite3_realloc(X,N) interface attempts to resize a
+** prior memory allocation X to be at least N bytes.
+** ^If the X parameter to sqlite3_realloc(X,N)
** is a NULL pointer then its behavior is identical to calling
-** sqlite3_malloc(N) where N is the second parameter to sqlite3_realloc().
-** ^If the second parameter to sqlite3_realloc() is zero or
+** sqlite3_malloc(N).
+** ^If the N parameter to sqlite3_realloc(X,N) is zero or
** negative then the behavior is exactly the same as calling
-** sqlite3_free(P) where P is the first parameter to sqlite3_realloc().
-** ^sqlite3_realloc() returns a pointer to a memory allocation
-** of at least N bytes in size or NULL if sufficient memory is unavailable.
+** sqlite3_free(X).
+** ^sqlite3_realloc(X,N) returns a pointer to a memory allocation
+** of at least N bytes in size or NULL if insufficient memory is available.
** ^If M is the size of the prior allocation, then min(N,M) bytes
** of the prior allocation are copied into the beginning of buffer returned
-** by sqlite3_realloc() and the prior allocation is freed.
-** ^If sqlite3_realloc() returns NULL, then the prior allocation
-** is not freed.
-**
-** ^The memory returned by sqlite3_malloc() and sqlite3_realloc()
+** by sqlite3_realloc(X,N) and the prior allocation is freed.
+** ^If sqlite3_realloc(X,N) returns NULL and N is positive, then the
+** prior allocation is not freed.
+**
+** ^The sqlite3_realloc64(X,N) interfaces works the same as
+** sqlite3_realloc(X,N) except that N is a 64-bit unsigned integer instead
+** of a 32-bit signed integer.
+**
+** ^If X is a memory allocation previously obtained from sqlite3_malloc(),
+** sqlite3_malloc64(), sqlite3_realloc(), or sqlite3_realloc64(), then
+** sqlite3_msize(X) returns the size of that memory allocation in bytes.
+** ^The value returned by sqlite3_msize(X) might be larger than the number
+** of bytes requested when X was allocated. ^If X is a NULL pointer then
+** sqlite3_msize(X) returns zero. If X points to something that is not
+** the beginning of memory allocation, or if it points to a formerly
+** valid memory allocation that has now been freed, then the behavior
+** of sqlite3_msize(X) is undefined and possibly harmful.
+**
+** ^The memory returned by sqlite3_malloc(), sqlite3_realloc(),
+** sqlite3_malloc64(), and sqlite3_realloc64()
** is always aligned to at least an 8 byte boundary, or to a
** 4 byte boundary if the [SQLITE_4_BYTE_ALIGNED_MALLOC] compile-time
** option is used.
@@ -2359,8 +2378,11 @@ SQLITE_API char *sqlite3_vsnprintf(int,char*,const char*, va_list);
** [sqlite3_free()] or [sqlite3_realloc()].
*/
SQLITE_API void *sqlite3_malloc(int);
+SQLITE_API void *sqlite3_malloc64(sqlite3_uint64);
SQLITE_API void *sqlite3_realloc(void*, int);
+SQLITE_API void *sqlite3_realloc64(void*, sqlite3_uint64);
SQLITE_API void sqlite3_free(void*);
+SQLITE_API sqlite3_uint64 sqlite3_msize(void*);
/*
** CAPI3REF: Memory Allocator Statistics
@@ -2647,9 +2669,9 @@ SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
** an English language description of the error following a failure of any
** of the sqlite3_open() routines.
**
-** ^The default encoding for the database will be UTF-8 if
-** sqlite3_open() or sqlite3_open_v2() is called and
-** UTF-16 in the native byte order if sqlite3_open16() is used.
+** ^The default encoding will be UTF-8 for databases created using
+** sqlite3_open() or sqlite3_open_v2(). ^The default encoding for databases
+** created using sqlite3_open16() will be UTF-16 in the native byte order.
**
** Whether or not an error occurs when it is opened, resources
** associated with the [database connection] handle should be released by
@@ -2737,13 +2759,14 @@ SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
** then it is interpreted as an absolute path. ^If the path does not begin
** with a '/' (meaning that the authority section is omitted from the URI)
** then the path is interpreted as a relative path.
-** ^On windows, the first component of an absolute path
-** is a drive specification (e.g. "C:").
+** ^(On windows, the first component of an absolute path
+** is a drive specification (e.g. "C:").)^
**
** [[core URI query parameters]]
** The query component of a URI may contain parameters that are interpreted
** either by SQLite itself, or by a [VFS | custom VFS implementation].
-** SQLite interprets the following three query parameters:
+** SQLite and its built-in [VFSes] interpret the
+** following query parameters:
**
** <ul>
** <li> <b>vfs</b>: ^The "vfs" parameter may be used to specify the name of
@@ -2778,11 +2801,9 @@ SQLITE_API void sqlite3_progress_handler(sqlite3*, int, int(*)(void*), void*);
** a URI filename, its value overrides any behavior requested by setting
** SQLITE_OPEN_PRIVATECACHE or SQLITE_OPEN_SHAREDCACHE flag.
**
-** <li> <b>psow</b>: ^The psow parameter may be "true" (or "on" or "yes" or
-** "1") or "false" (or "off" or "no" or "0") to indicate that the
+** <li> <b>psow</b>: ^The psow parameter indicates whether or not the
** [powersafe overwrite] property does or does not apply to the
-** storage media on which the database file resides. ^The psow query
-** parameter only works for the built-in unix and Windows VFSes.
+** storage media on which the database file resides.
**
** <li> <b>nolock</b>: ^The nolock parameter is a boolean query parameter
** which if set disables file locking in rollback journal modes. This
@@ -3078,6 +3099,10 @@ SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal);
**
** [[SQLITE_LIMIT_TRIGGER_DEPTH]] ^(<dt>SQLITE_LIMIT_TRIGGER_DEPTH</dt>
** <dd>The maximum depth of recursion for triggers.</dd>)^
+**
+** [[SQLITE_LIMIT_WORKER_THREADS]] ^(<dt>SQLITE_LIMIT_WORKER_THREADS</dt>
+** <dd>The maximum number of auxiliary worker threads that a single
+** [prepared statement] may start.</dd>)^
** </dl>
*/
#define SQLITE_LIMIT_LENGTH 0
@@ -3091,6 +3116,7 @@ SQLITE_API int sqlite3_limit(sqlite3*, int id, int newVal);
#define SQLITE_LIMIT_LIKE_PATTERN_LENGTH 8
#define SQLITE_LIMIT_VARIABLE_NUMBER 9
#define SQLITE_LIMIT_TRIGGER_DEPTH 10
+#define SQLITE_LIMIT_WORKER_THREADS 11
/*
** CAPI3REF: Compiling An SQL Statement
@@ -3364,18 +3390,18 @@ typedef struct sqlite3_context sqlite3_context;
** If the fourth parameter to sqlite3_bind_blob() is negative, then
** the behavior is undefined.
** If a non-negative fourth parameter is provided to sqlite3_bind_text()
-** or sqlite3_bind_text16() then that parameter must be the byte offset
+** or sqlite3_bind_text16() or sqlite3_bind_text64() then
+** that parameter must be the byte offset
** where the NUL terminator would occur assuming the string were NUL
** terminated. If any NUL characters occur at byte offsets less than
** the value of the fourth parameter then the resulting string value will
** contain embedded NULs. The result of expressions involving strings
** with embedded NULs is undefined.
**
-** ^The fifth argument to sqlite3_bind_blob(), sqlite3_bind_text(), and
-** sqlite3_bind_text16() is a destructor used to dispose of the BLOB or
+** ^The fifth argument to the BLOB and string binding interfaces
+** is a destructor used to dispose of the BLOB or
** string after SQLite has finished with it. ^The destructor is called
-** to dispose of the BLOB or string even if the call to sqlite3_bind_blob(),
-** sqlite3_bind_text(), or sqlite3_bind_text16() fails.
+** to dispose of the BLOB or string even if the call to bind API fails.
** ^If the fifth argument is
** the special value [SQLITE_STATIC], then SQLite assumes that the
** information is in static, unmanaged space and does not need to be freed.
@@ -3383,6 +3409,14 @@ typedef struct sqlite3_context sqlite3_context;
** SQLite makes its own private copy of the data immediately, before
** the sqlite3_bind_*() routine returns.
**
+** ^The sixth argument to sqlite3_bind_text64() must be one of
+** [SQLITE_UTF8], [SQLITE_UTF16], [SQLITE_UTF16BE], or [SQLITE_UTF16LE]
+** to specify the encoding of the text in the third parameter. If
+** the sixth argument to sqlite3_bind_text64() is not one of the
+** allowed values shown above, or if the text encoding is different
+** from the encoding specified by the sixth parameter, then the behavior
+** is undefined.
+**
** ^The sqlite3_bind_zeroblob() routine binds a BLOB of length N that
** is filled with zeroes. ^A zeroblob uses a fixed amount of memory
** (just an integer to hold its size) while it is being processed.
@@ -3403,6 +3437,9 @@ typedef struct sqlite3_context sqlite3_context;
**
** ^The sqlite3_bind_* routines return [SQLITE_OK] on success or an
** [error code] if anything goes wrong.
+** ^[SQLITE_TOOBIG] might be returned if the size of a string or BLOB
+** exceeds limits imposed by [sqlite3_limit]([SQLITE_LIMIT_LENGTH]) or
+** [SQLITE_MAX_LENGTH].
** ^[SQLITE_RANGE] is returned if the parameter
** index is out of range. ^[SQLITE_NOMEM] is returned if malloc() fails.
**
@@ -3410,12 +3447,16 @@ typedef struct sqlite3_context sqlite3_context;
** [sqlite3_bind_parameter_name()], and [sqlite3_bind_parameter_index()].
*/
SQLITE_API int sqlite3_bind_blob(sqlite3_stmt*, int, const void*, int n, void(*)(void*));
+SQLITE_API int sqlite3_bind_blob64(sqlite3_stmt*, int, const void*, sqlite3_uint64,
+ void(*)(void*));
SQLITE_API int sqlite3_bind_double(sqlite3_stmt*, int, double);
SQLITE_API int sqlite3_bind_int(sqlite3_stmt*, int, int);
SQLITE_API int sqlite3_bind_int64(sqlite3_stmt*, int, sqlite3_int64);
SQLITE_API int sqlite3_bind_null(sqlite3_stmt*, int);
-SQLITE_API int sqlite3_bind_text(sqlite3_stmt*, int, const char*, int n, void(*)(void*));
+SQLITE_API int sqlite3_bind_text(sqlite3_stmt*,int,const char*,int,void(*)(void*));
SQLITE_API int sqlite3_bind_text16(sqlite3_stmt*, int, const void*, int, void(*)(void*));
+SQLITE_API int sqlite3_bind_text64(sqlite3_stmt*, int, const char*, sqlite3_uint64,
+ void(*)(void*), unsigned char encoding);
SQLITE_API int sqlite3_bind_value(sqlite3_stmt*, int, const sqlite3_value*);
SQLITE_API int sqlite3_bind_zeroblob(sqlite3_stmt*, int, int n);
@@ -4164,7 +4205,7 @@ SQLITE_API SQLITE_DEPRECATED int sqlite3_memory_alarm(void(*)(void*,sqlite3_int6
** object results in undefined behavior.
**
** ^These routines work just like the corresponding [column access functions]
-** except that these routines take a single [protected sqlite3_value] object
+** except that these routines take a single [protected sqlite3_value] object
** pointer instead of a [sqlite3_stmt*] pointer and an integer column number.
**
** ^The sqlite3_value_text16() interface extracts a UTF-16 string
@@ -4411,6 +4452,10 @@ typedef void (*sqlite3_destructor_type)(void*);
** set the return value of the application-defined function to be
** a text string which is represented as UTF-8, UTF-16 native byte order,
** UTF-16 little endian, or UTF-16 big endian, respectively.
+** ^The sqlite3_result_text64() interface sets the return value of an
+** application-defined function to be a text string in an encoding
+** specified by the fifth (and last) parameter, which must be one
+** of [SQLITE_UTF8], [SQLITE_UTF16], [SQLITE_UTF16BE], or [SQLITE_UTF16LE].
** ^SQLite takes the text result from the application from
** the 2nd parameter of the sqlite3_result_text* interfaces.
** ^If the 3rd parameter to the sqlite3_result_text* interfaces
@@ -4454,6 +4499,7 @@ typedef void (*sqlite3_destructor_type)(void*);
** the [sqlite3_context] pointer, the results are undefined.
*/
SQLITE_API void sqlite3_result_blob(sqlite3_context*, const void*, int, void(*)(void*));
+SQLITE_API void sqlite3_result_blob64(sqlite3_context*,const void*,sqlite3_uint64,void(*)(void*));
SQLITE_API void sqlite3_result_double(sqlite3_context*, double);
SQLITE_API void sqlite3_result_error(sqlite3_context*, const char*, int);
SQLITE_API void sqlite3_result_error16(sqlite3_context*, const void*, int);
@@ -4464,6 +4510,8 @@ SQLITE_API void sqlite3_result_int(sqlite3_context*, int);
SQLITE_API void sqlite3_result_int64(sqlite3_context*, sqlite3_int64);
SQLITE_API void sqlite3_result_null(sqlite3_context*);
SQLITE_API void sqlite3_result_text(sqlite3_context*, const char*, int, void(*)(void*));
+SQLITE_API void sqlite3_result_text64(sqlite3_context*, const char*,sqlite3_uint64,
+ void(*)(void*), unsigned char encoding);
SQLITE_API void sqlite3_result_text16(sqlite3_context*, const void*, int, void(*)(void*));
SQLITE_API void sqlite3_result_text16le(sqlite3_context*, const void*, int,void(*)(void*));
SQLITE_API void sqlite3_result_text16be(sqlite3_context*, const void*, int,void(*)(void*));
@@ -6160,12 +6208,13 @@ SQLITE_API int sqlite3_test_control(int op, ...);
#define SQLITE_TESTCTRL_ISKEYWORD 16
#define SQLITE_TESTCTRL_SCRATCHMALLOC 17
#define SQLITE_TESTCTRL_LOCALTIME_FAULT 18
-#define SQLITE_TESTCTRL_EXPLAIN_STMT 19
+#define SQLITE_TESTCTRL_EXPLAIN_STMT 19 /* NOT USED */
#define SQLITE_TESTCTRL_NEVER_CORRUPT 20
#define SQLITE_TESTCTRL_VDBE_COVERAGE 21
#define SQLITE_TESTCTRL_BYTEORDER 22
#define SQLITE_TESTCTRL_ISINIT 23
-#define SQLITE_TESTCTRL_LAST 23
+#define SQLITE_TESTCTRL_SORTER_MMAP 24
+#define SQLITE_TESTCTRL_LAST 24
/*
** CAPI3REF: SQLite Runtime Status
@@ -6356,12 +6405,12 @@ SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int r
** the current value is always zero.)^
**
** [[SQLITE_DBSTATUS_CACHE_USED]] ^(<dt>SQLITE_DBSTATUS_CACHE_USED</dt>
-** <dd>This parameter returns the approximate number of of bytes of heap
+** <dd>This parameter returns the approximate number of bytes of heap
** memory used by all pager caches associated with the database connection.)^
** ^The highwater mark associated with SQLITE_DBSTATUS_CACHE_USED is always 0.
**
** [[SQLITE_DBSTATUS_SCHEMA_USED]] ^(<dt>SQLITE_DBSTATUS_SCHEMA_USED</dt>
-** <dd>This parameter returns the approximate number of of bytes of heap
+** <dd>This parameter returns the approximate number of bytes of heap
** memory used to store the schema for all databases associated
** with the connection - main, temp, and any [ATTACH]-ed databases.)^
** ^The full amount of memory used by the schemas is reported, even if the
@@ -6370,7 +6419,7 @@ SQLITE_API int sqlite3_db_status(sqlite3*, int op, int *pCur, int *pHiwtr, int r
** ^The highwater mark associated with SQLITE_DBSTATUS_SCHEMA_USED is always 0.
**
** [[SQLITE_DBSTATUS_STMT_USED]] ^(<dt>SQLITE_DBSTATUS_STMT_USED</dt>
-** <dd>This parameter returns the approximate number of of bytes of heap
+** <dd>This parameter returns the approximate number of bytes of heap
** and lookaside memory used by all prepared statements associated with
** the database connection.)^
** ^The highwater mark associated with SQLITE_DBSTATUS_STMT_USED is always 0.
diff --git a/src/angle/src/config.pri b/src/angle/src/config.pri
index f23bebef44..9a7bc8a68c 100644
--- a/src/angle/src/config.pri
+++ b/src/angle/src/config.pri
@@ -72,8 +72,9 @@ msvc {
# 4275: non - DLL-interface classkey 'identifier' used as base for DLL-interface classkey 'identifier'
# 4512: 'class' : assignment operator could not be generated
# 4702: unreachable code
+ # 4996: Function call with parameters that may be unsafe
QMAKE_CFLAGS_WARN_ON -= -W3
- QMAKE_CFLAGS_WARN_ON += -W4 -wd"4100" -wd"4127" -wd"4189" -wd"4239" -wd"4244" -wd"4245" -wd"4267" -wd"4275" -wd"4512" -wd"4702"
+ QMAKE_CFLAGS_WARN_ON += -W4 -wd"4100" -wd"4127" -wd"4189" -wd"4239" -wd"4244" -wd"4245" -wd"4267" -wd"4275" -wd"4512" -wd"4702" -wd"4996"
# Optimizations
# /Oy: Omits frame pointer (x86 only).
# /Gy: Enables function-level linking.
diff --git a/src/concurrent/qtconcurrentthreadengine.h b/src/concurrent/qtconcurrentthreadengine.h
index b521572f40..d4a19e45c1 100644
--- a/src/concurrent/qtconcurrentthreadengine.h
+++ b/src/concurrent/qtconcurrentthreadengine.h
@@ -107,7 +107,7 @@ private:
void startThreads();
void threadExit();
bool threadThrottleExit();
- void run();
+ void run() Q_DECL_OVERRIDE;
virtual void asynchronousFinish() = 0;
#ifndef QT_NO_EXCEPTIONS
void handleException(const QException &exception);
@@ -167,7 +167,7 @@ public:
return future;
}
- void asynchronousFinish()
+ void asynchronousFinish() Q_DECL_OVERRIDE
{
finish();
futureInterfaceTyped()->reportFinished(result());
diff --git a/src/corelib/animation/qabstractanimation.h b/src/corelib/animation/qabstractanimation.h
index 2c325e7c02..43190cc9e2 100644
--- a/src/corelib/animation/qabstractanimation.h
+++ b/src/corelib/animation/qabstractanimation.h
@@ -111,7 +111,7 @@ public Q_SLOTS:
protected:
QAbstractAnimation(QAbstractAnimationPrivate &dd, QObject *parent = 0);
- bool event(QEvent *event);
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
virtual void updateCurrentTime(int currentTime) = 0;
virtual void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState);
diff --git a/src/corelib/animation/qabstractanimation_p.h b/src/corelib/animation/qabstractanimation_p.h
index 827d6aeb54..6365b45cbe 100644
--- a/src/corelib/animation/qabstractanimation_p.h
+++ b/src/corelib/animation/qabstractanimation_p.h
@@ -110,7 +110,7 @@ class QDefaultAnimationDriver : public QAnimationDriver
Q_OBJECT
public:
QDefaultAnimationDriver(QUnifiedTimer *timer);
- void timerEvent(QTimerEvent *e);
+ void timerEvent(QTimerEvent *e) Q_DECL_OVERRIDE;
private Q_SLOTS:
void startTimer();
@@ -190,7 +190,7 @@ public:
qint64 elapsed() const;
protected:
- void timerEvent(QTimerEvent *);
+ void timerEvent(QTimerEvent *) Q_DECL_OVERRIDE;
private Q_SLOTS:
void startTimers();
@@ -259,11 +259,11 @@ public:
*/
static void updateAnimationTimer();
- void restartAnimationTimer();
- void updateAnimationsTime(qint64 delta);
+ void restartAnimationTimer() Q_DECL_OVERRIDE;
+ void updateAnimationsTime(qint64 delta) Q_DECL_OVERRIDE;
//useful for profiling/debugging
- int runningAnimationCount() { return animations.count(); }
+ int runningAnimationCount() Q_DECL_OVERRIDE { return animations.count(); }
private Q_SLOTS:
void startAnimations();
diff --git a/src/corelib/animation/qanimationgroup.h b/src/corelib/animation/qanimationgroup.h
index 5a027e75ca..59478b07fb 100644
--- a/src/corelib/animation/qanimationgroup.h
+++ b/src/corelib/animation/qanimationgroup.h
@@ -61,7 +61,7 @@ public:
protected:
QAnimationGroup(QAnimationGroupPrivate &dd, QObject *parent);
- bool event(QEvent *event);
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QAnimationGroup)
diff --git a/src/corelib/animation/qparallelanimationgroup.h b/src/corelib/animation/qparallelanimationgroup.h
index 7183823987..7ae3d638a7 100644
--- a/src/corelib/animation/qparallelanimationgroup.h
+++ b/src/corelib/animation/qparallelanimationgroup.h
@@ -50,15 +50,15 @@ public:
QParallelAnimationGroup(QObject *parent = 0);
~QParallelAnimationGroup();
- int duration() const;
+ int duration() const Q_DECL_OVERRIDE;
protected:
QParallelAnimationGroup(QParallelAnimationGroupPrivate &dd, QObject *parent);
- bool event(QEvent *event);
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
- void updateCurrentTime(int currentTime);
- void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState);
- void updateDirection(QAbstractAnimation::Direction direction);
+ void updateCurrentTime(int currentTime) Q_DECL_OVERRIDE;
+ void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState) Q_DECL_OVERRIDE;
+ void updateDirection(QAbstractAnimation::Direction direction) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QParallelAnimationGroup)
diff --git a/src/corelib/animation/qparallelanimationgroup_p.h b/src/corelib/animation/qparallelanimationgroup_p.h
index cfaa851b06..68f26312d7 100644
--- a/src/corelib/animation/qparallelanimationgroup_p.h
+++ b/src/corelib/animation/qparallelanimationgroup_p.h
@@ -72,7 +72,7 @@ public:
void connectUncontrolledAnimations();
void disconnectUncontrolledAnimations();
- void animationRemoved(int index, QAbstractAnimation *);
+ void animationRemoved(int index, QAbstractAnimation *) Q_DECL_OVERRIDE;
// private slot
void _q_uncontrolledAnimationFinished();
diff --git a/src/corelib/animation/qpauseanimation.h b/src/corelib/animation/qpauseanimation.h
index 2d53e6da52..aa11936294 100644
--- a/src/corelib/animation/qpauseanimation.h
+++ b/src/corelib/animation/qpauseanimation.h
@@ -52,12 +52,12 @@ public:
QPauseAnimation(int msecs, QObject *parent = 0);
~QPauseAnimation();
- int duration() const;
+ int duration() const Q_DECL_OVERRIDE;
void setDuration(int msecs);
protected:
- bool event(QEvent *e);
- void updateCurrentTime(int);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
+ void updateCurrentTime(int) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QPauseAnimation)
diff --git a/src/corelib/animation/qpropertyanimation.h b/src/corelib/animation/qpropertyanimation.h
index 437438dd57..ef946416f0 100644
--- a/src/corelib/animation/qpropertyanimation.h
+++ b/src/corelib/animation/qpropertyanimation.h
@@ -60,9 +60,9 @@ public:
void setPropertyName(const QByteArray &propertyName);
protected:
- bool event(QEvent *event);
- void updateCurrentValue(const QVariant &value);
- void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState);
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
+ void updateCurrentValue(const QVariant &value) Q_DECL_OVERRIDE;
+ void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QPropertyAnimation)
diff --git a/src/corelib/animation/qsequentialanimationgroup.h b/src/corelib/animation/qsequentialanimationgroup.h
index 9346d12e26..b1b5670f39 100644
--- a/src/corelib/animation/qsequentialanimationgroup.h
+++ b/src/corelib/animation/qsequentialanimationgroup.h
@@ -57,18 +57,18 @@ public:
QPauseAnimation *insertPause(int index, int msecs);
QAbstractAnimation *currentAnimation() const;
- int duration() const;
+ int duration() const Q_DECL_OVERRIDE;
Q_SIGNALS:
void currentAnimationChanged(QAbstractAnimation *current);
protected:
QSequentialAnimationGroup(QSequentialAnimationGroupPrivate &dd, QObject *parent);
- bool event(QEvent *event);
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
- void updateCurrentTime(int);
- void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState);
- void updateDirection(QAbstractAnimation::Direction direction);
+ void updateCurrentTime(int) Q_DECL_OVERRIDE;
+ void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState) Q_DECL_OVERRIDE;
+ void updateDirection(QAbstractAnimation::Direction direction) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QSequentialAnimationGroup)
diff --git a/src/corelib/animation/qsequentialanimationgroup_p.h b/src/corelib/animation/qsequentialanimationgroup_p.h
index caa32faaf8..2b8ac576bb 100644
--- a/src/corelib/animation/qsequentialanimationgroup_p.h
+++ b/src/corelib/animation/qsequentialanimationgroup_p.h
@@ -76,8 +76,8 @@ public:
void setCurrentAnimation(int index, bool intermediate = false);
void activateCurrentAnimation(bool intermediate = false);
- void animationInsertedAt(int index);
- void animationRemoved(int index, QAbstractAnimation *anim);
+ void animationInsertedAt(int index) Q_DECL_OVERRIDE;
+ void animationRemoved(int index, QAbstractAnimation *anim) Q_DECL_OVERRIDE;
bool atEnd() const;
diff --git a/src/corelib/animation/qvariantanimation.h b/src/corelib/animation/qvariantanimation.h
index f2d8c0cfd3..17e8c2a871 100644
--- a/src/corelib/animation/qvariantanimation.h
+++ b/src/corelib/animation/qvariantanimation.h
@@ -76,7 +76,7 @@ public:
QVariant currentValue() const;
- int duration() const;
+ int duration() const Q_DECL_OVERRIDE;
void setDuration(int msecs);
QEasingCurve easingCurve() const;
@@ -89,10 +89,10 @@ Q_SIGNALS:
protected:
QVariantAnimation(QVariantAnimationPrivate &dd, QObject *parent = 0);
- bool event(QEvent *event);
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
- void updateCurrentTime(int);
- void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState);
+ void updateCurrentTime(int) Q_DECL_OVERRIDE;
+ void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState) Q_DECL_OVERRIDE;
virtual void updateCurrentValue(const QVariant &value);
virtual QVariant interpolated(const QVariant &from, const QVariant &to, qreal progress) const;
diff --git a/src/corelib/arch/qatomic_mips.h b/src/corelib/arch/qatomic_mips.h
index b8a9665f86..b99c70f0c8 100644
--- a/src/corelib/arch/qatomic_mips.h
+++ b/src/corelib/arch/qatomic_mips.h
@@ -120,7 +120,10 @@ void QBasicAtomicOps<size>::releaseMemoryFence(const T &) Q_DECL_NOTHROW
template <int size> template <typename T> inline
void QBasicAtomicOps<size>::orderedMemoryFence(const T &) Q_DECL_NOTHROW
{
- asm volatile ("sync 0" ::: "memory");
+ asm volatile (".set push\n"
+ ".set mips32\n"
+ "sync 0\n"
+ ".set pop\n" ::: "memory");
}
template<> template<typename T> inline
diff --git a/src/corelib/codecs/qicucodec_p.h b/src/corelib/codecs/qicucodec_p.h
index 9786b4398a..900debeb7b 100644
--- a/src/corelib/codecs/qicucodec_p.h
+++ b/src/corelib/codecs/qicucodec_p.h
@@ -66,12 +66,12 @@ public:
static QTextCodec *codecForNameUnlocked(const char *name);
static QTextCodec *codecForMibUnlocked(int mib);
- QString convertToUnicode(const char *, int, ConverterState *) const;
- QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const;
+ QString convertToUnicode(const char *, int, ConverterState *) const Q_DECL_OVERRIDE;
+ QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const Q_DECL_OVERRIDE;
- QByteArray name() const;
- QList<QByteArray> aliases() const;
- int mibEnum() const;
+ QByteArray name() const Q_DECL_OVERRIDE;
+ QList<QByteArray> aliases() const Q_DECL_OVERRIDE;
+ int mibEnum() const Q_DECL_OVERRIDE;
private:
QIcuCodec(const char *name);
diff --git a/src/corelib/codecs/qisciicodec.cpp b/src/corelib/codecs/qisciicodec.cpp
index e0c33aaa50..bd3b31667c 100644
--- a/src/corelib/codecs/qisciicodec.cpp
+++ b/src/corelib/codecs/qisciicodec.cpp
@@ -212,6 +212,7 @@ QByteArray QIsciiCodec::convertFromUnicode(const QChar *uc, int len, ConverterSt
if (iscii > 0x80) {
*ch++ = iscii;
} else if (iscii) {
+ Q_ASSERT((2 * iscii) < (sizeof(uni_to_iscii_pairs) / sizeof(uni_to_iscii_pairs[0])));
const uchar *pair = uni_to_iscii_pairs + 2*iscii;
*ch++ = *pair++;
*ch++ = *pair++;
diff --git a/src/corelib/codecs/qisciicodec_p.h b/src/corelib/codecs/qisciicodec_p.h
index ce49975445..4bf89ccd5e 100644
--- a/src/corelib/codecs/qisciicodec_p.h
+++ b/src/corelib/codecs/qisciicodec_p.h
@@ -58,11 +58,11 @@ public:
static QTextCodec *create(const char *name);
- QByteArray name() const;
- int mibEnum() const;
+ QByteArray name() const Q_DECL_OVERRIDE;
+ int mibEnum() const Q_DECL_OVERRIDE;
- QString convertToUnicode(const char *, int, ConverterState *) const;
- QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const;
+ QString convertToUnicode(const char *, int, ConverterState *) const Q_DECL_OVERRIDE;
+ QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const Q_DECL_OVERRIDE;
private:
int idx;
diff --git a/src/corelib/codecs/qlatincodec_p.h b/src/corelib/codecs/qlatincodec_p.h
index c4c9b11ef7..b51cfb856e 100644
--- a/src/corelib/codecs/qlatincodec_p.h
+++ b/src/corelib/codecs/qlatincodec_p.h
@@ -56,12 +56,12 @@ class QLatin1Codec : public QTextCodec
public:
~QLatin1Codec();
- QString convertToUnicode(const char *, int, ConverterState *) const;
- QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const;
+ QString convertToUnicode(const char *, int, ConverterState *) const Q_DECL_OVERRIDE;
+ QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const Q_DECL_OVERRIDE;
- QByteArray name() const;
- QList<QByteArray> aliases() const;
- int mibEnum() const;
+ QByteArray name() const Q_DECL_OVERRIDE;
+ QList<QByteArray> aliases() const Q_DECL_OVERRIDE;
+ int mibEnum() const Q_DECL_OVERRIDE;
};
@@ -71,12 +71,12 @@ class QLatin15Codec: public QTextCodec
public:
~QLatin15Codec();
- QString convertToUnicode(const char *, int, ConverterState *) const;
- QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const;
+ QString convertToUnicode(const char *, int, ConverterState *) const Q_DECL_OVERRIDE;
+ QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const Q_DECL_OVERRIDE;
- QByteArray name() const;
- QList<QByteArray> aliases() const;
- int mibEnum() const;
+ QByteArray name() const Q_DECL_OVERRIDE;
+ QList<QByteArray> aliases() const Q_DECL_OVERRIDE;
+ int mibEnum() const Q_DECL_OVERRIDE;
};
#endif // QT_NO_TEXTCODEC
diff --git a/src/corelib/codecs/qtsciicodec_p.h b/src/corelib/codecs/qtsciicodec_p.h
index 62a62b718c..030e9a5ed0 100644
--- a/src/corelib/codecs/qtsciicodec_p.h
+++ b/src/corelib/codecs/qtsciicodec_p.h
@@ -84,11 +84,11 @@ class QTsciiCodec : public QTextCodec {
public:
~QTsciiCodec();
- QByteArray name() const;
- int mibEnum() const;
+ QByteArray name() const Q_DECL_OVERRIDE;
+ int mibEnum() const Q_DECL_OVERRIDE;
- QString convertToUnicode(const char *, int, ConverterState *) const;
- QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const;
+ QString convertToUnicode(const char *, int, ConverterState *) const Q_DECL_OVERRIDE;
+ QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const Q_DECL_OVERRIDE;
};
#endif // QT_NO_CODECS
diff --git a/src/corelib/codecs/qutfcodec_p.h b/src/corelib/codecs/qutfcodec_p.h
index eb222bb2d5..16fc9945d3 100644
--- a/src/corelib/codecs/qutfcodec_p.h
+++ b/src/corelib/codecs/qutfcodec_p.h
@@ -305,11 +305,11 @@ class QUtf8Codec : public QTextCodec {
public:
~QUtf8Codec();
- QByteArray name() const;
- int mibEnum() const;
+ QByteArray name() const Q_DECL_OVERRIDE;
+ int mibEnum() const Q_DECL_OVERRIDE;
- QString convertToUnicode(const char *, int, ConverterState *) const;
- QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const;
+ QString convertToUnicode(const char *, int, ConverterState *) const Q_DECL_OVERRIDE;
+ QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const Q_DECL_OVERRIDE;
void convertToUnicode(QString *target, const char *, int, ConverterState *) const;
};
@@ -319,12 +319,12 @@ public:
QUtf16Codec() { e = DetectEndianness; }
~QUtf16Codec();
- QByteArray name() const;
- QList<QByteArray> aliases() const;
- int mibEnum() const;
+ QByteArray name() const Q_DECL_OVERRIDE;
+ QList<QByteArray> aliases() const Q_DECL_OVERRIDE;
+ int mibEnum() const Q_DECL_OVERRIDE;
- QString convertToUnicode(const char *, int, ConverterState *) const;
- QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const;
+ QString convertToUnicode(const char *, int, ConverterState *) const Q_DECL_OVERRIDE;
+ QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const Q_DECL_OVERRIDE;
protected:
DataEndianness e;
@@ -333,17 +333,17 @@ protected:
class QUtf16BECodec : public QUtf16Codec {
public:
QUtf16BECodec() : QUtf16Codec() { e = BigEndianness; }
- QByteArray name() const;
- QList<QByteArray> aliases() const;
- int mibEnum() const;
+ QByteArray name() const Q_DECL_OVERRIDE;
+ QList<QByteArray> aliases() const Q_DECL_OVERRIDE;
+ int mibEnum() const Q_DECL_OVERRIDE;
};
class QUtf16LECodec : public QUtf16Codec {
public:
QUtf16LECodec() : QUtf16Codec() { e = LittleEndianness; }
- QByteArray name() const;
- QList<QByteArray> aliases() const;
- int mibEnum() const;
+ QByteArray name() const Q_DECL_OVERRIDE;
+ QList<QByteArray> aliases() const Q_DECL_OVERRIDE;
+ int mibEnum() const Q_DECL_OVERRIDE;
};
class QUtf32Codec : public QTextCodec {
@@ -351,12 +351,12 @@ public:
QUtf32Codec() { e = DetectEndianness; }
~QUtf32Codec();
- QByteArray name() const;
- QList<QByteArray> aliases() const;
- int mibEnum() const;
+ QByteArray name() const Q_DECL_OVERRIDE;
+ QList<QByteArray> aliases() const Q_DECL_OVERRIDE;
+ int mibEnum() const Q_DECL_OVERRIDE;
- QString convertToUnicode(const char *, int, ConverterState *) const;
- QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const;
+ QString convertToUnicode(const char *, int, ConverterState *) const Q_DECL_OVERRIDE;
+ QByteArray convertFromUnicode(const QChar *, int, ConverterState *) const Q_DECL_OVERRIDE;
protected:
DataEndianness e;
@@ -365,17 +365,17 @@ protected:
class QUtf32BECodec : public QUtf32Codec {
public:
QUtf32BECodec() : QUtf32Codec() { e = BigEndianness; }
- QByteArray name() const;
- QList<QByteArray> aliases() const;
- int mibEnum() const;
+ QByteArray name() const Q_DECL_OVERRIDE;
+ QList<QByteArray> aliases() const Q_DECL_OVERRIDE;
+ int mibEnum() const Q_DECL_OVERRIDE;
};
class QUtf32LECodec : public QUtf32Codec {
public:
QUtf32LECodec() : QUtf32Codec() { e = LittleEndianness; }
- QByteArray name() const;
- QList<QByteArray> aliases() const;
- int mibEnum() const;
+ QByteArray name() const Q_DECL_OVERRIDE;
+ QList<QByteArray> aliases() const Q_DECL_OVERRIDE;
+ int mibEnum() const Q_DECL_OVERRIDE;
};
diff --git a/src/corelib/doc/snippets/code/src_corelib_global_qglobal.cpp b/src/corelib/doc/snippets/code/src_corelib_global_qglobal.cpp
index d804514584..0ddd433d71 100644
--- a/src/corelib/doc/snippets/code/src_corelib_global_qglobal.cpp
+++ b/src/corelib/doc/snippets/code/src_corelib_global_qglobal.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the documentation of the Qt Toolkit.
@@ -253,6 +253,9 @@ void myMessageOutput(QtMsgType type, const QMessageLogContext &context, const QS
case QtDebugMsg:
fprintf(stderr, "Debug: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
break;
+ case QtInfoMsg:
+ fprintf(stderr, "Info: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
+ break;
case QtWarningMsg:
fprintf(stderr, "Warning: %s (%s:%u, %s)\n", localMsg.constData(), context.file, context.line, context.function);
break;
@@ -285,6 +288,14 @@ qDebug() << "Brush:" << myQBrush << "Other value:" << i;
//! [25]
+//! [qInfo_printf]
+qInfo("Items in list: %d", myList.size());
+//! [qInfo_printf]
+
+//! [qInfo_stream]
+qInfo() << "Brush:" << myQBrush << "Other value:" << i;
+//! [qInfo_stream]
+
//! [26]
void f(int c)
{
diff --git a/src/corelib/doc/snippets/code/src_corelib_kernel_qmimedata.cpp b/src/corelib/doc/snippets/code/src_corelib_kernel_qmimedata.cpp
index 7f42cd8def..278a00fdfd 100644
--- a/src/corelib/doc/snippets/code/src_corelib_kernel_qmimedata.cpp
+++ b/src/corelib/doc/snippets/code/src_corelib_kernel_qmimedata.cpp
@@ -106,3 +106,9 @@ if (event->mimeData()->hasColor()) {
...
}
//! [7]
+
+
+//! [8]
+application/x-qt-windows-mime;value="FileContents";index=0
+application/x-qt-windows-mime;value="FileContents";index=1
+//! [8]
diff --git a/src/corelib/doc/snippets/code/src_corelib_tools_qhash.cpp b/src/corelib/doc/snippets/code/src_corelib_tools_qhash.cpp
index aa0473964c..0195b07b54 100644
--- a/src/corelib/doc/snippets/code/src_corelib_tools_qhash.cpp
+++ b/src/corelib/doc/snippets/code/src_corelib_tools_qhash.cpp
@@ -307,3 +307,17 @@ inline uint qHash(const std::vector<int> &key, uint seed = 0)
return qHashBits(&key.front(), key.size() * sizeof(int), seed);
}
//! [qhashbits]
+
+//! [qhashrange]
+inline uint qHash(const std::vector<int> &key, uint seed = 0)
+{
+ return qHashRange(key.begin(), key.end(), seed);
+}
+//! [qhashrange]
+
+//! [qhashrangecommutative]
+inline uint qHash(const std::unordered_set<int> &key, uint seed = 0)
+{
+ return qHashRangeCommutative(key.begin(), key.end(), seed);
+}
+//! [qhashrangecommutative]
diff --git a/src/corelib/doc/snippets/qloggingcategory/main.cpp b/src/corelib/doc/snippets/qloggingcategory/main.cpp
index 3c6424921e..504a88b1a8 100644
--- a/src/corelib/doc/snippets/qloggingcategory/main.cpp
+++ b/src/corelib/doc/snippets/qloggingcategory/main.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the examples of the Qt Toolkit.
@@ -117,6 +117,11 @@ oldCategoryFilter = QLoggingCategory::installFilter(myCategoryFilter);
//![10]
}
+//![qcinfo_stream]
+ QLoggingCategory category("driver.usb");
+ qCInfo(category) << "an informational message";
+//![qcinfo_stream]
+
{
//![11]
QLoggingCategory category("driver.usb");
@@ -139,6 +144,13 @@ oldCategoryFilter = QLoggingCategory::installFilter(myCategoryFilter);
}
{
+//![qcinfo_printf]
+ QLoggingCategory category("driver.usb");
+ qCInfo(category, "an informational message logged into category %s", category.categoryName());
+//![qcinfo_printf]
+ }
+
+ {
//![14]
QLoggingCategory category("driver.usb");
qCWarning(category, "a warning message logged into category %s", category.categoryName());
diff --git a/src/corelib/doc/snippets/qstring/main.cpp b/src/corelib/doc/snippets/qstring/main.cpp
index f49c4dd359..17d0adf097 100644
--- a/src/corelib/doc/snippets/qstring/main.cpp
+++ b/src/corelib/doc/snippets/qstring/main.cpp
@@ -394,6 +394,13 @@ void Widget::firstIndexOfFunction()
QString str = "the minimum";
str.indexOf(QRegularExpression("m[aeiou]"), 0); // returns 4
//! [93]
+
+ //! [97]
+ QString str = "the minimum";
+ QRegularExpressionMatch match;
+ str.indexOf(QRegularExpression("m[aeiou]"), 0, &match); // returns 4
+ // match.captured() == mi
+ //! [97]
}
void Widget::insertFunction()
@@ -444,6 +451,13 @@ void Widget::lastIndexOfFunction()
QString str = "the minimum";
str.lastIndexOf(QRegularExpression("m[aeiou]")); // returns 8
//! [94]
+
+ //! [98]
+ QString str = "the minimum";
+ QRegularExpressionMatch match;
+ str.lastIndexOf(QRegularExpression("m[aeiou]"), -1, &match); // returns 8
+ // match.captured() == mu
+ //! [98]
}
void Widget::leftFunction()
diff --git a/src/corelib/global/global.pri b/src/corelib/global/global.pri
index e0dd9e4f36..0b1374a3bb 100644
--- a/src/corelib/global/global.pri
+++ b/src/corelib/global/global.pri
@@ -36,9 +36,8 @@ INCLUDEPATH += $$QT_BUILD_TREE/src/corelib/global
PRECOMPILED_HEADER = global/qt_pch.h
# qlogging.cpp uses backtrace(3), which is in a separate library on the BSDs.
-LIBS_PRIVATE += $$QMAKE_LIBS_EXECINFO
-linux*:!cross_compile:!static:!*-armcc* {
+if(linux*|hurd*):!cross_compile:!static:!*-armcc* {
QMAKE_LFLAGS += -Wl,-e,qt_core_boilerplate
prog=$$quote(if (/program interpreter: (.*)]/) { print $1; })
DEFINES += ELF_INTERPRETER=\\\"$$system(readelf -l /bin/ls | perl -n -e \'$$prog\')\\\"
diff --git a/src/corelib/global/qcompilerdetection.h b/src/corelib/global/qcompilerdetection.h
index 7effb24130..2881a0fcbd 100644
--- a/src/corelib/global/qcompilerdetection.h
+++ b/src/corelib/global/qcompilerdetection.h
@@ -1,7 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
-** Copyright (C) 2012 Intel Corporation
+** Copyright (C) 2014 Intel Corporation
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtCore module of the Qt Toolkit.
@@ -75,7 +75,6 @@
# if defined(__SC__) && __SC__ < 0x750
# error "Compiler not supported"
# endif
-# define Q_NO_USING_KEYWORD
#elif defined(_MSC_VER)
# define Q_CC_MSVC (_MSC_VER)
@@ -113,7 +112,6 @@
# if __BORLANDC__ < 0x502
# error "Compiler not supported"
# endif
-# define Q_NO_USING_KEYWORD
#elif defined(__WATCOMC__)
# define Q_CC_WAT
@@ -138,7 +136,6 @@
#elif defined(__GNUC__)
# define Q_CC_GNU (__GNUC__ * 100 + __GNUC_MINOR__)
-# define Q_C_CALLBACKS
# if defined(__MINGW32__)
# define Q_CC_MINGW
# endif
@@ -282,7 +279,6 @@
# error "Compiler not supported"
# endif
/* Spurious (?) error messages observed on Compaq C++ V6.5-014. */
-# define Q_NO_USING_KEYWORD
/* Apply to all versions prior to Compaq C++ V6.0-000 - observed on
DEC C++ V5.5-004. */
# if __DECCXX_VER < 60060000
@@ -319,7 +315,6 @@
/* The Comeau compiler is based on EDG and does define __EDG__ */
# if defined(__COMO__)
# define Q_CC_COMEAU
-# define Q_C_CALLBACKS
/* The `using' keyword was introduced to avoid KAI C++ warnings
but it's now causing KAI C++ errors instead. The standard is
@@ -327,7 +322,6 @@
compiler is using its own set of rules. Forget it. */
# elif defined(__KCC)
# define Q_CC_KAI
-# define Q_NO_USING_KEYWORD
/* Using the `using' keyword avoids Intel C++ for Linux warnings */
# elif defined(__INTEL_COMPILER)
@@ -350,23 +344,19 @@
# if !defined(__SCO_VERSION__) || (__SCO_VERSION__ < 302200010)
# define Q_OUTOFLINE_TEMPLATE inline
# endif
-# define Q_NO_USING_KEYWORD /* ### check "using" status */
/* Never tested! */
# elif defined(CENTERLINE_CLPP) || defined(OBJECTCENTER)
# define Q_CC_OC
-# define Q_NO_USING_KEYWORD
/* CDS++ defines __EDG__ although this is not documented in the Reliant
documentation. It also follows conventions like _BOOL and this documented */
# elif defined(sinix)
# define Q_CC_CDS
-# define Q_NO_USING_KEYWORD
/* The MIPSpro compiler defines __EDG */
# elif defined(__sgi)
# define Q_CC_MIPS
-# define Q_NO_USING_KEYWORD /* ### check "using" status */
# define Q_NO_TEMPLATE_FRIENDS
# if defined(_COMPILER_VERSION) && (_COMPILER_VERSION >= 740)
# define Q_OUTOFLINE_TEMPLATE inline
@@ -408,10 +398,6 @@
# if !defined(_BOOL)
# error "Compiler not supported"
# endif
-# if defined(__SUNPRO_CC_COMPAT) && (__SUNPRO_CC_COMPAT <= 4)
-# define Q_NO_USING_KEYWORD
-# endif
-# define Q_C_CALLBACKS
/* 4.2 compiler or older */
# else
# error "Compiler not supported"
@@ -449,7 +435,6 @@
# else
# error "Compiler not supported"
# endif
-# define Q_NO_USING_KEYWORD /* ### check "using" status */
#else
# error "Qt has not been tested with this compiler - see http://www.qt-project.org/"
@@ -515,7 +500,7 @@
// at least since 13.1, but I can't test further back
# define Q_COMPILER_BINARY_LITERALS
# endif
-# if __cplusplus >= 201103L
+# if __cplusplus >= 201103L || defined(__INTEL_CXX11_MODE__)
# if __INTEL_COMPILER >= 1200
# define Q_COMPILER_AUTO_TYPE
# define Q_COMPILER_CLASS_ENUM
@@ -533,6 +518,9 @@
# define Q_COMPILER_AUTO_FUNCTION
# define Q_COMPILER_NULLPTR
# define Q_COMPILER_TEMPLATE_ALIAS
+# ifndef _CHAR16T // MSVC headers
+# define Q_COMPILER_UNICODE_STRINGS
+# endif
# define Q_COMPILER_VARIADIC_TEMPLATES
# endif
# if __INTEL_COMPILER >= 1300
@@ -879,7 +867,24 @@
# if _MSC_FULL_VER >= 180030324 // VC 12 SP 2 RC
# define Q_COMPILER_INITIALIZER_LISTS
# endif /* VC 12 SP 2 RC */
-
+# if _MSC_VER >= 1900
+ /* C++11 features in VC14 = VC2015 */
+# define Q_COMPILER_ALIGNAS
+# define Q_COMPILER_ALIGNOF
+// Partial support, insufficient for Qt
+//# define Q_COMPILER_CONSTEXPR
+# define Q_COMPILER_INHERITING_CONSTRUCTORS
+# define Q_COMPILER_NOEXCEPT
+# define Q_COMPILER_RANGE_FOR
+# define Q_COMPILER_REF_QUALIFIERS
+# define Q_COMPILER_THREAD_LOCAL
+# define Q_COMPILER_THREADSAFE_STATICS
+# define Q_COMPILER_UDL
+# define Q_COMPILER_UNICODE_STRINGS
+// Uniform initialization is not working yet -- build errors with QUuid
+//# define Q_COMPILER_UNIFORM_INIT
+# define Q_COMPILER_UNRESTRICTED_UNIONS
+# endif
# endif /* __cplusplus */
#endif /* Q_CC_MSVC */
@@ -949,12 +954,21 @@
# define Q_COMPILER_DEFAULT_DELETE_MEMBERS
#endif
-#ifdef Q_COMPILER_CONSTEXPR
+#if defined(__cpp_constexpr) && __cpp_constexpr-0 >= 201304
+# define Q_DECL_CONSTEXPR constexpr
+# define Q_DECL_RELAXED_CONSTEXPR constexpr
+# define Q_CONSTEXPR constexpr
+# define Q_RELAXED_CONSTEXPR constexpr
+#elif defined Q_COMPILER_CONSTEXPR
# define Q_DECL_CONSTEXPR constexpr
+# define Q_DECL_RELAXED_CONSTEXPR
# define Q_CONSTEXPR constexpr
+# define Q_RELAXED_CONSTEXPR const
#else
# define Q_DECL_CONSTEXPR
+# define Q_DECL_RELAXED_CONSTEXPR
# define Q_CONSTEXPR const
+# define Q_RELAXED_CONSTEXPR const
#endif
#ifdef Q_COMPILER_EXPLICIT_OVERRIDES
@@ -1057,6 +1071,60 @@
#endif
/*
+ * Warning/diagnostic handling
+ */
+
+#define QT_DO_PRAGMA(text) _Pragma(#text)
+#if defined(Q_CC_INTEL) && defined(Q_CC_MSVC)
+/* icl.exe: Intel compiler on Windows */
+# undef QT_DO_PRAGMA /* not needed */
+# define QT_WARNING_PUSH __pragma(warning(push))
+# define QT_WARNING_POP __pragma(warning(pop))
+# define QT_WARNING_DISABLE_MSVC(number)
+# define QT_WARNING_DISABLE_INTEL(number) __pragma(warning(disable: number))
+# define QT_WARNING_DISABLE_CLANG(text)
+# define QT_WARNING_DISABLE_GCC(text)
+#elif defined(Q_CC_INTEL)
+/* icc: Intel compiler on Linux or OS X */
+# define QT_WARNING_PUSH QT_DO_PRAGMA(warning(push))
+# define QT_WARNING_POP QT_DO_PRAGMA(warning(pop))
+# define QT_WARNING_DISABLE_INTEL(number) QT_DO_PRAGMA(warning(disable: number))
+# define QT_WARNING_DISABLE_MSVC(number)
+# define QT_WARNING_DISABLE_CLANG(text)
+# define QT_WARNING_DISABLE_GCC(text)
+#elif defined(Q_CC_MSVC) && _MSC_VER >= 1500
+# undef QT_DO_PRAGMA /* not needed */
+# define QT_WARNING_PUSH __pragma(warning(push))
+# define QT_WARNING_POP __pragma(warning(pop))
+# define QT_WARNING_DISABLE_MSVC(number) __pragma(warning(disable: number))
+# define QT_WARNING_DISABLE_INTEL(number)
+# define QT_WARNING_DISABLE_CLANG(text)
+# define QT_WARNING_DISABLE_GCC(text)
+#elif defined(Q_CC_CLANG)
+# define QT_WARNING_PUSH QT_DO_PRAGMA(clang diagnostic push)
+# define QT_WARNING_POP QT_DO_PRAGMA(clang diagnostic pop)
+# define QT_WARNING_DISABLE_CLANG(text) QT_DO_PRAGMA(clang diagnostic ignored text)
+# define QT_WARNING_DISABLE_GCC(text) QT_DO_PRAGMA(GCC diagnostic ignored text) // GCC directives work in Clang too
+# define QT_WARNING_DISABLE_INTEL(number)
+# define QT_WARNING_DISABLE_MSVC(number)
+#elif defined(Q_CC_GNU) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 405)
+# define QT_WARNING_PUSH QT_DO_PRAGMA(GCC diagnostic push)
+# define QT_WARNING_POP QT_DO_PRAGMA(GCC diagnostic pop)
+# define QT_WARNING_DISABLE_GCC(text) QT_DO_PRAGMA(GCC diagnostic ignored text)
+# define QT_WARNING_DISABLE_CLANG(text)
+# define QT_WARNING_DISABLE_INTEL(number)
+# define QT_WARNING_DISABLE_MSVC(number)
+#else // All other compilers, GCC < 4.6 and MSVC < 2008
+# define QT_WARNING_DISABLE_GCC(text)
+# define QT_WARNING_PUSH
+# define QT_WARNING_POP
+# define QT_WARNING_DISABLE_INTEL(number)
+# define QT_WARNING_DISABLE_MSVC(number)
+# define QT_WARNING_DISABLE_CLANG(text)
+# define QT_WARNING_DISABLE_GCC(text)
+#endif
+
+/*
Proper for-scoping in MIPSpro CC
*/
#ifndef QT_NO_KEYWORDS
diff --git a/src/corelib/global/qflags.h b/src/corelib/global/qflags.h
index 275ab12800..0b7b23e039 100644
--- a/src/corelib/global/qflags.h
+++ b/src/corelib/global/qflags.h
@@ -49,21 +49,21 @@ class QFlag
{
int i;
public:
- Q_DECL_CONSTEXPR inline QFlag(int ai) : i(ai) {}
- Q_DECL_CONSTEXPR inline operator int() const { return i; }
+ Q_DECL_CONSTEXPR inline QFlag(int ai) Q_DECL_NOTHROW : i(ai) {}
+ Q_DECL_CONSTEXPR inline operator int() const Q_DECL_NOTHROW { return i; }
#if !defined(Q_CC_MSVC)
// Microsoft Visual Studio has buggy behavior when it comes to
// unsigned enums: even if the enum is unsigned, the enum tags are
// always signed
# if !defined(__LP64__) && !defined(Q_QDOC)
- Q_DECL_CONSTEXPR inline QFlag(long ai) : i(int(ai)) {}
- Q_DECL_CONSTEXPR inline QFlag(ulong ai) : i(int(long(ai))) {}
+ Q_DECL_CONSTEXPR inline QFlag(long ai) Q_DECL_NOTHROW : i(int(ai)) {}
+ Q_DECL_CONSTEXPR inline QFlag(ulong ai) Q_DECL_NOTHROW : i(int(long(ai))) {}
# endif
- Q_DECL_CONSTEXPR inline QFlag(uint ai) : i(int(ai)) {}
- Q_DECL_CONSTEXPR inline QFlag(short ai) : i(int(ai)) {}
- Q_DECL_CONSTEXPR inline QFlag(ushort ai) : i(int(uint(ai))) {}
- Q_DECL_CONSTEXPR inline operator uint() const { return uint(i); }
+ Q_DECL_CONSTEXPR inline QFlag(uint ai) Q_DECL_NOTHROW : i(int(ai)) {}
+ Q_DECL_CONSTEXPR inline QFlag(short ai) Q_DECL_NOTHROW : i(int(ai)) {}
+ Q_DECL_CONSTEXPR inline QFlag(ushort ai) Q_DECL_NOTHROW : i(int(uint(ai))) {}
+ Q_DECL_CONSTEXPR inline operator uint() const Q_DECL_NOTHROW { return uint(i); }
#endif
};
Q_DECLARE_TYPEINFO(QFlag, Q_PRIMITIVE_TYPE);
@@ -72,12 +72,12 @@ class QIncompatibleFlag
{
int i;
public:
- Q_DECL_CONSTEXPR inline explicit QIncompatibleFlag(int i);
- Q_DECL_CONSTEXPR inline operator int() const { return i; }
+ Q_DECL_CONSTEXPR inline explicit QIncompatibleFlag(int i) Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR inline operator int() const Q_DECL_NOTHROW { return i; }
};
Q_DECLARE_TYPEINFO(QIncompatibleFlag, Q_PRIMITIVE_TYPE);
-Q_DECL_CONSTEXPR inline QIncompatibleFlag::QIncompatibleFlag(int ai) : i(ai) {}
+Q_DECL_CONSTEXPR inline QIncompatibleFlag::QIncompatibleFlag(int ai) Q_DECL_NOTHROW : i(ai) {}
#ifndef Q_NO_TYPESAFE_FLAGS
@@ -108,41 +108,42 @@ public:
inline QFlags(const QFlags &other);
inline QFlags &operator=(const QFlags &other);
#endif
- Q_DECL_CONSTEXPR inline QFlags(Enum f) : i(Int(f)) {}
- Q_DECL_CONSTEXPR inline QFlags(Zero = 0) : i(0) {}
- Q_DECL_CONSTEXPR inline QFlags(QFlag f) : i(f) {}
+ Q_DECL_CONSTEXPR inline QFlags(Enum f) Q_DECL_NOTHROW : i(Int(f)) {}
+ Q_DECL_CONSTEXPR inline QFlags(Zero = 0) Q_DECL_NOTHROW : i(0) {}
+ Q_DECL_CONSTEXPR inline QFlags(QFlag f) Q_DECL_NOTHROW : i(f) {}
#ifdef Q_COMPILER_INITIALIZER_LISTS
- Q_DECL_CONSTEXPR inline QFlags(std::initializer_list<Enum> flags)
+ Q_DECL_CONSTEXPR inline QFlags(std::initializer_list<Enum> flags) Q_DECL_NOTHROW
: i(initializer_list_helper(flags.begin(), flags.end())) {}
#endif
- inline QFlags &operator&=(int mask) { i &= mask; return *this; }
- inline QFlags &operator&=(uint mask) { i &= mask; return *this; }
- inline QFlags &operator&=(Enum mask) { i &= Int(mask); return *this; }
- inline QFlags &operator|=(QFlags f) { i |= f.i; return *this; }
- inline QFlags &operator|=(Enum f) { i |= Int(f); return *this; }
- inline QFlags &operator^=(QFlags f) { i ^= f.i; return *this; }
- inline QFlags &operator^=(Enum f) { i ^= Int(f); return *this; }
+ Q_DECL_RELAXED_CONSTEXPR inline QFlags &operator&=(int mask) Q_DECL_NOTHROW { i &= mask; return *this; }
+ Q_DECL_RELAXED_CONSTEXPR inline QFlags &operator&=(uint mask) Q_DECL_NOTHROW { i &= mask; return *this; }
+ Q_DECL_RELAXED_CONSTEXPR inline QFlags &operator&=(Enum mask) Q_DECL_NOTHROW { i &= Int(mask); return *this; }
+ Q_DECL_RELAXED_CONSTEXPR inline QFlags &operator|=(QFlags f) Q_DECL_NOTHROW { i |= f.i; return *this; }
+ Q_DECL_RELAXED_CONSTEXPR inline QFlags &operator|=(Enum f) Q_DECL_NOTHROW { i |= Int(f); return *this; }
+ Q_DECL_RELAXED_CONSTEXPR inline QFlags &operator^=(QFlags f) Q_DECL_NOTHROW { i ^= f.i; return *this; }
+ Q_DECL_RELAXED_CONSTEXPR inline QFlags &operator^=(Enum f) Q_DECL_NOTHROW { i ^= Int(f); return *this; }
- Q_DECL_CONSTEXPR inline operator Int() const { return i; }
+ Q_DECL_CONSTEXPR inline operator Int() const Q_DECL_NOTHROW { return i; }
- Q_DECL_CONSTEXPR inline QFlags operator|(QFlags f) const { return QFlags(QFlag(i | f.i)); }
- Q_DECL_CONSTEXPR inline QFlags operator|(Enum f) const { return QFlags(QFlag(i | Int(f))); }
- Q_DECL_CONSTEXPR inline QFlags operator^(QFlags f) const { return QFlags(QFlag(i ^ f.i)); }
- Q_DECL_CONSTEXPR inline QFlags operator^(Enum f) const { return QFlags(QFlag(i ^ Int(f))); }
- Q_DECL_CONSTEXPR inline QFlags operator&(int mask) const { return QFlags(QFlag(i & mask)); }
- Q_DECL_CONSTEXPR inline QFlags operator&(uint mask) const { return QFlags(QFlag(i & mask)); }
- Q_DECL_CONSTEXPR inline QFlags operator&(Enum f) const { return QFlags(QFlag(i & Int(f))); }
- Q_DECL_CONSTEXPR inline QFlags operator~() const { return QFlags(QFlag(~i)); }
+ Q_DECL_CONSTEXPR inline QFlags operator|(QFlags f) const Q_DECL_NOTHROW { return QFlags(QFlag(i | f.i)); }
+ Q_DECL_CONSTEXPR inline QFlags operator|(Enum f) const Q_DECL_NOTHROW { return QFlags(QFlag(i | Int(f))); }
+ Q_DECL_CONSTEXPR inline QFlags operator^(QFlags f) const Q_DECL_NOTHROW { return QFlags(QFlag(i ^ f.i)); }
+ Q_DECL_CONSTEXPR inline QFlags operator^(Enum f) const Q_DECL_NOTHROW { return QFlags(QFlag(i ^ Int(f))); }
+ Q_DECL_CONSTEXPR inline QFlags operator&(int mask) const Q_DECL_NOTHROW { return QFlags(QFlag(i & mask)); }
+ Q_DECL_CONSTEXPR inline QFlags operator&(uint mask) const Q_DECL_NOTHROW { return QFlags(QFlag(i & mask)); }
+ Q_DECL_CONSTEXPR inline QFlags operator&(Enum f) const Q_DECL_NOTHROW { return QFlags(QFlag(i & Int(f))); }
+ Q_DECL_CONSTEXPR inline QFlags operator~() const Q_DECL_NOTHROW { return QFlags(QFlag(~i)); }
- Q_DECL_CONSTEXPR inline bool operator!() const { return !i; }
+ Q_DECL_CONSTEXPR inline bool operator!() const Q_DECL_NOTHROW { return !i; }
- Q_DECL_CONSTEXPR inline bool testFlag(Enum f) const { return (i & Int(f)) == Int(f) && (Int(f) != 0 || i == Int(f) ); }
+ Q_DECL_CONSTEXPR inline bool testFlag(Enum f) const Q_DECL_NOTHROW { return (i & Int(f)) == Int(f) && (Int(f) != 0 || i == Int(f) ); }
private:
#ifdef Q_COMPILER_INITIALIZER_LISTS
Q_DECL_CONSTEXPR static inline Int initializer_list_helper(typename std::initializer_list<Enum>::const_iterator it,
typename std::initializer_list<Enum>::const_iterator end)
+ Q_DECL_NOTHROW
{
return (it == end ? Int(0) : (Int(*it) | initializer_list_helper(it + 1, end)));
}
@@ -155,13 +156,13 @@ private:
typedef QFlags<Enum> Flags;
#define Q_DECLARE_INCOMPATIBLE_FLAGS(Flags) \
-Q_DECL_CONSTEXPR inline QIncompatibleFlag operator|(Flags::enum_type f1, int f2) \
+Q_DECL_CONSTEXPR inline QIncompatibleFlag operator|(Flags::enum_type f1, int f2) Q_DECL_NOTHROW \
{ return QIncompatibleFlag(int(f1) | f2); }
#define Q_DECLARE_OPERATORS_FOR_FLAGS(Flags) \
-Q_DECL_CONSTEXPR inline QFlags<Flags::enum_type> operator|(Flags::enum_type f1, Flags::enum_type f2) \
+Q_DECL_CONSTEXPR inline QFlags<Flags::enum_type> operator|(Flags::enum_type f1, Flags::enum_type f2) Q_DECL_NOTHROW \
{ return QFlags<Flags::enum_type>(f1) | f2; } \
-Q_DECL_CONSTEXPR inline QFlags<Flags::enum_type> operator|(Flags::enum_type f1, QFlags<Flags::enum_type> f2) \
+Q_DECL_CONSTEXPR inline QFlags<Flags::enum_type> operator|(Flags::enum_type f1, QFlags<Flags::enum_type> f2) Q_DECL_NOTHROW \
{ return f2 | f1; } Q_DECLARE_INCOMPATIBLE_FLAGS(Flags)
diff --git a/src/corelib/global/qglobal.cpp b/src/corelib/global/qglobal.cpp
index 997e804579..0a9e2f97db 100644
--- a/src/corelib/global/qglobal.cpp
+++ b/src/corelib/global/qglobal.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies).
** Copyright (C) 2014 Intel Corporation
** Contact: http://www.qt-project.org/legal
**
@@ -39,6 +39,7 @@
#include "qthreadstorage.h"
#include "qdir.h"
#include "qdatetime.h"
+#include <private/qlocale_tools_p.h>
#include <private/qsystemlibrary_p.h>
@@ -548,9 +549,9 @@ Q_STATIC_ASSERT_X(UCHAR_MAX == 255, "Qt assumes that char is 8 bits");
\snippet code/src_corelib_global_qglobal.cpp 3
<QtGlobal> also contains functions that generate messages from the
- given string argument: qCritical(), qDebug(), qFatal() and
- qWarning(). These functions call the message handler with the
- given message.
+ given string argument: qDebug(), qInfo(), qWarning(), qCritical(),
+ and qFatal(). These functions call the message handler
+ with the given message.
Example:
@@ -769,6 +770,8 @@ Q_STATIC_ASSERT_X(UCHAR_MAX == 255, "Qt assumes that char is 8 bits");
\value QtDebugMsg
A message generated by the qDebug() function.
+ \value QtInfoMsg
+ A message generated by the qInfo() function.
\value QtWarningMsg
A message generated by the qWarning() function.
\value QtCriticalMsg
@@ -777,6 +780,7 @@ Q_STATIC_ASSERT_X(UCHAR_MAX == 255, "Qt assumes that char is 8 bits");
A message generated by the qFatal() function.
\value QtSystemMsg
+ \c QtInfoMsg was added in Qt 5.5.
\sa QtMessageHandler, qInstallMessageHandler()
*/
@@ -986,9 +990,9 @@ bool qSharedBuild() Q_DECL_NOTHROW
\li \l ByteOrder specifies whether the platform is big-endian or
little-endian.
\li \l WindowsVersion specifies the version of the Windows operating
- system on which the application is run (Windows only)
+ system on which the application is run.
\li \l MacintoshVersion specifies the version of the Macintosh
- operating system on which the application is run (Mac only).
+ operating system on which the application is run.
\endlist
Some constants are defined only on certain platforms. You can use
@@ -1011,7 +1015,7 @@ bool qSharedBuild() Q_DECL_NOTHROW
/*!
\variable QSysInfo::WindowsVersion
\brief the version of the Windows operating system on which the
- application is run (Windows only)
+ application is run.
*/
/*!
@@ -1019,19 +1023,22 @@ bool qSharedBuild() Q_DECL_NOTHROW
\since 4.4
Returns the version of the Windows operating system on which the
- application is run (Windows only).
+ application is run, or WV_None if the operating system is not
+ Windows.
*/
/*!
\variable QSysInfo::MacintoshVersion
\brief the version of the Macintosh operating system on which
- the application is run (Mac only).
+ the application is run.
*/
/*!
\fn QSysInfo::MacVersion QSysInfo::macVersion()
- Returns the version of Darwin (OS X or iOS) on which the application is run.
+ Returns the version of Darwin (OS X or iOS) on which the
+ application is run, or MV_None if the operating system
+ is not a version of Darwin.
*/
/*!
@@ -1068,6 +1075,7 @@ bool qSharedBuild() Q_DECL_NOTHROW
\value WV_WINDOWS7 Windows 7, Windows Server 2008 R2 (operating system version 6.1)
\value WV_WINDOWS8 Windows 8 (operating system version 6.2)
\value WV_WINDOWS8_1 Windows 8.1 (operating system version 6.3), introduced in Qt 5.2
+ \value WV_WINDOWS10 Windows 10 (operating system version 10.0), introduced in Qt 5.5
Alternatively, you may use the following macros which correspond directly to the Windows operating system version number:
@@ -1079,6 +1087,7 @@ bool qSharedBuild() Q_DECL_NOTHROW
\value WV_6_1 Operating system version 6.1, corresponds to Windows 7 and Windows Server 2008 R2
\value WV_6_2 Operating system version 6.2, corresponds to Windows 8
\value WV_6_3 Operating system version 6.3, corresponds to Windows 8.1, introduced in Qt 5.2
+ \value WV_10_0 Operating system version 10.0, corresponds to Windows 10, introduced in Qt 5.5
CE-based versions:
@@ -1094,6 +1103,8 @@ bool qSharedBuild() Q_DECL_NOTHROW
\value WV_NT_based NT-based version of Windows
\value WV_CE_based CE-based version of Windows
+ \value WV_None Operating system other than Windows.
+
\sa MacVersion
*/
@@ -1141,6 +1152,8 @@ bool qSharedBuild() Q_DECL_NOTHROW
\value MV_IOS_7_1 iOS 7.1
\value MV_IOS_8_0 iOS 8.0
+ \value MV_None Not a Darwin operating system
+
\sa WinVersion
*/
@@ -1847,16 +1860,14 @@ Q_CORE_EXPORT QString qt_mac_from_pascal_string(const Str255 pstr) {
QSysInfo::MacVersion QSysInfo::macVersion()
{
+ const QAppleOperatingSystemVersion version = qt_apple_os_version(); // qtcore_mac_objc.mm
#if defined(Q_OS_OSX)
- SInt32 gestalt_version;
- if (Gestalt(gestaltSystemVersionMinor, &gestalt_version) == noErr) {
- // add 2 because OS X 10.0 is 0x02 in the enum
- return QSysInfo::MacVersion(gestalt_version + 2);
- }
+ return QSysInfo::MacVersion(Q_MV_OSX(version.major, version.minor));
#elif defined(Q_OS_IOS)
- return qt_ios_version(); // qtcore_mac_objc.mm
-#endif
+ return QSysInfo::MacVersion(Q_MV_IOS(version.major, version.minor));
+#else
return QSysInfo::MV_Unknown;
+#endif
}
const QSysInfo::MacVersion QSysInfo::MacintoshVersion = QSysInfo::macVersion();
@@ -2024,6 +2035,8 @@ QSysInfo::WinVersion QSysInfo::windowsVersion()
winver = QSysInfo::WV_WINDOWS8;
} else if (osver.dwMajorVersion == 6 && osver.dwMinorVersion == 3) {
winver = QSysInfo::WV_WINDOWS8_1;
+ } else if (osver.dwMajorVersion == 10 && osver.dwMinorVersion == 0) {
+ winver = QSysInfo::WV_WINDOWS10;
} else {
qWarning("Qt: Untested Windows version %d.%d detected!",
int(osver.dwMajorVersion), int(osver.dwMinorVersion));
@@ -2516,6 +2529,9 @@ QString QSysInfo::productType()
#elif defined(Q_OS_DARWIN)
return QStringLiteral("darwin");
+#elif defined(Q_OS_HAIKU)
+ return QStringLiteral("haiku");
+
#elif defined(USE_ETC_OS_RELEASE) // Q_OS_UNIX
QUnixOSVersion unixOsVersion;
readEtcOsRelease(unixOsVersion);
@@ -2551,25 +2567,9 @@ QString QSysInfo::productType()
*/
QString QSysInfo::productVersion()
{
-#if defined(Q_OS_IOS)
- int major = (int(MacintoshVersion) >> 4) & 0xf;
- int minor = int(MacintoshVersion) & 0xf;
- if (Q_LIKELY(major < 10 && minor < 10)) {
- char buf[4] = { char(major + '0'), '.', char(minor + '0'), '\0' };
- return QString::fromLatin1(buf, 3);
- }
- return QString::number(major) + QLatin1Char('.') + QString::number(minor);
-#elif defined(Q_OS_OSX)
- int minor = int(MacintoshVersion) - 2; // we're not running on Mac OS 9
- Q_ASSERT(minor < 100);
- char buf[] = "10.0\0";
- if (Q_LIKELY(minor < 10)) {
- buf[3] += minor;
- } else {
- buf[3] += minor / 10;
- buf[4] = '0' + minor % 10;
- }
- return QString::fromLatin1(buf);
+#if defined(Q_OS_MAC)
+ const QAppleOperatingSystemVersion version = qt_apple_os_version();
+ return QString::number(version.major) + QLatin1Char('.') + QString::number(version.minor);
#elif defined(Q_OS_WIN)
const char *version = winVer_helper();
if (version)
@@ -2662,6 +2662,8 @@ QString QSysInfo::prettyProductName()
return QLatin1String("Android ") + productVersion();
#elif defined(Q_OS_BLACKBERRY)
return QLatin1String("BlackBerry ") + productVersion();
+#elif defined(Q_OS_HAIKU)
+ return QLatin1String("Haiku ") + productVersion();
#elif defined(Q_OS_UNIX)
# ifdef USE_ETC_OS_RELEASE
QUnixOSVersion unixOsVersion;
@@ -3065,6 +3067,53 @@ bool qEnvironmentVariableIsEmpty(const char *varName) Q_DECL_NOEXCEPT
/*!
\relates <QtGlobal>
+ \since 5.5
+
+ Returns the numerical value of the environment variable \a varName.
+ If \a ok is not null, sets \c{*ok} to \c true or \c false depending
+ on the success of the conversion.
+
+ Equivalent to
+ \code
+ qgetenv(varName).toInt()
+ \endcode
+ except that it's much faster, and can't throw exceptions.
+
+ \sa qgetenv(), qEnvironmentVariableIsSet()
+*/
+int qEnvironmentVariableIntValue(const char *varName, bool *ok) Q_DECL_NOEXCEPT
+{
+#if defined(_MSC_VER) && _MSC_VER >= 1400
+ // we provide a buffer that can hold any int value:
+ static const int NumBinaryDigitsPerOctalDigit = 3;
+ static const int MaxDigitsForOctalInt =
+ (std::numeric_limits<uint>::digits + NumBinaryDigitsPerOctalDigit - 1) / NumBinaryDigitsPerOctalDigit;
+ char buffer[MaxDigitsForOctalInt + 2]; // +1 for NUL +1 for optional '-'
+ size_t dummy;
+ if (getenv_s(&dummy, buffer, sizeof buffer, varName) != 0) {
+ if (ok)
+ *ok = false;
+ return 0;
+ }
+#else
+ const char * const buffer = ::getenv(varName);
+ if (!buffer || !*buffer) {
+ if (ok)
+ *ok = false;
+ return 0;
+ }
+#endif
+ const qlonglong value = qstrtoll(buffer, Q_NULLPTR, 0, ok);
+ if (int(value) != value) { // this is the check in QByteArray::toInt(), keep it in sync
+ if (ok)
+ *ok = false;
+ return 0;
+ }
+ return int(value);
+}
+
+/*!
+ \relates <QtGlobal>
\since 5.1
Returns whether the environment variable \a varName is set.
@@ -3556,8 +3605,8 @@ int qrand()
qPrintable() is used. This is because the array returned by
QString::toLocal8Bit() will fall out of scope.
- \note qDebug(), qWarning(), qCritical(), qFatal() expect %s
- arguments to be UTF-8 encoded, while qPrintable() converts to
+ \note qDebug(), qInfo(), qWarning(), qCritical(), qFatal() expect
+ %s arguments to be UTF-8 encoded, while qPrintable() converts to
local 8-bit encoding. Therefore qUtf8Printable() should be used
for logging strings instead of qPrintable().
@@ -3580,7 +3629,7 @@ int qrand()
\snippet code/src_corelib_global_qglobal.cpp 37
- \sa qPrintable(), qDebug(), qWarning(), qCritical(), qFatal()
+ \sa qPrintable(), qDebug(), qInfo(), qWarning(), qCritical(), qFatal()
*/
/*!
@@ -3968,6 +4017,21 @@ bool QInternal::activateCallbacks(Callback cb, void **parameters)
It expands to "constexpr" if your compiler supports that C++11 keyword, or to nothing
otherwise.
+
+ \sa Q_DECL_RELAXED_CONSTEXPR
+*/
+
+/*!
+ \macro Q_DECL_RELAXED_CONSTEXPR
+ \relates <QtGlobal>
+
+ This macro can be used to declare an inline function that can be computed
+ at compile-time according to the relaxed rules from C++14.
+
+ It expands to "constexpr" if your compiler supports C++14 relaxed constant
+ expressions, or to nothing otherwise.
+
+ \sa Q_DECL_CONSTEXPR
*/
/*!
@@ -3976,8 +4040,8 @@ bool QInternal::activateCallbacks(Callback cb, void **parameters)
Calls the message handler with the debug message \a message. If no
message handler has been installed, the message is printed to
- stderr. Under Windows, the message is sent to the console, if it is a
- console application; otherwise, it is sent to the debugger. On Blackberry the
+ stderr. Under Windows the message is sent to the console, if it is a
+ console application; otherwise, it is sent to the debugger. On Blackberry, the
message is sent to slogger2. This function does nothing if \c QT_NO_DEBUG_OUTPUT
was defined during compilation.
@@ -4002,7 +4066,44 @@ bool QInternal::activateCallbacks(Callback cb, void **parameters)
To suppress the output at run-time, install your own message handler
with qInstallMessageHandler().
- \sa qWarning(), qCritical(), qFatal(), qInstallMessageHandler(),
+ \sa qInfo(), qWarning(), qCritical(), qFatal(), qInstallMessageHandler(),
+ {Debugging Techniques}
+*/
+
+/*!
+ \macro qInfo(const char *message, ...)
+ \relates <QtGlobal>
+ \since 5.5
+
+ Calls the message handler with the informational message \a message. If no
+ message handler has been installed, the message is printed to
+ stderr. Under Windows, the message is sent to the console, if it is a
+ console application; otherwise, it is sent to the debugger. On Blackberry the
+ message is sent to slogger2. This function does nothing if \c QT_NO_INFO_OUTPUT
+ was defined during compilation.
+
+ If you pass the function a format string and a list of arguments,
+ it works in similar way to the C printf() function. The format
+ should be a Latin-1 string.
+
+ Example:
+
+ \snippet code/src_corelib_global_qglobal.cpp qInfo_printf
+
+ If you include \c <QtDebug>, a more convenient syntax is also
+ available:
+
+ \snippet code/src_corelib_global_qglobal.cpp qInfo_stream
+
+ With this syntax, the function returns a QDebug object that is
+ configured to use the QtInfoMsg message type. It automatically
+ puts a single space between each item, and outputs a newline at
+ the end. It supports many C++ and Qt types.
+
+ To suppress the output at run-time, install your own message handler
+ with qInstallMessageHandler().
+
+ \sa qDebug(), qWarning(), qCritical(), qFatal(), qInstallMessageHandler(),
{Debugging Techniques}
*/
@@ -4036,7 +4137,7 @@ bool QInternal::activateCallbacks(Callback cb, void **parameters)
To suppress the output at runtime, install your own message handler
with qInstallMessageHandler().
- \sa qDebug(), qCritical(), qFatal(), qInstallMessageHandler(),
+ \sa qDebug(), qInfo(), qCritical(), qFatal(), qInstallMessageHandler(),
{Debugging Techniques}
*/
@@ -4069,7 +4170,7 @@ bool QInternal::activateCallbacks(Callback cb, void **parameters)
To suppress the output at runtime, install your own message handler
with qInstallMessageHandler().
- \sa qDebug(), qWarning(), qFatal(), qInstallMessageHandler(),
+ \sa qDebug(), qInfo(), qWarning(), qFatal(), qInstallMessageHandler(),
{Debugging Techniques}
*/
@@ -4096,7 +4197,7 @@ bool QInternal::activateCallbacks(Callback cb, void **parameters)
To suppress the output at runtime, install your own message handler
with qInstallMessageHandler().
- \sa qDebug(), qCritical(), qWarning(), qInstallMessageHandler(),
+ \sa qDebug(), qInfo(), qWarning(), qCritical(), qInstallMessageHandler(),
{Debugging Techniques}
*/
diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h
index dade7fc6ec..e368cf0d96 100644
--- a/src/corelib/global/qglobal.h
+++ b/src/corelib/global/qglobal.h
@@ -35,13 +35,17 @@
#ifndef QGLOBAL_H
#define QGLOBAL_H
+#ifdef __cplusplus
+# include <cstddef>
+#endif
+
#include <stddef.h>
-#define QT_VERSION_STR "5.4.2"
+#define QT_VERSION_STR "5.5.0"
/*
QT_VERSION is (major << 16) + (minor << 8) + patch.
*/
-#define QT_VERSION 0x050402
+#define QT_VERSION 0x050500
/*
can be used like #if (QT_VERSION >= QT_VERSION_CHECK(4, 4, 0))
*/
@@ -620,14 +624,7 @@ Q_CORE_EXPORT bool qSharedBuild() Q_DECL_NOTHROW;
/*
Avoid "unused parameter" warnings
*/
-
-#if defined(Q_CC_RVCT)
-template <typename T>
-inline void qUnused(T &x) { (void)x; }
-# define Q_UNUSED(x) qUnused(x);
-#else
-# define Q_UNUSED(x) (void)x;
-#endif
+#define Q_UNUSED(x) (void)x;
/*
Debugging and error handling
@@ -655,7 +652,7 @@ Q_CORE_EXPORT void qt_assert(const char *assertion, const char *file, int line)
#if !defined(Q_ASSERT)
# if defined(QT_NO_DEBUG) && !defined(QT_FORCE_ASSERTS)
-# define Q_ASSERT(cond) qt_noop()
+# define Q_ASSERT(cond) do { } while (false && (cond))
# else
# define Q_ASSERT(cond) ((!(cond)) ? qt_assert(#cond,__FILE__,__LINE__) : qt_noop())
# endif
@@ -805,8 +802,20 @@ static inline bool qIsNull(float f)
# define Q_DUMMY_COMPARISON_OPERATOR(C)
#endif
+namespace QtPrivate
+{
+namespace SwapExceptionTester { // insulate users from the "using std::swap" below
+ using std::swap; // import std::swap
+ template <typename T>
+ void checkSwap(T &t)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(swap(t, t)));
+ // declared, but not implemented (only to be used in unevaluated contexts (noexcept operator))
+}
+} // namespace QtPrivate
+
template <typename T>
inline void qSwap(T &value1, T &value2)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(QtPrivate::SwapExceptionTester::checkSwap(value1)))
{
using std::swap;
swap(value1, value2);
@@ -834,22 +843,22 @@ Q_CORE_EXPORT void qFreeAligned(void *ptr);
#endif
#if defined(QT_NO_WARNINGS)
# if defined(Q_CC_MSVC)
-# pragma warning(disable: 4251) /* class 'type' needs to have dll-interface to be used by clients of class 'type2' */
-# pragma warning(disable: 4244) /* conversion from 'type1' to 'type2', possible loss of data */
-# pragma warning(disable: 4275) /* non - DLL-interface classkey 'identifier' used as base for DLL-interface classkey 'identifier' */
-# pragma warning(disable: 4514) /* unreferenced inline function has been removed */
-# pragma warning(disable: 4800) /* 'type' : forcing value to bool 'true' or 'false' (performance warning) */
-# pragma warning(disable: 4097) /* typedef-name 'identifier1' used as synonym for class-name 'identifier2' */
-# pragma warning(disable: 4706) /* assignment within conditional expression */
+QT_WARNING_DISABLE_MSVC(4251) /* class 'type' needs to have dll-interface to be used by clients of class 'type2' */
+QT_WARNING_DISABLE_MSVC(4244) /* conversion from 'type1' to 'type2', possible loss of data */
+QT_WARNING_DISABLE_MSVC(4275) /* non - DLL-interface classkey 'identifier' used as base for DLL-interface classkey 'identifier' */
+QT_WARNING_DISABLE_MSVC(4514) /* unreferenced inline function has been removed */
+QT_WARNING_DISABLE_MSVC(4800) /* 'type' : forcing value to bool 'true' or 'false' (performance warning) */
+QT_WARNING_DISABLE_MSVC(4097) /* typedef-name 'identifier1' used as synonym for class-name 'identifier2' */
+QT_WARNING_DISABLE_MSVC(4706) /* assignment within conditional expression */
# if _MSC_VER <= 1310 // MSVC 2003
-# pragma warning(disable: 4786) /* 'identifier' : identifier was truncated to 'number' characters in the debug information */
+QT_WARNING_DISABLE_MSVC(4786) /* 'identifier' : identifier was truncated to 'number' characters in the debug information */
# endif
-# pragma warning(disable: 4355) /* 'this' : used in base member initializer list */
+QT_WARNING_DISABLE_MSVC(4355) /* 'this' : used in base member initializer list */
# if _MSC_VER < 1800 // MSVC 2013
-# pragma warning(disable: 4231) /* nonstandard extension used : 'identifier' before template explicit instantiation */
+QT_WARNING_DISABLE_MSVC(4231) /* nonstandard extension used : 'identifier' before template explicit instantiation */
# endif
-# pragma warning(disable: 4710) /* function not inlined */
-# pragma warning(disable: 4530) /* C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc */
+QT_WARNING_DISABLE_MSVC(4710) /* function not inlined */
+QT_WARNING_DISABLE_MSVC(4530) /* C++ exception handler used, but unwind semantics are not enabled. Specify /EHsc */
# elif defined(Q_CC_BOR)
# pragma option -w-inl
# pragma option -w-aus
@@ -861,7 +870,7 @@ Q_CORE_EXPORT void qFreeAligned(void *ptr);
# endif
#endif
-#if defined(Q_COMPILER_DECLTYPE) || (defined(Q_CC_GNU) && !defined(Q_CC_RVCT))
+#if defined(Q_COMPILER_DECLTYPE) || defined(Q_CC_GNU)
/* make use of decltype or GCC's __typeof__ extension */
template <typename T>
class QForeachContainer {
@@ -1027,6 +1036,7 @@ Q_CORE_EXPORT bool qunsetenv(const char *varName);
Q_CORE_EXPORT bool qEnvironmentVariableIsEmpty(const char *varName) Q_DECL_NOEXCEPT;
Q_CORE_EXPORT bool qEnvironmentVariableIsSet(const char *varName) Q_DECL_NOEXCEPT;
+Q_CORE_EXPORT int qEnvironmentVariableIntValue(const char *varName, bool *ok=0) Q_DECL_NOEXCEPT;
inline int qIntCast(double f) { return int(f); }
inline int qIntCast(float f) { return int(f); }
@@ -1039,13 +1049,6 @@ Q_CORE_EXPORT int qrand();
#define QT_MODULE(x)
-#ifdef Q_OS_QNX
-// QNX doesn't have SYSV style shared memory. Multiprocess QWS apps,
-// shared fonts and QSystemSemaphore + QSharedMemory are not available
-# define QT_NO_SYSTEMSEMAPHORE
-# define QT_NO_SHAREDMEMORY
-#endif
-
#if !defined(QT_BOOTSTRAPPED) && defined(QT_REDUCE_RELOCATIONS) && defined(__ELF__) && !defined(__PIC__) && !defined(__PIE__)
# error "You must build your code with position independent code if Qt was built with -reduce-relocations. "\
"Compile your code with -fPIC or -fPIE."
diff --git a/src/corelib/global/qlibraryinfo.cpp b/src/corelib/global/qlibraryinfo.cpp
index 4f9f54cde8..575da452b9 100644
--- a/src/corelib/global/qlibraryinfo.cpp
+++ b/src/corelib/global/qlibraryinfo.cpp
@@ -287,6 +287,8 @@ QLibraryInfo::buildDate()
# define COMPILER_STRING "MSVC 2012"
# elif _MSC_VER < 1900
# define COMPILER_STRING "MSVC 2013"
+# elif _MSC_VER < 2000
+# define COMPILER_STRING "MSVC 2015"
# else
# define COMPILER_STRING "MSVC _MSC_VER " QT_STRINGIFY(_MSC_VER)
# endif
diff --git a/src/corelib/global/qlogging.cpp b/src/corelib/global/qlogging.cpp
index 50d35a6d84..6c545bb65f 100644
--- a/src/corelib/global/qlogging.cpp
+++ b/src/corelib/global/qlogging.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies).
** Copyright (C) 2014 Olivier Goffart <ogoffart@woboq.com>
** Copyright (C) 2014 Intel Corporation.
** Contact: http://www.qt-project.org/legal
@@ -76,7 +76,8 @@
# define __has_include(x) 0
#endif
-#if !defined QT_NO_REGULAREXPRESSION && !defined(QT_BOOTSTRAPPED)
+#ifndef QT_BOOTSTRAPPED
+#if !defined QT_NO_REGULAREXPRESSION
# if (defined(__GLIBC__) && defined(__GLIBCXX__)) || (__has_include(<cxxabi.h>) && __has_include(<execinfo.h>))
# define QLOGGING_HAVE_BACKTRACE
# include <qregularexpression.h>
@@ -85,6 +86,38 @@
# endif
#endif
+#if defined(Q_OS_LINUX) && (defined(__GLIBC__) || __has_include(<sys/syscall.h>))
+# include <sys/syscall.h>
+static long qt_gettid()
+{
+ // no error handling
+ // this syscall has existed since Linux 2.4.11 and cannot fail
+ return syscall(SYS_gettid);
+}
+#elif defined(Q_OS_DARWIN)
+# include <pthread.h>
+static int qt_gettid()
+{
+ // no error handling: this call cannot fail
+ __uint64_t tid;
+ pthread_threadid_np(NULL, &tid);
+ return tid;
+}
+#elif defined(Q_OS_FREEBSD_KERNEL)
+# include <pthread.h>
+static int qt_gettid()
+{
+ return pthread_getthreadid_np();
+}
+#else
+static QT_PREPEND_NAMESPACE(qint64) qt_gettid()
+{
+ QT_USE_NAMESPACE
+ return qintptr(QThread::currentThreadId());
+}
+#endif
+#endif // !QT_BOOTSTRAPPED
+
#include <stdio.h>
QT_BEGIN_NAMESPACE
@@ -168,7 +201,7 @@ Q_CORE_EXPORT bool qt_logging_to_console()
\brief The QMessageLogContext class provides additional information about a log message.
\since 5.0
- The class provides information about the source code location a qDebug(), qWarning(),
+ The class provides information about the source code location a qDebug(), qInfo(), qWarning(),
qCritical() or qFatal() message was generated.
\note By default, this information is recorded only in debug builds. You can overwrite
@@ -184,7 +217,7 @@ Q_CORE_EXPORT bool qt_logging_to_console()
\since 5.0
QMessageLogger is used to generate messages for the Qt logging framework. Usually one uses
- it through qDebug(), qWarning(), qCritical, or qFatal() functions,
+ it through qDebug(), qInfo(), qWarning(), qCritical, or qFatal() functions,
which are actually macros: For example qDebug() expands to
QMessageLogger(__FILE__, __LINE__, Q_FUNC_INFO).debug()
for debug builds, and QMessageLogger(0, 0, 0).debug() for release builds.
@@ -193,7 +226,7 @@ Q_CORE_EXPORT bool qt_logging_to_console()
\snippet code/qlogging/qlogging.cpp 1
- \sa QMessageLogContext, qDebug(), qWarning(), qCritical(), qFatal()
+ \sa QMessageLogContext, qDebug(), qInfo(), qWarning(), qCritical(), qFatal()
*/
#ifdef Q_OS_WIN
@@ -244,6 +277,28 @@ void QMessageLogger::debug(const char *msg, ...) const
qt_message_fatal(QtDebugMsg, context, message);
}
+
+#undef qInfo
+/*!
+ Logs an informational message specified with format \a msg. Additional
+ parameters, specified by \a msg, may be used.
+
+ \sa qInfo()
+ \since 5.5
+*/
+void QMessageLogger::info(const char *msg, ...) const
+{
+ QString message;
+
+ va_list ap;
+ va_start(ap, msg); // use variable arg list
+ qt_message(QtInfoMsg, context, msg, ap, message);
+ va_end(ap);
+
+ if (isFatal(QtInfoMsg))
+ qt_message_fatal(QtInfoMsg, context, message);
+}
+
/*!
\typedef QMessageLogger::CategoryFunction
@@ -373,6 +428,110 @@ QNoDebug QMessageLogger::noDebug() const Q_DECL_NOTHROW
#endif
+/*!
+ Logs an informational message specified with format \a msg for the context \a cat.
+ Additional parameters, specified by \a msg, may be used.
+
+ \since 5.5
+ \sa qCInfo()
+*/
+void QMessageLogger::info(const QLoggingCategory &cat, const char *msg, ...) const
+{
+ if (!cat.isInfoEnabled())
+ return;
+
+ QMessageLogContext ctxt;
+ ctxt.copy(context);
+ ctxt.category = cat.categoryName();
+
+ QString message;
+
+ va_list ap;
+ va_start(ap, msg); // use variable arg list
+ qt_message(QtInfoMsg, ctxt, msg, ap, message);
+ va_end(ap);
+
+ if (isFatal(QtInfoMsg))
+ qt_message_fatal(QtInfoMsg, ctxt, message);
+}
+
+/*!
+ Logs an informational message specified with format \a msg for the context returned
+ by \a catFunc. Additional parameters, specified by \a msg, may be used.
+
+ \since 5.5
+ \sa qCInfo()
+*/
+void QMessageLogger::info(QMessageLogger::CategoryFunction catFunc,
+ const char *msg, ...) const
+{
+ const QLoggingCategory &cat = (*catFunc)();
+ if (!cat.isInfoEnabled())
+ return;
+
+ QMessageLogContext ctxt;
+ ctxt.copy(context);
+ ctxt.category = cat.categoryName();
+
+ QString message;
+
+ va_list ap;
+ va_start(ap, msg); // use variable arg list
+ qt_message(QtInfoMsg, ctxt, msg, ap, message);
+ va_end(ap);
+
+ if (isFatal(QtInfoMsg))
+ qt_message_fatal(QtInfoMsg, ctxt, message);
+}
+
+#ifndef QT_NO_DEBUG_STREAM
+
+/*!
+ Logs an informational message using a QDebug stream.
+
+ \since 5.5
+ \sa qInfo(), QDebug
+*/
+QDebug QMessageLogger::info() const
+{
+ QDebug dbg = QDebug(QtInfoMsg);
+ QMessageLogContext &ctxt = dbg.stream->context;
+ ctxt.copy(context);
+ return dbg;
+}
+
+/*!
+ Logs an informational message into the category \a cat using a QDebug stream.
+
+ \since 5.5
+ \sa qCInfo(), QDebug
+*/
+QDebug QMessageLogger::info(const QLoggingCategory &cat) const
+{
+ QDebug dbg = QDebug(QtInfoMsg);
+ if (!cat.isInfoEnabled())
+ dbg.stream->message_output = false;
+
+ QMessageLogContext &ctxt = dbg.stream->context;
+ ctxt.copy(context);
+ ctxt.category = cat.categoryName();
+
+ return dbg;
+}
+
+/*!
+ Logs an informational message into category returned by \a catFunc using a QDebug stream.
+
+ \since 5.5
+ \sa qCInfo(), QDebug
+*/
+QDebug QMessageLogger::info(QMessageLogger::CategoryFunction catFunc) const
+{
+ return info((*catFunc)());
+}
+
+#endif
+
#undef qWarning
/*!
Logs a warning message specified with format \a msg. Additional
@@ -802,10 +961,12 @@ static const char functionTokenC[] = "%{function}";
static const char pidTokenC[] = "%{pid}";
static const char appnameTokenC[] = "%{appname}";
static const char threadidTokenC[] = "%{threadid}";
+static const char qthreadptrTokenC[] = "%{qthreadptr}";
static const char timeTokenC[] = "%{time"; //not a typo: this command has arguments
static const char backtraceTokenC[] = "%{backtrace"; //ditto
static const char ifCategoryTokenC[] = "%{if-category}";
static const char ifDebugTokenC[] = "%{if-debug}";
+static const char ifInfoTokenC[] = "%{if-info}";
static const char ifWarningTokenC[] = "%{if-warning}";
static const char ifCriticalTokenC[] = "%{if-critical}";
static const char ifFatalTokenC[] = "%{if-fatal}";
@@ -825,6 +986,9 @@ struct QMessagePattern {
const char **literals;
const char **tokens;
QString timeFormat;
+#ifndef QT_BOOTSTRAPPED
+ QElapsedTimer timer;
+#endif
#ifdef QLOGGING_HAVE_BACKTRACE
int backtraceDepth;
QString backtraceSeparator;
@@ -832,10 +996,6 @@ struct QMessagePattern {
bool fromEnvironment;
static QBasicMutex mutex;
-#ifndef QT_BOOTSTRAPPED
- QElapsedTimer timer;
- QDateTime startTime;
-#endif
};
QBasicMutex QMessagePattern::mutex;
@@ -848,9 +1008,6 @@ QMessagePattern::QMessagePattern()
, backtraceSeparator(QLatin1Char('|'))
#endif
, fromEnvironment(false)
-#ifndef QT_BOOTSTRAPPED
- , startTime(QDateTime::currentDateTime())
-#endif
{
#ifndef QT_BOOTSTRAPPED
timer.start();
@@ -942,6 +1099,8 @@ void QMessagePattern::setPattern(const QString &pattern)
tokens[i] = appnameTokenC;
else if (lexeme == QLatin1String(threadidTokenC))
tokens[i] = threadidTokenC;
+ else if (lexeme == QLatin1String(qthreadptrTokenC))
+ tokens[i] = qthreadptrTokenC;
else if (lexeme.startsWith(QLatin1String(timeTokenC))) {
tokens[i] = timeTokenC;
int spaceIdx = lexeme.indexOf(QChar::fromLatin1(' '));
@@ -977,6 +1136,7 @@ void QMessagePattern::setPattern(const QString &pattern)
}
IF_TOKEN(ifCategoryTokenC)
IF_TOKEN(ifDebugTokenC)
+ IF_TOKEN(ifInfoTokenC)
IF_TOKEN(ifWarningTokenC)
IF_TOKEN(ifCriticalTokenC)
IF_TOKEN(ifFatalTokenC)
@@ -1055,6 +1215,9 @@ static void slog2_default_handler(QtMsgType msgType, const char *message)
//Determines the severity level
switch (msgType) {
case QtDebugMsg:
+ severity = SLOG2_DEBUG1;
+ break;
+ case QtInfoMsg:
severity = SLOG2_INFO;
break;
case QtWarningMsg:
@@ -1117,6 +1280,7 @@ QString qFormatLogMessage(QtMsgType type, const QMessageLogContext &context, con
} else if (token == typeTokenC) {
switch (type) {
case QtDebugMsg: message.append(QLatin1String("debug")); break;
+ case QtInfoMsg: message.append(QLatin1String("info")); break;
case QtWarningMsg: message.append(QLatin1String("warning")); break;
case QtCriticalMsg:message.append(QLatin1String("critical")); break;
case QtFatalMsg: message.append(QLatin1String("fatal")); break;
@@ -1139,6 +1303,9 @@ QString qFormatLogMessage(QtMsgType type, const QMessageLogContext &context, con
} else if (token == appnameTokenC) {
message.append(QCoreApplication::applicationName());
} else if (token == threadidTokenC) {
+ // print the TID as decimal
+ message.append(QString::number(qt_gettid()));
+ } else if (token == qthreadptrTokenC) {
message.append(QLatin1String("0x"));
message.append(QString::number(qlonglong(QThread::currentThread()->currentThread()), 16));
#ifdef QLOGGING_HAVE_BACKTRACE
@@ -1201,6 +1368,12 @@ QString qFormatLogMessage(QtMsgType type, const QMessageLogContext &context, con
if (pattern->timeFormat == QLatin1String("process")) {
quint64 ms = pattern->timer.elapsed();
message.append(QString().sprintf("%6d.%03d", uint(ms / 1000), uint(ms % 1000)));
+ } else if (pattern->timeFormat == QLatin1String("boot")) {
+ // just print the milliseconds since the elapsed timer reference
+ // like the Linux kernel does
+ pattern->timer.elapsed();
+ uint ms = pattern->timer.msecsSinceReference();
+ message.append(QString().sprintf("%6d.%03d", uint(ms / 1000), uint(ms % 1000)));
} else if (pattern->timeFormat.isEmpty()) {
message.append(QDateTime::currentDateTime().toString(Qt::ISODate));
} else {
@@ -1214,6 +1387,7 @@ QString qFormatLogMessage(QtMsgType type, const QMessageLogContext &context, con
} else if (token == if##LEVEL##TokenC) { \
skip = type != Qt##LEVEL##Msg;
HANDLE_IF_TOKEN(Debug)
+ HANDLE_IF_TOKEN(Info)
HANDLE_IF_TOKEN(Warning)
HANDLE_IF_TOKEN(Critical)
HANDLE_IF_TOKEN(Fatal)
@@ -1249,6 +1423,9 @@ static void systemd_default_message_handler(QtMsgType type,
case QtDebugMsg:
priority = LOG_DEBUG; // Debug-level messages
break;
+ case QtInfoMsg:
+ priority = LOG_INFO; // Informational conditions
+ break;
case QtWarningMsg:
priority = LOG_WARNING; // Warning conditions
break;
@@ -1278,6 +1455,7 @@ static void android_default_message_handler(QtMsgType type,
android_LogPriority priority = ANDROID_LOG_DEBUG;
switch (type) {
case QtDebugMsg: priority = ANDROID_LOG_DEBUG; break;
+ case QtInfoMsg: priority = ANDROID_LOG_INFO; break;
case QtWarningMsg: priority = ANDROID_LOG_WARN; break;
case QtCriticalMsg: priority = ANDROID_LOG_ERROR; break;
case QtFatalMsg: priority = ANDROID_LOG_FATAL; break;
@@ -1548,9 +1726,13 @@ void qErrnoWarning(int code, const char *msg, ...)
\row \li \c %{line} \li Line in source file
\row \li \c %{message} \li The actual message
\row \li \c %{pid} \li QCoreApplication::applicationPid()
- \row \li \c %{threadid} \li ID of current thread
+ \row \li \c %{threadid} \li The system-wide ID of current thread (if it can be obtained)
+ \row \li \c %{qthreadptr} \li A pointer to the current QThread (result of QThread::currentThread())
\row \li \c %{type} \li "debug", "warning", "critical" or "fatal"
\row \li \c %{time process} \li time of the message, in seconds since the process started (the token "process" is literal)
+ \row \li \c %{time boot} \li the time of the message, in seconds since the system boot if that
+ can be determined (the token "boot" is literal). If the time since boot could not be obtained,
+ the output is indeterminate (see QElapsedTimer::msecsSinceReference()).
\row \li \c %{time [format]} \li system time when the message occurred, formatted by
passing the \c format to \l QDateTime::toString(). If the format is
not specified, the format of Qt::ISODate is used.
@@ -1564,7 +1746,7 @@ void qErrnoWarning(int code, const char *msg, ...)
tail call optimization.
\endtable
- You can also use conditionals on the type of the message using \c %{if-debug},
+ You can also use conditionals on the type of the message using \c %{if-debug}, \c %{if-info}
\c %{if-warning}, \c %{if-critical} or \c %{if-fatal} followed by an \c %{endif}.
What is inside the \c %{if-*} and \c %{endif} will only be printed if the type matches.
@@ -1573,7 +1755,7 @@ void qErrnoWarning(int code, const char *msg, ...)
Example:
\code
- QT_MESSAGE_PATTERN="[%{time yyyyMMdd h:mm:ss.zzz t} %{if-debug}D%{endif}%{if-warning}W%{endif}%{if-critical}C%{endif}%{if-fatal}F%{endif}] %{file}:%{line} - %{message}"
+ QT_MESSAGE_PATTERN="[%{time yyyyMMdd h:mm:ss.zzz t} %{if-debug}D{%endif}%{if-info}I%{endif}%{if-warning}W%{endif}%{if-critical}C%{endif}%{if-fatal}F%{endif}] %{file}:%{line} - %{message}"
\endcode
The default \a pattern is "%{if-category}%{category}: %{endif}%{message}".
diff --git a/src/corelib/global/qlogging.h b/src/corelib/global/qlogging.h
index f9bbf7fcce..0cbb678e17 100644
--- a/src/corelib/global/qlogging.h
+++ b/src/corelib/global/qlogging.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtCore module of the Qt Toolkit.
@@ -51,7 +51,7 @@ QT_BEGIN_NAMESPACE
class QDebug;
class QNoDebug;
-enum QtMsgType { QtDebugMsg, QtWarningMsg, QtCriticalMsg, QtFatalMsg, QtSystemMsg = QtCriticalMsg };
+enum QtMsgType { QtDebugMsg, QtWarningMsg, QtCriticalMsg, QtFatalMsg, QtInfoMsg, QtSystemMsg = QtCriticalMsg };
class QMessageLogContext
{
@@ -89,6 +89,7 @@ public:
void debug(const char *msg, ...) const Q_ATTRIBUTE_FORMAT_PRINTF(2, 3);
void noDebug(const char *, ...) const Q_ATTRIBUTE_FORMAT_PRINTF(2, 3)
{}
+ void info(const char *msg, ...) const Q_ATTRIBUTE_FORMAT_PRINTF(2, 3);
void warning(const char *msg, ...) const Q_ATTRIBUTE_FORMAT_PRINTF(2, 3);
void critical(const char *msg, ...) const Q_ATTRIBUTE_FORMAT_PRINTF(2, 3);
@@ -96,6 +97,8 @@ public:
void debug(const QLoggingCategory &cat, const char *msg, ...) const Q_ATTRIBUTE_FORMAT_PRINTF(3, 4);
void debug(CategoryFunction catFunc, const char *msg, ...) const Q_ATTRIBUTE_FORMAT_PRINTF(3, 4);
+ void info(const QLoggingCategory &cat, const char *msg, ...) const Q_ATTRIBUTE_FORMAT_PRINTF(3, 4);
+ void info(CategoryFunction catFunc, const char *msg, ...) const Q_ATTRIBUTE_FORMAT_PRINTF(3, 4);
void warning(const QLoggingCategory &cat, const char *msg, ...) const Q_ATTRIBUTE_FORMAT_PRINTF(3, 4);
void warning(CategoryFunction catFunc, const char *msg, ...) const Q_ATTRIBUTE_FORMAT_PRINTF(3, 4);
void critical(const QLoggingCategory &cat, const char *msg, ...) const Q_ATTRIBUTE_FORMAT_PRINTF(3, 4);
@@ -110,6 +113,9 @@ public:
QDebug debug() const;
QDebug debug(const QLoggingCategory &cat) const;
QDebug debug(CategoryFunction catFunc) const;
+ QDebug info() const;
+ QDebug info(const QLoggingCategory &cat) const;
+ QDebug info(CategoryFunction catFunc) const;
QDebug warning() const;
QDebug warning(const QLoggingCategory &cat) const;
QDebug warning(CategoryFunction catFunc) const;
@@ -143,20 +149,24 @@ private:
#endif
#define qDebug QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).debug
+#define qInfo QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).info
#define qWarning QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).warning
#define qCritical QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).critical
#define qFatal QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC).fatal
#define QT_NO_QDEBUG_MACRO while (false) QMessageLogger().noDebug
-#define QT_NO_QWARNING_MACRO while (false) QMessageLogger().noDebug
#if defined(QT_NO_DEBUG_OUTPUT)
# undef qDebug
# define qDebug QT_NO_QDEBUG_MACRO
#endif
+#if defined(QT_NO_INFO_OUTPUT)
+# undef qInfo
+# define qInfo QT_NO_QDEBUG_MACRO
+#endif
#if defined(QT_NO_WARNING_OUTPUT)
# undef qWarning
-# define qWarning QT_NO_QWARNING_MACRO
+# define qWarning QT_NO_QDEBUG_MACRO
#endif
Q_CORE_EXPORT void qt_message_output(QtMsgType, const QMessageLogContext &context,
diff --git a/src/corelib/global/qnamespace.h b/src/corelib/global/qnamespace.h
index e239a11cda..fccb0d5421 100644
--- a/src/corelib/global/qnamespace.h
+++ b/src/corelib/global/qnamespace.h
@@ -73,6 +73,7 @@ Qt {
Q_ENUMS(TextInteractionFlag)
Q_FLAGS(TextInteractionFlags)
Q_ENUMS(ItemSelectionMode)
+ Q_ENUMS(ItemSelectionOperation)
Q_FLAGS(ItemFlags)
Q_ENUMS(CheckState)
Q_ENUMS(SortOrder CaseSensitivity)
@@ -1298,6 +1299,11 @@ public:
IntersectsItemBoundingRect = 0x3
};
+ enum ItemSelectionOperation {
+ ReplaceSelection,
+ AddToSelection
+ };
+
enum TransformationMode {
FastTransformation,
SmoothTransformation
diff --git a/src/corelib/global/qnamespace.qdoc b/src/corelib/global/qnamespace.qdoc
index 9e9a357272..c8aa53aced 100644
--- a/src/corelib/global/qnamespace.qdoc
+++ b/src/corelib/global/qnamespace.qdoc
@@ -2234,6 +2234,21 @@
*/
/*!
+ \enum Qt::ItemSelectionOperation
+
+ This enum is used in QGraphicsScene to specify what to do with currently selected
+ items when setting a selection area.
+
+ \value ReplaceSelection The currently selected items are replaced by items
+ in the selection area.
+
+ \value AddToSelection The items in the selection area are added to the currently
+ selected items.
+
+ \sa QGraphicsScene::setSelectionArea()
+*/
+
+/*!
\enum Qt::FillRule
Specifies which method should be used to fill the paths and polygons.
diff --git a/src/corelib/global/qsysinfo.h b/src/corelib/global/qsysinfo.h
index 277caa8db6..e80720ae67 100644
--- a/src/corelib/global/qsysinfo.h
+++ b/src/corelib/global/qsysinfo.h
@@ -72,8 +72,9 @@ public:
# endif
};
#endif
-#if defined(Q_OS_WIN) || defined(Q_OS_CYGWIN)
enum WinVersion {
+ WV_None = 0x0000,
+
WV_32s = 0x0001,
WV_95 = 0x0002,
WV_98 = 0x0003,
@@ -89,6 +90,7 @@ public:
WV_WINDOWS7 = 0x0090,
WV_WINDOWS8 = 0x00a0,
WV_WINDOWS8_1 = 0x00b0,
+ WV_WINDOWS10 = 0x00c0,
WV_NT_based = 0x00f0,
/* version numbers */
@@ -100,6 +102,7 @@ public:
WV_6_1 = WV_WINDOWS7,
WV_6_2 = WV_WINDOWS8,
WV_6_3 = WV_WINDOWS8_1,
+ WV_10_0 = WV_WINDOWS10,
WV_CE = 0x0100,
WV_CENET = 0x0200,
@@ -107,13 +110,18 @@ public:
WV_CE_6 = 0x0400,
WV_CE_based = 0x0f00
};
+#if defined(Q_OS_WIN) || defined(Q_OS_CYGWIN)
static const WinVersion WindowsVersion;
static WinVersion windowsVersion();
-
+#else
+ static const WinVersion WindowsVersion = WV_None;
+ static WinVersion windowsVersion() { return WV_None; }
#endif
-#ifdef Q_OS_MAC
-# define Q_MV_IOS(major, minor) (QSysInfo::MV_IOS | major << 4 | minor)
+
+#define Q_MV_OSX(major, minor) (major == 10 ? minor + 2 : (major == 9 ? 1 : 0))
+#define Q_MV_IOS(major, minor) (QSysInfo::MV_IOS | major << 4 | minor)
enum MacVersion {
+ MV_None = 0xffff,
MV_Unknown = 0x0000,
/* version */
@@ -154,8 +162,12 @@ public:
MV_IOS_7_1 = Q_MV_IOS(7, 1),
MV_IOS_8_0 = Q_MV_IOS(8, 0)
};
+#if defined(Q_OS_MAC)
static const MacVersion MacintoshVersion;
static MacVersion macVersion();
+#else
+ static const MacVersion MacintoshVersion = MV_None;
+ static MacVersion macVersion() { return MV_None; }
#endif
static QString buildCpuArchitecture();
diff --git a/src/corelib/global/qsystemdetection.h b/src/corelib/global/qsystemdetection.h
index 08a5daa5f4..37d571e228 100644
--- a/src/corelib/global/qsystemdetection.h
+++ b/src/corelib/global/qsystemdetection.h
@@ -75,6 +75,7 @@
BSD4 - Any BSD 4.4 system
UNIX - Any UNIX BSD/SYSV system
ANDROID - Android platform
+ HAIKU - Haiku
The following operating systems have variants:
LINUX - both Q_OS_LINUX and Q_OS_ANDROID are defined when building for Android
@@ -169,6 +170,8 @@
# define Q_OS_INTEGRITY
#elif defined(VXWORKS) /* there is no "real" VxWorks define - this has to be set in the mkspec! */
# define Q_OS_VXWORKS
+#elif defined(__HAIKU__)
+# define Q_OS_HAIKU
#elif defined(__MAKEDEPEND__)
#else
# error "Qt has not been ported to this OS - see http://www.qt-project.org/"
diff --git a/src/corelib/global/qtypeinfo.h b/src/corelib/global/qtypeinfo.h
index e5abb8138b..e2b165ccbc 100644
--- a/src/corelib/global/qtypeinfo.h
+++ b/src/corelib/global/qtypeinfo.h
@@ -202,19 +202,12 @@ Q_DECLARE_TYPEINFO_BODY(QFlags<T>, Q_PRIMITIVE_TYPE);
types must define a member-swap, and be defined in the same
namespace as Qt for this to work.
*/
-#define Q_DECLARE_SHARED_STL(TYPE) \
-QT_END_NAMESPACE \
-namespace std { \
- template<> inline void swap< QT_PREPEND_NAMESPACE(TYPE) >(QT_PREPEND_NAMESPACE(TYPE) &value1, QT_PREPEND_NAMESPACE(TYPE) &value2) \
- { value1.swap(value2); } \
-} \
-QT_BEGIN_NAMESPACE
#define Q_DECLARE_SHARED(TYPE) \
Q_DECLARE_TYPEINFO(TYPE, Q_MOVABLE_TYPE); \
-template <> inline void qSwap<TYPE>(TYPE &value1, TYPE &value2) \
-{ value1.swap(value2); } \
-Q_DECLARE_SHARED_STL(TYPE)
+inline void swap(TYPE &value1, TYPE &value2) \
+ Q_DECL_NOEXCEPT_EXPR(noexcept(value1.swap(value2))) \
+{ value1.swap(value2); }
/*
QTypeInfo primitive specializations
diff --git a/src/corelib/io/qbuffer.cpp b/src/corelib/io/qbuffer.cpp
index 5377eb21e3..200d6a0c0c 100644
--- a/src/corelib/io/qbuffer.cpp
+++ b/src/corelib/io/qbuffer.cpp
@@ -54,8 +54,8 @@ public:
QByteArray *buf;
QByteArray defaultBuf;
- virtual qint64 peek(char *data, qint64 maxSize);
- virtual QByteArray peek(qint64 maxSize);
+ virtual qint64 peek(char *data, qint64 maxSize) Q_DECL_OVERRIDE;
+ virtual QByteArray peek(qint64 maxSize) Q_DECL_OVERRIDE;
#ifndef QT_NO_QOBJECT
// private slots
diff --git a/src/corelib/io/qbuffer.h b/src/corelib/io/qbuffer.h
index 24b05aad13..56c80f8a7d 100644
--- a/src/corelib/io/qbuffer.h
+++ b/src/corelib/io/qbuffer.h
@@ -67,22 +67,22 @@ public:
inline void setData(const char *data, int len);
const QByteArray &data() const;
- bool open(OpenMode openMode);
+ bool open(OpenMode openMode) Q_DECL_OVERRIDE;
- void close();
- qint64 size() const;
- qint64 pos() const;
- bool seek(qint64 off);
- bool atEnd() const;
- bool canReadLine() const;
+ void close() Q_DECL_OVERRIDE;
+ qint64 size() const Q_DECL_OVERRIDE;
+ qint64 pos() const Q_DECL_OVERRIDE;
+ bool seek(qint64 off) Q_DECL_OVERRIDE;
+ bool atEnd() const Q_DECL_OVERRIDE;
+ bool canReadLine() const Q_DECL_OVERRIDE;
protected:
#ifndef QT_NO_QOBJECT
- void connectNotify(const QMetaMethod &);
- void disconnectNotify(const QMetaMethod &);
+ void connectNotify(const QMetaMethod &) Q_DECL_OVERRIDE;
+ void disconnectNotify(const QMetaMethod &) Q_DECL_OVERRIDE;
#endif
- qint64 readData(char *data, qint64 maxlen);
- qint64 writeData(const char *data, qint64 len);
+ qint64 readData(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
+ qint64 writeData(const char *data, qint64 len) Q_DECL_OVERRIDE;
private:
Q_DECLARE_PRIVATE(QBuffer)
diff --git a/src/corelib/io/qdatastream.cpp b/src/corelib/io/qdatastream.cpp
index beaafe4762..60f04ce4f1 100644
--- a/src/corelib/io/qdatastream.cpp
+++ b/src/corelib/io/qdatastream.cpp
@@ -525,6 +525,7 @@ void QDataStream::setByteOrder(ByteOrder bo)
\value Qt_5_2 Version 15 (Qt 5.2)
\value Qt_5_3 Same as Qt_5_2
\value Qt_5_4 Version 16 (Qt 5.4)
+ \value Qt_5_5 Same as Qt_5_4
\omitvalue Qt_DefaultCompiledVersion
\sa setVersion(), version()
diff --git a/src/corelib/io/qdatastream.h b/src/corelib/io/qdatastream.h
index 75ffa11543..8e1d777011 100644
--- a/src/corelib/io/qdatastream.h
+++ b/src/corelib/io/qdatastream.h
@@ -82,10 +82,11 @@ public:
Qt_5_2 = 15,
Qt_5_3 = Qt_5_2,
Qt_5_4 = 16,
-#if QT_VERSION >= 0x050500
+ Qt_5_5 = Qt_5_4,
+#if QT_VERSION >= 0x050600
#error Add the datastream version for this Qt version and update Qt_DefaultCompiledVersion
#endif
- Qt_DefaultCompiledVersion = Qt_5_4
+ Qt_DefaultCompiledVersion = Qt_5_5
};
enum ByteOrder {
diff --git a/src/corelib/io/qdebug.cpp b/src/corelib/io/qdebug.cpp
index 5c77ccdcbf..9ed29c38af 100644
--- a/src/corelib/io/qdebug.cpp
+++ b/src/corelib/io/qdebug.cpp
@@ -1,6 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2014 Intel Corporation.
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtCore module of the Qt Toolkit.
@@ -40,9 +41,13 @@
#include "qdebug.h"
#include <private/qtextstream_p.h>
+#include <private/qtools_p.h>
QT_BEGIN_NAMESPACE
+using QtMiscUtils::toHexUpper;
+using QtMiscUtils::fromHex;
+
// This file is needed to force compilation of QDebug into the kernel library.
/*!
@@ -148,6 +153,171 @@ QDebug::~QDebug()
}
/*!
+ \internal
+*/
+void QDebug::putUcs4(uint ucs4)
+{
+ maybeQuote('\'');
+ if (ucs4 < 0x20) {
+ stream->ts << hex << "\\x" << ucs4 << reset;
+ } else if (ucs4 < 0x80) {
+ stream->ts << char(ucs4);
+ } else {
+ stream->ts << hex << qSetPadChar(QLatin1Char('0'));
+ if (ucs4 < 0x10000)
+ stream->ts << qSetFieldWidth(4) << "\\u";
+ else
+ stream->ts << qSetFieldWidth(8) << "\\U";
+ stream->ts << ucs4 << reset;
+ }
+ maybeQuote('\'');
+}
+
+template <typename Char>
+static inline void putEscapedString(QTextStreamPrivate *d, const Char *begin, int length, bool isUnicode = true)
+{
+ QChar quote(QLatin1Char('"'));
+ d->write(&quote, 1);
+
+ bool lastWasHexEscape = false;
+ const Char *end = begin + length;
+ for (const Char *p = begin; p != end; ++p) {
+ // check if we need to insert "" to break an hex escape sequence
+ if (Q_UNLIKELY(lastWasHexEscape)) {
+ if (fromHex(*p) != -1) {
+ // yes, insert it
+ QChar quotes[] = { QLatin1Char('"'), QLatin1Char('"') };
+ d->write(quotes, 2);
+ }
+ lastWasHexEscape = false;
+ }
+
+ if (sizeof(Char) == sizeof(QChar)) {
+ int runLength = 0;
+ while (p + runLength != end &&
+ p[runLength] < 0x7f && p[runLength] >= 0x20 && p[runLength] != '\\' && p[runLength] != '"')
+ ++runLength;
+ if (runLength) {
+ d->write(reinterpret_cast<const QChar *>(p), runLength);
+ p += runLength - 1;
+ continue;
+ }
+ } else if (*p < 0x7f && *p >= 0x20 && *p != '\\' && *p != '"') {
+ QChar c = QLatin1Char(*p);
+ d->write(&c, 1);
+ continue;
+ }
+
+ // print as an escape sequence
+ int buflen = 2;
+ ushort buf[sizeof "\\U12345678" - 1];
+ buf[0] = '\\';
+
+ switch (*p) {
+ case '"':
+ case '\\':
+ buf[1] = *p;
+ break;
+ case '\b':
+ buf[1] = 'b';
+ break;
+ case '\f':
+ buf[1] = 'f';
+ break;
+ case '\n':
+ buf[1] = 'n';
+ break;
+ case '\r':
+ buf[1] = 'r';
+ break;
+ case '\t':
+ buf[1] = 't';
+ break;
+ default:
+ if (!isUnicode) {
+ // print as hex escape
+ buf[1] = 'x';
+ buf[2] = toHexUpper(uchar(*p) >> 4);
+ buf[3] = toHexUpper(uchar(*p));
+ buflen = 4;
+ lastWasHexEscape = true;
+ break;
+ }
+ if (QChar::isHighSurrogate(*p)) {
+ if ((p + 1) != end && QChar::isLowSurrogate(p[1])) {
+ // properly-paired surrogates
+ uint ucs4 = QChar::surrogateToUcs4(*p, p[1]);
+ ++p;
+ buf[1] = 'U';
+ buf[2] = '0'; // toHexUpper(ucs4 >> 32);
+ buf[3] = '0'; // toHexUpper(ucs4 >> 28);
+ buf[4] = toHexUpper(ucs4 >> 20);
+ buf[5] = toHexUpper(ucs4 >> 16);
+ buf[6] = toHexUpper(ucs4 >> 12);
+ buf[7] = toHexUpper(ucs4 >> 8);
+ buf[8] = toHexUpper(ucs4 >> 4);
+ buf[9] = toHexUpper(ucs4);
+ buflen = 10;
+ break;
+ }
+ // improperly-paired surrogates, fall through
+ }
+ buf[1] = 'u';
+ if (sizeof(Char) == 1) {
+ buf[2] = buf[3] = '0';
+ } else {
+ buf[2] = toHexUpper(*p >> 12);
+ buf[3] = toHexUpper(*p >> 8);
+ }
+ buf[4] = toHexUpper(*p >> 4);
+ buf[5] = toHexUpper(*p);
+ buflen = 6;
+ }
+ d->write(reinterpret_cast<QChar *>(buf), buflen);
+ }
+
+ d->write(&quote, 1);
+}
+
+/*!
+ \internal
+ Duplicated from QtTest::toPrettyUnicode().
+*/
+void QDebug::putString(const QChar *begin, size_t length)
+{
+ if (stream->testFlag(Stream::NoQuotes)) {
+ // no quotes, write the string directly too (no pretty-printing)
+ // this respects the QTextStream state, though
+ stream->ts.d_ptr->putString(begin, length);
+ } else {
+ // we'll reset the QTextStream formatting mechanisms, so save the state
+ QDebugStateSaver saver(*this);
+ stream->ts.d_ptr->params.reset();
+ putEscapedString(stream->ts.d_ptr.data(), reinterpret_cast<const ushort *>(begin), length);
+ }
+}
+
+/*!
+ \internal
+ Duplicated from QtTest::toPrettyCString().
+*/
+void QDebug::putByteArray(const char *begin, size_t length, Latin1Content content)
+{
+ if (stream->testFlag(Stream::NoQuotes)) {
+ // no quotes, write the string directly too (no pretty-printing)
+ // this respects the QTextStream state, though
+ QString string = content == ContainsLatin1 ? QString::fromLatin1(begin, length) : QString::fromUtf8(begin, length);
+ stream->ts.d_ptr->putString(string);
+ } else {
+ // we'll reset the QTextStream formatting mechanisms, so save the state
+ QDebugStateSaver saver(*this);
+ stream->ts.d_ptr->params.reset();
+ putEscapedString(stream->ts.d_ptr.data(), reinterpret_cast<const uchar *>(begin),
+ length, content == ContainsLatin1);
+ }
+}
+
+/*!
\fn QDebug::swap(QDebug &other)
\since 5.0
diff --git a/src/corelib/io/qdebug.h b/src/corelib/io/qdebug.h
index 4edb3057fb..27abf2a740 100644
--- a/src/corelib/io/qdebug.h
+++ b/src/corelib/io/qdebug.h
@@ -76,6 +76,12 @@ class Q_CORE_EXPORT QDebug
// added in 5.4
int flags;
} *stream;
+
+ enum Latin1Content { ContainsBinary = 0, ContainsLatin1 };
+
+ void putUcs4(uint ucs4);
+ void putString(const QChar *begin, size_t length);
+ void putByteArray(const char *begin, size_t length, Latin1Content content);
public:
inline QDebug(QIODevice *device) : stream(new Stream(device)) {}
inline QDebug(QString *string) : stream(new Stream(string)) {}
@@ -83,7 +89,7 @@ public:
inline QDebug(const QDebug &o):stream(o.stream) { ++stream->ref; }
inline QDebug &operator=(const QDebug &other);
~QDebug();
- inline void swap(QDebug &other) { qSwap(stream, other.stream); }
+ inline void swap(QDebug &other) Q_DECL_NOTHROW { qSwap(stream, other.stream); }
QDebug &resetFormat();
@@ -98,11 +104,15 @@ public:
inline QDebug &noquote() { stream->setFlag(Stream::NoQuotes); return *this; }
inline QDebug &maybeQuote(char c = '"') { if (!(stream->testFlag(Stream::NoQuotes))) stream->ts << c; return *this; }
- inline QDebug &operator<<(QChar t) { maybeQuote('\''); stream->ts << t; maybeQuote('\''); return maybeSpace(); }
+ inline QDebug &operator<<(QChar t) { putUcs4(t.unicode()); return maybeSpace(); }
inline QDebug &operator<<(bool t) { stream->ts << (t ? "true" : "false"); return maybeSpace(); }
inline QDebug &operator<<(char t) { stream->ts << t; return maybeSpace(); }
inline QDebug &operator<<(signed short t) { stream->ts << t; return maybeSpace(); }
inline QDebug &operator<<(unsigned short t) { stream->ts << t; return maybeSpace(); }
+#ifdef Q_COMPILER_UNICODE_STRINGS
+ inline QDebug &operator<<(char16_t t) { return *this << QChar(t); }
+ inline QDebug &operator<<(char32_t t) { putUcs4(t); return maybeSpace(); }
+#endif
inline QDebug &operator<<(signed int t) { stream->ts << t; return maybeSpace(); }
inline QDebug &operator<<(unsigned int t) { stream->ts << t; return maybeSpace(); }
inline QDebug &operator<<(signed long t) { stream->ts << t; return maybeSpace(); }
@@ -112,11 +122,14 @@ public:
inline QDebug &operator<<(float t) { stream->ts << t; return maybeSpace(); }
inline QDebug &operator<<(double t) { stream->ts << t; return maybeSpace(); }
inline QDebug &operator<<(const char* t) { stream->ts << QString::fromUtf8(t); return maybeSpace(); }
- inline QDebug &operator<<(const QString & t) { maybeQuote(); stream->ts << t; maybeQuote(); return maybeSpace(); }
- inline QDebug &operator<<(const QStringRef & t) { return operator<<(t.toString()); }
- inline QDebug &operator<<(QLatin1String t) { maybeQuote(); stream->ts << t; maybeQuote(); return maybeSpace(); }
- inline QDebug &operator<<(const QByteArray & t) { maybeQuote(); stream->ts << t; maybeQuote(); return maybeSpace(); }
+ inline QDebug &operator<<(const QString & t) { putString(t.constData(), uint(t.length())); return maybeSpace(); }
+ inline QDebug &operator<<(const QStringRef & t) { putString(t.constData(), uint(t.length())); return maybeSpace(); }
+ inline QDebug &operator<<(QLatin1String t) { putByteArray(t.latin1(), t.size(), ContainsLatin1); return maybeSpace(); }
+ inline QDebug &operator<<(const QByteArray & t) { putByteArray(t.constData(), t.size(), ContainsBinary); return maybeSpace(); }
inline QDebug &operator<<(const void * t) { stream->ts << t; return maybeSpace(); }
+#ifdef Q_COMPILER_NULLPTR
+ inline QDebug &operator<<(std::nullptr_t) { stream->ts << "(nullptr)"; return maybeSpace(); }
+#endif
inline QDebug &operator<<(QTextStreamFunction f) {
stream->ts << f;
return *this;
@@ -268,6 +281,82 @@ inline QDebug operator<<(QDebug debug, const QFlags<T> &flags)
return debug;
}
+#ifdef Q_OS_MAC
+
+// We provide QDebug stream operators for commonly used Core Foundation
+// and Core Graphics types, as well as NSObject. Additional CF/CG types
+// may be added by the user, using Q_DECLARE_QDEBUG_OPERATOR_FOR_CF_TYPE.
+
+#define QT_FOR_EACH_CORE_FOUNDATION_TYPE(F) \
+ F(CFArray) \
+ F(CFURL) \
+ F(CFData) \
+ F(CFNumber) \
+ F(CFDictionary) \
+ F(CFLocale) \
+ F(CFDate) \
+ F(CFBoolean) \
+ F(CFTimeZone) \
+
+#define QT_FOR_EACH_MUTABLE_CORE_FOUNDATION_TYPE(F) \
+ F(CFError) \
+ F(CFBundle) \
+
+#define QT_FOR_EACH_CORE_GRAPHICS_TYPE(F) \
+ F(CGPath) \
+
+#define QT_FOR_EACH_MUTABLE_CORE_GRAPHICS_TYPE(F) \
+ F(CGColorSpace) \
+ F(CGImage) \
+ F(CGFont) \
+ F(CGColor) \
+
+#define QT_FORWARD_DECLARE_CF_TYPE(type) Q_FORWARD_DECLARE_CF_TYPE(type);
+#define QT_FORWARD_DECLARE_MUTABLE_CF_TYPE(type) Q_FORWARD_DECLARE_MUTABLE_CF_TYPE(type);
+#define QT_FORWARD_DECLARE_CG_TYPE(type) typedef const struct type *type ## Ref;
+#define QT_FORWARD_DECLARE_MUTABLE_CG_TYPE(type) typedef struct type *type ## Ref;
+
+QT_END_NAMESPACE
+Q_FORWARD_DECLARE_CF_TYPE(CFString);
+Q_FORWARD_DECLARE_OBJC_CLASS(NSObject);
+QT_FOR_EACH_CORE_FOUNDATION_TYPE(QT_FORWARD_DECLARE_CF_TYPE);
+QT_FOR_EACH_MUTABLE_CORE_FOUNDATION_TYPE(QT_FORWARD_DECLARE_MUTABLE_CF_TYPE);
+QT_FOR_EACH_CORE_GRAPHICS_TYPE(QT_FORWARD_DECLARE_CG_TYPE);
+QT_FOR_EACH_MUTABLE_CORE_GRAPHICS_TYPE(QT_FORWARD_DECLARE_MUTABLE_CG_TYPE);
+QT_BEGIN_NAMESPACE
+
+#define QT_FORWARD_DECLARE_QDEBUG_OPERATOR_FOR_CF_TYPE(CFType) \
+ Q_CORE_EXPORT QDebug operator<<(QDebug, CFType##Ref);
+
+#define Q_DECLARE_QDEBUG_OPERATOR_FOR_CF_TYPE(CFType) \
+ QDebug operator<<(QDebug debug, CFType##Ref ref) \
+ { \
+ if (!ref) \
+ return debug << QT_STRINGIFY(CFType) "Ref(0x0)"; \
+ if (CFStringRef description = CFCopyDescription(ref)) { \
+ QDebugStateSaver saver(debug); \
+ debug.noquote() << description; \
+ CFRelease(description); \
+ } \
+ return debug; \
+ }
+
+// Defined in qcore_mac_objc.mm
+Q_CORE_EXPORT QDebug operator<<(QDebug, const NSObject *);
+Q_CORE_EXPORT QDebug operator<<(QDebug, CFStringRef);
+
+QT_FOR_EACH_CORE_FOUNDATION_TYPE(QT_FORWARD_DECLARE_QDEBUG_OPERATOR_FOR_CF_TYPE);
+QT_FOR_EACH_MUTABLE_CORE_FOUNDATION_TYPE(QT_FORWARD_DECLARE_QDEBUG_OPERATOR_FOR_CF_TYPE);
+QT_FOR_EACH_CORE_GRAPHICS_TYPE(QT_FORWARD_DECLARE_QDEBUG_OPERATOR_FOR_CF_TYPE);
+QT_FOR_EACH_MUTABLE_CORE_GRAPHICS_TYPE(QT_FORWARD_DECLARE_QDEBUG_OPERATOR_FOR_CF_TYPE);
+
+#undef QT_FORWARD_DECLARE_CF_TYPE
+#undef QT_FORWARD_DECLARE_MUTABLE_CF_TYPE
+#undef QT_FORWARD_DECLARE_CG_TYPE
+#undef QT_FORWARD_DECLARE_MUTABLE_CG_TYPE
+
+#endif // Q_OS_MAC
+
QT_END_NAMESPACE
#endif // QDEBUG_H
diff --git a/src/corelib/io/qdir.cpp b/src/corelib/io/qdir.cpp
index a5e189a825..92f2fc0815 100644
--- a/src/corelib/io/qdir.cpp
+++ b/src/corelib/io/qdir.cpp
@@ -2271,6 +2271,8 @@ QStringList QDir::nameFiltersFromString(const QString &nameFilter)
#ifndef QT_NO_DEBUG_STREAM
QDebug operator<<(QDebug debug, QDir::Filters filters)
{
+ QDebugStateSaver save(debug);
+ debug.resetFormat();
QStringList flags;
if (filters == QDir::NoFilter) {
flags << QLatin1String("NoFilter");
@@ -2291,12 +2293,14 @@ QDebug operator<<(QDebug debug, QDir::Filters filters)
if (filters & QDir::System) flags << QLatin1String("System");
if (filters & QDir::CaseSensitive) flags << QLatin1String("CaseSensitive");
}
- debug << "QDir::Filters(" << qPrintable(flags.join(QLatin1Char('|'))) << ')';
+ debug.noquote() << "QDir::Filters(" << flags.join(QLatin1Char('|')) << ')';
return debug;
}
static QDebug operator<<(QDebug debug, QDir::SortFlags sorting)
{
+ QDebugStateSaver save(debug);
+ debug.resetFormat();
if (sorting == QDir::NoSort) {
debug << "QDir::SortFlags(NoSort)";
} else {
@@ -2312,24 +2316,23 @@ static QDebug operator<<(QDebug debug, QDir::SortFlags sorting)
if (sorting & QDir::IgnoreCase) flags << QLatin1String("IgnoreCase");
if (sorting & QDir::LocaleAware) flags << QLatin1String("LocaleAware");
if (sorting & QDir::Type) flags << QLatin1String("Type");
- debug << "QDir::SortFlags(" << qPrintable(type)
- << '|'
- << qPrintable(flags.join(QLatin1Char('|'))) << ')';
+ debug.noquote() << "QDir::SortFlags(" << type << '|' << flags.join(QLatin1Char('|')) << ')';
}
return debug;
}
QDebug operator<<(QDebug debug, const QDir &dir)
{
- debug.maybeSpace() << "QDir(" << dir.path()
- << ", nameFilters = {"
- << qPrintable(dir.nameFilters().join(QLatin1Char(',')))
- << "}, "
- << dir.sorting()
- << ','
- << dir.filter()
- << ')';
- return debug.space();
+ QDebugStateSaver save(debug);
+ debug.resetFormat();
+ debug << "QDir(" << dir.path() << ", nameFilters = {"
+ << dir.nameFilters().join(QLatin1Char(','))
+ << "}, "
+ << dir.sorting()
+ << ','
+ << dir.filter()
+ << ')';
+ return debug;
}
#endif // QT_NO_DEBUG_STREAM
diff --git a/src/corelib/io/qfile.h b/src/corelib/io/qfile.h
index 75f246da96..3c44ee3397 100644
--- a/src/corelib/io/qfile.h
+++ b/src/corelib/io/qfile.h
@@ -63,7 +63,7 @@ public:
#endif
~QFile();
- QString fileName() const;
+ QString fileName() const Q_DECL_OVERRIDE;
void setFileName(const QString &name);
#if defined(Q_OS_DARWIN)
@@ -116,18 +116,18 @@ public:
bool copy(const QString &newName);
static bool copy(const QString &fileName, const QString &newName);
- bool open(OpenMode flags);
+ bool open(OpenMode flags) Q_DECL_OVERRIDE;
bool open(FILE *f, OpenMode ioFlags, FileHandleFlags handleFlags=DontCloseHandle);
bool open(int fd, OpenMode ioFlags, FileHandleFlags handleFlags=DontCloseHandle);
- qint64 size() const;
+ qint64 size() const Q_DECL_OVERRIDE;
- bool resize(qint64 sz);
+ bool resize(qint64 sz) Q_DECL_OVERRIDE;
static bool resize(const QString &filename, qint64 sz);
- Permissions permissions() const;
+ Permissions permissions() const Q_DECL_OVERRIDE;
static Permissions permissions(const QString &filename);
- bool setPermissions(Permissions permissionSpec);
+ bool setPermissions(Permissions permissionSpec) Q_DECL_OVERRIDE;
static bool setPermissions(const QString &filename, Permissions permissionSpec);
protected:
diff --git a/src/corelib/io/qfiledevice.h b/src/corelib/io/qfiledevice.h
index b79b0055fa..ca12bb0411 100644
--- a/src/corelib/io/qfiledevice.h
+++ b/src/corelib/io/qfiledevice.h
@@ -86,19 +86,19 @@ public:
FileError error() const;
void unsetError();
- virtual void close();
+ virtual void close() Q_DECL_OVERRIDE;
- bool isSequential() const;
+ bool isSequential() const Q_DECL_OVERRIDE;
int handle() const;
virtual QString fileName() const;
- qint64 pos() const;
- bool seek(qint64 offset);
- bool atEnd() const;
+ qint64 pos() const Q_DECL_OVERRIDE;
+ bool seek(qint64 offset) Q_DECL_OVERRIDE;
+ bool atEnd() const Q_DECL_OVERRIDE;
bool flush();
- qint64 size() const;
+ qint64 size() const Q_DECL_OVERRIDE;
virtual bool resize(qint64 sz);
virtual Permissions permissions() const;
@@ -122,9 +122,9 @@ protected:
QFileDevice(QFileDevicePrivate &dd, QObject *parent = 0);
#endif
- qint64 readData(char *data, qint64 maxlen);
- qint64 writeData(const char *data, qint64 len);
- qint64 readLineData(char *data, qint64 maxlen);
+ qint64 readData(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
+ qint64 writeData(const char *data, qint64 len) Q_DECL_OVERRIDE;
+ qint64 readLineData(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QFileDevice)
diff --git a/src/corelib/io/qfiledevice_p.h b/src/corelib/io/qfiledevice_p.h
index 891a5e4be4..da29c51468 100644
--- a/src/corelib/io/qfiledevice_p.h
+++ b/src/corelib/io/qfiledevice_p.h
@@ -64,7 +64,7 @@ protected:
inline bool ensureFlushed() const;
- bool putCharHelper(char c);
+ bool putCharHelper(char c) Q_DECL_OVERRIDE;
void setError(QFileDevice::FileError err);
void setError(QFileDevice::FileError err, const QString &errorString);
diff --git a/src/corelib/io/qfileselector.cpp b/src/corelib/io/qfileselector.cpp
index 5d1d5dfe23..b95e628b0f 100644
--- a/src/corelib/io/qfileselector.cpp
+++ b/src/corelib/io/qfileselector.cpp
@@ -145,7 +145,9 @@ QFileSelectorPrivate::QFileSelectorPrivate()
Selectors normally available are
\list
\li platform, any of the following strings which match the platform the application is running
- on: android, blackberry, ios, osx, darwin, mac, linux, wince, unix, windows.
+ on (list not exhaustive): android, blackberry, ios, osx, darwin, mac, linux, wince, unix,
+ windows. On Linux, if it can be determined, the name of the distribution too, like debian,
+ fedora or opensuse.
\li locale, same as QLocale::system().name().
\endlist
@@ -335,7 +337,7 @@ void QFileSelectorPrivate::updateSelectors()
if (envSelectors.count())
sharedData->staticSelectors << envSelectors;
- if (!qgetenv(env_override).isEmpty())
+ if (!qEnvironmentVariableIsEmpty(env_override))
return;
sharedData->staticSelectors << sharedData->preloadedStatics; //Potential for static selectors from other modules
@@ -351,10 +353,10 @@ QStringList QFileSelectorPrivate::platformSelectors()
// similar, but not identical to QSysInfo::osType
QStringList ret;
#if defined(Q_OS_WIN)
+ // can't fall back to QSysInfo because we need both "winphone" and "winrt" for the Windows Phone case
ret << QStringLiteral("windows");
-# if defined(Q_OS_WINCE)
- ret << QStringLiteral("wince");
-# elif defined(Q_OS_WINRT)
+ ret << QSysInfo::kernelType(); // "wince" and "winnt"
+# if defined(Q_OS_WINRT)
ret << QStringLiteral("winrt");
# if defined(Q_OS_WINPHONE)
ret << QStringLiteral("winphone");
@@ -362,25 +364,16 @@ QStringList QFileSelectorPrivate::platformSelectors()
# endif
#elif defined(Q_OS_UNIX)
ret << QStringLiteral("unix");
-# if defined(Q_OS_ANDROID)
- ret << QStringLiteral("android");
-# elif defined(Q_OS_BLACKBERRY)
- ret << QStringLiteral("blackberry");
-# elif defined(Q_OS_QNX)
- ret << QStringLiteral("qnx");
-# elif defined(Q_OS_LINUX)
- ret << QStringLiteral("linux");
-# elif defined(Q_OS_DARWIN)
- ret << QStringLiteral("darwin");
- ret << QStringLiteral("mac"); // compatibility synonym
-# if defined(Q_OS_IOS)
- ret << QStringLiteral("ios");
-# elif defined(Q_OS_OSX)
- ret << QStringLiteral("osx");
-# endif
-# else
+# if !defined(Q_OS_ANDROID) && !defined(Q_OS_BLACKBERRY)
+ // we don't want "linux" for Android or "qnx" for Blackberry here
ret << QSysInfo::kernelType();
+# ifdef Q_OS_MAC
+ ret << QStringLiteral("mac"); // compatibility, since kernelType() is "darwin"
+# endif
# endif
+ QString productName = QSysInfo::productType();
+ if (productName != QLatin1String("unknown"))
+ ret << productName; // "opensuse", "fedora", "osx", "ios", "blackberry", "android"
#endif
return ret;
}
diff --git a/src/corelib/io/qfilesystemengine_unix.cpp b/src/corelib/io/qfilesystemengine_unix.cpp
index cd42aff35c..11d421591a 100644
--- a/src/corelib/io/qfilesystemengine_unix.cpp
+++ b/src/corelib/io/qfilesystemengine_unix.cpp
@@ -723,36 +723,29 @@ bool QFileSystemEngine::setCurrentPath(const QFileSystemEntry &path)
QFileSystemEntry QFileSystemEngine::currentPath()
{
QFileSystemEntry result;
- QT_STATBUF st;
- if (QT_STAT(".", &st) == 0) {
#if defined(__GLIBC__) && !defined(PATH_MAX)
- char *currentName = ::get_current_dir_name();
- if (currentName) {
- result = QFileSystemEntry(QByteArray(currentName), QFileSystemEntry::FromNativePath());
- ::free(currentName);
- }
+ char *currentName = ::get_current_dir_name();
+ if (currentName) {
+ result = QFileSystemEntry(QByteArray(currentName), QFileSystemEntry::FromNativePath());
+ ::free(currentName);
+ }
#else
- char currentName[PATH_MAX+1];
- if (::getcwd(currentName, PATH_MAX)) {
+ char currentName[PATH_MAX+1];
+ if (::getcwd(currentName, PATH_MAX)) {
#if defined(Q_OS_VXWORKS) && defined(VXWORKS_VXSIM)
- QByteArray dir(currentName);
- if (dir.indexOf(':') < dir.indexOf('/'))
- dir.remove(0, dir.indexOf(':')+1);
+ QByteArray dir(currentName);
+ if (dir.indexOf(':') < dir.indexOf('/'))
+ dir.remove(0, dir.indexOf(':')+1);
- qstrncpy(currentName, dir.constData(), PATH_MAX);
+ qstrncpy(currentName, dir.constData(), PATH_MAX);
#endif
- result = QFileSystemEntry(QByteArray(currentName), QFileSystemEntry::FromNativePath());
- }
+ result = QFileSystemEntry(QByteArray(currentName), QFileSystemEntry::FromNativePath());
+ }
# if defined(QT_DEBUG)
- if (result.isEmpty())
- qWarning("QFileSystemEngine::currentPath: getcwd() failed");
+ if (result.isEmpty())
+ qWarning("QFileSystemEngine::currentPath: getcwd() failed");
# endif
#endif
- } else {
-# if defined(QT_DEBUG)
- qWarning("QFileSystemEngine::currentPath: stat(\".\") failed");
-# endif
- }
return result;
}
QT_END_NAMESPACE
diff --git a/src/corelib/io/qfilesystementry.cpp b/src/corelib/io/qfilesystementry.cpp
index 8e48dd1630..69c0e08763 100644
--- a/src/corelib/io/qfilesystementry.cpp
+++ b/src/corelib/io/qfilesystementry.cpp
@@ -315,13 +315,7 @@ void QFileSystemEntry::findLastSeparator() const
{
if (m_lastSeparator == -2) {
resolveFilePath();
- m_lastSeparator = -1;
- for (int i = m_filePath.size() - 1; i >= 0; --i) {
- if (m_filePath[i].unicode() == '/') {
- m_lastSeparator = i;
- break;
- }
- }
+ m_lastSeparator = m_filePath.lastIndexOf(QLatin1Char('/'));
}
}
diff --git a/src/corelib/io/qfilesystemwatcher.cpp b/src/corelib/io/qfilesystemwatcher.cpp
index 4bca8d90a0..416dd29d23 100644
--- a/src/corelib/io/qfilesystemwatcher.cpp
+++ b/src/corelib/io/qfilesystemwatcher.cpp
@@ -52,9 +52,9 @@
# include "qfilesystemwatcher_win_p.h"
#elif defined(USE_INOTIFY)
# include "qfilesystemwatcher_inotify_p.h"
-#elif defined(Q_OS_FREEBSD) || defined(Q_OS_IOS) || (defined(Q_OS_OSX) && MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_7)
+#elif defined(Q_OS_FREEBSD) || defined(Q_OS_IOS)
# include "qfilesystemwatcher_kqueue_p.h"
-#elif defined(Q_OS_OSX) && MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_6
+#elif defined(Q_OS_OSX)
# include "qfilesystemwatcher_fsevents_p.h"
#endif
@@ -68,9 +68,9 @@ QFileSystemWatcherEngine *QFileSystemWatcherPrivate::createNativeEngine(QObject
// there is a chance that inotify may fail on Linux pre-2.6.13 (August
// 2005), so we can't just new inotify directly.
return QInotifyFileSystemWatcherEngine::create(parent);
-#elif defined(Q_OS_FREEBSD) || defined(Q_OS_IOS) || (defined(Q_OS_OSX) && MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_7)
+#elif defined(Q_OS_FREEBSD) || defined(Q_OS_IOS)
return QKqueueFileSystemWatcherEngine::create(parent);
-#elif defined(Q_OS_OSX) && MAC_OS_X_VERSION_MIN_REQUIRED > MAC_OS_X_VERSION_10_6
+#elif defined(Q_OS_OSX)
return QFseventsFileSystemWatcherEngine::create(parent);
#else
Q_UNUSED(parent);
@@ -394,12 +394,12 @@ QStringList QFileSystemWatcher::removePaths(const QStringList &paths)
/*!
\fn void QFileSystemWatcher::directoryChanged(const QString &path)
- This signal is emitted when the directory at a specified \a path,
- is modified (e.g., when a file is added, modified or deleted) or
- removed from disk. Note that if there are several changes during a
- short period of time, some of the changes might not emit this
- signal. However, the last change in the sequence of changes will
- always generate this signal.
+ This signal is emitted when the directory at a specified \a path
+ is modified (e.g., when a file is added or deleted) or removed
+ from disk. Note that if there are several changes during a short
+ period of time, some of the changes might not emit this signal.
+ However, the last change in the sequence of changes will always
+ generate this signal.
\sa fileChanged()
*/
diff --git a/src/corelib/io/qfilesystemwatcher_inotify_p.h b/src/corelib/io/qfilesystemwatcher_inotify_p.h
index a9bc8486dc..506f571e2b 100644
--- a/src/corelib/io/qfilesystemwatcher_inotify_p.h
+++ b/src/corelib/io/qfilesystemwatcher_inotify_p.h
@@ -64,8 +64,8 @@ public:
static QInotifyFileSystemWatcherEngine *create(QObject *parent);
- QStringList addPaths(const QStringList &paths, QStringList *files, QStringList *directories);
- QStringList removePaths(const QStringList &paths, QStringList *files, QStringList *directories);
+ QStringList addPaths(const QStringList &paths, QStringList *files, QStringList *directories) Q_DECL_OVERRIDE;
+ QStringList removePaths(const QStringList &paths, QStringList *files, QStringList *directories) Q_DECL_OVERRIDE;
private Q_SLOTS:
void readFromInotify();
diff --git a/src/corelib/io/qfilesystemwatcher_polling_p.h b/src/corelib/io/qfilesystemwatcher_polling_p.h
index f39d72d5d8..3833869806 100644
--- a/src/corelib/io/qfilesystemwatcher_polling_p.h
+++ b/src/corelib/io/qfilesystemwatcher_polling_p.h
@@ -104,8 +104,8 @@ class QPollingFileSystemWatcherEngine : public QFileSystemWatcherEngine
public:
QPollingFileSystemWatcherEngine(QObject *parent);
- QStringList addPaths(const QStringList &paths, QStringList *files, QStringList *directories);
- QStringList removePaths(const QStringList &paths, QStringList *files, QStringList *directories);
+ QStringList addPaths(const QStringList &paths, QStringList *files, QStringList *directories) Q_DECL_OVERRIDE;
+ QStringList removePaths(const QStringList &paths, QStringList *files, QStringList *directories) Q_DECL_OVERRIDE;
private Q_SLOTS:
void timeout();
diff --git a/src/corelib/io/qfsfileengine_iterator_p.h b/src/corelib/io/qfsfileengine_iterator_p.h
index cc5b36fc57..35cb89673c 100644
--- a/src/corelib/io/qfsfileengine_iterator_p.h
+++ b/src/corelib/io/qfsfileengine_iterator_p.h
@@ -62,11 +62,11 @@ public:
QFSFileEngineIterator(QDir::Filters filters, const QStringList &filterNames);
~QFSFileEngineIterator();
- QString next();
- bool hasNext() const;
+ QString next() Q_DECL_OVERRIDE;
+ bool hasNext() const Q_DECL_OVERRIDE;
- QString currentFileName() const;
- QFileInfo currentFileInfo() const;
+ QString currentFileName() const Q_DECL_OVERRIDE;
+ QFileInfo currentFileInfo() const Q_DECL_OVERRIDE;
private:
void advance() const;
diff --git a/src/corelib/io/qfsfileengine_p.h b/src/corelib/io/qfsfileengine_p.h
index 3963a9cb11..f843a870b8 100644
--- a/src/corelib/io/qfsfileengine_p.h
+++ b/src/corelib/io/qfsfileengine_p.h
@@ -69,46 +69,46 @@ public:
explicit QFSFileEngine(const QString &file);
~QFSFileEngine();
- bool open(QIODevice::OpenMode openMode);
+ bool open(QIODevice::OpenMode openMode) Q_DECL_OVERRIDE;
bool open(QIODevice::OpenMode flags, FILE *fh);
- bool close();
- bool flush();
- bool syncToDisk();
- qint64 size() const;
- qint64 pos() const;
- bool seek(qint64);
- bool isSequential() const;
- bool remove();
- bool copy(const QString &newName);
- bool rename(const QString &newName);
- bool renameOverwrite(const QString &newName);
- bool link(const QString &newName);
- bool mkdir(const QString &dirName, bool createParentDirectories) const;
- bool rmdir(const QString &dirName, bool recurseParentDirectories) const;
- bool setSize(qint64 size);
- bool caseSensitive() const;
- bool isRelativePath() const;
- QStringList entryList(QDir::Filters filters, const QStringList &filterNames) const;
- FileFlags fileFlags(FileFlags type) const;
- bool setPermissions(uint perms);
- QString fileName(FileName file) const;
- uint ownerId(FileOwner) const;
- QString owner(FileOwner) const;
- QDateTime fileTime(FileTime time) const;
- void setFileName(const QString &file);
- int handle() const;
+ bool close() Q_DECL_OVERRIDE;
+ bool flush() Q_DECL_OVERRIDE;
+ bool syncToDisk() Q_DECL_OVERRIDE;
+ qint64 size() const Q_DECL_OVERRIDE;
+ qint64 pos() const Q_DECL_OVERRIDE;
+ bool seek(qint64) Q_DECL_OVERRIDE;
+ bool isSequential() const Q_DECL_OVERRIDE;
+ bool remove() Q_DECL_OVERRIDE;
+ bool copy(const QString &newName) Q_DECL_OVERRIDE;
+ bool rename(const QString &newName) Q_DECL_OVERRIDE;
+ bool renameOverwrite(const QString &newName) Q_DECL_OVERRIDE;
+ bool link(const QString &newName) Q_DECL_OVERRIDE;
+ bool mkdir(const QString &dirName, bool createParentDirectories) const Q_DECL_OVERRIDE;
+ bool rmdir(const QString &dirName, bool recurseParentDirectories) const Q_DECL_OVERRIDE;
+ bool setSize(qint64 size) Q_DECL_OVERRIDE;
+ bool caseSensitive() const Q_DECL_OVERRIDE;
+ bool isRelativePath() const Q_DECL_OVERRIDE;
+ QStringList entryList(QDir::Filters filters, const QStringList &filterNames) const Q_DECL_OVERRIDE;
+ FileFlags fileFlags(FileFlags type) const Q_DECL_OVERRIDE;
+ bool setPermissions(uint perms) Q_DECL_OVERRIDE;
+ QString fileName(FileName file) const Q_DECL_OVERRIDE;
+ uint ownerId(FileOwner) const Q_DECL_OVERRIDE;
+ QString owner(FileOwner) const Q_DECL_OVERRIDE;
+ QDateTime fileTime(FileTime time) const Q_DECL_OVERRIDE;
+ void setFileName(const QString &file) Q_DECL_OVERRIDE;
+ int handle() const Q_DECL_OVERRIDE;
#ifndef QT_NO_FILESYSTEMITERATOR
- Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames);
- Iterator *endEntryList();
+ Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames) Q_DECL_OVERRIDE;
+ Iterator *endEntryList() Q_DECL_OVERRIDE;
#endif
- qint64 read(char *data, qint64 maxlen);
- qint64 readLine(char *data, qint64 maxlen);
- qint64 write(const char *data, qint64 len);
+ qint64 read(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
+ qint64 readLine(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
+ qint64 write(const char *data, qint64 len) Q_DECL_OVERRIDE;
- bool extension(Extension extension, const ExtensionOption *option = 0, ExtensionReturn *output = 0);
- bool supportsExtension(Extension extension) const;
+ bool extension(Extension extension, const ExtensionOption *option = 0, ExtensionReturn *output = 0) Q_DECL_OVERRIDE;
+ bool supportsExtension(Extension extension) const Q_DECL_OVERRIDE;
//FS only!!
bool open(QIODevice::OpenMode flags, int fd);
diff --git a/src/corelib/io/qiodevice.cpp b/src/corelib/io/qiodevice.cpp
index 72ec6ff403..b1f164ab1b 100644
--- a/src/corelib/io/qiodevice.cpp
+++ b/src/corelib/io/qiodevice.cpp
@@ -733,12 +733,6 @@ qint64 QIODevice::bytesToWrite() const
return qint64(0);
}
-#ifdef Q_CC_RVCT
-// arm mode makes the 64-bit integer operations much faster in RVCT 2.2
-#pragma push
-#pragma arm
-#endif
-
/*!
Reads at most \a maxSize bytes from the device into \a data, and
returns the number of bytes read. If an error occurs, such as when
@@ -783,27 +777,20 @@ qint64 QIODevice::read(char *data, qint64 maxSize)
CHECK_MAXLEN(read, qint64(-1));
qint64 readSoFar = 0;
- bool moreToRead = true;
- do {
+ bool madeBufferReadsOnly = true;
+ bool deviceAtEof = false;
+ char *readPtr = data;
+ forever {
// Try reading from the buffer.
- qint64 lastReadChunkSize = d->buffer.read(data, maxSize);
- if (lastReadChunkSize > 0) {
- *d->pPos += lastReadChunkSize;
- readSoFar += lastReadChunkSize;
- // fast exit when satisfied by buffer
- if (lastReadChunkSize == maxSize && !(d->openMode & Text)) {
- if (d->buffer.isEmpty()) {
- d->buffer.clear();
- readData(data, 0);
- }
- return readSoFar;
- }
-
- data += lastReadChunkSize;
- maxSize -= lastReadChunkSize;
+ qint64 bufferReadChunkSize = d->buffer.read(data, maxSize);
+ if (bufferReadChunkSize > 0) {
+ *d->pPos += bufferReadChunkSize;
+ readSoFar += bufferReadChunkSize;
+ data += bufferReadChunkSize;
+ maxSize -= bufferReadChunkSize;
#if defined QIODEVICE_DEBUG
- printf("%p \treading %d bytes from buffer into position %d\n", this, lastReadChunkSize,
- int(readSoFar) - lastReadChunkSize);
+ printf("%p \treading %d bytes from buffer into position %d\n", this,
+ bufferReadChunkSize, int(readSoFar) - bufferReadChunkSize);
#endif
} else {
if (d->firstRead) {
@@ -816,100 +803,84 @@ qint64 QIODevice::read(char *data, qint64 maxSize)
d->pDevicePos = &d->seqDumpPos;
}
}
+ }
- if (!maxSize)
- return readSoFar;
-
- if ((d->openMode & Unbuffered) == 0 && maxSize < QIODEVICE_BUFFERSIZE) {
- // In buffered mode, we try to fill up the QIODevice buffer before
- // we do anything else.
- // buffer is empty at this point, try to fill it
- const int bytesToBuffer = QIODEVICE_BUFFERSIZE;
- char *writePointer = d->buffer.reserve(bytesToBuffer);
-
- // Make sure the device is positioned correctly.
- if (d->pos != d->devicePos && !d->isSequential() && !seek(d->pos))
- return readSoFar ? readSoFar : qint64(-1);
- qint64 readFromDevice = readData(writePointer, bytesToBuffer);
- d->buffer.chop(bytesToBuffer - (readFromDevice < 0 ? 0 : int(readFromDevice)));
-
- if (readFromDevice > 0) {
- *d->pDevicePos += readFromDevice;
+ if (maxSize > 0 && !deviceAtEof) {
+ qint64 readFromDevice = 0;
+ // Make sure the device is positioned correctly.
+ if (d->pos == d->devicePos || d->isSequential() || seek(d->pos)) {
+ madeBufferReadsOnly = false; // fix readData attempt
+ if (maxSize >= QIODEVICE_BUFFERSIZE || (d->openMode & Unbuffered)) {
+ // Read big chunk directly to output buffer
+ readFromDevice = readData(data, maxSize);
+ deviceAtEof = (readFromDevice != maxSize);
#if defined QIODEVICE_DEBUG
- printf("%p \treading %d from device into buffer\n", this, int(readFromDevice));
+ printf("%p \treading %d bytes from device (total %d)\n", this,
+ int(readFromDevice), int(readSoFar));
#endif
-
- if (!d->buffer.isEmpty()) {
- lastReadChunkSize = d->buffer.read(data, maxSize);
- readSoFar += lastReadChunkSize;
- data += lastReadChunkSize;
- maxSize -= lastReadChunkSize;
- *d->pPos += lastReadChunkSize;
+ if (readFromDevice > 0) {
+ readSoFar += readFromDevice;
+ data += readFromDevice;
+ maxSize -= readFromDevice;
+ *d->pPos += readFromDevice;
+ *d->pDevicePos += readFromDevice;
+ }
+ } else {
+ const int bytesToBuffer = QIODEVICE_BUFFERSIZE;
+ // Try to fill QIODevice buffer by single read
+ readFromDevice = readData(d->buffer.reserve(bytesToBuffer), bytesToBuffer);
+ deviceAtEof = (readFromDevice != bytesToBuffer);
+ d->buffer.chop(bytesToBuffer - qMax(0, int(readFromDevice)));
+ if (readFromDevice > 0) {
+ *d->pDevicePos += readFromDevice;
#if defined QIODEVICE_DEBUG
- printf("%p \treading %d bytes from buffer at position %d\n", this,
- lastReadChunkSize, int(readSoFar));
+ printf("%p \treading %d from device into buffer\n", this,
+ int(readFromDevice));
#endif
+ continue;
}
}
+ } else {
+ readFromDevice = -1;
}
- }
- // If we need more, try reading from the device.
- if (maxSize > 0) {
- // Make sure the device is positioned correctly.
- if (d->pos != d->devicePos && !d->isSequential() && !seek(d->pos))
- return readSoFar ? readSoFar : qint64(-1);
- qint64 readFromDevice = readData(data, maxSize);
-#if defined QIODEVICE_DEBUG
- printf("%p \treading %d bytes from device (total %d)\n", this, int(readFromDevice), int(readSoFar));
-#endif
- if (readFromDevice == -1 && readSoFar == 0) {
+ if (readFromDevice < 0 && readSoFar == 0) {
// error and we haven't read anything: return immediately
- return -1;
- }
- if (readFromDevice > 0) {
- lastReadChunkSize += int(readFromDevice);
- readSoFar += readFromDevice;
- data += readFromDevice;
- maxSize -= readFromDevice;
- *d->pPos += readFromDevice;
- *d->pDevicePos += readFromDevice;
+ return qint64(-1);
}
}
- // Best attempt has been made to read data, don't try again except for text mode adjustment below
- moreToRead = false;
- if (readSoFar && d->openMode & Text) {
- char *readPtr = data - lastReadChunkSize;
+ if ((d->openMode & Text) && readPtr < data) {
const char *endPtr = data;
- if (readPtr < endPtr) {
- // optimization to avoid initial self-assignment
- while (*readPtr != '\r') {
- if (++readPtr == endPtr)
- return readSoFar;
- }
+ // optimization to avoid initial self-assignment
+ while (*readPtr != '\r') {
+ if (++readPtr == endPtr)
+ break;
+ }
- char *writePtr = readPtr;
+ char *writePtr = readPtr;
- while (readPtr < endPtr) {
- char ch = *readPtr++;
- if (ch != '\r')
- *writePtr++ = ch;
- else {
- --readSoFar;
- --data;
- ++maxSize;
- }
+ while (readPtr < endPtr) {
+ char ch = *readPtr++;
+ if (ch != '\r')
+ *writePtr++ = ch;
+ else {
+ --readSoFar;
+ --data;
+ ++maxSize;
}
-
- // Make sure we get more data if there is room for more. This
- // is very important for when someone seeks to the start of a
- // '\r\n' and reads one character - they should get the '\n'.
- moreToRead = (readPtr != writePtr);
}
+
+ // Make sure we get more data if there is room for more. This
+ // is very important for when someone seeks to the start of a
+ // '\r\n' and reads one character - they should get the '\n'.
+ readPtr = data;
+ continue;
}
- } while (moreToRead);
+
+ break;
+ }
#if defined QIODEVICE_DEBUG
printf("%p \treturning %d, d->pos == %d, d->buffer.size() == %d\n", this,
@@ -917,16 +888,14 @@ qint64 QIODevice::read(char *data, qint64 maxSize)
debugBinaryString(data - readSoFar, readSoFar);
#endif
- if (d->buffer.isEmpty())
+ if (madeBufferReadsOnly && d->buffer.isEmpty()) {
+ d->buffer.clear();
readData(data, 0);
+ }
return readSoFar;
}
-#ifdef Q_CC_RVCT
-#pragma pop
-#endif
-
/*!
\overload
@@ -1039,12 +1008,6 @@ QByteArray QIODevice::readAll()
return result;
}
-#ifdef Q_CC_RVCT
-// arm mode makes the 64-bit integer operations much faster in RVCT 2.2
-#pragma push
-#pragma arm
-#endif
-
/*!
This function reads a line of ASCII characters from the device, up
to a maximum of \a maxSize - 1 bytes, stores the characters in \a
@@ -1264,10 +1227,6 @@ qint64 QIODevice::readLineData(char *data, qint64 maxSize)
return readSoFar;
}
-#ifdef Q_CC_RVCT
-#pragma pop
-#endif
-
/*!
Returns \c true if a complete line of data can be read from the device;
otherwise returns \c false.
diff --git a/src/corelib/io/qipaddress.cpp b/src/corelib/io/qipaddress.cpp
index 44da22489d..d436cd2dd6 100644
--- a/src/corelib/io/qipaddress.cpp
+++ b/src/corelib/io/qipaddress.cpp
@@ -33,6 +33,7 @@
#include "qipaddress_p.h"
#include "private/qlocale_tools_p.h"
+#include "private/qtools_p.h"
#include "qvarlengtharray.h"
QT_BEGIN_NAMESPACE
@@ -240,7 +241,7 @@ const QChar *parseIp6(IPv6Address &address, const QChar *begin, const QChar *end
static inline QChar toHex(uchar c)
{
- return ushort(c > 9 ? c + 'a' - 0xA : c + '0');
+ return QtMiscUtils::toHexLower(c);
}
void toString(QString &appendTo, IPv6Address address)
diff --git a/src/corelib/io/qloggingcategory.cpp b/src/corelib/io/qloggingcategory.cpp
index 79d20601a6..a032fe3d1b 100644
--- a/src/corelib/io/qloggingcategory.cpp
+++ b/src/corelib/io/qloggingcategory.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtCore module of the Qt Toolkit.
@@ -64,8 +64,8 @@ static void setBoolLane(QBasicAtomicInt *atomic, bool enable, int shift)
QLoggingCategory represents a certain logging category - identified by a
string - at runtime. A category can be configured to enable or disable
logging of messages per message type. Whether a message type is enabled or
- not can be checked with the \l isDebugEnabled(), \l isWarningEnabled(), and
- \l isCriticalEnabled() methods.
+ not can be checked with the \l isDebugEnabled(), \l isInfoEnabled(),
+ \l isWarningEnabled(), and \l isCriticalEnabled() methods.
All objects are meant to be configured by a common registry (see also
\l{Configuring Categories}). Different objects can also represent the same
@@ -82,8 +82,8 @@ static void setBoolLane(QBasicAtomicInt *atomic, bool enable, int shift)
\section1 Checking Category Configuration
- QLoggingCategory provides \l isDebugEnabled(), \l isWarningEnabled(),
- \l isCriticalEnabled(), as well as \l isEnabled()
+ QLoggingCategory provides \l isDebugEnabled(), \l isInfoEnabled(),
+ \l isWarningEnabled(), \l isCriticalEnabled(), as well as \l isEnabled()
to check whether messages for the given message type should be logged.
\note The qCDebug(), qCWarning(), qCCritical() macros prevent arguments
@@ -101,7 +101,7 @@ static void setBoolLane(QBasicAtomicInt *atomic, bool enable, int shift)
\snippet qloggingcategory/main.cpp 5
will log messages of type \c QtWarningMsg, \c QtCriticalMsg, \c QtFatalMsg, but will
- ignore messages of type \c QtDebugMsg.
+ ignore messages of type \c QtDebugMsg and \c QtInfoMsg.
If no argument is passed, all messages will be logged.
@@ -122,7 +122,7 @@ static void setBoolLane(QBasicAtomicInt *atomic, bool enable, int shift)
\c <category> is the name of the category, potentially with \c{*} as a
wildcard symbol as the first or last character (or at both positions).
- The optional \c <type> must be either \c debug, \c warning, or \c critical.
+ The optional \c <type> must be either \c debug, \c info, \c warning, or \c critical.
Lines that do not fit this scheme are ignored.
Rules are evaluated in text order, from first to last. That is, if two rules
@@ -250,6 +250,21 @@ QLoggingCategory::~QLoggingCategory()
expensive generation of data that is only used for debug output.
*/
+
+/*!
+ \fn bool QLoggingCategory::isInfoEnabled() const
+
+ Returns \c true if informational messages should be shown for this category.
+ Returns \c false otherwise.
+
+ \note The \l qCInfo() macro already does this check before executing any
+ code. However, calling this method may be useful to avoid
+ expensive generation of data that is only used for debug output.
+
+ \since 5.5
+*/
+
+
/*!
\fn bool QLoggingCategory::isWarningEnabled() const
@@ -280,6 +295,7 @@ bool QLoggingCategory::isEnabled(QtMsgType msgtype) const
{
switch (msgtype) {
case QtDebugMsg: return isDebugEnabled();
+ case QtInfoMsg: return isInfoEnabled();
case QtWarningMsg: return isWarningEnabled();
case QtCriticalMsg: return isCriticalEnabled();
case QtFatalMsg: return true;
@@ -302,10 +318,12 @@ void QLoggingCategory::setEnabled(QtMsgType type, bool enable)
switch (type) {
#ifdef Q_ATOMIC_INT8_IS_SUPPORTED
case QtDebugMsg: bools.enabledDebug.store(enable); break;
+ case QtInfoMsg: bools.enabledInfo.store(enable); break;
case QtWarningMsg: bools.enabledWarning.store(enable); break;
case QtCriticalMsg: bools.enabledCritical.store(enable); break;
#else
case QtDebugMsg: setBoolLane(&enabled, enable, DebugShift); break;
+ case QtInfoMsg: setBoolLane(&enabled, enable, InfoShift); break;
case QtWarningMsg: setBoolLane(&enabled, enable, WarningShift); break;
case QtCriticalMsg: setBoolLane(&enabled, enable, CriticalShift); break;
#endif
@@ -331,7 +349,7 @@ void QLoggingCategory::setEnabled(QtMsgType type, bool enable)
/*!
Returns a pointer to the global category \c "default" that
- is used e.g. by qDebug(), qWarning(), qCritical(), qFatal().
+ is used e.g. by qDebug(), qInfo(), qWarning(), qCritical(), qFatal().
\note The returned pointer may be null during destruction of
static objects.
@@ -439,6 +457,47 @@ void QLoggingCategory::setFilterRules(const QString &rules)
*/
/*!
+ \macro qCInfo(category)
+ \relates QLoggingCategory
+ \since 5.5
+
+ Returns an output stream for informational messages in the logging category
+ \a category.
+
+ The macro expands to code that checks whether
+ \l QLoggingCategory::isInfoEnabled() evaluates to \c true.
+ If so, the stream arguments are processed and sent to the message handler.
+
+ Example:
+
+ \snippet qloggingcategory/main.cpp qcinfo_stream
+
+ \note Arguments are not processed if debug output for the category is not
+ enabled, so do not rely on any side effects.
+
+ \sa qInfo()
+*/
+
+/*!
+ \macro qCInfo(category, const char *message, ...)
+ \relates QLoggingCategory
+ \since 5.5
+
+ Logs an informational message \a message in the logging category \a category.
+ \a message might contain place holders that are replaced by additional
+ arguments, similar to the C printf() function.
+
+ Example:
+
+ \snippet qloggingcategory/main.cpp qcinfo_printf
+
+ \note Arguments might not be processed if debug output for the category is
+ not enabled, so do not rely on any side effects.
+
+ \sa qInfo()
+*/
+
+/*!
\macro qCWarning(category)
\relates QLoggingCategory
\since 5.2
diff --git a/src/corelib/io/qloggingcategory.h b/src/corelib/io/qloggingcategory.h
index c7e242af08..5504ebab3b 100644
--- a/src/corelib/io/qloggingcategory.h
+++ b/src/corelib/io/qloggingcategory.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtCore module of the Qt Toolkit.
@@ -53,10 +53,12 @@ public:
#ifdef Q_ATOMIC_INT8_IS_SUPPORTED
bool isDebugEnabled() const { return bools.enabledDebug.load(); }
+ bool isInfoEnabled() const { return bools.enabledInfo.load(); }
bool isWarningEnabled() const { return bools.enabledWarning.load(); }
bool isCriticalEnabled() const { return bools.enabledCritical.load(); }
#else
bool isDebugEnabled() const { return enabled.load() >> DebugShift & 1; }
+ bool isInfoEnabled() const { return enabled.load() >> InfoShift & 1; }
bool isWarningEnabled() const { return enabled.load() >> WarningShift & 1; }
bool isCriticalEnabled() const { return enabled.load() >> CriticalShift & 1; }
#endif
@@ -80,9 +82,9 @@ private:
const char *name;
#ifdef Q_BIG_ENDIAN
- enum { DebugShift = 0, WarningShift = 8, CriticalShift = 16 };
+ enum { DebugShift = 0, WarningShift = 8, CriticalShift = 16, InfoShift = 24 };
#else
- enum { DebugShift = 24, WarningShift = 16, CriticalShift = 8 };
+ enum { DebugShift = 24, WarningShift = 16, CriticalShift = 8, InfoShift = 0};
#endif
struct AtomicBools {
@@ -90,6 +92,7 @@ private:
QBasicAtomicInteger<bool> enabledDebug;
QBasicAtomicInteger<bool> enabledWarning;
QBasicAtomicInteger<bool> enabledCritical;
+ QBasicAtomicInteger<bool> enabledInfo;
#endif
};
union {
@@ -114,6 +117,9 @@ private:
#define qCDebug(category, ...) \
for (bool qt_category_enabled = category().isDebugEnabled(); qt_category_enabled; qt_category_enabled = false) \
QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC, category().categoryName()).debug(__VA_ARGS__)
+#define qCInfo(category, ...) \
+ for (bool qt_category_enabled = category().isInfoEnabled(); qt_category_enabled; qt_category_enabled = false) \
+ QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC, category().categoryName()).info(__VA_ARGS__)
#define qCWarning(category, ...) \
for (bool qt_category_enabled = category().isWarningEnabled(); qt_category_enabled; qt_category_enabled = false) \
QMessageLogger(QT_MESSAGELOG_FILE, QT_MESSAGELOG_LINE, QT_MESSAGELOG_FUNC, category().categoryName()).warning(__VA_ARGS__)
@@ -133,6 +139,7 @@ private:
// check for enabled category inside QMessageLogger.
#define qCDebug qDebug
+#define qCInfo qInfo
#define qCWarning qWarning
#define qCCritical qCritical
@@ -142,9 +149,13 @@ private:
# undef qCDebug
# define qCDebug(category) QT_NO_QDEBUG_MACRO()
#endif
+#if defined(QT_NO_INFO_OUTPUT)
+# undef qCInfo
+# define qCInfo(category) QT_NO_QDEBUG_MACRO()
+#endif
#if defined(QT_NO_WARNING_OUTPUT)
# undef qCWarning
-# define qCWarning(category) QT_NO_QWARNING_MACRO()
+# define qCWarning(category) QT_NO_QDEBUG_MACRO()
#endif
QT_END_NAMESPACE
diff --git a/src/corelib/io/qloggingregistry.cpp b/src/corelib/io/qloggingregistry.cpp
index 8af1487834..0c916df910 100644
--- a/src/corelib/io/qloggingregistry.cpp
+++ b/src/corelib/io/qloggingregistry.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtCore module of the Qt Toolkit.
@@ -124,6 +124,10 @@ void QLoggingRule::parse(const QStringRef &pattern)
p = QStringRef(pattern.string(), pattern.position(),
pattern.length() - 6); // strlen(".debug")
messageType = QtDebugMsg;
+ } else if (pattern.endsWith(QLatin1String(".info"))) {
+ p = QStringRef(pattern.string(), pattern.position(),
+ pattern.length() - 5); // strlen(".info")
+ messageType = QtInfoMsg;
} else if (pattern.endsWith(QLatin1String(".warning"))) {
p = QStringRef(pattern.string(), pattern.position(),
pattern.length() - 8); // strlen(".warning")
@@ -392,6 +396,7 @@ void QLoggingRegistry::defaultCategoryFilter(QLoggingCategory *cat)
QtMsgType enableForLevel = reg->categories.value(cat);
bool debug = (enableForLevel == QtDebugMsg);
+ bool info = (enableForLevel <= QtInfoMsg);
bool warning = (enableForLevel <= QtWarningMsg);
bool critical = (enableForLevel <= QtCriticalMsg);
@@ -409,6 +414,9 @@ void QLoggingRegistry::defaultCategoryFilter(QLoggingCategory *cat)
int filterpass = item.pass(categoryName, QtDebugMsg);
if (filterpass != 0)
debug = (filterpass > 0);
+ filterpass = item.pass(categoryName, QtInfoMsg);
+ if (filterpass != 0)
+ info = (filterpass > 0);
filterpass = item.pass(categoryName, QtWarningMsg);
if (filterpass != 0)
warning = (filterpass > 0);
@@ -418,6 +426,7 @@ void QLoggingRegistry::defaultCategoryFilter(QLoggingCategory *cat)
}
cat->setEnabled(QtDebugMsg, debug);
+ cat->setEnabled(QtInfoMsg, info);
cat->setEnabled(QtWarningMsg, warning);
cat->setEnabled(QtCriticalMsg, critical);
}
diff --git a/src/corelib/io/qnoncontiguousbytedevice.cpp b/src/corelib/io/qnoncontiguousbytedevice.cpp
index 11510a8397..1c10ef9f83 100644
--- a/src/corelib/io/qnoncontiguousbytedevice.cpp
+++ b/src/corelib/io/qnoncontiguousbytedevice.cpp
@@ -94,17 +94,7 @@ QT_BEGIN_NAMESPACE
Moves the internal read pointer back to the beginning.
Returns \c false if this was not possible.
- \sa atEnd(), disableReset()
-
- \internal
-*/
-/*!
- \fn void QNonContiguousByteDevice::disableReset()
-
- Disable the reset() call, e.g. it will always
- do nothing and return false.
-
- \sa reset()
+ \sa atEnd()
\internal
*/
@@ -131,7 +121,7 @@ QT_BEGIN_NAMESPACE
\internal
*/
-QNonContiguousByteDevice::QNonContiguousByteDevice() : QObject((QObject*)0), resetDisabled(false)
+QNonContiguousByteDevice::QNonContiguousByteDevice() : QObject((QObject*)0)
{
}
@@ -139,11 +129,6 @@ QNonContiguousByteDevice::~QNonContiguousByteDevice()
{
}
-void QNonContiguousByteDevice::disableReset()
-{
- resetDisabled = true;
-}
-
// FIXME we should scrap this whole implementation and instead change the ByteArrayImpl to be able to cope with sub-arrays?
QNonContiguousByteDeviceBufferImpl::QNonContiguousByteDeviceBufferImpl(QBuffer *b) : QNonContiguousByteDevice()
{
@@ -176,8 +161,6 @@ bool QNonContiguousByteDeviceBufferImpl::atEnd()
bool QNonContiguousByteDeviceBufferImpl::reset()
{
- if (resetDisabled)
- return false;
return arrayImpl->reset();
}
@@ -224,9 +207,6 @@ bool QNonContiguousByteDeviceByteArrayImpl::atEnd()
bool QNonContiguousByteDeviceByteArrayImpl::reset()
{
- if (resetDisabled)
- return false;
-
currentPosition = 0;
return true;
}
@@ -275,9 +255,6 @@ bool QNonContiguousByteDeviceRingBufferImpl::atEnd()
bool QNonContiguousByteDeviceRingBufferImpl::reset()
{
- if (resetDisabled)
- return false;
-
currentPosition = 0;
return true;
}
@@ -378,8 +355,6 @@ bool QNonContiguousByteDeviceIoDeviceImpl::atEnd()
bool QNonContiguousByteDeviceIoDeviceImpl::reset()
{
- if (resetDisabled)
- return false;
bool reset = (initialPosition == 0) ? device->reset() : device->seek(initialPosition);
if (reset) {
eof = false; // assume eof is false, it will be true after a read has been attempted
diff --git a/src/corelib/io/qnoncontiguousbytedevice_p.h b/src/corelib/io/qnoncontiguousbytedevice_p.h
index c05ae11b0f..d36422e82c 100644
--- a/src/corelib/io/qnoncontiguousbytedevice_p.h
+++ b/src/corelib/io/qnoncontiguousbytedevice_p.h
@@ -62,8 +62,6 @@ public:
virtual bool advanceReadPointer(qint64 amount) = 0;
virtual bool atEnd() = 0;
virtual bool reset() = 0;
- void disableReset();
- bool isResetDisabled() { return resetDisabled; }
virtual qint64 size() = 0;
virtual ~QNonContiguousByteDevice();
@@ -72,7 +70,6 @@ protected:
QNonContiguousByteDevice();
- bool resetDisabled;
Q_SIGNALS:
void readyRead();
void readProgress(qint64 current, qint64 total);
@@ -101,11 +98,11 @@ class QNonContiguousByteDeviceByteArrayImpl : public QNonContiguousByteDevice
public:
QNonContiguousByteDeviceByteArrayImpl(QByteArray *ba);
~QNonContiguousByteDeviceByteArrayImpl();
- const char* readPointer(qint64 maximumLength, qint64 &len);
- bool advanceReadPointer(qint64 amount);
- bool atEnd();
- bool reset();
- qint64 size();
+ const char* readPointer(qint64 maximumLength, qint64 &len) Q_DECL_OVERRIDE;
+ bool advanceReadPointer(qint64 amount) Q_DECL_OVERRIDE;
+ bool atEnd() Q_DECL_OVERRIDE;
+ bool reset() Q_DECL_OVERRIDE;
+ qint64 size() Q_DECL_OVERRIDE;
protected:
QByteArray* byteArray;
qint64 currentPosition;
@@ -116,11 +113,11 @@ class QNonContiguousByteDeviceRingBufferImpl : public QNonContiguousByteDevice
public:
QNonContiguousByteDeviceRingBufferImpl(QSharedPointer<QRingBuffer> rb);
~QNonContiguousByteDeviceRingBufferImpl();
- const char* readPointer(qint64 maximumLength, qint64 &len);
- bool advanceReadPointer(qint64 amount);
- bool atEnd();
- bool reset();
- qint64 size();
+ const char* readPointer(qint64 maximumLength, qint64 &len) Q_DECL_OVERRIDE;
+ bool advanceReadPointer(qint64 amount) Q_DECL_OVERRIDE;
+ bool atEnd() Q_DECL_OVERRIDE;
+ bool reset() Q_DECL_OVERRIDE;
+ qint64 size() Q_DECL_OVERRIDE;
protected:
QSharedPointer<QRingBuffer> ringBuffer;
qint64 currentPosition;
@@ -133,11 +130,11 @@ class QNonContiguousByteDeviceIoDeviceImpl : public QNonContiguousByteDevice
public:
QNonContiguousByteDeviceIoDeviceImpl(QIODevice *d);
~QNonContiguousByteDeviceIoDeviceImpl();
- const char* readPointer(qint64 maximumLength, qint64 &len);
- bool advanceReadPointer(qint64 amount);
- bool atEnd();
- bool reset();
- qint64 size();
+ const char* readPointer(qint64 maximumLength, qint64 &len) Q_DECL_OVERRIDE;
+ bool advanceReadPointer(qint64 amount) Q_DECL_OVERRIDE;
+ bool atEnd() Q_DECL_OVERRIDE;
+ bool reset() Q_DECL_OVERRIDE;
+ qint64 size() Q_DECL_OVERRIDE;
protected:
QIODevice* device;
QByteArray* currentReadBuffer;
@@ -155,11 +152,11 @@ class QNonContiguousByteDeviceBufferImpl : public QNonContiguousByteDevice
public:
QNonContiguousByteDeviceBufferImpl(QBuffer *b);
~QNonContiguousByteDeviceBufferImpl();
- const char* readPointer(qint64 maximumLength, qint64 &len);
- bool advanceReadPointer(qint64 amount);
- bool atEnd();
- bool reset();
- qint64 size();
+ const char* readPointer(qint64 maximumLength, qint64 &len) Q_DECL_OVERRIDE;
+ bool advanceReadPointer(qint64 amount) Q_DECL_OVERRIDE;
+ bool atEnd() Q_DECL_OVERRIDE;
+ bool reset() Q_DECL_OVERRIDE;
+ qint64 size() Q_DECL_OVERRIDE;
protected:
QBuffer* buffer;
QByteArray byteArray;
@@ -172,13 +169,13 @@ class QByteDeviceWrappingIoDevice : public QIODevice
public:
QByteDeviceWrappingIoDevice (QNonContiguousByteDevice *bd);
~QByteDeviceWrappingIoDevice ();
- virtual bool isSequential () const;
- virtual bool atEnd () const;
- virtual bool reset ();
- virtual qint64 size () const;
+ virtual bool isSequential () const Q_DECL_OVERRIDE;
+ virtual bool atEnd () const Q_DECL_OVERRIDE;
+ virtual bool reset () Q_DECL_OVERRIDE;
+ virtual qint64 size () const Q_DECL_OVERRIDE;
protected:
- virtual qint64 readData ( char * data, qint64 maxSize );
- virtual qint64 writeData ( const char * data, qint64 maxSize );
+ virtual qint64 readData ( char * data, qint64 maxSize ) Q_DECL_OVERRIDE;
+ virtual qint64 writeData ( const char * data, qint64 maxSize ) Q_DECL_OVERRIDE;
QNonContiguousByteDevice *byteDevice;
};
diff --git a/src/corelib/io/qprocess.h b/src/corelib/io/qprocess.h
index 8d90177c8b..af3db4ecf6 100644
--- a/src/corelib/io/qprocess.h
+++ b/src/corelib/io/qprocess.h
@@ -182,8 +182,8 @@ public:
qint64 processId() const;
bool waitForStarted(int msecs = 30000);
- bool waitForReadyRead(int msecs = 30000);
- bool waitForBytesWritten(int msecs = 30000);
+ bool waitForReadyRead(int msecs = 30000) Q_DECL_OVERRIDE;
+ bool waitForBytesWritten(int msecs = 30000) Q_DECL_OVERRIDE;
bool waitForFinished(int msecs = 30000);
QByteArray readAllStandardOutput();
@@ -193,12 +193,12 @@ public:
QProcess::ExitStatus exitStatus() const;
// QIODevice
- qint64 bytesAvailable() const;
- qint64 bytesToWrite() const;
- bool isSequential() const;
- bool canReadLine() const;
- void close();
- bool atEnd() const;
+ qint64 bytesAvailable() const Q_DECL_OVERRIDE;
+ qint64 bytesToWrite() const Q_DECL_OVERRIDE;
+ bool isSequential() const Q_DECL_OVERRIDE;
+ bool canReadLine() const Q_DECL_OVERRIDE;
+ void close() Q_DECL_OVERRIDE;
+ bool atEnd() const Q_DECL_OVERRIDE;
static int execute(const QString &program, const QStringList &arguments);
static int execute(const QString &command);
@@ -254,8 +254,8 @@ protected:
virtual void setupChildProcess();
// QIODevice
- qint64 readData(char *data, qint64 maxlen);
- qint64 writeData(const char *data, qint64 len);
+ qint64 readData(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
+ qint64 writeData(const char *data, qint64 len) Q_DECL_OVERRIDE;
private:
Q_DECLARE_PRIVATE(QProcess)
diff --git a/src/corelib/io/qprocess_p.h b/src/corelib/io/qprocess_p.h
index 35626ddc38..8c5987aa05 100644
--- a/src/corelib/io/qprocess_p.h
+++ b/src/corelib/io/qprocess_p.h
@@ -98,7 +98,7 @@ public:
QByteArray key;
uint hash;
};
-inline uint qHash(const QProcEnvKey &key) { return key.hash; }
+inline uint qHash(const QProcEnvKey &key) Q_DECL_NOTHROW { return key.hash; }
class QProcEnvValue
{
diff --git a/src/corelib/io/qprocess_unix.cpp b/src/corelib/io/qprocess_unix.cpp
index cc154cfbc5..cfee5f1d46 100644
--- a/src/corelib/io/qprocess_unix.cpp
+++ b/src/corelib/io/qprocess_unix.cpp
@@ -165,7 +165,7 @@ public:
QProcessManager();
~QProcessManager();
- void run();
+ void run() Q_DECL_OVERRIDE;
void catchDeadChildren();
void add(pid_t pid, QProcess *process);
void remove(QProcess *process);
diff --git a/src/corelib/io/qresource.cpp b/src/corelib/io/qresource.cpp
index ed6bfb4e0d..d9b51cd288 100644
--- a/src/corelib/io/qresource.cpp
+++ b/src/corelib/io/qresource.cpp
@@ -873,10 +873,16 @@ public:
inline QDynamicBufferResourceRoot(const QString &_root) : root(_root), buffer(0) { }
inline ~QDynamicBufferResourceRoot() { }
inline const uchar *mappingBuffer() const { return buffer; }
- virtual QString mappingRoot() const { return root; }
- virtual ResourceRootType type() const { return Resource_Buffer; }
+ virtual QString mappingRoot() const Q_DECL_OVERRIDE { return root; }
+ virtual ResourceRootType type() const Q_DECL_OVERRIDE { return Resource_Buffer; }
+
+ // size == -1 means "unknown"
+ bool registerSelf(const uchar *b, int size)
+ {
+ // 5 int "pointers"
+ if (size >= 0 && size < 20)
+ return false;
- bool registerSelf(const uchar *b) {
//setup the data now
int offset = 0;
@@ -903,6 +909,10 @@ public:
(b[offset+2] << 8) + (b[offset+3] << 0);
offset += 4;
+ // Some sanity checking for sizes. This is _not_ a security measure.
+ if (size >= 0 && (tree_offset >= size || data_offset >= size || name_offset >= size))
+ return false;
+
if(version == 0x01) {
buffer = b;
setSource(b+tree_offset, b+name_offset, b+data_offset);
@@ -950,7 +960,7 @@ public:
}
}
QString mappingFile() const { return fileName; }
- virtual ResourceRootType type() const { return Resource_File; }
+ virtual ResourceRootType type() const Q_DECL_OVERRIDE { return Resource_File; }
bool registerSelf(const QString &f) {
bool fromMM = false;
@@ -1009,7 +1019,7 @@ public:
}
fromMM = false;
}
- if(data && QDynamicBufferResourceRoot::registerSelf(data)) {
+ if (data && QDynamicBufferResourceRoot::registerSelf(data, data_len)) {
if(fromMM) {
unmapPointer = data;
unmapLength = data_len;
@@ -1124,7 +1134,7 @@ QResource::registerResource(const uchar *rccData, const QString &resourceRoot)
}
QDynamicBufferResourceRoot *root = new QDynamicBufferResourceRoot(r);
- if(root->registerSelf(rccData)) {
+ if (root->registerSelf(rccData, -1)) {
root->ref.ref();
QMutexLocker lock(resourceMutex());
resourceList()->append(root);
diff --git a/src/corelib/io/qresource_iterator_p.h b/src/corelib/io/qresource_iterator_p.h
index 451773ec63..dce298fb44 100644
--- a/src/corelib/io/qresource_iterator_p.h
+++ b/src/corelib/io/qresource_iterator_p.h
@@ -57,10 +57,10 @@ public:
QResourceFileEngineIterator(QDir::Filters filters, const QStringList &filterNames);
~QResourceFileEngineIterator();
- QString next();
- bool hasNext() const;
+ QString next() Q_DECL_OVERRIDE;
+ bool hasNext() const Q_DECL_OVERRIDE;
- QString currentFileName() const;
+ QString currentFileName() const Q_DECL_OVERRIDE;
private:
mutable QStringList entries;
diff --git a/src/corelib/io/qresource_p.h b/src/corelib/io/qresource_p.h
index 030d1587e5..11b2836215 100644
--- a/src/corelib/io/qresource_p.h
+++ b/src/corelib/io/qresource_p.h
@@ -58,52 +58,52 @@ public:
explicit QResourceFileEngine(const QString &path);
~QResourceFileEngine();
- virtual void setFileName(const QString &file);
+ virtual void setFileName(const QString &file) Q_DECL_OVERRIDE;
- virtual bool open(QIODevice::OpenMode flags) ;
- virtual bool close();
- virtual bool flush();
- virtual qint64 size() const;
- virtual qint64 pos() const;
+ virtual bool open(QIODevice::OpenMode flags) Q_DECL_OVERRIDE ;
+ virtual bool close() Q_DECL_OVERRIDE;
+ virtual bool flush() Q_DECL_OVERRIDE;
+ virtual qint64 size() const Q_DECL_OVERRIDE;
+ virtual qint64 pos() const Q_DECL_OVERRIDE;
virtual bool atEnd() const;
- virtual bool seek(qint64);
- virtual qint64 read(char *data, qint64 maxlen);
- virtual qint64 write(const char *data, qint64 len);
+ virtual bool seek(qint64) Q_DECL_OVERRIDE;
+ virtual qint64 read(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
+ virtual qint64 write(const char *data, qint64 len) Q_DECL_OVERRIDE;
- virtual bool remove();
- virtual bool copy(const QString &newName);
- virtual bool rename(const QString &newName);
- virtual bool link(const QString &newName);
+ virtual bool remove() Q_DECL_OVERRIDE;
+ virtual bool copy(const QString &newName) Q_DECL_OVERRIDE;
+ virtual bool rename(const QString &newName) Q_DECL_OVERRIDE;
+ virtual bool link(const QString &newName) Q_DECL_OVERRIDE;
- virtual bool isSequential() const;
+ virtual bool isSequential() const Q_DECL_OVERRIDE;
- virtual bool isRelativePath() const;
+ virtual bool isRelativePath() const Q_DECL_OVERRIDE;
- virtual bool mkdir(const QString &dirName, bool createParentDirectories) const;
- virtual bool rmdir(const QString &dirName, bool recurseParentDirectories) const;
+ virtual bool mkdir(const QString &dirName, bool createParentDirectories) const Q_DECL_OVERRIDE;
+ virtual bool rmdir(const QString &dirName, bool recurseParentDirectories) const Q_DECL_OVERRIDE;
- virtual bool setSize(qint64 size);
+ virtual bool setSize(qint64 size) Q_DECL_OVERRIDE;
- virtual QStringList entryList(QDir::Filters filters, const QStringList &filterNames) const;
+ virtual QStringList entryList(QDir::Filters filters, const QStringList &filterNames) const Q_DECL_OVERRIDE;
- virtual bool caseSensitive() const;
+ virtual bool caseSensitive() const Q_DECL_OVERRIDE;
- virtual FileFlags fileFlags(FileFlags type) const;
+ virtual FileFlags fileFlags(FileFlags type) const Q_DECL_OVERRIDE;
- virtual bool setPermissions(uint perms);
+ virtual bool setPermissions(uint perms) Q_DECL_OVERRIDE;
- virtual QString fileName(QAbstractFileEngine::FileName file) const;
+ virtual QString fileName(QAbstractFileEngine::FileName file) const Q_DECL_OVERRIDE;
- virtual uint ownerId(FileOwner) const;
- virtual QString owner(FileOwner) const;
+ virtual uint ownerId(FileOwner) const Q_DECL_OVERRIDE;
+ virtual QString owner(FileOwner) const Q_DECL_OVERRIDE;
- virtual QDateTime fileTime(FileTime time) const;
+ virtual QDateTime fileTime(FileTime time) const Q_DECL_OVERRIDE;
- virtual Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames);
- virtual Iterator *endEntryList();
+ virtual Iterator *beginEntryList(QDir::Filters filters, const QStringList &filterNames) Q_DECL_OVERRIDE;
+ virtual Iterator *endEntryList() Q_DECL_OVERRIDE;
- bool extension(Extension extension, const ExtensionOption *option = 0, ExtensionReturn *output = 0);
- bool supportsExtension(Extension extension) const;
+ bool extension(Extension extension, const ExtensionOption *option = 0, ExtensionReturn *output = 0) Q_DECL_OVERRIDE;
+ bool supportsExtension(Extension extension) const Q_DECL_OVERRIDE;
};
QT_END_NAMESPACE
diff --git a/src/corelib/io/qsettings.h b/src/corelib/io/qsettings.h
index 4986c06896..1ce2865c63 100644
--- a/src/corelib/io/qsettings.h
+++ b/src/corelib/io/qsettings.h
@@ -177,7 +177,7 @@ public:
protected:
#ifndef QT_NO_QOBJECT
- bool event(QEvent *event);
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
#endif
private:
diff --git a/src/corelib/io/qsettings_p.h b/src/corelib/io/qsettings_p.h
index 715f13530a..0525fab77a 100644
--- a/src/corelib/io/qsettings_p.h
+++ b/src/corelib/io/qsettings_p.h
@@ -270,17 +270,17 @@ public:
QConfFileSettingsPrivate(const QString &fileName, QSettings::Format format);
~QConfFileSettingsPrivate();
- void remove(const QString &key);
- void set(const QString &key, const QVariant &value);
- bool get(const QString &key, QVariant *value) const;
+ void remove(const QString &key) Q_DECL_OVERRIDE;
+ void set(const QString &key, const QVariant &value) Q_DECL_OVERRIDE;
+ bool get(const QString &key, QVariant *value) const Q_DECL_OVERRIDE;
- QStringList children(const QString &prefix, ChildSpec spec) const;
+ QStringList children(const QString &prefix, ChildSpec spec) const Q_DECL_OVERRIDE;
- void clear();
- void sync();
- void flush();
- bool isWritable() const;
- QString fileName() const;
+ void clear() Q_DECL_OVERRIDE;
+ void sync() Q_DECL_OVERRIDE;
+ void flush() Q_DECL_OVERRIDE;
+ bool isWritable() const Q_DECL_OVERRIDE;
+ QString fileName() const Q_DECL_OVERRIDE;
bool readIniFile(const QByteArray &data, UnparsedSettingsMap *unparsedIniSections);
static bool readIniSection(const QSettingsKey &section, const QByteArray &data,
diff --git a/src/corelib/io/qstandardpaths.cpp b/src/corelib/io/qstandardpaths.cpp
index b41aee55d2..2e16c6d1ae 100644
--- a/src/corelib/io/qstandardpaths.cpp
+++ b/src/corelib/io/qstandardpaths.cpp
@@ -142,6 +142,10 @@ QT_BEGIN_NAMESPACE
\value AppLocalDataLocation Returns the local settings path on the Windows operating
system. On all other platforms, it returns the same value as AppDataLocation.
This enum value was added in Qt 5.4.
+ \value AppConfigLocation Returns a directory location where user-specific
+ configuration files should be written. This is an application-specific directory,
+ and the returned path is never empty.
+ This enum value was added in Qt 5.5.
The following table gives examples of paths on different operating systems.
The first path is the writable path (unless noted). Other, additional
@@ -206,6 +210,9 @@ QT_BEGIN_NAMESPACE
\row \li AppLocalDataLocation
\li "~/Library/Application Support/<APPNAME>", "/Library/Application Support/<APPNAME>". "<APPDIR>/../Resources"
\li "C:/Users/<USER>/AppData/Local/<APPNAME>", "C:/ProgramData/<APPNAME>", "<APPDIR>", "<APPDIR>/data"
+ \row \li AppConfigLocation
+ \li "~/Library/Preferences/<APPNAME>"
+ \li "C:/Users/<USER>/AppData/Local/<APPNAME>", "C:/ProgramData/<APPNAME>"
\endtable
\table
@@ -267,6 +274,9 @@ QT_BEGIN_NAMESPACE
\row \li AppLocalDataLocation
\li "<APPROOT>/data", "<APPROOT>/app/native/assets"
\li "~/.local/share/<APPNAME>", "/usr/local/share/<APPNAME>", "/usr/share/<APPNAME>"
+ \row \li AppConfigLocation
+ \li "<APPROOT>/data/Settings"
+ \li "~/.config/<APPNAME>", "/etc/xdg/<APPNAME>"
\endtable
\table
@@ -307,6 +317,8 @@ QT_BEGIN_NAMESPACE
\li "<APPROOT>/cache" (there is no shared cache)
\row \li AppDataLocation
\li "<APPROOT>/files", "<USER>/<APPNAME>/files"
+ \row \li AppConfigLocation
+ \li "<APPROOT>/files/settings"
\endtable
In the table above, \c <APPNAME> is usually the organization name, the
@@ -565,6 +577,8 @@ QString QStandardPaths::displayName(StandardLocation type)
case AppDataLocation:
case AppLocalDataLocation:
return QCoreApplication::translate("QStandardPaths", "Application Data");
+ case AppConfigLocation:
+ return QCoreApplication::translate("QStandardPaths", "Application Configuration");
}
// not reached
return QString();
@@ -585,7 +599,7 @@ QString QStandardPaths::displayName(StandardLocation type)
This affects the locations into which test programs might write files:
GenericDataLocation, DataLocation, ConfigLocation, GenericConfigLocation,
- GenericCacheLocation, CacheLocation.
+ AppConfigLocation, GenericCacheLocation, CacheLocation.
Other locations are not affected.
On Unix, \c XDG_DATA_HOME is set to \e ~/.qttest/share, \c XDG_CONFIG_HOME is
diff --git a/src/corelib/io/qstandardpaths.h b/src/corelib/io/qstandardpaths.h
index e305450240..60e53fe117 100644
--- a/src/corelib/io/qstandardpaths.h
+++ b/src/corelib/io/qstandardpaths.h
@@ -64,6 +64,7 @@ public:
GenericCacheLocation,
GenericConfigLocation,
AppDataLocation,
+ AppConfigLocation,
AppLocalDataLocation = DataLocation
};
diff --git a/src/corelib/io/qstandardpaths_android.cpp b/src/corelib/io/qstandardpaths_android.cpp
index 958b4ea486..b887e107e7 100644
--- a/src/corelib/io/qstandardpaths_android.cpp
+++ b/src/corelib/io/qstandardpaths_android.cpp
@@ -233,6 +233,7 @@ QString QStandardPaths::writableLocation(StandardLocation type)
return getExternalStoragePublicDirectory("DIRECTORY_DOWNLOADS");
case QStandardPaths::GenericConfigLocation:
case QStandardPaths::ConfigLocation:
+ case QStandardPaths::AppConfigLocation:
return getFilesDir() + testDir() + QLatin1String("/settings");
case QStandardPaths::GenericDataLocation:
return getExternalStorageDirectory() + testDir();
diff --git a/src/corelib/io/qstandardpaths_blackberry.cpp b/src/corelib/io/qstandardpaths_blackberry.cpp
index 02d7c110ae..473da7542c 100644
--- a/src/corelib/io/qstandardpaths_blackberry.cpp
+++ b/src/corelib/io/qstandardpaths_blackberry.cpp
@@ -69,6 +69,7 @@ QString QStandardPaths::writableLocation(StandardLocation type)
return QDir::homePath() + testModeInsert() + QLatin1String("/Cache");
case ConfigLocation:
case GenericConfigLocation:
+ case AppConfigLocation:
return QDir::homePath() + testModeInsert() + QLatin1String("/Settings");
case GenericDataLocation:
return sharedRoot + testModeInsert() + QLatin1String("/misc");
diff --git a/src/corelib/io/qstandardpaths_ios.mm b/src/corelib/io/qstandardpaths_ios.mm
index 9b500f4623..449c66fe0c 100644
--- a/src/corelib/io/qstandardpaths_ios.mm
+++ b/src/corelib/io/qstandardpaths_ios.mm
@@ -103,6 +103,7 @@ QString QStandardPaths::writableLocation(StandardLocation type)
break;
case ConfigLocation:
case GenericConfigLocation:
+ case AppConfigLocation:
location = pathForDirectory(NSDocumentDirectory);
break;
case DownloadLocation:
diff --git a/src/corelib/io/qstandardpaths_mac.mm b/src/corelib/io/qstandardpaths_mac.mm
index 13b864600e..9d5d6de6ad 100644
--- a/src/corelib/io/qstandardpaths_mac.mm
+++ b/src/corelib/io/qstandardpaths_mac.mm
@@ -53,6 +53,7 @@ OSType translateLocation(QStandardPaths::StandardLocation type)
switch (type) {
case QStandardPaths::ConfigLocation:
case QStandardPaths::GenericConfigLocation:
+ case QStandardPaths::AppConfigLocation:
return kPreferencesFolderType;
case QStandardPaths::DesktopLocation:
return kDesktopFolderType;
@@ -129,7 +130,8 @@ static QString macLocation(QStandardPaths::StandardLocation type, short domain)
QString path = getFullPath(ref);
- if (type == QStandardPaths::AppDataLocation || type == QStandardPaths::AppLocalDataLocation || type == QStandardPaths::CacheLocation)
+ if (type == QStandardPaths::AppDataLocation || type == QStandardPaths::AppLocalDataLocation ||
+ type == QStandardPaths::CacheLocation || type == QStandardPaths::AppConfigLocation)
appendOrganizationAndApp(path);
return path;
}
@@ -155,7 +157,11 @@ QString QStandardPaths::writableLocation(StandardLocation type)
return path;
case GenericConfigLocation:
case ConfigLocation:
- return qttestDir + QLatin1String("/Preferences");
+ case AppConfigLocation:
+ path = qttestDir + QLatin1String("/Preferences");
+ if (type == AppConfigLocation)
+ appendOrganizationAndApp(path);
+ return path;
default:
break;
}
diff --git a/src/corelib/io/qstandardpaths_unix.cpp b/src/corelib/io/qstandardpaths_unix.cpp
index 2ad6dfa121..94dcbaff9a 100644
--- a/src/corelib/io/qstandardpaths_unix.cpp
+++ b/src/corelib/io/qstandardpaths_unix.cpp
@@ -97,6 +97,7 @@ QString QStandardPaths::writableLocation(StandardLocation type)
}
case ConfigLocation:
case GenericConfigLocation:
+ case AppConfigLocation:
{
// http://standards.freedesktop.org/basedir-spec/latest/
QString xdgConfigHome = QFile::decodeName(qgetenv("XDG_CONFIG_HOME"));
@@ -104,6 +105,8 @@ QString QStandardPaths::writableLocation(StandardLocation type)
xdgConfigHome = QDir::homePath() + QLatin1String("/.qttest/config");
if (xdgConfigHome.isEmpty())
xdgConfigHome = QDir::homePath() + QLatin1String("/.config");
+ if (type == AppConfigLocation)
+ appendOrganizationAndApp(xdgConfigHome);
return xdgConfigHome;
}
case RuntimeLocation:
@@ -278,21 +281,31 @@ static QStringList xdgDataDirs()
return dirs;
}
+static QStringList xdgConfigDirs()
+{
+ QStringList dirs;
+ // http://standards.freedesktop.org/basedir-spec/latest/
+ const QString xdgConfigDirs = QFile::decodeName(qgetenv("XDG_CONFIG_DIRS"));
+ if (xdgConfigDirs.isEmpty())
+ dirs.append(QString::fromLatin1("/etc/xdg"));
+ else
+ dirs = xdgConfigDirs.split(QLatin1Char(':'));
+ return dirs;
+}
+
QStringList QStandardPaths::standardLocations(StandardLocation type)
{
QStringList dirs;
switch (type) {
case ConfigLocation:
case GenericConfigLocation:
- {
- // http://standards.freedesktop.org/basedir-spec/latest/
- const QString xdgConfigDirs = QFile::decodeName(qgetenv("XDG_CONFIG_DIRS"));
- if (xdgConfigDirs.isEmpty())
- dirs.append(QString::fromLatin1("/etc/xdg"));
- else
- dirs = xdgConfigDirs.split(QLatin1Char(':'));
- }
- break;
+ dirs = xdgConfigDirs();
+ break;
+ case AppConfigLocation:
+ dirs = xdgConfigDirs();
+ for (int i = 0; i < dirs.count(); ++i)
+ appendOrganizationAndApp(dirs[i]);
+ break;
case GenericDataLocation:
dirs = xdgDataDirs();
break;
diff --git a/src/corelib/io/qstandardpaths_win.cpp b/src/corelib/io/qstandardpaths_win.cpp
index 5e56db3797..8fe4be0d5c 100644
--- a/src/corelib/io/qstandardpaths_win.cpp
+++ b/src/corelib/io/qstandardpaths_win.cpp
@@ -98,6 +98,7 @@ QString QStandardPaths::writableLocation(StandardLocation type)
switch (type) {
case ConfigLocation: // same as AppLocalDataLocation, on Windows
case GenericConfigLocation: // same as GenericDataLocation on Windows
+ case AppConfigLocation:
case AppDataLocation:
case AppLocalDataLocation:
case GenericDataLocation:
@@ -195,6 +196,7 @@ QStringList QStandardPaths::standardLocations(StandardLocation type)
switch (type) {
case ConfigLocation: // same as AppLocalDataLocation, on Windows (oversight, but too late to fix it)
case GenericConfigLocation: // same as GenericDataLocation, on Windows
+ case AppConfigLocation: // same as AppLocalDataLocation, that one on purpose
case AppDataLocation:
case AppLocalDataLocation:
case GenericDataLocation:
diff --git a/src/corelib/io/qstandardpaths_winrt.cpp b/src/corelib/io/qstandardpaths_winrt.cpp
index 5c09b4814d..6aa31bf296 100644
--- a/src/corelib/io/qstandardpaths_winrt.cpp
+++ b/src/corelib/io/qstandardpaths_winrt.cpp
@@ -67,6 +67,7 @@ QString QStandardPaths::writableLocation(StandardLocation type)
switch (type) {
case ConfigLocation: // same as AppLocalDataLocation, on Windows
case GenericConfigLocation: // same as GenericDataLocation, on Windows
+ case AppConfigLocation:
case AppDataLocation:
case AppLocalDataLocation:
case GenericDataLocation: {
diff --git a/src/corelib/io/qstorageinfo_p.h b/src/corelib/io/qstorageinfo_p.h
index 9c8e51f475..dea25d440d 100644
--- a/src/corelib/io/qstorageinfo_p.h
+++ b/src/corelib/io/qstorageinfo_p.h
@@ -73,14 +73,14 @@ public:
protected:
#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT)
- void retreiveVolumeInfo();
- void retreiveDiskFreeSpace();
+ void retrieveVolumeInfo();
+ void retrieveDiskFreeSpace();
#elif defined(Q_OS_MAC)
void retrievePosixInfo();
void retrieveUrlProperties(bool initRootPath = false);
void retrieveLabel();
#elif defined(Q_OS_UNIX)
- void retreiveVolumeInfo();
+ void retrieveVolumeInfo();
#endif
public:
diff --git a/src/corelib/io/qstorageinfo_unix.cpp b/src/corelib/io/qstorageinfo_unix.cpp
index 857464f578..83d94bfe06 100644
--- a/src/corelib/io/qstorageinfo_unix.cpp
+++ b/src/corelib/io/qstorageinfo_unix.cpp
@@ -75,6 +75,9 @@
# if !defined(ST_RDONLY)
# define ST_RDONLY 1 // hack for missing define on Android
# endif
+#elif defined(Q_OS_HAIKU)
+# define QT_STATFSBUF struct statvfs
+# define QT_STATFS ::statvfs
#else
# if defined(QT_LARGEFILE_SUPPORT)
# define QT_STATFSBUF struct statvfs64
@@ -402,11 +405,11 @@ void QStorageInfoPrivate::doStat()
if (rootPath.isEmpty())
return;
- retreiveVolumeInfo();
+ retrieveVolumeInfo();
name = retrieveLabel(device);
}
-void QStorageInfoPrivate::retreiveVolumeInfo()
+void QStorageInfoPrivate::retrieveVolumeInfo()
{
QT_STATFSBUF statfs_buf;
int result;
diff --git a/src/corelib/io/qstorageinfo_win.cpp b/src/corelib/io/qstorageinfo_win.cpp
index 8c276b2798..51a268f58c 100644
--- a/src/corelib/io/qstorageinfo_win.cpp
+++ b/src/corelib/io/qstorageinfo_win.cpp
@@ -114,12 +114,12 @@ void QStorageInfoPrivate::doStat()
if (rootPath.isEmpty())
return;
- retreiveVolumeInfo();
+ retrieveVolumeInfo();
device = getDevice(rootPath);
- retreiveDiskFreeSpace();
+ retrieveDiskFreeSpace();
}
-void QStorageInfoPrivate::retreiveVolumeInfo()
+void QStorageInfoPrivate::retrieveVolumeInfo()
{
const UINT oldmode = ::SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX);
@@ -151,7 +151,7 @@ void QStorageInfoPrivate::retreiveVolumeInfo()
::SetErrorMode(oldmode);
}
-void QStorageInfoPrivate::retreiveDiskFreeSpace()
+void QStorageInfoPrivate::retrieveDiskFreeSpace()
{
const UINT oldmode = ::SetErrorMode(SEM_FAILCRITICALERRORS | SEM_NOOPENFILEERRORBOX);
diff --git a/src/corelib/io/qtemporaryfile.cpp b/src/corelib/io/qtemporaryfile.cpp
index 4a9aafcf0b..c96d0504f4 100644
--- a/src/corelib/io/qtemporaryfile.cpp
+++ b/src/corelib/io/qtemporaryfile.cpp
@@ -222,6 +222,7 @@ static bool createFileFromTemplate(NativeFileHandle &file,
}
Q_ASSERT(false);
+ return false;
}
//************* QTemporaryFileEngine
diff --git a/src/corelib/io/qtemporaryfile.h b/src/corelib/io/qtemporaryfile.h
index 908cc231af..f21f87fd21 100644
--- a/src/corelib/io/qtemporaryfile.h
+++ b/src/corelib/io/qtemporaryfile.h
@@ -71,7 +71,7 @@ public:
// ### Hides open(flags)
bool open() { return open(QIODevice::ReadWrite); }
- QString fileName() const;
+ QString fileName() const Q_DECL_OVERRIDE;
QString fileTemplate() const;
void setFileTemplate(const QString &name);
#if QT_DEPRECATED_SINCE(5,1)
@@ -85,7 +85,7 @@ public:
static QTemporaryFile *createNativeFile(QFile &file);
protected:
- bool open(OpenMode flags);
+ bool open(OpenMode flags) Q_DECL_OVERRIDE;
private:
friend class QFile;
diff --git a/src/corelib/io/qtextstream.cpp b/src/corelib/io/qtextstream.cpp
index 089a915a36..771067fa14 100644
--- a/src/corelib/io/qtextstream.cpp
+++ b/src/corelib/io/qtextstream.cpp
@@ -681,15 +681,9 @@ bool QTextStreamPrivate::scan(const QChar **ptr, int *length, int maxlen, TokenD
&& (!maxlen || totalSize < maxlen)
&& (device && (canStillReadFromDevice = fillReadBuffer())));
- // if the token was not found, but we reached the end of input,
- // then we accept what we got. if we are not at the end of input,
- // we return false.
- if (!foundToken && (!maxlen || totalSize < maxlen)
- && (totalSize == 0
- || (string && stringOffset + totalSize < string->size())
- || (device && !device->atEnd() && canStillReadFromDevice))) {
+ if (totalSize == 0) {
#if defined (QTEXTSTREAM_DEBUG)
- qDebug("QTextStreamPrivate::scan() did not find the token.");
+ qDebug("QTextStreamPrivate::scan() reached the end of input.");
#endif
return false;
}
@@ -812,13 +806,28 @@ inline void QTextStreamPrivate::restoreToSavedConverterState()
/*!
\internal
*/
-inline void QTextStreamPrivate::write(const QString &data)
+void QTextStreamPrivate::write(const QChar *data, int len)
{
if (string) {
// ### What about seek()??
- string->append(data);
+ string->append(data, len);
} else {
- writeBuffer += data;
+ writeBuffer.append(data, len);
+ if (writeBuffer.size() > QTEXTSTREAM_BUFFERSIZE)
+ flushWriteBuffer();
+ }
+}
+
+/*!
+ \internal
+*/
+inline void QTextStreamPrivate::write(QChar ch)
+{
+ if (string) {
+ // ### What about seek()??
+ string->append(ch);
+ } else {
+ writeBuffer += ch;
if (writeBuffer.size() > QTEXTSTREAM_BUFFERSIZE)
flushWriteBuffer();
}
@@ -865,45 +874,53 @@ inline void QTextStreamPrivate::ungetChar(QChar ch)
/*!
\internal
*/
-inline void QTextStreamPrivate::putString(const QString &s, bool number)
+inline void QTextStreamPrivate::putChar(QChar ch)
+{
+ if (params.fieldWidth > 0)
+ putString(&ch, 1);
+ else
+ write(ch);
+}
+
+/*!
+ \internal
+*/
+void QTextStreamPrivate::putString(const QChar *data, int len, bool number)
{
- QString tmp = s;
+ QString pad;
+ int padLeft = 0, padRight = 0;
// handle padding
- int padSize = params.fieldWidth - s.size();
+ int padSize = params.fieldWidth - len;
if (padSize > 0) {
- QString pad(padSize, params.padChar);
+ pad = QString(padSize, params.padChar);
switch (params.fieldAlignment) {
case QTextStream::AlignLeft:
- tmp.append(pad);
+ padRight = padSize;
break;
case QTextStream::AlignRight:
case QTextStream::AlignAccountingStyle:
- tmp.prepend(pad);
+ padLeft = padSize;
if (params.fieldAlignment == QTextStream::AlignAccountingStyle && number) {
- const QChar sign = s.size() > 0 ? s.at(0) : QChar();
+ const QChar sign = len > 0 ? data[0] : QChar();
if (sign == locale.negativeSign() || sign == locale.positiveSign()) {
- QChar *data = tmp.data();
- data[padSize] = tmp.at(0);
- data[0] = sign;
+ // write the sign before the padding, then skip it later
+ write(&sign, 1);
+ ++data;
+ --len;
}
- }
+ }
break;
case QTextStream::AlignCenter:
- tmp.prepend(QString(padSize/2, params.padChar));
- tmp.append(QString(padSize - padSize/2, params.padChar));
+ padLeft = padSize/2;
+ padRight = padSize - padSize/2;
break;
}
}
-#if defined (QTEXTSTREAM_DEBUG)
- QByteArray a = s.toUtf8();
- QByteArray b = tmp.toUtf8();
- qDebug("QTextStreamPrivate::putString(\"%s\") calls write(\"%s\")",
- qt_prettyDebug(a.constData(), a.size(), qMax(16, a.size())).constData(),
- qt_prettyDebug(b.constData(), b.size(), qMax(16, b.size())).constData());
-#endif
- write(tmp);
+ write(pad.constData(), padLeft);
+ write(data, len);
+ write(pad.constData(), padRight);
}
/*!
@@ -2232,7 +2249,7 @@ QTextStream &QTextStream::operator<<(QChar c)
{
Q_D(QTextStream);
CHECK_VALID_STREAM(*this);
- d->putString(QString(c));
+ d->putChar(c);
return *this;
}
@@ -2245,7 +2262,7 @@ QTextStream &QTextStream::operator<<(char c)
{
Q_D(QTextStream);
CHECK_VALID_STREAM(*this);
- d->putString(QString(QChar::fromLatin1(c)));
+ d->putChar(QChar::fromLatin1(c));
return *this;
}
diff --git a/src/corelib/io/qtextstream.h b/src/corelib/io/qtextstream.h
index 5c75a006af..b15e7772e2 100644
--- a/src/corelib/io/qtextstream.h
+++ b/src/corelib/io/qtextstream.h
@@ -185,6 +185,7 @@ public:
private:
Q_DISABLE_COPY(QTextStream)
friend class QDebugStateSaverPrivate;
+ friend class QDebug;
QScopedPointer<QTextStreamPrivate> d_ptr;
};
diff --git a/src/corelib/io/qtextstream_p.h b/src/corelib/io/qtextstream_p.h
index 5f99f44cc2..f8c151b76c 100644
--- a/src/corelib/io/qtextstream_p.h
+++ b/src/corelib/io/qtextstream_p.h
@@ -165,8 +165,12 @@ public:
NumberParsingStatus getNumber(qulonglong *l);
bool getReal(double *f);
- inline void write(const QString &data);
- inline void putString(const QString &ch, bool number = false);
+ inline void write(const QString &data) { write(data.begin(), data.length()); }
+ inline void write(QChar ch);
+ void write(const QChar *data, int len);
+ inline void putString(const QString &ch, bool number = false) { putString(ch.constData(), ch.length(), number); }
+ void putString(const QChar *data, int len, bool number = false);
+ inline void putChar(QChar ch);
void putNumber(qulonglong number, bool negative);
// buffers
diff --git a/src/corelib/io/qtldurl.cpp b/src/corelib/io/qtldurl.cpp
index d0205c3be5..7ccab8abb1 100644
--- a/src/corelib/io/qtldurl.cpp
+++ b/src/corelib/io/qtldurl.cpp
@@ -48,7 +48,7 @@ static bool containsTLDEntry(const QString &entry)
// select the right chunk from the big table
short chunk = 0;
uint chunkIndex = tldIndices[index], offset = 0;
- while (tldIndices[index] >= tldChunks[chunk] && chunk < tldChunkCount) {
+ while (chunk < tldChunkCount && tldIndices[index] >= tldChunks[chunk]) {
chunkIndex -= tldChunks[chunk];
offset += tldChunks[chunk];
chunk++;
diff --git a/src/corelib/io/qurl.h b/src/corelib/io/qurl.h
index abf96f5fcd..a1f62925e2 100644
--- a/src/corelib/io/qurl.h
+++ b/src/corelib/io/qurl.h
@@ -173,14 +173,14 @@ public:
QUrl &operator=(const QString &url);
#endif
#ifdef Q_COMPILER_RVALUE_REFS
- QUrl(QUrl &&other) : d(0)
- { qSwap(d, other.d); }
- inline QUrl &operator=(QUrl &&other)
+ QUrl(QUrl &&other) Q_DECL_NOTHROW : d(other.d)
+ { other.d = Q_NULLPTR; }
+ inline QUrl &operator=(QUrl &&other) Q_DECL_NOTHROW
{ qSwap(d, other.d); return *this; }
#endif
~QUrl();
- inline void swap(QUrl &other) { qSwap(d, other.d); }
+ inline void swap(QUrl &other) Q_DECL_NOTHROW { qSwap(d, other.d); }
void setUrl(const QString &url, ParsingMode mode = TolerantMode);
QString url(FormattingOptions options = FormattingOptions(PrettyDecoded)) const;
diff --git a/src/corelib/io/qurlrecode.cpp b/src/corelib/io/qurlrecode.cpp
index 9aad2a12bd..4cf471a248 100644
--- a/src/corelib/io/qurlrecode.cpp
+++ b/src/corelib/io/qurlrecode.cpp
@@ -33,6 +33,7 @@
#include "qurl.h"
#include "private/qutfcodec_p.h"
+#include "private/qtools_p.h"
QT_BEGIN_NAMESPACE
@@ -197,8 +198,7 @@ static inline ushort decodePercentEncoding(const ushort *input)
static inline ushort encodeNibble(ushort c)
{
- static const uchar hexnumbers[] = "0123456789ABCDEF";
- return hexnumbers[c & 0xf];
+ return ushort(QtMiscUtils::toHexUpper(c));
}
static void ensureDetached(QString &result, ushort *&output, const ushort *begin, const ushort *input, const ushort *end,
diff --git a/src/corelib/itemmodels/qabstractitemmodel.cpp b/src/corelib/itemmodels/qabstractitemmodel.cpp
index a9cfa3e7ca..88e39f9441 100644
--- a/src/corelib/itemmodels/qabstractitemmodel.cpp
+++ b/src/corelib/itemmodels/qabstractitemmodel.cpp
@@ -468,12 +468,12 @@ class QEmptyItemModel : public QAbstractItemModel
{
public:
explicit QEmptyItemModel(QObject *parent = 0) : QAbstractItemModel(parent) {}
- QModelIndex index(int, int, const QModelIndex &) const { return QModelIndex(); }
- QModelIndex parent(const QModelIndex &) const { return QModelIndex(); }
- int rowCount(const QModelIndex &) const { return 0; }
- int columnCount(const QModelIndex &) const { return 0; }
- bool hasChildren(const QModelIndex &) const { return false; }
- QVariant data(const QModelIndex &, int) const { return QVariant(); }
+ QModelIndex index(int, int, const QModelIndex &) const Q_DECL_OVERRIDE { return QModelIndex(); }
+ QModelIndex parent(const QModelIndex &) const Q_DECL_OVERRIDE { return QModelIndex(); }
+ int rowCount(const QModelIndex &) const Q_DECL_OVERRIDE { return 0; }
+ int columnCount(const QModelIndex &) const Q_DECL_OVERRIDE { return 0; }
+ bool hasChildren(const QModelIndex &) const Q_DECL_OVERRIDE { return false; }
+ QVariant data(const QModelIndex &, int) const Q_DECL_OVERRIDE { return QVariant(); }
};
Q_GLOBAL_STATIC(QEmptyItemModel, qEmptyModel)
@@ -1264,11 +1264,6 @@ void QAbstractItemModel::resetInternalData()
*/
/*!
- \fn QObject *QAbstractItemModel::parent() const
- \internal
-*/
-
-/*!
\fn QModelIndex QAbstractItemModel::parent(const QModelIndex &index) const = 0
Returns the parent of the model item with the given \a index. If the item
diff --git a/src/corelib/itemmodels/qabstractitemmodel.h b/src/corelib/itemmodels/qabstractitemmodel.h
index 32d88e9d96..75c2009fe4 100644
--- a/src/corelib/itemmodels/qabstractitemmodel.h
+++ b/src/corelib/itemmodels/qabstractitemmodel.h
@@ -49,24 +49,24 @@ class Q_CORE_EXPORT QModelIndex
{
friend class QAbstractItemModel;
public:
- Q_DECL_CONSTEXPR inline QModelIndex() : r(-1), c(-1), i(0), m(0) {}
+ Q_DECL_CONSTEXPR inline QModelIndex() Q_DECL_NOTHROW : r(-1), c(-1), i(0), m(0) {}
// compiler-generated copy/move ctors/assignment operators are fine!
- Q_DECL_CONSTEXPR inline int row() const { return r; }
- Q_DECL_CONSTEXPR inline int column() const { return c; }
- Q_DECL_CONSTEXPR inline quintptr internalId() const { return i; }
- inline void *internalPointer() const { return reinterpret_cast<void*>(i); }
+ Q_DECL_CONSTEXPR inline int row() const Q_DECL_NOTHROW { return r; }
+ Q_DECL_CONSTEXPR inline int column() const Q_DECL_NOTHROW { return c; }
+ Q_DECL_CONSTEXPR inline quintptr internalId() const Q_DECL_NOTHROW { return i; }
+ inline void *internalPointer() const Q_DECL_NOTHROW { return reinterpret_cast<void*>(i); }
inline QModelIndex parent() const;
inline QModelIndex sibling(int row, int column) const;
inline QModelIndex child(int row, int column) const;
inline QVariant data(int role = Qt::DisplayRole) const;
inline Qt::ItemFlags flags() const;
- Q_DECL_CONSTEXPR inline const QAbstractItemModel *model() const { return m; }
- Q_DECL_CONSTEXPR inline bool isValid() const { return (r >= 0) && (c >= 0) && (m != 0); }
- Q_DECL_CONSTEXPR inline bool operator==(const QModelIndex &other) const
+ Q_DECL_CONSTEXPR inline const QAbstractItemModel *model() const Q_DECL_NOTHROW { return m; }
+ Q_DECL_CONSTEXPR inline bool isValid() const Q_DECL_NOTHROW { return (r >= 0) && (c >= 0) && (m != 0); }
+ Q_DECL_CONSTEXPR inline bool operator==(const QModelIndex &other) const Q_DECL_NOTHROW
{ return (other.r == r) && (other.i == i) && (other.c == c) && (other.m == m); }
- Q_DECL_CONSTEXPR inline bool operator!=(const QModelIndex &other) const
+ Q_DECL_CONSTEXPR inline bool operator!=(const QModelIndex &other) const Q_DECL_NOTHROW
{ return !(*this == other); }
- Q_DECL_CONSTEXPR inline bool operator<(const QModelIndex &other) const
+ Q_DECL_CONSTEXPR inline bool operator<(const QModelIndex &other) const Q_DECL_NOTHROW
{
return r < other.r
|| (r == other.r && (c < other.c
@@ -74,9 +74,9 @@ public:
|| (i == other.i && m < other.m )))));
}
private:
- inline QModelIndex(int arow, int acolumn, void *ptr, const QAbstractItemModel *amodel)
+ inline QModelIndex(int arow, int acolumn, void *ptr, const QAbstractItemModel *amodel) Q_DECL_NOTHROW
: r(arow), c(acolumn), i(reinterpret_cast<quintptr>(ptr)), m(amodel) {}
- Q_DECL_CONSTEXPR inline QModelIndex(int arow, int acolumn, quintptr id, const QAbstractItemModel *amodel)
+ Q_DECL_CONSTEXPR inline QModelIndex(int arow, int acolumn, quintptr id, const QAbstractItemModel *amodel) Q_DECL_NOTHROW
: r(arow), c(acolumn), i(id), m(amodel) {}
int r, c;
quintptr i;
@@ -91,7 +91,7 @@ Q_CORE_EXPORT QDebug operator<<(QDebug, const QModelIndex &);
class QPersistentModelIndexData;
// qHash is a friend, but we can't use default arguments for friends (§8.3.6.4)
-uint qHash(const QPersistentModelIndex &index, uint seed = 0);
+uint qHash(const QPersistentModelIndex &index, uint seed = 0) Q_DECL_NOTHROW;
class Q_CORE_EXPORT QPersistentModelIndex
{
@@ -106,11 +106,12 @@ public:
{ return !operator==(other); }
QPersistentModelIndex &operator=(const QPersistentModelIndex &other);
#ifdef Q_COMPILER_RVALUE_REFS
- inline QPersistentModelIndex(QPersistentModelIndex &&other) : d(other.d) { other.d = 0; }
- inline QPersistentModelIndex &operator=(QPersistentModelIndex &&other)
+ inline QPersistentModelIndex(QPersistentModelIndex &&other) Q_DECL_NOTHROW
+ : d(other.d) { other.d = Q_NULLPTR; }
+ inline QPersistentModelIndex &operator=(QPersistentModelIndex &&other) Q_DECL_NOTHROW
{ qSwap(d, other.d); return *this; }
#endif
- inline void swap(QPersistentModelIndex &other) { qSwap(d, other.d); }
+ inline void swap(QPersistentModelIndex &other) Q_DECL_NOTHROW { qSwap(d, other.d); }
bool operator==(const QModelIndex &other) const;
bool operator!=(const QModelIndex &other) const;
QPersistentModelIndex &operator=(const QModelIndex &other);
@@ -128,14 +129,14 @@ public:
bool isValid() const;
private:
QPersistentModelIndexData *d;
- friend uint qHash(const QPersistentModelIndex &, uint seed);
+ friend uint qHash(const QPersistentModelIndex &, uint seed) Q_DECL_NOTHROW;
#ifndef QT_NO_DEBUG_STREAM
friend Q_CORE_EXPORT QDebug operator<<(QDebug, const QPersistentModelIndex &);
#endif
};
Q_DECLARE_SHARED(QPersistentModelIndex)
-inline uint qHash(const QPersistentModelIndex &index, uint seed)
+inline uint qHash(const QPersistentModelIndex &index, uint seed) Q_DECL_NOTHROW
{ return qHash(index.d, seed); }
@@ -230,11 +231,7 @@ public:
virtual QHash<int,QByteArray> roleNames() const;
-#ifdef Q_NO_USING_KEYWORD
- inline QObject *parent() const { return QObject::parent(); }
-#else
using QObject::parent;
-#endif
enum LayoutChangeHint
{
@@ -419,27 +416,21 @@ public:
explicit QAbstractTableModel(QObject *parent = 0);
~QAbstractTableModel();
- QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
+ QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
bool dropMimeData(const QMimeData *data, Qt::DropAction action,
- int row, int column, const QModelIndex &parent);
+ int row, int column, const QModelIndex &parent) Q_DECL_OVERRIDE;
Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE;
-#ifdef Q_NO_USING_KEYWORD
-#ifndef Q_QDOC
- inline QObject *parent() const { return QAbstractItemModel::parent(); }
-#endif
-#else
using QObject::parent;
-#endif
protected:
QAbstractTableModel(QAbstractItemModelPrivate &dd, QObject *parent);
private:
Q_DISABLE_COPY(QAbstractTableModel)
- QModelIndex parent(const QModelIndex &child) const;
- bool hasChildren(const QModelIndex &parent) const;
+ QModelIndex parent(const QModelIndex &child) const Q_DECL_OVERRIDE;
+ bool hasChildren(const QModelIndex &parent) const Q_DECL_OVERRIDE;
};
class Q_CORE_EXPORT QAbstractListModel : public QAbstractItemModel
@@ -450,28 +441,22 @@ public:
explicit QAbstractListModel(QObject *parent = 0);
~QAbstractListModel();
- QModelIndex index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const;
+ QModelIndex index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
bool dropMimeData(const QMimeData *data, Qt::DropAction action,
- int row, int column, const QModelIndex &parent);
+ int row, int column, const QModelIndex &parent) Q_DECL_OVERRIDE;
Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE;
-#ifdef Q_NO_USING_KEYWORD
-#ifndef Q_QDOC
- inline QObject *parent() const { return QAbstractItemModel::parent(); }
-#endif
-#else
using QObject::parent;
-#endif
protected:
QAbstractListModel(QAbstractItemModelPrivate &dd, QObject *parent);
private:
Q_DISABLE_COPY(QAbstractListModel)
- QModelIndex parent(const QModelIndex &child) const;
- int columnCount(const QModelIndex &parent) const;
- bool hasChildren(const QModelIndex &parent) const;
+ QModelIndex parent(const QModelIndex &child) const Q_DECL_OVERRIDE;
+ int columnCount(const QModelIndex &parent) const Q_DECL_OVERRIDE;
+ bool hasChildren(const QModelIndex &parent) const Q_DECL_OVERRIDE;
};
// inline implementations
@@ -491,7 +476,7 @@ inline QVariant QModelIndex::data(int arole) const
inline Qt::ItemFlags QModelIndex::flags() const
{ return m ? m->flags(*this) : Qt::ItemFlags(0); }
-inline uint qHash(const QModelIndex &index)
+inline uint qHash(const QModelIndex &index) Q_DECL_NOTHROW
{ return uint((index.row() << 4) + index.column() + index.internalId()); }
QT_END_NAMESPACE
diff --git a/src/corelib/itemmodels/qabstractproxymodel.h b/src/corelib/itemmodels/qabstractproxymodel.h
index a11fb592ab..93517e943f 100644
--- a/src/corelib/itemmodels/qabstractproxymodel.h
+++ b/src/corelib/itemmodels/qabstractproxymodel.h
@@ -62,34 +62,34 @@ public:
virtual QItemSelection mapSelectionToSource(const QItemSelection &selection) const;
virtual QItemSelection mapSelectionFromSource(const QItemSelection &selection) const;
- bool submit();
- void revert();
-
- QVariant data(const QModelIndex &proxyIndex, int role = Qt::DisplayRole) const;
- QVariant headerData(int section, Qt::Orientation orientation, int role) const;
- QMap<int, QVariant> itemData(const QModelIndex &index) const;
- Qt::ItemFlags flags(const QModelIndex &index) const;
-
- bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
- bool setItemData(const QModelIndex& index, const QMap<int, QVariant> &roles);
- bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole);
-
- QModelIndex buddy(const QModelIndex &index) const;
- bool canFetchMore(const QModelIndex &parent) const;
- void fetchMore(const QModelIndex &parent);
- void sort(int column, Qt::SortOrder order = Qt::AscendingOrder);
- QSize span(const QModelIndex &index) const;
- bool hasChildren(const QModelIndex &parent = QModelIndex()) const;
- QModelIndex sibling(int row, int column, const QModelIndex &idx) const;
-
- QMimeData* mimeData(const QModelIndexList &indexes) const;
+ bool submit() Q_DECL_OVERRIDE;
+ void revert() Q_DECL_OVERRIDE;
+
+ QVariant data(const QModelIndex &proxyIndex, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
+ QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
+ QMap<int, QVariant> itemData(const QModelIndex &index) const Q_DECL_OVERRIDE;
+ Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE;
+
+ bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE;
+ bool setItemData(const QModelIndex& index, const QMap<int, QVariant> &roles) Q_DECL_OVERRIDE;
+ bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE;
+
+ QModelIndex buddy(const QModelIndex &index) const Q_DECL_OVERRIDE;
+ bool canFetchMore(const QModelIndex &parent) const Q_DECL_OVERRIDE;
+ void fetchMore(const QModelIndex &parent) Q_DECL_OVERRIDE;
+ void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) Q_DECL_OVERRIDE;
+ QSize span(const QModelIndex &index) const Q_DECL_OVERRIDE;
+ bool hasChildren(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
+ QModelIndex sibling(int row, int column, const QModelIndex &idx) const Q_DECL_OVERRIDE;
+
+ QMimeData* mimeData(const QModelIndexList &indexes) const Q_DECL_OVERRIDE;
bool canDropMimeData(const QMimeData *data, Qt::DropAction action,
int row, int column, const QModelIndex &parent) const Q_DECL_OVERRIDE;
bool dropMimeData(const QMimeData *data, Qt::DropAction action,
int row, int column, const QModelIndex &parent) Q_DECL_OVERRIDE;
- QStringList mimeTypes() const;
- Qt::DropActions supportedDragActions() const;
- Qt::DropActions supportedDropActions() const;
+ QStringList mimeTypes() const Q_DECL_OVERRIDE;
+ Qt::DropActions supportedDragActions() const Q_DECL_OVERRIDE;
+ Qt::DropActions supportedDropActions() const Q_DECL_OVERRIDE;
Q_SIGNALS:
void sourceModelChanged(
diff --git a/src/corelib/itemmodels/qidentityproxymodel.cpp b/src/corelib/itemmodels/qidentityproxymodel.cpp
index 27100c9ff7..e3b363f190 100644
--- a/src/corelib/itemmodels/qidentityproxymodel.cpp
+++ b/src/corelib/itemmodels/qidentityproxymodel.cpp
@@ -152,11 +152,8 @@ QModelIndex QIdentityProxyModel::index(int row, int column, const QModelIndex& p
{
Q_ASSERT(parent.isValid() ? parent.model() == this : true);
Q_D(const QIdentityProxyModel);
- if (!hasIndex(row, column, parent))
- return QModelIndex();
const QModelIndex sourceParent = mapToSource(parent);
const QModelIndex sourceIndex = d->model->index(row, column, sourceParent);
- Q_ASSERT(sourceIndex.isValid());
return mapFromSource(sourceIndex);
}
diff --git a/src/corelib/itemmodels/qidentityproxymodel.h b/src/corelib/itemmodels/qidentityproxymodel.h
index 7eaa1f4e04..5a9491d669 100644
--- a/src/corelib/itemmodels/qidentityproxymodel.h
+++ b/src/corelib/itemmodels/qidentityproxymodel.h
@@ -51,25 +51,25 @@ public:
explicit QIdentityProxyModel(QObject* parent = 0);
~QIdentityProxyModel();
- int columnCount(const QModelIndex& parent = QModelIndex()) const;
- QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const;
- QModelIndex mapFromSource(const QModelIndex& sourceIndex) const;
- QModelIndex mapToSource(const QModelIndex& proxyIndex) const;
- QModelIndex parent(const QModelIndex& child) const;
- int rowCount(const QModelIndex& parent = QModelIndex()) const;
- QVariant headerData(int section, Qt::Orientation orientation, int role) const;
- bool dropMimeData(const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent);
- QModelIndex sibling(int row, int column, const QModelIndex &idx) const;
-
- QItemSelection mapSelectionFromSource(const QItemSelection& selection) const;
- QItemSelection mapSelectionToSource(const QItemSelection& selection) const;
- QModelIndexList match(const QModelIndex& start, int role, const QVariant& value, int hits = 1, Qt::MatchFlags flags = Qt::MatchFlags(Qt::MatchStartsWith|Qt::MatchWrap)) const;
- void setSourceModel(QAbstractItemModel* sourceModel);
-
- bool insertColumns(int column, int count, const QModelIndex& parent = QModelIndex());
- bool insertRows(int row, int count, const QModelIndex& parent = QModelIndex());
- bool removeColumns(int column, int count, const QModelIndex& parent = QModelIndex());
- bool removeRows(int row, int count, const QModelIndex& parent = QModelIndex());
+ int columnCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE;
+ QModelIndex index(int row, int column, const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE;
+ QModelIndex mapFromSource(const QModelIndex& sourceIndex) const Q_DECL_OVERRIDE;
+ QModelIndex mapToSource(const QModelIndex& proxyIndex) const Q_DECL_OVERRIDE;
+ QModelIndex parent(const QModelIndex& child) const Q_DECL_OVERRIDE;
+ int rowCount(const QModelIndex& parent = QModelIndex()) const Q_DECL_OVERRIDE;
+ QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
+ bool dropMimeData(const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent) Q_DECL_OVERRIDE;
+ QModelIndex sibling(int row, int column, const QModelIndex &idx) const Q_DECL_OVERRIDE;
+
+ QItemSelection mapSelectionFromSource(const QItemSelection& selection) const Q_DECL_OVERRIDE;
+ QItemSelection mapSelectionToSource(const QItemSelection& selection) const Q_DECL_OVERRIDE;
+ QModelIndexList match(const QModelIndex& start, int role, const QVariant& value, int hits = 1, Qt::MatchFlags flags = Qt::MatchFlags(Qt::MatchStartsWith|Qt::MatchWrap)) const Q_DECL_OVERRIDE;
+ void setSourceModel(QAbstractItemModel* sourceModel) Q_DECL_OVERRIDE;
+
+ bool insertColumns(int column, int count, const QModelIndex& parent = QModelIndex()) Q_DECL_OVERRIDE;
+ bool insertRows(int row, int count, const QModelIndex& parent = QModelIndex()) Q_DECL_OVERRIDE;
+ bool removeColumns(int column, int count, const QModelIndex& parent = QModelIndex()) Q_DECL_OVERRIDE;
+ bool removeRows(int row, int count, const QModelIndex& parent = QModelIndex()) Q_DECL_OVERRIDE;
protected:
QIdentityProxyModel(QIdentityProxyModelPrivate &dd, QObject* parent);
diff --git a/src/corelib/itemmodels/qsortfilterproxymodel.cpp b/src/corelib/itemmodels/qsortfilterproxymodel.cpp
index 0b2b0e4188..7af95fe625 100644
--- a/src/corelib/itemmodels/qsortfilterproxymodel.cpp
+++ b/src/corelib/itemmodels/qsortfilterproxymodel.cpp
@@ -195,7 +195,8 @@ public:
}
void _q_sourceDataChanged(const QModelIndex &source_top_left,
- const QModelIndex &source_bottom_right);
+ const QModelIndex &source_bottom_right,
+ const QVector<int> &roles);
void _q_sourceHeaderDataChanged(Qt::Orientation orientation, int start, int end);
void _q_sourceAboutToBeReset();
@@ -279,7 +280,7 @@ public:
void updateChildrenMapping(const QModelIndex &source_parent, Mapping *parent_mapping,
Qt::Orientation orient, int start, int end, int delta_item_count, bool remove);
- virtual void _q_sourceModelDestroyed();
+ virtual void _q_sourceModelDestroyed() Q_DECL_OVERRIDE;
};
typedef QHash<QModelIndex, QSortFilterProxyModelPrivate::Mapping *> IndexMap;
@@ -1131,7 +1132,8 @@ QSet<int> QSortFilterProxyModelPrivate::handle_filter_changed(
}
void QSortFilterProxyModelPrivate::_q_sourceDataChanged(const QModelIndex &source_top_left,
- const QModelIndex &source_bottom_right)
+ const QModelIndex &source_bottom_right,
+ const QVector<int> &roles)
{
Q_Q(QSortFilterProxyModel);
if (!source_top_left.isValid() || !source_bottom_right.isValid())
@@ -1196,7 +1198,11 @@ void QSortFilterProxyModelPrivate::_q_sourceDataChanged(const QModelIndex &sourc
parents << q->mapFromSource(source_parent);
emit q->layoutAboutToBeChanged(parents, QAbstractItemModel::VerticalSortHint);
QModelIndexPairList source_indexes = store_persistent_indexes();
- sort_source_rows(m->source_rows, source_parent);
+ remove_source_items(m->proxy_rows, m->source_rows, source_rows_resort,
+ source_parent, Qt::Vertical, false);
+ sort_source_rows(source_rows_resort, source_parent);
+ insert_source_items(m->proxy_rows, m->source_rows, source_rows_resort,
+ source_parent, Qt::Vertical, false);
update_persistent_indexes(source_indexes);
emit q->layoutChanged(parents, QAbstractItemModel::VerticalSortHint);
// Make sure we also emit dataChanged for the rows
@@ -1224,7 +1230,7 @@ void QSortFilterProxyModelPrivate::_q_sourceDataChanged(const QModelIndex &sourc
--source_right_column;
const QModelIndex proxy_bottom_right = create_index(
proxy_end_row, m->proxy_columns.at(source_right_column), it);
- emit q->dataChanged(proxy_top_left, proxy_bottom_right);
+ emit q->dataChanged(proxy_top_left, proxy_bottom_right, roles);
}
}
@@ -1728,8 +1734,8 @@ void QSortFilterProxyModel::setSourceModel(QAbstractItemModel *sourceModel)
beginResetModel();
- disconnect(d->model, SIGNAL(dataChanged(QModelIndex,QModelIndex)),
- this, SLOT(_q_sourceDataChanged(QModelIndex,QModelIndex)));
+ disconnect(d->model, SIGNAL(dataChanged(QModelIndex,QModelIndex,QVector<int>)),
+ this, SLOT(_q_sourceDataChanged(QModelIndex,QModelIndex,QVector<int>)));
disconnect(d->model, SIGNAL(headerDataChanged(Qt::Orientation,int,int)),
this, SLOT(_q_sourceHeaderDataChanged(Qt::Orientation,int,int)));
@@ -1781,8 +1787,8 @@ void QSortFilterProxyModel::setSourceModel(QAbstractItemModel *sourceModel)
QAbstractProxyModel::setSourceModel(sourceModel);
- connect(d->model, SIGNAL(dataChanged(QModelIndex,QModelIndex)),
- this, SLOT(_q_sourceDataChanged(QModelIndex,QModelIndex)));
+ connect(d->model, SIGNAL(dataChanged(QModelIndex,QModelIndex,QVector<int>)),
+ this, SLOT(_q_sourceDataChanged(QModelIndex,QModelIndex,QVector<int>)));
connect(d->model, SIGNAL(headerDataChanged(Qt::Orientation,int,int)),
this, SLOT(_q_sourceHeaderDataChanged(Qt::Orientation,int,int)));
@@ -2740,11 +2746,6 @@ QItemSelection QSortFilterProxyModel::mapSelectionFromSource(const QItemSelectio
return QAbstractProxyModel::mapSelectionFromSource(sourceSelection);
}
-/*!
- \fn QObject *QSortFilterProxyModel::parent() const
- \internal
-*/
-
QT_END_NAMESPACE
#include "moc_qsortfilterproxymodel.cpp"
diff --git a/src/corelib/itemmodels/qsortfilterproxymodel.h b/src/corelib/itemmodels/qsortfilterproxymodel.h
index 5f7235876e..9df785756c 100644
--- a/src/corelib/itemmodels/qsortfilterproxymodel.h
+++ b/src/corelib/itemmodels/qsortfilterproxymodel.h
@@ -66,13 +66,13 @@ public:
explicit QSortFilterProxyModel(QObject *parent = 0);
~QSortFilterProxyModel();
- void setSourceModel(QAbstractItemModel *sourceModel);
+ void setSourceModel(QAbstractItemModel *sourceModel) Q_DECL_OVERRIDE;
- QModelIndex mapToSource(const QModelIndex &proxyIndex) const;
- QModelIndex mapFromSource(const QModelIndex &sourceIndex) const;
+ QModelIndex mapToSource(const QModelIndex &proxyIndex) const Q_DECL_OVERRIDE;
+ QModelIndex mapFromSource(const QModelIndex &sourceIndex) const Q_DECL_OVERRIDE;
- QItemSelection mapSelectionToSource(const QItemSelection &proxySelection) const;
- QItemSelection mapSelectionFromSource(const QItemSelection &sourceSelection) const;
+ QItemSelection mapSelectionToSource(const QItemSelection &proxySelection) const Q_DECL_OVERRIDE;
+ QItemSelection mapSelectionFromSource(const QItemSelection &sourceSelection) const Q_DECL_OVERRIDE;
QRegExp filterRegExp() const;
void setFilterRegExp(const QRegExp &regExp);
@@ -117,55 +117,51 @@ protected:
void invalidateFilter();
public:
-#ifdef Q_NO_USING_KEYWORD
- inline QObject *parent() const { return QObject::parent(); }
-#else
using QObject::parent;
-#endif
- QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
- QModelIndex parent(const QModelIndex &child) const;
- QModelIndex sibling(int row, int column, const QModelIndex &idx) const;
+ QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
+ QModelIndex parent(const QModelIndex &child) const Q_DECL_OVERRIDE;
+ QModelIndex sibling(int row, int column, const QModelIndex &idx) const Q_DECL_OVERRIDE;
- int rowCount(const QModelIndex &parent = QModelIndex()) const;
- int columnCount(const QModelIndex &parent = QModelIndex()) const;
- bool hasChildren(const QModelIndex &parent = QModelIndex()) const;
+ int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
+ int columnCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
+ bool hasChildren(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
- QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
- bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
+ bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE;
- QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
+ QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
bool setHeaderData(int section, Qt::Orientation orientation,
- const QVariant &value, int role = Qt::EditRole);
+ const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE;
- QMimeData *mimeData(const QModelIndexList &indexes) const;
+ QMimeData *mimeData(const QModelIndexList &indexes) const Q_DECL_OVERRIDE;
bool dropMimeData(const QMimeData *data, Qt::DropAction action,
- int row, int column, const QModelIndex &parent);
+ int row, int column, const QModelIndex &parent) Q_DECL_OVERRIDE;
- bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex());
- bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex());
- bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex());
- bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex());
+ bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
+ bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
+ bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
+ bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
- void fetchMore(const QModelIndex &parent);
- bool canFetchMore(const QModelIndex &parent) const;
- Qt::ItemFlags flags(const QModelIndex &index) const;
+ void fetchMore(const QModelIndex &parent) Q_DECL_OVERRIDE;
+ bool canFetchMore(const QModelIndex &parent) const Q_DECL_OVERRIDE;
+ Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE;
- QModelIndex buddy(const QModelIndex &index) const;
+ QModelIndex buddy(const QModelIndex &index) const Q_DECL_OVERRIDE;
QModelIndexList match(const QModelIndex &start, int role,
const QVariant &value, int hits = 1,
Qt::MatchFlags flags =
- Qt::MatchFlags(Qt::MatchStartsWith|Qt::MatchWrap)) const;
- QSize span(const QModelIndex &index) const;
- void sort(int column, Qt::SortOrder order = Qt::AscendingOrder);
+ Qt::MatchFlags(Qt::MatchStartsWith|Qt::MatchWrap)) const Q_DECL_OVERRIDE;
+ QSize span(const QModelIndex &index) const Q_DECL_OVERRIDE;
+ void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) Q_DECL_OVERRIDE;
- QStringList mimeTypes() const;
- Qt::DropActions supportedDropActions() const;
+ QStringList mimeTypes() const Q_DECL_OVERRIDE;
+ Qt::DropActions supportedDropActions() const Q_DECL_OVERRIDE;
private:
Q_DECLARE_PRIVATE(QSortFilterProxyModel)
Q_DISABLE_COPY(QSortFilterProxyModel)
- Q_PRIVATE_SLOT(d_func(), void _q_sourceDataChanged(const QModelIndex &source_top_left, const QModelIndex &source_bottom_right))
+ Q_PRIVATE_SLOT(d_func(), void _q_sourceDataChanged(const QModelIndex &source_top_left, const QModelIndex &source_bottom_right, const QVector<int> &roles))
Q_PRIVATE_SLOT(d_func(), void _q_sourceHeaderDataChanged(Qt::Orientation orientation, int start, int end))
Q_PRIVATE_SLOT(d_func(), void _q_sourceAboutToBeReset())
Q_PRIVATE_SLOT(d_func(), void _q_sourceReset())
diff --git a/src/corelib/itemmodels/qstringlistmodel.h b/src/corelib/itemmodels/qstringlistmodel.h
index 0db2d550af..764d79ba6f 100644
--- a/src/corelib/itemmodels/qstringlistmodel.h
+++ b/src/corelib/itemmodels/qstringlistmodel.h
@@ -49,23 +49,23 @@ public:
explicit QStringListModel(QObject *parent = 0);
explicit QStringListModel(const QStringList &strings, QObject *parent = 0);
- int rowCount(const QModelIndex &parent = QModelIndex()) const;
- QModelIndex sibling(int row, int column, const QModelIndex &idx) const;
+ int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
+ QModelIndex sibling(int row, int column, const QModelIndex &idx) const Q_DECL_OVERRIDE;
- QVariant data(const QModelIndex &index, int role) const;
- bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
+ QVariant data(const QModelIndex &index, int role) const Q_DECL_OVERRIDE;
+ bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE;
- Qt::ItemFlags flags(const QModelIndex &index) const;
+ Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE;
- bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex());
- bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex());
+ bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
+ bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
- void sort(int column, Qt::SortOrder order = Qt::AscendingOrder);
+ void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) Q_DECL_OVERRIDE;
QStringList stringList() const;
void setStringList(const QStringList &strings);
- Qt::DropActions supportedDropActions() const;
+ Qt::DropActions supportedDropActions() const Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QStringListModel)
diff --git a/src/corelib/json/qjsonobject.cpp b/src/corelib/json/qjsonobject.cpp
index bc74092f59..df604e4433 100644
--- a/src/corelib/json/qjsonobject.cpp
+++ b/src/corelib/json/qjsonobject.cpp
@@ -192,7 +192,7 @@ QJsonObject &QJsonObject::operator =(const QJsonObject &other)
The keys in \a map will be used as the keys in the JSON object,
and the QVariant values will be converted to JSON values.
- \sa toVariantMap(), QJsonValue::fromVariant()
+ \sa fromVariantHash(), toVariantMap(), QJsonValue::fromVariant()
*/
QJsonObject QJsonObject::fromVariantMap(const QVariantMap &map)
{
@@ -208,6 +208,8 @@ QJsonObject QJsonObject::fromVariantMap(const QVariantMap &map)
Converts this object to a QVariantMap.
Returns the created map.
+
+ \sa toVariantHash()
*/
QVariantMap QJsonObject::toVariantMap() const
{
@@ -222,6 +224,45 @@ QVariantMap QJsonObject::toVariantMap() const
}
/*!
+ Converts the variant hash \a hash to a QJsonObject.
+ \since 5.5
+
+ The keys in \a hash will be used as the keys in the JSON object,
+ and the QVariant values will be converted to JSON values.
+
+ \sa fromVariantMap(), toVariantHash(), QJsonValue::fromVariant()
+ */
+QJsonObject QJsonObject::fromVariantHash(const QVariantHash &hash)
+{
+ // ### this is implemented the trivial way, not the most efficient way
+
+ QJsonObject object;
+ for (QVariantHash::const_iterator it = hash.constBegin(); it != hash.constEnd(); ++it)
+ object.insert(it.key(), QJsonValue::fromVariant(it.value()));
+ return object;
+}
+
+/*!
+ Converts this object to a QVariantHash.
+ \since 5.5
+
+ Returns the created hash.
+
+ \sa toVariantMap()
+ */
+QVariantHash QJsonObject::toVariantHash() const
+{
+ QVariantHash hash;
+ if (o) {
+ for (uint i = 0; i < o->length; ++i) {
+ QJsonPrivate::Entry *e = o->entryAt(i);
+ hash.insert(e->key(), QJsonValue(d, o, e->value).toVariant());
+ }
+ }
+ return hash;
+}
+
+/*!
Returns a list of all keys in this object.
*/
QStringList QJsonObject::keys() const
diff --git a/src/corelib/json/qjsonobject.h b/src/corelib/json/qjsonobject.h
index 9abdb047ed..272cf14b01 100644
--- a/src/corelib/json/qjsonobject.h
+++ b/src/corelib/json/qjsonobject.h
@@ -46,6 +46,8 @@ QT_BEGIN_NAMESPACE
class QDebug;
template <class Key, class T> class QMap;
typedef QMap<QString, QVariant> QVariantMap;
+template <class Key, class T> class QHash;
+typedef QHash<QString, QVariant> QVariantHash;
class Q_CORE_EXPORT QJsonObject
{
@@ -68,6 +70,8 @@ public:
static QJsonObject fromVariantMap(const QVariantMap &map);
QVariantMap toVariantMap() const;
+ static QJsonObject fromVariantHash(const QVariantHash &map);
+ QVariantHash toVariantHash() const;
QStringList keys() const;
int size() const;
diff --git a/src/corelib/json/qjsonvalue.cpp b/src/corelib/json/qjsonvalue.cpp
index ac4fcb89c1..4c5d9e3308 100644
--- a/src/corelib/json/qjsonvalue.cpp
+++ b/src/corelib/json/qjsonvalue.cpp
@@ -373,6 +373,7 @@ QJsonValue &QJsonValue::operator =(const QJsonValue &other)
\li
\list
\li QMetaType::QVariantMap
+ \li QMetaType::QVariantHash
\endlist
\li QJsonValue::Object
\endtable
@@ -402,6 +403,8 @@ QJsonValue QJsonValue::fromVariant(const QVariant &variant)
return QJsonValue(QJsonArray::fromVariantList(variant.toList()));
case QVariant::Map:
return QJsonValue(QJsonObject::fromVariantMap(variant.toMap()));
+ case QVariant::Hash:
+ return QJsonValue(QJsonObject::fromVariantHash(variant.toHash()));
default:
break;
}
diff --git a/src/corelib/kernel/kernel.pri b/src/corelib/kernel/kernel.pri
index 55625f3571..87367a9ee7 100644
--- a/src/corelib/kernel/kernel.pri
+++ b/src/corelib/kernel/kernel.pri
@@ -99,20 +99,22 @@ winrt {
}
mac {
+ HEADERS += \
+ kernel/qcore_mac_p.h
+
SOURCES += \
- kernel/qcoreapplication_mac.cpp
-}
+ kernel/qcoreapplication_mac.cpp \
+ kernel/qcore_mac.cpp
+
+ OBJECTIVE_SOURCES += \
+ kernel/qcore_mac_objc.mm
+
+ LIBS_PRIVATE += -framework Foundation
-mac:!nacl {
- HEADERS += \
- kernel/qcore_mac_p.h
- SOURCES += \
- kernel/qcore_mac.cpp
- OBJECTIVE_SOURCES += \
- kernel/qcore_mac_objc.mm
+ osx: LIBS_PRIVATE += -framework CoreServices
- # We need UIKit for UIDevice
- ios: LIBS_PRIVATE += -framework UIKit
+ # We need UIKit for UIDevice
+ ios: LIBS_PRIVATE += -framework UIKit
}
nacl {
@@ -147,7 +149,11 @@ unix|integrity {
contains(QT_CONFIG, clock-gettime):include($$QT_SOURCE_TREE/config.tests/unix/clock-gettime/clock-gettime.pri)
!android {
- SOURCES += kernel/qsharedmemory_unix.cpp \
+ SOURCES += kernel/qsharedmemory_posix.cpp \
+ kernel/qsharedmemory_systemv.cpp \
+ kernel/qsharedmemory_unix.cpp \
+ kernel/qsystemsemaphore_posix.cpp \
+ kernel/qsystemsemaphore_systemv.cpp \
kernel/qsystemsemaphore_unix.cpp
} else {
SOURCES += kernel/qsharedmemory_android.cpp \
diff --git a/src/corelib/kernel/qcore_mac_objc.mm b/src/corelib/kernel/qcore_mac_objc.mm
index 73f8296021..265126dc58 100644
--- a/src/corelib/kernel/qcore_mac_objc.mm
+++ b/src/corelib/kernel/qcore_mac_objc.mm
@@ -1,6 +1,7 @@
/****************************************************************************
**
- ** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+ ** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+ ** Copyright (C) 2014 Petroules Corporation.
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtCore module of the Qt Toolkit.
@@ -41,12 +42,16 @@
#include <private/qcore_mac_p.h>
+#include <qdebug.h>
+
#ifdef Q_OS_IOS
#import <UIKit/UIKit.h>
#endif
QT_BEGIN_NAMESPACE
+typedef qint16 (*GestaltFunction)(quint32 selector, qint32 *response);
+
NSString *QCFString::toNSString(const QString &string)
{
// The const cast below is safe: CfStringRef is immutable and so is NSString.
@@ -58,31 +63,81 @@ QString QCFString::toQString(const NSString *nsstr)
return toQString(reinterpret_cast<CFStringRef>(nsstr));
}
-#ifdef Q_OS_IOS
-QSysInfo::MacVersion qt_ios_version()
+// -------------------------------------------------------------------------
+
+QDebug operator<<(QDebug dbg, const NSObject *nsObject)
{
- NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
-
- int major = 0, minor = 0;
- NSArray *components = [[UIDevice currentDevice].systemVersion componentsSeparatedByString:@"."];
- switch ([components count]) {
- case 3:
- // We don't care about the patch version
- case 2:
- minor = [[components objectAtIndex:1] intValue];
- // fall through
- case 1:
- major = [[components objectAtIndex:0] intValue];
- break;
- default:
- Q_UNREACHABLE();
- }
+ return dbg << (nsObject ? nsObject.description.UTF8String : "NSObject(0x0)");
+}
+
+QDebug operator<<(QDebug dbg, CFStringRef stringRef)
+{
+ if (!stringRef)
+ return dbg << "CFStringRef(0x0)";
- [pool release];
+ if (const UniChar *chars = CFStringGetCharactersPtr(stringRef))
+ dbg << QString::fromRawData(reinterpret_cast<const QChar *>(chars), CFStringGetLength(stringRef));
+ else
+ dbg << QString::fromCFString(stringRef);
- return QSysInfo::MacVersion(Q_MV_IOS(major, minor));
+ return dbg;
}
+
+// Prevents breaking the ODR in case we introduce support for more types
+// later on, and lets the user override our default QDebug operators.
+#define QT_DECLARE_WEAK_QDEBUG_OPERATOR_FOR_CF_TYPE(CFType) \
+ __attribute__((weak)) Q_DECLARE_QDEBUG_OPERATOR_FOR_CF_TYPE(CFType)
+
+QT_FOR_EACH_CORE_FOUNDATION_TYPE(QT_DECLARE_WEAK_QDEBUG_OPERATOR_FOR_CF_TYPE);
+QT_FOR_EACH_MUTABLE_CORE_FOUNDATION_TYPE(QT_DECLARE_WEAK_QDEBUG_OPERATOR_FOR_CF_TYPE);
+QT_FOR_EACH_CORE_GRAPHICS_TYPE(QT_DECLARE_WEAK_QDEBUG_OPERATOR_FOR_CF_TYPE);
+QT_FOR_EACH_MUTABLE_CORE_GRAPHICS_TYPE(QT_DECLARE_WEAK_QDEBUG_OPERATOR_FOR_CF_TYPE);
+
+// -------------------------------------------------------------------------
+
+QAppleOperatingSystemVersion qt_apple_os_version()
+{
+ QAppleOperatingSystemVersion v = {0, 0, 0};
+#if QT_MAC_PLATFORM_SDK_EQUAL_OR_ABOVE(__MAC_10_10, __IPHONE_8_0)
+ if ([NSProcessInfo instancesRespondToSelector:@selector(operatingSystemVersion)]) {
+ NSOperatingSystemVersion osv = NSProcessInfo.processInfo.operatingSystemVersion;
+ v.major = osv.majorVersion;
+ v.minor = osv.minorVersion;
+ v.patch = osv.patchVersion;
+ return v;
+ }
#endif
+ // Use temporary variables so we can return 0.0.0 (unknown version)
+ // in case of an error partway through determining the OS version
+ qint32 major = 0, minor = 0, patch = 0;
+#if defined(Q_OS_IOS)
+ @autoreleasepool {
+ NSArray *parts = [UIDevice.currentDevice.systemVersion componentsSeparatedByString:@"."];
+ major = parts.count > 0 ? [[parts objectAtIndex:0] intValue] : 0;
+ minor = parts.count > 1 ? [[parts objectAtIndex:1] intValue] : 0;
+ patch = parts.count > 2 ? [[parts objectAtIndex:2] intValue] : 0;
+ }
+#elif defined(Q_OS_OSX)
+ static GestaltFunction pGestalt = 0;
+ if (!pGestalt) {
+ CFBundleRef b = CFBundleGetBundleWithIdentifier(CFSTR("com.apple.CoreServices"));
+ pGestalt = reinterpret_cast<GestaltFunction>(CFBundleGetFunctionPointerForName(b,
+ CFSTR("Gestalt")));
+ }
+ if (!pGestalt)
+ return v;
+ if (pGestalt('sys1', &major) != 0)
+ return v;
+ if (pGestalt('sys2', &minor) != 0)
+ return v;
+ if (pGestalt('sys3', &patch) != 0)
+ return v;
+#endif
+ v.major = major;
+ v.minor = minor;
+ v.patch = patch;
+ return v;
+}
QT_END_NAMESPACE
diff --git a/src/corelib/kernel/qcore_mac_p.h b/src/corelib/kernel/qcore_mac_p.h
index 842e2ef9f1..9b13f8d2b1 100644
--- a/src/corelib/kernel/qcore_mac_p.h
+++ b/src/corelib/kernel/qcore_mac_p.h
@@ -135,9 +135,11 @@ private:
QString string;
};
-#ifdef Q_OS_IOS
-QSysInfo::MacVersion qt_ios_version();
-#endif
+typedef struct {
+ int major, minor, patch;
+} QAppleOperatingSystemVersion;
+
+QAppleOperatingSystemVersion qt_apple_os_version();
QT_END_NAMESPACE
diff --git a/src/corelib/kernel/qcoreapplication.cpp b/src/corelib/kernel/qcoreapplication.cpp
index ca3d92bad1..555b5e0263 100644
--- a/src/corelib/kernel/qcoreapplication.cpp
+++ b/src/corelib/kernel/qcoreapplication.cpp
@@ -318,7 +318,7 @@ QCoreApplication *QCoreApplication::self = 0;
uint QCoreApplicationPrivate::attribs = (1 << Qt::AA_SynthesizeMouseForUnhandledTouchEvents);
struct QCoreApplicationData {
- QCoreApplicationData() {
+ QCoreApplicationData() Q_DECL_NOTHROW {
#ifndef QT_NO_LIBRARY
app_libpaths = 0;
#endif
diff --git a/src/corelib/kernel/qcoreapplication.h b/src/corelib/kernel/qcoreapplication.h
index ff1dd5c43a..db1245430b 100644
--- a/src/corelib/kernel/qcoreapplication.h
+++ b/src/corelib/kernel/qcoreapplication.h
@@ -183,7 +183,7 @@ Q_SIGNALS:
void applicationVersionChanged();
protected:
- bool event(QEvent *);
+ bool event(QEvent *) Q_DECL_OVERRIDE;
virtual bool compressEvent(QEvent *, QObject *receiver, QPostEventList *);
#endif // QT_NO_QOBJECT
diff --git a/src/corelib/kernel/qcoreevent.cpp b/src/corelib/kernel/qcoreevent.cpp
index 191ceaa37b..93ab90fb94 100644
--- a/src/corelib/kernel/qcoreevent.cpp
+++ b/src/corelib/kernel/qcoreevent.cpp
@@ -183,6 +183,7 @@ QT_BEGIN_NAMESPACE
\value ParentAboutToChange The widget parent is about to change.
\value ParentChange The widget parent has changed.
\value PlatformPanel A platform specific panel has been requested.
+ \value PlatformSurface A native platform surface has been created or is about to be destroyed (QPlatformSurfaceEvent).
\value Polish The widget is polished.
\value PolishRequest The widget should be polished.
\value QueryWhatsThis The widget should accept the event if it has "What's This?" help.
diff --git a/src/corelib/kernel/qcoreevent.h b/src/corelib/kernel/qcoreevent.h
index 170f319ec9..0807721432 100644
--- a/src/corelib/kernel/qcoreevent.h
+++ b/src/corelib/kernel/qcoreevent.h
@@ -275,6 +275,8 @@ public:
WindowChangeInternal = 215, // internal for QQuickWidget
ScreenChangeInternal = 216,
+ PlatformSurface = 217, // Platform surface created or about to be destroyed
+
// 512 reserved for Qt Jambi's MetaCall event
// 513 reserved for Qt Jambi's DeleteOnMainThread event
diff --git a/src/corelib/kernel/qeventdispatcher_glib_p.h b/src/corelib/kernel/qeventdispatcher_glib_p.h
index 50820f478b..5950a4221a 100644
--- a/src/corelib/kernel/qeventdispatcher_glib_p.h
+++ b/src/corelib/kernel/qeventdispatcher_glib_p.h
@@ -66,8 +66,8 @@ public:
explicit QEventDispatcherGlib(GMainContext *context, QObject *parent = 0);
~QEventDispatcherGlib();
- bool processEvents(QEventLoop::ProcessEventsFlags flags);
- bool hasPendingEvents();
+ bool processEvents(QEventLoop::ProcessEventsFlags flags) Q_DECL_OVERRIDE;
+ bool hasPendingEvents() Q_DECL_OVERRIDE;
void registerSocketNotifier(QSocketNotifier *socketNotifier) Q_DECL_FINAL;
void unregisterSocketNotifier(QSocketNotifier *socketNotifier) Q_DECL_FINAL;
diff --git a/src/corelib/kernel/qeventdispatcher_unix_p.h b/src/corelib/kernel/qeventdispatcher_unix_p.h
index 37f180486e..3ec2c2eb3f 100644
--- a/src/corelib/kernel/qeventdispatcher_unix_p.h
+++ b/src/corelib/kernel/qeventdispatcher_unix_p.h
@@ -101,8 +101,8 @@ public:
explicit QEventDispatcherUNIX(QObject *parent = 0);
~QEventDispatcherUNIX();
- bool processEvents(QEventLoop::ProcessEventsFlags flags);
- bool hasPendingEvents();
+ bool processEvents(QEventLoop::ProcessEventsFlags flags) Q_DECL_OVERRIDE;
+ bool hasPendingEvents() Q_DECL_OVERRIDE;
void registerSocketNotifier(QSocketNotifier *notifier) FINAL_EXCEPT_BLACKBERRY;
void unregisterSocketNotifier(QSocketNotifier *notifier) FINAL_EXCEPT_BLACKBERRY;
@@ -116,7 +116,7 @@ public:
void wakeUp() FINAL_EXCEPT_BLACKBERRY;
void interrupt() Q_DECL_FINAL;
- void flush();
+ void flush() Q_DECL_OVERRIDE;
protected:
QEventDispatcherUNIX(QEventDispatcherUNIXPrivate &dd, QObject *parent = 0);
diff --git a/src/corelib/kernel/qeventloop.h b/src/corelib/kernel/qeventloop.h
index 31cd1d402a..be7a40e44d 100644
--- a/src/corelib/kernel/qeventloop.h
+++ b/src/corelib/kernel/qeventloop.h
@@ -70,7 +70,7 @@ public:
void wakeUp();
- bool event(QEvent *event);
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
public Q_SLOTS:
void quit();
diff --git a/src/corelib/kernel/qfunctions_p.h b/src/corelib/kernel/qfunctions_p.h
index b10d92398b..1eb7748364 100644
--- a/src/corelib/kernel/qfunctions_p.h
+++ b/src/corelib/kernel/qfunctions_p.h
@@ -57,14 +57,5 @@
# include "QtCore/qfunctions_winrt.h"
#endif
-#ifdef Q_CC_RVCT
-// rvct doesn't see static operators when using our qalgorithms
-# define Q_STATIC_GLOBAL_OPERATOR inline
-# define Q_STATIC_GLOBAL_INLINE_OPERATOR inline
-#else
-# define Q_STATIC_GLOBAL_OPERATOR static
-# define Q_STATIC_GLOBAL_INLINE_OPERATOR static inline
-#endif
-
#endif
diff --git a/src/corelib/kernel/qfunctions_wince.h b/src/corelib/kernel/qfunctions_wince.h
index cc5e0ca83f..8cbde6c465 100644
--- a/src/corelib/kernel/qfunctions_wince.h
+++ b/src/corelib/kernel/qfunctions_wince.h
@@ -208,7 +208,7 @@ int qt_wince_SetErrorMode(int);
bool qt_wince__chmod(const char *file, int mode);
bool qt_wince__wchmod(const wchar_t *file, int mode);
-#pragma warning(disable: 4273)
+QT_WARNING_DISABLE_MSVC(4273)
HANDLE qt_wince_CreateFileA(LPCSTR, DWORD, DWORD, LPSECURITY_ATTRIBUTES, DWORD, DWORD, HANDLE);
// Printer ----------------------------------------------------------
diff --git a/src/corelib/kernel/qmetaobject.cpp b/src/corelib/kernel/qmetaobject.cpp
index b54cb0c344..3e2fb46143 100644
--- a/src/corelib/kernel/qmetaobject.cpp
+++ b/src/corelib/kernel/qmetaobject.cpp
@@ -1,6 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2014 Olivier Goffart <ogoffart@woboq.com>
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtCore module of the Qt Toolkit.
@@ -2298,6 +2299,112 @@ bool QMetaMethod::invoke(QObject *object,
*/
/*!
+ \since 5.5
+
+ Invokes this method on a Q_GADGET. Returns \c true if the member could be invoked.
+ Returns \c false if there is no such member or the parameters did not match.
+
+ The pointer \a gadget must point to an instance of the gadget class.
+
+ The invocation is always synchronous.
+
+ The return value of this method call is placed in \a
+ returnValue. You can pass up to ten arguments (\a val0, \a val1,
+ \a val2, \a val3, \a val4, \a val5, \a val6, \a val7, \a val8,
+ and \a val9) to this method call.
+
+ \warning this method will not test the validity of the arguments: \a gadget
+ must be an instance of the class of the QMetaObject of which this QMetaMethod
+ has been constructed with. The arguments must have the same type as the ones
+ expected by the method, else, the behavior is undefined.
+
+ \sa Q_ARG(), Q_RETURN_ARG(), qRegisterMetaType(), QMetaObject::invokeMethod()
+*/
+bool QMetaMethod::invokeOnGadget(void* gadget, QGenericReturnArgument returnValue, QGenericArgument val0, QGenericArgument val1, QGenericArgument val2, QGenericArgument val3, QGenericArgument val4, QGenericArgument val5, QGenericArgument val6, QGenericArgument val7, QGenericArgument val8, QGenericArgument val9) const
+{
+ if (!gadget || !mobj)
+ return false;
+
+ // check return type
+ if (returnValue.data()) {
+ const char *retType = typeName();
+ if (qstrcmp(returnValue.name(), retType) != 0) {
+ // normalize the return value as well
+ QByteArray normalized = QMetaObject::normalizedType(returnValue.name());
+ if (qstrcmp(normalized.constData(), retType) != 0) {
+ // String comparison failed, try compare the metatype.
+ int t = returnType();
+ if (t == QMetaType::UnknownType || t != QMetaType::type(normalized))
+ return false;
+ }
+ }
+ }
+
+ // check argument count (we don't allow invoking a method if given too few arguments)
+ const char *typeNames[] = {
+ returnValue.name(),
+ val0.name(),
+ val1.name(),
+ val2.name(),
+ val3.name(),
+ val4.name(),
+ val5.name(),
+ val6.name(),
+ val7.name(),
+ val8.name(),
+ val9.name()
+ };
+ int paramCount;
+ for (paramCount = 1; paramCount < MaximumParamCount; ++paramCount) {
+ if (qstrlen(typeNames[paramCount]) <= 0)
+ break;
+ }
+ if (paramCount <= QMetaMethodPrivate::get(this)->parameterCount())
+ return false;
+
+ // invoke!
+ void *param[] = {
+ returnValue.data(),
+ val0.data(),
+ val1.data(),
+ val2.data(),
+ val3.data(),
+ val4.data(),
+ val5.data(),
+ val6.data(),
+ val7.data(),
+ val8.data(),
+ val9.data()
+ };
+ int idx_relative = QMetaMethodPrivate::get(this)->ownMethodIndex();
+ Q_ASSERT(QMetaObjectPrivate::get(mobj)->revision >= 6);
+ QObjectPrivate::StaticMetaCallFunction callFunction = mobj->d.static_metacall;
+ if (!callFunction)
+ return false;
+ callFunction(reinterpret_cast<QObject*>(gadget), QMetaObject::InvokeMetaMethod, idx_relative, param);
+ return true;
+}
+
+/*!
+ \fn bool QMetaMethod::invokeOnGadget(void *gadget,
+ QGenericArgument val0 = QGenericArgument(0),
+ QGenericArgument val1 = QGenericArgument(),
+ QGenericArgument val2 = QGenericArgument(),
+ QGenericArgument val3 = QGenericArgument(),
+ QGenericArgument val4 = QGenericArgument(),
+ QGenericArgument val5 = QGenericArgument(),
+ QGenericArgument val6 = QGenericArgument(),
+ QGenericArgument val7 = QGenericArgument(),
+ QGenericArgument val8 = QGenericArgument(),
+ QGenericArgument val9 = QGenericArgument()) const
+
+ \overload
+ \since 5.5
+
+ This overload invokes this method for a \a gadget and ignores return values.
+*/
+
+/*!
\class QMetaEnum
\inmodule QtCore
\brief The QMetaEnum class provides meta-data about an enumerator.
@@ -2713,9 +2820,8 @@ int QMetaProperty::userType() const
if (isEnumType()) {
type = QMetaType::type(qualifiedName(menum));
if (type == QMetaType::UnknownType) {
- void *argv[] = { &type };
- mobj->static_metacall(QMetaObject::RegisterPropertyMetaType, idx, argv);
- if (type == -1 || type == QMetaType::UnknownType)
+ type = registerPropertyType();
+ if (type == QMetaType::UnknownType)
return QVariant::Int; // Match behavior of QMetaType::type()
}
return type;
@@ -2723,11 +2829,7 @@ int QMetaProperty::userType() const
type = QMetaType::type(typeName());
if (type != QMetaType::UnknownType)
return type;
- void *argv[] = { &type };
- mobj->static_metacall(QMetaObject::RegisterPropertyMetaType, idx, argv);
- if (type != -1)
- return type;
- return QMetaType::UnknownType;
+ return registerPropertyType();
}
/*!
@@ -2791,6 +2893,20 @@ bool QMetaProperty::hasStdCppSet() const
}
/*!
+ \internal
+ Executes metacall with QMetaObject::RegisterPropertyMetaType flag.
+ Returns id of registered type or QMetaType::UnknownType if a type
+ could not be registered for any reason.
+*/
+int QMetaProperty::registerPropertyType() const
+{
+ int registerResult = -1;
+ void *argv[] = { &registerResult };
+ mobj->static_metacall(QMetaObject::RegisterPropertyMetaType, idx, argv);
+ return registerResult == -1 ? QMetaType::UnknownType : registerResult;
+}
+
+/*!
Returns the enumerator if this property's type is an enumerator
type; otherwise the returned value is undefined.
@@ -2835,15 +2951,11 @@ QVariant QMetaProperty::read(const QObject *object) const
}
if (t == QMetaType::UnknownType) {
// Try to register the type and try again before reporting an error.
- int registerResult = -1;
- void *argv[] = { &registerResult };
- QMetaObject::metacall(const_cast<QObject*>(object), QMetaObject::RegisterPropertyMetaType,
- idx + mobj->propertyOffset(), argv);
- if (registerResult == -1) {
+ t = registerPropertyType();
+ if (t == QMetaType::UnknownType) {
qWarning("QMetaProperty::read: Unable to handle unregistered datatype '%s' for property '%s::%s'", typeName, mobj->className(), name());
return QVariant();
}
- t = registerResult;
}
}
@@ -2861,8 +2973,12 @@ QVariant QMetaProperty::read(const QObject *object) const
value = QVariant(t, (void*)0);
argv[0] = value.data();
}
- QMetaObject::metacall(const_cast<QObject*>(object), QMetaObject::ReadProperty,
- idx + mobj->propertyOffset(), argv);
+ if (priv(mobj->d.data)->flags & PropertyAccessInStaticMetaCall && mobj->d.static_metacall) {
+ mobj->d.static_metacall(const_cast<QObject*>(object), QMetaObject::ReadProperty, idx, argv);
+ } else {
+ QMetaObject::metacall(const_cast<QObject*>(object), QMetaObject::ReadProperty,
+ idx + mobj->propertyOffset(), argv);
+ }
if (status != -1)
return value;
@@ -2911,9 +3027,11 @@ bool QMetaProperty::write(QObject *object, const QVariant &value) const
else {
typeName = rawStringData(mobj, typeInfo & TypeNameIndexMask);
t = QMetaType::type(typeName);
+ if (t == QMetaType::UnknownType)
+ t = registerPropertyType();
+ if (t == QMetaType::UnknownType)
+ return false;
}
- if (t == QMetaType::UnknownType)
- return false;
if (t != QMetaType::QVariant && t != (uint)value.userType() && (t < QMetaType::User && !v.convert((QVariant::Type)t)))
return false;
}
@@ -2932,7 +3050,11 @@ bool QMetaProperty::write(QObject *object, const QVariant &value) const
argv[0] = &v;
else
argv[0] = v.data();
- QMetaObject::metacall(object, QMetaObject::WriteProperty, idx + mobj->propertyOffset(), argv);
+ if (priv(mobj->d.data)->flags & PropertyAccessInStaticMetaCall && mobj->d.static_metacall)
+ mobj->d.static_metacall(object, QMetaObject::WriteProperty, idx, argv);
+ else
+ QMetaObject::metacall(object, QMetaObject::WriteProperty, idx + mobj->propertyOffset(), argv);
+
return status;
}
@@ -2949,9 +3071,55 @@ bool QMetaProperty::reset(QObject *object) const
if (!object || !mobj || !isResettable())
return false;
void *argv[] = { 0 };
- QMetaObject::metacall(object, QMetaObject::ResetProperty, idx + mobj->propertyOffset(), argv);
+ if (priv(mobj->d.data)->flags & PropertyAccessInStaticMetaCall && mobj->d.static_metacall)
+ mobj->d.static_metacall(object, QMetaObject::ResetProperty, idx, argv);
+ else
+ QMetaObject::metacall(object, QMetaObject::ResetProperty, idx + mobj->propertyOffset(), argv);
return true;
}
+/*!
+ \since 5.5
+
+ Reads the property's value from the given \a gadget. Returns the value
+ if it was able to read it; otherwise returns an invalid variant.
+
+ This function should only be used if this is a property of a Q_GADGET
+*/
+QVariant QMetaProperty::readOnGadget(const void *gadget) const
+{
+ Q_ASSERT(priv(mobj->d.data)->flags & PropertyAccessInStaticMetaCall && mobj->d.static_metacall);
+ return read(reinterpret_cast<const QObject*>(gadget));
+}
+
+/*!
+ \since 5.5
+
+ Writes \a value as the property's value to the given \a gadget. Returns
+ true if the write succeeded; otherwise returns \c false.
+
+ This function should only be used if this is a property of a Q_GADGET
+*/
+bool QMetaProperty::writeOnGadget(void *gadget, const QVariant &value) const
+{
+ Q_ASSERT(priv(mobj->d.data)->flags & PropertyAccessInStaticMetaCall && mobj->d.static_metacall);
+ return write(reinterpret_cast<QObject*>(gadget), value);
+}
+
+/*!
+ \since 5.5
+
+ Resets the property for the given \a gadget with a reset method.
+ Returns \c true if the reset worked; otherwise returns \c false.
+
+ Reset methods are optional; only a few properties support them.
+
+ This function should only be used if this is a property of a Q_GADGET
+*/
+bool QMetaProperty::resetOnGadget(void *gadget) const
+{
+ Q_ASSERT(priv(mobj->d.data)->flags & PropertyAccessInStaticMetaCall && mobj->d.static_metacall);
+ return reset(reinterpret_cast<QObject*>(gadget));
+}
/*!
Returns \c true if this property can be reset to a default value; otherwise
diff --git a/src/corelib/kernel/qmetaobject.h b/src/corelib/kernel/qmetaobject.h
index 2a874697c3..fdbcf5171d 100644
--- a/src/corelib/kernel/qmetaobject.h
+++ b/src/corelib/kernel/qmetaobject.h
@@ -1,6 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2014 Olivier Goffart <ogoffart@woboq.com>
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtCore module of the Qt Toolkit.
@@ -131,6 +132,34 @@ public:
val0, val1, val2, val3, val4, val5, val6, val7, val8, val9);
}
+ bool invokeOnGadget(void *gadget,
+ QGenericReturnArgument returnValue,
+ QGenericArgument val0 = QGenericArgument(0),
+ QGenericArgument val1 = QGenericArgument(),
+ QGenericArgument val2 = QGenericArgument(),
+ QGenericArgument val3 = QGenericArgument(),
+ QGenericArgument val4 = QGenericArgument(),
+ QGenericArgument val5 = QGenericArgument(),
+ QGenericArgument val6 = QGenericArgument(),
+ QGenericArgument val7 = QGenericArgument(),
+ QGenericArgument val8 = QGenericArgument(),
+ QGenericArgument val9 = QGenericArgument()) const;
+ inline bool invokeOnGadget(void *gadget,
+ QGenericArgument val0 = QGenericArgument(0),
+ QGenericArgument val1 = QGenericArgument(),
+ QGenericArgument val2 = QGenericArgument(),
+ QGenericArgument val3 = QGenericArgument(),
+ QGenericArgument val4 = QGenericArgument(),
+ QGenericArgument val5 = QGenericArgument(),
+ QGenericArgument val6 = QGenericArgument(),
+ QGenericArgument val7 = QGenericArgument(),
+ QGenericArgument val8 = QGenericArgument(),
+ QGenericArgument val9 = QGenericArgument()) const
+ {
+ return invokeOnGadget(gadget, QGenericReturnArgument(),
+ val0, val1, val2, val3, val4, val5, val6, val7, val8, val9);
+ }
+
inline bool isValid() const { return mobj != 0; }
#ifdef Q_QDOC
@@ -237,11 +266,17 @@ public:
bool write(QObject *obj, const QVariant &value) const;
bool reset(QObject *obj) const;
+ QVariant readOnGadget(const void *gadget) const;
+ bool writeOnGadget(void *gadget, const QVariant &value) const;
+ bool resetOnGadget(void *gadget) const;
+
bool hasStdCppSet() const;
inline bool isValid() const { return isReadable(); }
inline const QMetaObject *enclosingMetaObject() const { return mobj; }
private:
+ int registerPropertyType() const;
+
const QMetaObject *mobj;
uint handle;
int idx;
diff --git a/src/corelib/kernel/qmetaobject_p.h b/src/corelib/kernel/qmetaobject_p.h
index c08838e456..45fe56ec8a 100644
--- a/src/corelib/kernel/qmetaobject_p.h
+++ b/src/corelib/kernel/qmetaobject_p.h
@@ -1,6 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2014 Olivier Goffart <ogoffart@woboq.com>
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtCore module of the Qt Toolkit.
@@ -98,7 +99,8 @@ enum MethodFlags {
enum MetaObjectFlags {
DynamicMetaObject = 0x01,
- RequiresVariantMetaObject = 0x02
+ RequiresVariantMetaObject = 0x02,
+ PropertyAccessInStaticMetaCall = 0x04 // since Qt 5.5, property code is in the static metacall
};
enum MetaDataFlags {
diff --git a/src/corelib/kernel/qmetatype.cpp b/src/corelib/kernel/qmetatype.cpp
index 311648c33a..aae772ffeb 100644
--- a/src/corelib/kernel/qmetatype.cpp
+++ b/src/corelib/kernel/qmetatype.cpp
@@ -283,10 +283,11 @@ struct DefinedTypesFilter {
\value MovableType An instance of a type having this attribute can be safely moved by memcpy.
\omitvalue SharedPointerToQObject
\omitvalue IsEnumeration
- \omitvalue PointerToQObject
+ \value PointerToQObject This type is a pointer to a derived of QObject
\omitvalue WeakPointerToQObject
\omitvalue TrackingPointerToQObject
\omitvalue WasDeclaredAsMetaType
+ \value IsGadget This type is a Q_GADGET and it's corresponding QMetaObject can be accessed with QMetaType::metaObject Since 5.5.
*/
/*!
@@ -363,8 +364,19 @@ struct DefinedTypesFilter {
/*!
\fn const QMetaObject *QMetaType::metaObject() const
- \since 5.0
- \internal
+ \since 5.5
+
+ return a QMetaObject relative to this type.
+
+ If the type is a pointer type to a subclass of QObject, flags contains
+ QMetaType::PointerToQObject and this function returns the corresponding QMetaObject. This can
+ be used to in combinaison with QMetaObject::construct to create QObject of this type.
+
+ If the type is a Q_GADGET, flags contains QMetaType::IsGadget, and this function returns its
+ QMetaObject. This can be used to retrieve QMetaMethod and QMetaProperty and use them on a
+ pointer of this type. (given by QVariant::data for example)
+
+ \sa QMetaType::metaObjectForType(), QMetaType::flags()
*/
/*!
@@ -565,11 +577,19 @@ Q_GLOBAL_STATIC(QMetaTypeDebugStreamRegistry, customTypesDebugStreamRegistry)
/*!
\fn bool QMetaType::registerComparators()
\since 5.2
- Registers comparison operetarors for the user-registered type T. This requires T to have
+ Registers comparison operators for the user-registered type T. This requires T to have
both an operator== and an operator<.
Returns \c true if the registration succeeded, otherwise false.
*/
+/*!
+ \fn bool QMetaType::registerEqualsComparator()
+ \since 5.5
+ Registers equals operator for the user-registered type T. This requires T to have
+ an operator==.
+ Returns \c true if the registration succeeded, otherwise false.
+*/
+
#ifndef QT_NO_DEBUG_STREAM
/*!
\fn bool QMetaType::registerDebugStreamOperator()
@@ -675,7 +695,7 @@ bool QMetaType::convert(const void *from, int fromTypeId, void *to, int toTypeId
/*!
Compares the objects at \a lhs and \a rhs. Both objects need to be of type \a typeId.
\a result is set to less than, equal to or greater than zero, if \a lhs is less than, equal to
- or greater than \a rhs. Returns \c true, if the comparison succeeded, otherwiess false.
+ or greater than \a rhs. Returns \c true, if the comparison succeeded, otherwise \c false.
\since 5.2
*/
bool QMetaType::compare(const void *lhs, const void *rhs, int typeId, int* result)
@@ -686,8 +706,29 @@ bool QMetaType::compare(const void *lhs, const void *rhs, int typeId, int* resul
return false;
if (f->equals(f, lhs, rhs))
*result = 0;
- else
+ else if (f->lessThan)
*result = f->lessThan(f, lhs, rhs) ? -1 : 1;
+ else
+ return false;
+ return true;
+}
+
+/*!
+ Compares the objects at \a lhs and \a rhs. Both objects need to be of type \a typeId.
+ \a result is set to zero, if \a lhs equals to rhs. Returns \c true, if the comparison
+ succeeded, otherwise \c false.
+ \since 5.5
+*/
+bool QMetaType::equals(const void *lhs, const void *rhs, int typeId, int *result)
+{
+ const QtPrivate::AbstractComparatorFunction * const f
+ = customTypesComparatorRegistry()->function(typeId);
+ if (!f)
+ return false;
+ if (f->equals(f, lhs, rhs))
+ *result = 0;
+ else
+ *result = -1;
return true;
}
@@ -801,7 +842,7 @@ static inline int qMetaTypeStaticType(const char *typeName, int length)
{
int i = 0;
while (types[i].typeName && ((length != types[i].typeNameLength)
- || strcmp(typeName, types[i].typeName))) {
+ || memcmp(typeName, types[i].typeName, length))) {
++i;
}
return types[i].type;
@@ -821,7 +862,7 @@ static int qMetaTypeCustomType_unlocked(const char *typeName, int length)
for (int v = 0; v < ct->count(); ++v) {
const QCustomTypeInfo &customInfo = ct->at(v);
if ((length == customInfo.typeName.size())
- && !strcmp(typeName, customInfo.typeName.constData())) {
+ && !memcmp(typeName, customInfo.typeName.constData(), length)) {
if (customInfo.alias >= 0)
return customInfo.alias;
return v + QMetaType::User;
@@ -870,24 +911,43 @@ int QMetaType::registerType(const char *typeName, Deleter deleter,
/*!
- \internal
- \since 5.0
+ \internal
+ \since 5.0
+ \overload
+ Don't use, kept for binary compatibility
- Registers a user type for marshalling, with \a normalizedTypeName, a \a
- deleter, a \a creator, a \a destructor, a \a constructor, and
- a \a size. Returns the type's handle, or -1 if the type could
- not be registered. Note that normalizedTypeName is not checked for
- conformance with Qt's normalized format, so it must already
- conform.
- */
+ ### TODO Qt6: remove me
+*/
int QMetaType::registerNormalizedType(const NS(QByteArray) &normalizedTypeName, Deleter deleter,
Creator creator,
Destructor destructor,
Constructor constructor,
int size, TypeFlags flags, const QMetaObject *metaObject)
{
+ Q_UNUSED(deleter);
+ Q_UNUSED(creator);
+ return registerNormalizedType(normalizedTypeName, destructor, constructor, size, flags, metaObject);
+}
+
+
+/*!
+ \internal
+ \since 5.5
+
+ Registers a user type for marshalling, with \a normalizedTypeName,
+ a \a destructor, a \a constructor, and a \a size. Returns the type's
+ handle, or -1 if the type could not be registered.
+
+ \note normalizedTypeName is not checked for conformance with
+ Qt's normalized format, so it must already conform.
+ */
+int QMetaType::registerNormalizedType(const NS(QByteArray) &normalizedTypeName,
+ Destructor destructor,
+ Constructor constructor,
+ int size, TypeFlags flags, const QMetaObject *metaObject)
+{
QVector<QCustomTypeInfo> *ct = customTypes();
- if (!ct || normalizedTypeName.isEmpty() || !deleter || !creator || !destructor || !constructor)
+ if (!ct || normalizedTypeName.isEmpty() || !destructor || !constructor)
return -1;
int idx = qMetaTypeStaticType(normalizedTypeName.constData(),
@@ -902,8 +962,6 @@ int QMetaType::registerNormalizedType(const NS(QByteArray) &normalizedTypeName,
if (idx == UnknownType) {
QCustomTypeInfo inf;
inf.typeName = normalizedTypeName;
- inf.creator = creator;
- inf.deleter = deleter;
#ifndef QT_NO_DATASTREAM
inf.loadOp = 0;
inf.saveOp = 0;
@@ -1004,8 +1062,6 @@ int QMetaType::registerNormalizedTypedef(const NS(QByteArray) &normalizedTypeNam
QCustomTypeInfo inf;
inf.typeName = normalizedTypeName;
inf.alias = aliasId;
- inf.creator = 0;
- inf.deleter = 0;
ct->append(inf);
return aliasId;
}
@@ -1048,9 +1104,8 @@ bool QMetaType::isRegistered(int type)
Implementation of QMetaType::type().
*/
template <bool tryNormalizedType>
-static inline int qMetaTypeTypeImpl(const char *typeName)
+static inline int qMetaTypeTypeImpl(const char *typeName, int length)
{
- int length = qstrlen(typeName);
if (!length)
return QMetaType::UnknownType;
int type = qMetaTypeStaticType(typeName, length);
@@ -1080,7 +1135,7 @@ static inline int qMetaTypeTypeImpl(const char *typeName)
*/
int QMetaType::type(const char *typeName)
{
- return qMetaTypeTypeImpl</*tryNormalizedType=*/true>(typeName);
+ return qMetaTypeTypeImpl</*tryNormalizedType=*/true>(typeName, qstrlen(typeName));
}
/*!
@@ -1092,7 +1147,21 @@ int QMetaType::type(const char *typeName)
*/
int qMetaTypeTypeInternal(const char *typeName)
{
- return qMetaTypeTypeImpl</*tryNormalizedType=*/false>(typeName);
+ return qMetaTypeTypeImpl</*tryNormalizedType=*/false>(typeName, qstrlen(typeName));
+}
+
+/*!
+ \since 5.5
+ \overload
+
+ Returns a handle to the type called \a typeName, or 0 if there is
+ no such type.
+
+ \sa isRegistered(), typeName()
+*/
+int QMetaType::type(const QT_PREPEND_NAMESPACE(QByteArray) &typeName)
+{
+ return qMetaTypeTypeImpl</*tryNormalizedType=*/true>(typeName.constData(), typeName.size());
}
#ifndef QT_NO_DATASTREAM
@@ -1541,60 +1610,6 @@ bool QMetaType::load(QDataStream &stream, int type, void *data)
return true;
}
#endif // QT_NO_DATASTREAM
-namespace {
-class TypeCreator {
- template<typename T, bool IsAcceptedType = DefinedTypesFilter::Acceptor<T>::IsAccepted>
- struct CreatorImpl {
- static void *Create(const int /* type */, const void *copy)
- {
- // Using QMetaTypeFunctionHelper<T>::Create adds function call cost, even if it is a template (gcc).
- // This "copy" check is moved out from the switcher by compiler (at least by gcc)
- return copy ? new T(*static_cast<const T*>(copy)) : new T();
- }
- };
- template<typename T>
- struct CreatorImpl<T, /* IsAcceptedType = */ false> {
- static void *Create(const int type, const void *copy)
- {
- if (QModulesPrivate::QTypeModuleInfo<T>::IsGui) {
- if (Q_LIKELY(qMetaTypeGuiHelper))
- return qMetaTypeGuiHelper[type - QMetaType::FirstGuiType].creator(copy);
- }
- if (QModulesPrivate::QTypeModuleInfo<T>::IsWidget) {
- if (Q_LIKELY(qMetaTypeWidgetsHelper))
- return qMetaTypeWidgetsHelper[type - QMetaType::FirstWidgetsType].creator(copy);
- }
- // This point can be reached only for known types that definition is not available, for example
- // in bootstrap mode. We have no other choice then ignore it.
- return 0;
- }
- };
-public:
- TypeCreator(const int type)
- : m_type(type)
- {}
-
- template<typename T>
- void *delegate(const T *copy) { return CreatorImpl<T>::Create(m_type, copy); }
- void *delegate(const void*) { return 0; }
- void *delegate(const QMetaTypeSwitcher::UnknownType *) { return 0; }
- void *delegate(const QMetaTypeSwitcher::NotBuiltinType *copy)
- {
- QMetaType::Creator creator;
- const QVector<QCustomTypeInfo> * const ct = customTypes();
- {
- QReadLocker locker(customTypesLock());
- if (Q_UNLIKELY(m_type < QMetaType::User || !ct || ct->count() <= m_type - QMetaType::User))
- return 0;
- creator = ct->at(m_type - QMetaType::User).creator;
- }
- Q_ASSERT_X(creator, "void *QMetaType::create(int type, const void *copy)", "The type was not properly registered");
- return creator(copy);
- }
-private:
- const int m_type;
-};
-} // namespace
/*!
Returns a copy of \a copy, assuming it is of type \a type. If \a
@@ -1604,65 +1619,11 @@ private:
*/
void *QMetaType::create(int type, const void *copy)
{
- TypeCreator typeCreator(type);
- return QMetaTypeSwitcher::switcher<void*>(typeCreator, type, copy);
+ QMetaType info(type);
+ int size = info.sizeOf();
+ return info.construct(operator new(size), copy);
}
-namespace {
-class TypeDestroyer {
- template<typename T, bool IsAcceptedType = DefinedTypesFilter::Acceptor<T>::IsAccepted>
- struct DestroyerImpl {
- static void Destroy(const int /* type */, void *where) { QtMetaTypePrivate::QMetaTypeFunctionHelper<T>::Delete(where); }
- };
- template<typename T>
- struct DestroyerImpl<T, /* IsAcceptedType = */ false> {
- static void Destroy(const int type, void *where)
- {
- if (QModulesPrivate::QTypeModuleInfo<T>::IsGui) {
- if (Q_LIKELY(qMetaTypeGuiHelper))
- qMetaTypeGuiHelper[type - QMetaType::FirstGuiType].deleter(where);
- return;
- }
- if (QModulesPrivate::QTypeModuleInfo<T>::IsWidget) {
- if (Q_LIKELY(qMetaTypeWidgetsHelper))
- qMetaTypeWidgetsHelper[type - QMetaType::FirstWidgetsType].deleter(where);
- return;
- }
- // This point can be reached only for known types that definition is not available, for example
- // in bootstrap mode. We have no other choice then ignore it.
- }
- };
-public:
- TypeDestroyer(const int type)
- : m_type(type)
- {}
-
- template<typename T>
- void delegate(const T *where) { DestroyerImpl<T>::Destroy(m_type, const_cast<T*>(where)); }
- void delegate(const void *) {}
- void delegate(const QMetaTypeSwitcher::UnknownType*) {}
- void delegate(const QMetaTypeSwitcher::NotBuiltinType *where) { customTypeDestroyer(m_type, (void*)where); }
-
-private:
- static void customTypeDestroyer(const int type, void *where)
- {
- QMetaType::Destructor deleter;
- const QVector<QCustomTypeInfo> * const ct = customTypes();
- {
- QReadLocker locker(customTypesLock());
- if (Q_UNLIKELY(type < QMetaType::User || !ct || ct->count() <= type - QMetaType::User))
- return;
- deleter = ct->at(type - QMetaType::User).deleter;
- }
- Q_ASSERT_X(deleter, "void QMetaType::destroy(int type, void *data)", "The type was not properly registered");
- deleter(where);
- }
-
- const int m_type;
-};
-} // namespace
-
-
/*!
Destroys the \a data, assuming it is of the \a type given.
@@ -1670,8 +1631,9 @@ private:
*/
void QMetaType::destroy(int type, void *data)
{
- TypeDestroyer deleter(type);
- QMetaTypeSwitcher::switcher<void>(deleter, type, data);
+ QMetaType info(type);
+ info.destruct(data);
+ operator delete(data);
}
namespace {
@@ -1969,8 +1931,27 @@ public:
MetaObject(const int type)
: m_type(type)
{}
+
+ template<typename T, bool IsAcceptedType = DefinedTypesFilter::Acceptor<T>::IsAccepted>
+ struct MetaObjectImpl
+ {
+ static const QMetaObject *MetaObject(int /*type*/)
+ { return QtPrivate::MetaObjectForType<T>::value(); }
+ };
template<typename T>
- const QMetaObject *delegate(const T*) { return QtPrivate::MetaObjectForType<T>::value(); }
+ struct MetaObjectImpl<T, /* IsAcceptedType = */ false>
+ {
+ static const QMetaObject *MetaObject(int type) {
+ if (QModulesPrivate::QTypeModuleInfo<T>::IsGui)
+ return Q_LIKELY(qMetaTypeGuiHelper) ? qMetaTypeGuiHelper[type - QMetaType::FirstGuiType].metaObject : 0;
+ if (QModulesPrivate::QTypeModuleInfo<T>::IsWidget)
+ return Q_LIKELY(qMetaTypeWidgetsHelper) ? qMetaTypeWidgetsHelper[type - QMetaType::FirstWidgetsType].metaObject : 0;
+ return 0;
+ }
+ };
+
+ template <typename T>
+ const QMetaObject *delegate(const T *) { return MetaObjectImpl<T>::MetaObject(m_type); }
const QMetaObject *delegate(const void*) { return 0; }
const QMetaObject *delegate(const QMetaTypeSwitcher::UnknownType*) { return 0; }
const QMetaObject *delegate(const QMetaTypeSwitcher::NotBuiltinType*) { return customMetaObject(m_type); }
@@ -1993,7 +1974,9 @@ private:
/*!
\since 5.0
- Returns QMetaObject of a given \a type, if the \a type is a pointer to type derived from QObject.
+ returns QMetaType::metaObject for \a type
+
+ \sa metaObject()
*/
const QMetaObject *QMetaType::metaObjectForType(int type)
{
@@ -2200,10 +2183,10 @@ QMetaType QMetaType::typeInfo(const int type)
{
TypeInfo typeInfo(type);
QMetaTypeSwitcher::switcher<void>(typeInfo, type, 0);
- return typeInfo.info.creator ? QMetaType(QMetaType::NoExtensionFlags
+ return typeInfo.info.constructor ? QMetaType(static_cast<ExtensionFlag>(QMetaType::CreateEx | QMetaType::DestroyEx)
, static_cast<const QMetaTypeInterface *>(0) // typeInfo::info is a temporary variable, we can't return address of it.
- , typeInfo.info.creator
- , typeInfo.info.deleter
+ , 0 // unused
+ , 0 // unused
, typeInfo.info.saveOp
, typeInfo.info.loadOp
, typeInfo.info.constructor
@@ -2245,8 +2228,8 @@ QMetaType::QMetaType(const int typeId)
Copy constructs a QMetaType object.
*/
QMetaType::QMetaType(const QMetaType &other)
- : m_creator(other.m_creator)
- , m_deleter(other.m_deleter)
+ : m_creator_unused(other.m_creator_unused)
+ , m_deleter_unused(other.m_deleter_unused)
, m_saveOp(other.m_saveOp)
, m_loadOp(other.m_loadOp)
, m_constructor(other.m_constructor)
@@ -2261,8 +2244,8 @@ QMetaType::QMetaType(const QMetaType &other)
QMetaType &QMetaType::operator =(const QMetaType &other)
{
- m_creator = other.m_creator;
- m_deleter = other.m_deleter;
+ m_creator_unused = other.m_creator_unused;
+ m_deleter_unused = other.m_deleter_unused;
m_saveOp = other.m_saveOp;
m_loadOp = other.m_loadOp;
m_constructor = other.m_constructor;
@@ -2311,11 +2294,14 @@ void QMetaType::dtor()
Method used for future binary compatible extensions. The function may be called
during QMetaType::create to force library call from inlined code.
+
+ ### TODO Qt6 remove the extension
*/
void *QMetaType::createExtended(const void *copy) const
{
- Q_UNUSED(copy);
- return 0;
+ if (m_typeId == QMetaType::UnknownType)
+ return 0;
+ return m_constructor(operator new(m_size), copy);
}
/*!
@@ -2324,10 +2310,13 @@ void *QMetaType::createExtended(const void *copy) const
Method used for future binary compatible extensions. The function may be called
during QMetaType::destroy to force library call from inlined code.
+
+ ### TODO Qt6 remove the extension
*/
void QMetaType::destroyExtended(void *data) const
{
- Q_UNUSED(data);
+ m_destructor(data);
+ operator delete(data);
}
/*!
diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h
index 7a45e21253..2ff695b833 100644
--- a/src/corelib/kernel/qmetatype.h
+++ b/src/corelib/kernel/qmetatype.h
@@ -1,6 +1,7 @@
/****************************************************************************
**
-** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2014 Olivier Goffart <ogoffart@woboq.com>
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtCore module of the Qt Toolkit.
@@ -62,6 +63,7 @@ template <typename T>
inline Q_DECL_CONSTEXPR int qMetaTypeId();
// F is a tuple: (QMetaType::TypeName, QMetaType::TypeNameID, RealType)
+// ### Qt6: reorder the types to match the C++ integral type ranking
#define QT_FOR_EACH_STATIC_PRIMITIVE_TYPE(F)\
F(Void, 43, void) \
F(Bool, 1, bool) \
@@ -289,6 +291,24 @@ struct BuiltInComparatorFunction : public AbstractComparatorFunction
}
};
+template<typename T>
+struct BuiltInEqualsComparatorFunction : public AbstractComparatorFunction
+{
+ BuiltInEqualsComparatorFunction()
+ : AbstractComparatorFunction(0, equals, destroy) {}
+ static bool equals(const AbstractComparatorFunction *, const void *l, const void *r)
+ {
+ const T *lhs = static_cast<const T *>(l);
+ const T *rhs = static_cast<const T *>(r);
+ return *lhs == *rhs;
+ }
+
+ static void destroy(AbstractComparatorFunction *_this)
+ {
+ delete static_cast<BuiltInEqualsComparatorFunction *>(_this);
+ }
+};
+
struct AbstractConverterFunction
{
typedef bool (*Converter)(const AbstractConverterFunction *, const void *, void*);
@@ -435,7 +455,8 @@ public:
SharedPointerToQObject = 0x20,
WeakPointerToQObject = 0x40,
TrackingPointerToQObject = 0x80,
- WasDeclaredAsMetaType = 0x100
+ WasDeclaredAsMetaType = 0x100,
+ IsGadget = 0x200
};
Q_DECLARE_FLAGS(TypeFlags, TypeFlag)
@@ -469,9 +490,19 @@ public:
int size,
QMetaType::TypeFlags flags,
const QMetaObject *metaObject);
+ static int registerNormalizedType(const QT_PREPEND_NAMESPACE(QByteArray) &normalizedTypeName, Destructor destructor,
+ Constructor constructor,
+ int size,
+ QMetaType::TypeFlags flags,
+ const QMetaObject *metaObject);
static int registerTypedef(const char *typeName, int aliasId);
static int registerNormalizedTypedef(const QT_PREPEND_NAMESPACE(QByteArray) &normalizedTypeName, int aliasId);
static int type(const char *typeName);
+#ifndef Q_QDOC
+ static int type(const QT_PREPEND_NAMESPACE(QByteArray) &typeName);
+#else
+ static int type(const QByteArray &typeName);
+#endif
static const char *typeName(int type);
static int sizeOf(int type);
static TypeFlags typeFlags(int type);
@@ -517,6 +548,16 @@ public:
return registerComparatorFunction( &f, typeId);
}
template<typename T>
+ static bool registerEqualsComparator()
+ {
+ Q_STATIC_ASSERT_X((!QMetaTypeId2<T>::IsBuiltIn),
+ "QMetaType::registerEqualsComparator: The type must be a custom type.");
+ const int typeId = qMetaTypeId<T>();
+ static const QtPrivate::BuiltInEqualsComparatorFunction<T> f;
+ return registerComparatorFunction( &f, typeId);
+ }
+
+ template<typename T>
static bool hasRegisteredComparators()
{
return hasRegisteredComparators(qMetaTypeId<T>());
@@ -597,6 +638,7 @@ public:
static bool convert(const void *from, int fromTypeId, void *to, int toTypeId);
static bool compare(const void *lhs, const void *rhs, int typeId, int* result);
+ static bool equals(const void *lhs, const void *rhs, int typeId, int* result);
static bool debugStream(QDebug& dbg, const void *rhs, int typeId);
template<typename From, typename To>
@@ -640,16 +682,13 @@ private:
static bool registerDebugStreamOperatorFunction(const QtPrivate::AbstractDebugStreamFunction *f, int type);
#endif
+// ### Qt6: FIXME: Remove the special Q_CC_MSVC handling, it was introduced to maintain BC.
#if !defined(Q_NO_TEMPLATE_FRIENDS) && !defined(Q_CC_MSVC)
#ifndef Q_QDOC
- template<typename T>
- friend bool qRegisterSequentialConverter();
template<typename, bool> friend struct QtPrivate::ValueTypeIsMetaType;
template<typename, typename> friend struct QtPrivate::ConverterMemberFunction;
template<typename, typename> friend struct QtPrivate::ConverterMemberFunctionOk;
template<typename, typename, typename> friend struct QtPrivate::ConverterFunctor;
- template<typename T>
- friend bool qRegisterAssociativeConverter();
template<typename, bool> friend struct QtPrivate::AssociativeValueTypeIsMetaType;
template<typename, bool> friend struct QtPrivate::IsMetaTypePair;
template<typename, typename> friend struct QtPrivate::MetaTypeSmartPointerHelper;
@@ -661,8 +700,8 @@ public:
static void unregisterConverterFunction(int from, int to);
private:
- Creator m_creator;
- Deleter m_deleter;
+ Creator m_creator_unused;
+ Deleter m_deleter_unused;
SaveOperator m_saveOp;
LoadOperator m_loadOp;
Constructor m_constructor;
@@ -702,18 +741,6 @@ ConverterFunctor<From, To, UnaryFunction>::~ConverterFunctor()
namespace QtMetaTypePrivate {
template <typename T, bool Accepted = true>
struct QMetaTypeFunctionHelper {
- static void Delete(void *t)
- {
- delete static_cast<T*>(t);
- }
-
- static void *Create(const void *t)
- {
- if (t)
- return new T(*static_cast<const T*>(t));
- return new T();
- }
-
static void Destruct(void *t)
{
Q_UNUSED(t) // Silence MSVC that warns for POD types.
@@ -741,8 +768,6 @@ struct QMetaTypeFunctionHelper {
template <typename T>
struct QMetaTypeFunctionHelper<T, /* Accepted */ false> {
- static void Delete(void *) {}
- static void *Create(const void *) { return 0; }
static void Destruct(void *) {}
static void *Construct(void *, const void *) { return 0; }
#ifndef QT_NO_DATASTREAM
@@ -1330,14 +1355,27 @@ namespace QtPrivate
enum { Value = sizeof(checkType(static_cast<T*>(0))) == sizeof(yes_type) };
};
- template<typename T, bool = IsPointerToTypeDerivedFromQObject<T>::Value>
+ template<typename T>
+ struct IsGadgetHelper
+ {
+ template<typename X> static typename X::QtGadgetHelper *checkType(X*);
+ static char checkType(void*);
+ enum { Value = sizeof(checkType(static_cast<T*>(0))) == sizeof(void*) };
+ };
+
+ template<typename T, typename Enable = void>
struct MetaObjectForType
{
static inline const QMetaObject *value() { return 0; }
};
template<typename T>
- struct MetaObjectForType<T*, /* isPointerToTypeDerivedFromQObject = */ true>
+ struct MetaObjectForType<T*, typename QEnableIf<IsPointerToTypeDerivedFromQObject<T*>::Value>::Type>
+ {
+ static inline const QMetaObject *value() { return &T::staticMetaObject; }
+ };
+ template<typename T>
+ struct MetaObjectForType<T, typename QEnableIf<IsGadgetHelper<T>::Value>::Type>
{
static inline const QMetaObject *value() { return &T::staticMetaObject; }
};
@@ -1512,6 +1550,9 @@ struct QMetaTypeId2
template <typename T>
struct QMetaTypeId2<const T&> : QMetaTypeId2<T> {};
+template <typename T>
+struct QMetaTypeId2<T&> { enum {Defined = false }; };
+
namespace QtPrivate {
template <typename T, bool Defined = QMetaTypeId2<T>::Defined>
struct QMetaTypeIdHelper {
@@ -1545,6 +1586,7 @@ namespace QtPrivate {
| (IsWeakPointerToTypeDerivedFromQObject<T>::Value ? QMetaType::WeakPointerToQObject : 0)
| (IsTrackingPointerToTypeDerivedFromQObject<T>::Value ? QMetaType::TrackingPointerToQObject : 0)
| (Q_IS_ENUM(T) ? QMetaType::IsEnumeration : 0)
+ | (IsGadgetHelper<T>::Value ? QMetaType::IsGadget : 0)
};
};
@@ -1594,8 +1636,6 @@ int qRegisterNormalizedMetaType(const QT_PREPEND_NAMESPACE(QByteArray) &normaliz
flags |= QMetaType::WasDeclaredAsMetaType;
const int id = QMetaType::registerNormalizedType(normalizedTypeName,
- QtMetaTypePrivate::QMetaTypeFunctionHelper<T>::Delete,
- QtMetaTypePrivate::QMetaTypeFunctionHelper<T>::Create,
QtMetaTypePrivate::QMetaTypeFunctionHelper<T>::Destruct,
QtMetaTypePrivate::QMetaTypeFunctionHelper<T>::Construct,
int(sizeof(T)),
@@ -1964,8 +2004,8 @@ inline QMetaType::QMetaType(const ExtensionFlag extensionFlags, const QMetaTypeI
uint theTypeFlags,
int typeId,
const QMetaObject *_metaObject)
- : m_creator(creator)
- , m_deleter(deleter)
+ : m_creator_unused(creator)
+ , m_deleter_unused(deleter)
, m_saveOp(saveOp)
, m_loadOp(loadOp)
, m_constructor(constructor)
@@ -1999,16 +2039,14 @@ inline bool QMetaType::isRegistered() const
inline void *QMetaType::create(const void *copy) const
{
- if (Q_UNLIKELY(isExtended(CreateEx)))
- return createExtended(copy);
- return m_creator(copy);
+ // ### TODO Qt6 remove the extension
+ return createExtended(copy);
}
inline void QMetaType::destroy(void *data) const
{
- if (Q_UNLIKELY(isExtended(DestroyEx)))
- return destroyExtended(data);
- m_deleter(data);
+ // ### TODO Qt6 remove the extension
+ destroyExtended(data);
}
inline void *QMetaType::construct(void *where, const void *copy) const
diff --git a/src/corelib/kernel/qmetatype_p.h b/src/corelib/kernel/qmetatype_p.h
index c75d5ee792..97c0a08729 100644
--- a/src/corelib/kernel/qmetatype_p.h
+++ b/src/corelib/kernel/qmetatype_p.h
@@ -114,8 +114,6 @@ QT_FOR_EACH_STATIC_WIDGETS_CLASS(QT_DECLARE_WIDGETS_MODULE_TYPES_ITER)
class QMetaTypeInterface
{
public:
- QMetaType::Creator creator;
- QMetaType::Deleter deleter;
QMetaType::SaveOperator saveOp;
QMetaType::LoadOperator loadOp;
QMetaType::Constructor constructor;
@@ -148,8 +146,6 @@ public:
#define QT_METATYPE_INTERFACE_INIT_IMPL(Type, DATASTREAM_DELEGATE) \
{ \
- /*creator*/(QtMetaTypePrivate::QMetaTypeFunctionHelper<Type, QtMetaTypePrivate::TypeDefinition<Type>::IsAvailable>::Create), \
- /*deleter*/(QtMetaTypePrivate::QMetaTypeFunctionHelper<Type, QtMetaTypePrivate::TypeDefinition<Type>::IsAvailable>::Delete), \
DATASTREAM_DELEGATE(Type) \
/*constructor*/(QtMetaTypePrivate::QMetaTypeFunctionHelper<Type, QtMetaTypePrivate::TypeDefinition<Type>::IsAvailable>::Construct), \
/*destructor*/(QtMetaTypePrivate::QMetaTypeFunctionHelper<Type, QtMetaTypePrivate::TypeDefinition<Type>::IsAvailable>::Destruct), \
@@ -173,8 +169,6 @@ public:
#define QT_METATYPE_INTERFACE_INIT_NO_DATASTREAM(Type) QT_METATYPE_INTERFACE_INIT_IMPL(Type, QT_METATYPE_INTERFACE_INIT_EMPTY_DATASTREAM_IMPL)
#define QT_METATYPE_INTERFACE_INIT_EMPTY() \
{ \
- /*creator*/ 0, \
- /*deleter*/ 0, \
QT_METATYPE_INTERFACE_INIT_EMPTY_DATASTREAM_IMPL(void) \
/*constructor*/ 0, \
/*destructor*/ 0, \
diff --git a/src/corelib/kernel/qmimedata.cpp b/src/corelib/kernel/qmimedata.cpp
index 15fdf57747..45aec88429 100644
--- a/src/corelib/kernel/qmimedata.cpp
+++ b/src/corelib/kernel/qmimedata.cpp
@@ -286,6 +286,11 @@ QVariant QMimeDataPrivate::retrieveTypedData(const QString &format, QVariant::Ty
The \c value declaration of each format describes the way in which the
data is encoded.
+ In some cases (e.g. dropping multiple email attachments), multiple data
+ values are available. They can be accessed by adding an \c index value:
+
+ \snippet code/src_corelib_kernel_qmimedata.cpp 8
+
On Windows, the MIME format does not always map directly to the
clipboard formats. Qt provides QWinMime to map clipboard
formats to open-standard MIME formats. Similarly, the
diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp
index a1a04b3ce5..84aa2e3184 100644
--- a/src/corelib/kernel/qobject.cpp
+++ b/src/corelib/kernel/qobject.cpp
@@ -2661,8 +2661,8 @@ QMetaObject::Connection QObject::connect(const QObject *sender, const char *sign
const char *method_arg = method;
++method; // skip code
- QByteArray methodName;
QArgumentTypeArray methodTypes;
+ QByteArray methodName = QMetaObjectPrivate::decodeMethodSignature(method, methodTypes);
const QMetaObject *rmeta = receiver->metaObject();
int method_index_relative = -1;
Q_ASSERT(QMetaObjectPrivate::get(rmeta)->revision >= 7);
@@ -4093,14 +4093,16 @@ QObjectUserData* QObject::userData(uint id) const
#ifndef QT_NO_DEBUG_STREAM
-QDebug operator<<(QDebug dbg, const QObject *o) {
+QDebug operator<<(QDebug dbg, const QObject *o)
+{
+ QDebugStateSaver saver(dbg);
if (!o)
- return dbg << "QObject(0x0) ";
+ return dbg << "QObject(0x0)";
dbg.nospace() << o->metaObject()->className() << '(' << (void *)o;
if (!o->objectName().isEmpty())
dbg << ", name = " << o->objectName();
dbg << ')';
- return dbg.space();
+ return dbg;
}
#endif
diff --git a/src/corelib/kernel/qobject_p.h b/src/corelib/kernel/qobject_p.h
index ba26ff7bfb..b663bc8d8c 100644
--- a/src/corelib/kernel/qobject_p.h
+++ b/src/corelib/kernel/qobject_p.h
@@ -414,9 +414,9 @@ struct Q_CORE_EXPORT QDynamicMetaObjectData
struct Q_CORE_EXPORT QAbstractDynamicMetaObject : public QDynamicMetaObjectData, public QMetaObject
{
- virtual QAbstractDynamicMetaObject *toDynamicMetaObject(QObject *) { return this; }
+ virtual QAbstractDynamicMetaObject *toDynamicMetaObject(QObject *) Q_DECL_OVERRIDE { return this; }
virtual int createProperty(const char *, const char *) { return -1; }
- virtual int metaCall(QObject *, QMetaObject::Call c, int _id, void **a)
+ virtual int metaCall(QObject *, QMetaObject::Call c, int _id, void **a) Q_DECL_OVERRIDE
{ return metaCall(c, _id, a); }
virtual int metaCall(QMetaObject::Call, int _id, void **) { return _id; } // Compat overload
};
diff --git a/src/corelib/kernel/qobjectdefs.h b/src/corelib/kernel/qobjectdefs.h
index 25e43d0ca0..af99546f04 100644
--- a/src/corelib/kernel/qobjectdefs.h
+++ b/src/corelib/kernel/qobjectdefs.h
@@ -84,6 +84,10 @@ class QString;
#define Q_OVERRIDE(text)
#define Q_ENUMS(x)
#define Q_FLAGS(x)
+#define Q_ENUM(ENUM) \
+ friend Q_DECL_CONSTEXPR const QMetaObject *qt_getEnumMetaObject(ENUM) Q_DECL_NOEXCEPT { return &staticMetaObject; } \
+ friend Q_DECL_CONSTEXPR const char *qt_getEnumName(ENUM) Q_DECL_NOEXCEPT { return #ENUM; }
+#define Q_FLAG(ENUM) Q_ENUM(ENUM)
#define Q_SCRIPTABLE
#define Q_INVOKABLE
#define Q_SIGNAL
@@ -138,15 +142,24 @@ inline void qYouForgotTheQ_OBJECT_Macro(T1, T2) {}
# define Q_DECL_HIDDEN_STATIC_METACALL Q_DECL_HIDDEN
#endif
+#if defined(Q_CC_CLANG) && Q_CC_CLANG >= 306
+# define Q_OBJECT_NO_OVERRIDE_WARNING QT_WARNING_DISABLE_CLANG("-Winconsistent-missing-override")
+#else
+# define Q_OBJECT_NO_OVERRIDE_WARNING
+#endif
+
/* qmake ignore Q_OBJECT */
#define Q_OBJECT \
public: \
Q_OBJECT_CHECK \
+ QT_WARNING_PUSH \
+ Q_OBJECT_NO_OVERRIDE_WARNING \
static const QMetaObject staticMetaObject; \
virtual const QMetaObject *metaObject() const; \
virtual void *qt_metacast(const char *); \
- QT_TR_FUNCTIONS \
virtual int qt_metacall(QMetaObject::Call, int, void **); \
+ QT_WARNING_POP \
+ QT_TR_FUNCTIONS \
private: \
Q_DECL_HIDDEN_STATIC_METACALL static void qt_static_metacall(QObject *, QMetaObject::Call, int, void **); \
struct QPrivateSignal {};
@@ -159,7 +172,9 @@ private: \
#define Q_GADGET \
public: \
static const QMetaObject staticMetaObject; \
-private:
+ typedef void QtGadgetHelper; \
+private: \
+ Q_DECL_HIDDEN_STATIC_METACALL static void qt_static_metacall(QObject *, QMetaObject::Call, int, void **);
#endif // QT_NO_META_MACROS
#else // Q_MOC_RUN
@@ -175,6 +190,8 @@ private:
#define Q_OVERRIDE(text) Q_OVERRIDE(text)
#define Q_ENUMS(x) Q_ENUMS(x)
#define Q_FLAGS(x) Q_FLAGS(x)
+#define Q_ENUM(x) Q_ENUM(x)
+#define Q_FLAGS(x) Q_FLAGS(x)
/* qmake ignore Q_OBJECT */
#define Q_OBJECT Q_OBJECT
/* qmake ignore Q_OBJECT */
diff --git a/src/corelib/kernel/qsharedmemory.cpp b/src/corelib/kernel/qsharedmemory.cpp
index 22d1148677..c5452fe8ab 100644
--- a/src/corelib/kernel/qsharedmemory.cpp
+++ b/src/corelib/kernel/qsharedmemory.cpp
@@ -69,6 +69,8 @@ QSharedMemoryPrivate::makePlatformSafeKey(const QString &key,
result.append(QLatin1String(hex));
#ifdef Q_OS_WIN
return result;
+#elif defined(QT_POSIX_IPC)
+ return QLatin1Char('/') + result;
#else
return QDir::tempPath() + QLatin1Char('/') + result;
#endif
diff --git a/src/corelib/kernel/qsharedmemory_p.h b/src/corelib/kernel/qsharedmemory_p.h
index 0e2f40bf8c..f1e29b9741 100644
--- a/src/corelib/kernel/qsharedmemory_p.h
+++ b/src/corelib/kernel/qsharedmemory_p.h
@@ -122,6 +122,8 @@ public:
const QString &prefix = QLatin1String("qipc_sharedmemory_"));
#ifdef Q_OS_WIN
Qt::HANDLE handle();
+#elif defined(QT_POSIX_IPC)
+ int handle();
#else
key_t handle();
#endif
@@ -147,6 +149,8 @@ public:
private:
#ifdef Q_OS_WIN
Qt::HANDLE hand;
+#elif defined(QT_POSIX_IPC)
+ int hand;
#else
key_t unix_key;
#endif
diff --git a/src/corelib/kernel/qsharedmemory_posix.cpp b/src/corelib/kernel/qsharedmemory_posix.cpp
new file mode 100644
index 0000000000..0015bda8d9
--- /dev/null
+++ b/src/corelib/kernel/qsharedmemory_posix.cpp
@@ -0,0 +1,231 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Konstantin Ritt <ritt.ks@gmail.com>
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Tobias Koenig <tobias.koenig@kdab.com>
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qplatformdefs.h"
+
+#include "qsharedmemory.h"
+#include "qsharedmemory_p.h"
+#include "qsystemsemaphore.h"
+#include <qfile.h>
+
+#include <errno.h>
+
+#ifdef QT_POSIX_IPC
+
+#ifndef QT_NO_SHAREDMEMORY
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/mman.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+
+#include "private/qcore_unix_p.h"
+
+QT_BEGIN_NAMESPACE
+
+int QSharedMemoryPrivate::handle()
+{
+ // don't allow making handles on empty keys
+ const QString safeKey = makePlatformSafeKey(key);
+ if (safeKey.isEmpty()) {
+ errorString = QSharedMemory::tr("%1: key is empty").arg(QLatin1String("QSharedMemory::handle"));
+ error = QSharedMemory::KeyError;
+ return 0;
+ }
+
+ return 1;
+}
+
+bool QSharedMemoryPrivate::cleanHandle()
+{
+ qt_safe_close(hand);
+ hand = -1;
+
+ return true;
+}
+
+bool QSharedMemoryPrivate::create(int size)
+{
+ if (!handle())
+ return false;
+
+ const QByteArray shmName = QFile::encodeName(makePlatformSafeKey(key));
+
+ int fd;
+#ifdef O_CLOEXEC
+ // First try with O_CLOEXEC flag, if that fails, fall back to normal flags
+ EINTR_LOOP(fd, ::shm_open(shmName.constData(), O_RDWR | O_CREAT | O_EXCL | O_CLOEXEC, 0600));
+ if (fd == -1)
+ EINTR_LOOP(fd, ::shm_open(shmName.constData(), O_RDWR | O_CREAT | O_EXCL, 0600));
+#else
+ EINTR_LOOP(fd, ::shm_open(shmName.constData(), O_RDWR | O_CREAT | O_EXCL, 0600));
+#endif
+ if (fd == -1) {
+ const int errorNumber = errno;
+ const QString function = QLatin1String("QSharedMemory::create");
+ switch (errorNumber) {
+ case ENAMETOOLONG:
+ case EINVAL:
+ errorString = QSharedMemory::tr("%1: bad name").arg(function);
+ error = QSharedMemory::KeyError;
+ break;
+ default:
+ setErrorString(function);
+ }
+ return false;
+ }
+
+ // the size may only be set once
+ int ret;
+ EINTR_LOOP(ret, QT_FTRUNCATE(fd, size));
+ if (ret == -1) {
+ setErrorString(QLatin1String("QSharedMemory::create (ftruncate)"));
+ qt_safe_close(fd);
+ return false;
+ }
+
+ qt_safe_close(fd);
+
+ return true;
+}
+
+bool QSharedMemoryPrivate::attach(QSharedMemory::AccessMode mode)
+{
+ const QByteArray shmName = QFile::encodeName(makePlatformSafeKey(key));
+
+ const int oflag = (mode == QSharedMemory::ReadOnly ? O_RDONLY : O_RDWR);
+ const mode_t omode = (mode == QSharedMemory::ReadOnly ? 0400 : 0600);
+
+#ifdef O_CLOEXEC
+ // First try with O_CLOEXEC flag, if that fails, fall back to normal flags
+ EINTR_LOOP(hand, ::shm_open(shmName.constData(), oflag | O_CLOEXEC, omode));
+ if (hand == -1)
+ EINTR_LOOP(hand, ::shm_open(shmName.constData(), oflag, omode));
+#else
+ EINTR_LOOP(hand, ::shm_open(shmName.constData(), oflag, omode));
+#endif
+ if (hand == -1) {
+ const int errorNumber = errno;
+ const QString function = QLatin1String("QSharedMemory::attach (shm_open)");
+ switch (errorNumber) {
+ case ENAMETOOLONG:
+ case EINVAL:
+ errorString = QSharedMemory::tr("%1: bad name").arg(function);
+ error = QSharedMemory::KeyError;
+ break;
+ default:
+ setErrorString(function);
+ }
+ hand = -1;
+ return false;
+ }
+
+ // grab the size
+ QT_STATBUF st;
+ if (QT_FSTAT(hand, &st) == -1) {
+ setErrorString(QLatin1String("QSharedMemory::attach (fstat)"));
+ cleanHandle();
+ return false;
+ }
+ size = st.st_size;
+
+ // grab the memory
+ const int mprot = (mode == QSharedMemory::ReadOnly ? PROT_READ : PROT_READ | PROT_WRITE);
+ memory = QT_MMAP(0, size, mprot, MAP_SHARED, hand, 0);
+ if (memory == MAP_FAILED || !memory) {
+ setErrorString(QLatin1String("QSharedMemory::attach (mmap)"));
+ cleanHandle();
+ memory = 0;
+ size = 0;
+ return false;
+ }
+
+#ifdef F_ADD_SEALS
+ // Make sure the shared memory region will not shrink
+ // otherwise someone could cause SIGBUS on us.
+ // (see http://lwn.net/Articles/594919/)
+ fcntl(hand, F_ADD_SEALS, F_SEAL_SHRINK);
+#endif
+
+ return true;
+}
+
+bool QSharedMemoryPrivate::detach()
+{
+ // detach from the memory segment
+ if (::munmap(memory, size) == -1) {
+ setErrorString(QLatin1String("QSharedMemory::detach (munmap)"));
+ return false;
+ }
+ memory = 0;
+ size = 0;
+
+#ifdef Q_OS_QNX
+ // On QNX the st_nlink field of struct stat contains the number of
+ // active shm_open() connections to the shared memory file, so we
+ // can use it to automatically clean up the file once the last
+ // user has detached from it.
+
+ // get the number of current attachments
+ int shm_nattch = 0;
+ QT_STATBUF st;
+ if (QT_FSTAT(hand, &st) == 0) {
+ // subtract 2 from linkcount: one for our own open and one for the dir entry
+ shm_nattch = st.st_nlink - 2;
+ }
+
+ cleanHandle();
+
+ // if there are no attachments then unlink the shared memory
+ if (shm_nattch == 0) {
+ const QByteArray shmName = QFile::encodeName(makePlatformSafeKey(key));
+ if (::shm_unlink(shmName.constData()) == -1 && errno != ENOENT)
+ setErrorString(QLatin1String("QSharedMemory::detach (shm_unlink)"));
+ }
+#else
+ // On non-QNX systems (tested Linux and Haiku), the st_nlink field is always 1,
+ // so we'll simply leak the shared memory files.
+ cleanHandle();
+#endif
+
+ return true;
+}
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_SHAREDMEMORY
+
+#endif // QT_POSIX_IPC
diff --git a/src/corelib/kernel/qsharedmemory_systemv.cpp b/src/corelib/kernel/qsharedmemory_systemv.cpp
new file mode 100644
index 0000000000..b3fe300a43
--- /dev/null
+++ b/src/corelib/kernel/qsharedmemory_systemv.cpp
@@ -0,0 +1,254 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qplatformdefs.h"
+
+#include "qsharedmemory.h"
+#include "qsharedmemory_p.h"
+#include "qsystemsemaphore.h"
+#include <qdir.h>
+#include <qdebug.h>
+
+#include <errno.h>
+
+#ifndef QT_POSIX_IPC
+
+#ifndef QT_NO_SHAREDMEMORY
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/shm.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#endif //QT_NO_SHAREDMEMORY
+
+#include "private/qcore_unix_p.h"
+
+#ifndef QT_NO_SHAREDMEMORY
+QT_BEGIN_NAMESPACE
+
+/*!
+ \internal
+
+ If not already made create the handle used for accessing the shared memory.
+*/
+key_t QSharedMemoryPrivate::handle()
+{
+ // already made
+ if (unix_key)
+ return unix_key;
+
+ // don't allow making handles on empty keys
+ if (nativeKey.isEmpty()) {
+ errorString = QSharedMemory::tr("%1: key is empty").arg(QLatin1String("QSharedMemory::handle:"));
+ error = QSharedMemory::KeyError;
+ return 0;
+ }
+
+ // ftok requires that an actual file exists somewhere
+ if (!QFile::exists(nativeKey)) {
+ errorString = QSharedMemory::tr("%1: UNIX key file doesn't exist").arg(QLatin1String("QSharedMemory::handle:"));
+ error = QSharedMemory::NotFound;
+ return 0;
+ }
+
+ unix_key = ftok(QFile::encodeName(nativeKey).constData(), 'Q');
+ if (-1 == unix_key) {
+ errorString = QSharedMemory::tr("%1: ftok failed").arg(QLatin1String("QSharedMemory::handle:"));
+ error = QSharedMemory::KeyError;
+ unix_key = 0;
+ }
+ return unix_key;
+}
+
+#endif // QT_NO_SHAREDMEMORY
+
+#if !(defined(QT_NO_SHAREDMEMORY) && defined(QT_NO_SYSTEMSEMAPHORE))
+/*!
+ \internal
+ Creates the unix file if needed.
+ returns \c true if the unix file was created.
+
+ -1 error
+ 0 already existed
+ 1 created
+ */
+int QSharedMemoryPrivate::createUnixKeyFile(const QString &fileName)
+{
+ int fd = qt_safe_open(QFile::encodeName(fileName).constData(),
+ O_EXCL | O_CREAT | O_RDWR, 0640);
+ if (-1 == fd) {
+ if (errno == EEXIST)
+ return 0;
+ return -1;
+ } else {
+ close(fd);
+ }
+ return 1;
+}
+#endif // QT_NO_SHAREDMEMORY && QT_NO_SYSTEMSEMAPHORE
+
+#ifndef QT_NO_SHAREDMEMORY
+
+bool QSharedMemoryPrivate::cleanHandle()
+{
+ unix_key = 0;
+ return true;
+}
+
+bool QSharedMemoryPrivate::create(int size)
+{
+ // build file if needed
+ bool createdFile = false;
+ int built = createUnixKeyFile(nativeKey);
+ if (built == -1) {
+ errorString = QSharedMemory::tr("%1: unable to make key").arg(QLatin1String("QSharedMemory::handle:"));
+ error = QSharedMemory::KeyError;
+ return false;
+ }
+ if (built == 1) {
+ createdFile = true;
+ }
+
+ // get handle
+ if (!handle()) {
+ if (createdFile)
+ QFile::remove(nativeKey);
+ return false;
+ }
+
+ // create
+ if (-1 == shmget(unix_key, size, 0600 | IPC_CREAT | IPC_EXCL)) {
+ QString function = QLatin1String("QSharedMemory::create");
+ switch (errno) {
+ case EINVAL:
+ errorString = QSharedMemory::tr("%1: system-imposed size restrictions").arg(QLatin1String("QSharedMemory::handle"));
+ error = QSharedMemory::InvalidSize;
+ break;
+ default:
+ setErrorString(function);
+ }
+ if (createdFile && error != QSharedMemory::AlreadyExists)
+ QFile::remove(nativeKey);
+ return false;
+ }
+
+ return true;
+}
+
+bool QSharedMemoryPrivate::attach(QSharedMemory::AccessMode mode)
+{
+ // grab the shared memory segment id
+ int id = shmget(unix_key, 0, (mode == QSharedMemory::ReadOnly ? 0400 : 0600));
+ if (-1 == id) {
+ setErrorString(QLatin1String("QSharedMemory::attach (shmget)"));
+ return false;
+ }
+
+ // grab the memory
+ memory = shmat(id, 0, (mode == QSharedMemory::ReadOnly ? SHM_RDONLY : 0));
+ if ((void*) - 1 == memory) {
+ memory = 0;
+ setErrorString(QLatin1String("QSharedMemory::attach (shmat)"));
+ return false;
+ }
+
+ // grab the size
+ shmid_ds shmid_ds;
+ if (!shmctl(id, IPC_STAT, &shmid_ds)) {
+ size = (int)shmid_ds.shm_segsz;
+ } else {
+ setErrorString(QLatin1String("QSharedMemory::attach (shmctl)"));
+ return false;
+ }
+
+ return true;
+}
+
+bool QSharedMemoryPrivate::detach()
+{
+ // detach from the memory segment
+ if (-1 == shmdt(memory)) {
+ QString function = QLatin1String("QSharedMemory::detach");
+ switch (errno) {
+ case EINVAL:
+ errorString = QSharedMemory::tr("%1: not attached").arg(function);
+ error = QSharedMemory::NotFound;
+ break;
+ default:
+ setErrorString(function);
+ }
+ return false;
+ }
+ memory = 0;
+ size = 0;
+
+ // Get the number of current attachments
+ int id = shmget(unix_key, 0, 0400);
+ cleanHandle();
+
+ struct shmid_ds shmid_ds;
+ if (0 != shmctl(id, IPC_STAT, &shmid_ds)) {
+ switch (errno) {
+ case EINVAL:
+ return true;
+ default:
+ return false;
+ }
+ }
+ // If there are no attachments then remove it.
+ if (shmid_ds.shm_nattch == 0) {
+ // mark for removal
+ if (-1 == shmctl(id, IPC_RMID, &shmid_ds)) {
+ setErrorString(QLatin1String("QSharedMemory::remove"));
+ switch (errno) {
+ case EINVAL:
+ return true;
+ default:
+ return false;
+ }
+ }
+
+ // remove file
+ if (!QFile::remove(nativeKey))
+ return false;
+ }
+ return true;
+}
+
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_SHAREDMEMORY
+
+#endif // QT_POSIX_IPC
diff --git a/src/corelib/kernel/qsharedmemory_unix.cpp b/src/corelib/kernel/qsharedmemory_unix.cpp
index 8d616af4fe..5ba770c212 100644
--- a/src/corelib/kernel/qsharedmemory_unix.cpp
+++ b/src/corelib/kernel/qsharedmemory_unix.cpp
@@ -36,7 +36,6 @@
#include "qsharedmemory.h"
#include "qsharedmemory_p.h"
#include "qsystemsemaphore.h"
-#include <qdir.h>
#include <qdebug.h>
#include <errno.h>
@@ -44,7 +43,11 @@
#ifndef QT_NO_SHAREDMEMORY
#include <sys/types.h>
#include <sys/ipc.h>
+#ifndef QT_POSIX_IPC
#include <sys/shm.h>
+#else
+#include <sys/mman.h>
+#endif
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
@@ -60,7 +63,11 @@ QSharedMemoryPrivate::QSharedMemoryPrivate()
#ifndef QT_NO_SYSTEMSEMAPHORE
systemSemaphore(QString()), lockedByMe(false),
#endif
+#ifndef QT_POSIX_IPC
unix_key(0)
+#else
+ hand(-1)
+#endif
{
}
@@ -95,196 +102,6 @@ void QSharedMemoryPrivate::setErrorString(const QString &function)
}
}
-/*!
- \internal
-
- If not already made create the handle used for accessing the shared memory.
-*/
-key_t QSharedMemoryPrivate::handle()
-{
- // already made
- if (unix_key)
- return unix_key;
-
- // don't allow making handles on empty keys
- if (nativeKey.isEmpty()) {
- errorString = QSharedMemory::tr("%1: key is empty").arg(QLatin1String("QSharedMemory::handle:"));
- error = QSharedMemory::KeyError;
- return 0;
- }
-
- // ftok requires that an actual file exists somewhere
- if (!QFile::exists(nativeKey)) {
- errorString = QSharedMemory::tr("%1: UNIX key file doesn't exist").arg(QLatin1String("QSharedMemory::handle:"));
- error = QSharedMemory::NotFound;
- return 0;
- }
-
- unix_key = ftok(QFile::encodeName(nativeKey).constData(), 'Q');
- if (-1 == unix_key) {
- errorString = QSharedMemory::tr("%1: ftok failed").arg(QLatin1String("QSharedMemory::handle:"));
- error = QSharedMemory::KeyError;
- unix_key = 0;
- }
- return unix_key;
-}
-
-#endif // QT_NO_SHAREDMEMORY
-
-#if !(defined(QT_NO_SHAREDMEMORY) && defined(QT_NO_SYSTEMSEMAPHORE))
-/*!
- \internal
- Creates the unix file if needed.
- returns \c true if the unix file was created.
-
- -1 error
- 0 already existed
- 1 created
- */
-int QSharedMemoryPrivate::createUnixKeyFile(const QString &fileName)
-{
- int fd = qt_safe_open(QFile::encodeName(fileName).constData(),
- O_EXCL | O_CREAT | O_RDWR, 0640);
- if (-1 == fd) {
- if (errno == EEXIST)
- return 0;
- return -1;
- } else {
- close(fd);
- }
- return 1;
-}
-#endif // QT_NO_SHAREDMEMORY && QT_NO_SYSTEMSEMAPHORE
-
-#ifndef QT_NO_SHAREDMEMORY
-
-bool QSharedMemoryPrivate::cleanHandle()
-{
- unix_key = 0;
- return true;
-}
-
-bool QSharedMemoryPrivate::create(int size)
-{
- // build file if needed
- bool createdFile = false;
- int built = createUnixKeyFile(nativeKey);
- if (built == -1) {
- errorString = QSharedMemory::tr("%1: unable to make key").arg(QLatin1String("QSharedMemory::handle:"));
- error = QSharedMemory::KeyError;
- return false;
- }
- if (built == 1) {
- createdFile = true;
- }
-
- // get handle
- if (!handle()) {
- if (createdFile)
- QFile::remove(nativeKey);
- return false;
- }
-
- // create
- if (-1 == shmget(unix_key, size, 0600 | IPC_CREAT | IPC_EXCL)) {
- QString function = QLatin1String("QSharedMemory::create");
- switch (errno) {
- case EINVAL:
- errorString = QSharedMemory::tr("%1: system-imposed size restrictions").arg(QLatin1String("QSharedMemory::handle"));
- error = QSharedMemory::InvalidSize;
- break;
- default:
- setErrorString(function);
- }
- if (createdFile && error != QSharedMemory::AlreadyExists)
- QFile::remove(nativeKey);
- return false;
- }
-
- return true;
-}
-
-bool QSharedMemoryPrivate::attach(QSharedMemory::AccessMode mode)
-{
- // grab the shared memory segment id
- int id = shmget(unix_key, 0, (mode == QSharedMemory::ReadOnly ? 0400 : 0600));
- if (-1 == id) {
- setErrorString(QLatin1String("QSharedMemory::attach (shmget)"));
- return false;
- }
-
- // grab the memory
- memory = shmat(id, 0, (mode == QSharedMemory::ReadOnly ? SHM_RDONLY : 0));
- if ((void*) - 1 == memory) {
- memory = 0;
- setErrorString(QLatin1String("QSharedMemory::attach (shmat)"));
- return false;
- }
-
- // grab the size
- shmid_ds shmid_ds;
- if (!shmctl(id, IPC_STAT, &shmid_ds)) {
- size = (int)shmid_ds.shm_segsz;
- } else {
- setErrorString(QLatin1String("QSharedMemory::attach (shmctl)"));
- return false;
- }
-
- return true;
-}
-
-bool QSharedMemoryPrivate::detach()
-{
- // detach from the memory segment
- if (-1 == shmdt(memory)) {
- QString function = QLatin1String("QSharedMemory::detach");
- switch (errno) {
- case EINVAL:
- errorString = QSharedMemory::tr("%1: not attached").arg(function);
- error = QSharedMemory::NotFound;
- break;
- default:
- setErrorString(function);
- }
- return false;
- }
- memory = 0;
- size = 0;
-
- // Get the number of current attachments
- int id = shmget(unix_key, 0, 0400);
- cleanHandle();
-
- struct shmid_ds shmid_ds;
- if (0 != shmctl(id, IPC_STAT, &shmid_ds)) {
- switch (errno) {
- case EINVAL:
- return true;
- default:
- return false;
- }
- }
- // If there are no attachments then remove it.
- if (shmid_ds.shm_nattch == 0) {
- // mark for removal
- if (-1 == shmctl(id, IPC_RMID, &shmid_ds)) {
- setErrorString(QLatin1String("QSharedMemory::remove"));
- switch (errno) {
- case EINVAL:
- return true;
- default:
- return false;
- }
- }
-
- // remove file
- if (!QFile::remove(nativeKey))
- return false;
- }
- return true;
-}
-
-
QT_END_NAMESPACE
#endif // QT_NO_SHAREDMEMORY
diff --git a/src/corelib/kernel/qsocketnotifier.h b/src/corelib/kernel/qsocketnotifier.h
index 57535b0d71..978e2912cc 100644
--- a/src/corelib/kernel/qsocketnotifier.h
+++ b/src/corelib/kernel/qsocketnotifier.h
@@ -66,7 +66,7 @@ Q_SIGNALS:
);
protected:
- bool event(QEvent *);
+ bool event(QEvent *) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QSocketNotifier)
diff --git a/src/corelib/kernel/qsystemsemaphore.cpp b/src/corelib/kernel/qsystemsemaphore.cpp
index 27955885a8..bf6b0ef4cf 100644
--- a/src/corelib/kernel/qsystemsemaphore.cpp
+++ b/src/corelib/kernel/qsystemsemaphore.cpp
@@ -222,7 +222,7 @@ void QSystemSemaphore::setKey(const QString &key, int initialValue, AccessMode m
if (key == d->key && mode == Open)
return;
d->clearError();
-#if !defined(Q_OS_WIN)
+#if !defined(Q_OS_WIN) && !defined(QT_POSIX_IPC)
// optimization to not destroy/create the file & semaphore
if (key == d->key && mode == Create && d->createdSemaphore && d->createdFile) {
d->initialValue = initialValue;
diff --git a/src/corelib/kernel/qsystemsemaphore_p.h b/src/corelib/kernel/qsystemsemaphore_p.h
index d71ab4bc36..762c54480d 100644
--- a/src/corelib/kernel/qsystemsemaphore_p.h
+++ b/src/corelib/kernel/qsystemsemaphore_p.h
@@ -53,6 +53,9 @@
#ifndef Q_OS_WINCE
# include <sys/types.h>
#endif
+#ifdef QT_POSIX_IPC
+# include <semaphore.h>
+#endif
QT_BEGIN_NAMESPACE
@@ -75,6 +78,9 @@ public:
#ifdef Q_OS_WIN
Qt::HANDLE handle(QSystemSemaphore::AccessMode mode = QSystemSemaphore::Open);
void setErrorString(const QString &function);
+#elif defined(QT_POSIX_IPC)
+ bool handle(QSystemSemaphore::AccessMode mode = QSystemSemaphore::Open);
+ void setErrorString(const QString &function);
#else
key_t handle(QSystemSemaphore::AccessMode mode = QSystemSemaphore::Open);
void setErrorString(const QString &function);
@@ -88,11 +94,14 @@ public:
#ifdef Q_OS_WIN
Qt::HANDLE semaphore;
Qt::HANDLE semaphoreLock;
+#elif defined(QT_POSIX_IPC)
+ sem_t *semaphore;
+ bool createdSemaphore;
#else
+ key_t unix_key;
int semaphore;
bool createdFile;
bool createdSemaphore;
- key_t unix_key;
#endif
QString errorString;
QSystemSemaphore::SystemSemaphoreError error;
diff --git a/src/corelib/kernel/qsystemsemaphore_posix.cpp b/src/corelib/kernel/qsystemsemaphore_posix.cpp
new file mode 100644
index 0000000000..1ee643a6ab
--- /dev/null
+++ b/src/corelib/kernel/qsystemsemaphore_posix.cpp
@@ -0,0 +1,182 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Konstantin Ritt <ritt.ks@gmail.com>
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Tobias Koenig <tobias.koenig@kdab.com>
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qsystemsemaphore.h"
+#include "qsystemsemaphore_p.h"
+
+#include <qdebug.h>
+#include <qfile.h>
+#include <qcoreapplication.h>
+
+#ifdef QT_POSIX_IPC
+
+#ifndef QT_NO_SYSTEMSEMAPHORE
+
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/sem.h>
+#include <fcntl.h>
+#include <errno.h>
+
+#include "private/qcore_unix_p.h"
+
+// OpenBSD 4.2 doesn't define EIDRM, see BUGS section:
+// http://www.openbsd.org/cgi-bin/man.cgi?query=semop&manpath=OpenBSD+4.2
+#if defined(Q_OS_OPENBSD) && !defined(EIDRM)
+#define EIDRM EINVAL
+#endif
+
+QT_BEGIN_NAMESPACE
+
+bool QSystemSemaphorePrivate::handle(QSystemSemaphore::AccessMode mode)
+{
+ if (semaphore != SEM_FAILED)
+ return true; // we already have a semaphore
+
+ if (fileName.isEmpty()) {
+ errorString = QCoreApplication::tr("%1: key is empty", "QSystemSemaphore").arg(QLatin1String("QSystemSemaphore::handle"));
+ error = QSystemSemaphore::KeyError;
+ return false;
+ }
+
+ const QByteArray semName = QFile::encodeName(fileName);
+
+ // Always try with O_EXCL so we know whether we created the semaphore.
+ int oflag = O_CREAT | O_EXCL;
+ for (int tryNum = 0, maxTries = 1; tryNum < maxTries; ++tryNum) {
+ do {
+ semaphore = ::sem_open(semName.constData(), oflag, 0600, initialValue);
+ } while (semaphore == SEM_FAILED && errno == EINTR);
+ if (semaphore == SEM_FAILED && errno == EEXIST) {
+ if (mode == QSystemSemaphore::Create) {
+ if (::sem_unlink(semName.constData()) == -1 && errno != ENOENT) {
+ setErrorString(QLatin1String("QSystemSemaphore::handle (sem_unlink)"));
+ return false;
+ }
+ // Race condition: the semaphore might be recreated before
+ // we call sem_open again, so we'll retry several times.
+ maxTries = 3;
+ } else {
+ // Race condition: if it no longer exists at the next sem_open
+ // call, we won't realize we created it, so we'll leak it later.
+ oflag &= ~O_EXCL;
+ maxTries = 2;
+ }
+ } else {
+ break;
+ }
+ }
+
+ if (semaphore == SEM_FAILED) {
+ setErrorString(QLatin1String("QSystemSemaphore::handle"));
+ return false;
+ }
+
+ createdSemaphore = (oflag & O_EXCL) != 0;
+
+ return true;
+}
+
+void QSystemSemaphorePrivate::cleanHandle()
+{
+ if (semaphore != SEM_FAILED) {
+ if (::sem_close(semaphore) == -1) {
+ setErrorString(QLatin1String("QSystemSemaphore::cleanHandle (sem_close)"));
+#if defined QSYSTEMSEMAPHORE_DEBUG
+ qDebug() << QLatin1String("QSystemSemaphore::cleanHandle sem_close failed.");
+#endif
+ }
+ semaphore = SEM_FAILED;
+ }
+
+ if (createdSemaphore) {
+ if (::sem_unlink(QFile::encodeName(fileName).constData()) == -1 && errno != ENOENT) {
+ setErrorString(QLatin1String("QSystemSemaphore::cleanHandle (sem_unlink)"));
+#if defined QSYSTEMSEMAPHORE_DEBUG
+ qDebug() << QLatin1String("QSystemSemaphore::cleanHandle sem_unlink failed.");
+#endif
+ }
+ createdSemaphore = false;
+ }
+}
+
+bool QSystemSemaphorePrivate::modifySemaphore(int count)
+{
+ if (!handle())
+ return false;
+
+ if (count > 0) {
+ int cnt = count;
+ do {
+ if (::sem_post(semaphore) == -1) {
+ setErrorString(QLatin1String("QSystemSemaphore::modifySemaphore (sem_post)"));
+#if defined QSYSTEMSEMAPHORE_DEBUG
+ qDebug() << QLatin1String("QSystemSemaphore::modify sem_post failed") << count << errno;
+#endif
+ // rollback changes to preserve the SysV semaphore behavior
+ for ( ; cnt < count; ++cnt) {
+ int res;
+ EINTR_LOOP(res, ::sem_wait(semaphore));
+ }
+ return false;
+ }
+ --cnt;
+ } while (cnt > 0);
+ } else {
+ int res;
+ EINTR_LOOP(res, ::sem_wait(semaphore));
+ if (res == -1) {
+ // If the semaphore was removed be nice and create it and then modifySemaphore again
+ if (errno == EINVAL || errno == EIDRM) {
+ semaphore = SEM_FAILED;
+ return modifySemaphore(count);
+ }
+ setErrorString(QLatin1String("QSystemSemaphore::modifySemaphore (sem_wait)"));
+#if defined QSYSTEMSEMAPHORE_DEBUG
+ qDebug() << QLatin1String("QSystemSemaphore::modify sem_wait failed") << count << errno;
+#endif
+ return false;
+ }
+ }
+
+ clearError();
+ return true;
+}
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_SYSTEMSEMAPHORE
+
+#endif // QT_POSIX_IPC
diff --git a/src/corelib/kernel/qsystemsemaphore_systemv.cpp b/src/corelib/kernel/qsystemsemaphore_systemv.cpp
new file mode 100644
index 0000000000..f212f5e49f
--- /dev/null
+++ b/src/corelib/kernel/qsystemsemaphore_systemv.cpp
@@ -0,0 +1,198 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qsystemsemaphore.h"
+#include "qsystemsemaphore_p.h"
+
+#include <qdebug.h>
+#include <qfile.h>
+#include <qcoreapplication.h>
+
+#ifndef QT_POSIX_IPC
+
+#ifndef QT_NO_SYSTEMSEMAPHORE
+
+#include <sys/types.h>
+#include <sys/ipc.h>
+#include <sys/sem.h>
+#include <fcntl.h>
+#include <errno.h>
+
+#include "private/qcore_unix_p.h"
+
+// OpenBSD 4.2 doesn't define EIDRM, see BUGS section:
+// http://www.openbsd.org/cgi-bin/man.cgi?query=semop&manpath=OpenBSD+4.2
+#if defined(Q_OS_OPENBSD) && !defined(EIDRM)
+#define EIDRM EINVAL
+#endif
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \internal
+
+ Setup unix_key
+ */
+key_t QSystemSemaphorePrivate::handle(QSystemSemaphore::AccessMode mode)
+{
+ if (key.isEmpty()){
+ errorString = QCoreApplication::tr("%1: key is empty", "QSystemSemaphore").arg(QLatin1String("QSystemSemaphore::handle:"));
+ error = QSystemSemaphore::KeyError;
+ return -1;
+ }
+
+ // ftok requires that an actual file exists somewhere
+ if (-1 != unix_key)
+ return unix_key;
+
+ // Create the file needed for ftok
+ int built = QSharedMemoryPrivate::createUnixKeyFile(fileName);
+ if (-1 == built) {
+ errorString = QCoreApplication::tr("%1: unable to make key", "QSystemSemaphore").arg(QLatin1String("QSystemSemaphore::handle:"));
+ error = QSystemSemaphore::KeyError;
+ return -1;
+ }
+ createdFile = (1 == built);
+
+ // Get the unix key for the created file
+ unix_key = ftok(QFile::encodeName(fileName).constData(), 'Q');
+ if (-1 == unix_key) {
+ errorString = QCoreApplication::tr("%1: ftok failed", "QSystemSemaphore").arg(QLatin1String("QSystemSemaphore::handle:"));
+ error = QSystemSemaphore::KeyError;
+ return -1;
+ }
+
+ // Get semaphore
+ semaphore = semget(unix_key, 1, 0600 | IPC_CREAT | IPC_EXCL);
+ if (-1 == semaphore) {
+ if (errno == EEXIST)
+ semaphore = semget(unix_key, 1, 0600 | IPC_CREAT);
+ if (-1 == semaphore) {
+ setErrorString(QLatin1String("QSystemSemaphore::handle"));
+ cleanHandle();
+ return -1;
+ }
+ } else {
+ createdSemaphore = true;
+ // Force cleanup of file, it is possible that it can be left over from a crash
+ createdFile = true;
+ }
+
+ if (mode == QSystemSemaphore::Create) {
+ createdSemaphore = true;
+ createdFile = true;
+ }
+
+ // Created semaphore so initialize its value.
+ if (createdSemaphore && initialValue >= 0) {
+ qt_semun init_op;
+ init_op.val = initialValue;
+ if (-1 == semctl(semaphore, 0, SETVAL, init_op)) {
+ setErrorString(QLatin1String("QSystemSemaphore::handle"));
+ cleanHandle();
+ return -1;
+ }
+ }
+
+ return unix_key;
+}
+
+/*!
+ \internal
+
+ Cleanup the unix_key
+ */
+void QSystemSemaphorePrivate::cleanHandle()
+{
+ unix_key = -1;
+
+ // remove the file if we made it
+ if (createdFile) {
+ QFile::remove(fileName);
+ createdFile = false;
+ }
+
+ if (createdSemaphore) {
+ if (-1 != semaphore) {
+ if (-1 == semctl(semaphore, 0, IPC_RMID, 0)) {
+ setErrorString(QLatin1String("QSystemSemaphore::cleanHandle"));
+#if defined QSYSTEMSEMAPHORE_DEBUG
+ qDebug() << QLatin1String("QSystemSemaphore::cleanHandle semctl failed.");
+#endif
+ }
+ semaphore = -1;
+ }
+ createdSemaphore = false;
+ }
+}
+
+/*!
+ \internal
+ */
+bool QSystemSemaphorePrivate::modifySemaphore(int count)
+{
+ if (-1 == handle())
+ return false;
+
+ struct sembuf operation;
+ operation.sem_num = 0;
+ operation.sem_op = count;
+ operation.sem_flg = SEM_UNDO;
+
+ int res;
+ EINTR_LOOP(res, semop(semaphore, &operation, 1));
+ if (-1 == res) {
+ // If the semaphore was removed be nice and create it and then modifySemaphore again
+ if (errno == EINVAL || errno == EIDRM) {
+ semaphore = -1;
+ cleanHandle();
+ handle();
+ return modifySemaphore(count);
+ }
+ setErrorString(QLatin1String("QSystemSemaphore::modifySemaphore"));
+#if defined QSYSTEMSEMAPHORE_DEBUG
+ qDebug() << QLatin1String("QSystemSemaphore::modify failed") << count << semctl(semaphore, 0, GETVAL) << errno << EIDRM << EINVAL;
+#endif
+ return false;
+ }
+
+ clearError();
+ return true;
+}
+
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_SYSTEMSEMAPHORE
+
+#endif // QT_POSIX_IPC
diff --git a/src/corelib/kernel/qsystemsemaphore_unix.cpp b/src/corelib/kernel/qsystemsemaphore_unix.cpp
index 3d0cc76804..e8b3f14375 100644
--- a/src/corelib/kernel/qsystemsemaphore_unix.cpp
+++ b/src/corelib/kernel/qsystemsemaphore_unix.cpp
@@ -35,30 +35,29 @@
#include "qsystemsemaphore_p.h"
#include <qdebug.h>
-#include <qfile.h>
#include <qcoreapplication.h>
#ifndef QT_NO_SYSTEMSEMAPHORE
#include <sys/types.h>
#include <sys/ipc.h>
+#ifndef QT_POSIX_IPC
#include <sys/sem.h>
+#endif
#include <fcntl.h>
#include <errno.h>
#include "private/qcore_unix_p.h"
-// OpenBSD 4.2 doesn't define EIDRM, see BUGS section:
-// http://www.openbsd.org/cgi-bin/man.cgi?query=semop&manpath=OpenBSD+4.2
-#if defined(Q_OS_OPENBSD) && !defined(EIDRM)
-#define EIDRM EINVAL
-#endif
-
QT_BEGIN_NAMESPACE
QSystemSemaphorePrivate::QSystemSemaphorePrivate() :
- semaphore(-1), createdFile(false),
- createdSemaphore(false), unix_key(-1), error(QSystemSemaphore::NoError)
+#ifndef QT_POSIX_IPC
+ unix_key(-1), semaphore(-1), createdFile(false),
+#else
+ semaphore(SEM_FAILED),
+#endif // QT_POSIX_IPC
+ createdSemaphore(false), error(QSystemSemaphore::NoError)
{
}
@@ -93,139 +92,6 @@ void QSystemSemaphorePrivate::setErrorString(const QString &function)
}
}
-/*!
- \internal
-
- Setup unix_key
- */
-key_t QSystemSemaphorePrivate::handle(QSystemSemaphore::AccessMode mode)
-{
- if (key.isEmpty()){
- errorString = QCoreApplication::tr("%1: key is empty", "QSystemSemaphore").arg(QLatin1String("QSystemSemaphore::handle:"));
- error = QSystemSemaphore::KeyError;
- return -1;
- }
-
- // ftok requires that an actual file exists somewhere
- if (-1 != unix_key)
- return unix_key;
-
- // Create the file needed for ftok
- int built = QSharedMemoryPrivate::createUnixKeyFile(fileName);
- if (-1 == built) {
- errorString = QCoreApplication::tr("%1: unable to make key", "QSystemSemaphore").arg(QLatin1String("QSystemSemaphore::handle:"));
- error = QSystemSemaphore::KeyError;
- return -1;
- }
- createdFile = (1 == built);
-
- // Get the unix key for the created file
- unix_key = ftok(QFile::encodeName(fileName).constData(), 'Q');
- if (-1 == unix_key) {
- errorString = QCoreApplication::tr("%1: ftok failed", "QSystemSemaphore").arg(QLatin1String("QSystemSemaphore::handle:"));
- error = QSystemSemaphore::KeyError;
- return -1;
- }
-
- // Get semaphore
- semaphore = semget(unix_key, 1, 0600 | IPC_CREAT | IPC_EXCL);
- if (-1 == semaphore) {
- if (errno == EEXIST)
- semaphore = semget(unix_key, 1, 0600 | IPC_CREAT);
- if (-1 == semaphore) {
- setErrorString(QLatin1String("QSystemSemaphore::handle"));
- cleanHandle();
- return -1;
- }
- } else {
- createdSemaphore = true;
- // Force cleanup of file, it is possible that it can be left over from a crash
- createdFile = true;
- }
-
- if (mode == QSystemSemaphore::Create) {
- createdSemaphore = true;
- createdFile = true;
- }
-
- // Created semaphore so initialize its value.
- if (createdSemaphore && initialValue >= 0) {
- qt_semun init_op;
- init_op.val = initialValue;
- if (-1 == semctl(semaphore, 0, SETVAL, init_op)) {
- setErrorString(QLatin1String("QSystemSemaphore::handle"));
- cleanHandle();
- return -1;
- }
- }
-
- return unix_key;
-}
-
-/*!
- \internal
-
- Cleanup the unix_key
- */
-void QSystemSemaphorePrivate::cleanHandle()
-{
- unix_key = -1;
-
- // remove the file if we made it
- if (createdFile) {
- QFile::remove(fileName);
- createdFile = false;
- }
-
- if (createdSemaphore) {
- if (-1 != semaphore) {
- if (-1 == semctl(semaphore, 0, IPC_RMID, 0)) {
- setErrorString(QLatin1String("QSystemSemaphore::cleanHandle"));
-#if defined QSYSTEMSEMAPHORE_DEBUG
- qDebug() << QLatin1String("QSystemSemaphore::cleanHandle semctl failed.");
-#endif
- }
- semaphore = -1;
- }
- createdSemaphore = false;
- }
-}
-
-/*!
- \internal
- */
-bool QSystemSemaphorePrivate::modifySemaphore(int count)
-{
- if (-1 == handle())
- return false;
-
- struct sembuf operation;
- operation.sem_num = 0;
- operation.sem_op = count;
- operation.sem_flg = SEM_UNDO;
-
- int res;
- EINTR_LOOP(res, semop(semaphore, &operation, 1));
- if (-1 == res) {
- // If the semaphore was removed be nice and create it and then modifySemaphore again
- if (errno == EINVAL || errno == EIDRM) {
- semaphore = -1;
- cleanHandle();
- handle();
- return modifySemaphore(count);
- }
- setErrorString(QLatin1String("QSystemSemaphore::modifySemaphore"));
-#if defined QSYSTEMSEMAPHORE_DEBUG
- qDebug() << QLatin1String("QSystemSemaphore::modify failed") << count << semctl(semaphore, 0, GETVAL) << errno << EIDRM << EINVAL;
-#endif
- return false;
- }
-
- clearError();
- return true;
-}
-
-
QT_END_NAMESPACE
#endif // QT_NO_SYSTEMSEMAPHORE
diff --git a/src/corelib/kernel/qtimer.cpp b/src/corelib/kernel/qtimer.cpp
index 0803cf302e..cb9219df14 100644
--- a/src/corelib/kernel/qtimer.cpp
+++ b/src/corelib/kernel/qtimer.cpp
@@ -263,7 +263,7 @@ public:
Q_SIGNALS:
void timeout();
protected:
- void timerEvent(QTimerEvent *);
+ void timerEvent(QTimerEvent *) Q_DECL_OVERRIDE;
};
QSingleShotTimer::QSingleShotTimer(int msec, Qt::TimerType timerType, const QObject *r, const char *member)
diff --git a/src/corelib/kernel/qtimer.h b/src/corelib/kernel/qtimer.h
index 2890f3ef08..a48113abf6 100644
--- a/src/corelib/kernel/qtimer.h
+++ b/src/corelib/kernel/qtimer.h
@@ -148,7 +148,7 @@ Q_SIGNALS:
);
protected:
- void timerEvent(QTimerEvent *);
+ void timerEvent(QTimerEvent *) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QTimer)
diff --git a/src/corelib/kernel/qtranslator.cpp b/src/corelib/kernel/qtranslator.cpp
index c2d8397ae0..a9c608384a 100644
--- a/src/corelib/kernel/qtranslator.cpp
+++ b/src/corelib/kernel/qtranslator.cpp
@@ -273,6 +273,7 @@ static uint numerusHelper(int n, const uchar *rules, uint rulesSize)
}
Q_ASSERT(false);
+ return 0;
}
class QTranslatorPrivate : public QObjectPrivate
diff --git a/src/corelib/kernel/qvariant.cpp b/src/corelib/kernel/qvariant.cpp
index f76201802b..f7b8fe5ca5 100644
--- a/src/corelib/kernel/qvariant.cpp
+++ b/src/corelib/kernel/qvariant.cpp
@@ -69,13 +69,18 @@
QT_BEGIN_NAMESPACE
-#ifndef DBL_DIG
-# define DBL_DIG 10
+#ifndef DBL_MANT_DIG
+# define DBL_MANT_DIG 53
#endif
-#ifndef FLT_DIG
-# define FLT_DIG 6
+#ifndef FLT_MANT_DIG
+# define FLT_MANT_DIG 24
#endif
+const int log10_2_10000 = 30103; // log10(2) * 100000
+// same as C++11 std::numeric_limits<T>::max_digits10
+const int max_digits10_double = (DBL_MANT_DIG * log10_2_10000) / 100000 + 2;
+const int max_digits10_float = (FLT_MANT_DIG * log10_2_10000) / 100000 + 2;
+
namespace {
class HandlersManager
{
@@ -215,8 +220,9 @@ static qlonglong qConvertToNumber(const QVariant::Private *d, bool *ok)
return qlonglong(qMetaTypeUNumber(d));
}
- if (QMetaType::typeFlags(d->type) & QMetaType::IsEnumeration) {
- switch (QMetaType::sizeOf(d->type)) {
+ QMetaType typeInfo(d->type);
+ if (typeInfo.flags() & QMetaType::IsEnumeration) {
+ switch (typeInfo.sizeOf()) {
case 1:
return d->is_shared ? *reinterpret_cast<signed char *>(d->data.shared->ptr) : d->data.sc;
case 2:
@@ -232,6 +238,26 @@ static qlonglong qConvertToNumber(const QVariant::Private *d, bool *ok)
return Q_INT64_C(0);
}
+static qreal qConvertToRealNumber(const QVariant::Private *d, bool *ok)
+{
+ *ok = true;
+ switch (uint(d->type)) {
+ case QVariant::Double:
+ return qreal(d->data.d);
+ case QMetaType::Float:
+ return qreal(d->data.f);
+ case QVariant::ULongLong:
+ case QVariant::UInt:
+ case QMetaType::UChar:
+ case QMetaType::UShort:
+ case QMetaType::ULong:
+ return qreal(qMetaTypeUNumber(d));
+ default:
+ // includes enum conversion as well as invalid types
+ return qreal(qConvertToNumber(d, ok));
+ }
+}
+
static qulonglong qConvertToUnsignedNumber(const QVariant::Private *d, bool *ok)
{
*ok = true;
@@ -263,8 +289,9 @@ static qulonglong qConvertToUnsignedNumber(const QVariant::Private *d, bool *ok)
return qMetaTypeUNumber(d);
}
- if (QMetaType::typeFlags(d->type) & QMetaType::IsEnumeration) {
- switch (QMetaType::sizeOf(d->type)) {
+ QMetaType typeInfo(d->type);
+ if (typeInfo.flags() & QMetaType::IsEnumeration) {
+ switch (typeInfo.sizeOf()) {
case 1:
return d->is_shared ? *reinterpret_cast<uchar *>(d->data.shared->ptr) : d->data.uc;
case 2:
@@ -355,10 +382,10 @@ static bool convert(const QVariant::Private *d, int t, void *result, bool *ok)
*str = QString::number(qMetaTypeUNumber(d));
break;
case QMetaType::Float:
- *str = QString::number(d->data.f, 'g', FLT_DIG);
+ *str = QString::number(d->data.f, 'g', max_digits10_float);
break;
case QVariant::Double:
- *str = QString::number(d->data.d, 'g', DBL_DIG);
+ *str = QString::number(d->data.d, 'g', max_digits10_double);
break;
#if !defined(QT_NO_DATESTRING)
case QVariant::Date:
@@ -535,10 +562,10 @@ static bool convert(const QVariant::Private *d, int t, void *result, bool *ok)
*ba = v_cast<QString>(d)->toUtf8();
break;
case QVariant::Double:
- *ba = QByteArray::number(d->data.d, 'g', DBL_DIG);
+ *ba = QByteArray::number(d->data.d, 'g', max_digits10_double);
break;
case QMetaType::Float:
- *ba = QByteArray::number(d->data.f, 'g', FLT_DIG);
+ *ba = QByteArray::number(d->data.f, 'g', max_digits10_float);
break;
case QMetaType::Char:
case QMetaType::SChar:
@@ -3133,8 +3160,22 @@ bool QVariant::convert(const int type, void *ptr) const
static bool qIsNumericType(uint tp)
{
- return (tp >= QVariant::Bool && tp <= QVariant::Double)
- || (tp >= QMetaType::Long && tp <= QMetaType::Float);
+ static const qulonglong numericTypeBits =
+ Q_UINT64_C(1) << QMetaType::Bool |
+ Q_UINT64_C(1) << QMetaType::Double |
+ Q_UINT64_C(1) << QMetaType::Float |
+ Q_UINT64_C(1) << QMetaType::Char |
+ Q_UINT64_C(1) << QMetaType::SChar |
+ Q_UINT64_C(1) << QMetaType::UChar |
+ Q_UINT64_C(1) << QMetaType::Short |
+ Q_UINT64_C(1) << QMetaType::UShort |
+ Q_UINT64_C(1) << QMetaType::Int |
+ Q_UINT64_C(1) << QMetaType::UInt |
+ Q_UINT64_C(1) << QMetaType::Long |
+ Q_UINT64_C(1) << QMetaType::ULong |
+ Q_UINT64_C(1) << QMetaType::LongLong |
+ Q_UINT64_C(1) << QMetaType::ULongLong;
+ return tp < (CHAR_BIT * sizeof numericTypeBits) ? numericTypeBits & (Q_UINT64_C(1) << tp) : false;
}
static bool qIsFloatingPoint(uint tp)
@@ -3142,26 +3183,137 @@ static bool qIsFloatingPoint(uint tp)
return tp == QVariant::Double || tp == QMetaType::Float;
}
+static int normalizeLowerRanks(uint tp)
+{
+ static const qulonglong numericTypeBits =
+ Q_UINT64_C(1) << QMetaType::Bool |
+ Q_UINT64_C(1) << QMetaType::Char |
+ Q_UINT64_C(1) << QMetaType::SChar |
+ Q_UINT64_C(1) << QMetaType::UChar |
+ Q_UINT64_C(1) << QMetaType::Short |
+ Q_UINT64_C(1) << QMetaType::UShort;
+ return numericTypeBits & (Q_UINT64_C(1) << tp) ? QVariant::Int : tp;
+}
+
+static int normalizeLong(uint tp)
+{
+ const uint IntType = sizeof(long) == sizeof(int) ? QVariant::Int : QVariant::LongLong;
+ const uint UIntType = sizeof(ulong) == sizeof(uint) ? QVariant::UInt : QVariant::ULongLong;
+ return tp == QMetaType::Long ? IntType :
+ tp == QMetaType::ULong ? UIntType : tp;
+}
+
+static int numericTypePromotion(uint t1, uint t2)
+{
+ Q_ASSERT(qIsNumericType(t1));
+ Q_ASSERT(qIsNumericType(t2));
+
+ // C++ integral ranks: (4.13 Integer conversion rank [conv.rank])
+ // bool < signed char < short < int < long < long long
+ // unsigneds have the same rank as their signed counterparts
+ // C++ integral promotion rules (4.5 Integral Promotions [conv.prom])
+ // - any type with rank less than int can be converted to int or unsigned int
+ // 5 Expressions [expr] paragraph 9:
+ // - if either operand is double, the other shall be converted to double
+ // - " " float, " " " float
+ // - if both operands have the same type, no further conversion is needed.
+ // - if both are signed or if both are unsigned, convert to the one with highest rank
+ // - if the unsigned has higher or same rank, convert the signed to the unsigned one
+ // - if the signed can represent all values of the unsigned, convert to the signed
+ // - otherwise, convert to the unsigned corresponding to the rank of the signed
+
+ // floating point: we deviate from the C++ standard by always using qreal
+ if (qIsFloatingPoint(t1) || qIsFloatingPoint(t2))
+ return QMetaType::QReal;
+
+ // integral rules:
+ // for all platforms we support, int can always hold the values of lower-ranked types
+ t1 = normalizeLowerRanks(t1);
+ t2 = normalizeLowerRanks(t2);
+
+ // normalize long / ulong: in all platforms we run, they're either the same as int or as long long
+ t1 = normalizeLong(t1);
+ t2 = normalizeLong(t2);
+
+ // implement the other rules
+ // the four possibilities are Int, UInt, LongLong and ULongLong
+ // if any of the two is ULongLong, then it wins (highest rank, unsigned)
+ // otherwise, if one of the two is LongLong, then the other is either LongLong too or lower-ranked
+ // otherwise, if one of the two is UInt, then the other is either UInt too or Int
+ if (t1 == QVariant::ULongLong || t2 == QVariant::ULongLong)
+ return QVariant::ULongLong;
+ if (t1 == QVariant::LongLong || t2 == QVariant::LongLong)
+ return QVariant::LongLong;
+ if (t1 == QVariant::UInt || t2 == QVariant::UInt)
+ return QVariant::UInt;
+ return QVariant::Int;
+}
+
+static int integralCompare(uint promotedType, const QVariant::Private *d1, const QVariant::Private *d2)
+{
+ // use toLongLong to retrieve the data, it gets us all the bits
+ bool ok;
+ qlonglong l1 = qConvertToNumber(d1, &ok);
+ Q_ASSERT(ok);
+
+ qlonglong l2 = qConvertToNumber(d2, &ok);
+ Q_ASSERT(ok);
+
+ if (promotedType == QVariant::Int)
+ return int(l1) < int(l2) ? -1 : int(l1) == int(l2) ? 0 : 1;
+ if (promotedType == QVariant::UInt)
+ return uint(l1) < uint(l2) ? -1 : uint(l1) == uint(l2) ? 0 : 1;
+ if (promotedType == QVariant::LongLong)
+ return l1 < l2 ? -1 : l1 == l2 ? 0 : 1;
+ if (promotedType == QVariant::ULongLong)
+ return qulonglong(l1) < qulonglong(l2) ? -1 : qulonglong(l1) == qulonglong(l2) ? 0 : 1;
+
+ Q_UNREACHABLE();
+ return 0;
+}
+
+static int numericCompare(const QVariant::Private *d1, const QVariant::Private *d2)
+{
+ uint promotedType = numericTypePromotion(d1->type, d2->type);
+ if (promotedType != QMetaType::QReal)
+ return integralCompare(promotedType, d1, d2);
+
+ // qreal comparisons
+ bool ok;
+ qreal r1 = qConvertToRealNumber(d1, &ok);
+ Q_ASSERT(ok);
+ qreal r2 = qConvertToRealNumber(d2, &ok);
+ Q_ASSERT(ok);
+ if (qFuzzyCompare(r1, r2))
+ return 0;
+ return r1 < r2 ? -1 : 1;
+}
+
/*!
\internal
*/
bool QVariant::cmp(const QVariant &v) const
{
+ // try numerics first, with C++ type promotion rules (no conversion)
+ if (qIsNumericType(d.type) && qIsNumericType(v.d.type))
+ return numericCompare(&d, &v.d) == 0;
+
QVariant v1 = *this;
QVariant v2 = v;
if (d.type != v2.d.type) {
- if (qIsNumericType(d.type) && qIsNumericType(v.d.type)) {
- if (qIsFloatingPoint(d.type) || qIsFloatingPoint(v.d.type))
- return qFuzzyCompare(toReal(), v.toReal());
- else
- return toLongLong() == v.toLongLong();
+ if (v2.canConvert(v1.d.type)) {
+ if (!v2.convert(v1.d.type))
+ return false;
+ } else {
+ // try the opposite conversion, it might work
+ qSwap(v1, v2);
+ if (!v2.convert(v1.d.type))
+ return false;
}
- if (!v2.canConvert(v1.d.type) || !v2.convert(v1.d.type))
- return false;
}
if (v1.d.type >= QMetaType::User) {
int result;
- if (QMetaType::compare(QT_PREPEND_NAMESPACE(constData(v1.d)), QT_PREPEND_NAMESPACE(constData(v2.d)), v1.d.type, &result))
+ if (QMetaType::equals(QT_PREPEND_NAMESPACE(constData(v1.d)), QT_PREPEND_NAMESPACE(constData(v2.d)), v1.d.type, &result))
return result == 0;
}
return handlerManager[v1.d.type]->compare(&v1.d, &v2.d);
@@ -3172,10 +3324,17 @@ bool QVariant::cmp(const QVariant &v) const
*/
int QVariant::compare(const QVariant &v) const
{
+ // try numerics first, with C++ type promotion rules (no conversion)
+ if (qIsNumericType(d.type) && qIsNumericType(v.d.type))
+ return numericCompare(&d, &v.d);
+
+ // check for equality next, as more types implement operator== than operator<
if (cmp(v))
return 0;
+
QVariant v1 = *this;
QVariant v2 = v;
+
if (v1.d.type != v2.d.type) {
// if both types differ, try to convert
if (v2.canConvert(v1.d.type)) {
@@ -3197,18 +3356,16 @@ int QVariant::compare(const QVariant &v) const
}
return r;
}
+
+ // did we end up with two numerics? If so, restart
+ if (qIsNumericType(v1.d.type) && qIsNumericType(v2.d.type))
+ return v1.compare(v2);
}
if (v1.d.type >= QMetaType::User) {
int result;
if (QMetaType::compare(QT_PREPEND_NAMESPACE(constData(d)), QT_PREPEND_NAMESPACE(constData(v2.d)), d.type, &result))
return result;
}
- if (qIsNumericType(v1.d.type)) {
- if (qIsFloatingPoint(v1.d.type))
- return v1.toReal() < v2.toReal() ? -1 : 1;
- else
- return v1.toLongLong() < v2.toLongLong() ? -1 : 1;
- }
switch (v1.d.type) {
case QVariant::Date:
return v1.toDate() < v2.toDate() ? -1 : 1;
diff --git a/src/corelib/kernel/qvariant.h b/src/corelib/kernel/qvariant.h
index 90f3e8fbae..c33ac834c0 100644
--- a/src/corelib/kernel/qvariant.h
+++ b/src/corelib/kernel/qvariant.h
@@ -253,13 +253,13 @@ class Q_CORE_EXPORT QVariant
QVariant& operator=(const QVariant &other);
#ifdef Q_COMPILER_RVALUE_REFS
- inline QVariant(QVariant &&other) : d(other.d)
+ inline QVariant(QVariant &&other) Q_DECL_NOTHROW : d(other.d)
{ other.d = Private(); }
- inline QVariant &operator=(QVariant &&other)
+ inline QVariant &operator=(QVariant &&other) Q_DECL_NOTHROW
{ qSwap(d, other.d); return *this; }
#endif
- inline void swap(QVariant &other) { qSwap(d, other.d); }
+ inline void swap(QVariant &other) Q_DECL_NOTHROW { qSwap(d, other.d); }
Type type() const;
int userType() const;
@@ -360,15 +360,15 @@ class Q_CORE_EXPORT QVariant
};
struct Private
{
- inline Private(): type(Invalid), is_shared(false), is_null(true)
+ inline Private() Q_DECL_NOTHROW : type(Invalid), is_shared(false), is_null(true)
{ data.ptr = 0; }
// Internal constructor for initialized variants.
- explicit inline Private(uint variantType)
+ explicit inline Private(uint variantType) Q_DECL_NOTHROW
: type(variantType), is_shared(false), is_null(false)
{}
- inline Private(const Private &other)
+ inline Private(const Private &other) Q_DECL_NOTHROW
: data(other.data), type(other.type),
is_shared(other.is_shared), is_null(other.is_null)
{}
diff --git a/src/corelib/kernel/qvariant_p.h b/src/corelib/kernel/qvariant_p.h
index 9b9e266f8e..9e4f468872 100644
--- a/src/corelib/kernel/qvariant_p.h
+++ b/src/corelib/kernel/qvariant_p.h
@@ -54,7 +54,6 @@
QT_BEGIN_NAMESPACE
-namespace {
template<typename T>
struct QVariantIntegrator
{
@@ -64,7 +63,6 @@ struct QVariantIntegrator
Q_STATIC_ASSERT(QVariantIntegrator<double>::CanUseInternalSpace);
Q_STATIC_ASSERT(QVariantIntegrator<long int>::CanUseInternalSpace);
Q_STATIC_ASSERT(QVariantIntegrator<qulonglong>::CanUseInternalSpace);
-} // namespace
#ifdef Q_CC_SUN // Sun CC picks the wrong overload, so introduce awful hack
@@ -104,7 +102,7 @@ inline T *v_cast(QVariant::Private *d, T * = 0)
template <class T> class QVariantPrivateSharedEx : public QVariant::PrivateShared
{
public:
- QVariantPrivateSharedEx() : QVariant::PrivateShared(&m_t) { }
+ QVariantPrivateSharedEx() : QVariant::PrivateShared(&m_t), m_t() { }
QVariantPrivateSharedEx(const T&t) : QVariant::PrivateShared(&m_t), m_t(t) { }
private:
diff --git a/src/corelib/mimetypes/qmimedatabase_p.h b/src/corelib/mimetypes/qmimedatabase_p.h
index 21669328db..b1e747c62e 100644
--- a/src/corelib/mimetypes/qmimedatabase_p.h
+++ b/src/corelib/mimetypes/qmimedatabase_p.h
@@ -54,6 +54,7 @@
QT_BEGIN_NAMESPACE
+class QIODevice;
class QMimeDatabase;
class QMimeProviderBase;
diff --git a/src/corelib/mimetypes/qmimeprovider_p.h b/src/corelib/mimetypes/qmimeprovider_p.h
index 027fddd2c8..1d480668e3 100644
--- a/src/corelib/mimetypes/qmimeprovider_p.h
+++ b/src/corelib/mimetypes/qmimeprovider_p.h
@@ -86,17 +86,17 @@ public:
QMimeBinaryProvider(QMimeDatabasePrivate *db);
virtual ~QMimeBinaryProvider();
- virtual bool isValid();
- virtual QMimeType mimeTypeForName(const QString &name);
- virtual QStringList findByFileName(const QString &fileName, QString *foundSuffix);
- virtual QStringList parents(const QString &mime);
- virtual QString resolveAlias(const QString &name);
- virtual QStringList listAliases(const QString &name);
- virtual QMimeType findByMagic(const QByteArray &data, int *accuracyPtr);
- virtual QList<QMimeType> allMimeTypes();
- virtual void loadMimeTypePrivate(QMimeTypePrivate &);
- virtual void loadIcon(QMimeTypePrivate &);
- virtual void loadGenericIcon(QMimeTypePrivate &);
+ virtual bool isValid() Q_DECL_OVERRIDE;
+ virtual QMimeType mimeTypeForName(const QString &name) Q_DECL_OVERRIDE;
+ virtual QStringList findByFileName(const QString &fileName, QString *foundSuffix) Q_DECL_OVERRIDE;
+ virtual QStringList parents(const QString &mime) Q_DECL_OVERRIDE;
+ virtual QString resolveAlias(const QString &name) Q_DECL_OVERRIDE;
+ virtual QStringList listAliases(const QString &name) Q_DECL_OVERRIDE;
+ virtual QMimeType findByMagic(const QByteArray &data, int *accuracyPtr) Q_DECL_OVERRIDE;
+ virtual QList<QMimeType> allMimeTypes() Q_DECL_OVERRIDE;
+ virtual void loadMimeTypePrivate(QMimeTypePrivate &) Q_DECL_OVERRIDE;
+ virtual void loadIcon(QMimeTypePrivate &) Q_DECL_OVERRIDE;
+ virtual void loadGenericIcon(QMimeTypePrivate &) Q_DECL_OVERRIDE;
private:
struct CacheFile;
@@ -128,14 +128,14 @@ class QMimeXMLProvider : public QMimeProviderBase
public:
QMimeXMLProvider(QMimeDatabasePrivate *db);
- virtual bool isValid();
- virtual QMimeType mimeTypeForName(const QString &name);
- virtual QStringList findByFileName(const QString &fileName, QString *foundSuffix);
- virtual QStringList parents(const QString &mime);
- virtual QString resolveAlias(const QString &name);
- virtual QStringList listAliases(const QString &name);
- virtual QMimeType findByMagic(const QByteArray &data, int *accuracyPtr);
- virtual QList<QMimeType> allMimeTypes();
+ virtual bool isValid() Q_DECL_OVERRIDE;
+ virtual QMimeType mimeTypeForName(const QString &name) Q_DECL_OVERRIDE;
+ virtual QStringList findByFileName(const QString &fileName, QString *foundSuffix) Q_DECL_OVERRIDE;
+ virtual QStringList parents(const QString &mime) Q_DECL_OVERRIDE;
+ virtual QString resolveAlias(const QString &name) Q_DECL_OVERRIDE;
+ virtual QStringList listAliases(const QString &name) Q_DECL_OVERRIDE;
+ virtual QMimeType findByMagic(const QByteArray &data, int *accuracyPtr) Q_DECL_OVERRIDE;
+ virtual QList<QMimeType> allMimeTypes() Q_DECL_OVERRIDE;
bool load(const QString &fileName, QString *errorMessage);
diff --git a/src/corelib/plugin/qfactoryloader.cpp b/src/corelib/plugin/qfactoryloader.cpp
index bd5032dcc0..e474450dd1 100644
--- a/src/corelib/plugin/qfactoryloader.cpp
+++ b/src/corelib/plugin/qfactoryloader.cpp
@@ -54,6 +54,16 @@ Q_GLOBAL_STATIC(QList<QFactoryLoader *>, qt_factory_loaders)
Q_GLOBAL_STATIC_WITH_ARGS(QMutex, qt_factoryloader_mutex, (QMutex::Recursive))
+namespace {
+
+// avoid duplicate QStringLiteral data:
+inline QString iidKeyLiteral() { return QStringLiteral("IID"); }
+inline QString versionKeyLiteral() { return QStringLiteral("version"); }
+inline QString metaDataKeyLiteral() { return QStringLiteral("MetaData"); }
+inline QString keysKeyLiteral() { return QStringLiteral("Keys"); }
+
+}
+
class QFactoryLoaderPrivate : public QObjectPrivate
{
Q_DECLARE_PUBLIC(QFactoryLoader)
@@ -162,12 +172,12 @@ void QFactoryLoader::update()
QStringList keys;
bool metaDataOk = false;
- QString iid = library->metaData.value(QLatin1String("IID")).toString();
+ QString iid = library->metaData.value(iidKeyLiteral()).toString();
if (iid == QLatin1String(d->iid.constData(), d->iid.size())) {
- QJsonObject object = library->metaData.value(QLatin1String("MetaData")).toObject();
+ QJsonObject object = library->metaData.value(metaDataKeyLiteral()).toObject();
metaDataOk = true;
- QJsonArray k = object.value(QLatin1String("Keys")).toArray();
+ QJsonArray k = object.value(keysKeyLiteral()).toArray();
for (int i = 0; i < k.size(); ++i)
keys += d->cs ? k.at(i).toString() : k.at(i).toString().toLower();
}
@@ -190,9 +200,9 @@ void QFactoryLoader::update()
QLibraryPrivate *previous = d->keyMap.value(key);
int prev_qt_version = 0;
if (previous) {
- prev_qt_version = (int)previous->metaData.value(QLatin1String("version")).toDouble();
+ prev_qt_version = (int)previous->metaData.value(versionKeyLiteral()).toDouble();
}
- int qt_version = (int)library->metaData.value(QLatin1String("version")).toDouble();
+ int qt_version = (int)library->metaData.value(versionKeyLiteral()).toDouble();
if (!previous || (prev_qt_version > QT_VERSION && qt_version <= QT_VERSION)) {
d->keyMap[key] = library;
++keyUsageCount;
@@ -229,7 +239,7 @@ QList<QJsonObject> QFactoryLoader::metaData() const
foreach (const QStaticPlugin &plugin, QPluginLoader::staticPlugins()) {
const QJsonObject object = plugin.metaData();
- if (object.value(QLatin1String("IID")) != QLatin1String(d->iid.constData(), d->iid.size()))
+ if (object.value(iidKeyLiteral()) != QLatin1String(d->iid.constData(), d->iid.size()))
continue;
metaData.append(object);
}
@@ -261,7 +271,7 @@ QObject *QFactoryLoader::instance(int index) const
QVector<QStaticPlugin> staticPlugins = QPluginLoader::staticPlugins();
for (int i = 0; i < staticPlugins.count(); ++i) {
const QJsonObject object = staticPlugins.at(i).metaData();
- if (object.value(QLatin1String("IID")) != QLatin1String(d->iid.constData(), d->iid.size()))
+ if (object.value(iidKeyLiteral()) != QLatin1String(d->iid.constData(), d->iid.size()))
continue;
if (index == 0)
@@ -290,10 +300,6 @@ void QFactoryLoader::refreshAll()
}
}
-// avoid duplicate QStringLiteral data:
-static inline QString metaDataKeyLiteral() { return QStringLiteral("MetaData"); }
-static inline QString keysKeyLiteral() { return QStringLiteral("Keys"); }
-
QMultiMap<int, QString> QFactoryLoader::keyMap() const
{
QMultiMap<int, QString> result;
diff --git a/src/corelib/plugin/qlibrary.cpp b/src/corelib/plugin/qlibrary.cpp
index 832ee250c7..c9ce5c342e 100644
--- a/src/corelib/plugin/qlibrary.cpp
+++ b/src/corelib/plugin/qlibrary.cpp
@@ -168,6 +168,11 @@ QT_BEGIN_NAMESPACE
Prevents the library from being unloaded from the address space if close()
is called. The library's static variables are not reinitialized if open()
is called at a later time.
+ \value DeepBindHint
+ Instructs the linker to prefer definitions in the loaded library
+ over exported definitions in the loading application when resolving
+ external symbols in the loaded library. This option is only supported
+ on Linux.
\sa loadHints
*/
@@ -1121,10 +1126,7 @@ QLibrary::LoadHints QLibrary::loadHints() const
/* Internal, for debugging */
bool qt_debug_component()
{
- static int debug_env = -1;
- if (debug_env == -1)
- debug_env = QT_PREPEND_NAMESPACE(qgetenv)("QT_DEBUG_PLUGINS").toInt();
-
+ static int debug_env = QT_PREPEND_NAMESPACE(qEnvironmentVariableIntValue)("QT_DEBUG_PLUGINS");
return debug_env != 0;
}
diff --git a/src/corelib/plugin/qlibrary.h b/src/corelib/plugin/qlibrary.h
index 77fe432761..327af8aada 100644
--- a/src/corelib/plugin/qlibrary.h
+++ b/src/corelib/plugin/qlibrary.h
@@ -53,7 +53,8 @@ public:
ResolveAllSymbolsHint = 0x01,
ExportExternalSymbolsHint = 0x02,
LoadArchiveMemberHint = 0x04,
- PreventUnloadHint = 0x08
+ PreventUnloadHint = 0x08,
+ DeepBindHint = 0x10
};
Q_DECLARE_FLAGS(LoadHints, LoadHint)
diff --git a/src/corelib/plugin/qlibrary_unix.cpp b/src/corelib/plugin/qlibrary_unix.cpp
index 4f96f3bccf..b178c173c5 100644
--- a/src/corelib/plugin/qlibrary_unix.cpp
+++ b/src/corelib/plugin/qlibrary_unix.cpp
@@ -171,6 +171,10 @@ bool QLibraryPrivate::load_sys()
dlFlags |= RTLD_LOCAL;
}
#endif
+#if defined(RTLD_DEEPBIND)
+ if (loadHints & QLibrary::DeepBindHint)
+ dlFlags |= RTLD_DEEPBIND;
+#endif
// Provide access to RTLD_NODELETE flag on Unix
// From GNU documentation on RTLD_NODELETE:
diff --git a/src/corelib/plugin/quuid.cpp b/src/corelib/plugin/quuid.cpp
index 4a5f4e791d..6df3f3b0d1 100644
--- a/src/corelib/plugin/quuid.cpp
+++ b/src/corelib/plugin/quuid.cpp
@@ -36,14 +36,13 @@
#include "qdatastream.h"
#include "qendian.h"
#include "qdebug.h"
+#include "private/qtools_p.h"
#ifndef QT_BOOTSTRAPPED
#include "qcryptographichash.h"
#endif
QT_BEGIN_NAMESPACE
-static const char digits[] = "0123456789abcdef";
-
template <class Char, class Integral>
void _q_toHex(Char *&dst, Integral value)
{
@@ -52,10 +51,8 @@ void _q_toHex(Char *&dst, Integral value)
const char* p = reinterpret_cast<const char*>(&value);
for (uint i = 0; i < sizeof(Integral); ++i, dst += 2) {
- uint j = (p[i] >> 4) & 0xf;
- dst[0] = Char(digits[j]);
- j = p[i] & 0xf;
- dst[1] = Char(digits[j]);
+ dst[0] = Char(QtMiscUtils::toHexLower((p[i] >> 4) & 0xf));
+ dst[1] = Char(QtMiscUtils::toHexLower(p[i] & 0xf));
}
}
@@ -65,15 +62,9 @@ bool _q_fromHex(const Char *&src, Integral &value)
value = 0;
for (uint i = 0; i < sizeof(Integral) * 2; ++i) {
- int ch = *src++;
- int tmp;
- if (ch >= '0' && ch <= '9')
- tmp = ch - '0';
- else if (ch >= 'a' && ch <= 'f')
- tmp = ch - 'a' + 10;
- else if (ch >= 'A' && ch <= 'F')
- tmp = ch - 'A' + 10;
- else
+ uint ch = *src++;
+ int tmp = QtMiscUtils::fromHex(ch);
+ if (tmp == -1)
return false;
value = value * 16 + tmp;
diff --git a/src/corelib/plugin/quuid.h b/src/corelib/plugin/quuid.h
index add245e4e3..ec5eb6b0e6 100644
--- a/src/corelib/plugin/quuid.h
+++ b/src/corelib/plugin/quuid.h
@@ -114,21 +114,20 @@ public:
static QUuid fromRfc4122(const QByteArray &);
bool isNull() const;
- bool operator==(const QUuid &orig) const
+ Q_DECL_RELAXED_CONSTEXPR bool operator==(const QUuid &orig) const
{
- uint i;
if (data1 != orig.data1 || data2 != orig.data2 ||
data3 != orig.data3)
return false;
- for(i = 0; i < 8; i++)
+ for (uint i = 0; i < 8; i++)
if (data4[i] != orig.data4[i])
return false;
return true;
}
- bool operator!=(const QUuid &orig) const
+ Q_DECL_RELAXED_CONSTEXPR bool operator!=(const QUuid &orig) const
{
return !(*this == orig);
}
@@ -155,24 +154,24 @@ public:
}
#endif
- QUuid &operator=(const GUID &guid)
+ Q_DECL_RELAXED_CONSTEXPR QUuid &operator=(const GUID &guid)
{
*this = QUuid(guid);
return *this;
}
- operator GUID() const
+ Q_DECL_RELAXED_CONSTEXPR operator GUID() const
{
GUID guid = { data1, data2, data3, { data4[0], data4[1], data4[2], data4[3], data4[4], data4[5], data4[6], data4[7] } };
return guid;
}
- bool operator==(const GUID &guid) const
+ Q_DECL_RELAXED_CONSTEXPR bool operator==(const GUID &guid) const
{
return *this == QUuid(guid);
}
- bool operator!=(const GUID &guid) const
+ Q_DECL_RELAXED_CONSTEXPR bool operator!=(const GUID &guid) const
{
return !(*this == guid);
}
diff --git a/src/corelib/statemachine/qabstractstate.h b/src/corelib/statemachine/qabstractstate.h
index 5f2216a9da..a6a4753d71 100644
--- a/src/corelib/statemachine/qabstractstate.h
+++ b/src/corelib/statemachine/qabstractstate.h
@@ -76,7 +76,7 @@ protected:
virtual void onEntry(QEvent *event) = 0;
virtual void onExit(QEvent *event) = 0;
- bool event(QEvent *e);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
protected:
QAbstractState(QAbstractStatePrivate &dd, QState *parent);
diff --git a/src/corelib/statemachine/qabstracttransition.h b/src/corelib/statemachine/qabstracttransition.h
index 2676aba633..e9c757c3a2 100644
--- a/src/corelib/statemachine/qabstracttransition.h
+++ b/src/corelib/statemachine/qabstracttransition.h
@@ -99,7 +99,7 @@ protected:
virtual void onTransition(QEvent *event) = 0;
- bool event(QEvent *e);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
protected:
QAbstractTransition(QAbstractTransitionPrivate &dd, QState *parent);
diff --git a/src/corelib/statemachine/qeventtransition.h b/src/corelib/statemachine/qeventtransition.h
index bf282242d6..861aacd51a 100644
--- a/src/corelib/statemachine/qeventtransition.h
+++ b/src/corelib/statemachine/qeventtransition.h
@@ -60,10 +60,10 @@ public:
void setEventType(QEvent::Type type);
protected:
- bool eventTest(QEvent *event);
- void onTransition(QEvent *event);
+ bool eventTest(QEvent *event) Q_DECL_OVERRIDE;
+ void onTransition(QEvent *event) Q_DECL_OVERRIDE;
- bool event(QEvent *e);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
protected:
QEventTransition(QEventTransitionPrivate &dd, QState *parent);
diff --git a/src/corelib/statemachine/qfinalstate.h b/src/corelib/statemachine/qfinalstate.h
index 804851c321..ca8875abea 100644
--- a/src/corelib/statemachine/qfinalstate.h
+++ b/src/corelib/statemachine/qfinalstate.h
@@ -50,10 +50,10 @@ public:
~QFinalState();
protected:
- void onEntry(QEvent *event);
- void onExit(QEvent *event);
+ void onEntry(QEvent *event) Q_DECL_OVERRIDE;
+ void onExit(QEvent *event) Q_DECL_OVERRIDE;
- bool event(QEvent *e);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QFinalState)
diff --git a/src/corelib/statemachine/qhistorystate.h b/src/corelib/statemachine/qhistorystate.h
index d05e4ba5eb..ee80a0bc15 100644
--- a/src/corelib/statemachine/qhistorystate.h
+++ b/src/corelib/statemachine/qhistorystate.h
@@ -77,10 +77,10 @@ Q_SIGNALS:
);
protected:
- void onEntry(QEvent *event);
- void onExit(QEvent *event);
+ void onEntry(QEvent *event) Q_DECL_OVERRIDE;
+ void onExit(QEvent *event) Q_DECL_OVERRIDE;
- bool event(QEvent *e);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QHistoryState)
diff --git a/src/corelib/statemachine/qsignaltransition.h b/src/corelib/statemachine/qsignaltransition.h
index 545374eb5c..8300c77b9e 100644
--- a/src/corelib/statemachine/qsignaltransition.h
+++ b/src/corelib/statemachine/qsignaltransition.h
@@ -61,10 +61,10 @@ public:
void setSignal(const QByteArray &signal);
protected:
- bool eventTest(QEvent *event);
- void onTransition(QEvent *event);
+ bool eventTest(QEvent *event) Q_DECL_OVERRIDE;
+ void onTransition(QEvent *event) Q_DECL_OVERRIDE;
- bool event(QEvent *e);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
Q_SIGNALS:
void senderObjectChanged(
diff --git a/src/corelib/statemachine/qsignaltransition_p.h b/src/corelib/statemachine/qsignaltransition_p.h
index 1d09babe88..f394bfc74f 100644
--- a/src/corelib/statemachine/qsignaltransition_p.h
+++ b/src/corelib/statemachine/qsignaltransition_p.h
@@ -61,7 +61,7 @@ public:
void unregister();
void maybeRegister();
- virtual void callOnTransition(QEvent *e);
+ virtual void callOnTransition(QEvent *e) Q_DECL_OVERRIDE;
const QObject *sender;
QByteArray signal;
diff --git a/src/corelib/statemachine/qstate.cpp b/src/corelib/statemachine/qstate.cpp
index 29698d204f..15f6e29fcb 100644
--- a/src/corelib/statemachine/qstate.cpp
+++ b/src/corelib/statemachine/qstate.cpp
@@ -339,6 +339,17 @@ void QState::addTransition(QAbstractTransition *transition)
}
/*!
+ \fn QState::addTransition(const QObject *sender, PointerToMemberFunction signal,
+ QAbstractState *target);
+ \since 5.5
+ \overload
+
+ Adds a transition associated with the given \a signal of the given \a sender
+ object, and returns the new QSignalTransition object. The transition has
+ this state as the source, and the given \a target as the target state.
+*/
+
+/*!
Adds a transition associated with the given \a signal of the given \a sender
object, and returns the new QSignalTransition object. The transition has
this state as the source, and the given \a target as the target state.
@@ -383,8 +394,8 @@ public:
: QAbstractTransition()
{ setTargetState(target); }
protected:
- void onTransition(QEvent *) {}
- bool eventTest(QEvent *) { return true; }
+ void onTransition(QEvent *) Q_DECL_OVERRIDE {}
+ bool eventTest(QEvent *) Q_DECL_OVERRIDE { return true; }
};
} // namespace
diff --git a/src/corelib/statemachine/qstate.h b/src/corelib/statemachine/qstate.h
index dbc1ca97f9..8a308cf38e 100644
--- a/src/corelib/statemachine/qstate.h
+++ b/src/corelib/statemachine/qstate.h
@@ -35,8 +35,8 @@
#define QSTATE_H
#include <QtCore/qabstractstate.h>
-
#include <QtCore/qlist.h>
+#include <QtCore/qmetaobject.h>
QT_BEGIN_NAMESPACE
@@ -74,6 +74,18 @@ public:
void addTransition(QAbstractTransition *transition);
QSignalTransition *addTransition(const QObject *sender, const char *signal, QAbstractState *target);
+#ifdef Q_QDOC
+ QSignalTransition *addTransition(const QObject *sender, PointerToMemberFunction signal,
+ QAbstractState *target);
+#else
+ template <typename Func>
+ QSignalTransition *addTransition(const typename QtPrivate::FunctionPointer<Func>::Object *obj,
+ Func signal, QAbstractState *target)
+ {
+ const QMetaMethod signalMetaMethod = QMetaMethod::fromSignal(signal);
+ return addTransition(obj, signalMetaMethod.methodSignature().constData(), target);
+ }
+#endif // Q_QDOC
QAbstractTransition *addTransition(QAbstractState *target);
void removeTransition(QAbstractTransition *transition);
QList<QAbstractTransition*> transitions() const;
@@ -117,10 +129,10 @@ Q_SIGNALS:
);
protected:
- void onEntry(QEvent *event);
- void onExit(QEvent *event);
+ void onEntry(QEvent *event) Q_DECL_OVERRIDE;
+ void onExit(QEvent *event) Q_DECL_OVERRIDE;
- bool event(QEvent *e);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
protected:
QState(QStatePrivate &dd, QState *parent);
diff --git a/src/corelib/statemachine/qstatemachine.cpp b/src/corelib/statemachine/qstatemachine.cpp
index 1350c8d99e..fa5e49c882 100644
--- a/src/corelib/statemachine/qstatemachine.cpp
+++ b/src/corelib/statemachine/qstatemachine.cpp
@@ -882,11 +882,10 @@ QVariant QStateMachinePrivate::savedValueForRestorable(const QList<QAbstractStat
#ifdef QSTATEMACHINE_RESTORE_PROPERTIES_DEBUG
qDebug() << q_func() << ": savedValueForRestorable(" << exitedStates_sorted << object << propertyName << ")";
#endif
- RestorableId id(object, propertyName);
for (int i = exitedStates_sorted.size() - 1; i >= 0; --i) {
QAbstractState *s = exitedStates_sorted.at(i);
QHash<RestorableId, QVariant> restorables = registeredRestorablesForState.value(s);
- QHash<RestorableId, QVariant>::const_iterator it = restorables.constFind(id);
+ QHash<RestorableId, QVariant>::const_iterator it = restorables.constFind(RestorableId(object, propertyName));
if (it != restorables.constEnd()) {
#ifdef QSTATEMACHINE_RESTORE_PROPERTIES_DEBUG
qDebug() << q_func() << ": using" << it.value() << "from" << s;
@@ -897,7 +896,7 @@ QVariant QStateMachinePrivate::savedValueForRestorable(const QList<QAbstractStat
#ifdef QSTATEMACHINE_RESTORE_PROPERTIES_DEBUG
qDebug() << q_func() << ": falling back to current value";
#endif
- return id.first->property(id.second);
+ return object->property(propertyName);
}
void QStateMachinePrivate::registerRestorable(QAbstractState *state, QObject *object, const QByteArray &propertyName,
@@ -948,14 +947,15 @@ QList<QPropertyAssignment> QStateMachinePrivate::restorablesToPropertyList(const
QList<QPropertyAssignment> result;
QHash<RestorableId, QVariant>::const_iterator it;
for (it = restorables.constBegin(); it != restorables.constEnd(); ++it) {
- if (!it.key().first) {
+ const RestorableId &id = it.key();
+ if (!id.object()) {
// Property object was deleted
continue;
}
#ifdef QSTATEMACHINE_RESTORE_PROPERTIES_DEBUG
- qDebug() << q_func() << ": restoring" << it.key().first << it.key().second << "to" << it.value();
+ qDebug() << q_func() << ": restoring" << id.object() << id.proertyName() << "to" << it.value();
#endif
- result.append(QPropertyAssignment(it.key().first, it.key().second, it.value(), /*explicitlySet=*/false));
+ result.append(QPropertyAssignment(id.object(), id.propertyName(), it.value(), /*explicitlySet=*/false));
}
return result;
}
@@ -1303,8 +1303,8 @@ QAbstractTransition *QStateMachinePrivate::createInitialTransition() const
: QAbstractTransition()
{ setTargetStates(targets); }
protected:
- virtual bool eventTest(QEvent *) { return true; }
- virtual void onTransition(QEvent *) {}
+ virtual bool eventTest(QEvent *) Q_DECL_OVERRIDE { return true; }
+ virtual void onTransition(QEvent *) Q_DECL_OVERRIDE {}
};
QState *root = rootState();
@@ -1629,8 +1629,8 @@ public:
: QAbstractTransition()
{ setTargetState(target); }
protected:
- void onTransition(QEvent *) { deleteLater(); }
- bool eventTest(QEvent *) { return true; }
+ void onTransition(QEvent *) Q_DECL_OVERRIDE { deleteLater(); }
+ bool eventTest(QEvent *) Q_DECL_OVERRIDE { return true; }
};
} // namespace
diff --git a/src/corelib/statemachine/qstatemachine.h b/src/corelib/statemachine/qstatemachine.h
index 5f203d5ed4..3a4944a8db 100644
--- a/src/corelib/statemachine/qstatemachine.h
+++ b/src/corelib/statemachine/qstatemachine.h
@@ -136,7 +136,7 @@ public:
QSet<QAbstractState*> configuration() const;
#ifndef QT_NO_STATEMACHINE_EVENTFILTER
- bool eventFilter(QObject *watched, QEvent *event);
+ bool eventFilter(QObject *watched, QEvent *event) Q_DECL_OVERRIDE;
#endif
public Q_SLOTS:
@@ -159,8 +159,8 @@ Q_SIGNALS:
protected:
- void onEntry(QEvent *event);
- void onExit(QEvent *event);
+ void onEntry(QEvent *event) Q_DECL_OVERRIDE;
+ void onExit(QEvent *event) Q_DECL_OVERRIDE;
virtual void beginSelectTransitions(QEvent *event);
virtual void endSelectTransitions(QEvent *event);
@@ -168,7 +168,7 @@ protected:
virtual void beginMicrostep(QEvent *event);
virtual void endMicrostep(QEvent *event);
- bool event(QEvent *e);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
protected:
QStateMachine(QStateMachinePrivate &dd, QObject *parent);
diff --git a/src/corelib/statemachine/qstatemachine_p.h b/src/corelib/statemachine/qstatemachine_p.h
index 465d8aff0d..51eed07548 100644
--- a/src/corelib/statemachine/qstatemachine_p.h
+++ b/src/corelib/statemachine/qstatemachine_p.h
@@ -189,7 +189,24 @@ public:
void cancelAllDelayedEvents();
#ifndef QT_NO_PROPERTIES
- typedef QPair<QPointer<QObject>, QByteArray> RestorableId;
+ class RestorableId {
+ QPointer<QObject> guard;
+ QObject *obj;
+ QByteArray prop;
+ // two overloads because friends can't have default arguments
+ friend uint qHash(const RestorableId &key, uint seed) Q_DECL_NOEXCEPT_EXPR(noexcept(std::declval<QByteArray>()))
+ { return qHash(qMakePair(key.obj, key.prop), seed); }
+ friend uint qHash(const RestorableId &key) Q_DECL_NOEXCEPT_EXPR(noexcept(qHash(key, 0U)))
+ { return qHash(key, 0U); }
+ friend bool operator==(const RestorableId &lhs, const RestorableId &rhs) Q_DECL_NOTHROW
+ { return lhs.obj == rhs.obj && lhs.prop == rhs.prop; }
+ friend bool operator!=(const RestorableId &lhs, const RestorableId &rhs) Q_DECL_NOTHROW
+ { return !operator==(lhs, rhs); }
+ public:
+ explicit RestorableId(QObject *o, QByteArray p) Q_DECL_NOTHROW : guard(o), obj(o), prop(qMove(p)) {}
+ QObject *object() const Q_DECL_NOTHROW { return guard; }
+ QByteArray propertyName() const Q_DECL_NOTHROW { return prop; }
+ };
QHash<QAbstractState*, QHash<RestorableId, QVariant> > registeredRestorablesForState;
bool hasRestorable(QAbstractState *state, QObject *object, const QByteArray &propertyName) const;
QVariant savedValueForRestorable(const QList<QAbstractState*> &exitedStates_sorted,
diff --git a/src/corelib/thread/qatomic.h b/src/corelib/thread/qatomic.h
index 72cb3866a5..c273973472 100644
--- a/src/corelib/thread/qatomic.h
+++ b/src/corelib/thread/qatomic.h
@@ -40,11 +40,8 @@
QT_BEGIN_NAMESPACE
-
-#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 406) && !defined(Q_CC_INTEL)
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wextra"
-#endif
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_GCC("-Wextra")
// High-level atomic integer operations
template <typename T>
@@ -214,9 +211,7 @@ public:
#endif
};
-#if defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 406) && !defined(Q_CC_INTEL)
-# pragma GCC diagnostic pop
-#endif
+QT_WARNING_POP
#ifdef QT_BASIC_ATOMIC_HAS_CONSTRUCTORS
# undef QT_BASIC_ATOMIC_HAS_CONSTRUCTORS
diff --git a/src/corelib/thread/qexception.h b/src/corelib/thread/qexception.h
index 6c48b94a88..a1c3bbeb27 100644
--- a/src/corelib/thread/qexception.h
+++ b/src/corelib/thread/qexception.h
@@ -60,8 +60,8 @@ public:
class Q_CORE_EXPORT QUnhandledException : public QException
{
public:
- void raise() const;
- QUnhandledException *clone() const;
+ void raise() const Q_DECL_OVERRIDE;
+ QUnhandledException *clone() const Q_DECL_OVERRIDE;
};
namespace QtPrivate {
diff --git a/src/corelib/thread/qfutureinterface.cpp b/src/corelib/thread/qfutureinterface.cpp
index 1f417d3d74..a23c32a73b 100644
--- a/src/corelib/thread/qfutureinterface.cpp
+++ b/src/corelib/thread/qfutureinterface.cpp
@@ -292,7 +292,7 @@ void QFutureInterfaceBase::waitForResult(int resultIndex)
// To avoid deadlocks and reduce the number of threads used, try to
// run the runnable in the current thread.
- d->pool()->d_func()->stealRunnable(d->runnable);
+ d->pool()->d_func()->stealAndRunRunnable(d->runnable);
lock.relock();
@@ -313,7 +313,7 @@ void QFutureInterfaceBase::waitForFinished()
lock.unlock();
if (!alreadyFinished) {
- d->pool()->d_func()->stealRunnable(d->runnable);
+ d->pool()->d_func()->stealAndRunRunnable(d->runnable);
lock.relock();
diff --git a/src/corelib/thread/qfuturewatcher.h b/src/corelib/thread/qfuturewatcher.h
index 3ea4c4df4f..f84af0507a 100644
--- a/src/corelib/thread/qfuturewatcher.h
+++ b/src/corelib/thread/qfuturewatcher.h
@@ -70,7 +70,7 @@ public:
void setPendingResultsLimit(int limit);
- bool event(QEvent *event);
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
Q_SIGNALS:
void started();
@@ -92,8 +92,8 @@ public Q_SLOTS:
void togglePaused();
protected:
- void connectNotify (const QMetaMethod &signal);
- void disconnectNotify (const QMetaMethod &signal);
+ void connectNotify (const QMetaMethod &signal) Q_DECL_OVERRIDE;
+ void disconnectNotify (const QMetaMethod &signal) Q_DECL_OVERRIDE;
// called from setFuture() implemented in template sub-classes
void connectOutputInterface();
@@ -160,8 +160,8 @@ public Q_SLOTS:
private:
QFuture<T> m_future;
- const QFutureInterfaceBase &futureInterface() const { return m_future.d; }
- QFutureInterfaceBase &futureInterface() { return m_future.d; }
+ const QFutureInterfaceBase &futureInterface() const Q_DECL_OVERRIDE { return m_future.d; }
+ QFutureInterfaceBase &futureInterface() Q_DECL_OVERRIDE { return m_future.d; }
};
template <typename T>
@@ -191,8 +191,8 @@ public:
private:
QFuture<void> m_future;
- const QFutureInterfaceBase &futureInterface() const { return m_future.d; }
- QFutureInterfaceBase &futureInterface() { return m_future.d; }
+ const QFutureInterfaceBase &futureInterface() const Q_DECL_OVERRIDE { return m_future.d; }
+ QFutureInterfaceBase &futureInterface() Q_DECL_OVERRIDE { return m_future.d; }
};
Q_INLINE_TEMPLATE void QFutureWatcher<void>::setFuture(const QFuture<void> &_future)
diff --git a/src/corelib/thread/qfuturewatcher_p.h b/src/corelib/thread/qfuturewatcher_p.h
index 226642119a..84c608d1e0 100644
--- a/src/corelib/thread/qfuturewatcher_p.h
+++ b/src/corelib/thread/qfuturewatcher_p.h
@@ -63,8 +63,8 @@ class QFutureWatcherBasePrivate : public QObjectPrivate,
public:
QFutureWatcherBasePrivate();
- void postCallOutEvent(const QFutureCallOutEvent &callOutEvent);
- void callOutInterfaceDisconnected();
+ void postCallOutEvent(const QFutureCallOutEvent &callOutEvent) Q_DECL_OVERRIDE;
+ void callOutInterfaceDisconnected() Q_DECL_OVERRIDE;
void sendCallOutEvent(QFutureCallOutEvent *event);
diff --git a/src/corelib/thread/qmutex.h b/src/corelib/thread/qmutex.h
index 626ba0b1bb..acbd9f32d1 100644
--- a/src/corelib/thread/qmutex.h
+++ b/src/corelib/thread/qmutex.h
@@ -176,12 +176,12 @@ class Q_CORE_EXPORT QMutex
public:
enum RecursionMode { NonRecursive, Recursive };
- inline explicit QMutex(RecursionMode mode = NonRecursive) { Q_UNUSED(mode); }
+ inline explicit QMutex(RecursionMode mode = NonRecursive) Q_DECL_NOTHROW { Q_UNUSED(mode); }
- inline void lock() {}
- inline bool tryLock(int timeout = 0) { Q_UNUSED(timeout); return true; }
- inline void unlock() {}
- inline bool isRecursive() { return true; }
+ inline void lock() Q_DECL_NOTHROW {}
+ inline bool tryLock(int timeout = 0) Q_DECL_NOTHROW { Q_UNUSED(timeout); return true; }
+ inline void unlock() Q_DECL_NOTHROW {}
+ inline bool isRecursive() Q_DECL_NOTHROW { return true; }
private:
Q_DISABLE_COPY(QMutex)
@@ -190,12 +190,12 @@ private:
class Q_CORE_EXPORT QMutexLocker
{
public:
- inline explicit QMutexLocker(QMutex *) {}
- inline ~QMutexLocker() {}
+ inline explicit QMutexLocker(QMutex *) Q_DECL_NOTHROW {}
+ inline ~QMutexLocker() Q_DECL_NOTHROW {}
- inline void unlock() {}
- void relock() {}
- inline QMutex *mutex() const { return 0; }
+ inline void unlock() Q_DECL_NOTHROW {}
+ void relock() Q_DECL_NOTHROW {}
+ inline QMutex *mutex() const Q_DECL_NOTHROW { return Q_NULLPTR; }
private:
Q_DISABLE_COPY(QMutexLocker)
diff --git a/src/corelib/thread/qreadwritelock.h b/src/corelib/thread/qreadwritelock.h
index 4260d090b6..01adaa927a 100644
--- a/src/corelib/thread/qreadwritelock.h
+++ b/src/corelib/thread/qreadwritelock.h
@@ -172,18 +172,18 @@ class Q_CORE_EXPORT QReadWriteLock
{
public:
enum RecursionMode { NonRecursive, Recursive };
- inline explicit QReadWriteLock(RecursionMode = NonRecursive) { }
+ inline explicit QReadWriteLock(RecursionMode = NonRecursive) Q_DECL_NOTHROW { }
inline ~QReadWriteLock() { }
- static inline void lockForRead() { }
- static inline bool tryLockForRead() { return true; }
- static inline bool tryLockForRead(int timeout) { Q_UNUSED(timeout); return true; }
+ static inline void lockForRead() Q_DECL_NOTHROW { }
+ static inline bool tryLockForRead() Q_DECL_NOTHROW { return true; }
+ static inline bool tryLockForRead(int timeout) Q_DECL_NOTHROW { Q_UNUSED(timeout); return true; }
- static inline void lockForWrite() { }
- static inline bool tryLockForWrite() { return true; }
- static inline bool tryLockForWrite(int timeout) { Q_UNUSED(timeout); return true; }
+ static inline void lockForWrite() Q_DECL_NOTHROW { }
+ static inline bool tryLockForWrite() Q_DECL_NOTHROW { return true; }
+ static inline bool tryLockForWrite(int timeout) Q_DECL_NOTHROW { Q_UNUSED(timeout); return true; }
- static inline void unlock() { }
+ static inline void unlock() Q_DECL_NOTHROW { }
private:
Q_DISABLE_COPY(QReadWriteLock)
@@ -192,12 +192,12 @@ private:
class Q_CORE_EXPORT QReadLocker
{
public:
- inline QReadLocker(QReadWriteLock *) { }
- inline ~QReadLocker() { }
+ inline QReadLocker(QReadWriteLock *) Q_DECL_NOTHROW { }
+ inline ~QReadLocker() Q_DECL_NOTHROW { }
- static inline void unlock() { }
- static inline void relock() { }
- static inline QReadWriteLock *readWriteLock() { return 0; }
+ static inline void unlock() Q_DECL_NOTHROW { }
+ static inline void relock() Q_DECL_NOTHROW { }
+ static inline QReadWriteLock *readWriteLock() Q_DECL_NOTHROW { return Q_NULLPTR; }
private:
Q_DISABLE_COPY(QReadLocker)
@@ -206,12 +206,12 @@ private:
class Q_CORE_EXPORT QWriteLocker
{
public:
- inline explicit QWriteLocker(QReadWriteLock *) { }
- inline ~QWriteLocker() { }
+ inline explicit QWriteLocker(QReadWriteLock *) Q_DECL_NOTHROW { }
+ inline ~QWriteLocker() Q_DECL_NOTHROW { }
- static inline void unlock() { }
- static inline void relock() { }
- static inline QReadWriteLock *readWriteLock() { return 0; }
+ static inline void unlock() Q_DECL_NOTHROW { }
+ static inline void relock() Q_DECL_NOTHROW { }
+ static inline QReadWriteLock *readWriteLock() Q_DECL_NOTHROW { return Q_NULLPTR; }
private:
Q_DISABLE_COPY(QWriteLocker)
diff --git a/src/corelib/thread/qthread.h b/src/corelib/thread/qthread.h
index 1d32580670..f9df407f72 100644
--- a/src/corelib/thread/qthread.h
+++ b/src/corelib/thread/qthread.h
@@ -89,7 +89,7 @@ public:
QAbstractEventDispatcher *eventDispatcher() const;
void setEventDispatcher(QAbstractEventDispatcher *eventDispatcher);
- bool event(QEvent *event);
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
public Q_SLOTS:
void start(Priority = InheritPriority);
diff --git a/src/corelib/thread/qthread_p.h b/src/corelib/thread/qthread_p.h
index 83693921be..9c67ce4471 100644
--- a/src/corelib/thread/qthread_p.h
+++ b/src/corelib/thread/qthread_p.h
@@ -305,7 +305,7 @@ public:
void init();
private:
- void run();
+ void run() Q_DECL_OVERRIDE;
};
QT_END_NAMESPACE
diff --git a/src/corelib/thread/qthread_unix.cpp b/src/corelib/thread/qthread_unix.cpp
index 9a14503584..09659297d0 100644
--- a/src/corelib/thread/qthread_unix.cpp
+++ b/src/corelib/thread/qthread_unix.cpp
@@ -241,15 +241,9 @@ void QAdoptedThread::init()
QThreadPrivate
*/
-#if defined(Q_C_CALLBACKS)
extern "C" {
-#endif
-
typedef void*(*QtThreadCallback)(void*);
-
-#if defined(Q_C_CALLBACKS)
}
-#endif
#endif // QT_NO_THREAD
diff --git a/src/corelib/thread/qthreadpool.cpp b/src/corelib/thread/qthreadpool.cpp
index c2a8bb0595..aaffdc2a4c 100644
--- a/src/corelib/thread/qthreadpool.cpp
+++ b/src/corelib/thread/qthreadpool.cpp
@@ -50,7 +50,7 @@ class QThreadPoolThread : public QThread
{
public:
QThreadPoolThread(QThreadPoolPrivate *manager);
- void run();
+ void run() Q_DECL_OVERRIDE;
void registerThreadInactive();
QWaitCondition runnableReady;
@@ -311,14 +311,12 @@ void QThreadPoolPrivate::clear()
/*!
\internal
Searches for \a runnable in the queue, removes it from the queue and
- runs it if found. This function does not return until the runnable
- has completed.
+ returns \c true if it was found in the queue
*/
-void QThreadPoolPrivate::stealRunnable(QRunnable *runnable)
+bool QThreadPoolPrivate::stealRunnable(QRunnable *runnable)
{
if (runnable == 0)
- return;
- bool found = false;
+ return false;
{
QMutexLocker locker(&mutex);
QList<QPair<QRunnable *, int> >::iterator it = queue.begin();
@@ -326,17 +324,26 @@ void QThreadPoolPrivate::stealRunnable(QRunnable *runnable)
while (it != end) {
if (it->first == runnable) {
- found = true;
queue.erase(it);
- break;
+ return true;
}
++it;
}
}
- if (!found)
- return;
+ return false;
+}
+ /*!
+ \internal
+ Searches for \a runnable in the queue, removes it from the queue and
+ runs it if found. This function does not return until the runnable
+ has completed.
+ */
+void QThreadPoolPrivate::stealAndRunRunnable(QRunnable *runnable)
+{
+ if (!stealRunnable(runnable))
+ return;
const bool autoDelete = runnable->autoDelete();
bool del = autoDelete && !--runnable->ref;
@@ -628,6 +635,25 @@ void QThreadPool::clear()
d->clear();
}
+/*!
+ \since 5.5
+
+ Removes the specified \a runnable from the queue if it is not yet started.
+ The runnables for which \l{QRunnable::autoDelete()}{runnable->autoDelete()}
+ returns \c true are deleted.
+
+ \sa start()
+*/
+void QThreadPool::cancel(QRunnable *runnable)
+{
+ Q_D(QThreadPool);
+ if (!d->stealRunnable(runnable))
+ return;
+ if (runnable->autoDelete() && !--runnable->ref) {
+ delete runnable;
+ }
+}
+
QT_END_NAMESPACE
#endif
diff --git a/src/corelib/thread/qthreadpool.h b/src/corelib/thread/qthreadpool.h
index e4d23cc200..c8cc5dfd89 100644
--- a/src/corelib/thread/qthreadpool.h
+++ b/src/corelib/thread/qthreadpool.h
@@ -77,6 +77,7 @@ public:
bool waitForDone(int msecs = -1);
void clear();
+ void cancel(QRunnable *runnable);
};
QT_END_NAMESPACE
diff --git a/src/corelib/thread/qthreadpool_p.h b/src/corelib/thread/qthreadpool_p.h
index d4308266a2..de2727adc1 100644
--- a/src/corelib/thread/qthreadpool_p.h
+++ b/src/corelib/thread/qthreadpool_p.h
@@ -76,7 +76,8 @@ public:
void reset();
bool waitForDone(int msecs);
void clear();
- void stealRunnable(QRunnable *);
+ bool stealRunnable(QRunnable *runnable);
+ void stealAndRunRunnable(QRunnable *runnable);
mutable QMutex mutex;
QSet<QThreadPoolThread *> allThreads;
diff --git a/src/corelib/thread/qwaitcondition_unix.cpp b/src/corelib/thread/qwaitcondition_unix.cpp
index 3bcf3202a1..979a5f2300 100644
--- a/src/corelib/thread/qwaitcondition_unix.cpp
+++ b/src/corelib/thread/qwaitcondition_unix.cpp
@@ -70,7 +70,7 @@ void qt_initialize_pthread_cond(pthread_cond_t *cond, const char *where)
pthread_condattr_t condattr;
pthread_condattr_init(&condattr);
-#if !defined(Q_OS_MAC) && !defined(Q_OS_ANDROID) && (_POSIX_MONOTONIC_CLOCK-0 >= 0)
+#if !defined(Q_OS_MAC) && !defined(Q_OS_ANDROID) && !defined(Q_OS_HAIKU) && (_POSIX_MONOTONIC_CLOCK-0 >= 0)
if (QElapsedTimer::clockType() == QElapsedTimer::MonotonicClock)
pthread_condattr_setclock(&condattr, CLOCK_MONOTONIC);
#endif
diff --git a/src/corelib/tools/qalgorithms.h b/src/corelib/tools/qalgorithms.h
index 0ba3cad5e9..cffe0128b0 100644
--- a/src/corelib/tools/qalgorithms.h
+++ b/src/corelib/tools/qalgorithms.h
@@ -37,7 +37,9 @@
#include <QtCore/qglobal.h>
QT_BEGIN_NAMESPACE
-
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_GCC("-Wdeprecated-declarations")
+QT_WARNING_DISABLE_CLANG("-Wdeprecated-declarations")
/*
Warning: The contents of QAlgorithmsPrivate is not a part of the public Qt API
@@ -582,7 +584,7 @@ Q_DECL_CONSTEXPR inline uint qPopulationCount(long unsigned int v)
#undef QALGORITHMS_USE_BUILTIN_POPCOUNT
#endif
-
+QT_WARNING_POP
QT_END_NAMESPACE
#endif // QALGORITHMS_H
diff --git a/src/corelib/tools/qarraydata.cpp b/src/corelib/tools/qarraydata.cpp
index 98c484c1dd..dc419c3758 100644
--- a/src/corelib/tools/qarraydata.cpp
+++ b/src/corelib/tools/qarraydata.cpp
@@ -85,8 +85,20 @@ QArrayData *QArrayData::allocate(size_t objectSize, size_t alignment,
headerSize += (alignment - Q_ALIGNOF(QArrayData));
// Allocate additional space if array is growing
- if (options & Grow)
- capacity = qAllocMore(int(objectSize * capacity), int(headerSize)) / int(objectSize);
+ if (options & Grow) {
+
+ // Guard against integer overflow when multiplying.
+ if (capacity > std::numeric_limits<size_t>::max() / objectSize)
+ return 0;
+
+ size_t alloc = objectSize * capacity;
+
+ // Make sure qAllocMore won't overflow.
+ if (headerSize > size_t(MaxAllocSize) || alloc > size_t(MaxAllocSize) - headerSize)
+ return 0;
+
+ capacity = qAllocMore(int(alloc), int(headerSize)) / int(objectSize);
+ }
size_t allocSize = headerSize + objectSize * capacity;
@@ -118,7 +130,8 @@ void QArrayData::deallocate(QArrayData *data, size_t objectSize,
return;
#endif
- Q_ASSERT_X(!data->ref.isStatic(), "QArrayData::deallocate", "Static data can not be deleted");
+ Q_ASSERT_X(data == 0 || !data->ref.isStatic(), "QArrayData::deallocate",
+ "Static data can not be deleted");
::free(data);
}
diff --git a/src/corelib/tools/qarraydata.h b/src/corelib/tools/qarraydata.h
index 2119b3d4ac..df44503a8e 100644
--- a/src/corelib/tools/qarraydata.h
+++ b/src/corelib/tools/qarraydata.h
@@ -113,7 +113,7 @@ struct Q_CORE_EXPORT QArrayData
size_t alignment) Q_DECL_NOTHROW;
static const QArrayData shared_null[2];
- static QArrayData *sharedNull() { return const_cast<QArrayData*>(shared_null); }
+ static QArrayData *sharedNull() Q_DECL_NOTHROW { return const_cast<QArrayData*>(shared_null); }
};
Q_DECLARE_OPERATORS_FOR_FLAGS(QArrayData::AllocationOptions)
@@ -237,7 +237,7 @@ struct QTypedArrayData
return result;
}
- static QTypedArrayData *sharedNull()
+ static QTypedArrayData *sharedNull() Q_DECL_NOTHROW
{
Q_STATIC_ASSERT(sizeof(QTypedArrayData) == sizeof(QArrayData));
return static_cast<QTypedArrayData *>(QArrayData::sharedNull());
diff --git a/src/corelib/tools/qarraydatapointer.h b/src/corelib/tools/qarraydatapointer.h
index f2cd3ec983..aef38bc20b 100644
--- a/src/corelib/tools/qarraydatapointer.h
+++ b/src/corelib/tools/qarraydatapointer.h
@@ -169,8 +169,10 @@ public:
private:
Data *clone(QArrayData::AllocationOptions options) const Q_REQUIRED_RESULT
{
- QArrayDataPointer copy(Data::allocate(d->detachCapacity(d->size),
- options));
+ Data *x = Data::allocate(d->detachCapacity(d->size), options);
+ Q_CHECK_PTR(x);
+ QArrayDataPointer copy(x);
+
if (d->size)
copy->copyAppend(d->begin(), d->end());
diff --git a/src/corelib/tools/qbitarray.h b/src/corelib/tools/qbitarray.h
index 768dfa912d..8d550554ff 100644
--- a/src/corelib/tools/qbitarray.h
+++ b/src/corelib/tools/qbitarray.h
@@ -53,12 +53,12 @@ public:
QBitArray(const QBitArray &other) : d(other.d) {}
inline QBitArray &operator=(const QBitArray &other) { d = other.d; return *this; }
#ifdef Q_COMPILER_RVALUE_REFS
- inline QBitArray(QBitArray &&other) : d(std::move(other.d)) {}
- inline QBitArray &operator=(QBitArray &&other)
+ inline QBitArray(QBitArray &&other) Q_DECL_NOTHROW : d(std::move(other.d)) {}
+ inline QBitArray &operator=(QBitArray &&other) Q_DECL_NOTHROW
{ qSwap(d, other.d); return *this; }
#endif
- inline void swap(QBitArray &other) { qSwap(d, other.d); }
+ inline void swap(QBitArray &other) Q_DECL_NOTHROW { qSwap(d, other.d); }
inline int size() const { return (d.size() << 3) - *d.constData(); }
inline int count() const { return (d.size() << 3) - *d.constData(); }
diff --git a/src/corelib/tools/qbytearray.cpp b/src/corelib/tools/qbytearray.cpp
index bd0215902c..a683a36f61 100644
--- a/src/corelib/tools/qbytearray.cpp
+++ b/src/corelib/tools/qbytearray.cpp
@@ -1,6 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2014 Intel Corporation.
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtCore module of the Qt Toolkit.
@@ -38,6 +39,7 @@
#include "qlist.h"
#include "qlocale.h"
#include "qlocale_p.h"
+#include "qstringalgorithms_p.h"
#include "qscopedpointer.h"
#include <qdatastream.h>
#include <qmath.h>
@@ -55,6 +57,64 @@
QT_BEGIN_NAMESPACE
+// Latin 1 case system, used by QByteArray::to{Upper,Lower}() and qstr(n)icmp():
+/*
+#!/usr/bin/perl -l
+use feature "unicode_strings";
+for (0..255) {
+ $up = uc(chr($_));
+ $up = chr($_) if ord($up) > 0x100 || length $up > 1;
+ printf "0x%02x,", ord($up);
+ print "" if ($_ & 0xf) == 0xf;
+}
+*/
+static const uchar latin1_uppercased[256] = {
+ 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
+ 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,
+ 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,
+ 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
+ 0x40,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,
+ 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x5b,0x5c,0x5d,0x5e,0x5f,
+ 0x60,0x41,0x42,0x43,0x44,0x45,0x46,0x47,0x48,0x49,0x4a,0x4b,0x4c,0x4d,0x4e,0x4f,
+ 0x50,0x51,0x52,0x53,0x54,0x55,0x56,0x57,0x58,0x59,0x5a,0x7b,0x7c,0x7d,0x7e,0x7f,
+ 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,
+ 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,
+ 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,
+ 0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf,
+ 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,
+ 0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xd7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xdf,
+ 0xc0,0xc1,0xc2,0xc3,0xc4,0xc5,0xc6,0xc7,0xc8,0xc9,0xca,0xcb,0xcc,0xcd,0xce,0xcf,
+ 0xd0,0xd1,0xd2,0xd3,0xd4,0xd5,0xd6,0xf7,0xd8,0xd9,0xda,0xdb,0xdc,0xdd,0xde,0xff
+};
+
+/*
+#!/usr/bin/perl -l
+use feature "unicode_strings";
+for (0..255) {
+ $up = lc(chr($_));
+ $up = chr($_) if ord($up) > 0x100 || length $up > 1;
+ printf "0x%02x,", ord($up);
+ print "" if ($_ & 0xf) == 0xf;
+}
+*/
+static const uchar latin1_lowercased[256] = {
+ 0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,
+ 0x10,0x11,0x12,0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1a,0x1b,0x1c,0x1d,0x1e,0x1f,
+ 0x20,0x21,0x22,0x23,0x24,0x25,0x26,0x27,0x28,0x29,0x2a,0x2b,0x2c,0x2d,0x2e,0x2f,
+ 0x30,0x31,0x32,0x33,0x34,0x35,0x36,0x37,0x38,0x39,0x3a,0x3b,0x3c,0x3d,0x3e,0x3f,
+ 0x40,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
+ 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x5b,0x5c,0x5d,0x5e,0x5f,
+ 0x60,0x61,0x62,0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6a,0x6b,0x6c,0x6d,0x6e,0x6f,
+ 0x70,0x71,0x72,0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7a,0x7b,0x7c,0x7d,0x7e,0x7f,
+ 0x80,0x81,0x82,0x83,0x84,0x85,0x86,0x87,0x88,0x89,0x8a,0x8b,0x8c,0x8d,0x8e,0x8f,
+ 0x90,0x91,0x92,0x93,0x94,0x95,0x96,0x97,0x98,0x99,0x9a,0x9b,0x9c,0x9d,0x9e,0x9f,
+ 0xa0,0xa1,0xa2,0xa3,0xa4,0xa5,0xa6,0xa7,0xa8,0xa9,0xaa,0xab,0xac,0xad,0xae,0xaf,
+ 0xb0,0xb1,0xb2,0xb3,0xb4,0xb5,0xb6,0xb7,0xb8,0xb9,0xba,0xbb,0xbc,0xbd,0xbe,0xbf,
+ 0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef,
+ 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xd7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xdf,
+ 0xe0,0xe1,0xe2,0xe3,0xe4,0xe5,0xe6,0xe7,0xe8,0xe9,0xea,0xeb,0xec,0xed,0xee,0xef,
+ 0xf0,0xf1,0xf2,0xf3,0xf4,0xf5,0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfd,0xfe,0xff
+};
int qFindByteArray(
const char *haystack0, int haystackLen, int from,
@@ -249,7 +309,7 @@ int qstricmp(const char *str1, const char *str2)
uchar c;
if (!s1 || !s2)
return s1 ? 1 : (s2 ? -1 : 0);
- for (; !(res = (c = QChar::toLower((ushort)*s1)) - QChar::toLower((ushort)*s2)); s1++, s2++)
+ for (; !(res = (c = latin1_lowercased[*s1]) - latin1_lowercased[*s2]); s1++, s2++)
if (!c) // strings are equal
break;
return res;
@@ -284,7 +344,7 @@ int qstrnicmp(const char *str1, const char *str2, uint len)
if (!s1 || !s2)
return s1 ? 1 : (s2 ? -1 : 0);
for (; len--; s1++, s2++) {
- if ((res = (c = QChar::toLower((ushort)*s1)) - QChar::toLower((ushort)*s2)))
+ if ((res = (c = latin1_lowercased[*s1]) - latin1_lowercased[*s2]))
return res;
if (!c) // strings are equal
break;
@@ -1495,8 +1555,11 @@ void QByteArray::reallocData(uint alloc, Data::AllocationOptions options)
Data::deallocate(d);
d = x;
} else {
- if (options & Data::Grow)
+ if (options & Data::Grow) {
+ if (alloc > uint(MaxAllocSize) - uint(sizeof(Data)))
+ qBadAlloc();
alloc = qAllocMore(alloc, sizeof(Data));
+ }
Data *x = static_cast<Data *>(::realloc(d, sizeof(Data) + alloc));
Q_CHECK_PTR(x);
x->alloc = alloc;
@@ -2687,6 +2750,8 @@ QByteArray QByteArray::mid(int pos, int len) const
}
/*!
+ \fn QByteArray QByteArray::toLower() const
+
Returns a lowercase copy of the byte array. The bytearray is
interpreted as a Latin-1 encoded string.
@@ -2695,21 +2760,56 @@ QByteArray QByteArray::mid(int pos, int len) const
\sa toUpper(), {8-bit Character Comparisons}
*/
-QByteArray QByteArray::toLower() const
+
+// noinline so that the compiler won't inline the function in each of
+// toLower and toUpper when the only difference is the table being used
+// (even with constant propagation, there's no gain in performance).
+template <typename T>
+#ifdef Q_CC_MSVC
+__declspec(noinline)
+#elif defined(Q_CC_GNU)
+__attribute__((noinline))
+#endif
+static QByteArray toCase_template(T &input, const uchar * table)
{
- QByteArray s(*this);
- uchar *p = reinterpret_cast<uchar *>(s.data());
- uchar *e = reinterpret_cast<uchar *>(s.end());
- if (p) {
- while (p != e) {
- *p = QChar::toLower((ushort)*p);
- p++;
- }
+ // find the first bad character in input
+ const char *orig_begin = input.constBegin();
+ const char *firstBad = orig_begin;
+ const char *e = input.constEnd();
+ for ( ; firstBad != e ; ++firstBad) {
+ uchar ch = uchar(*firstBad);
+ uchar converted = table[ch];
+ if (ch != converted)
+ break;
+ }
+
+ if (firstBad == e)
+ return qMove(input);
+
+ // transform the rest
+ QByteArray s = qMove(input); // will copy if T is const QByteArray
+ char *b = s.begin(); // will detach if necessary
+ char *p = b + (firstBad - orig_begin);
+ e = b + s.size();
+ for ( ; p != e; ++p) {
+ *p = char(uchar(table[uchar(*p)]));
}
return s;
}
+QByteArray QByteArray::toLower_helper(const QByteArray &a)
+{
+ return toCase_template(a, latin1_lowercased);
+}
+
+QByteArray QByteArray::toLower_helper(QByteArray &a)
+{
+ return toCase_template(a, latin1_lowercased);
+}
+
/*!
+ \fn QByteArray QByteArray::toUpper() const
+
Returns an uppercase copy of the byte array. The bytearray is
interpreted as a Latin-1 encoded string.
@@ -2719,18 +2819,14 @@ QByteArray QByteArray::toLower() const
\sa toLower(), {8-bit Character Comparisons}
*/
-QByteArray QByteArray::toUpper() const
+QByteArray QByteArray::toUpper_helper(const QByteArray &a)
{
- QByteArray s(*this);
- uchar *p = reinterpret_cast<uchar *>(s.data());
- uchar *e = reinterpret_cast<uchar *>(s.end());
- if (p) {
- while (p != e) {
- *p = QChar::toUpper((ushort)*p);
- p++;
- }
- }
- return s;
+ return toCase_template(a, latin1_uppercased);
+}
+
+QByteArray QByteArray::toUpper_helper(QByteArray &a)
+{
+ return toCase_template(a, latin1_uppercased);
}
/*! \fn void QByteArray::clear()
@@ -3110,6 +3206,8 @@ QDataStream &operator>>(QDataStream &in, QByteArray &ba)
*/
/*!
+ \fn QByteArray QByteArray::simplified() const
+
Returns a byte array that has whitespace removed from the start
and the end, and which has each sequence of internal whitespace
replaced with a single space.
@@ -3124,32 +3222,19 @@ QDataStream &operator>>(QDataStream &in, QByteArray &ba)
\sa trimmed()
*/
-QByteArray QByteArray::simplified() const
+QByteArray QByteArray::simplified_helper(const QByteArray &a)
{
- if (d->size == 0)
- return *this;
- QByteArray result(d->size, Qt::Uninitialized);
- const char *from = d->data();
- const char *fromend = from + d->size;
- int outc=0;
- char *to = result.d->data();
- for (;;) {
- while (from!=fromend && ascii_isspace(uchar(*from)))
- from++;
- while (from!=fromend && !ascii_isspace(uchar(*from)))
- to[outc++] = *from++;
- if (from!=fromend)
- to[outc++] = ' ';
- else
- break;
- }
- if (outc > 0 && to[outc-1] == ' ')
- outc--;
- result.resize(outc);
- return result;
+ return QStringAlgorithms<const QByteArray>::simplified_helper(a);
+}
+
+QByteArray QByteArray::simplified_helper(QByteArray &a)
+{
+ return QStringAlgorithms<QByteArray>::simplified_helper(a);
}
/*!
+ \fn QByteArray QByteArray::trimmed() const
+
Returns a byte array that has whitespace removed from the start
and the end.
@@ -3164,29 +3249,17 @@ QByteArray QByteArray::simplified() const
\sa simplified()
*/
-QByteArray QByteArray::trimmed() const
+QByteArray QByteArray::trimmed_helper(const QByteArray &a)
{
- if (d->size == 0)
- return *this;
- const char *s = d->data();
- if (!ascii_isspace(uchar(*s)) && !ascii_isspace(uchar(s[d->size-1])))
- return *this;
- int start = 0;
- int end = d->size - 1;
- while (start<=end && ascii_isspace(uchar(s[start]))) // skip white space from start
- start++;
- if (start <= end) { // only white space
- while (end && ascii_isspace(uchar(s[end]))) // skip white space from end
- end--;
- }
- int l = end - start + 1;
- if (l <= 0) {
- QByteArrayDataPtr empty = { Data::allocate(0) };
- return QByteArray(empty);
- }
- return QByteArray(s+start, l);
+ return QStringAlgorithms<const QByteArray>::trimmed_helper(a);
+}
+
+QByteArray QByteArray::trimmed_helper(QByteArray &a)
+{
+ return QStringAlgorithms<QByteArray>::trimmed_helper(a);
}
+
/*!
Returns a byte array of size \a width that contains this byte
array padded by the \a fill character.
@@ -4062,15 +4135,9 @@ QByteArray QByteArray::fromHex(const QByteArray &hexEncoded)
bool odd_digit = true;
for (int i = hexEncoded.size() - 1; i >= 0; --i) {
- int ch = hexEncoded.at(i);
- int tmp;
- if (ch >= '0' && ch <= '9')
- tmp = ch - '0';
- else if (ch >= 'a' && ch <= 'f')
- tmp = ch - 'a' + 10;
- else if (ch >= 'A' && ch <= 'F')
- tmp = ch - 'A' + 10;
- else
+ uchar ch = uchar(hexEncoded.at(i));
+ int tmp = QtMiscUtils::fromHex(ch);
+ if (tmp == -1)
continue;
if (odd_digit) {
--result;
@@ -4098,16 +4165,8 @@ QByteArray QByteArray::toHex() const
char *hexData = hex.data();
const uchar *data = (const uchar *)d->data();
for (int i = 0; i < d->size; ++i) {
- int j = (data[i] >> 4) & 0xf;
- if (j <= 9)
- hexData[i*2] = (j + '0');
- else
- hexData[i*2] = (j + 'a' - 10);
- j = data[i] & 0xf;
- if (j <= 9)
- hexData[i*2+1] = (j + '0');
- else
- hexData[i*2+1] = (j + 'a' - 10);
+ hexData[i*2] = QtMiscUtils::toHexLower(data[i] >> 4);
+ hexData[i*2+1] = QtMiscUtils::toHexLower(data[i] & 0xf);
}
return hex;
}
@@ -4302,12 +4361,6 @@ static inline bool q_strchr(const char str[], char chr)
return false;
}
-static inline char toHexHelper(char c)
-{
- static const char hexnumbers[] = "0123456789ABCDEF";
- return hexnumbers[c & 0xf];
-}
-
static void q_toPercentEncoding(QByteArray *ba, const char *dontEncode, const char *alsoEncode, char percent)
{
if (ba->isEmpty())
@@ -4340,8 +4393,8 @@ static void q_toPercentEncoding(QByteArray *ba, const char *dontEncode, const ch
output = ba->data();
}
output[length++] = percent;
- output[length++] = toHexHelper((c & 0xf0) >> 4);
- output[length++] = toHexHelper(c & 0xf);
+ output[length++] = QtMiscUtils::toHexUpper((c & 0xf0) >> 4);
+ output[length++] = QtMiscUtils::toHexUpper(c & 0xf);
}
}
if (output)
diff --git a/src/corelib/tools/qbytearray.h b/src/corelib/tools/qbytearray.h
index 3bcc7b1f2a..a549585400 100644
--- a/src/corelib/tools/qbytearray.h
+++ b/src/corelib/tools/qbytearray.h
@@ -195,12 +195,13 @@ public:
QByteArray &operator=(const QByteArray &);
QByteArray &operator=(const char *str);
#ifdef Q_COMPILER_RVALUE_REFS
- inline QByteArray(QByteArray && other) : d(other.d) { other.d = Data::sharedNull(); }
- inline QByteArray &operator=(QByteArray &&other)
+ inline QByteArray(QByteArray && other) Q_DECL_NOTHROW : d(other.d) { other.d = Data::sharedNull(); }
+ inline QByteArray &operator=(QByteArray &&other) Q_DECL_NOTHROW
{ qSwap(d, other.d); return *this; }
#endif
- inline void swap(QByteArray &other) { qSwap(d, other.d); }
+ inline void swap(QByteArray &other) Q_DECL_NOTHROW
+ { qSwap(d, other.d); }
inline int size() const;
bool isEmpty() const;
@@ -259,11 +260,40 @@ public:
void truncate(int pos);
void chop(int n);
+#if defined(Q_COMPILER_REF_QUALIFIERS) && !defined(QT_COMPILING_QSTRING_COMPAT_CPP)
+# if defined(Q_CC_GNU)
+ // required due to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61941
+# pragma push_macro("Q_REQUIRED_RESULT")
+# undef Q_REQUIRED_RESULT
+# define Q_REQUIRED_RESULT
+# define Q_REQUIRED_RESULT_pushed
+# endif
+ QByteArray toLower() const & Q_REQUIRED_RESULT
+ { return toLower_helper(*this); }
+ QByteArray toLower() && Q_REQUIRED_RESULT
+ { return toLower_helper(*this); }
+ QByteArray toUpper() const & Q_REQUIRED_RESULT
+ { return toUpper_helper(*this); }
+ QByteArray toUpper() && Q_REQUIRED_RESULT
+ { return toUpper_helper(*this); }
+ QByteArray trimmed() const & Q_REQUIRED_RESULT
+ { return trimmed_helper(*this); }
+ QByteArray trimmed() && Q_REQUIRED_RESULT
+ { return trimmed_helper(*this); }
+ QByteArray simplified() const & Q_REQUIRED_RESULT
+ { return simplified_helper(*this); }
+ QByteArray simplified() && Q_REQUIRED_RESULT
+ { return simplified_helper(*this); }
+# ifdef Q_REQUIRED_RESULT_pushed
+# pragma pop_macro("Q_REQUIRED_RESULT")
+# endif
+#else
QByteArray toLower() const Q_REQUIRED_RESULT;
QByteArray toUpper() const Q_REQUIRED_RESULT;
-
QByteArray trimmed() const Q_REQUIRED_RESULT;
QByteArray simplified() const Q_REQUIRED_RESULT;
+#endif
+
QByteArray leftJustified(int width, char fill = ' ', bool truncate = false) const Q_REQUIRED_RESULT;
QByteArray rightJustified(int width, char fill = ' ', bool truncate = false) const Q_REQUIRED_RESULT;
@@ -417,6 +447,15 @@ private:
void expand(int i);
QByteArray nulTerminated() const;
+ static QByteArray toLower_helper(const QByteArray &a);
+ static QByteArray toLower_helper(QByteArray &a);
+ static QByteArray toUpper_helper(const QByteArray &a);
+ static QByteArray toUpper_helper(QByteArray &a);
+ static QByteArray trimmed_helper(const QByteArray &a);
+ static QByteArray trimmed_helper(QByteArray &a);
+ static QByteArray simplified_helper(const QByteArray &a);
+ static QByteArray simplified_helper(QByteArray &a);
+
friend class QByteRef;
friend class QString;
friend Q_CORE_EXPORT QByteArray qUncompress(const uchar *data, int nbytes);
diff --git a/src/corelib/tools/qbytearraymatcher.h b/src/corelib/tools/qbytearraymatcher.h
index c7b83a98cc..a49ae2fd9d 100644
--- a/src/corelib/tools/qbytearraymatcher.h
+++ b/src/corelib/tools/qbytearraymatcher.h
@@ -66,11 +66,6 @@ public:
private:
QByteArrayMatcherPrivate *d;
QByteArray q_pattern;
-#ifdef Q_CC_RVCT
-// explicitly allow anonymous unions for RVCT to prevent compiler warnings
-# pragma push
-# pragma anon_unions
-#endif
struct Data {
uchar q_skiptable[256];
const uchar *p;
@@ -80,9 +75,6 @@ private:
uint dummy[256];
Data p;
};
-#ifdef Q_CC_RVCT
-# pragma pop
-#endif
};
QT_END_NAMESPACE
diff --git a/src/corelib/tools/qcache.h b/src/corelib/tools/qcache.h
index 960e0422a1..80fdb8c9cd 100644
--- a/src/corelib/tools/qcache.h
+++ b/src/corelib/tools/qcache.h
@@ -83,7 +83,7 @@ class QCache
Q_DISABLE_COPY(QCache)
public:
- inline explicit QCache(int maxCost = 100);
+ inline explicit QCache(int maxCost = 100) Q_DECL_NOTHROW;
inline ~QCache() { clear(); }
inline int maxCost() const { return mx; }
@@ -110,7 +110,7 @@ private:
};
template <class Key, class T>
-inline QCache<Key, T>::QCache(int amaxCost)
+inline QCache<Key, T>::QCache(int amaxCost) Q_DECL_NOTHROW
: f(0), l(0), mx(amaxCost), total(0) {}
template <class Key, class T>
diff --git a/src/corelib/tools/qchar.h b/src/corelib/tools/qchar.h
index 4db09e0f82..547c1ffda2 100644
--- a/src/corelib/tools/qchar.h
+++ b/src/corelib/tools/qchar.h
@@ -83,8 +83,10 @@ public:
#ifndef QT_NO_CAST_FROM_ASCII
QT_ASCII_CAST_WARN Q_DECL_CONSTEXPR explicit QChar(char c) : ucs(uchar(c)) { }
+#ifndef QT_RESTRICTED_CAST_FROM_ASCII
QT_ASCII_CAST_WARN Q_DECL_CONSTEXPR explicit QChar(uchar c) : ucs(c) { }
#endif
+#endif
// Unicode information
enum Category
@@ -377,68 +379,77 @@ public:
inline UnicodeVersion unicodeVersion() const { return QChar::unicodeVersion(ucs); }
#if QT_DEPRECATED_SINCE(5, 0)
- QT_DEPRECATED inline char toAscii() const { return toLatin1(); }
+ QT_DEPRECATED Q_DECL_CONSTEXPR inline char toAscii() const { return toLatin1(); }
#endif
- inline char toLatin1() const;
+ Q_DECL_CONSTEXPR inline char toLatin1() const;
Q_DECL_CONSTEXPR inline ushort unicode() const { return ucs; }
inline ushort &unicode() { return ucs; }
#if QT_DEPRECATED_SINCE(5, 0)
- QT_DEPRECATED static inline QChar fromAscii(char c)
+ QT_DEPRECATED static Q_DECL_CONSTEXPR inline QChar fromAscii(char c)
{ return fromLatin1(c); }
#endif
- static inline QChar fromLatin1(char c);
+ Q_DECL_CONSTEXPR static inline QChar fromLatin1(char c);
- inline bool isNull() const { return ucs == 0; }
+ Q_DECL_CONSTEXPR inline bool isNull() const { return ucs == 0; }
inline bool isPrint() const { return QChar::isPrint(ucs); }
- inline bool isSpace() const { return QChar::isSpace(ucs); }
+ Q_DECL_CONSTEXPR inline bool isSpace() const { return QChar::isSpace(ucs); }
inline bool isMark() const { return QChar::isMark(ucs); }
inline bool isPunct() const { return QChar::isPunct(ucs); }
inline bool isSymbol() const { return QChar::isSymbol(ucs); }
- inline bool isLetter() const { return QChar::isLetter(ucs); }
- inline bool isNumber() const { return QChar::isNumber(ucs); }
- inline bool isLetterOrNumber() const { return QChar::isLetterOrNumber(ucs); }
- inline bool isDigit() const { return QChar::isDigit(ucs); }
- inline bool isLower() const { return QChar::isLower(ucs); }
- inline bool isUpper() const { return QChar::isUpper(ucs); }
- inline bool isTitleCase() const { return QChar::isTitleCase(ucs); }
-
- inline bool isNonCharacter() const { return QChar::isNonCharacter(ucs); }
- inline bool isHighSurrogate() const { return QChar::isHighSurrogate(ucs); }
- inline bool isLowSurrogate() const { return QChar::isLowSurrogate(ucs); }
- inline bool isSurrogate() const { return QChar::isSurrogate(ucs); }
-
- inline uchar cell() const { return uchar(ucs & 0xff); }
- inline uchar row() const { return uchar((ucs>>8)&0xff); }
+ Q_DECL_CONSTEXPR inline bool isLetter() const { return QChar::isLetter(ucs); }
+ Q_DECL_CONSTEXPR inline bool isNumber() const { return QChar::isNumber(ucs); }
+ Q_DECL_CONSTEXPR inline bool isLetterOrNumber() const { return QChar::isLetterOrNumber(ucs); }
+ Q_DECL_CONSTEXPR inline bool isDigit() const { return QChar::isDigit(ucs); }
+ Q_DECL_CONSTEXPR inline bool isLower() const { return QChar::isLower(ucs); }
+ Q_DECL_CONSTEXPR inline bool isUpper() const { return QChar::isUpper(ucs); }
+ Q_DECL_CONSTEXPR inline bool isTitleCase() const { return QChar::isTitleCase(ucs); }
+
+ Q_DECL_CONSTEXPR inline bool isNonCharacter() const { return QChar::isNonCharacter(ucs); }
+ Q_DECL_CONSTEXPR inline bool isHighSurrogate() const { return QChar::isHighSurrogate(ucs); }
+ Q_DECL_CONSTEXPR inline bool isLowSurrogate() const { return QChar::isLowSurrogate(ucs); }
+ Q_DECL_CONSTEXPR inline bool isSurrogate() const { return QChar::isSurrogate(ucs); }
+
+ Q_DECL_CONSTEXPR inline uchar cell() const { return uchar(ucs & 0xff); }
+ Q_DECL_CONSTEXPR inline uchar row() const { return uchar((ucs>>8)&0xff); }
inline void setCell(uchar cell);
inline void setRow(uchar row);
- static inline bool isNonCharacter(uint ucs4) {
+ static Q_DECL_CONSTEXPR inline bool isNonCharacter(uint ucs4)
+ {
return ucs4 >= 0xfdd0 && (ucs4 <= 0xfdef || (ucs4 & 0xfffe) == 0xfffe);
}
- static inline bool isHighSurrogate(uint ucs4) {
+ static Q_DECL_CONSTEXPR inline bool isHighSurrogate(uint ucs4)
+ {
return ((ucs4 & 0xfffffc00) == 0xd800);
}
- static inline bool isLowSurrogate(uint ucs4) {
+ static Q_DECL_CONSTEXPR inline bool isLowSurrogate(uint ucs4)
+ {
return ((ucs4 & 0xfffffc00) == 0xdc00);
}
- static inline bool isSurrogate(uint ucs4) {
+ static Q_DECL_CONSTEXPR inline bool isSurrogate(uint ucs4)
+ {
return (ucs4 - 0xd800u < 2048u);
}
- static inline bool requiresSurrogates(uint ucs4) {
+ static Q_DECL_CONSTEXPR inline bool requiresSurrogates(uint ucs4)
+ {
return (ucs4 >= 0x10000);
}
- static inline uint surrogateToUcs4(ushort high, ushort low) {
+ static Q_DECL_CONSTEXPR inline uint surrogateToUcs4(ushort high, ushort low)
+ {
return (uint(high)<<10) + low - 0x35fdc00;
}
- static inline uint surrogateToUcs4(QChar high, QChar low) {
- return surrogateToUcs4(high.unicode(), low.unicode());
+ static Q_DECL_CONSTEXPR inline uint surrogateToUcs4(QChar high, QChar low)
+ {
+ return surrogateToUcs4(high.ucs, low.ucs);
}
- static inline ushort highSurrogate(uint ucs4) {
+ static Q_DECL_CONSTEXPR inline ushort highSurrogate(uint ucs4)
+ {
return ushort((ucs4>>10) + 0xd7c0);
}
- static inline ushort lowSurrogate(uint ucs4) {
+ static Q_DECL_CONSTEXPR inline ushort lowSurrogate(uint ucs4)
+ {
return ushort(ucs4%0x400 + 0xdc00);
}
@@ -469,17 +480,17 @@ public:
static UnicodeVersion QT_FASTCALL currentUnicodeVersion() Q_DECL_CONST_FUNCTION;
static bool QT_FASTCALL isPrint(uint ucs4) Q_DECL_CONST_FUNCTION;
- static inline bool isSpace(uint ucs4) Q_DECL_CONST_FUNCTION;
+ static Q_DECL_CONSTEXPR inline bool isSpace(uint ucs4) Q_DECL_CONST_FUNCTION;
static bool QT_FASTCALL isMark(uint ucs4) Q_DECL_CONST_FUNCTION;
static bool QT_FASTCALL isPunct(uint ucs4) Q_DECL_CONST_FUNCTION;
static bool QT_FASTCALL isSymbol(uint ucs4) Q_DECL_CONST_FUNCTION;
- static inline bool isLetter(uint ucs4) Q_DECL_CONST_FUNCTION;
- static inline bool isNumber(uint ucs4) Q_DECL_CONST_FUNCTION;
- static inline bool isLetterOrNumber(uint ucs4) Q_DECL_CONST_FUNCTION;
- static inline bool isDigit(uint ucs4) Q_DECL_CONST_FUNCTION;
- static inline bool isLower(uint ucs4) Q_DECL_CONST_FUNCTION;
- static inline bool isUpper(uint ucs4) Q_DECL_CONST_FUNCTION;
- static inline bool isTitleCase(uint ucs4) Q_DECL_CONST_FUNCTION;
+ static Q_DECL_CONSTEXPR inline bool isLetter(uint ucs4) Q_DECL_CONST_FUNCTION;
+ static Q_DECL_CONSTEXPR inline bool isNumber(uint ucs4) Q_DECL_CONST_FUNCTION;
+ static Q_DECL_CONSTEXPR inline bool isLetterOrNumber(uint ucs4) Q_DECL_CONST_FUNCTION;
+ static Q_DECL_CONSTEXPR inline bool isDigit(uint ucs4) Q_DECL_CONST_FUNCTION;
+ static Q_DECL_CONSTEXPR inline bool isLower(uint ucs4) Q_DECL_CONST_FUNCTION;
+ static Q_DECL_CONSTEXPR inline bool isUpper(uint ucs4) Q_DECL_CONST_FUNCTION;
+ static Q_DECL_CONSTEXPR inline bool isTitleCase(uint ucs4) Q_DECL_CONST_FUNCTION;
private:
static bool QT_FASTCALL isSpace_helper(uint ucs4) Q_DECL_CONST_FUNCTION;
@@ -491,53 +502,57 @@ private:
QChar(char c);
QChar(uchar c);
#endif
+
+ friend Q_DECL_CONSTEXPR bool operator==(QChar, QChar);
+ friend Q_DECL_CONSTEXPR bool operator< (QChar, QChar);
ushort ucs;
};
Q_DECLARE_TYPEINFO(QChar, Q_MOVABLE_TYPE);
-inline char QChar::toLatin1() const { return ucs > 0xff ? '\0' : char(ucs); }
-inline QChar QChar::fromLatin1(char c) { return QChar(ushort(uchar(c))); }
+Q_DECL_CONSTEXPR inline char QChar::toLatin1() const { return ucs > 0xff ? '\0' : char(ucs); }
+Q_DECL_CONSTEXPR inline QChar QChar::fromLatin1(char c) { return QChar(ushort(uchar(c))); }
inline void QChar::setCell(uchar acell)
{ ucs = ushort((ucs & 0xff00) + acell); }
inline void QChar::setRow(uchar arow)
{ ucs = ushort((ushort(arow)<<8) + (ucs&0xff)); }
-inline bool QChar::isSpace(uint ucs4)
+Q_DECL_CONSTEXPR inline bool QChar::isSpace(uint ucs4)
{
// note that [0x09..0x0d] + 0x85 are exceptional Cc-s and must be handled explicitly
return ucs4 == 0x20 || (ucs4 <= 0x0d && ucs4 >= 0x09)
|| (ucs4 > 127 && (ucs4 == 0x85 || ucs4 == 0xa0 || QChar::isSpace_helper(ucs4)));
}
-inline bool QChar::isLetter(uint ucs4)
+Q_DECL_CONSTEXPR inline bool QChar::isLetter(uint ucs4)
{
return (ucs4 >= 'A' && ucs4 <= 'z' && (ucs4 >= 'a' || ucs4 <= 'Z'))
|| (ucs4 > 127 && QChar::isLetter_helper(ucs4));
}
-inline bool QChar::isNumber(uint ucs4)
+Q_DECL_CONSTEXPR inline bool QChar::isNumber(uint ucs4)
{ return (ucs4 <= '9' && ucs4 >= '0') || (ucs4 > 127 && QChar::isNumber_helper(ucs4)); }
-inline bool QChar::isLetterOrNumber(uint ucs4)
+Q_DECL_CONSTEXPR inline bool QChar::isLetterOrNumber(uint ucs4)
{
return (ucs4 >= 'A' && ucs4 <= 'z' && (ucs4 >= 'a' || ucs4 <= 'Z'))
|| (ucs4 >= '0' && ucs4 <= '9')
|| (ucs4 > 127 && QChar::isLetterOrNumber_helper(ucs4));
}
-inline bool QChar::isDigit(uint ucs4)
+Q_DECL_CONSTEXPR inline bool QChar::isDigit(uint ucs4)
{ return (ucs4 <= '9' && ucs4 >= '0') || (ucs4 > 127 && QChar::category(ucs4) == Number_DecimalDigit); }
-inline bool QChar::isLower(uint ucs4)
+Q_DECL_CONSTEXPR inline bool QChar::isLower(uint ucs4)
{ return (ucs4 <= 'z' && ucs4 >= 'a') || (ucs4 > 127 && QChar::category(ucs4) == Letter_Lowercase); }
-inline bool QChar::isUpper(uint ucs4)
+Q_DECL_CONSTEXPR inline bool QChar::isUpper(uint ucs4)
{ return (ucs4 <= 'Z' && ucs4 >= 'A') || (ucs4 > 127 && QChar::category(ucs4) == Letter_Uppercase); }
-inline bool QChar::isTitleCase(uint ucs4)
+Q_DECL_CONSTEXPR inline bool QChar::isTitleCase(uint ucs4)
{ return ucs4 > 127 && QChar::category(ucs4) == Letter_Titlecase; }
-inline bool operator==(QChar c1, QChar c2) { return c1.unicode() == c2.unicode(); }
-inline bool operator!=(QChar c1, QChar c2) { return c1.unicode() != c2.unicode(); }
-inline bool operator<=(QChar c1, QChar c2) { return c1.unicode() <= c2.unicode(); }
-inline bool operator>=(QChar c1, QChar c2) { return c1.unicode() >= c2.unicode(); }
-inline bool operator<(QChar c1, QChar c2) { return c1.unicode() < c2.unicode(); }
-inline bool operator>(QChar c1, QChar c2) { return c1.unicode() > c2.unicode(); }
+Q_DECL_CONSTEXPR inline bool operator==(QChar c1, QChar c2) { return c1.ucs == c2.ucs; }
+Q_DECL_CONSTEXPR inline bool operator< (QChar c1, QChar c2) { return c1.ucs < c2.ucs; }
+
+Q_DECL_CONSTEXPR inline bool operator!=(QChar c1, QChar c2) { return !operator==(c1, c2); }
+Q_DECL_CONSTEXPR inline bool operator>=(QChar c1, QChar c2) { return !operator< (c1, c2); }
+Q_DECL_CONSTEXPR inline bool operator> (QChar c1, QChar c2) { return operator< (c2, c1); }
+Q_DECL_CONSTEXPR inline bool operator<=(QChar c1, QChar c2) { return !operator< (c2, c1); }
#ifndef QT_NO_DATASTREAM
Q_CORE_EXPORT QDataStream &operator<<(QDataStream &, QChar);
diff --git a/src/corelib/tools/qcollator.h b/src/corelib/tools/qcollator.h
index f9ae44cf6b..98f06bcc1f 100644
--- a/src/corelib/tools/qcollator.h
+++ b/src/corelib/tools/qcollator.h
@@ -52,10 +52,10 @@ public:
~QCollatorSortKey();
QCollatorSortKey &operator=(const QCollatorSortKey &other);
#ifdef Q_COMPILER_RVALUE_REFS
- inline QCollatorSortKey &operator=(QCollatorSortKey &&other)
+ inline QCollatorSortKey &operator=(QCollatorSortKey &&other) Q_DECL_NOTHROW
{ swap(other); return *this; }
#endif
- void swap(QCollatorSortKey &other)
+ void swap(QCollatorSortKey &other) Q_DECL_NOTHROW
{ d.swap(other.d); }
int compare(const QCollatorSortKey &key) const;
@@ -82,13 +82,13 @@ public:
~QCollator();
QCollator &operator=(const QCollator &);
#ifdef Q_COMPILER_RVALUE_REFS
- QCollator(QCollator &&other)
+ QCollator(QCollator &&other) Q_DECL_NOTHROW
: d(other.d) { other.d = 0; }
- QCollator &operator=(QCollator &&other)
+ QCollator &operator=(QCollator &&other) Q_DECL_NOTHROW
{ swap(other); return *this; }
#endif
- void swap(QCollator &other)
+ void swap(QCollator &other) Q_DECL_NOTHROW
{ qSwap(d, other.d); }
void setLocale(const QLocale &locale);
diff --git a/src/corelib/tools/qcommandlineparser.cpp b/src/corelib/tools/qcommandlineparser.cpp
index 01772b2ad5..117ce381f1 100644
--- a/src/corelib/tools/qcommandlineparser.cpp
+++ b/src/corelib/tools/qcommandlineparser.cpp
@@ -37,6 +37,10 @@
#include <qcoreapplication.h>
#include <qhash.h>
#include <qvector.h>
+#include <qdebug.h>
+#if defined(Q_OS_WIN) && !defined(QT_BOOTSTRAPPED) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT)
+# include <qt_windows.h>
+#endif
#include <stdio.h>
#include <stdlib.h>
@@ -209,7 +213,10 @@ QStringList QCommandLineParserPrivate::aliases(const QString &optionName) const
platforms. These applications may not use the standard output or error channels
since the output is either discarded or not accessible.
- For such GUI applications, it is recommended to display help texts and error messages
+ On Windows, QCommandLineParser uses message boxes to display usage information
+ and errors if no console window can be obtained.
+
+ For other platforms, it is recommended to display help texts and error messages
using a QMessageBox. To preserve the formatting of the help text, rich text
with \c <pre> elements should be used:
@@ -219,36 +226,20 @@ QStringList QCommandLineParserPrivate::aliases(const QString &optionName) const
case CommandLineOk:
break;
case CommandLineError:
-#ifdef Q_OS_WIN
QMessageBox::warning(0, QGuiApplication::applicationDisplayName(),
"<html><head/><body><h2>" + errorMessage + "</h2><pre>"
+ parser.helpText() + "</pre></body></html>");
-#else
- fputs(qPrintable(errorMessage), stderr);
- fputs("\n\n", stderr);
- fputs(qPrintable(parser.helpText()), stderr);
-#endif
return 1;
case CommandLineVersionRequested:
-#ifdef Q_OS_WIN
QMessageBox::information(0, QGuiApplication::applicationDisplayName(),
QGuiApplication::applicationDisplayName() + ' '
+ QCoreApplication::applicationVersion());
-#else
- printf("%s %s\n", QGuiApplication::applicationDisplayName(),
- qPrintable(QCoreApplication::applicationVersion()));
-#endif
return 0;
case CommandLineHelpRequested:
-#ifdef Q_OS_WIN
QMessageBox::warning(0, QGuiApplication::applicationDisplayName(),
"<html><head/><body><pre>"
+ parser.helpText() + "</pre></body></html>");
return 0;
-#else
- parser.showHelp();
- Q_UNREACHABLE();
-#endif
}
\endcode
@@ -491,6 +482,41 @@ QString QCommandLineParser::errorText() const
return QString();
}
+enum MessageType { UsageMessage, ErrorMessage };
+
+#if defined(Q_OS_WIN) && !defined(QT_BOOTSTRAPPED) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT)
+// Return whether to use a message box. Use handles if a console can be obtained
+// or we are run with redirected handles (for example, by QProcess).
+static inline bool displayMessageBox()
+{
+ if (GetConsoleWindow())
+ return false;
+ STARTUPINFO startupInfo;
+ startupInfo.cb = sizeof(STARTUPINFO);
+ GetStartupInfo(&startupInfo);
+ return !(startupInfo.dwFlags & STARTF_USESTDHANDLES);
+}
+#endif // Q_OS_WIN && !QT_BOOTSTRAPPED && !Q_OS_WIN && !Q_OS_WINRT
+
+static void showParserMessage(const QString &message, MessageType type)
+{
+#if defined(Q_OS_WIN) && !defined(QT_BOOTSTRAPPED) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT)
+ if (displayMessageBox()) {
+ const UINT flags = MB_OK | MB_TOPMOST | MB_SETFOREGROUND
+ | (type == UsageMessage ? MB_ICONINFORMATION : MB_ICONERROR);
+ QString title;
+ if (QCoreApplication::instance())
+ title = QCoreApplication::instance()->property("applicationDisplayName").toString();
+ if (title.isEmpty())
+ title = QCoreApplication::applicationName();
+ MessageBoxW(0, reinterpret_cast<const wchar_t *>(message.utf16()),
+ reinterpret_cast<const wchar_t *>(title.utf16()), flags);
+ return;
+ }
+#endif // Q_OS_WIN && !QT_BOOTSTRAPPED && !Q_OS_WIN && !Q_OS_WINRT
+ fputs(qPrintable(message), type == UsageMessage ? stdout : stderr);
+}
+
/*!
Processes the command line \a arguments.
@@ -507,7 +533,7 @@ QString QCommandLineParser::errorText() const
void QCommandLineParser::process(const QStringList &arguments)
{
if (!d->parse(arguments)) {
- fprintf(stderr, "%s\n", qPrintable(errorText()));
+ showParserMessage(errorText() + QLatin1Char('\n'), ErrorMessage);
::exit(EXIT_FAILURE);
}
@@ -913,7 +939,9 @@ QStringList QCommandLineParser::unknownOptionNames() const
*/
Q_NORETURN void QCommandLineParser::showVersion()
{
- fprintf(stdout, "%s %s\n", qPrintable(QCoreApplication::applicationName()), qPrintable(QCoreApplication::applicationVersion()));
+ showParserMessage(QCoreApplication::applicationName() + QLatin1Char(' ')
+ + QCoreApplication::applicationVersion() + QLatin1Char('\n'),
+ UsageMessage);
::exit(EXIT_SUCCESS);
}
@@ -930,7 +958,7 @@ Q_NORETURN void QCommandLineParser::showVersion()
*/
Q_NORETURN void QCommandLineParser::showHelp(int exitCode)
{
- fprintf(stdout, "%s", qPrintable(d->helpText()));
+ showParserMessage(d->helpText(), UsageMessage);
::exit(exitCode);
}
diff --git a/src/corelib/tools/qdatetime.cpp b/src/corelib/tools/qdatetime.cpp
index 082b721e82..b95ccc0874 100644
--- a/src/corelib/tools/qdatetime.cpp
+++ b/src/corelib/tools/qdatetime.cpp
@@ -249,7 +249,7 @@ static QString toOffsetString(Qt::DateFormat format, int offset)
}
// Parse offset in [+-]HH[[:]mm] format
-static int fromOffsetString(const QString &offsetString, bool *valid)
+static int fromOffsetString(const QStringRef &offsetString, bool *valid)
{
*valid = false;
@@ -270,15 +270,15 @@ static int fromOffsetString(const QString &offsetString, bool *valid)
return 0;
// Split the hour and minute parts
- QStringList parts = offsetString.mid(1).split(QLatin1Char(':'));
+ QVector<QStringRef> parts = offsetString.mid(1).split(QLatin1Char(':'));
if (parts.count() == 1) {
// [+-]HHmm or [+-]HH format
- parts.append(parts.at(0).mid(2));
- parts[0] = parts.at(0).left(2);
+ parts.append(parts.first().mid(2));
+ parts[0] = parts.first().left(2);
}
bool ok = false;
- const int hour = parts.at(0).toInt(&ok);
+ const int hour = parts.first().toInt(&ok);
if (!ok)
return 0;
@@ -898,18 +898,18 @@ QString QDate::toString(Qt::DateFormat format) const
#ifndef QT_NO_TEXTDATE
case Qt::TextDate:
getDateFromJulianDay(jd, &y, &m, &d);
- return QString::fromUtf8("%1 %2 %3 %4").arg(shortDayName(dayOfWeek()))
- .arg(shortMonthName(m))
- .arg(d)
- .arg(y);
+ return QString::fromLatin1("%1 %2 %3 %4").arg(shortDayName(dayOfWeek()))
+ .arg(shortMonthName(m))
+ .arg(d)
+ .arg(y);
#endif
case Qt::ISODate:
getDateFromJulianDay(jd, &y, &m, &d);
if (y < 0 || y > 9999)
return QString();
- return QString::fromUtf8("%1-%2-%3").arg(y, 4, 10, QLatin1Char('0'))
- .arg(m, 2, 10, QLatin1Char('0'))
- .arg(d, 2, 10, QLatin1Char('0'));
+ return QString::fromLatin1("%1-%2-%3").arg(y, 4, 10, QLatin1Char('0'))
+ .arg(m, 2, 10, QLatin1Char('0'))
+ .arg(d, 2, 10, QLatin1Char('0'));
}
}
@@ -1247,12 +1247,12 @@ QDate QDate::fromString(const QString& string, Qt::DateFormat format)
default:
#ifndef QT_NO_TEXTDATE
case Qt::TextDate: {
- QStringList parts = string.split(QLatin1Char(' '), QString::SkipEmptyParts);
+ QVector<QStringRef> parts = string.splitRef(QLatin1Char(' '), QString::SkipEmptyParts);
if (parts.count() != 4)
return QDate();
- QString monthName = parts.at(1);
+ QStringRef monthName = parts.at(1);
int month = -1;
// Assume that English monthnames are the default
for (int i = 0; i < 12; ++i) {
@@ -1288,10 +1288,10 @@ QDate QDate::fromString(const QString& string, Qt::DateFormat format)
|| (string.size() > 10 && string.at(10).isDigit())) {
return QDate();
}
- const int year = string.mid(0, 4).toInt();
+ const int year = string.midRef(0, 4).toInt();
if (year <= 0 || year > 9999)
return QDate();
- return QDate(year, string.mid(5, 2).toInt(), string.mid(8, 2).toInt());
+ return QDate(year, string.midRef(5, 2).toInt(), string.midRef(8, 2).toInt());
}
}
return QDate();
@@ -1649,9 +1649,9 @@ QString QTime::toString(Qt::DateFormat format) const
case Qt::ISODate:
case Qt::TextDate:
default:
- return QString::fromUtf8("%1:%2:%3").arg(hour(), 2, 10, QLatin1Char('0'))
- .arg(minute(), 2, 10, QLatin1Char('0'))
- .arg(second(), 2, 10, QLatin1Char('0'));
+ return QString::fromLatin1("%1:%2:%3").arg(hour(), 2, 10, QLatin1Char('0'))
+ .arg(minute(), 2, 10, QLatin1Char('0'))
+ .arg(second(), 2, 10, QLatin1Char('0'));
}
}
@@ -3186,13 +3186,11 @@ QTimeZone QDateTime::timeZone() const
d->m_timeZone = QTimeZone(d->m_offsetFromUtc);
return d->m_timeZone;
case Qt::UTC:
- if (!d->m_timeZone.isValid())
- d->m_timeZone = QTimeZone(QTimeZonePrivate::utcQByteArray());
- return d->m_timeZone;
- case Qt::TimeZone :
+ return QTimeZone::utc();
+ case Qt::TimeZone:
return d->m_timeZone;
case Qt::LocalTime:
- return QTimeZone(QTimeZone::systemTimeZoneId());
+ return QTimeZone::systemTimeZone();
}
return QTimeZone();
}
@@ -3603,11 +3601,11 @@ QString QDateTime::toString(Qt::DateFormat format) const
QTime tm;
d->getDateTime(&dt, &tm);
//We cant use date.toString(Qt::TextDate) as we need to insert the time before the year
- buf = QString::fromUtf8("%1 %2 %3 %4 %5").arg(dt.shortDayName(dt.dayOfWeek()))
- .arg(dt.shortMonthName(dt.month()))
- .arg(dt.day())
- .arg(tm.toString(Qt::TextDate))
- .arg(dt.year());
+ buf = QString::fromLatin1("%1 %2 %3 %4 %5").arg(dt.shortDayName(dt.dayOfWeek()))
+ .arg(dt.shortMonthName(dt.month()))
+ .arg(dt.day())
+ .arg(tm.toString(Qt::TextDate))
+ .arg(dt.year());
if (timeSpec() != Qt::LocalTime) {
buf += QStringLiteral(" GMT");
if (d->m_spec == Qt::OffsetFromUTC)
@@ -3747,7 +3745,7 @@ QDateTime QDateTime::addDays(qint64 ndays) const
localMSecsToEpochMSecs(timeToMSecs(date, time), &date, &time);
#ifndef QT_BOOTSTRAPPED
else if (d->m_spec == Qt::TimeZone)
- d->zoneMSecsToEpochMSecs(timeToMSecs(date, time), d->m_timeZone, &date, &time);
+ QDateTimePrivate::zoneMSecsToEpochMSecs(timeToMSecs(date, time), d->m_timeZone, &date, &time);
#endif // QT_BOOTSTRAPPED
dt.d->setDateTime(date, time);
return dt;
@@ -3781,7 +3779,7 @@ QDateTime QDateTime::addMonths(int nmonths) const
localMSecsToEpochMSecs(timeToMSecs(date, time), &date, &time);
#ifndef QT_BOOTSTRAPPED
else if (d->m_spec == Qt::TimeZone)
- d->zoneMSecsToEpochMSecs(timeToMSecs(date, time), d->m_timeZone, &date, &time);
+ QDateTimePrivate::zoneMSecsToEpochMSecs(timeToMSecs(date, time), d->m_timeZone, &date, &time);
#endif // QT_BOOTSTRAPPED
dt.d->setDateTime(date, time);
return dt;
@@ -3815,7 +3813,7 @@ QDateTime QDateTime::addYears(int nyears) const
localMSecsToEpochMSecs(timeToMSecs(date, time), &date, &time);
#ifndef QT_BOOTSTRAPPED
else if (d->m_spec == Qt::TimeZone)
- d->zoneMSecsToEpochMSecs(timeToMSecs(date, time), d->m_timeZone, &date, &time);
+ QDateTimePrivate::zoneMSecsToEpochMSecs(timeToMSecs(date, time), d->m_timeZone, &date, &time);
#endif // QT_BOOTSTRAPPED
dt.d->setDateTime(date, time);
return dt;
@@ -4204,6 +4202,39 @@ qint64 QDateTime::currentMSecsSinceEpoch() Q_DECL_NOTHROW
#error "What system is this?"
#endif
+/*! \fn QDateTime QDateTime::fromCFDate(CFDateRef date)
+ \since 5.5
+
+ Constructs a new QDateTime containing a copy of the CFDate \a date.
+
+ \sa toCFDate()
+*/
+
+/*! \fn CFDateRef QDateTime::toCFDate() const
+ \since 5.5
+
+ Creates a CFDate from a QDateTime. The caller owns the CFDate object
+ and is responsible for releasing it.
+
+ \sa fromCFDate()
+*/
+
+/*! \fn QDateTime QDateTime::fromNSDate(const NSDate *date)
+ \since 5.5
+
+ Constructs a new QDateTime containing a copy of the NSDate \a date.
+
+ \sa toNSDate()
+*/
+
+/*! \fn NSDate QDateTime::toNSDate() const
+ \since 5.5
+
+ Creates an NSDate from a QDateTime. The NSDate object is autoreleased.
+
+ \sa fromNSDate()
+*/
+
/*!
\since 4.2
@@ -4358,7 +4389,7 @@ int QDateTime::utcOffset() const
#ifndef QT_NO_DATESTRING
-static int fromShortMonthName(const QString &monthName)
+static int fromShortMonthName(const QStringRef &monthName)
{
// Assume that English monthnames are the default
for (int i = 0; i < 12; ++i) {
@@ -4449,7 +4480,7 @@ QDateTime QDateTime::fromString(const QString& string, Qt::DateFormat format)
if (found) {
bool ok;
- offset = fromOffsetString(isoString.mid(signIndex).toString(), &ok);
+ offset = fromOffsetString(isoString.mid(signIndex), &ok);
if (!ok)
return QDateTime();
isoString = isoString.left(signIndex);
@@ -4469,7 +4500,7 @@ QDateTime QDateTime::fromString(const QString& string, Qt::DateFormat format)
}
#if !defined(QT_NO_TEXTDATE)
case Qt::TextDate: {
- QStringList parts = string.split(QLatin1Char(' '), QString::SkipEmptyParts);
+ QVector<QStringRef> parts = string.splitRef(QLatin1Char(' '), QString::SkipEmptyParts);
if ((parts.count() < 5) || (parts.count() > 6))
return QDateTime();
@@ -4488,9 +4519,9 @@ QDateTime QDateTime::fromString(const QString& string, Qt::DateFormat format)
if (!month || !day) {
month = fromShortMonthName(parts.at(2));
if (month) {
- QString dayStr = parts.at(1);
+ QStringRef dayStr = parts.at(1);
if (dayStr.endsWith(QLatin1Char('.'))) {
- dayStr.chop(1);
+ dayStr = dayStr.left(dayStr.size() - 1);
day = dayStr.toInt();
}
}
@@ -4523,7 +4554,7 @@ QDateTime QDateTime::fromString(const QString& string, Qt::DateFormat format)
if (!date.isValid())
return QDateTime();
- QStringList timeParts = parts.at(timePart).split(QLatin1Char(':'));
+ QVector<QStringRef> timeParts = parts.at(timePart).split(QLatin1Char(':'));
if (timeParts.count() < 2 || timeParts.count() > 3)
return QDateTime();
@@ -4538,7 +4569,7 @@ QDateTime QDateTime::fromString(const QString& string, Qt::DateFormat format)
int second = 0;
int millisecond = 0;
if (timeParts.count() > 2) {
- QStringList secondParts = timeParts.at(2).split(QLatin1Char('.'));
+ QVector<QStringRef> secondParts = timeParts.at(2).split(QLatin1Char('.'));
if (secondParts.size() > 2) {
return QDateTime();
}
@@ -4563,10 +4594,10 @@ QDateTime QDateTime::fromString(const QString& string, Qt::DateFormat format)
if (parts.count() == 5)
return QDateTime(date, time, Qt::LocalTime);
- QString tz = parts.at(5);
+ QStringRef tz = parts.at(5);
if (!tz.startsWith(QLatin1String("GMT"), Qt::CaseInsensitive))
return QDateTime();
- tz.remove(0, 3);
+ tz = tz.mid(3);
if (!tz.isEmpty()) {
int offset = fromOffsetString(tz, &ok);
if (!ok)
@@ -4993,7 +5024,7 @@ QDebug operator<<(QDebug dbg, const QDateTime &date)
spec = QStringLiteral(" Qt::UTC");
break;
case Qt::OffsetFromUTC:
- spec = QString::fromUtf8(" Qt::OffsetFromUTC %1s").arg(date.offsetFromUtc());
+ spec = QString::fromLatin1(" Qt::OffsetFromUTC %1s").arg(date.offsetFromUtc());
break;
case Qt::TimeZone:
#ifndef QT_BOOTSTRAPPED
diff --git a/src/corelib/tools/qdatetime.h b/src/corelib/tools/qdatetime.h
index a75d7d9bc8..5bcd01a587 100644
--- a/src/corelib/tools/qdatetime.h
+++ b/src/corelib/tools/qdatetime.h
@@ -40,6 +40,13 @@
#include <limits>
+#ifdef Q_OS_MAC
+Q_FORWARD_DECLARE_CF_TYPE(CFDate);
+# ifdef __OBJC__
+Q_FORWARD_DECLARE_OBJC_CLASS(NSDate);
+# endif
+#endif
+
QT_BEGIN_NAMESPACE
class QTimeZone;
@@ -296,6 +303,15 @@ public:
#endif
static qint64 currentMSecsSinceEpoch() Q_DECL_NOTHROW;
+#if defined(Q_OS_MAC) || defined(Q_QDOC)
+ static QDateTime fromCFDate(CFDateRef date);
+ CFDateRef toCFDate() const Q_DECL_CF_RETURNS_RETAINED;
+# if defined(__OBJC__) || defined(Q_QDOC)
+ static QDateTime fromNSDate(const NSDate *date);
+ NSDate *toNSDate() const Q_DECL_NS_RETURNS_AUTORELEASED;
+# endif
+#endif
+
private:
friend class QDateTimePrivate;
void detach();
diff --git a/src/corelib/tools/qdatetime_mac.mm b/src/corelib/tools/qdatetime_mac.mm
new file mode 100644
index 0000000000..c8a1d22928
--- /dev/null
+++ b/src/corelib/tools/qdatetime_mac.mm
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2014 Petroules Corporation.
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qdatetime.h"
+
+#import <Foundation/Foundation.h>
+
+QT_BEGIN_NAMESPACE
+
+QDateTime QDateTime::fromCFDate(CFDateRef date)
+{
+ if (!date)
+ return QDateTime();
+ return QDateTime::fromMSecsSinceEpoch(static_cast<qint64>((CFDateGetAbsoluteTime(date)
+ + kCFAbsoluteTimeIntervalSince1970) * 1000));
+}
+
+CFDateRef QDateTime::toCFDate() const
+{
+ return CFDateCreate(kCFAllocatorDefault, (static_cast<CFAbsoluteTime>(toMSecsSinceEpoch())
+ / 1000) - kCFAbsoluteTimeIntervalSince1970);
+}
+
+QDateTime QDateTime::fromNSDate(const NSDate *date)
+{
+ if (!date)
+ return QDateTime();
+ return QDateTime::fromMSecsSinceEpoch(static_cast<qint64>([date timeIntervalSince1970] * 1000));
+}
+
+NSDate *QDateTime::toNSDate() const
+{
+ return [NSDate
+ dateWithTimeIntervalSince1970:static_cast<NSTimeInterval>(toMSecsSinceEpoch()) / 1000];
+}
+
+QT_END_NAMESPACE
diff --git a/src/corelib/tools/qdatetime_p.h b/src/corelib/tools/qdatetime_p.h
index 78484f30ed..7c7f7f2a6a 100644
--- a/src/corelib/tools/qdatetime_p.h
+++ b/src/corelib/tools/qdatetime_p.h
@@ -111,6 +111,9 @@ public:
m_status(other.m_status)
{}
+ // ### XXX: when the tooling situation improves, look at fixing the padding.
+ // 4 bytes padding
+
qint64 m_msecs;
Qt::TimeSpec m_spec;
int m_offsetFromUtc;
diff --git a/src/corelib/tools/qeasingcurve.cpp b/src/corelib/tools/qeasingcurve.cpp
index a3dd4d9a60..e6fb531d7d 100644
--- a/src/corelib/tools/qeasingcurve.cpp
+++ b/src/corelib/tools/qeasingcurve.cpp
@@ -347,9 +347,7 @@ typedef QVector<TCBPoint> TCBPoints;
class QEasingCurveFunction
{
public:
- enum Type { In, Out, InOut, OutIn };
-
- QEasingCurveFunction(QEasingCurveFunction::Type type = In, qreal period = 0.3, qreal amplitude = 1.0,
+ QEasingCurveFunction(QEasingCurve::Type type, qreal period = 0.3, qreal amplitude = 1.0,
qreal overshoot = 1.70158)
: _t(type), _p(period), _a(amplitude), _o(overshoot)
{ }
@@ -358,7 +356,7 @@ public:
virtual QEasingCurveFunction *copy() const;
bool operator==(const QEasingCurveFunction &other) const;
- Type _t;
+ QEasingCurve::Type _t;
qreal _p;
qreal _a;
qreal _o;
@@ -367,9 +365,12 @@ public:
};
+static QEasingCurve::EasingFunction curveToFunc(QEasingCurve::Type curve);
+
qreal QEasingCurveFunction::value(qreal t)
{
- return t;
+ QEasingCurve::EasingFunction func = curveToFunc(_t);
+ return func(t);
}
QEasingCurveFunction *QEasingCurveFunction::copy() const
@@ -430,8 +431,8 @@ struct BezierEase : public QEasingCurveFunction
bool _init;
bool _valid;
- BezierEase()
- : QEasingCurveFunction(InOut), _curves(10), _intervals(10), _init(false), _valid(false)
+ BezierEase(QEasingCurve::Type type = QEasingCurve::BezierSpline)
+ : QEasingCurveFunction(type), _curves(10), _intervals(10), _init(false), _valid(false)
{ }
void init()
@@ -488,7 +489,7 @@ struct BezierEase : public QEasingCurveFunction
}
}
- QEasingCurveFunction *copy() const
+ QEasingCurveFunction *copy() const Q_DECL_OVERRIDE
{
BezierEase *rv = new BezierEase();
rv->_t = _t;
@@ -524,7 +525,7 @@ struct BezierEase : public QEasingCurveFunction
return newT;
}
- qreal value(qreal x)
+ qreal value(qreal x) Q_DECL_OVERRIDE
{
Q_ASSERT(_bezierCurves.count() % 3 == 0);
@@ -814,7 +815,11 @@ struct BezierEase : public QEasingCurveFunction
struct TCBEase : public BezierEase
{
- qreal value(qreal x)
+ TCBEase()
+ : BezierEase(QEasingCurve::TCBSpline)
+ { }
+
+ qreal value(qreal x) Q_DECL_OVERRIDE
{
Q_ASSERT(_bezierCurves.count() % 3 == 0);
@@ -830,11 +835,11 @@ struct TCBEase : public BezierEase
struct ElasticEase : public QEasingCurveFunction
{
- ElasticEase(Type type)
+ ElasticEase(QEasingCurve::Type type)
: QEasingCurveFunction(type, qreal(0.3), qreal(1.0))
{ }
- QEasingCurveFunction *copy() const
+ QEasingCurveFunction *copy() const Q_DECL_OVERRIDE
{
ElasticEase *rv = new ElasticEase(_t);
rv->_p = _p;
@@ -844,18 +849,18 @@ struct ElasticEase : public QEasingCurveFunction
return rv;
}
- qreal value(qreal t)
+ qreal value(qreal t) Q_DECL_OVERRIDE
{
qreal p = (_p < 0) ? qreal(0.3) : _p;
qreal a = (_a < 0) ? qreal(1.0) : _a;
switch(_t) {
- case In:
+ case QEasingCurve::InElastic:
return easeInElastic(t, a, p);
- case Out:
+ case QEasingCurve::OutElastic:
return easeOutElastic(t, a, p);
- case InOut:
+ case QEasingCurve::InOutElastic:
return easeInOutElastic(t, a, p);
- case OutIn:
+ case QEasingCurve::OutInElastic:
return easeOutInElastic(t, a, p);
default:
return t;
@@ -865,11 +870,11 @@ struct ElasticEase : public QEasingCurveFunction
struct BounceEase : public QEasingCurveFunction
{
- BounceEase(Type type)
+ BounceEase(QEasingCurve::Type type)
: QEasingCurveFunction(type, qreal(0.3), qreal(1.0))
{ }
- QEasingCurveFunction *copy() const
+ QEasingCurveFunction *copy() const Q_DECL_OVERRIDE
{
BounceEase *rv = new BounceEase(_t);
rv->_a = _a;
@@ -878,17 +883,17 @@ struct BounceEase : public QEasingCurveFunction
return rv;
}
- qreal value(qreal t)
+ qreal value(qreal t) Q_DECL_OVERRIDE
{
qreal a = (_a < 0) ? qreal(1.0) : _a;
switch(_t) {
- case In:
+ case QEasingCurve::InBounce:
return easeInBounce(t, a);
- case Out:
+ case QEasingCurve::OutBounce:
return easeOutBounce(t, a);
- case InOut:
+ case QEasingCurve::InOutBounce:
return easeInOutBounce(t, a);
- case OutIn:
+ case QEasingCurve::OutInBounce:
return easeOutInBounce(t, a);
default:
return t;
@@ -898,11 +903,11 @@ struct BounceEase : public QEasingCurveFunction
struct BackEase : public QEasingCurveFunction
{
- BackEase(Type type)
+ BackEase(QEasingCurve::Type type)
: QEasingCurveFunction(type, qreal(0.3), qreal(1.0), qreal(1.70158))
{ }
- QEasingCurveFunction *copy() const
+ QEasingCurveFunction *copy() const Q_DECL_OVERRIDE
{
BackEase *rv = new BackEase(_t);
rv->_o = _o;
@@ -911,17 +916,17 @@ struct BackEase : public QEasingCurveFunction
return rv;
}
- qreal value(qreal t)
+ qreal value(qreal t) Q_DECL_OVERRIDE
{
qreal o = (_o < 0) ? qreal(1.70158) : _o;
switch(_t) {
- case In:
+ case QEasingCurve::InBack:
return easeInBack(t, o);
- case Out:
+ case QEasingCurve::OutBack:
return easeOutBack(t, o);
- case InOut:
+ case QEasingCurve::InOutBack:
return easeInOutBack(t, o);
- case OutIn:
+ case QEasingCurve::OutInBack:
return easeOutInBack(t, o);
default:
return t;
@@ -1006,55 +1011,31 @@ static QEasingCurve::EasingFunction curveToFunc(QEasingCurve::Type curve)
static QEasingCurveFunction *curveToFunctionObject(QEasingCurve::Type type)
{
- QEasingCurveFunction *curveFunc = 0;
switch(type) {
case QEasingCurve::InElastic:
- curveFunc = new ElasticEase(ElasticEase::In);
- break;
case QEasingCurve::OutElastic:
- curveFunc = new ElasticEase(ElasticEase::Out);
- break;
case QEasingCurve::InOutElastic:
- curveFunc = new ElasticEase(ElasticEase::InOut);
- break;
case QEasingCurve::OutInElastic:
- curveFunc = new ElasticEase(ElasticEase::OutIn);
- break;
+ return new ElasticEase(type);
case QEasingCurve::OutBounce:
- curveFunc = new BounceEase(BounceEase::Out);
- break;
case QEasingCurve::InBounce:
- curveFunc = new BounceEase(BounceEase::In);
- break;
case QEasingCurve::OutInBounce:
- curveFunc = new BounceEase(BounceEase::OutIn);
- break;
case QEasingCurve::InOutBounce:
- curveFunc = new BounceEase(BounceEase::InOut);
- break;
+ return new BounceEase(type);
case QEasingCurve::InBack:
- curveFunc = new BackEase(BackEase::In);
- break;
case QEasingCurve::OutBack:
- curveFunc = new BackEase(BackEase::Out);
- break;
case QEasingCurve::InOutBack:
- curveFunc = new BackEase(BackEase::InOut);
- break;
case QEasingCurve::OutInBack:
- curveFunc = new BackEase(BackEase::OutIn);
- break;
+ return new BackEase(type);
case QEasingCurve::BezierSpline:
- curveFunc = new BezierEase();
- break;
+ return new BezierEase;
case QEasingCurve::TCBSpline:
- curveFunc = new TCBEase();
- break;
+ return new TCBEase;
default:
- curveFunc = new QEasingCurveFunction(QEasingCurveFunction::In, qreal(0.3), qreal(1.0), qreal(1.70158));
+ return new QEasingCurveFunction(type, qreal(0.3), qreal(1.0), qreal(1.70158));
}
- return curveFunc;
+ return 0;
}
/*!
diff --git a/src/corelib/tools/qelapsedtimer_generic.cpp b/src/corelib/tools/qelapsedtimer_generic.cpp
index f1f17b7fe5..734f693072 100644
--- a/src/corelib/tools/qelapsedtimer_generic.cpp
+++ b/src/corelib/tools/qelapsedtimer_generic.cpp
@@ -134,6 +134,10 @@ qint64 QElapsedTimer::elapsed() const Q_DECL_NOTHROW
number of milliseconds since January 1st, 1970 at 0:00 UTC (that is, it
is the Unix time expressed in milliseconds).
+ On Linux, Windows and OS X/iOS systems, this value is usually the time
+ since the system boot, though it usually does not include the time the
+ system has spent in sleep states.
+
\sa clockType(), elapsed()
*/
qint64 QElapsedTimer::msecsSinceReference() const Q_DECL_NOTHROW
diff --git a/src/corelib/tools/qelapsedtimer_unix.cpp b/src/corelib/tools/qelapsedtimer_unix.cpp
index d29447fa03..922aa487d7 100644
--- a/src/corelib/tools/qelapsedtimer_unix.cpp
+++ b/src/corelib/tools/qelapsedtimer_unix.cpp
@@ -140,11 +140,6 @@ static int unixCheckClockType()
#endif
}
-static inline qint64 fractionAdjustment()
-{
- return 1000*1000ull;
-}
-
bool QElapsedTimer::isMonotonic() Q_DECL_NOTHROW
{
return clockType() == MonotonicClock;
@@ -196,7 +191,7 @@ static qint64 elapsedAndRestart(qint64 sec, qint64 frac,
do_gettime(nowsec, nowfrac);
sec = *nowsec - sec;
frac = *nowfrac - frac;
- return sec * Q_INT64_C(1000) + frac / fractionAdjustment();
+ return (sec * Q_INT64_C(1000000000) + frac) / Q_INT64_C(1000000);
}
void QElapsedTimer::start() Q_DECL_NOTHROW
@@ -220,20 +215,19 @@ qint64 QElapsedTimer::nsecsElapsed() const Q_DECL_NOTHROW
qint64 QElapsedTimer::elapsed() const Q_DECL_NOTHROW
{
- qint64 sec, frac;
- return elapsedAndRestart(t1, t2, &sec, &frac);
+ return nsecsElapsed() / Q_INT64_C(1000000);
}
qint64 QElapsedTimer::msecsSinceReference() const Q_DECL_NOTHROW
{
- return t1 * Q_INT64_C(1000) + t2 / fractionAdjustment();
+ return t1 * Q_INT64_C(1000) + t2 / Q_INT64_C(1000000);
}
qint64 QElapsedTimer::msecsTo(const QElapsedTimer &other) const Q_DECL_NOTHROW
{
qint64 secs = other.t1 - t1;
qint64 fraction = other.t2 - t2;
- return secs * Q_INT64_C(1000) + fraction / fractionAdjustment();
+ return (secs * Q_INT64_C(1000000000) + fraction) / Q_INT64_C(1000000);
}
qint64 QElapsedTimer::secsTo(const QElapsedTimer &other) const Q_DECL_NOTHROW
diff --git a/src/corelib/tools/qhash.cpp b/src/corelib/tools/qhash.cpp
index fe8c52d103..cd198743bf 100644
--- a/src/corelib/tools/qhash.cpp
+++ b/src/corelib/tools/qhash.cpp
@@ -259,9 +259,7 @@ static uint qt_create_qhash_seed()
quintptr seedPtr = reinterpret_cast<quintptr>(&seed);
seed ^= seedPtr;
-#if QT_POINTER_SIZE == 8
- seed ^= (seedPtr >> 32);
-#endif
+ seed ^= (qulonglong(seedPtr) >> 32); // no-op on 32-bit platforms
#endif // QT_BOOTSTRAPPED
return seed;
@@ -420,7 +418,7 @@ QHashData *QHashData::detach_helper(void (*node_duplicate)(Node *, void *),
Node *e;
};
if (this == &shared_null)
- qt_initialize_qhash_seed();
+ qt_initialize_qhash_seed(); // may throw
d = new QHashData;
d->fakeNext = 0;
d->buckets = 0;
@@ -430,7 +428,7 @@ QHashData *QHashData::detach_helper(void (*node_duplicate)(Node *, void *),
d->userNumBits = userNumBits;
d->numBits = numBits;
d->numBuckets = numBuckets;
- d->seed = uint(qt_qhash_seed.load());
+ d->seed = (this == &shared_null) ? uint(qt_qhash_seed.load()) : seed;
d->sharable = true;
d->strictAlignment = nodeAlign > 8;
d->reserved = 0;
@@ -667,6 +665,85 @@ void QHashData::checkSanity()
Types \c T1 and \c T2 must be supported by qHash().
*/
+/*! \fn uint qHashRange(InputIterator first, InputIterator last, uint seed = 0)
+ \relates QHash
+ \since 5.5
+
+ Returns the hash value for the range [\a{first},\a{last}), using \a seed
+ to seed the calculation, by successively applying qHash() to each
+ element and combining the hash values into a single one.
+
+ The return value of this function depends on the order of elements
+ in the range. That means that
+
+ \code
+ {0, 1, 2}
+ \endcode
+
+ and
+ \code
+ {1, 2, 0}
+ \endcode
+
+ hash to \b{different} values. If order does not matter, for example for hash
+ tables, use qHashRangeCommutative() instead. If you are hashing raw
+ memory, use qHashBits().
+
+ Use this function only to implement qHash() for your own custom
+ types. For example, here's how you could implement a qHash() overload for
+ std::vector<int>:
+
+ \snippet code/src_corelib_tools_qhash.cpp qhashrange
+
+ It bears repeating that the implementation of qHashRange() - like
+ the qHash() overloads offered by Qt - may change at any time. You
+ \b{must not} rely on the fact that qHashRange() will give the same
+ results (for the same inputs) across different Qt versions, even
+ if qHash() for the element type would.
+
+ \sa qHashBits(), qHashRangeCommutative()
+*/
+
+/*! \fn uint qHashRangeCommutative(InputIterator first, InputIterator last, uint seed = 0)
+ \relates QHash
+ \since 5.5
+
+ Returns the hash value for the range [\a{first},\a{last}), using \a seed
+ to seed the calculation, by successively applying qHash() to each
+ element and combining the hash values into a single one.
+
+ The return value of this function does not depend on the order of
+ elements in the range. That means that
+
+ \code
+ {0, 1, 2}
+ \endcode
+
+ and
+ \code
+ {1, 2, 0}
+ \endcode
+
+ hash to the \b{same} values. If order matters, for example, for vectors
+ and arrays, use qHashRange() instead. If you are hashing raw
+ memory, use qHashBits().
+
+ Use this function only to implement qHash() for your own custom
+ types. For example, here's how you could implement a qHash() overload for
+ std::unordered_set<int>:
+
+ \snippet code/src_corelib_tools_qhash.cpp qhashrangecommutative
+
+ It bears repeating that the implementation of
+ qHashRangeCommutative() - like the qHash() overloads offered by Qt
+ - may change at any time. You \b{must not} rely on the fact that
+ qHashRangeCommutative() will give the same results (for the same
+ inputs) across different Qt versions, even if qHash() for the
+ element type would.
+
+ \sa qHashBits(), qHashRange()
+*/
+
/*! \fn uint qHashBits(const void *p, size_t len, uint seed = 0)
\relates QHash
\since 5.4
@@ -675,15 +752,21 @@ void QHashData::checkSanity()
to by \a p, using \a seed to seed the calculation.
Use this function only to implement qHash() for your own custom
- types. E.g., here's how you could implement a qHash() overload for
+ types. For example, here's how you could implement a qHash() overload for
std::vector<int>:
\snippet code/src_corelib_tools_qhash.cpp qhashbits
+ This takes advantage of the fact that std::vector lays out its data
+ contiguously. If that is not the case, or the contained type has
+ padding, you should use qHashRange() instead.
+
It bears repeating that the implementation of qHashBits() - like
the qHash() overloads offered by Qt - may change at any time. You
\b{must not} rely on the fact that qHashBits() will give the same
results (for the same inputs) across different Qt versions.
+
+ \sa qHashRange(), qHashRangeCommutative()
*/
/*! \fn uint qHash(char key, uint seed = 0)
@@ -1047,7 +1130,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
This randomization of QHash is enabled by default. Even though programs
should never depend on a particular QHash ordering, there may be situations
- where you temporarily need deterministic behavior, e.g. for debugging or
+ where you temporarily need deterministic behavior, for example for debugging or
regression testing. To disable the randomization, define the environment
variable \c QT_HASH_SEED. The contents of that variable, interpreted as a
decimal value, will be used as the seed for qHash().
@@ -1063,7 +1146,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
*/
/*!
- \fn QHash::QHash(QHash<Key, T> &&other)
+ \fn QHash::QHash(QHash &&other)
Move-constructs a QHash instance, making it point at the same
object that \a other was pointing to.
@@ -1081,7 +1164,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
compiled in C++11 mode.
*/
-/*! \fn QHash::QHash(const QHash<Key, T> &other)
+/*! \fn QHash::QHash(const QHash &other)
Constructs a copy of \a other.
@@ -1099,34 +1182,34 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
iterators of this hash become invalid.
*/
-/*! \fn QHash<Key, T> &QHash::operator=(const QHash<Key, T> &other)
+/*! \fn QHash &QHash::operator=(const QHash &other)
Assigns \a other to this hash and returns a reference to this hash.
*/
/*!
- \fn QHash<Key, T> &QHash::operator=(QHash<Key, T> &&other)
+ \fn QHash &QHash::operator=(QHash &&other)
Move-assigns \a other to this QHash instance.
\since 5.2
*/
-/*! \fn void QHash::swap(QHash<Key, T> &other)
+/*! \fn void QHash::swap(QHash &other)
\since 4.8
Swaps hash \a other with this hash. This operation is very
fast and never fails.
*/
-/*! \fn void QMultiHash::swap(QMultiHash<Key, T> &other)
+/*! \fn void QMultiHash::swap(QMultiHash &other)
\since 4.8
Swaps hash \a other with this hash. This operation is very
fast and never fails.
*/
-/*! \fn bool QHash::operator==(const QHash<Key, T> &other) const
+/*! \fn bool QHash::operator==(const QHash &other) const
Returns \c true if \a other is equal to this hash; otherwise returns
false.
@@ -1139,7 +1222,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa operator!=()
*/
-/*! \fn bool QHash::operator!=(const QHash<Key, T> &other) const
+/*! \fn bool QHash::operator!=(const QHash &other) const
Returns \c true if \a other is not equal to this hash; otherwise
returns \c false.
@@ -1239,7 +1322,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\internal
*/
-/*! \fn bool QHash::isSharedWith(const QHash<Key, T> &other) const
+/*! \fn bool QHash::isSharedWith(const QHash &other) const
\internal
*/
@@ -1561,7 +1644,7 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa insert(), values()
*/
-/*! \fn QHash<Key, T> &QHash::unite(const QHash<Key, T> &other)
+/*! \fn QHash &QHash::unite(const QHash &other)
Inserts all the items in the \a other hash into this hash. If a
key is common to both hashes, the resulting hash will contain the
@@ -2227,12 +2310,6 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
*/
/*!
- \fn bool QMultiHash::contains(const Key &key) const
- \overload
- \sa QHash::contains()
-*/
-
-/*!
\fn int QMultiHash::remove(const Key &key, const T &value)
\since 4.3
@@ -2243,12 +2320,6 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
*/
/*!
- \fn int QMultiHash::remove(const Key &key)
- \overload
- \sa QHash::remove()
-*/
-
-/*!
\fn int QMultiHash::count(const Key &key, const T &value) const
\since 4.3
@@ -2258,18 +2329,6 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
*/
/*!
- \fn int QMultiHash::count(const Key &key) const
- \overload
- \sa QHash::count()
-*/
-
-/*!
- \fn int QMultiHash::count() const
- \overload
- \sa QHash::count()
-*/
-
-/*!
\fn typename QHash<Key, T>::iterator QMultiHash::find(const Key &key, const T &value)
\since 4.3
@@ -2283,24 +2342,12 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
*/
/*!
- \fn typename QHash<Key, T>::iterator QMultiHash::find(const Key &key)
- \overload
- \sa QHash::find()
-*/
-
-/*!
\fn typename QHash<Key, T>::const_iterator QMultiHash::find(const Key &key, const T &value) const
\since 4.3
\overload
*/
/*!
- \fn typename QHash<Key, T>::const_iterator QMultiHash::find(const Key &key) const
- \overload
- \sa QHash::find()
-*/
-
-/*!
\fn typename QHash<Key, T>::const_iterator QMultiHash::constFind(const Key &key, const T &value) const
\since 4.3
@@ -2313,10 +2360,4 @@ uint qHash(long double key, uint seed) Q_DECL_NOTHROW
\sa QHash::constFind()
*/
-/*!
- \fn typename QHash<Key, T>::const_iterator QMultiHash::constFind(const Key &key) const
- \overload
- \sa QHash::constFind()
-*/
-
QT_END_NAMESPACE
diff --git a/src/corelib/tools/qhash.h b/src/corelib/tools/qhash.h
index 59a5251c50..e0387d4644 100644
--- a/src/corelib/tools/qhash.h
+++ b/src/corelib/tools/qhash.h
@@ -1,6 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2015 Klarälvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author Marc Mutz <marc.mutz@kdab.com>
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtCore module of the Qt Toolkit.
@@ -40,6 +41,7 @@
#include <QtCore/qpair.h>
#include <QtCore/qrefcount.h>
+#include <numeric> // for std::accumulate
#ifdef Q_COMPILER_INITIALIZER_LISTS
#include <initializer_list>
#endif
@@ -101,6 +103,44 @@ template<typename T> inline uint qHash(const T &t, uint seed)
Q_DECL_NOEXCEPT_EXPR(noexcept(qHash(t)))
{ return (qHash(t) ^ seed); }
+namespace QtPrivate {
+
+struct QHashCombine {
+ typedef uint result_type;
+ template <typename T>
+ Q_DECL_CONSTEXPR result_type operator()(uint seed, const T &t) const Q_DECL_NOEXCEPT_EXPR(noexcept(qHash(t)))
+ // combiner taken from N3876 / boost::hash_combine
+ { return seed ^ (qHash(t) + 0x9e3779b9 + (seed << 6) + (seed >> 2)) ; }
+};
+
+struct QHashCombineCommutative {
+ // QHashCombine is a good hash combiner, but is not commutative,
+ // ie. it depends on the order of the input elements. That is
+ // usually what we want: {0,1,3} should hash differently than
+ // {1,3,0}. Except when it isn't (e.g. for QSet and
+ // QHash). Therefore, provide a commutative combiner, too.
+ typedef uint result_type;
+ template <typename T>
+ Q_DECL_CONSTEXPR result_type operator()(uint seed, const T &t) const Q_DECL_NOEXCEPT_EXPR(noexcept(qHash(t)))
+ { return seed + qHash(t); } // don't use xor!
+};
+
+} // namespace QtPrivate
+
+template <typename InputIterator>
+inline uint qHashRange(InputIterator first, InputIterator last, uint seed = 0)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(qHash(*first))) // assume iterator operations don't throw
+{
+ return std::accumulate(first, last, seed, QtPrivate::QHashCombine());
+}
+
+template <typename InputIterator>
+inline uint qHashRangeCommutative(InputIterator first, InputIterator last, uint seed = 0)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(qHash(*first))) // assume iterator operations don't throw
+{
+ return std::accumulate(first, last, seed, QtPrivate::QHashCombineCommutative());
+}
+
template <typename T1, typename T2> inline uint qHash(const QPair<T1, T2> &key, uint seed = 0)
Q_DECL_NOEXCEPT_EXPR(noexcept(qHash(key.first, seed)) && noexcept(qHash(key.second, seed)))
{
@@ -288,7 +328,7 @@ class QHash
static inline int alignOfNode() { return qMax<int>(sizeof(void*), Q_ALIGNOF(Node)); }
public:
- inline QHash() : d(const_cast<QHashData *>(&QHashData::shared_null)) { }
+ inline QHash() Q_DECL_NOTHROW : d(const_cast<QHashData *>(&QHashData::shared_null)) { }
#ifdef Q_COMPILER_INITIALIZER_LISTS
inline QHash(std::initializer_list<std::pair<Key,T> > list)
: d(const_cast<QHashData *>(&QHashData::shared_null))
@@ -298,19 +338,19 @@ public:
insert(it->first, it->second);
}
#endif
- inline QHash(const QHash<Key, T> &other) : d(other.d) { d->ref.ref(); if (!d->sharable) detach(); }
- inline ~QHash() { if (!d->ref.deref()) freeData(d); }
+ QHash(const QHash &other) : d(other.d) { d->ref.ref(); if (!d->sharable) detach(); }
+ ~QHash() { if (!d->ref.deref()) freeData(d); }
- QHash<Key, T> &operator=(const QHash<Key, T> &other);
+ QHash &operator=(const QHash &other);
#ifdef Q_COMPILER_RVALUE_REFS
- inline QHash(QHash<Key, T> &&other) : d(other.d) { other.d = const_cast<QHashData *>(&QHashData::shared_null); }
- inline QHash<Key, T> &operator=(QHash<Key, T> &&other)
+ QHash(QHash &&other) Q_DECL_NOTHROW : d(other.d) { other.d = const_cast<QHashData *>(&QHashData::shared_null); }
+ QHash &operator=(QHash &&other) Q_DECL_NOTHROW
{ qSwap(d, other.d); return *this; }
#endif
- inline void swap(QHash<Key, T> &other) { qSwap(d, other.d); }
+ void swap(QHash &other) Q_DECL_NOTHROW { qSwap(d, other.d); }
- bool operator==(const QHash<Key, T> &other) const;
- inline bool operator!=(const QHash<Key, T> &other) const { return !(*this == other); }
+ bool operator==(const QHash &other) const;
+ bool operator!=(const QHash &other) const { return !(*this == other); }
inline int size() const { return d->size; }
@@ -325,7 +365,7 @@ public:
#if QT_SUPPORTS(UNSHARABLE_CONTAINERS)
inline void setSharable(bool sharable) { if (!sharable) detach(); if (d != &QHashData::shared_null) d->sharable = sharable; }
#endif
- inline bool isSharedWith(const QHash<Key, T> &other) const { return d == other.d; }
+ bool isSharedWith(const QHash &other) const { return d == other.d; }
void clear();
@@ -488,7 +528,7 @@ public:
const_iterator constFind(const Key &key) const;
iterator insert(const Key &key, const T &value);
iterator insertMulti(const Key &key, const T &value);
- QHash<Key, T> &unite(const QHash<Key, T> &other);
+ QHash &unite(const QHash &other);
// STL compatibility
typedef T mapped_type;
@@ -564,9 +604,9 @@ QHash<Key, T>::createNode(uint ah, const Key &akey, const T &avalue, Node **anex
}
template <class Key, class T>
-Q_INLINE_TEMPLATE QHash<Key, T> &QHash<Key, T>::unite(const QHash<Key, T> &other)
+Q_INLINE_TEMPLATE QHash<Key, T> &QHash<Key, T>::unite(const QHash &other)
{
- QHash<Key, T> copy(other);
+ QHash copy(other);
const_iterator it = copy.constEnd();
while (it != copy.constBegin()) {
--it;
@@ -584,7 +624,7 @@ Q_OUTOFLINE_TEMPLATE void QHash<Key, T>::freeData(QHashData *x)
template <class Key, class T>
Q_INLINE_TEMPLATE void QHash<Key, T>::clear()
{
- *this = QHash<Key,T>();
+ *this = QHash();
}
template <class Key, class T>
@@ -597,7 +637,7 @@ Q_OUTOFLINE_TEMPLATE void QHash<Key, T>::detach_helper()
}
template <class Key, class T>
-Q_INLINE_TEMPLATE QHash<Key, T> &QHash<Key, T>::operator=(const QHash<Key, T> &other)
+Q_INLINE_TEMPLATE QHash<Key, T> &QHash<Key, T>::operator=(const QHash &other)
{
if (d != other.d) {
QHashData *o = other.d;
@@ -925,7 +965,7 @@ Q_OUTOFLINE_TEMPLATE typename QHash<Key, T>::Node **QHash<Key, T>::findNode(cons
}
template <class Key, class T>
-Q_OUTOFLINE_TEMPLATE bool QHash<Key, T>::operator==(const QHash<Key, T> &other) const
+Q_OUTOFLINE_TEMPLATE bool QHash<Key, T>::operator==(const QHash &other) const
{
if (size() != other.size())
return false;
@@ -964,7 +1004,7 @@ public:
}
#endif
QMultiHash(const QHash<Key, T> &other) : QHash<Key, T>(other) {}
- inline void swap(QMultiHash<Key, T> &other) { QHash<Key, T>::swap(other); } // prevent QMultiHash<->QHash swaps
+ void swap(QMultiHash &other) { QHash<Key, T>::swap(other); } // prevent QMultiHash<->QHash swaps
inline typename QHash<Key, T>::iterator replace(const Key &key, const T &value)
{ return QHash<Key, T>::insert(key, value); }
@@ -977,29 +1017,11 @@ public:
inline QMultiHash operator+(const QMultiHash &other) const
{ QMultiHash result = *this; result += other; return result; }
-#if !defined(Q_NO_USING_KEYWORD) && !defined(Q_CC_RVCT)
- // RVCT compiler doesn't handle using-keyword right when used functions are overloaded in child class
using QHash<Key, T>::contains;
using QHash<Key, T>::remove;
using QHash<Key, T>::count;
using QHash<Key, T>::find;
using QHash<Key, T>::constFind;
-#else
- inline bool contains(const Key &key) const
- { return QHash<Key, T>::contains(key); }
- inline int remove(const Key &key)
- { return QHash<Key, T>::remove(key); }
- inline int count(const Key &key) const
- { return QHash<Key, T>::count(key); }
- inline int count() const
- { return QHash<Key, T>::count(); }
- inline typename QHash<Key, T>::iterator find(const Key &key)
- { return QHash<Key, T>::find(key); }
- inline typename QHash<Key, T>::const_iterator find(const Key &key) const
- { return QHash<Key, T>::find(key); }
- inline typename QHash<Key, T>::const_iterator constFind(const Key &key) const
- { return QHash<Key, T>::constFind(key); }
-#endif
bool contains(const Key &key, const T &value) const;
diff --git a/src/corelib/tools/qlist.cpp b/src/corelib/tools/qlist.cpp
index fe5e0f33b4..a5e43e2ca5 100644
--- a/src/corelib/tools/qlist.cpp
+++ b/src/corelib/tools/qlist.cpp
@@ -55,6 +55,8 @@ const QListData::Data QListData::shared_null = { Q_REFCOUNT_INITIALIZE_STATIC, 0
static int grow(int size)
{
+ if (size_t(size) > (MaxAllocSize - QListData::DataHeaderSize) / sizeof(void *))
+ qBadAlloc();
// dear compiler: don't optimize me out.
volatile int x = qAllocMore(size * sizeof(void *), QListData::DataHeaderSize) / sizeof(void *);
return x;
@@ -473,6 +475,12 @@ void **QListData::erase(void **xi)
If T is a QByteArray, this class has a couple more members that can be
used. See the documentation for QByteArrayList for more information.
+ If T is QString, this class has the following additional members:
+ \l{QStringList::filter()}{filter},
+ \l{QStringList::join()}{join},
+ \l{QStringList::removeDuplicates()}{removeDuplicates},
+ \l{QStringList::sort()}{sort}.
+
\sa QListIterator, QMutableListIterator, QLinkedList, QVector
*/
diff --git a/src/corelib/tools/qlist.h b/src/corelib/tools/qlist.h
index e33be9a2f1..2031c32069 100644
--- a/src/corelib/tools/qlist.h
+++ b/src/corelib/tools/qlist.h
@@ -112,7 +112,7 @@ class QList : public QListSpecialMethods<T>
union { QListData p; QListData::Data *d; };
public:
- inline QList() : d(const_cast<QListData::Data *>(&QListData::shared_null)) { }
+ inline QList() Q_DECL_NOTHROW : d(const_cast<QListData::Data *>(&QListData::shared_null)) { }
QList(const QList<T> &l);
~QList();
QList<T> &operator=(const QList<T> &l);
@@ -628,9 +628,7 @@ inline void QList<T>::swap(int i, int j)
Q_ASSERT_X(i >= 0 && i < p.size() && j >= 0 && j < p.size(),
"QList<T>::swap", "index out of range");
detach();
- void *t = d->array[d->begin + i];
- d->array[d->begin + i] = d->array[d->begin + j];
- d->array[d->begin + j] = t;
+ std::swap(d->array[d->begin + i], d->array[d->begin + j]);
}
template <typename T>
@@ -773,11 +771,10 @@ Q_OUTOFLINE_TEMPLATE bool QList<T>::operator==(const QList<T> &l) const
return true;
if (p.size() != l.p.size())
return false;
- Node *i = reinterpret_cast<Node *>(p.end());
- Node *b = reinterpret_cast<Node *>(p.begin());
- Node *li = reinterpret_cast<Node *>(l.p.end());
- while (i != b) {
- --i; --li;
+ Node *i = reinterpret_cast<Node *>(p.begin());
+ Node *e = reinterpret_cast<Node *>(p.end());
+ Node *li = reinterpret_cast<Node *>(l.p.begin());
+ for (; i != e; ++i, ++li) {
if (!(i->t() == li->t()))
return false;
}
@@ -925,9 +922,9 @@ Q_OUTOFLINE_TEMPLATE int QList<T>::lastIndexOf(const T &t, int from) const
template <typename T>
Q_OUTOFLINE_TEMPLATE bool QList<T>::contains(const T &t) const
{
- Node *b = reinterpret_cast<Node *>(p.begin());
- Node *i = reinterpret_cast<Node *>(p.end());
- while (i-- != b)
+ Node *e = reinterpret_cast<Node *>(p.end());
+ Node *i = reinterpret_cast<Node *>(p.begin());
+ for (; i != e; ++i)
if (i->t() == t)
return true;
return false;
@@ -937,9 +934,9 @@ template <typename T>
Q_OUTOFLINE_TEMPLATE int QList<T>::count(const T &t) const
{
int c = 0;
- Node *b = reinterpret_cast<Node *>(p.begin());
- Node *i = reinterpret_cast<Node *>(p.end());
- while (i-- != b)
+ Node *e = reinterpret_cast<Node *>(p.end());
+ Node *i = reinterpret_cast<Node *>(p.begin());
+ for (; i != e; ++i)
if (i->t() == t)
++c;
return c;
@@ -951,6 +948,7 @@ Q_DECLARE_MUTABLE_SEQUENTIAL_ITERATOR(List)
QT_END_NAMESPACE
#include <QtCore/qbytearraylist.h>
+#include <QtCore/qstringlist.h>
#ifdef Q_CC_MSVC
#pragma warning( pop )
diff --git a/src/corelib/tools/qmap.cpp b/src/corelib/tools/qmap.cpp
index 38b4c0ad7e..ef5fbac377 100644
--- a/src/corelib/tools/qmap.cpp
+++ b/src/corelib/tools/qmap.cpp
@@ -1798,12 +1798,6 @@ void QMapDataBase::freeData(QMapDataBase *d)
*/
/*!
- \fn bool QMultiMap::contains(const Key &key) const
- \overload
- \sa QMap::contains()
-*/
-
-/*!
\fn int QMultiMap::remove(const Key &key, const T &value)
\since 4.3
@@ -1814,12 +1808,6 @@ void QMapDataBase::freeData(QMapDataBase *d)
*/
/*!
- \fn int QMultiMap::remove(const Key &key)
- \overload
- \sa QMap::remove()
-*/
-
-/*!
\fn int QMultiMap::count(const Key &key, const T &value) const
\since 4.3
@@ -1829,18 +1817,6 @@ void QMapDataBase::freeData(QMapDataBase *d)
*/
/*!
- \fn int QMultiMap::count(const Key &key) const
- \overload
- \sa QMap::count()
-*/
-
-/*!
- \fn int QMultiMap::count() const
- \overload
- \sa QMap::count()
-*/
-
-/*!
\fn typename QMap<Key, T>::iterator QMultiMap::find(const Key &key, const T &value)
\since 4.3
@@ -1857,12 +1833,6 @@ void QMapDataBase::freeData(QMapDataBase *d)
*/
/*!
- \fn typename QMap<Key, T>::iterator QMultiMap::find(const Key &key)
- \overload
- \sa QMap::find()
-*/
-
-/*!
\fn typename QMap<Key, T>::const_iterator QMultiMap::find(const Key &key, const T &value) const
\since 4.3
\overload
@@ -1880,13 +1850,6 @@ void QMapDataBase::freeData(QMapDataBase *d)
*/
/*!
- \fn typename QMap<Key, T>::const_iterator QMultiMap::find(const Key &key) const
- \since 4.3
- \overload
- \sa QMap::find()
-*/
-
-/*!
\fn typename QMap<Key, T>::const_iterator QMultiMap::constFind(const Key &key, const T &value) const
\since 4.3
@@ -1899,10 +1862,4 @@ void QMapDataBase::freeData(QMapDataBase *d)
\sa QMap::constFind()
*/
-/*!
- \fn typename QMap<Key, T>::const_iterator QMultiMap::constFind(const Key &key) const
- \overload
- \sa QMap::constFind()
-*/
-
QT_END_NAMESPACE
diff --git a/src/corelib/tools/qmap.h b/src/corelib/tools/qmap.h
index a776e2eb4d..4b1fc65b22 100644
--- a/src/corelib/tools/qmap.h
+++ b/src/corelib/tools/qmap.h
@@ -1157,29 +1157,11 @@ public:
inline QMultiMap operator+(const QMultiMap &other) const
{ QMultiMap result = *this; result += other; return result; }
-#if !defined(Q_NO_USING_KEYWORD) && !defined(Q_CC_RVCT)
- // RVCT compiler doesn't handle using-keyword right when used functions are overloaded in child class
using QMap<Key, T>::contains;
using QMap<Key, T>::remove;
using QMap<Key, T>::count;
using QMap<Key, T>::find;
using QMap<Key, T>::constFind;
-#else
- inline bool contains(const Key &key) const
- { return QMap<Key, T>::contains(key); }
- inline int remove(const Key &key)
- { return QMap<Key, T>::remove(key); }
- inline int count(const Key &key) const
- { return QMap<Key, T>::count(key); }
- inline int count() const
- { return QMap<Key, T>::count(); }
- inline typename QMap<Key, T>::iterator find(const Key &key)
- { return QMap<Key, T>::find(key); }
- inline typename QMap<Key, T>::const_iterator find(const Key &key) const
- { return QMap<Key, T>::find(key); }
- inline typename QMap<Key, T>::const_iterator constFind(const Key &key) const
- { return QMap<Key, T>::constFind(key); }
-#endif
bool contains(const Key &key, const T &value) const;
diff --git a/src/corelib/tools/qmargins.h b/src/corelib/tools/qmargins.h
index 33a2766345..a0c88f61e3 100644
--- a/src/corelib/tools/qmargins.h
+++ b/src/corelib/tools/qmargins.h
@@ -45,29 +45,29 @@ QT_BEGIN_NAMESPACE
class QMargins
{
public:
- Q_DECL_CONSTEXPR QMargins();
- Q_DECL_CONSTEXPR QMargins(int left, int top, int right, int bottom);
-
- Q_DECL_CONSTEXPR bool isNull() const;
-
- Q_DECL_CONSTEXPR int left() const;
- Q_DECL_CONSTEXPR int top() const;
- Q_DECL_CONSTEXPR int right() const;
- Q_DECL_CONSTEXPR int bottom() const;
-
- void setLeft(int left);
- void setTop(int top);
- void setRight(int right);
- void setBottom(int bottom);
-
- QMargins &operator+=(const QMargins &margins);
- QMargins &operator-=(const QMargins &margins);
- QMargins &operator+=(int);
- QMargins &operator-=(int);
- QMargins &operator*=(int);
- QMargins &operator/=(int);
- QMargins &operator*=(qreal);
- QMargins &operator/=(qreal);
+ Q_DECL_CONSTEXPR QMargins() Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR QMargins(int left, int top, int right, int bottom) Q_DECL_NOTHROW;
+
+ Q_DECL_CONSTEXPR bool isNull() const Q_DECL_NOTHROW;
+
+ Q_DECL_CONSTEXPR int left() const Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR int top() const Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR int right() const Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR int bottom() const Q_DECL_NOTHROW;
+
+ Q_DECL_RELAXED_CONSTEXPR void setLeft(int left) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR void setTop(int top) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR void setRight(int right) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR void setBottom(int bottom) Q_DECL_NOTHROW;
+
+ Q_DECL_RELAXED_CONSTEXPR QMargins &operator+=(const QMargins &margins) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR QMargins &operator-=(const QMargins &margins) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR QMargins &operator+=(int) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR QMargins &operator-=(int) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR QMargins &operator*=(int) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR QMargins &operator/=(int);
+ Q_DECL_RELAXED_CONSTEXPR QMargins &operator*=(qreal) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR QMargins &operator/=(qreal);
private:
int m_left;
@@ -75,8 +75,8 @@ private:
int m_right;
int m_bottom;
- friend Q_DECL_CONSTEXPR inline bool operator==(const QMargins &, const QMargins &);
- friend Q_DECL_CONSTEXPR inline bool operator!=(const QMargins &, const QMargins &);
+ friend Q_DECL_CONSTEXPR inline bool operator==(const QMargins &, const QMargins &) Q_DECL_NOTHROW;
+ friend Q_DECL_CONSTEXPR inline bool operator!=(const QMargins &, const QMargins &) Q_DECL_NOTHROW;
};
Q_DECLARE_TYPEINFO(QMargins, Q_MOVABLE_TYPE);
@@ -93,40 +93,40 @@ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QMargins &);
QMargins inline functions
*****************************************************************************/
-Q_DECL_CONSTEXPR inline QMargins::QMargins() : m_left(0), m_top(0), m_right(0), m_bottom(0) {}
+Q_DECL_CONSTEXPR inline QMargins::QMargins() Q_DECL_NOTHROW : m_left(0), m_top(0), m_right(0), m_bottom(0) {}
-Q_DECL_CONSTEXPR inline QMargins::QMargins(int aleft, int atop, int aright, int abottom)
+Q_DECL_CONSTEXPR inline QMargins::QMargins(int aleft, int atop, int aright, int abottom) Q_DECL_NOTHROW
: m_left(aleft), m_top(atop), m_right(aright), m_bottom(abottom) {}
-Q_DECL_CONSTEXPR inline bool QMargins::isNull() const
+Q_DECL_CONSTEXPR inline bool QMargins::isNull() const Q_DECL_NOTHROW
{ return m_left==0 && m_top==0 && m_right==0 && m_bottom==0; }
-Q_DECL_CONSTEXPR inline int QMargins::left() const
+Q_DECL_CONSTEXPR inline int QMargins::left() const Q_DECL_NOTHROW
{ return m_left; }
-Q_DECL_CONSTEXPR inline int QMargins::top() const
+Q_DECL_CONSTEXPR inline int QMargins::top() const Q_DECL_NOTHROW
{ return m_top; }
-Q_DECL_CONSTEXPR inline int QMargins::right() const
+Q_DECL_CONSTEXPR inline int QMargins::right() const Q_DECL_NOTHROW
{ return m_right; }
-Q_DECL_CONSTEXPR inline int QMargins::bottom() const
+Q_DECL_CONSTEXPR inline int QMargins::bottom() const Q_DECL_NOTHROW
{ return m_bottom; }
-inline void QMargins::setLeft(int aleft)
+Q_DECL_RELAXED_CONSTEXPR inline void QMargins::setLeft(int aleft) Q_DECL_NOTHROW
{ m_left = aleft; }
-inline void QMargins::setTop(int atop)
+Q_DECL_RELAXED_CONSTEXPR inline void QMargins::setTop(int atop) Q_DECL_NOTHROW
{ m_top = atop; }
-inline void QMargins::setRight(int aright)
+Q_DECL_RELAXED_CONSTEXPR inline void QMargins::setRight(int aright) Q_DECL_NOTHROW
{ m_right = aright; }
-inline void QMargins::setBottom(int abottom)
+Q_DECL_RELAXED_CONSTEXPR inline void QMargins::setBottom(int abottom) Q_DECL_NOTHROW
{ m_bottom = abottom; }
-Q_DECL_CONSTEXPR inline bool operator==(const QMargins &m1, const QMargins &m2)
+Q_DECL_CONSTEXPR inline bool operator==(const QMargins &m1, const QMargins &m2) Q_DECL_NOTHROW
{
return
m1.m_left == m2.m_left &&
@@ -135,7 +135,7 @@ Q_DECL_CONSTEXPR inline bool operator==(const QMargins &m1, const QMargins &m2)
m1.m_bottom == m2.m_bottom;
}
-Q_DECL_CONSTEXPR inline bool operator!=(const QMargins &m1, const QMargins &m2)
+Q_DECL_CONSTEXPR inline bool operator!=(const QMargins &m1, const QMargins &m2) Q_DECL_NOTHROW
{
return
m1.m_left != m2.m_left ||
@@ -144,55 +144,55 @@ Q_DECL_CONSTEXPR inline bool operator!=(const QMargins &m1, const QMargins &m2)
m1.m_bottom != m2.m_bottom;
}
-Q_DECL_CONSTEXPR inline QMargins operator+(const QMargins &m1, const QMargins &m2)
+Q_DECL_CONSTEXPR inline QMargins operator+(const QMargins &m1, const QMargins &m2) Q_DECL_NOTHROW
{
return QMargins(m1.left() + m2.left(), m1.top() + m2.top(),
m1.right() + m2.right(), m1.bottom() + m2.bottom());
}
-Q_DECL_CONSTEXPR inline QMargins operator-(const QMargins &m1, const QMargins &m2)
+Q_DECL_CONSTEXPR inline QMargins operator-(const QMargins &m1, const QMargins &m2) Q_DECL_NOTHROW
{
return QMargins(m1.left() - m2.left(), m1.top() - m2.top(),
m1.right() - m2.right(), m1.bottom() - m2.bottom());
}
-Q_DECL_CONSTEXPR inline QMargins operator+(const QMargins &lhs, int rhs)
+Q_DECL_CONSTEXPR inline QMargins operator+(const QMargins &lhs, int rhs) Q_DECL_NOTHROW
{
return QMargins(lhs.left() + rhs, lhs.top() + rhs,
lhs.right() + rhs, lhs.bottom() + rhs);
}
-Q_DECL_CONSTEXPR inline QMargins operator+(int lhs, const QMargins &rhs)
+Q_DECL_CONSTEXPR inline QMargins operator+(int lhs, const QMargins &rhs) Q_DECL_NOTHROW
{
return QMargins(rhs.left() + lhs, rhs.top() + lhs,
rhs.right() + lhs, rhs.bottom() + lhs);
}
-Q_DECL_CONSTEXPR inline QMargins operator-(const QMargins &lhs, int rhs)
+Q_DECL_CONSTEXPR inline QMargins operator-(const QMargins &lhs, int rhs) Q_DECL_NOTHROW
{
return QMargins(lhs.left() - rhs, lhs.top() - rhs,
lhs.right() - rhs, lhs.bottom() - rhs);
}
-Q_DECL_CONSTEXPR inline QMargins operator*(const QMargins &margins, int factor)
+Q_DECL_CONSTEXPR inline QMargins operator*(const QMargins &margins, int factor) Q_DECL_NOTHROW
{
return QMargins(margins.left() * factor, margins.top() * factor,
margins.right() * factor, margins.bottom() * factor);
}
-Q_DECL_CONSTEXPR inline QMargins operator*(int factor, const QMargins &margins)
+Q_DECL_CONSTEXPR inline QMargins operator*(int factor, const QMargins &margins) Q_DECL_NOTHROW
{
return QMargins(margins.left() * factor, margins.top() * factor,
margins.right() * factor, margins.bottom() * factor);
}
-Q_DECL_CONSTEXPR inline QMargins operator*(const QMargins &margins, qreal factor)
+Q_DECL_CONSTEXPR inline QMargins operator*(const QMargins &margins, qreal factor) Q_DECL_NOTHROW
{
return QMargins(qRound(margins.left() * factor), qRound(margins.top() * factor),
qRound(margins.right() * factor), qRound(margins.bottom() * factor));
}
-Q_DECL_CONSTEXPR inline QMargins operator*(qreal factor, const QMargins &margins)
+Q_DECL_CONSTEXPR inline QMargins operator*(qreal factor, const QMargins &margins) Q_DECL_NOTHROW
{
return QMargins(qRound(margins.left() * factor), qRound(margins.top() * factor),
qRound(margins.right() * factor), qRound(margins.bottom() * factor));
@@ -210,17 +210,17 @@ Q_DECL_CONSTEXPR inline QMargins operator/(const QMargins &margins, qreal diviso
qRound(margins.right() / divisor), qRound(margins.bottom() / divisor));
}
-inline QMargins &QMargins::operator+=(const QMargins &margins)
+Q_DECL_RELAXED_CONSTEXPR inline QMargins &QMargins::operator+=(const QMargins &margins) Q_DECL_NOTHROW
{
return *this = *this + margins;
}
-inline QMargins &QMargins::operator-=(const QMargins &margins)
+Q_DECL_RELAXED_CONSTEXPR inline QMargins &QMargins::operator-=(const QMargins &margins) Q_DECL_NOTHROW
{
return *this = *this - margins;
}
-inline QMargins &QMargins::operator+=(int margin)
+Q_DECL_RELAXED_CONSTEXPR inline QMargins &QMargins::operator+=(int margin) Q_DECL_NOTHROW
{
m_left += margin;
m_top += margin;
@@ -229,7 +229,7 @@ inline QMargins &QMargins::operator+=(int margin)
return *this;
}
-inline QMargins &QMargins::operator-=(int margin)
+Q_DECL_RELAXED_CONSTEXPR inline QMargins &QMargins::operator-=(int margin) Q_DECL_NOTHROW
{
m_left -= margin;
m_top -= margin;
@@ -238,32 +238,32 @@ inline QMargins &QMargins::operator-=(int margin)
return *this;
}
-inline QMargins &QMargins::operator*=(int factor)
+Q_DECL_RELAXED_CONSTEXPR inline QMargins &QMargins::operator*=(int factor) Q_DECL_NOTHROW
{
return *this = *this * factor;
}
-inline QMargins &QMargins::operator/=(int divisor)
+Q_DECL_RELAXED_CONSTEXPR inline QMargins &QMargins::operator/=(int divisor)
{
return *this = *this / divisor;
}
-inline QMargins &QMargins::operator*=(qreal factor)
+Q_DECL_RELAXED_CONSTEXPR inline QMargins &QMargins::operator*=(qreal factor) Q_DECL_NOTHROW
{
return *this = *this * factor;
}
-inline QMargins &QMargins::operator/=(qreal divisor)
+Q_DECL_RELAXED_CONSTEXPR inline QMargins &QMargins::operator/=(qreal divisor)
{
return *this = *this / divisor;
}
-Q_DECL_CONSTEXPR inline QMargins operator+(const QMargins &margins)
+Q_DECL_CONSTEXPR inline QMargins operator+(const QMargins &margins) Q_DECL_NOTHROW
{
return margins;
}
-Q_DECL_CONSTEXPR inline QMargins operator-(const QMargins &margins)
+Q_DECL_CONSTEXPR inline QMargins operator-(const QMargins &margins) Q_DECL_NOTHROW
{
return QMargins(-margins.left(), -margins.top(), -margins.right(), -margins.bottom());
}
@@ -279,30 +279,30 @@ Q_CORE_EXPORT QDebug operator<<(QDebug, const QMargins &);
class QMarginsF
{
public:
- Q_DECL_CONSTEXPR QMarginsF();
- Q_DECL_CONSTEXPR QMarginsF(qreal left, qreal top, qreal right, qreal bottom);
- Q_DECL_CONSTEXPR QMarginsF(const QMargins &margins);
+ Q_DECL_CONSTEXPR QMarginsF() Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR QMarginsF(qreal left, qreal top, qreal right, qreal bottom) Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR QMarginsF(const QMargins &margins) Q_DECL_NOTHROW;
- Q_DECL_CONSTEXPR bool isNull() const;
+ Q_DECL_CONSTEXPR bool isNull() const Q_DECL_NOTHROW;
- Q_DECL_CONSTEXPR qreal left() const;
- Q_DECL_CONSTEXPR qreal top() const;
- Q_DECL_CONSTEXPR qreal right() const;
- Q_DECL_CONSTEXPR qreal bottom() const;
+ Q_DECL_CONSTEXPR qreal left() const Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR qreal top() const Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR qreal right() const Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR qreal bottom() const Q_DECL_NOTHROW;
- void setLeft(qreal left);
- void setTop(qreal top);
- void setRight(qreal right);
- void setBottom(qreal bottom);
+ Q_DECL_RELAXED_CONSTEXPR void setLeft(qreal left) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR void setTop(qreal top) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR void setRight(qreal right) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR void setBottom(qreal bottom) Q_DECL_NOTHROW;
- QMarginsF &operator+=(const QMarginsF &margins);
- QMarginsF &operator-=(const QMarginsF &margins);
- QMarginsF &operator+=(qreal addend);
- QMarginsF &operator-=(qreal subtrahend);
- QMarginsF &operator*=(qreal factor);
- QMarginsF &operator/=(qreal divisor);
+ Q_DECL_RELAXED_CONSTEXPR QMarginsF &operator+=(const QMarginsF &margins) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR QMarginsF &operator-=(const QMarginsF &margins) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR QMarginsF &operator+=(qreal addend) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR QMarginsF &operator-=(qreal subtrahend) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR QMarginsF &operator*=(qreal factor) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR QMarginsF &operator/=(qreal divisor);
- Q_DECL_CONSTEXPR inline QMargins toMargins() const;
+ Q_DECL_CONSTEXPR inline QMargins toMargins() const Q_DECL_NOTHROW;
private:
qreal m_left;
@@ -326,43 +326,44 @@ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QMarginsF &);
QMarginsF inline functions
*****************************************************************************/
-Q_DECL_CONSTEXPR inline QMarginsF::QMarginsF() : m_left(0), m_top(0), m_right(0), m_bottom(0) {}
+Q_DECL_CONSTEXPR inline QMarginsF::QMarginsF() Q_DECL_NOTHROW
+ : m_left(0), m_top(0), m_right(0), m_bottom(0) {}
-Q_DECL_CONSTEXPR inline QMarginsF::QMarginsF(qreal aleft, qreal atop, qreal aright, qreal abottom)
+Q_DECL_CONSTEXPR inline QMarginsF::QMarginsF(qreal aleft, qreal atop, qreal aright, qreal abottom) Q_DECL_NOTHROW
: m_left(aleft), m_top(atop), m_right(aright), m_bottom(abottom) {}
-Q_DECL_CONSTEXPR inline QMarginsF::QMarginsF(const QMargins &margins)
+Q_DECL_CONSTEXPR inline QMarginsF::QMarginsF(const QMargins &margins) Q_DECL_NOTHROW
: m_left(margins.left()), m_top(margins.top()), m_right(margins.right()), m_bottom(margins.bottom()) {}
-Q_DECL_CONSTEXPR inline bool QMarginsF::isNull() const
+Q_DECL_CONSTEXPR inline bool QMarginsF::isNull() const Q_DECL_NOTHROW
{ return qFuzzyIsNull(m_left) && qFuzzyIsNull(m_top) && qFuzzyIsNull(m_right) && qFuzzyIsNull(m_bottom); }
-Q_DECL_CONSTEXPR inline qreal QMarginsF::left() const
+Q_DECL_CONSTEXPR inline qreal QMarginsF::left() const Q_DECL_NOTHROW
{ return m_left; }
-Q_DECL_CONSTEXPR inline qreal QMarginsF::top() const
+Q_DECL_CONSTEXPR inline qreal QMarginsF::top() const Q_DECL_NOTHROW
{ return m_top; }
-Q_DECL_CONSTEXPR inline qreal QMarginsF::right() const
+Q_DECL_CONSTEXPR inline qreal QMarginsF::right() const Q_DECL_NOTHROW
{ return m_right; }
-Q_DECL_CONSTEXPR inline qreal QMarginsF::bottom() const
+Q_DECL_CONSTEXPR inline qreal QMarginsF::bottom() const Q_DECL_NOTHROW
{ return m_bottom; }
-inline void QMarginsF::setLeft(qreal aleft)
+Q_DECL_RELAXED_CONSTEXPR inline void QMarginsF::setLeft(qreal aleft) Q_DECL_NOTHROW
{ m_left = aleft; }
-inline void QMarginsF::setTop(qreal atop)
+Q_DECL_RELAXED_CONSTEXPR inline void QMarginsF::setTop(qreal atop) Q_DECL_NOTHROW
{ m_top = atop; }
-inline void QMarginsF::setRight(qreal aright)
+Q_DECL_RELAXED_CONSTEXPR inline void QMarginsF::setRight(qreal aright) Q_DECL_NOTHROW
{ m_right = aright; }
-inline void QMarginsF::setBottom(qreal abottom)
+Q_DECL_RELAXED_CONSTEXPR inline void QMarginsF::setBottom(qreal abottom) Q_DECL_NOTHROW
{ m_bottom = abottom; }
-Q_DECL_CONSTEXPR inline bool operator==(const QMarginsF &lhs, const QMarginsF &rhs)
+Q_DECL_CONSTEXPR inline bool operator==(const QMarginsF &lhs, const QMarginsF &rhs) Q_DECL_NOTHROW
{
return qFuzzyCompare(lhs.left(), rhs.left())
&& qFuzzyCompare(lhs.top(), rhs.top())
@@ -370,48 +371,48 @@ Q_DECL_CONSTEXPR inline bool operator==(const QMarginsF &lhs, const QMarginsF &r
&& qFuzzyCompare(lhs.bottom(), rhs.bottom());
}
-Q_DECL_CONSTEXPR inline bool operator!=(const QMarginsF &lhs, const QMarginsF &rhs)
+Q_DECL_CONSTEXPR inline bool operator!=(const QMarginsF &lhs, const QMarginsF &rhs) Q_DECL_NOTHROW
{
return !operator==(lhs, rhs);
}
-Q_DECL_CONSTEXPR inline QMarginsF operator+(const QMarginsF &lhs, const QMarginsF &rhs)
+Q_DECL_CONSTEXPR inline QMarginsF operator+(const QMarginsF &lhs, const QMarginsF &rhs) Q_DECL_NOTHROW
{
return QMarginsF(lhs.left() + rhs.left(), lhs.top() + rhs.top(),
lhs.right() + rhs.right(), lhs.bottom() + rhs.bottom());
}
-Q_DECL_CONSTEXPR inline QMarginsF operator-(const QMarginsF &lhs, const QMarginsF &rhs)
+Q_DECL_CONSTEXPR inline QMarginsF operator-(const QMarginsF &lhs, const QMarginsF &rhs) Q_DECL_NOTHROW
{
return QMarginsF(lhs.left() - rhs.left(), lhs.top() - rhs.top(),
lhs.right() - rhs.right(), lhs.bottom() - rhs.bottom());
}
-Q_DECL_CONSTEXPR inline QMarginsF operator+(const QMarginsF &lhs, qreal rhs)
+Q_DECL_CONSTEXPR inline QMarginsF operator+(const QMarginsF &lhs, qreal rhs) Q_DECL_NOTHROW
{
return QMarginsF(lhs.left() + rhs, lhs.top() + rhs,
lhs.right() + rhs, lhs.bottom() + rhs);
}
-Q_DECL_CONSTEXPR inline QMarginsF operator+(qreal lhs, const QMarginsF &rhs)
+Q_DECL_CONSTEXPR inline QMarginsF operator+(qreal lhs, const QMarginsF &rhs) Q_DECL_NOTHROW
{
return QMarginsF(rhs.left() + lhs, rhs.top() + lhs,
rhs.right() + lhs, rhs.bottom() + lhs);
}
-Q_DECL_CONSTEXPR inline QMarginsF operator-(const QMarginsF &lhs, qreal rhs)
+Q_DECL_CONSTEXPR inline QMarginsF operator-(const QMarginsF &lhs, qreal rhs) Q_DECL_NOTHROW
{
return QMarginsF(lhs.left() - rhs, lhs.top() - rhs,
lhs.right() - rhs, lhs.bottom() - rhs);
}
-Q_DECL_CONSTEXPR inline QMarginsF operator*(const QMarginsF &lhs, qreal rhs)
+Q_DECL_CONSTEXPR inline QMarginsF operator*(const QMarginsF &lhs, qreal rhs) Q_DECL_NOTHROW
{
return QMarginsF(lhs.left() * rhs, lhs.top() * rhs,
lhs.right() * rhs, lhs.bottom() * rhs);
}
-Q_DECL_CONSTEXPR inline QMarginsF operator*(qreal lhs, const QMarginsF &rhs)
+Q_DECL_CONSTEXPR inline QMarginsF operator*(qreal lhs, const QMarginsF &rhs) Q_DECL_NOTHROW
{
return QMarginsF(rhs.left() * lhs, rhs.top() * lhs,
rhs.right() * lhs, rhs.bottom() * lhs);
@@ -423,17 +424,17 @@ Q_DECL_CONSTEXPR inline QMarginsF operator/(const QMarginsF &lhs, qreal divisor)
lhs.right() / divisor, lhs.bottom() / divisor);
}
-inline QMarginsF &QMarginsF::operator+=(const QMarginsF &margins)
+Q_DECL_RELAXED_CONSTEXPR inline QMarginsF &QMarginsF::operator+=(const QMarginsF &margins) Q_DECL_NOTHROW
{
return *this = *this + margins;
}
-inline QMarginsF &QMarginsF::operator-=(const QMarginsF &margins)
+Q_DECL_RELAXED_CONSTEXPR inline QMarginsF &QMarginsF::operator-=(const QMarginsF &margins) Q_DECL_NOTHROW
{
return *this = *this - margins;
}
-inline QMarginsF &QMarginsF::operator+=(qreal addend)
+Q_DECL_RELAXED_CONSTEXPR inline QMarginsF &QMarginsF::operator+=(qreal addend) Q_DECL_NOTHROW
{
m_left += addend;
m_top += addend;
@@ -442,7 +443,7 @@ inline QMarginsF &QMarginsF::operator+=(qreal addend)
return *this;
}
-inline QMarginsF &QMarginsF::operator-=(qreal subtrahend)
+Q_DECL_RELAXED_CONSTEXPR inline QMarginsF &QMarginsF::operator-=(qreal subtrahend) Q_DECL_NOTHROW
{
m_left -= subtrahend;
m_top -= subtrahend;
@@ -451,27 +452,27 @@ inline QMarginsF &QMarginsF::operator-=(qreal subtrahend)
return *this;
}
-inline QMarginsF &QMarginsF::operator*=(qreal factor)
+Q_DECL_RELAXED_CONSTEXPR inline QMarginsF &QMarginsF::operator*=(qreal factor) Q_DECL_NOTHROW
{
return *this = *this * factor;
}
-inline QMarginsF &QMarginsF::operator/=(qreal divisor)
+Q_DECL_RELAXED_CONSTEXPR inline QMarginsF &QMarginsF::operator/=(qreal divisor)
{
return *this = *this / divisor;
}
-Q_DECL_CONSTEXPR inline QMarginsF operator+(const QMarginsF &margins)
+Q_DECL_CONSTEXPR inline QMarginsF operator+(const QMarginsF &margins) Q_DECL_NOTHROW
{
return margins;
}
-Q_DECL_CONSTEXPR inline QMarginsF operator-(const QMarginsF &margins)
+Q_DECL_CONSTEXPR inline QMarginsF operator-(const QMarginsF &margins) Q_DECL_NOTHROW
{
return QMarginsF(-margins.left(), -margins.top(), -margins.right(), -margins.bottom());
}
-Q_DECL_CONSTEXPR inline QMargins QMarginsF::toMargins() const
+Q_DECL_CONSTEXPR inline QMargins QMarginsF::toMargins() const Q_DECL_NOTHROW
{
return QMargins(qRound(m_left), qRound(m_top), qRound(m_right), qRound(m_bottom));
}
diff --git a/src/corelib/tools/qpair.h b/src/corelib/tools/qpair.h
index b2217e4dd0..33f8c81e68 100644
--- a/src/corelib/tools/qpair.h
+++ b/src/corelib/tools/qpair.h
@@ -52,20 +52,32 @@ struct QPair
template <typename TT1, typename TT2>
Q_DECL_CONSTEXPR QPair(const QPair<TT1, TT2> &p) : first(p.first), second(p.second) {}
template <typename TT1, typename TT2>
- QPair &operator=(const QPair<TT1, TT2> &p)
+ Q_DECL_RELAXED_CONSTEXPR QPair &operator=(const QPair<TT1, TT2> &p)
{ first = p.first; second = p.second; return *this; }
#ifdef Q_COMPILER_RVALUE_REFS
template <typename TT1, typename TT2>
Q_DECL_CONSTEXPR QPair(QPair<TT1, TT2> &&p) : first(std::move(p.first)), second(std::move(p.second)) {}
template <typename TT1, typename TT2>
- QPair &operator=(QPair<TT1, TT2> &&p)
+ Q_DECL_RELAXED_CONSTEXPR QPair &operator=(QPair<TT1, TT2> &&p)
{ first = std::move(p.first); second = std::move(p.second); return *this; }
#endif
+ Q_DECL_RELAXED_CONSTEXPR void swap(QPair &other)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(qSwap(other.first, other.first)) && noexcept(qSwap(other.second, other.second)))
+ {
+ // use qSwap() to pick up ADL swaps automatically:
+ qSwap(first, other.first);
+ qSwap(second, other.second);
+ }
+
T1 first;
T2 second;
};
+template <typename T1, typename T2>
+void swap(QPair<T1, T2> &lhs, QPair<T1, T2> &rhs) Q_DECL_NOEXCEPT_EXPR(noexcept(lhs.swap(rhs)))
+{ lhs.swap(rhs); }
+
// mark QPair<T1,T2> as complex/movable/primitive depending on the
// typeinfos of the constituents:
template<class T1, class T2>
@@ -73,38 +85,45 @@ class QTypeInfo<QPair<T1, T2> > : public QTypeInfoMerger<QPair<T1, T2>, T1, T2>
template <class T1, class T2>
Q_DECL_CONSTEXPR Q_INLINE_TEMPLATE bool operator==(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(p1.first == p2.first && p1.second == p2.second))
{ return p1.first == p2.first && p1.second == p2.second; }
template <class T1, class T2>
Q_DECL_CONSTEXPR Q_INLINE_TEMPLATE bool operator!=(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(!(p1 == p2)))
{ return !(p1 == p2); }
template <class T1, class T2>
Q_DECL_CONSTEXPR Q_INLINE_TEMPLATE bool operator<(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(p1.first < p2.first || (!(p2.first < p1.first) && p1.second < p2.second)))
{
return p1.first < p2.first || (!(p2.first < p1.first) && p1.second < p2.second);
}
template <class T1, class T2>
Q_DECL_CONSTEXPR Q_INLINE_TEMPLATE bool operator>(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(p2 < p1))
{
return p2 < p1;
}
template <class T1, class T2>
Q_DECL_CONSTEXPR Q_INLINE_TEMPLATE bool operator<=(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(!(p2 < p1)))
{
return !(p2 < p1);
}
template <class T1, class T2>
Q_DECL_CONSTEXPR Q_INLINE_TEMPLATE bool operator>=(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(!(p1 < p2)))
{
return !(p1 < p2);
}
template <class T1, class T2>
Q_DECL_CONSTEXPR Q_OUTOFLINE_TEMPLATE QPair<T1, T2> qMakePair(const T1 &x, const T2 &y)
+ Q_DECL_NOEXCEPT_EXPR(noexcept(QPair<T1, T2>(x, y)))
{
return QPair<T1, T2>(x, y);
}
diff --git a/src/corelib/tools/qpair.qdoc b/src/corelib/tools/qpair.qdoc
index be329a0df0..f7b3c05db0 100644
--- a/src/corelib/tools/qpair.qdoc
+++ b/src/corelib/tools/qpair.qdoc
@@ -116,6 +116,31 @@
\sa qMakePair()
*/
+/*!
+ \fn void QPair::swap(QPair &other)
+ \since 5.5
+
+ Swaps this pair with \a other.
+
+ Equivalent to
+ \code
+ qSwap(this->first, other.first);
+ qSwap(this->second, other.second);
+ \endcode
+
+ Swap overloads are found in namespace \c std as well as via
+ argument-dependent lookup (ADL) in \c{T}'s namespace.
+*/
+
+/*!
+ \fn void swap(QPair<T1, T2> &lhs, QPair<T1, T2> &rhs)
+ \overload
+ \relates QPair
+ \since 5.5
+
+ Swaps \a lhs with \a rhs.
+*/
+
/*! \fn bool operator==(const QPair<T1, T2> &p1, const QPair<T1, T2> &p2)
\relates QPair
diff --git a/src/corelib/tools/qpoint.h b/src/corelib/tools/qpoint.h
index 5cf97b9052..70474b6d59 100644
--- a/src/corelib/tools/qpoint.h
+++ b/src/corelib/tools/qpoint.h
@@ -49,22 +49,22 @@ public:
Q_DECL_CONSTEXPR inline int x() const;
Q_DECL_CONSTEXPR inline int y() const;
- inline void setX(int x);
- inline void setY(int y);
+ Q_DECL_RELAXED_CONSTEXPR inline void setX(int x);
+ Q_DECL_RELAXED_CONSTEXPR inline void setY(int y);
Q_DECL_CONSTEXPR inline int manhattanLength() const;
- inline int &rx();
- inline int &ry();
+ Q_DECL_RELAXED_CONSTEXPR inline int &rx();
+ Q_DECL_RELAXED_CONSTEXPR inline int &ry();
- inline QPoint &operator+=(const QPoint &p);
- inline QPoint &operator-=(const QPoint &p);
+ Q_DECL_RELAXED_CONSTEXPR inline QPoint &operator+=(const QPoint &p);
+ Q_DECL_RELAXED_CONSTEXPR inline QPoint &operator-=(const QPoint &p);
- inline QPoint &operator*=(float factor);
- inline QPoint &operator*=(double factor);
- inline QPoint &operator*=(int factor);
+ Q_DECL_RELAXED_CONSTEXPR inline QPoint &operator*=(float factor);
+ Q_DECL_RELAXED_CONSTEXPR inline QPoint &operator*=(double factor);
+ Q_DECL_RELAXED_CONSTEXPR inline QPoint &operator*=(int factor);
- inline QPoint &operator/=(qreal divisor);
+ Q_DECL_RELAXED_CONSTEXPR inline QPoint &operator/=(qreal divisor);
Q_DECL_CONSTEXPR static inline int dotProduct(const QPoint &p1, const QPoint &p2)
{ return p1.xp * p2.xp + p1.yp * p2.yp; }
@@ -116,34 +116,34 @@ Q_DECL_CONSTEXPR inline int QPoint::x() const
Q_DECL_CONSTEXPR inline int QPoint::y() const
{ return yp; }
-inline void QPoint::setX(int xpos)
+Q_DECL_RELAXED_CONSTEXPR inline void QPoint::setX(int xpos)
{ xp = xpos; }
-inline void QPoint::setY(int ypos)
+Q_DECL_RELAXED_CONSTEXPR inline void QPoint::setY(int ypos)
{ yp = ypos; }
inline int Q_DECL_CONSTEXPR QPoint::manhattanLength() const
{ return qAbs(x())+qAbs(y()); }
-inline int &QPoint::rx()
+Q_DECL_RELAXED_CONSTEXPR inline int &QPoint::rx()
{ return xp; }
-inline int &QPoint::ry()
+Q_DECL_RELAXED_CONSTEXPR inline int &QPoint::ry()
{ return yp; }
-inline QPoint &QPoint::operator+=(const QPoint &p)
+Q_DECL_RELAXED_CONSTEXPR inline QPoint &QPoint::operator+=(const QPoint &p)
{ xp+=p.xp; yp+=p.yp; return *this; }
-inline QPoint &QPoint::operator-=(const QPoint &p)
+Q_DECL_RELAXED_CONSTEXPR inline QPoint &QPoint::operator-=(const QPoint &p)
{ xp-=p.xp; yp-=p.yp; return *this; }
-inline QPoint &QPoint::operator*=(float factor)
+Q_DECL_RELAXED_CONSTEXPR inline QPoint &QPoint::operator*=(float factor)
{ xp = qRound(xp*factor); yp = qRound(yp*factor); return *this; }
-inline QPoint &QPoint::operator*=(double factor)
+Q_DECL_RELAXED_CONSTEXPR inline QPoint &QPoint::operator*=(double factor)
{ xp = qRound(xp*factor); yp = qRound(yp*factor); return *this; }
-inline QPoint &QPoint::operator*=(int factor)
+Q_DECL_RELAXED_CONSTEXPR inline QPoint &QPoint::operator*=(int factor)
{ xp = xp*factor; yp = yp*factor; return *this; }
Q_DECL_CONSTEXPR inline bool operator==(const QPoint &p1, const QPoint &p2)
@@ -182,7 +182,7 @@ Q_DECL_CONSTEXPR inline const QPoint operator+(const QPoint &p)
Q_DECL_CONSTEXPR inline const QPoint operator-(const QPoint &p)
{ return QPoint(-p.xp, -p.yp); }
-inline QPoint &QPoint::operator/=(qreal c)
+Q_DECL_RELAXED_CONSTEXPR inline QPoint &QPoint::operator/=(qreal c)
{
xp = qRound(xp/c);
yp = qRound(yp/c);
@@ -215,16 +215,16 @@ public:
Q_DECL_CONSTEXPR inline qreal x() const;
Q_DECL_CONSTEXPR inline qreal y() const;
- inline void setX(qreal x);
- inline void setY(qreal y);
+ Q_DECL_RELAXED_CONSTEXPR inline void setX(qreal x);
+ Q_DECL_RELAXED_CONSTEXPR inline void setY(qreal y);
- inline qreal &rx();
- inline qreal &ry();
+ Q_DECL_RELAXED_CONSTEXPR inline qreal &rx();
+ Q_DECL_RELAXED_CONSTEXPR inline qreal &ry();
- inline QPointF &operator+=(const QPointF &p);
- inline QPointF &operator-=(const QPointF &p);
- inline QPointF &operator*=(qreal c);
- inline QPointF &operator/=(qreal c);
+ Q_DECL_RELAXED_CONSTEXPR inline QPointF &operator+=(const QPointF &p);
+ Q_DECL_RELAXED_CONSTEXPR inline QPointF &operator-=(const QPointF &p);
+ Q_DECL_RELAXED_CONSTEXPR inline QPointF &operator*=(qreal c);
+ Q_DECL_RELAXED_CONSTEXPR inline QPointF &operator/=(qreal c);
Q_DECL_CONSTEXPR static inline qreal dotProduct(const QPointF &p1, const QPointF &p2)
{ return p1.xp * p2.xp + p1.yp * p2.yp; }
@@ -289,39 +289,39 @@ Q_DECL_CONSTEXPR inline qreal QPointF::y() const
return yp;
}
-inline void QPointF::setX(qreal xpos)
+Q_DECL_RELAXED_CONSTEXPR inline void QPointF::setX(qreal xpos)
{
xp = xpos;
}
-inline void QPointF::setY(qreal ypos)
+Q_DECL_RELAXED_CONSTEXPR inline void QPointF::setY(qreal ypos)
{
yp = ypos;
}
-inline qreal &QPointF::rx()
+Q_DECL_RELAXED_CONSTEXPR inline qreal &QPointF::rx()
{
return xp;
}
-inline qreal &QPointF::ry()
+Q_DECL_RELAXED_CONSTEXPR inline qreal &QPointF::ry()
{
return yp;
}
-inline QPointF &QPointF::operator+=(const QPointF &p)
+Q_DECL_RELAXED_CONSTEXPR inline QPointF &QPointF::operator+=(const QPointF &p)
{
xp+=p.xp;
yp+=p.yp;
return *this;
}
-inline QPointF &QPointF::operator-=(const QPointF &p)
+Q_DECL_RELAXED_CONSTEXPR inline QPointF &QPointF::operator-=(const QPointF &p)
{
xp-=p.xp; yp-=p.yp; return *this;
}
-inline QPointF &QPointF::operator*=(qreal c)
+Q_DECL_RELAXED_CONSTEXPR inline QPointF &QPointF::operator*=(qreal c)
{
xp*=c; yp*=c; return *this;
}
@@ -366,7 +366,7 @@ Q_DECL_CONSTEXPR inline const QPointF operator-(const QPointF &p)
return QPointF(-p.xp, -p.yp);
}
-inline QPointF &QPointF::operator/=(qreal divisor)
+Q_DECL_RELAXED_CONSTEXPR inline QPointF &QPointF::operator/=(qreal divisor)
{
xp/=divisor;
yp/=divisor;
diff --git a/src/corelib/tools/qrect.cpp b/src/corelib/tools/qrect.cpp
index dc46f85fb5..25e86d9160 100644
--- a/src/corelib/tools/qrect.cpp
+++ b/src/corelib/tools/qrect.cpp
@@ -295,7 +295,7 @@ QT_BEGIN_NAMESPACE
\sa isValid(), isEmpty()
*/
-QRect QRect::normalized() const
+QRect QRect::normalized() const Q_DECL_NOTHROW
{
QRect r;
if (x2 < x1 - 1) { // swap bad x values
@@ -804,7 +804,7 @@ QRect QRect::normalized() const
\sa intersects()
*/
-bool QRect::contains(const QPoint &p, bool proper) const
+bool QRect::contains(const QPoint &p, bool proper) const Q_DECL_NOTHROW
{
int l, r;
if (x2 < x1 - 1) {
@@ -868,7 +868,7 @@ bool QRect::contains(const QPoint &p, bool proper) const
rectangle (not on the edge).
*/
-bool QRect::contains(const QRect &r, bool proper) const
+bool QRect::contains(const QRect &r, bool proper) const Q_DECL_NOTHROW
{
if (isNull() || r.isNull())
return false;
@@ -946,7 +946,7 @@ bool QRect::contains(const QRect &r, bool proper) const
\sa operator|=(), united()
*/
-QRect QRect::operator|(const QRect &r) const
+QRect QRect::operator|(const QRect &r) const Q_DECL_NOTHROW
{
if (isNull())
return r;
@@ -1017,7 +1017,7 @@ QRect QRect::operator|(const QRect &r) const
\sa operator&=(), intersected()
*/
-QRect QRect::operator&(const QRect &r) const
+QRect QRect::operator&(const QRect &r) const Q_DECL_NOTHROW
{
if (isNull() || r.isNull())
return QRect();
@@ -1096,7 +1096,7 @@ QRect QRect::operator&(const QRect &r) const
\sa contains()
*/
-bool QRect::intersects(const QRect &r) const
+bool QRect::intersects(const QRect &r) const Q_DECL_NOTHROW
{
if (isNull() || r.isNull())
return false;
@@ -1522,7 +1522,7 @@ QDebug operator<<(QDebug dbg, const QRect &r)
\sa isValid(), isEmpty()
*/
-QRectF QRectF::normalized() const
+QRectF QRectF::normalized() const Q_DECL_NOTHROW
{
QRectF r = *this;
if (r.w < 0) {
@@ -1935,7 +1935,7 @@ QRectF QRectF::normalized() const
\sa intersects()
*/
-bool QRectF::contains(const QPointF &p) const
+bool QRectF::contains(const QPointF &p) const Q_DECL_NOTHROW
{
qreal l = xp;
qreal r = xp;
@@ -1981,7 +1981,7 @@ bool QRectF::contains(const QPointF &p) const
otherwise returns \c false.
*/
-bool QRectF::contains(const QRectF &r) const
+bool QRectF::contains(const QRectF &r) const Q_DECL_NOTHROW
{
qreal l1 = xp;
qreal r1 = xp;
@@ -2119,7 +2119,7 @@ bool QRectF::contains(const QRectF &r) const
\sa united(), operator|=()
*/
-QRectF QRectF::operator|(const QRectF &r) const
+QRectF QRectF::operator|(const QRectF &r) const Q_DECL_NOTHROW
{
if (isNull())
return r;
@@ -2188,7 +2188,7 @@ QRectF QRectF::operator|(const QRectF &r) const
\sa operator&=(), intersected()
*/
-QRectF QRectF::operator&(const QRectF &r) const
+QRectF QRectF::operator&(const QRectF &r) const Q_DECL_NOTHROW
{
qreal l1 = xp;
qreal r1 = xp;
@@ -2273,7 +2273,7 @@ QRectF QRectF::operator&(const QRectF &r) const
\sa contains()
*/
-bool QRectF::intersects(const QRectF &r) const
+bool QRectF::intersects(const QRectF &r) const Q_DECL_NOTHROW
{
qreal l1 = xp;
qreal r1 = xp;
@@ -2340,7 +2340,7 @@ bool QRectF::intersects(const QRectF &r) const
\sa toRect()
*/
-QRect QRectF::toAlignedRect() const
+QRect QRectF::toAlignedRect() const Q_DECL_NOTHROW
{
int xmin = int(qFloor(xp));
int xmax = int(qCeil(xp + w));
diff --git a/src/corelib/tools/qrect.h b/src/corelib/tools/qrect.h
index b5be5724af..a98ef565f7 100644
--- a/src/corelib/tools/qrect.h
+++ b/src/corelib/tools/qrect.h
@@ -47,100 +47,100 @@ QT_BEGIN_NAMESPACE
class Q_CORE_EXPORT QRect
{
public:
- Q_DECL_CONSTEXPR QRect() : x1(0), y1(0), x2(-1), y2(-1) {}
- Q_DECL_CONSTEXPR QRect(const QPoint &topleft, const QPoint &bottomright);
- Q_DECL_CONSTEXPR QRect(const QPoint &topleft, const QSize &size);
- Q_DECL_CONSTEXPR QRect(int left, int top, int width, int height);
-
- Q_DECL_CONSTEXPR inline bool isNull() const;
- Q_DECL_CONSTEXPR inline bool isEmpty() const;
- Q_DECL_CONSTEXPR inline bool isValid() const;
-
- Q_DECL_CONSTEXPR inline int left() const;
- Q_DECL_CONSTEXPR inline int top() const;
- Q_DECL_CONSTEXPR inline int right() const;
- Q_DECL_CONSTEXPR inline int bottom() const;
- QRect normalized() const Q_REQUIRED_RESULT;
-
- Q_DECL_CONSTEXPR inline int x() const;
- Q_DECL_CONSTEXPR inline int y() const;
- inline void setLeft(int pos);
- inline void setTop(int pos);
- inline void setRight(int pos);
- inline void setBottom(int pos);
- inline void setX(int x);
- inline void setY(int y);
-
- inline void setTopLeft(const QPoint &p);
- inline void setBottomRight(const QPoint &p);
- inline void setTopRight(const QPoint &p);
- inline void setBottomLeft(const QPoint &p);
-
- Q_DECL_CONSTEXPR inline QPoint topLeft() const;
- Q_DECL_CONSTEXPR inline QPoint bottomRight() const;
- Q_DECL_CONSTEXPR inline QPoint topRight() const;
- Q_DECL_CONSTEXPR inline QPoint bottomLeft() const;
- Q_DECL_CONSTEXPR inline QPoint center() const;
-
- inline void moveLeft(int pos);
- inline void moveTop(int pos);
- inline void moveRight(int pos);
- inline void moveBottom(int pos);
- inline void moveTopLeft(const QPoint &p);
- inline void moveBottomRight(const QPoint &p);
- inline void moveTopRight(const QPoint &p);
- inline void moveBottomLeft(const QPoint &p);
- inline void moveCenter(const QPoint &p);
-
- inline void translate(int dx, int dy);
- inline void translate(const QPoint &p);
- Q_DECL_CONSTEXPR inline QRect translated(int dx, int dy) const Q_REQUIRED_RESULT;
- Q_DECL_CONSTEXPR inline QRect translated(const QPoint &p) const Q_REQUIRED_RESULT;
-
- inline void moveTo(int x, int t);
- inline void moveTo(const QPoint &p);
-
- inline void setRect(int x, int y, int w, int h);
- inline void getRect(int *x, int *y, int *w, int *h) const;
-
- inline void setCoords(int x1, int y1, int x2, int y2);
- inline void getCoords(int *x1, int *y1, int *x2, int *y2) const;
-
- inline void adjust(int x1, int y1, int x2, int y2);
- Q_DECL_CONSTEXPR inline QRect adjusted(int x1, int y1, int x2, int y2) const Q_REQUIRED_RESULT;
-
- Q_DECL_CONSTEXPR inline QSize size() const;
- Q_DECL_CONSTEXPR inline int width() const;
- Q_DECL_CONSTEXPR inline int height() const;
- inline void setWidth(int w);
- inline void setHeight(int h);
- inline void setSize(const QSize &s);
-
- QRect operator|(const QRect &r) const;
- QRect operator&(const QRect &r) const;
- inline QRect& operator|=(const QRect &r);
- inline QRect& operator&=(const QRect &r);
-
- bool contains(const QRect &r, bool proper = false) const;
- bool contains(const QPoint &p, bool proper=false) const;
- inline bool contains(int x, int y) const;
- inline bool contains(int x, int y, bool proper) const;
- inline QRect united(const QRect &other) const Q_REQUIRED_RESULT;
- inline QRect intersected(const QRect &other) const Q_REQUIRED_RESULT;
- bool intersects(const QRect &r) const;
-
- Q_DECL_CONSTEXPR inline QRect marginsAdded(const QMargins &margins) const;
- Q_DECL_CONSTEXPR inline QRect marginsRemoved(const QMargins &margins) const;
- inline QRect &operator+=(const QMargins &margins);
- inline QRect &operator-=(const QMargins &margins);
+ Q_DECL_CONSTEXPR QRect() Q_DECL_NOTHROW : x1(0), y1(0), x2(-1), y2(-1) {}
+ Q_DECL_CONSTEXPR QRect(const QPoint &topleft, const QPoint &bottomright) Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR QRect(const QPoint &topleft, const QSize &size) Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR QRect(int left, int top, int width, int height) Q_DECL_NOTHROW;
+
+ Q_DECL_CONSTEXPR inline bool isNull() const Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR inline bool isEmpty() const Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR inline bool isValid() const Q_DECL_NOTHROW;
+
+ Q_DECL_CONSTEXPR inline int left() const Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR inline int top() const Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR inline int right() const Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR inline int bottom() const Q_DECL_NOTHROW;
+ QRect normalized() const Q_DECL_NOTHROW Q_REQUIRED_RESULT;
+
+ Q_DECL_CONSTEXPR inline int x() const Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR inline int y() const Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void setLeft(int pos) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void setTop(int pos) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void setRight(int pos) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void setBottom(int pos) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void setX(int x) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void setY(int y) Q_DECL_NOTHROW;
+
+ Q_DECL_RELAXED_CONSTEXPR inline void setTopLeft(const QPoint &p) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void setBottomRight(const QPoint &p) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void setTopRight(const QPoint &p) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void setBottomLeft(const QPoint &p) Q_DECL_NOTHROW;
+
+ Q_DECL_CONSTEXPR inline QPoint topLeft() const Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR inline QPoint bottomRight() const Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR inline QPoint topRight() const Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR inline QPoint bottomLeft() const Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR inline QPoint center() const Q_DECL_NOTHROW;
+
+ Q_DECL_RELAXED_CONSTEXPR inline void moveLeft(int pos) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void moveTop(int pos) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void moveRight(int pos) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void moveBottom(int pos) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void moveTopLeft(const QPoint &p) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void moveBottomRight(const QPoint &p) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void moveTopRight(const QPoint &p) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void moveBottomLeft(const QPoint &p) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void moveCenter(const QPoint &p) Q_DECL_NOTHROW;
+
+ Q_DECL_RELAXED_CONSTEXPR inline void translate(int dx, int dy) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void translate(const QPoint &p) Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR inline QRect translated(int dx, int dy) const Q_DECL_NOTHROW Q_REQUIRED_RESULT;
+ Q_DECL_CONSTEXPR inline QRect translated(const QPoint &p) const Q_DECL_NOTHROW Q_REQUIRED_RESULT;
+
+ Q_DECL_RELAXED_CONSTEXPR inline void moveTo(int x, int t) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void moveTo(const QPoint &p) Q_DECL_NOTHROW;
+
+ Q_DECL_RELAXED_CONSTEXPR inline void setRect(int x, int y, int w, int h) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void getRect(int *x, int *y, int *w, int *h) const;
+
+ Q_DECL_RELAXED_CONSTEXPR inline void setCoords(int x1, int y1, int x2, int y2) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void getCoords(int *x1, int *y1, int *x2, int *y2) const;
+
+ Q_DECL_RELAXED_CONSTEXPR inline void adjust(int x1, int y1, int x2, int y2) Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR inline QRect adjusted(int x1, int y1, int x2, int y2) const Q_DECL_NOTHROW Q_REQUIRED_RESULT;
+
+ Q_DECL_CONSTEXPR inline QSize size() const Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR inline int width() const Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR inline int height() const Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void setWidth(int w) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void setHeight(int h) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void setSize(const QSize &s) Q_DECL_NOTHROW;
+
+ QRect operator|(const QRect &r) const Q_DECL_NOTHROW;
+ QRect operator&(const QRect &r) const Q_DECL_NOTHROW;
+ inline QRect& operator|=(const QRect &r) Q_DECL_NOTHROW;
+ inline QRect& operator&=(const QRect &r) Q_DECL_NOTHROW;
+
+ bool contains(const QRect &r, bool proper = false) const Q_DECL_NOTHROW;
+ bool contains(const QPoint &p, bool proper=false) const Q_DECL_NOTHROW;
+ inline bool contains(int x, int y) const Q_DECL_NOTHROW;
+ inline bool contains(int x, int y, bool proper) const Q_DECL_NOTHROW;
+ inline QRect united(const QRect &other) const Q_DECL_NOTHROW Q_REQUIRED_RESULT;
+ inline QRect intersected(const QRect &other) const Q_DECL_NOTHROW Q_REQUIRED_RESULT;
+ bool intersects(const QRect &r) const Q_DECL_NOTHROW;
+
+ Q_DECL_CONSTEXPR inline QRect marginsAdded(const QMargins &margins) const Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR inline QRect marginsRemoved(const QMargins &margins) const Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline QRect &operator+=(const QMargins &margins) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline QRect &operator-=(const QMargins &margins) Q_DECL_NOTHROW;
#if QT_DEPRECATED_SINCE(5, 0)
- QT_DEPRECATED QRect unite(const QRect &r) const Q_REQUIRED_RESULT { return united(r); }
- QT_DEPRECATED QRect intersect(const QRect &r) const Q_REQUIRED_RESULT { return intersected(r); }
+ QT_DEPRECATED QRect unite(const QRect &r) const Q_DECL_NOTHROW Q_REQUIRED_RESULT { return united(r); }
+ QT_DEPRECATED QRect intersect(const QRect &r) const Q_DECL_NOTHROW Q_REQUIRED_RESULT { return intersected(r); }
#endif
- friend Q_DECL_CONSTEXPR inline bool operator==(const QRect &, const QRect &);
- friend Q_DECL_CONSTEXPR inline bool operator!=(const QRect &, const QRect &);
+ friend Q_DECL_CONSTEXPR inline bool operator==(const QRect &, const QRect &) Q_DECL_NOTHROW;
+ friend Q_DECL_CONSTEXPR inline bool operator!=(const QRect &, const QRect &) Q_DECL_NOTHROW;
private:
int x1;
@@ -150,8 +150,8 @@ private:
};
Q_DECLARE_TYPEINFO(QRect, Q_MOVABLE_TYPE);
-Q_DECL_CONSTEXPR inline bool operator==(const QRect &, const QRect &);
-Q_DECL_CONSTEXPR inline bool operator!=(const QRect &, const QRect &);
+Q_DECL_CONSTEXPR inline bool operator==(const QRect &, const QRect &) Q_DECL_NOTHROW;
+Q_DECL_CONSTEXPR inline bool operator!=(const QRect &, const QRect &) Q_DECL_NOTHROW;
/*****************************************************************************
@@ -166,97 +166,97 @@ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QRect &);
QRect inline member functions
*****************************************************************************/
-Q_DECL_CONSTEXPR inline QRect::QRect(int aleft, int atop, int awidth, int aheight)
+Q_DECL_CONSTEXPR inline QRect::QRect(int aleft, int atop, int awidth, int aheight) Q_DECL_NOTHROW
: x1(aleft), y1(atop), x2(aleft + awidth - 1), y2(atop + aheight - 1) {}
-Q_DECL_CONSTEXPR inline QRect::QRect(const QPoint &atopLeft, const QPoint &abottomRight)
+Q_DECL_CONSTEXPR inline QRect::QRect(const QPoint &atopLeft, const QPoint &abottomRight) Q_DECL_NOTHROW
: x1(atopLeft.x()), y1(atopLeft.y()), x2(abottomRight.x()), y2(abottomRight.y()) {}
-Q_DECL_CONSTEXPR inline QRect::QRect(const QPoint &atopLeft, const QSize &asize)
+Q_DECL_CONSTEXPR inline QRect::QRect(const QPoint &atopLeft, const QSize &asize) Q_DECL_NOTHROW
: x1(atopLeft.x()), y1(atopLeft.y()), x2(atopLeft.x()+asize.width() - 1), y2(atopLeft.y()+asize.height() - 1) {}
-Q_DECL_CONSTEXPR inline bool QRect::isNull() const
+Q_DECL_CONSTEXPR inline bool QRect::isNull() const Q_DECL_NOTHROW
{ return x2 == x1 - 1 && y2 == y1 - 1; }
-Q_DECL_CONSTEXPR inline bool QRect::isEmpty() const
+Q_DECL_CONSTEXPR inline bool QRect::isEmpty() const Q_DECL_NOTHROW
{ return x1 > x2 || y1 > y2; }
-Q_DECL_CONSTEXPR inline bool QRect::isValid() const
+Q_DECL_CONSTEXPR inline bool QRect::isValid() const Q_DECL_NOTHROW
{ return x1 <= x2 && y1 <= y2; }
-Q_DECL_CONSTEXPR inline int QRect::left() const
+Q_DECL_CONSTEXPR inline int QRect::left() const Q_DECL_NOTHROW
{ return x1; }
-Q_DECL_CONSTEXPR inline int QRect::top() const
+Q_DECL_CONSTEXPR inline int QRect::top() const Q_DECL_NOTHROW
{ return y1; }
-Q_DECL_CONSTEXPR inline int QRect::right() const
+Q_DECL_CONSTEXPR inline int QRect::right() const Q_DECL_NOTHROW
{ return x2; }
-Q_DECL_CONSTEXPR inline int QRect::bottom() const
+Q_DECL_CONSTEXPR inline int QRect::bottom() const Q_DECL_NOTHROW
{ return y2; }
-Q_DECL_CONSTEXPR inline int QRect::x() const
+Q_DECL_CONSTEXPR inline int QRect::x() const Q_DECL_NOTHROW
{ return x1; }
-Q_DECL_CONSTEXPR inline int QRect::y() const
+Q_DECL_CONSTEXPR inline int QRect::y() const Q_DECL_NOTHROW
{ return y1; }
-inline void QRect::setLeft(int pos)
+Q_DECL_RELAXED_CONSTEXPR inline void QRect::setLeft(int pos) Q_DECL_NOTHROW
{ x1 = pos; }
-inline void QRect::setTop(int pos)
+Q_DECL_RELAXED_CONSTEXPR inline void QRect::setTop(int pos) Q_DECL_NOTHROW
{ y1 = pos; }
-inline void QRect::setRight(int pos)
+Q_DECL_RELAXED_CONSTEXPR inline void QRect::setRight(int pos) Q_DECL_NOTHROW
{ x2 = pos; }
-inline void QRect::setBottom(int pos)
+Q_DECL_RELAXED_CONSTEXPR inline void QRect::setBottom(int pos) Q_DECL_NOTHROW
{ y2 = pos; }
-inline void QRect::setTopLeft(const QPoint &p)
+Q_DECL_RELAXED_CONSTEXPR inline void QRect::setTopLeft(const QPoint &p) Q_DECL_NOTHROW
{ x1 = p.x(); y1 = p.y(); }
-inline void QRect::setBottomRight(const QPoint &p)
+Q_DECL_RELAXED_CONSTEXPR inline void QRect::setBottomRight(const QPoint &p) Q_DECL_NOTHROW
{ x2 = p.x(); y2 = p.y(); }
-inline void QRect::setTopRight(const QPoint &p)
+Q_DECL_RELAXED_CONSTEXPR inline void QRect::setTopRight(const QPoint &p) Q_DECL_NOTHROW
{ x2 = p.x(); y1 = p.y(); }
-inline void QRect::setBottomLeft(const QPoint &p)
+Q_DECL_RELAXED_CONSTEXPR inline void QRect::setBottomLeft(const QPoint &p) Q_DECL_NOTHROW
{ x1 = p.x(); y2 = p.y(); }
-inline void QRect::setX(int ax)
+Q_DECL_RELAXED_CONSTEXPR inline void QRect::setX(int ax) Q_DECL_NOTHROW
{ x1 = ax; }
-inline void QRect::setY(int ay)
+Q_DECL_RELAXED_CONSTEXPR inline void QRect::setY(int ay) Q_DECL_NOTHROW
{ y1 = ay; }
-Q_DECL_CONSTEXPR inline QPoint QRect::topLeft() const
+Q_DECL_CONSTEXPR inline QPoint QRect::topLeft() const Q_DECL_NOTHROW
{ return QPoint(x1, y1); }
-Q_DECL_CONSTEXPR inline QPoint QRect::bottomRight() const
+Q_DECL_CONSTEXPR inline QPoint QRect::bottomRight() const Q_DECL_NOTHROW
{ return QPoint(x2, y2); }
-Q_DECL_CONSTEXPR inline QPoint QRect::topRight() const
+Q_DECL_CONSTEXPR inline QPoint QRect::topRight() const Q_DECL_NOTHROW
{ return QPoint(x2, y1); }
-Q_DECL_CONSTEXPR inline QPoint QRect::bottomLeft() const
+Q_DECL_CONSTEXPR inline QPoint QRect::bottomLeft() const Q_DECL_NOTHROW
{ return QPoint(x1, y2); }
-Q_DECL_CONSTEXPR inline QPoint QRect::center() const
+Q_DECL_CONSTEXPR inline QPoint QRect::center() const Q_DECL_NOTHROW
{ return QPoint((x1+x2)/2, (y1+y2)/2); }
-Q_DECL_CONSTEXPR inline int QRect::width() const
+Q_DECL_CONSTEXPR inline int QRect::width() const Q_DECL_NOTHROW
{ return x2 - x1 + 1; }
-Q_DECL_CONSTEXPR inline int QRect::height() const
+Q_DECL_CONSTEXPR inline int QRect::height() const Q_DECL_NOTHROW
{ return y2 - y1 + 1; }
-Q_DECL_CONSTEXPR inline QSize QRect::size() const
+Q_DECL_CONSTEXPR inline QSize QRect::size() const Q_DECL_NOTHROW
{ return QSize(width(), height()); }
-inline void QRect::translate(int dx, int dy)
+Q_DECL_RELAXED_CONSTEXPR inline void QRect::translate(int dx, int dy) Q_DECL_NOTHROW
{
x1 += dx;
y1 += dy;
@@ -264,7 +264,7 @@ inline void QRect::translate(int dx, int dy)
y2 += dy;
}
-inline void QRect::translate(const QPoint &p)
+Q_DECL_RELAXED_CONSTEXPR inline void QRect::translate(const QPoint &p) Q_DECL_NOTHROW
{
x1 += p.x();
y1 += p.y();
@@ -272,13 +272,13 @@ inline void QRect::translate(const QPoint &p)
y2 += p.y();
}
-Q_DECL_CONSTEXPR inline QRect QRect::translated(int dx, int dy) const
+Q_DECL_CONSTEXPR inline QRect QRect::translated(int dx, int dy) const Q_DECL_NOTHROW
{ return QRect(QPoint(x1 + dx, y1 + dy), QPoint(x2 + dx, y2 + dy)); }
-Q_DECL_CONSTEXPR inline QRect QRect::translated(const QPoint &p) const
+Q_DECL_CONSTEXPR inline QRect QRect::translated(const QPoint &p) const Q_DECL_NOTHROW
{ return QRect(QPoint(x1 + p.x(), y1 + p.y()), QPoint(x2 + p.x(), y2 + p.y())); }
-inline void QRect::moveTo(int ax, int ay)
+Q_DECL_RELAXED_CONSTEXPR inline void QRect::moveTo(int ax, int ay) Q_DECL_NOTHROW
{
x2 += ax - x1;
y2 += ay - y1;
@@ -286,7 +286,7 @@ inline void QRect::moveTo(int ax, int ay)
y1 = ay;
}
-inline void QRect::moveTo(const QPoint &p)
+Q_DECL_RELAXED_CONSTEXPR inline void QRect::moveTo(const QPoint &p) Q_DECL_NOTHROW
{
x2 += p.x() - x1;
y2 += p.y() - y1;
@@ -294,49 +294,49 @@ inline void QRect::moveTo(const QPoint &p)
y1 = p.y();
}
-inline void QRect::moveLeft(int pos)
+Q_DECL_RELAXED_CONSTEXPR inline void QRect::moveLeft(int pos) Q_DECL_NOTHROW
{ x2 += (pos - x1); x1 = pos; }
-inline void QRect::moveTop(int pos)
+Q_DECL_RELAXED_CONSTEXPR inline void QRect::moveTop(int pos) Q_DECL_NOTHROW
{ y2 += (pos - y1); y1 = pos; }
-inline void QRect::moveRight(int pos)
+Q_DECL_RELAXED_CONSTEXPR inline void QRect::moveRight(int pos) Q_DECL_NOTHROW
{
x1 += (pos - x2);
x2 = pos;
}
-inline void QRect::moveBottom(int pos)
+Q_DECL_RELAXED_CONSTEXPR inline void QRect::moveBottom(int pos) Q_DECL_NOTHROW
{
y1 += (pos - y2);
y2 = pos;
}
-inline void QRect::moveTopLeft(const QPoint &p)
+Q_DECL_RELAXED_CONSTEXPR inline void QRect::moveTopLeft(const QPoint &p) Q_DECL_NOTHROW
{
moveLeft(p.x());
moveTop(p.y());
}
-inline void QRect::moveBottomRight(const QPoint &p)
+Q_DECL_RELAXED_CONSTEXPR inline void QRect::moveBottomRight(const QPoint &p) Q_DECL_NOTHROW
{
moveRight(p.x());
moveBottom(p.y());
}
-inline void QRect::moveTopRight(const QPoint &p)
+Q_DECL_RELAXED_CONSTEXPR inline void QRect::moveTopRight(const QPoint &p) Q_DECL_NOTHROW
{
moveRight(p.x());
moveTop(p.y());
}
-inline void QRect::moveBottomLeft(const QPoint &p)
+Q_DECL_RELAXED_CONSTEXPR inline void QRect::moveBottomLeft(const QPoint &p) Q_DECL_NOTHROW
{
moveLeft(p.x());
moveBottom(p.y());
}
-inline void QRect::moveCenter(const QPoint &p)
+Q_DECL_RELAXED_CONSTEXPR inline void QRect::moveCenter(const QPoint &p) Q_DECL_NOTHROW
{
int w = x2 - x1;
int h = y2 - y1;
@@ -346,7 +346,7 @@ inline void QRect::moveCenter(const QPoint &p)
y2 = y1 + h;
}
-inline void QRect::getRect(int *ax, int *ay, int *aw, int *ah) const
+Q_DECL_RELAXED_CONSTEXPR inline void QRect::getRect(int *ax, int *ay, int *aw, int *ah) const
{
*ax = x1;
*ay = y1;
@@ -354,7 +354,7 @@ inline void QRect::getRect(int *ax, int *ay, int *aw, int *ah) const
*ah = y2 - y1 + 1;
}
-inline void QRect::setRect(int ax, int ay, int aw, int ah)
+Q_DECL_RELAXED_CONSTEXPR inline void QRect::setRect(int ax, int ay, int aw, int ah) Q_DECL_NOTHROW
{
x1 = ax;
y1 = ay;
@@ -362,7 +362,7 @@ inline void QRect::setRect(int ax, int ay, int aw, int ah)
y2 = (ay + ah - 1);
}
-inline void QRect::getCoords(int *xp1, int *yp1, int *xp2, int *yp2) const
+Q_DECL_RELAXED_CONSTEXPR inline void QRect::getCoords(int *xp1, int *yp1, int *xp2, int *yp2) const
{
*xp1 = x1;
*yp1 = y1;
@@ -370,7 +370,7 @@ inline void QRect::getCoords(int *xp1, int *yp1, int *xp2, int *yp2) const
*yp2 = y2;
}
-inline void QRect::setCoords(int xp1, int yp1, int xp2, int yp2)
+Q_DECL_RELAXED_CONSTEXPR inline void QRect::setCoords(int xp1, int yp1, int xp2, int yp2) Q_DECL_NOTHROW
{
x1 = xp1;
y1 = yp1;
@@ -378,10 +378,10 @@ inline void QRect::setCoords(int xp1, int yp1, int xp2, int yp2)
y2 = yp2;
}
-Q_DECL_CONSTEXPR inline QRect QRect::adjusted(int xp1, int yp1, int xp2, int yp2) const
+Q_DECL_CONSTEXPR inline QRect QRect::adjusted(int xp1, int yp1, int xp2, int yp2) const Q_DECL_NOTHROW
{ return QRect(QPoint(x1 + xp1, y1 + yp1), QPoint(x2 + xp2, y2 + yp2)); }
-inline void QRect::adjust(int dx1, int dy1, int dx2, int dy2)
+Q_DECL_RELAXED_CONSTEXPR inline void QRect::adjust(int dx1, int dy1, int dx2, int dy2) Q_DECL_NOTHROW
{
x1 += dx1;
y1 += dy1;
@@ -389,97 +389,97 @@ inline void QRect::adjust(int dx1, int dy1, int dx2, int dy2)
y2 += dy2;
}
-inline void QRect::setWidth(int w)
+Q_DECL_RELAXED_CONSTEXPR inline void QRect::setWidth(int w) Q_DECL_NOTHROW
{ x2 = (x1 + w - 1); }
-inline void QRect::setHeight(int h)
+Q_DECL_RELAXED_CONSTEXPR inline void QRect::setHeight(int h) Q_DECL_NOTHROW
{ y2 = (y1 + h - 1); }
-inline void QRect::setSize(const QSize &s)
+Q_DECL_RELAXED_CONSTEXPR inline void QRect::setSize(const QSize &s) Q_DECL_NOTHROW
{
x2 = (s.width() + x1 - 1);
y2 = (s.height() + y1 - 1);
}
-inline bool QRect::contains(int ax, int ay, bool aproper) const
+inline bool QRect::contains(int ax, int ay, bool aproper) const Q_DECL_NOTHROW
{
return contains(QPoint(ax, ay), aproper);
}
-inline bool QRect::contains(int ax, int ay) const
+inline bool QRect::contains(int ax, int ay) const Q_DECL_NOTHROW
{
return contains(QPoint(ax, ay), false);
}
-inline QRect& QRect::operator|=(const QRect &r)
+inline QRect& QRect::operator|=(const QRect &r) Q_DECL_NOTHROW
{
*this = *this | r;
return *this;
}
-inline QRect& QRect::operator&=(const QRect &r)
+inline QRect& QRect::operator&=(const QRect &r) Q_DECL_NOTHROW
{
*this = *this & r;
return *this;
}
-inline QRect QRect::intersected(const QRect &other) const
+inline QRect QRect::intersected(const QRect &other) const Q_DECL_NOTHROW
{
return *this & other;
}
-inline QRect QRect::united(const QRect &r) const
+inline QRect QRect::united(const QRect &r) const Q_DECL_NOTHROW
{
return *this | r;
}
-Q_DECL_CONSTEXPR inline bool operator==(const QRect &r1, const QRect &r2)
+Q_DECL_CONSTEXPR inline bool operator==(const QRect &r1, const QRect &r2) Q_DECL_NOTHROW
{
return r1.x1==r2.x1 && r1.x2==r2.x2 && r1.y1==r2.y1 && r1.y2==r2.y2;
}
-Q_DECL_CONSTEXPR inline bool operator!=(const QRect &r1, const QRect &r2)
+Q_DECL_CONSTEXPR inline bool operator!=(const QRect &r1, const QRect &r2) Q_DECL_NOTHROW
{
return r1.x1!=r2.x1 || r1.x2!=r2.x2 || r1.y1!=r2.y1 || r1.y2!=r2.y2;
}
-Q_DECL_CONSTEXPR inline QRect operator+(const QRect &rectangle, const QMargins &margins)
+Q_DECL_CONSTEXPR inline QRect operator+(const QRect &rectangle, const QMargins &margins) Q_DECL_NOTHROW
{
return QRect(QPoint(rectangle.left() - margins.left(), rectangle.top() - margins.top()),
QPoint(rectangle.right() + margins.right(), rectangle.bottom() + margins.bottom()));
}
-Q_DECL_CONSTEXPR inline QRect operator+(const QMargins &margins, const QRect &rectangle)
+Q_DECL_CONSTEXPR inline QRect operator+(const QMargins &margins, const QRect &rectangle) Q_DECL_NOTHROW
{
return QRect(QPoint(rectangle.left() - margins.left(), rectangle.top() - margins.top()),
QPoint(rectangle.right() + margins.right(), rectangle.bottom() + margins.bottom()));
}
-Q_DECL_CONSTEXPR inline QRect operator-(const QRect &lhs, const QMargins &rhs)
+Q_DECL_CONSTEXPR inline QRect operator-(const QRect &lhs, const QMargins &rhs) Q_DECL_NOTHROW
{
return QRect(QPoint(lhs.left() + rhs.left(), lhs.top() + rhs.top()),
QPoint(lhs.right() - rhs.right(), lhs.bottom() - rhs.bottom()));
}
-Q_DECL_CONSTEXPR inline QRect QRect::marginsAdded(const QMargins &margins) const
+Q_DECL_CONSTEXPR inline QRect QRect::marginsAdded(const QMargins &margins) const Q_DECL_NOTHROW
{
return QRect(QPoint(x1 - margins.left(), y1 - margins.top()),
QPoint(x2 + margins.right(), y2 + margins.bottom()));
}
-Q_DECL_CONSTEXPR inline QRect QRect::marginsRemoved(const QMargins &margins) const
+Q_DECL_CONSTEXPR inline QRect QRect::marginsRemoved(const QMargins &margins) const Q_DECL_NOTHROW
{
return QRect(QPoint(x1 + margins.left(), y1 + margins.top()),
QPoint(x2 - margins.right(), y2 - margins.bottom()));
}
-inline QRect &QRect::operator+=(const QMargins &margins)
+Q_DECL_RELAXED_CONSTEXPR inline QRect &QRect::operator+=(const QMargins &margins) Q_DECL_NOTHROW
{
*this = marginsAdded(margins);
return *this;
}
-inline QRect &QRect::operator-=(const QMargins &margins)
+Q_DECL_RELAXED_CONSTEXPR inline QRect &QRect::operator-=(const QMargins &margins) Q_DECL_NOTHROW
{
*this = marginsRemoved(margins);
return *this;
@@ -493,104 +493,104 @@ Q_CORE_EXPORT QDebug operator<<(QDebug, const QRect &);
class Q_CORE_EXPORT QRectF
{
public:
- Q_DECL_CONSTEXPR QRectF() : xp(0.), yp(0.), w(0.), h(0.) {}
- Q_DECL_CONSTEXPR QRectF(const QPointF &topleft, const QSizeF &size);
- Q_DECL_CONSTEXPR QRectF(const QPointF &topleft, const QPointF &bottomRight);
- Q_DECL_CONSTEXPR QRectF(qreal left, qreal top, qreal width, qreal height);
- Q_DECL_CONSTEXPR QRectF(const QRect &rect);
-
- Q_DECL_CONSTEXPR inline bool isNull() const;
- Q_DECL_CONSTEXPR inline bool isEmpty() const;
- Q_DECL_CONSTEXPR inline bool isValid() const;
- QRectF normalized() const Q_REQUIRED_RESULT;
-
- Q_DECL_CONSTEXPR inline qreal left() const { return xp; }
- Q_DECL_CONSTEXPR inline qreal top() const { return yp; }
- Q_DECL_CONSTEXPR inline qreal right() const { return xp + w; }
- Q_DECL_CONSTEXPR inline qreal bottom() const { return yp + h; }
-
- Q_DECL_CONSTEXPR inline qreal x() const;
- Q_DECL_CONSTEXPR inline qreal y() const;
- inline void setLeft(qreal pos);
- inline void setTop(qreal pos);
- inline void setRight(qreal pos);
- inline void setBottom(qreal pos);
- inline void setX(qreal pos) { setLeft(pos); }
- inline void setY(qreal pos) { setTop(pos); }
-
- Q_DECL_CONSTEXPR inline QPointF topLeft() const { return QPointF(xp, yp); }
- Q_DECL_CONSTEXPR inline QPointF bottomRight() const { return QPointF(xp+w, yp+h); }
- Q_DECL_CONSTEXPR inline QPointF topRight() const { return QPointF(xp+w, yp); }
- Q_DECL_CONSTEXPR inline QPointF bottomLeft() const { return QPointF(xp, yp+h); }
- Q_DECL_CONSTEXPR inline QPointF center() const;
-
- inline void setTopLeft(const QPointF &p);
- inline void setBottomRight(const QPointF &p);
- inline void setTopRight(const QPointF &p);
- inline void setBottomLeft(const QPointF &p);
-
- inline void moveLeft(qreal pos);
- inline void moveTop(qreal pos);
- inline void moveRight(qreal pos);
- inline void moveBottom(qreal pos);
- inline void moveTopLeft(const QPointF &p);
- inline void moveBottomRight(const QPointF &p);
- inline void moveTopRight(const QPointF &p);
- inline void moveBottomLeft(const QPointF &p);
- inline void moveCenter(const QPointF &p);
-
- inline void translate(qreal dx, qreal dy);
- inline void translate(const QPointF &p);
-
- Q_DECL_CONSTEXPR inline QRectF translated(qreal dx, qreal dy) const Q_REQUIRED_RESULT;
- Q_DECL_CONSTEXPR inline QRectF translated(const QPointF &p) const Q_REQUIRED_RESULT;
-
- inline void moveTo(qreal x, qreal y);
- inline void moveTo(const QPointF &p);
-
- inline void setRect(qreal x, qreal y, qreal w, qreal h);
- inline void getRect(qreal *x, qreal *y, qreal *w, qreal *h) const;
-
- inline void setCoords(qreal x1, qreal y1, qreal x2, qreal y2);
- inline void getCoords(qreal *x1, qreal *y1, qreal *x2, qreal *y2) const;
-
- inline void adjust(qreal x1, qreal y1, qreal x2, qreal y2);
- Q_DECL_CONSTEXPR inline QRectF adjusted(qreal x1, qreal y1, qreal x2, qreal y2) const Q_REQUIRED_RESULT;
-
- Q_DECL_CONSTEXPR inline QSizeF size() const;
- Q_DECL_CONSTEXPR inline qreal width() const;
- Q_DECL_CONSTEXPR inline qreal height() const;
- inline void setWidth(qreal w);
- inline void setHeight(qreal h);
- inline void setSize(const QSizeF &s);
-
- QRectF operator|(const QRectF &r) const;
- QRectF operator&(const QRectF &r) const;
- inline QRectF& operator|=(const QRectF &r);
- inline QRectF& operator&=(const QRectF &r);
-
- bool contains(const QRectF &r) const;
- bool contains(const QPointF &p) const;
- inline bool contains(qreal x, qreal y) const;
- inline QRectF united(const QRectF &other) const Q_REQUIRED_RESULT;
- inline QRectF intersected(const QRectF &other) const Q_REQUIRED_RESULT;
- bool intersects(const QRectF &r) const;
-
- Q_DECL_CONSTEXPR inline QRectF marginsAdded(const QMarginsF &margins) const;
- Q_DECL_CONSTEXPR inline QRectF marginsRemoved(const QMarginsF &margins) const;
- inline QRectF &operator+=(const QMarginsF &margins);
- inline QRectF &operator-=(const QMarginsF &margins);
+ Q_DECL_CONSTEXPR QRectF() Q_DECL_NOTHROW : xp(0.), yp(0.), w(0.), h(0.) {}
+ Q_DECL_CONSTEXPR QRectF(const QPointF &topleft, const QSizeF &size) Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR QRectF(const QPointF &topleft, const QPointF &bottomRight) Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR QRectF(qreal left, qreal top, qreal width, qreal height) Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR QRectF(const QRect &rect) Q_DECL_NOTHROW;
+
+ Q_DECL_CONSTEXPR inline bool isNull() const Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR inline bool isEmpty() const Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR inline bool isValid() const Q_DECL_NOTHROW;
+ QRectF normalized() const Q_DECL_NOTHROW Q_REQUIRED_RESULT;
+
+ Q_DECL_CONSTEXPR inline qreal left() const Q_DECL_NOTHROW { return xp; }
+ Q_DECL_CONSTEXPR inline qreal top() const Q_DECL_NOTHROW { return yp; }
+ Q_DECL_CONSTEXPR inline qreal right() const Q_DECL_NOTHROW { return xp + w; }
+ Q_DECL_CONSTEXPR inline qreal bottom() const Q_DECL_NOTHROW { return yp + h; }
+
+ Q_DECL_CONSTEXPR inline qreal x() const Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR inline qreal y() const Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void setLeft(qreal pos) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void setTop(qreal pos) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void setRight(qreal pos) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void setBottom(qreal pos) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void setX(qreal pos) Q_DECL_NOTHROW { setLeft(pos); }
+ Q_DECL_RELAXED_CONSTEXPR inline void setY(qreal pos) Q_DECL_NOTHROW { setTop(pos); }
+
+ Q_DECL_CONSTEXPR inline QPointF topLeft() const Q_DECL_NOTHROW { return QPointF(xp, yp); }
+ Q_DECL_CONSTEXPR inline QPointF bottomRight() const Q_DECL_NOTHROW { return QPointF(xp+w, yp+h); }
+ Q_DECL_CONSTEXPR inline QPointF topRight() const Q_DECL_NOTHROW { return QPointF(xp+w, yp); }
+ Q_DECL_CONSTEXPR inline QPointF bottomLeft() const Q_DECL_NOTHROW { return QPointF(xp, yp+h); }
+ Q_DECL_CONSTEXPR inline QPointF center() const Q_DECL_NOTHROW;
+
+ Q_DECL_RELAXED_CONSTEXPR inline void setTopLeft(const QPointF &p) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void setBottomRight(const QPointF &p) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void setTopRight(const QPointF &p) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void setBottomLeft(const QPointF &p) Q_DECL_NOTHROW;
+
+ Q_DECL_RELAXED_CONSTEXPR inline void moveLeft(qreal pos) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void moveTop(qreal pos) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void moveRight(qreal pos) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void moveBottom(qreal pos) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void moveTopLeft(const QPointF &p) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void moveBottomRight(const QPointF &p) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void moveTopRight(const QPointF &p) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void moveBottomLeft(const QPointF &p) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void moveCenter(const QPointF &p) Q_DECL_NOTHROW;
+
+ Q_DECL_RELAXED_CONSTEXPR inline void translate(qreal dx, qreal dy) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void translate(const QPointF &p) Q_DECL_NOTHROW;
+
+ Q_DECL_CONSTEXPR inline QRectF translated(qreal dx, qreal dy) const Q_DECL_NOTHROW Q_REQUIRED_RESULT;
+ Q_DECL_CONSTEXPR inline QRectF translated(const QPointF &p) const Q_DECL_NOTHROW Q_REQUIRED_RESULT;
+
+ Q_DECL_RELAXED_CONSTEXPR inline void moveTo(qreal x, qreal y) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void moveTo(const QPointF &p) Q_DECL_NOTHROW;
+
+ Q_DECL_RELAXED_CONSTEXPR inline void setRect(qreal x, qreal y, qreal w, qreal h) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void getRect(qreal *x, qreal *y, qreal *w, qreal *h) const;
+
+ Q_DECL_RELAXED_CONSTEXPR inline void setCoords(qreal x1, qreal y1, qreal x2, qreal y2) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void getCoords(qreal *x1, qreal *y1, qreal *x2, qreal *y2) const;
+
+ Q_DECL_RELAXED_CONSTEXPR inline void adjust(qreal x1, qreal y1, qreal x2, qreal y2) Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR inline QRectF adjusted(qreal x1, qreal y1, qreal x2, qreal y2) const Q_DECL_NOTHROW Q_REQUIRED_RESULT;
+
+ Q_DECL_CONSTEXPR inline QSizeF size() const Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR inline qreal width() const Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR inline qreal height() const Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void setWidth(qreal w) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void setHeight(qreal h) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void setSize(const QSizeF &s) Q_DECL_NOTHROW;
+
+ QRectF operator|(const QRectF &r) const Q_DECL_NOTHROW;
+ QRectF operator&(const QRectF &r) const Q_DECL_NOTHROW;
+ inline QRectF& operator|=(const QRectF &r) Q_DECL_NOTHROW;
+ inline QRectF& operator&=(const QRectF &r) Q_DECL_NOTHROW;
+
+ bool contains(const QRectF &r) const Q_DECL_NOTHROW;
+ bool contains(const QPointF &p) const Q_DECL_NOTHROW;
+ inline bool contains(qreal x, qreal y) const Q_DECL_NOTHROW;
+ inline QRectF united(const QRectF &other) const Q_DECL_NOTHROW Q_REQUIRED_RESULT;
+ inline QRectF intersected(const QRectF &other) const Q_DECL_NOTHROW Q_REQUIRED_RESULT;
+ bool intersects(const QRectF &r) const Q_DECL_NOTHROW;
+
+ Q_DECL_CONSTEXPR inline QRectF marginsAdded(const QMarginsF &margins) const Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR inline QRectF marginsRemoved(const QMarginsF &margins) const Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline QRectF &operator+=(const QMarginsF &margins) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline QRectF &operator-=(const QMarginsF &margins) Q_DECL_NOTHROW;
#if QT_DEPRECATED_SINCE(5, 0)
- QT_DEPRECATED QRectF unite(const QRectF &r) const Q_REQUIRED_RESULT { return united(r); }
- QT_DEPRECATED QRectF intersect(const QRectF &r) const Q_REQUIRED_RESULT { return intersected(r); }
+ QT_DEPRECATED QRectF unite(const QRectF &r) const Q_DECL_NOTHROW Q_REQUIRED_RESULT { return united(r); }
+ QT_DEPRECATED QRectF intersect(const QRectF &r) const Q_DECL_NOTHROW Q_REQUIRED_RESULT { return intersected(r); }
#endif
- friend Q_DECL_CONSTEXPR inline bool operator==(const QRectF &, const QRectF &);
- friend Q_DECL_CONSTEXPR inline bool operator!=(const QRectF &, const QRectF &);
+ friend Q_DECL_CONSTEXPR inline bool operator==(const QRectF &, const QRectF &) Q_DECL_NOTHROW;
+ friend Q_DECL_CONSTEXPR inline bool operator!=(const QRectF &, const QRectF &) Q_DECL_NOTHROW;
- Q_DECL_CONSTEXPR inline QRect toRect() const Q_REQUIRED_RESULT;
- QRect toAlignedRect() const Q_REQUIRED_RESULT;
+ Q_DECL_CONSTEXPR inline QRect toRect() const Q_DECL_NOTHROW Q_REQUIRED_RESULT;
+ QRect toAlignedRect() const Q_DECL_NOTHROW Q_REQUIRED_RESULT;
private:
qreal xp;
@@ -600,8 +600,8 @@ private:
};
Q_DECLARE_TYPEINFO(QRectF, Q_MOVABLE_TYPE);
-Q_DECL_CONSTEXPR inline bool operator==(const QRectF &, const QRectF &);
-Q_DECL_CONSTEXPR inline bool operator!=(const QRectF &, const QRectF &);
+Q_DECL_CONSTEXPR inline bool operator==(const QRectF &, const QRectF &) Q_DECL_NOTHROW;
+Q_DECL_CONSTEXPR inline bool operator!=(const QRectF &, const QRectF &) Q_DECL_NOTHROW;
/*****************************************************************************
@@ -616,119 +616,136 @@ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QRectF &);
QRectF inline member functions
*****************************************************************************/
-Q_DECL_CONSTEXPR inline QRectF::QRectF(qreal aleft, qreal atop, qreal awidth, qreal aheight)
+Q_DECL_CONSTEXPR inline QRectF::QRectF(qreal aleft, qreal atop, qreal awidth, qreal aheight) Q_DECL_NOTHROW
: xp(aleft), yp(atop), w(awidth), h(aheight)
{
}
-Q_DECL_CONSTEXPR inline QRectF::QRectF(const QPointF &atopLeft, const QSizeF &asize)
+Q_DECL_CONSTEXPR inline QRectF::QRectF(const QPointF &atopLeft, const QSizeF &asize) Q_DECL_NOTHROW
: xp(atopLeft.x()), yp(atopLeft.y()), w(asize.width()), h(asize.height())
{
}
-Q_DECL_CONSTEXPR inline QRectF::QRectF(const QPointF &atopLeft, const QPointF &abottomRight)
+Q_DECL_CONSTEXPR inline QRectF::QRectF(const QPointF &atopLeft, const QPointF &abottomRight) Q_DECL_NOTHROW
: xp(atopLeft.x()), yp(atopLeft.y()), w(abottomRight.x() - atopLeft.x()), h(abottomRight.y() - atopLeft.y())
{
}
-Q_DECL_CONSTEXPR inline QRectF::QRectF(const QRect &r)
+Q_DECL_CONSTEXPR inline QRectF::QRectF(const QRect &r) Q_DECL_NOTHROW
: xp(r.x()), yp(r.y()), w(r.width()), h(r.height())
{
}
-Q_DECL_CONSTEXPR inline bool QRectF::isNull() const
+Q_DECL_CONSTEXPR inline bool QRectF::isNull() const Q_DECL_NOTHROW
{ return w == 0. && h == 0.; }
-Q_DECL_CONSTEXPR inline bool QRectF::isEmpty() const
+Q_DECL_CONSTEXPR inline bool QRectF::isEmpty() const Q_DECL_NOTHROW
{ return w <= 0. || h <= 0.; }
-Q_DECL_CONSTEXPR inline bool QRectF::isValid() const
+Q_DECL_CONSTEXPR inline bool QRectF::isValid() const Q_DECL_NOTHROW
{ return w > 0. && h > 0.; }
-Q_DECL_CONSTEXPR inline qreal QRectF::x() const
+Q_DECL_CONSTEXPR inline qreal QRectF::x() const Q_DECL_NOTHROW
{ return xp; }
-Q_DECL_CONSTEXPR inline qreal QRectF::y() const
+Q_DECL_CONSTEXPR inline qreal QRectF::y() const Q_DECL_NOTHROW
{ return yp; }
-inline void QRectF::setLeft(qreal pos) { qreal diff = pos - xp; xp += diff; w -= diff; }
+Q_DECL_RELAXED_CONSTEXPR inline void QRectF::setLeft(qreal pos) Q_DECL_NOTHROW
+{ qreal diff = pos - xp; xp += diff; w -= diff; }
-inline void QRectF::setRight(qreal pos) { w = pos - xp; }
+Q_DECL_RELAXED_CONSTEXPR inline void QRectF::setRight(qreal pos) Q_DECL_NOTHROW
+{ w = pos - xp; }
-inline void QRectF::setTop(qreal pos) { qreal diff = pos - yp; yp += diff; h -= diff; }
+Q_DECL_RELAXED_CONSTEXPR inline void QRectF::setTop(qreal pos) Q_DECL_NOTHROW
+{ qreal diff = pos - yp; yp += diff; h -= diff; }
-inline void QRectF::setBottom(qreal pos) { h = pos - yp; }
+Q_DECL_RELAXED_CONSTEXPR inline void QRectF::setBottom(qreal pos) Q_DECL_NOTHROW
+{ h = pos - yp; }
-inline void QRectF::setTopLeft(const QPointF &p) { setLeft(p.x()); setTop(p.y()); }
+Q_DECL_RELAXED_CONSTEXPR inline void QRectF::setTopLeft(const QPointF &p) Q_DECL_NOTHROW
+{ setLeft(p.x()); setTop(p.y()); }
-inline void QRectF::setTopRight(const QPointF &p) { setRight(p.x()); setTop(p.y()); }
+Q_DECL_RELAXED_CONSTEXPR inline void QRectF::setTopRight(const QPointF &p) Q_DECL_NOTHROW
+{ setRight(p.x()); setTop(p.y()); }
-inline void QRectF::setBottomLeft(const QPointF &p) { setLeft(p.x()); setBottom(p.y()); }
+Q_DECL_RELAXED_CONSTEXPR inline void QRectF::setBottomLeft(const QPointF &p) Q_DECL_NOTHROW
+{ setLeft(p.x()); setBottom(p.y()); }
-inline void QRectF::setBottomRight(const QPointF &p) { setRight(p.x()); setBottom(p.y()); }
+Q_DECL_RELAXED_CONSTEXPR inline void QRectF::setBottomRight(const QPointF &p) Q_DECL_NOTHROW
+{ setRight(p.x()); setBottom(p.y()); }
-Q_DECL_CONSTEXPR inline QPointF QRectF::center() const
+Q_DECL_CONSTEXPR inline QPointF QRectF::center() const Q_DECL_NOTHROW
{ return QPointF(xp + w/2, yp + h/2); }
-inline void QRectF::moveLeft(qreal pos) { xp = pos; }
+Q_DECL_RELAXED_CONSTEXPR inline void QRectF::moveLeft(qreal pos) Q_DECL_NOTHROW
+{ xp = pos; }
-inline void QRectF::moveTop(qreal pos) { yp = pos; }
+Q_DECL_RELAXED_CONSTEXPR inline void QRectF::moveTop(qreal pos) Q_DECL_NOTHROW
+{ yp = pos; }
-inline void QRectF::moveRight(qreal pos) { xp = pos - w; }
+Q_DECL_RELAXED_CONSTEXPR inline void QRectF::moveRight(qreal pos) Q_DECL_NOTHROW
+{ xp = pos - w; }
-inline void QRectF::moveBottom(qreal pos) { yp = pos - h; }
+Q_DECL_RELAXED_CONSTEXPR inline void QRectF::moveBottom(qreal pos) Q_DECL_NOTHROW
+{ yp = pos - h; }
-inline void QRectF::moveTopLeft(const QPointF &p) { moveLeft(p.x()); moveTop(p.y()); }
+Q_DECL_RELAXED_CONSTEXPR inline void QRectF::moveTopLeft(const QPointF &p) Q_DECL_NOTHROW
+{ moveLeft(p.x()); moveTop(p.y()); }
-inline void QRectF::moveTopRight(const QPointF &p) { moveRight(p.x()); moveTop(p.y()); }
+Q_DECL_RELAXED_CONSTEXPR inline void QRectF::moveTopRight(const QPointF &p) Q_DECL_NOTHROW
+{ moveRight(p.x()); moveTop(p.y()); }
-inline void QRectF::moveBottomLeft(const QPointF &p) { moveLeft(p.x()); moveBottom(p.y()); }
+Q_DECL_RELAXED_CONSTEXPR inline void QRectF::moveBottomLeft(const QPointF &p) Q_DECL_NOTHROW
+{ moveLeft(p.x()); moveBottom(p.y()); }
-inline void QRectF::moveBottomRight(const QPointF &p) { moveRight(p.x()); moveBottom(p.y()); }
+Q_DECL_RELAXED_CONSTEXPR inline void QRectF::moveBottomRight(const QPointF &p) Q_DECL_NOTHROW
+{ moveRight(p.x()); moveBottom(p.y()); }
-inline void QRectF::moveCenter(const QPointF &p) { xp = p.x() - w/2; yp = p.y() - h/2; }
+Q_DECL_RELAXED_CONSTEXPR inline void QRectF::moveCenter(const QPointF &p) Q_DECL_NOTHROW
+{ xp = p.x() - w/2; yp = p.y() - h/2; }
-Q_DECL_CONSTEXPR inline qreal QRectF::width() const
+Q_DECL_CONSTEXPR inline qreal QRectF::width() const Q_DECL_NOTHROW
{ return w; }
-Q_DECL_CONSTEXPR inline qreal QRectF::height() const
+Q_DECL_CONSTEXPR inline qreal QRectF::height() const Q_DECL_NOTHROW
{ return h; }
-Q_DECL_CONSTEXPR inline QSizeF QRectF::size() const
+Q_DECL_CONSTEXPR inline QSizeF QRectF::size() const Q_DECL_NOTHROW
{ return QSizeF(w, h); }
-inline void QRectF::translate(qreal dx, qreal dy)
+Q_DECL_RELAXED_CONSTEXPR inline void QRectF::translate(qreal dx, qreal dy) Q_DECL_NOTHROW
{
xp += dx;
yp += dy;
}
-inline void QRectF::translate(const QPointF &p)
+Q_DECL_RELAXED_CONSTEXPR inline void QRectF::translate(const QPointF &p) Q_DECL_NOTHROW
{
xp += p.x();
yp += p.y();
}
-inline void QRectF::moveTo(qreal ax, qreal ay)
+Q_DECL_RELAXED_CONSTEXPR inline void QRectF::moveTo(qreal ax, qreal ay) Q_DECL_NOTHROW
{
xp = ax;
yp = ay;
}
-inline void QRectF::moveTo(const QPointF &p)
+Q_DECL_RELAXED_CONSTEXPR inline void QRectF::moveTo(const QPointF &p) Q_DECL_NOTHROW
{
xp = p.x();
yp = p.y();
}
-Q_DECL_CONSTEXPR inline QRectF QRectF::translated(qreal dx, qreal dy) const
+Q_DECL_CONSTEXPR inline QRectF QRectF::translated(qreal dx, qreal dy) const Q_DECL_NOTHROW
{ return QRectF(xp + dx, yp + dy, w, h); }
-Q_DECL_CONSTEXPR inline QRectF QRectF::translated(const QPointF &p) const
+Q_DECL_CONSTEXPR inline QRectF QRectF::translated(const QPointF &p) const Q_DECL_NOTHROW
{ return QRectF(xp + p.x(), yp + p.y(), w, h); }
-inline void QRectF::getRect(qreal *ax, qreal *ay, qreal *aaw, qreal *aah) const
+Q_DECL_RELAXED_CONSTEXPR inline void QRectF::getRect(qreal *ax, qreal *ay, qreal *aaw, qreal *aah) const
{
*ax = this->xp;
*ay = this->yp;
@@ -736,7 +753,7 @@ inline void QRectF::getRect(qreal *ax, qreal *ay, qreal *aaw, qreal *aah) const
*aah = this->h;
}
-inline void QRectF::setRect(qreal ax, qreal ay, qreal aaw, qreal aah)
+Q_DECL_RELAXED_CONSTEXPR inline void QRectF::setRect(qreal ax, qreal ay, qreal aaw, qreal aah) Q_DECL_NOTHROW
{
this->xp = ax;
this->yp = ay;
@@ -744,7 +761,7 @@ inline void QRectF::setRect(qreal ax, qreal ay, qreal aaw, qreal aah)
this->h = aah;
}
-inline void QRectF::getCoords(qreal *xp1, qreal *yp1, qreal *xp2, qreal *yp2) const
+Q_DECL_RELAXED_CONSTEXPR inline void QRectF::getCoords(qreal *xp1, qreal *yp1, qreal *xp2, qreal *yp2) const
{
*xp1 = xp;
*yp1 = yp;
@@ -752,7 +769,7 @@ inline void QRectF::getCoords(qreal *xp1, qreal *yp1, qreal *xp2, qreal *yp2) co
*yp2 = yp + h;
}
-inline void QRectF::setCoords(qreal xp1, qreal yp1, qreal xp2, qreal yp2)
+Q_DECL_RELAXED_CONSTEXPR inline void QRectF::setCoords(qreal xp1, qreal yp1, qreal xp2, qreal yp2) Q_DECL_NOTHROW
{
xp = xp1;
yp = yp1;
@@ -760,105 +777,105 @@ inline void QRectF::setCoords(qreal xp1, qreal yp1, qreal xp2, qreal yp2)
h = yp2 - yp1;
}
-inline void QRectF::adjust(qreal xp1, qreal yp1, qreal xp2, qreal yp2)
+Q_DECL_RELAXED_CONSTEXPR inline void QRectF::adjust(qreal xp1, qreal yp1, qreal xp2, qreal yp2) Q_DECL_NOTHROW
{ xp += xp1; yp += yp1; w += xp2 - xp1; h += yp2 - yp1; }
-Q_DECL_CONSTEXPR inline QRectF QRectF::adjusted(qreal xp1, qreal yp1, qreal xp2, qreal yp2) const
+Q_DECL_CONSTEXPR inline QRectF QRectF::adjusted(qreal xp1, qreal yp1, qreal xp2, qreal yp2) const Q_DECL_NOTHROW
{ return QRectF(xp + xp1, yp + yp1, w + xp2 - xp1, h + yp2 - yp1); }
-inline void QRectF::setWidth(qreal aw)
+Q_DECL_RELAXED_CONSTEXPR inline void QRectF::setWidth(qreal aw) Q_DECL_NOTHROW
{ this->w = aw; }
-inline void QRectF::setHeight(qreal ah)
+Q_DECL_RELAXED_CONSTEXPR inline void QRectF::setHeight(qreal ah) Q_DECL_NOTHROW
{ this->h = ah; }
-inline void QRectF::setSize(const QSizeF &s)
+Q_DECL_RELAXED_CONSTEXPR inline void QRectF::setSize(const QSizeF &s) Q_DECL_NOTHROW
{
w = s.width();
h = s.height();
}
-inline bool QRectF::contains(qreal ax, qreal ay) const
+inline bool QRectF::contains(qreal ax, qreal ay) const Q_DECL_NOTHROW
{
return contains(QPointF(ax, ay));
}
-inline QRectF& QRectF::operator|=(const QRectF &r)
+inline QRectF& QRectF::operator|=(const QRectF &r) Q_DECL_NOTHROW
{
*this = *this | r;
return *this;
}
-inline QRectF& QRectF::operator&=(const QRectF &r)
+inline QRectF& QRectF::operator&=(const QRectF &r) Q_DECL_NOTHROW
{
*this = *this & r;
return *this;
}
-inline QRectF QRectF::intersected(const QRectF &r) const
+inline QRectF QRectF::intersected(const QRectF &r) const Q_DECL_NOTHROW
{
return *this & r;
}
-inline QRectF QRectF::united(const QRectF &r) const
+inline QRectF QRectF::united(const QRectF &r) const Q_DECL_NOTHROW
{
return *this | r;
}
-Q_DECL_CONSTEXPR inline bool operator==(const QRectF &r1, const QRectF &r2)
+Q_DECL_CONSTEXPR inline bool operator==(const QRectF &r1, const QRectF &r2) Q_DECL_NOTHROW
{
return qFuzzyCompare(r1.xp, r2.xp) && qFuzzyCompare(r1.yp, r2.yp)
&& qFuzzyCompare(r1.w, r2.w) && qFuzzyCompare(r1.h, r2.h);
}
-Q_DECL_CONSTEXPR inline bool operator!=(const QRectF &r1, const QRectF &r2)
+Q_DECL_CONSTEXPR inline bool operator!=(const QRectF &r1, const QRectF &r2) Q_DECL_NOTHROW
{
return !qFuzzyCompare(r1.xp, r2.xp) || !qFuzzyCompare(r1.yp, r2.yp)
|| !qFuzzyCompare(r1.w, r2.w) || !qFuzzyCompare(r1.h, r2.h);
}
-Q_DECL_CONSTEXPR inline QRect QRectF::toRect() const
+Q_DECL_CONSTEXPR inline QRect QRectF::toRect() const Q_DECL_NOTHROW
{
return QRect(qRound(xp), qRound(yp), qRound(w), qRound(h));
}
-Q_DECL_CONSTEXPR inline QRectF operator+(const QRectF &lhs, const QMarginsF &rhs)
+Q_DECL_CONSTEXPR inline QRectF operator+(const QRectF &lhs, const QMarginsF &rhs) Q_DECL_NOTHROW
{
return QRectF(QPointF(lhs.left() - rhs.left(), lhs.top() - rhs.top()),
QSizeF(lhs.width() + rhs.left() + rhs.right(), lhs.height() + rhs.top() + rhs.bottom()));
}
-Q_DECL_CONSTEXPR inline QRectF operator+(const QMarginsF &lhs, const QRectF &rhs)
+Q_DECL_CONSTEXPR inline QRectF operator+(const QMarginsF &lhs, const QRectF &rhs) Q_DECL_NOTHROW
{
return QRectF(QPointF(rhs.left() - lhs.left(), rhs.top() - lhs.top()),
QSizeF(rhs.width() + lhs.left() + lhs.right(), rhs.height() + lhs.top() + lhs.bottom()));
}
-Q_DECL_CONSTEXPR inline QRectF operator-(const QRectF &lhs, const QMarginsF &rhs)
+Q_DECL_CONSTEXPR inline QRectF operator-(const QRectF &lhs, const QMarginsF &rhs) Q_DECL_NOTHROW
{
return QRectF(QPointF(lhs.left() + rhs.left(), lhs.top() + rhs.top()),
QSizeF(lhs.width() - rhs.left() - rhs.right(), lhs.height() - rhs.top() - rhs.bottom()));
}
-Q_DECL_CONSTEXPR inline QRectF QRectF::marginsAdded(const QMarginsF &margins) const
+Q_DECL_CONSTEXPR inline QRectF QRectF::marginsAdded(const QMarginsF &margins) const Q_DECL_NOTHROW
{
return QRectF(QPointF(xp - margins.left(), yp - margins.top()),
QSizeF(w + margins.left() + margins.right(), h + margins.top() + margins.bottom()));
}
-Q_DECL_CONSTEXPR inline QRectF QRectF::marginsRemoved(const QMarginsF &margins) const
+Q_DECL_CONSTEXPR inline QRectF QRectF::marginsRemoved(const QMarginsF &margins) const Q_DECL_NOTHROW
{
return QRectF(QPointF(xp + margins.left(), yp + margins.top()),
QSizeF(w - margins.left() - margins.right(), h - margins.top() - margins.bottom()));
}
-inline QRectF &QRectF::operator+=(const QMarginsF &margins)
+Q_DECL_RELAXED_CONSTEXPR inline QRectF &QRectF::operator+=(const QMarginsF &margins) Q_DECL_NOTHROW
{
*this = marginsAdded(margins);
return *this;
}
-inline QRectF &QRectF::operator-=(const QMarginsF &margins)
+Q_DECL_RELAXED_CONSTEXPR inline QRectF &QRectF::operator-=(const QMarginsF &margins) Q_DECL_NOTHROW
{
*this = marginsRemoved(margins);
return *this;
diff --git a/src/corelib/tools/qregexp.cpp b/src/corelib/tools/qregexp.cpp
index b679377fc0..71d897082b 100644
--- a/src/corelib/tools/qregexp.cpp
+++ b/src/corelib/tools/qregexp.cpp
@@ -45,7 +45,6 @@
#include "qstringlist.h"
#include "qstringmatcher.h"
#include "qvector.h"
-#include "private/qfunctions_p.h"
#include <limits.h>
#include <algorithm>
@@ -877,7 +876,7 @@ struct QRegExpEngineKey
}
};
-Q_STATIC_GLOBAL_OPERATOR bool operator==(const QRegExpEngineKey &key1, const QRegExpEngineKey &key2)
+static bool operator==(const QRegExpEngineKey &key1, const QRegExpEngineKey &key2)
{
return key1.pattern == key2.pattern && key1.patternSyntax == key2.patternSyntax
&& key1.cs == key2.cs;
diff --git a/src/corelib/tools/qregularexpression.cpp b/src/corelib/tools/qregularexpression.cpp
index 33894927fe..228ee5b842 100644
--- a/src/corelib/tools/qregularexpression.cpp
+++ b/src/corelib/tools/qregularexpression.cpp
@@ -835,6 +835,8 @@ struct QRegularExpressionPrivate : QSharedData
};
QRegularExpressionMatchPrivate *doMatch(const QString &subject,
+ int subjectStartPos,
+ int subjectLength,
int offset,
QRegularExpression::MatchType matchType,
QRegularExpression::MatchOptions matchOptions,
@@ -872,6 +874,8 @@ struct QRegularExpressionMatchPrivate : QSharedData
{
QRegularExpressionMatchPrivate(const QRegularExpression &re,
const QString &subject,
+ int subjectStart,
+ int subjectLength,
QRegularExpression::MatchType matchType,
QRegularExpression::MatchOptions matchOptions,
int capturingCount = 0);
@@ -884,6 +888,9 @@ struct QRegularExpressionMatchPrivate : QSharedData
// for each captured substring
QVector<int> capturedOffsets;
+ const int subjectStart;
+ const int subjectLength;
+
const QRegularExpression::MatchType matchType;
const QRegularExpression::MatchOptions matchOptions;
@@ -1219,14 +1226,21 @@ static int pcre16SafeExec(const pcre16 *code, const pcre16_extra *extra,
/*!
\internal
- Performs a match of type \a matchType on the given \a subject string with
- options \a matchOptions and returns the QRegularExpressionMatchPrivate of
- the result. It also advances a match if a previous result is given as \a
+ Performs a match on the substring of the given \a subject string,
+ substring which starts from \a subjectStart and up to
+ (but not including) \a subjectStart + \a subjectLength. The match
+ will be of type \a matchType and using the options \a matchOptions;
+ the matching \a offset is relative the substring,
+ and if negative, it's taken as an offset from the end of the substring.
+
+ It also advances a match if a previous result is given as \a
previous. The \a subject string goes a Unicode validity check if
\a checkSubjectString is CheckSubjectString and the match options don't
include DontCheckSubjectStringMatchOption (PCRE doesn't like illegal
UTF-16 sequences).
+ Returns the QRegularExpressionMatchPrivate of the result.
+
Advancing a match is a tricky algorithm. If the previous match matched a
non-empty string, we just do an ordinary match at the offset position.
@@ -1239,6 +1253,8 @@ static int pcre16SafeExec(const pcre16 *code, const pcre16_extra *extra,
must advance over it.
*/
QRegularExpressionMatchPrivate *QRegularExpressionPrivate::doMatch(const QString &subject,
+ int subjectStart,
+ int subjectLength,
int offset,
QRegularExpression::MatchType matchType,
QRegularExpression::MatchOptions matchOptions,
@@ -1246,21 +1262,22 @@ QRegularExpressionMatchPrivate *QRegularExpressionPrivate::doMatch(const QString
const QRegularExpressionMatchPrivate *previous) const
{
if (offset < 0)
- offset += subject.length();
+ offset += subjectLength;
QRegularExpression re(*const_cast<QRegularExpressionPrivate *>(this));
- if (offset < 0 || offset > subject.length())
- return new QRegularExpressionMatchPrivate(re, subject, matchType, matchOptions);
+ if (offset < 0 || offset > subjectLength)
+ return new QRegularExpressionMatchPrivate(re, subject, subjectStart, subjectLength, matchType, matchOptions);
if (!compiledPattern) {
qWarning("QRegularExpressionPrivate::doMatch(): called on an invalid QRegularExpression object");
- return new QRegularExpressionMatchPrivate(re, subject, matchType, matchOptions);
+ return new QRegularExpressionMatchPrivate(re, subject, subjectStart, subjectLength, matchType, matchOptions);
}
// skip optimizing and doing the actual matching if NoMatch type was requested
if (matchType == QRegularExpression::NoMatch) {
QRegularExpressionMatchPrivate *priv = new QRegularExpressionMatchPrivate(re, subject,
+ subjectStart, subjectLength,
matchType, matchOptions);
priv->isValid = true;
return priv;
@@ -1268,6 +1285,7 @@ QRegularExpressionMatchPrivate *QRegularExpressionPrivate::doMatch(const QString
// capturingCount doesn't include the implicit "0" capturing group
QRegularExpressionMatchPrivate *priv = new QRegularExpressionMatchPrivate(re, subject,
+ subjectStart, subjectLength,
matchType, matchOptions,
capturingCount + 1);
@@ -1307,45 +1325,49 @@ QRegularExpressionMatchPrivate *QRegularExpressionPrivate::doMatch(const QString
int * const captureOffsets = priv->capturedOffsets.data();
const int captureOffsetsCount = priv->capturedOffsets.size();
+ int realOffset = offset + subjectStart;
+ const int realSubjectLength = subjectLength + subjectStart;
+
const unsigned short * const subjectUtf16 = subject.utf16();
- const int subjectLength = subject.length();
int result;
if (!previousMatchWasEmpty) {
result = pcre16SafeExec(compiledPattern, currentStudyData,
- subjectUtf16, subjectLength,
- offset, pcreOptions,
+ subjectUtf16, realSubjectLength,
+ realOffset, pcreOptions,
captureOffsets, captureOffsetsCount);
} else {
result = pcre16SafeExec(compiledPattern, currentStudyData,
- subjectUtf16, subjectLength,
- offset, pcreOptions | PCRE_NOTEMPTY_ATSTART | PCRE_ANCHORED,
+ subjectUtf16, realSubjectLength,
+ realOffset, pcreOptions | PCRE_NOTEMPTY_ATSTART | PCRE_ANCHORED,
captureOffsets, captureOffsetsCount);
if (result == PCRE_ERROR_NOMATCH) {
- ++offset;
+ ++realOffset;
if (usingCrLfNewlines
- && offset < subjectLength
- && subjectUtf16[offset - 1] == QLatin1Char('\r')
- && subjectUtf16[offset] == QLatin1Char('\n')) {
- ++offset;
- } else if (offset < subjectLength
- && QChar::isLowSurrogate(subjectUtf16[offset])) {
- ++offset;
+ && realOffset < realSubjectLength
+ && subjectUtf16[realOffset - 1] == QLatin1Char('\r')
+ && subjectUtf16[realOffset] == QLatin1Char('\n')) {
+ ++realOffset;
+ } else if (realOffset < realSubjectLength
+ && QChar::isLowSurrogate(subjectUtf16[realOffset])) {
+ ++realOffset;
}
result = pcre16SafeExec(compiledPattern, currentStudyData,
- subjectUtf16, subjectLength,
- offset, pcreOptions,
+ subjectUtf16, realSubjectLength,
+ realOffset, pcreOptions,
captureOffsets, captureOffsetsCount);
}
}
#ifdef QREGULAREXPRESSION_DEBUG
qDebug() << "Matching" << pattern << "against" << subject
- << offset << matchType << matchOptions << previousMatchWasEmpty
+ << "starting at" << subjectStart << "len" << subjectLength << "real len" << realSubjectLength
+ << "offset" << offset << "real offset" << realOffset
+ << matchType << matchOptions << previousMatchWasEmpty
<< "result" << result;
#endif
@@ -1383,10 +1405,13 @@ QRegularExpressionMatchPrivate *QRegularExpressionPrivate::doMatch(const QString
*/
QRegularExpressionMatchPrivate::QRegularExpressionMatchPrivate(const QRegularExpression &re,
const QString &subject,
+ int subjectStart,
+ int subjectLength,
QRegularExpression::MatchType matchType,
QRegularExpression::MatchOptions matchOptions,
int capturingCount)
: regularExpression(re), subject(subject),
+ subjectStart(subjectStart), subjectLength(subjectLength),
matchType(matchType), matchOptions(matchOptions),
capturedCount(0),
hasMatch(false), hasPartialMatch(false), isValid(false)
@@ -1412,6 +1437,8 @@ QRegularExpressionMatch QRegularExpressionMatchPrivate::nextMatch() const
// then that subject was already checked at least once (when this object
// was created, or when the object that created this one was created, etc.)
QRegularExpressionMatchPrivate *nextPrivate = regularExpression.d->doMatch(subject,
+ subjectStart,
+ subjectLength,
capturedOffsets.at(1),
matchType,
matchOptions,
@@ -1684,7 +1711,33 @@ QRegularExpressionMatch QRegularExpression::match(const QString &subject,
{
d.data()->compilePattern();
- QRegularExpressionMatchPrivate *priv = d->doMatch(subject, offset, matchType, matchOptions);
+ QRegularExpressionMatchPrivate *priv = d->doMatch(subject, 0, subject.length(), offset, matchType, matchOptions);
+ return QRegularExpressionMatch(*priv);
+}
+
+/*!
+ \since 5.5
+ \overload
+
+ Attempts to match the regular expression against the given \a subjectRef
+ string reference, starting at the position \a offset inside the subject, using a
+ match of type \a matchType and honoring the given \a matchOptions.
+
+ The returned QRegularExpressionMatch object contains the results of the
+ match.
+
+ \sa QRegularExpressionMatch, {normal matching}
+*/
+QRegularExpressionMatch QRegularExpression::match(const QStringRef &subjectRef,
+ int offset,
+ MatchType matchType,
+ MatchOptions matchOptions) const
+{
+ d.data()->compilePattern();
+
+ const QString subject = subjectRef.string() ? *subjectRef.string() : QString();
+
+ QRegularExpressionMatchPrivate *priv = d->doMatch(subject, subjectRef.position(), subjectRef.length(), offset, matchType, matchOptions);
return QRegularExpressionMatch(*priv);
}
@@ -1714,6 +1767,34 @@ QRegularExpressionMatchIterator QRegularExpression::globalMatch(const QString &s
}
/*!
+ \since 5.5
+ \overload
+
+ Attempts to perform a global match of the regular expression against the
+ given \a subjectRef string reference, starting at the position \a offset inside the
+ subject, using a match of type \a matchType and honoring the given \a
+ matchOptions.
+
+ The returned QRegularExpressionMatchIterator is positioned before the
+ first match result (if any).
+
+ \sa QRegularExpressionMatchIterator, {global matching}
+*/
+QRegularExpressionMatchIterator QRegularExpression::globalMatch(const QStringRef &subjectRef,
+ int offset,
+ MatchType matchType,
+ MatchOptions matchOptions) const
+{
+ QRegularExpressionMatchIteratorPrivate *priv =
+ new QRegularExpressionMatchIteratorPrivate(*this,
+ matchType,
+ matchOptions,
+ match(subjectRef, offset, matchType, matchOptions));
+
+ return QRegularExpressionMatchIterator(*priv);
+}
+
+/*!
\since 5.4
Forces an immediate optimization of the pattern, including
@@ -1823,6 +1904,8 @@ QString QRegularExpression::escape(const QString &str)
QRegularExpressionMatch::QRegularExpressionMatch()
: d(new QRegularExpressionMatchPrivate(QRegularExpression(),
QString(),
+ 0,
+ 0,
QRegularExpression::NoMatch,
QRegularExpression::NoMatchOption))
{
diff --git a/src/corelib/tools/qregularexpression.h b/src/corelib/tools/qregularexpression.h
index 66538f22b3..8e19a53142 100644
--- a/src/corelib/tools/qregularexpression.h
+++ b/src/corelib/tools/qregularexpression.h
@@ -77,11 +77,11 @@ public:
QRegularExpression &operator=(const QRegularExpression &re);
#ifdef Q_COMPILER_RVALUE_REFS
- inline QRegularExpression &operator=(QRegularExpression &&re)
+ QRegularExpression &operator=(QRegularExpression &&re) Q_DECL_NOTHROW
{ d.swap(re.d); return *this; }
#endif
- inline void swap(QRegularExpression &re) { d.swap(re.d); }
+ void swap(QRegularExpression &other) Q_DECL_NOTHROW { d.swap(other.d); }
QString pattern() const;
void setPattern(const QString &pattern);
@@ -112,11 +112,21 @@ public:
MatchType matchType = NormalMatch,
MatchOptions matchOptions = NoMatchOption) const;
+ QRegularExpressionMatch match(const QStringRef &subjectRef,
+ int offset = 0,
+ MatchType matchType = NormalMatch,
+ MatchOptions matchOptions = NoMatchOption) const;
+
QRegularExpressionMatchIterator globalMatch(const QString &subject,
int offset = 0,
MatchType matchType = NormalMatch,
MatchOptions matchOptions = NoMatchOption) const;
+ QRegularExpressionMatchIterator globalMatch(const QStringRef &subjectRef,
+ int offset = 0,
+ MatchType matchType = NormalMatch,
+ MatchOptions matchOptions = NoMatchOption) const;
+
void optimize() const;
static QString escape(const QString &str);
@@ -159,10 +169,10 @@ public:
QRegularExpressionMatch &operator=(const QRegularExpressionMatch &match);
#ifdef Q_COMPILER_RVALUE_REFS
- inline QRegularExpressionMatch &operator=(QRegularExpressionMatch &&match)
+ QRegularExpressionMatch &operator=(QRegularExpressionMatch &&match) Q_DECL_NOTHROW
{ d.swap(match.d); return *this; }
#endif
- inline void swap(QRegularExpressionMatch &match) { d.swap(match.d); }
+ void swap(QRegularExpressionMatch &other) Q_DECL_NOTHROW { d.swap(other.d); }
QRegularExpression regularExpression() const;
QRegularExpression::MatchType matchType() const;
@@ -216,10 +226,10 @@ public:
QRegularExpressionMatchIterator(const QRegularExpressionMatchIterator &iterator);
QRegularExpressionMatchIterator &operator=(const QRegularExpressionMatchIterator &iterator);
#ifdef Q_COMPILER_RVALUE_REFS
- inline QRegularExpressionMatchIterator &operator=(QRegularExpressionMatchIterator &&iterator)
+ QRegularExpressionMatchIterator &operator=(QRegularExpressionMatchIterator &&iterator) Q_DECL_NOTHROW
{ d.swap(iterator.d); return *this; }
#endif
- void swap(QRegularExpressionMatchIterator &iterator) { d.swap(iterator.d); }
+ void swap(QRegularExpressionMatchIterator &other) Q_DECL_NOTHROW { d.swap(other.d); }
bool isValid() const;
diff --git a/src/corelib/tools/qringbuffer_p.h b/src/corelib/tools/qringbuffer_p.h
index 2279f1bc2a..610c099733 100644
--- a/src/corelib/tools/qringbuffer_p.h
+++ b/src/corelib/tools/qringbuffer_p.h
@@ -63,7 +63,7 @@ public:
}
inline const char *readPointer() const {
- return buffers.isEmpty() ? 0 : (buffers.first().constData() + head);
+ return bufferSize == 0 ? Q_NULLPTR : (buffers.first().constData() + head);
}
// access the bytes at a specified position
@@ -91,11 +91,20 @@ public:
int blockSize = buffers.first().size() - head;
if (tailBuffer == 0 || blockSize > bytes) {
- bufferSize -= bytes;
- if (bufferSize <= 0)
- clear(); // try to minify/squeeze us
- else
+ // keep a single block around if it does not exceed
+ // the basic block size, to avoid repeated allocations
+ // between uses of the buffer
+ if (bufferSize <= bytes) {
+ if (buffers.first().size() <= basicBlockSize) {
+ bufferSize = 0;
+ head = tail = 0;
+ } else {
+ clear(); // try to minify/squeeze us
+ }
+ } else {
head += bytes;
+ bufferSize -= bytes;
+ }
return;
}
@@ -113,7 +122,7 @@ public:
// if need buffer reallocation
if (tail + bytes > buffers.last().size()) {
- if (tail >= basicBlockSize) {
+ if (tail + bytes > buffers.last().capacity() && tail >= basicBlockSize) {
// shrink this buffer to its current size
buffers.last().resize(tail);
@@ -139,11 +148,20 @@ public:
inline void chop(int bytes) {
while (bytes > 0) {
if (tailBuffer == 0 || tail > bytes) {
- bufferSize -= bytes;
- if (bufferSize <= 0)
- clear(); // try to minify/squeeze us
- else
+ // keep a single block around if it does not exceed
+ // the basic block size, to avoid repeated allocations
+ // between uses of the buffer
+ if (bufferSize <= bytes) {
+ if (buffers.first().size() <= basicBlockSize) {
+ bufferSize = 0;
+ head = tail = 0;
+ } else {
+ clear(); // try to minify/squeeze us
+ }
+ } else {
tail -= bytes;
+ bufferSize -= bytes;
+ }
return;
}
@@ -156,7 +174,7 @@ public:
}
inline bool isEmpty() const {
- return tailBuffer == 0 && tail == 0;
+ return bufferSize == 0;
}
inline int getChar() {
@@ -175,10 +193,14 @@ public:
inline void ungetChar(char c) {
--head;
if (head < 0) {
- buffers.prepend(QByteArray());
+ if (bufferSize != 0) {
+ buffers.prepend(QByteArray());
+ ++tailBuffer;
+ } else {
+ tail = basicBlockSize;
+ }
buffers.first().resize(basicBlockSize);
head = basicBlockSize - 1;
- ++tailBuffer;
}
buffers.first()[head] = c;
++bufferSize;
diff --git a/src/corelib/tools/qset.h b/src/corelib/tools/qset.h
index 662afbf84a..baa412a550 100644
--- a/src/corelib/tools/qset.h
+++ b/src/corelib/tools/qset.h
@@ -237,6 +237,15 @@ private:
}
};
+template <typename T>
+uint qHash(const QSet<T> &key, uint seed = 0)
+Q_DECL_NOEXCEPT_EXPR(noexcept(qHashRangeCommutative(key.begin(), key.end(), seed)))
+{
+ return qHashRangeCommutative(key.begin(), key.end(), seed);
+}
+
+// inline function implementations
+
template <class T>
Q_INLINE_TEMPLATE void QSet<T>::reserve(int asize) { q_hash.reserve(asize); }
diff --git a/src/corelib/tools/qset.qdoc b/src/corelib/tools/qset.qdoc
index ab7d72611e..73599a2a72 100644
--- a/src/corelib/tools/qset.qdoc
+++ b/src/corelib/tools/qset.qdoc
@@ -968,3 +968,14 @@
\sa{Serializing Qt Data Types}{Format of the QDataStream operators}
*/
+
+/*!
+ \fn uint qHash(const QSet<T> &key, uint seed = 0)
+ \relates QHash
+ \since 5.5
+
+ Returns the hash value for the \a key, using \a seed to seed the calculation.
+
+ The hash value is independent of the order of elements in \a key, that is, sets
+ that contain the same elements hash to the same value.
+*/
diff --git a/src/corelib/tools/qshareddata.h b/src/corelib/tools/qshareddata.h
index 53f51b7f2e..183b9ff238 100644
--- a/src/corelib/tools/qshareddata.h
+++ b/src/corelib/tools/qshareddata.h
@@ -79,7 +79,7 @@ public:
inline QSharedDataPointer() { d = 0; }
inline ~QSharedDataPointer() { if (d && !d->ref.deref()) delete d; }
- explicit QSharedDataPointer(T *data);
+ explicit QSharedDataPointer(T *data) Q_DECL_NOTHROW;
inline QSharedDataPointer(const QSharedDataPointer<T> &o) : d(o.d) { if (d) d->ref.ref(); }
inline QSharedDataPointer<T> & operator=(const QSharedDataPointer<T> &o) {
if (o.d != d) {
@@ -104,14 +104,14 @@ public:
return *this;
}
#ifdef Q_COMPILER_RVALUE_REFS
- QSharedDataPointer(QSharedDataPointer &&o) : d(o.d) { o.d = 0; }
- inline QSharedDataPointer<T> &operator=(QSharedDataPointer<T> &&other)
+ QSharedDataPointer(QSharedDataPointer &&o) Q_DECL_NOTHROW : d(o.d) { o.d = Q_NULLPTR; }
+ inline QSharedDataPointer<T> &operator=(QSharedDataPointer<T> &&other) Q_DECL_NOTHROW
{ qSwap(d, other.d); return *this; }
#endif
inline bool operator!() const { return !d; }
- inline void swap(QSharedDataPointer &other)
+ inline void swap(QSharedDataPointer &other) Q_DECL_NOTHROW
{ qSwap(d, other.d); }
protected:
@@ -155,7 +155,7 @@ public:
inline QExplicitlySharedDataPointer() { d = 0; }
inline ~QExplicitlySharedDataPointer() { if (d && !d->ref.deref()) delete d; }
- explicit QExplicitlySharedDataPointer(T *data);
+ explicit QExplicitlySharedDataPointer(T *data) Q_DECL_NOTHROW;
inline QExplicitlySharedDataPointer(const QExplicitlySharedDataPointer<T> &o) : d(o.d) { if (d) d->ref.ref(); }
template<class X>
@@ -193,14 +193,14 @@ public:
return *this;
}
#ifdef Q_COMPILER_RVALUE_REFS
- inline QExplicitlySharedDataPointer(QExplicitlySharedDataPointer &&o) : d(o.d) { o.d = 0; }
- inline QExplicitlySharedDataPointer<T> &operator=(QExplicitlySharedDataPointer<T> &&other)
+ inline QExplicitlySharedDataPointer(QExplicitlySharedDataPointer &&o) Q_DECL_NOTHROW : d(o.d) { o.d = Q_NULLPTR; }
+ inline QExplicitlySharedDataPointer<T> &operator=(QExplicitlySharedDataPointer<T> &&other) Q_DECL_NOTHROW
{ qSwap(d, other.d); return *this; }
#endif
inline bool operator!() const { return !d; }
- inline void swap(QExplicitlySharedDataPointer &other)
+ inline void swap(QExplicitlySharedDataPointer &other) Q_DECL_NOTHROW
{ qSwap(d, other.d); }
protected:
@@ -213,7 +213,8 @@ private:
};
template <class T>
-Q_INLINE_TEMPLATE QSharedDataPointer<T>::QSharedDataPointer(T *adata) : d(adata)
+Q_INLINE_TEMPLATE QSharedDataPointer<T>::QSharedDataPointer(T *adata) Q_DECL_NOTHROW
+ : d(adata)
{ if (d) d->ref.ref(); }
template <class T>
@@ -249,7 +250,8 @@ Q_OUTOFLINE_TEMPLATE void QExplicitlySharedDataPointer<T>::detach_helper()
}
template <class T>
-Q_INLINE_TEMPLATE QExplicitlySharedDataPointer<T>::QExplicitlySharedDataPointer(T *adata) : d(adata)
+Q_INLINE_TEMPLATE QExplicitlySharedDataPointer<T>::QExplicitlySharedDataPointer(T *adata) Q_DECL_NOTHROW
+ : d(adata)
{ if (d) d->ref.ref(); }
template <class T>
@@ -273,12 +275,12 @@ namespace std {
QT_BEGIN_NAMESPACE
template <class T>
-Q_INLINE_TEMPLATE uint qHash(const QSharedDataPointer<T> &ptr, uint seed = 0)
+Q_INLINE_TEMPLATE uint qHash(const QSharedDataPointer<T> &ptr, uint seed = 0) Q_DECL_NOTHROW
{
return qHash(ptr.data(), seed);
}
template <class T>
-Q_INLINE_TEMPLATE uint qHash(const QExplicitlySharedDataPointer<T> &ptr, uint seed = 0)
+Q_INLINE_TEMPLATE uint qHash(const QExplicitlySharedDataPointer<T> &ptr, uint seed = 0) Q_DECL_NOTHROW
{
return qHash(ptr.data(), seed);
}
diff --git a/src/corelib/tools/qsize.cpp b/src/corelib/tools/qsize.cpp
index 4c124162a1..12673ccd0c 100644
--- a/src/corelib/tools/qsize.cpp
+++ b/src/corelib/tools/qsize.cpp
@@ -156,7 +156,7 @@ QT_BEGIN_NAMESPACE
\sa setWidth(), setHeight(), transposed()
*/
-void QSize::transpose()
+void QSize::transpose() Q_DECL_NOTHROW
{
int tmp = wd;
wd = ht;
@@ -217,7 +217,7 @@ void QSize::transpose()
Return a size scaled to a rectangle with the given size \a s,
according to the specified \a mode.
*/
-QSize QSize::scaled(const QSize &s, Qt::AspectRatioMode mode) const
+QSize QSize::scaled(const QSize &s, Qt::AspectRatioMode mode) const Q_DECL_NOTHROW
{
if (mode == Qt::IgnoreAspectRatio || wd == 0 || ht == 0) {
return s;
@@ -590,7 +590,7 @@ QDebug operator<<(QDebug dbg, const QSize &s)
\sa setWidth(), setHeight(), transposed()
*/
-void QSizeF::transpose()
+void QSizeF::transpose() Q_DECL_NOTHROW
{
qreal tmp = wd;
wd = ht;
@@ -651,7 +651,7 @@ void QSizeF::transpose()
Returns a size scaled to a rectangle with the given size \a s,
according to the specified \a mode.
*/
-QSizeF QSizeF::scaled(const QSizeF &s, Qt::AspectRatioMode mode) const
+QSizeF QSizeF::scaled(const QSizeF &s, Qt::AspectRatioMode mode) const Q_DECL_NOTHROW
{
if (mode == Qt::IgnoreAspectRatio || qIsNull(wd) || qIsNull(ht)) {
return s;
diff --git a/src/corelib/tools/qsize.h b/src/corelib/tools/qsize.h
index 6b5cf2dd7d..037b532f37 100644
--- a/src/corelib/tools/qsize.h
+++ b/src/corelib/tools/qsize.h
@@ -42,42 +42,42 @@ QT_BEGIN_NAMESPACE
class Q_CORE_EXPORT QSize
{
public:
- Q_DECL_CONSTEXPR QSize();
- Q_DECL_CONSTEXPR QSize(int w, int h);
-
- Q_DECL_CONSTEXPR inline bool isNull() const;
- Q_DECL_CONSTEXPR inline bool isEmpty() const;
- Q_DECL_CONSTEXPR inline bool isValid() const;
-
- Q_DECL_CONSTEXPR inline int width() const;
- Q_DECL_CONSTEXPR inline int height() const;
- inline void setWidth(int w);
- inline void setHeight(int h);
- void transpose();
- Q_DECL_CONSTEXPR inline QSize transposed() const;
-
- inline void scale(int w, int h, Qt::AspectRatioMode mode);
- inline void scale(const QSize &s, Qt::AspectRatioMode mode);
- QSize scaled(int w, int h, Qt::AspectRatioMode mode) const;
- QSize scaled(const QSize &s, Qt::AspectRatioMode mode) const;
-
- Q_DECL_CONSTEXPR inline QSize expandedTo(const QSize &) const;
- Q_DECL_CONSTEXPR inline QSize boundedTo(const QSize &) const;
-
- inline int &rwidth();
- inline int &rheight();
-
- inline QSize &operator+=(const QSize &);
- inline QSize &operator-=(const QSize &);
- inline QSize &operator*=(qreal c);
+ Q_DECL_CONSTEXPR QSize() Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR QSize(int w, int h) Q_DECL_NOTHROW;
+
+ Q_DECL_CONSTEXPR inline bool isNull() const Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR inline bool isEmpty() const Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR inline bool isValid() const Q_DECL_NOTHROW;
+
+ Q_DECL_CONSTEXPR inline int width() const Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR inline int height() const Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void setWidth(int w) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void setHeight(int h) Q_DECL_NOTHROW;
+ void transpose() Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR inline QSize transposed() const Q_DECL_NOTHROW;
+
+ inline void scale(int w, int h, Qt::AspectRatioMode mode) Q_DECL_NOTHROW;
+ inline void scale(const QSize &s, Qt::AspectRatioMode mode) Q_DECL_NOTHROW;
+ QSize scaled(int w, int h, Qt::AspectRatioMode mode) const Q_DECL_NOTHROW;
+ QSize scaled(const QSize &s, Qt::AspectRatioMode mode) const Q_DECL_NOTHROW;
+
+ Q_DECL_CONSTEXPR inline QSize expandedTo(const QSize &) const Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR inline QSize boundedTo(const QSize &) const Q_DECL_NOTHROW;
+
+ Q_DECL_RELAXED_CONSTEXPR inline int &rwidth() Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline int &rheight() Q_DECL_NOTHROW;
+
+ Q_DECL_RELAXED_CONSTEXPR inline QSize &operator+=(const QSize &) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline QSize &operator-=(const QSize &) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline QSize &operator*=(qreal c) Q_DECL_NOTHROW;
inline QSize &operator/=(qreal c);
- friend inline Q_DECL_CONSTEXPR bool operator==(const QSize &, const QSize &);
- friend inline Q_DECL_CONSTEXPR bool operator!=(const QSize &, const QSize &);
- friend inline Q_DECL_CONSTEXPR const QSize operator+(const QSize &, const QSize &);
- friend inline Q_DECL_CONSTEXPR const QSize operator-(const QSize &, const QSize &);
- friend inline Q_DECL_CONSTEXPR const QSize operator*(const QSize &, qreal);
- friend inline Q_DECL_CONSTEXPR const QSize operator*(qreal, const QSize &);
+ friend inline Q_DECL_CONSTEXPR bool operator==(const QSize &, const QSize &) Q_DECL_NOTHROW;
+ friend inline Q_DECL_CONSTEXPR bool operator!=(const QSize &, const QSize &) Q_DECL_NOTHROW;
+ friend inline Q_DECL_CONSTEXPR const QSize operator+(const QSize &, const QSize &) Q_DECL_NOTHROW;
+ friend inline Q_DECL_CONSTEXPR const QSize operator-(const QSize &, const QSize &) Q_DECL_NOTHROW;
+ friend inline Q_DECL_CONSTEXPR const QSize operator*(const QSize &, qreal) Q_DECL_NOTHROW;
+ friend inline Q_DECL_CONSTEXPR const QSize operator*(qreal, const QSize &) Q_DECL_NOTHROW;
friend inline const QSize operator/(const QSize &, qreal);
private:
@@ -100,74 +100,74 @@ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QSize &);
QSize inline functions
*****************************************************************************/
-Q_DECL_CONSTEXPR inline QSize::QSize() : wd(-1), ht(-1) {}
+Q_DECL_CONSTEXPR inline QSize::QSize() Q_DECL_NOTHROW : wd(-1), ht(-1) {}
-Q_DECL_CONSTEXPR inline QSize::QSize(int w, int h) : wd(w), ht(h) {}
+Q_DECL_CONSTEXPR inline QSize::QSize(int w, int h) Q_DECL_NOTHROW : wd(w), ht(h) {}
-Q_DECL_CONSTEXPR inline bool QSize::isNull() const
+Q_DECL_CONSTEXPR inline bool QSize::isNull() const Q_DECL_NOTHROW
{ return wd==0 && ht==0; }
-Q_DECL_CONSTEXPR inline bool QSize::isEmpty() const
+Q_DECL_CONSTEXPR inline bool QSize::isEmpty() const Q_DECL_NOTHROW
{ return wd<1 || ht<1; }
-Q_DECL_CONSTEXPR inline bool QSize::isValid() const
+Q_DECL_CONSTEXPR inline bool QSize::isValid() const Q_DECL_NOTHROW
{ return wd>=0 && ht>=0; }
-Q_DECL_CONSTEXPR inline int QSize::width() const
+Q_DECL_CONSTEXPR inline int QSize::width() const Q_DECL_NOTHROW
{ return wd; }
-Q_DECL_CONSTEXPR inline int QSize::height() const
+Q_DECL_CONSTEXPR inline int QSize::height() const Q_DECL_NOTHROW
{ return ht; }
-inline void QSize::setWidth(int w)
+Q_DECL_RELAXED_CONSTEXPR inline void QSize::setWidth(int w) Q_DECL_NOTHROW
{ wd = w; }
-inline void QSize::setHeight(int h)
+Q_DECL_RELAXED_CONSTEXPR inline void QSize::setHeight(int h) Q_DECL_NOTHROW
{ ht = h; }
-Q_DECL_CONSTEXPR inline QSize QSize::transposed() const
+Q_DECL_CONSTEXPR inline QSize QSize::transposed() const Q_DECL_NOTHROW
{ return QSize(ht, wd); }
-inline void QSize::scale(int w, int h, Qt::AspectRatioMode mode)
+inline void QSize::scale(int w, int h, Qt::AspectRatioMode mode) Q_DECL_NOTHROW
{ scale(QSize(w, h), mode); }
-inline void QSize::scale(const QSize &s, Qt::AspectRatioMode mode)
+inline void QSize::scale(const QSize &s, Qt::AspectRatioMode mode) Q_DECL_NOTHROW
{ *this = scaled(s, mode); }
-inline QSize QSize::scaled(int w, int h, Qt::AspectRatioMode mode) const
+inline QSize QSize::scaled(int w, int h, Qt::AspectRatioMode mode) const Q_DECL_NOTHROW
{ return scaled(QSize(w, h), mode); }
-inline int &QSize::rwidth()
+Q_DECL_RELAXED_CONSTEXPR inline int &QSize::rwidth() Q_DECL_NOTHROW
{ return wd; }
-inline int &QSize::rheight()
+Q_DECL_RELAXED_CONSTEXPR inline int &QSize::rheight() Q_DECL_NOTHROW
{ return ht; }
-inline QSize &QSize::operator+=(const QSize &s)
+Q_DECL_RELAXED_CONSTEXPR inline QSize &QSize::operator+=(const QSize &s) Q_DECL_NOTHROW
{ wd+=s.wd; ht+=s.ht; return *this; }
-inline QSize &QSize::operator-=(const QSize &s)
+Q_DECL_RELAXED_CONSTEXPR inline QSize &QSize::operator-=(const QSize &s) Q_DECL_NOTHROW
{ wd-=s.wd; ht-=s.ht; return *this; }
-inline QSize &QSize::operator*=(qreal c)
+Q_DECL_RELAXED_CONSTEXPR inline QSize &QSize::operator*=(qreal c) Q_DECL_NOTHROW
{ wd = qRound(wd*c); ht = qRound(ht*c); return *this; }
-Q_DECL_CONSTEXPR inline bool operator==(const QSize &s1, const QSize &s2)
+Q_DECL_CONSTEXPR inline bool operator==(const QSize &s1, const QSize &s2) Q_DECL_NOTHROW
{ return s1.wd == s2.wd && s1.ht == s2.ht; }
-Q_DECL_CONSTEXPR inline bool operator!=(const QSize &s1, const QSize &s2)
+Q_DECL_CONSTEXPR inline bool operator!=(const QSize &s1, const QSize &s2) Q_DECL_NOTHROW
{ return s1.wd != s2.wd || s1.ht != s2.ht; }
-Q_DECL_CONSTEXPR inline const QSize operator+(const QSize & s1, const QSize & s2)
+Q_DECL_CONSTEXPR inline const QSize operator+(const QSize & s1, const QSize & s2) Q_DECL_NOTHROW
{ return QSize(s1.wd+s2.wd, s1.ht+s2.ht); }
-Q_DECL_CONSTEXPR inline const QSize operator-(const QSize &s1, const QSize &s2)
+Q_DECL_CONSTEXPR inline const QSize operator-(const QSize &s1, const QSize &s2) Q_DECL_NOTHROW
{ return QSize(s1.wd-s2.wd, s1.ht-s2.ht); }
-Q_DECL_CONSTEXPR inline const QSize operator*(const QSize &s, qreal c)
+Q_DECL_CONSTEXPR inline const QSize operator*(const QSize &s, qreal c) Q_DECL_NOTHROW
{ return QSize(qRound(s.wd*c), qRound(s.ht*c)); }
-Q_DECL_CONSTEXPR inline const QSize operator*(qreal c, const QSize &s)
+Q_DECL_CONSTEXPR inline const QSize operator*(qreal c, const QSize &s) Q_DECL_NOTHROW
{ return QSize(qRound(s.wd*c), qRound(s.ht*c)); }
inline QSize &QSize::operator/=(qreal c)
@@ -183,12 +183,12 @@ inline const QSize operator/(const QSize &s, qreal c)
return QSize(qRound(s.wd/c), qRound(s.ht/c));
}
-Q_DECL_CONSTEXPR inline QSize QSize::expandedTo(const QSize & otherSize) const
+Q_DECL_CONSTEXPR inline QSize QSize::expandedTo(const QSize & otherSize) const Q_DECL_NOTHROW
{
return QSize(qMax(wd,otherSize.wd), qMax(ht,otherSize.ht));
}
-Q_DECL_CONSTEXPR inline QSize QSize::boundedTo(const QSize & otherSize) const
+Q_DECL_CONSTEXPR inline QSize QSize::boundedTo(const QSize & otherSize) const Q_DECL_NOTHROW
{
return QSize(qMin(wd,otherSize.wd), qMin(ht,otherSize.ht));
}
@@ -201,46 +201,46 @@ Q_CORE_EXPORT QDebug operator<<(QDebug, const QSize &);
class Q_CORE_EXPORT QSizeF
{
public:
- Q_DECL_CONSTEXPR QSizeF();
- Q_DECL_CONSTEXPR QSizeF(const QSize &sz);
- Q_DECL_CONSTEXPR QSizeF(qreal w, qreal h);
-
- inline bool isNull() const;
- Q_DECL_CONSTEXPR inline bool isEmpty() const;
- Q_DECL_CONSTEXPR inline bool isValid() const;
-
- Q_DECL_CONSTEXPR inline qreal width() const;
- Q_DECL_CONSTEXPR inline qreal height() const;
- inline void setWidth(qreal w);
- inline void setHeight(qreal h);
- void transpose();
- Q_DECL_CONSTEXPR inline QSizeF transposed() const;
-
- inline void scale(qreal w, qreal h, Qt::AspectRatioMode mode);
- inline void scale(const QSizeF &s, Qt::AspectRatioMode mode);
- QSizeF scaled(qreal w, qreal h, Qt::AspectRatioMode mode) const;
- QSizeF scaled(const QSizeF &s, Qt::AspectRatioMode mode) const;
-
- Q_DECL_CONSTEXPR inline QSizeF expandedTo(const QSizeF &) const;
- Q_DECL_CONSTEXPR inline QSizeF boundedTo(const QSizeF &) const;
-
- inline qreal &rwidth();
- inline qreal &rheight();
-
- inline QSizeF &operator+=(const QSizeF &);
- inline QSizeF &operator-=(const QSizeF &);
- inline QSizeF &operator*=(qreal c);
+ Q_DECL_CONSTEXPR QSizeF() Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR QSizeF(const QSize &sz) Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR QSizeF(qreal w, qreal h) Q_DECL_NOTHROW;
+
+ inline bool isNull() const Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR inline bool isEmpty() const Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR inline bool isValid() const Q_DECL_NOTHROW;
+
+ Q_DECL_CONSTEXPR inline qreal width() const Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR inline qreal height() const Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void setWidth(qreal w) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline void setHeight(qreal h) Q_DECL_NOTHROW;
+ void transpose() Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR inline QSizeF transposed() const Q_DECL_NOTHROW;
+
+ inline void scale(qreal w, qreal h, Qt::AspectRatioMode mode) Q_DECL_NOTHROW;
+ inline void scale(const QSizeF &s, Qt::AspectRatioMode mode) Q_DECL_NOTHROW;
+ QSizeF scaled(qreal w, qreal h, Qt::AspectRatioMode mode) const Q_DECL_NOTHROW;
+ QSizeF scaled(const QSizeF &s, Qt::AspectRatioMode mode) const Q_DECL_NOTHROW;
+
+ Q_DECL_CONSTEXPR inline QSizeF expandedTo(const QSizeF &) const Q_DECL_NOTHROW;
+ Q_DECL_CONSTEXPR inline QSizeF boundedTo(const QSizeF &) const Q_DECL_NOTHROW;
+
+ Q_DECL_RELAXED_CONSTEXPR inline qreal &rwidth() Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline qreal &rheight() Q_DECL_NOTHROW;
+
+ Q_DECL_RELAXED_CONSTEXPR inline QSizeF &operator+=(const QSizeF &) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline QSizeF &operator-=(const QSizeF &) Q_DECL_NOTHROW;
+ Q_DECL_RELAXED_CONSTEXPR inline QSizeF &operator*=(qreal c) Q_DECL_NOTHROW;
inline QSizeF &operator/=(qreal c);
- friend Q_DECL_CONSTEXPR inline bool operator==(const QSizeF &, const QSizeF &);
- friend Q_DECL_CONSTEXPR inline bool operator!=(const QSizeF &, const QSizeF &);
- friend Q_DECL_CONSTEXPR inline const QSizeF operator+(const QSizeF &, const QSizeF &);
- friend Q_DECL_CONSTEXPR inline const QSizeF operator-(const QSizeF &, const QSizeF &);
- friend Q_DECL_CONSTEXPR inline const QSizeF operator*(const QSizeF &, qreal);
- friend Q_DECL_CONSTEXPR inline const QSizeF operator*(qreal, const QSizeF &);
+ friend Q_DECL_CONSTEXPR inline bool operator==(const QSizeF &, const QSizeF &) Q_DECL_NOTHROW;
+ friend Q_DECL_CONSTEXPR inline bool operator!=(const QSizeF &, const QSizeF &) Q_DECL_NOTHROW;
+ friend Q_DECL_CONSTEXPR inline const QSizeF operator+(const QSizeF &, const QSizeF &) Q_DECL_NOTHROW;
+ friend Q_DECL_CONSTEXPR inline const QSizeF operator-(const QSizeF &, const QSizeF &) Q_DECL_NOTHROW;
+ friend Q_DECL_CONSTEXPR inline const QSizeF operator*(const QSizeF &, qreal) Q_DECL_NOTHROW;
+ friend Q_DECL_CONSTEXPR inline const QSizeF operator*(qreal, const QSizeF &) Q_DECL_NOTHROW;
friend inline const QSizeF operator/(const QSizeF &, qreal);
- Q_DECL_CONSTEXPR inline QSize toSize() const;
+ Q_DECL_CONSTEXPR inline QSize toSize() const Q_DECL_NOTHROW;
private:
qreal wd;
@@ -263,76 +263,76 @@ Q_CORE_EXPORT QDataStream &operator>>(QDataStream &, QSizeF &);
QSizeF inline functions
*****************************************************************************/
-Q_DECL_CONSTEXPR inline QSizeF::QSizeF() : wd(-1.), ht(-1.) {}
+Q_DECL_CONSTEXPR inline QSizeF::QSizeF() Q_DECL_NOTHROW : wd(-1.), ht(-1.) {}
-Q_DECL_CONSTEXPR inline QSizeF::QSizeF(const QSize &sz) : wd(sz.width()), ht(sz.height()) {}
+Q_DECL_CONSTEXPR inline QSizeF::QSizeF(const QSize &sz) Q_DECL_NOTHROW : wd(sz.width()), ht(sz.height()) {}
-Q_DECL_CONSTEXPR inline QSizeF::QSizeF(qreal w, qreal h) : wd(w), ht(h) {}
+Q_DECL_CONSTEXPR inline QSizeF::QSizeF(qreal w, qreal h) Q_DECL_NOTHROW : wd(w), ht(h) {}
-inline bool QSizeF::isNull() const
+inline bool QSizeF::isNull() const Q_DECL_NOTHROW
{ return qIsNull(wd) && qIsNull(ht); }
-Q_DECL_CONSTEXPR inline bool QSizeF::isEmpty() const
+Q_DECL_CONSTEXPR inline bool QSizeF::isEmpty() const Q_DECL_NOTHROW
{ return wd <= 0. || ht <= 0.; }
-Q_DECL_CONSTEXPR inline bool QSizeF::isValid() const
+Q_DECL_CONSTEXPR inline bool QSizeF::isValid() const Q_DECL_NOTHROW
{ return wd >= 0. && ht >= 0.; }
-Q_DECL_CONSTEXPR inline qreal QSizeF::width() const
+Q_DECL_CONSTEXPR inline qreal QSizeF::width() const Q_DECL_NOTHROW
{ return wd; }
-Q_DECL_CONSTEXPR inline qreal QSizeF::height() const
+Q_DECL_CONSTEXPR inline qreal QSizeF::height() const Q_DECL_NOTHROW
{ return ht; }
-inline void QSizeF::setWidth(qreal w)
+Q_DECL_RELAXED_CONSTEXPR inline void QSizeF::setWidth(qreal w) Q_DECL_NOTHROW
{ wd = w; }
-inline void QSizeF::setHeight(qreal h)
+Q_DECL_RELAXED_CONSTEXPR inline void QSizeF::setHeight(qreal h) Q_DECL_NOTHROW
{ ht = h; }
-Q_DECL_CONSTEXPR inline QSizeF QSizeF::transposed() const
+Q_DECL_CONSTEXPR inline QSizeF QSizeF::transposed() const Q_DECL_NOTHROW
{ return QSizeF(ht, wd); }
-inline void QSizeF::scale(qreal w, qreal h, Qt::AspectRatioMode mode)
+inline void QSizeF::scale(qreal w, qreal h, Qt::AspectRatioMode mode) Q_DECL_NOTHROW
{ scale(QSizeF(w, h), mode); }
-inline void QSizeF::scale(const QSizeF &s, Qt::AspectRatioMode mode)
+inline void QSizeF::scale(const QSizeF &s, Qt::AspectRatioMode mode) Q_DECL_NOTHROW
{ *this = scaled(s, mode); }
-inline QSizeF QSizeF::scaled(qreal w, qreal h, Qt::AspectRatioMode mode) const
+inline QSizeF QSizeF::scaled(qreal w, qreal h, Qt::AspectRatioMode mode) const Q_DECL_NOTHROW
{ return scaled(QSizeF(w, h), mode); }
-inline qreal &QSizeF::rwidth()
+Q_DECL_RELAXED_CONSTEXPR inline qreal &QSizeF::rwidth() Q_DECL_NOTHROW
{ return wd; }
-inline qreal &QSizeF::rheight()
+Q_DECL_RELAXED_CONSTEXPR inline qreal &QSizeF::rheight() Q_DECL_NOTHROW
{ return ht; }
-inline QSizeF &QSizeF::operator+=(const QSizeF &s)
+Q_DECL_RELAXED_CONSTEXPR inline QSizeF &QSizeF::operator+=(const QSizeF &s) Q_DECL_NOTHROW
{ wd += s.wd; ht += s.ht; return *this; }
-inline QSizeF &QSizeF::operator-=(const QSizeF &s)
+Q_DECL_RELAXED_CONSTEXPR inline QSizeF &QSizeF::operator-=(const QSizeF &s) Q_DECL_NOTHROW
{ wd -= s.wd; ht -= s.ht; return *this; }
-inline QSizeF &QSizeF::operator*=(qreal c)
+Q_DECL_RELAXED_CONSTEXPR inline QSizeF &QSizeF::operator*=(qreal c) Q_DECL_NOTHROW
{ wd *= c; ht *= c; return *this; }
-Q_DECL_CONSTEXPR inline bool operator==(const QSizeF &s1, const QSizeF &s2)
+Q_DECL_CONSTEXPR inline bool operator==(const QSizeF &s1, const QSizeF &s2) Q_DECL_NOTHROW
{ return qFuzzyCompare(s1.wd, s2.wd) && qFuzzyCompare(s1.ht, s2.ht); }
-Q_DECL_CONSTEXPR inline bool operator!=(const QSizeF &s1, const QSizeF &s2)
+Q_DECL_CONSTEXPR inline bool operator!=(const QSizeF &s1, const QSizeF &s2) Q_DECL_NOTHROW
{ return !qFuzzyCompare(s1.wd, s2.wd) || !qFuzzyCompare(s1.ht, s2.ht); }
-Q_DECL_CONSTEXPR inline const QSizeF operator+(const QSizeF & s1, const QSizeF & s2)
+Q_DECL_CONSTEXPR inline const QSizeF operator+(const QSizeF & s1, const QSizeF & s2) Q_DECL_NOTHROW
{ return QSizeF(s1.wd+s2.wd, s1.ht+s2.ht); }
-Q_DECL_CONSTEXPR inline const QSizeF operator-(const QSizeF &s1, const QSizeF &s2)
+Q_DECL_CONSTEXPR inline const QSizeF operator-(const QSizeF &s1, const QSizeF &s2) Q_DECL_NOTHROW
{ return QSizeF(s1.wd-s2.wd, s1.ht-s2.ht); }
-Q_DECL_CONSTEXPR inline const QSizeF operator*(const QSizeF &s, qreal c)
+Q_DECL_CONSTEXPR inline const QSizeF operator*(const QSizeF &s, qreal c) Q_DECL_NOTHROW
{ return QSizeF(s.wd*c, s.ht*c); }
-Q_DECL_CONSTEXPR inline const QSizeF operator*(qreal c, const QSizeF &s)
+Q_DECL_CONSTEXPR inline const QSizeF operator*(qreal c, const QSizeF &s) Q_DECL_NOTHROW
{ return QSizeF(s.wd*c, s.ht*c); }
inline QSizeF &QSizeF::operator/=(qreal c)
@@ -348,17 +348,17 @@ inline const QSizeF operator/(const QSizeF &s, qreal c)
return QSizeF(s.wd/c, s.ht/c);
}
-Q_DECL_CONSTEXPR inline QSizeF QSizeF::expandedTo(const QSizeF & otherSize) const
+Q_DECL_CONSTEXPR inline QSizeF QSizeF::expandedTo(const QSizeF & otherSize) const Q_DECL_NOTHROW
{
return QSizeF(qMax(wd,otherSize.wd), qMax(ht,otherSize.ht));
}
-Q_DECL_CONSTEXPR inline QSizeF QSizeF::boundedTo(const QSizeF & otherSize) const
+Q_DECL_CONSTEXPR inline QSizeF QSizeF::boundedTo(const QSizeF & otherSize) const Q_DECL_NOTHROW
{
return QSizeF(qMin(wd,otherSize.wd), qMin(ht,otherSize.ht));
}
-Q_DECL_CONSTEXPR inline QSize QSizeF::toSize() const
+Q_DECL_CONSTEXPR inline QSize QSizeF::toSize() const Q_DECL_NOTHROW
{
return QSize(qRound(wd), qRound(ht));
}
diff --git a/src/corelib/tools/qstring.cpp b/src/corelib/tools/qstring.cpp
index 9921d5cfbb..e830ed36e5 100644
--- a/src/corelib/tools/qstring.cpp
+++ b/src/corelib/tools/qstring.cpp
@@ -70,6 +70,7 @@
#include "qchar.cpp"
#include "qstringmatcher.cpp"
#include "qstringiterator_p.h"
+#include "qstringalgorithms_p.h"
#include "qthreadstorage.h"
#ifdef Q_OS_WIN
@@ -731,12 +732,30 @@ inline char qToLower(char ch)
const QString::Null QString::null = { };
/*!
+ \macro QT_RESTRICTED_CAST_FROM_ASCII
+ \relates QString
+
+ Defining this macro disables most automatic conversions from source
+ literals and 8-bit data to unicode QStrings, but allows the use of
+ the \c{QChar(char)} and \c{QString(const char (&ch)[N]} constructors,
+ and the \c{QString::operator=(const char (&ch)[N])} assignment operator
+ giving most of the type-safety benefits of QT_NO_CAST_FROM_ASCII
+ but does not require user code to wrap character and string literals
+ with QLatin1Char, QLatin1String or similar.
+
+ Using this macro together with source strings outside the 7-bit range,
+ non-literals, or literals with embedded NUL characters is undefined.
+
+ \sa QT_NO_CAST_FROM_ASCII, QT_NO_CAST_TO_ASCII
+*/
+
+/*!
\macro QT_NO_CAST_FROM_ASCII
\relates QString
Disables automatic conversions from 8-bit strings (char *) to unicode QStrings
- \sa QT_NO_CAST_TO_ASCII, QT_NO_CAST_FROM_BYTEARRAY
+ \sa QT_NO_CAST_TO_ASCII, QT_RESTRICTED_CAST_FROM_ASCII, QT_NO_CAST_FROM_BYTEARRAY
*/
/*!
@@ -745,7 +764,7 @@ const QString::Null QString::null = { };
disables automatic conversion from QString to 8-bit strings (char *)
- \sa QT_NO_CAST_FROM_ASCII, QT_NO_CAST_FROM_BYTEARRAY
+ \sa QT_NO_CAST_FROM_ASCII, QT_RESTRICTED_CAST_FROM_ASCII, QT_NO_CAST_FROM_BYTEARRAY
*/
/*!
@@ -759,7 +778,7 @@ const QString::Null QString::null = { };
Note: This only works for compilers that support warnings for
deprecated API.
- \sa QT_NO_CAST_TO_ASCII, QT_NO_CAST_FROM_ASCII
+ \sa QT_NO_CAST_TO_ASCII, QT_NO_CAST_FROM_ASCII, QT_RESTRICTED_CAST_FROM_ASCII
*/
/*!
@@ -993,6 +1012,9 @@ const QString::Null QString::null = { };
\list
\li \c QT_NO_CAST_FROM_ASCII disables automatic conversions from
C string literals and pointers to Unicode.
+ \li \c QT_RESTRICTED_CAST_FROM_ASCII allows automatic conversions
+ from C characters and character arrays, but disables automatic
+ conversions from character pointers to Unicode.
\li \c QT_NO_CAST_TO_ASCII disables automatic conversion from QString
to C strings.
\endlist
@@ -1310,6 +1332,12 @@ const QString::Null QString::null = { };
can be useful if you want to ensure that all user-visible strings
go through QObject::tr(), for example.
+ \note Defining QT_RESTRICTED_CAST_FROM_ASCII also disables
+ this constructor, but enables a \c{QString(const char (&ch)[N])}
+ constructor instead. Using non-literal input, or input with
+ embedded NUL characters, or non-7-bit characters is undefined
+ in this case.
+
\sa fromLatin1(), fromLocal8Bit(), fromUtf8()
*/
@@ -1656,8 +1684,11 @@ void QString::resize(int size)
void QString::reallocData(uint alloc, bool grow)
{
- if (grow)
+ if (grow) {
+ if (alloc > (uint(MaxAllocSize) - sizeof(Data)) / sizeof(QChar))
+ qBadAlloc();
alloc = qAllocMore(alloc * sizeof(QChar), sizeof(Data)) / sizeof(QChar);
+ }
if (d->ref.isShared() || IS_RAW_DATA(d)) {
Data::AllocationOptions allocOptions(d->capacityReserved ? Data::CapacityReserved : 0);
@@ -1748,10 +1779,11 @@ QString &QString::operator=(const QString &other)
Assigns \a str to this string. The const char pointer is converted
to Unicode using the fromUtf8() function.
- You can disable this operator by defining \c
- QT_NO_CAST_FROM_ASCII when you compile your applications. This
- can be useful if you want to ensure that all user-visible strings
+ You can disable this operator by defining \c QT_NO_CAST_FROM_ASCII
+ or \c QT_RESTRICTED_CAST_FROM_ASCII when you compile your applications.
+ This can be useful if you want to ensure that all user-visible strings
go through QObject::tr(), for example.
+
*/
/*! \fn QString &QString::operator=(char ch)
@@ -3664,14 +3696,39 @@ int QString::count(const QRegExp& rx) const
*/
int QString::indexOf(const QRegularExpression& re, int from) const
{
+ return indexOf(re, from, Q_NULLPTR);
+}
+
+/*!
+ \overload
+ \since 5.5
+
+ Returns the index position of the first match of the regular
+ expression \a re in the string, searching forward from index
+ position \a from. Returns -1 if \a re didn't match anywhere.
+
+ If the match is successful and \a rmatch is not a null pointer, it also
+ writes the results of the match into the QRegularExpressionMatch object
+ pointed to by \a rmatch.
+
+ Example:
+
+ \snippet qstring/main.cpp 97
+*/
+int QString::indexOf(const QRegularExpression &re, int from, QRegularExpressionMatch *rmatch) const
+{
if (!re.isValid()) {
qWarning("QString::indexOf: invalid QRegularExpression object");
return -1;
}
QRegularExpressionMatch match = re.match(*this, from);
- if (match.hasMatch())
- return match.capturedStart();
+ if (match.hasMatch()) {
+ const int ret = match.capturedStart();
+ if (rmatch)
+ *rmatch = qMove(match);
+ return ret;
+ }
return -1;
}
@@ -3690,22 +3747,45 @@ int QString::indexOf(const QRegularExpression& re, int from) const
*/
int QString::lastIndexOf(const QRegularExpression &re, int from) const
{
+ return lastIndexOf(re, from, Q_NULLPTR);
+}
+
+/*!
+ \overload
+ \since 5.5
+
+ Returns the index position of the last match of the regular
+ expression \a re in the string, which starts before the index
+ position \a from. Returns -1 if \a re didn't match anywhere.
+
+ If the match is successful and \a rmatch is not a null pointer, it also
+ writes the results of the match into the QRegularExpressionMatch object
+ pointed to by \a rmatch.
+
+ Example:
+
+ \snippet qstring/main.cpp 98
+*/
+int QString::lastIndexOf(const QRegularExpression &re, int from, QRegularExpressionMatch *rmatch) const
+{
if (!re.isValid()) {
qWarning("QString::lastIndexOf: invalid QRegularExpression object");
return -1;
}
int endpos = (from < 0) ? (size() + from + 1) : (from + 1);
-
QRegularExpressionMatchIterator iterator = re.globalMatch(*this);
int lastIndex = -1;
while (iterator.hasNext()) {
QRegularExpressionMatch match = iterator.next();
int start = match.capturedStart();
- if (start < endpos)
+ if (start < endpos) {
lastIndex = start;
- else
+ if (rmatch)
+ *rmatch = qMove(match);
+ } else {
break;
+ }
}
return lastIndex;
@@ -3719,12 +3799,7 @@ int QString::lastIndexOf(const QRegularExpression &re, int from) const
*/
bool QString::contains(const QRegularExpression &re) const
{
- if (!re.isValid()) {
- qWarning("QString::contains: invalid QRegularExpression object");
- return false;
- }
- QRegularExpressionMatch match = re.match(*this);
- return match.hasMatch();
+ return contains(re, Q_NULLPTR);
}
/*!
@@ -3744,13 +3819,13 @@ bool QString::contains(const QRegularExpression &re) const
bool QString::contains(const QRegularExpression &re, QRegularExpressionMatch *match) const
{
if (!re.isValid()) {
- qWarning("QString::contains: invalid QRegularExpresssion object");
+ qWarning("QString::contains: invalid QRegularExpression object");
return false;
}
QRegularExpressionMatch m = re.match(*this);
bool hasMatch = m.hasMatch();
if (hasMatch && match)
- *match = m;
+ *match = qMove(m);
return hasMatch;
}
@@ -3912,12 +3987,14 @@ QString QString::section(const QString &sep, int start, int end, SectionFlags fl
#if !(defined(QT_NO_REGEXP) && defined(QT_NO_REGULAREXPRESSION))
class qt_section_chunk {
public:
- qt_section_chunk(int l, QString s) { length = l; string = s; }
+ qt_section_chunk() {}
+ qt_section_chunk(int l, QString s) : length(l), string(qMove(s)) {}
int length;
QString string;
};
+Q_DECLARE_TYPEINFO(qt_section_chunk, Q_MOVABLE_TYPE);
-static QString extractSections(const QList<qt_section_chunk> &sections,
+static QString extractSections(const QVector<qt_section_chunk> &sections,
int start,
int end,
QString::SectionFlags flags)
@@ -4003,7 +4080,7 @@ QString QString::section(const QRegExp &reg, int start, int end, SectionFlags fl
sep.setCaseSensitivity((flags & SectionCaseInsensitiveSeps) ? Qt::CaseInsensitive
: Qt::CaseSensitive);
- QList<qt_section_chunk> sections;
+ QVector<qt_section_chunk> sections;
int n = length(), m = 0, last_m = 0, last_len = 0;
while ((m = sep.indexIn(*this, m)) != -1) {
sections.append(qt_section_chunk(last_len, QString(uc + last_m, m - last_m)));
@@ -4048,7 +4125,7 @@ QString QString::section(const QRegularExpression &re, int start, int end, Secti
if (flags & SectionCaseInsensitiveSeps)
sep.setPatternOptions(sep.patternOptions() | QRegularExpression::CaseInsensitiveOption);
- QList<qt_section_chunk> sections;
+ QVector<qt_section_chunk> sections;
int n = length(), m = 0, last_m = 0, last_len = 0;
QRegularExpressionMatchIterator iterator = sep.globalMatch(*this);
while (iterator.hasNext()) {
@@ -4626,6 +4703,8 @@ QString& QString::setUnicode(const QChar *unicode, int size)
*/
/*!
+ \fn QString QString::simplified() const
+
Returns a string that has whitespace removed from the start
and the end, and that has each sequence of internal whitespace
replaced with a single space.
@@ -4640,83 +4719,19 @@ QString& QString::setUnicode(const QChar *unicode, int size)
\sa trimmed()
*/
-QString QString::simplified() const
+QString QString::simplified_helper(const QString &str)
{
- if (d->size == 0)
- return *this;
-
- const QChar * const start = reinterpret_cast<QChar *>(d->data());
- const QChar *from = start;
- const QChar *fromEnd = start + d->size;
- forever {
- QChar ch = *from;
- if (!ch.isSpace())
- break;
- if (++from == fromEnd) {
- // All-whitespace string
- QStringDataPtr empty = { Data::allocate(0) };
- return QString(empty);
- }
- }
- // This loop needs no underflow check, as we already determined that
- // the string contains non-whitespace. If the string has exactly one
- // non-whitespace, it will be checked twice - we can live with that.
- while (fromEnd[-1].isSpace())
- fromEnd--;
- // The rest of the function depends on the fact that we already know
- // that the last character in the source is no whitespace.
- const QChar *copyFrom = from;
- int copyCount;
- forever {
- if (++from == fromEnd) {
- // Only leading and/or trailing whitespace, if any at all
- return mid(copyFrom - start, from - copyFrom);
- }
- QChar ch = *from;
- if (!ch.isSpace())
- continue;
- if (ch != QLatin1Char(' ')) {
- copyCount = from - copyFrom;
- break;
- }
- ch = *++from;
- if (ch.isSpace()) {
- copyCount = from - copyFrom - 1;
- break;
- }
- }
- // 'from' now points at the non-trailing whitespace which made the
- // string not simplified in the first place. 'copyCount' is the number
- // of already simplified characters - at least one, obviously -
- // without a trailing space.
- QString result((fromEnd - from) + copyCount, Qt::Uninitialized);
- QChar *to = reinterpret_cast<QChar *>(result.d->data());
- ::memcpy(to, copyFrom, copyCount * 2);
- to += copyCount;
- fromEnd--;
- QChar ch;
- forever {
- *to++ = QLatin1Char(' ');
- do {
- ch = *++from;
- } while (ch.isSpace());
- if (from == fromEnd)
- break;
- do {
- *to++ = ch;
- ch = *++from;
- if (from == fromEnd)
- goto done;
- } while (!ch.isSpace());
+ return QStringAlgorithms<const QString>::simplified_helper(str);
+}
- }
- done:
- *to++ = ch;
- result.truncate(to - reinterpret_cast<QChar *>(result.d->data()));
- return result;
+QString QString::simplified_helper(QString &str)
+{
+ return QStringAlgorithms<QString>::simplified_helper(str);
}
/*!
+ \fn QString QString::trimmed() const
+
Returns a string that has whitespace removed from the start and
the end.
@@ -4732,27 +4747,14 @@ QString QString::simplified() const
\sa simplified()
*/
-QString QString::trimmed() const
+QString QString::trimmed_helper(const QString &str)
{
- if (d->size == 0)
- return *this;
- const QChar *s = (const QChar*)d->data();
- if (!s->isSpace() && !s[d->size-1].isSpace())
- return *this;
- int start = 0;
- int end = d->size - 1;
- while (start<=end && s[start].isSpace()) // skip white space from start
- start++;
- if (start <= end) { // only white space
- while (end && s[end].isSpace()) // skip white space from end
- end--;
- }
- int l = end - start + 1;
- if (l <= 0) {
- QStringDataPtr empty = { Data::allocate(0) };
- return QString(empty);
- }
- return QString(s + start, l);
+ return QStringAlgorithms<const QString>::trimmed_helper(str);
+}
+
+QString QString::trimmed_helper(QString &str)
+{
+ return QStringAlgorithms<QString>::trimmed_helper(str);
}
/*! \fn const QChar QString::at(int position) const
@@ -5519,6 +5521,8 @@ QString QString::rightJustified(int width, QChar fill, bool truncate) const
}
/*!
+ \fn QString QString::toLower() const
+
Returns a lowercase copy of the string.
\snippet qstring/main.cpp 75
@@ -5529,132 +5533,118 @@ QString QString::rightJustified(int width, QChar fill, bool truncate) const
\sa toUpper(), QLocale::toLower()
*/
-QString QString::toLower() const
+namespace QUnicodeTables {
+struct LowercaseTraits
{
- const ushort *p = d->data();
- if (!p)
- return *this;
+ static signed short caseDiff(const Properties *prop)
+ { return prop->lowerCaseDiff; }
+ static bool caseSpecial(const Properties *prop)
+ { return prop->lowerCaseSpecial; }
+};
- const ushort *e = p + d->size;
- // this avoids out of bounds check in the loop
- while (e != p && QChar::isHighSurrogate(*(e - 1)))
- --e;
+struct UppercaseTraits
+{
+ static signed short caseDiff(const Properties *prop)
+ { return prop->upperCaseDiff; }
+ static bool caseSpecial(const Properties *prop)
+ { return prop->upperCaseSpecial; }
+};
- const QUnicodeTables::Properties *prop;
- while (p != e) {
- if (QChar::isHighSurrogate(*p) && QChar::isLowSurrogate(p[1])) {
- ushort high = *p++;
- prop = qGetProp(QChar::surrogateToUcs4(high, *p));
+struct CasefoldTraits
+{
+ static signed short caseDiff(const Properties *prop)
+ { return prop->caseFoldDiff; }
+ static bool caseSpecial(const Properties *prop)
+ { return prop->caseFoldSpecial; }
+};
+
+template <typename Traits, typename T>
+#ifdef Q_CC_MSVC
+__declspec(noinline)
+#elif defined(Q_CC_GNU)
+__attribute__((noinline))
+#endif
+static QString detachAndConvertCase(T &str, QStringIterator it)
+{
+ QString s = qMove(str); // will copy if T is const QString
+ QChar *pp = s.begin() + it.index(); // will detach if necessary
+ uint uc = it.nextUnchecked();
+ forever {
+ const QUnicodeTables::Properties *prop = qGetProp(uc);
+ signed short caseDiff = Traits::caseDiff(prop);
+
+ if (Q_UNLIKELY(Traits::caseSpecial(prop))) {
+ // slow path
+ const ushort *specialCase = specialCaseMap + caseDiff;
+ ushort length = *specialCase++;
+ int pos = pp - s.constBegin();
+ s.replace(pos, 1, reinterpret_cast<const QChar *>(specialCase), length);
+ pp = const_cast<QChar *>(s.constBegin()) + pos + length;
+ } else if (QChar::requiresSurrogates(uc)) {
+ *pp++ = QChar::highSurrogate(uc + caseDiff);
+ *pp++ = QChar::lowSurrogate(uc + caseDiff);
} else {
- prop = qGetProp(*p);
+ *pp++ = QChar(uc + caseDiff);
}
- if (prop->lowerCaseDiff) {
- if (QChar::isLowSurrogate(*p))
- --p; // safe; diff is 0 for surrogates
- QString s(d->size, Qt::Uninitialized);
- memcpy(s.d->data(), d->data(), (p - d->data())*sizeof(ushort));
- ushort *pp = s.d->data() + (p - d->data());
- while (p != e) {
- if (QChar::isHighSurrogate(*p) && QChar::isLowSurrogate(p[1])) {
- *pp = *p++;
- prop = qGetProp(QChar::surrogateToUcs4(*pp++, *p));
- } else {
- prop = qGetProp(*p);
- }
- if (prop->lowerCaseSpecial) {
- const ushort *specialCase = specialCaseMap + prop->lowerCaseDiff;
- ushort length = *specialCase++;
- int pos = pp - s.d->data();
- s.resize(s.d->size + length - 1);
- pp = s.d->data() + pos;
- while (length--)
- *pp++ = *specialCase++;
- } else {
- *pp++ = *p + prop->lowerCaseDiff;
- }
- ++p;
- }
-
- // this restores high surrogate parts eaten above, if any
- while (e != d->data() + d->size)
- *pp++ = *e++;
+ if (!it.hasNext())
return s;
- }
- ++p;
+
+ uc = it.nextUnchecked();
}
- return *this;
}
-/*!
- Returns the case folded equivalent of the string. For most Unicode
- characters this is the same as toLower().
-*/
-QString QString::toCaseFolded() const
+template <typename Traits, typename T>
+static QString convertCase(T &str)
{
- const ushort *p = d->data();
- if (!p)
- return *this;
+ const QChar *p = str.constBegin();
+ const QChar *e = p + str.size();
- const ushort *e = p + d->size;
// this avoids out of bounds check in the loop
- while (e != p && QChar::isHighSurrogate(*(e - 1)))
+ while (e != p && e[-1].isHighSurrogate())
--e;
const QUnicodeTables::Properties *prop;
- while (p != e) {
- if (QChar::isHighSurrogate(*p) && QChar::isLowSurrogate(p[1])) {
- ushort high = *p++;
- prop = qGetProp(QChar::surrogateToUcs4(high, *p));
- } else {
- prop = qGetProp(*p);
- }
- if (prop->caseFoldDiff) {
- if (QChar::isLowSurrogate(*p))
- --p; // safe; diff is 0 for surrogates
- QString s(d->size, Qt::Uninitialized);
- memcpy(s.d->data(), d->data(), (p - d->data())*sizeof(ushort));
- ushort *pp = s.d->data() + (p - d->data());
- while (p != e) {
- if (QChar::isHighSurrogate(*p) && QChar::isLowSurrogate(p[1])) {
- *pp = *p++;
- prop = qGetProp(QChar::surrogateToUcs4(*pp++, *p));
- } else {
- prop = qGetProp(*p);
- }
- if (prop->caseFoldSpecial) {
- const ushort *specialCase = specialCaseMap + prop->caseFoldDiff;
- ushort length = *specialCase++;
-#if 0
- int pos = pp - s.d->data;
- s.resize(s.d->size + length - 1);
- pp = s.d->data + pos;
- while (length--)
- *pp++ = *specialCase++;
-#else
- //### we currently don't support full case foldings
- Q_ASSERT(length == 1);
- Q_UNUSED(length)
- *pp++ = *specialCase;
-#endif
- } else {
- *pp++ = *p + prop->caseFoldDiff;
- }
- ++p;
- }
+ QStringIterator it(p, e);
+ for ( ; it.hasNext(); it.advanceUnchecked()) {
+ prop = qGetProp(it.peekNextUnchecked());
+ if (Traits::caseDiff(prop))
+ return detachAndConvertCase<Traits>(str, it);
+ }
+ return qMove(str);
+}
+} // namespace QUnicodeTables
- // this restores high surrogate parts eaten above, if any
- while (e != d->data() + d->size)
- *pp++ = *e++;
+QString QString::toLower_helper(const QString &str)
+{
+ return QUnicodeTables::convertCase<QUnicodeTables::LowercaseTraits>(str);
+}
- return s;
- }
- ++p;
- }
- return *this;
+QString QString::toLower_helper(QString &str)
+{
+ return QUnicodeTables::convertCase<QUnicodeTables::LowercaseTraits>(str);
}
/*!
+ \fn QString QString::toCaseFolded() const
+
+ Returns the case folded equivalent of the string. For most Unicode
+ characters this is the same as toLower().
+*/
+
+QString QString::toCaseFolded_helper(const QString &str)
+{
+ return QUnicodeTables::convertCase<QUnicodeTables::CasefoldTraits>(str);
+}
+
+QString QString::toCaseFolded_helper(QString &str)
+{
+ return QUnicodeTables::convertCase<QUnicodeTables::CasefoldTraits>(str);
+}
+
+/*!
+ \fn QString QString::toUpper() const
+
Returns an uppercase copy of the string.
\snippet qstring/main.cpp 81
@@ -5664,63 +5654,18 @@ QString QString::toCaseFolded() const
\sa toLower(), QLocale::toLower()
*/
-QString QString::toUpper() const
-{
- const ushort *p = d->data();
- if (!p)
- return *this;
- const ushort *e = p + d->size;
- // this avoids out of bounds check in the loop
- while (e != p && QChar::isHighSurrogate(*(e - 1)))
- --e;
-
- const QUnicodeTables::Properties *prop;
- while (p != e) {
- if (QChar::isHighSurrogate(*p) && QChar::isLowSurrogate(p[1])) {
- ushort high = *p++;
- prop = qGetProp(QChar::surrogateToUcs4(high, *p));
- } else {
- prop = qGetProp(*p);
- }
- if (prop->upperCaseDiff) {
- if (QChar::isLowSurrogate(*p))
- --p; // safe; diff is 0 for surrogates
- QString s(d->size, Qt::Uninitialized);
- memcpy(s.d->data(), d->data(), (p - d->data())*sizeof(ushort));
- ushort *pp = s.d->data() + (p - d->data());
- while (p != e) {
- if (QChar::isHighSurrogate(*p) && QChar::isLowSurrogate(p[1])) {
- *pp = *p++;
- prop = qGetProp(QChar::surrogateToUcs4(*pp++, *p));
- } else {
- prop = qGetProp(*p);
- }
- if (prop->upperCaseSpecial) {
- const ushort *specialCase = specialCaseMap + prop->upperCaseDiff;
- ushort length = *specialCase++;
- int pos = pp - s.d->data();
- s.resize(s.d->size + length - 1);
- pp = s.d->data() + pos;
- while (length--)
- *pp++ = *specialCase++;
- } else {
- *pp++ = *p + prop->upperCaseDiff;
- }
- ++p;
- }
-
- // this restores high surrogate parts eaten above, if any
- while (e != d->data() + d->size)
- *pp++ = *e++;
+QString QString::toUpper_helper(const QString &str)
+{
+ return QUnicodeTables::convertCase<QUnicodeTables::UppercaseTraits>(str);
+}
- return s;
- }
- ++p;
- }
- return *this;
+QString QString::toUpper_helper(QString &str)
+{
+ return QUnicodeTables::convertCase<QUnicodeTables::UppercaseTraits>(str);
}
+
// ### Qt 6: Consider whether this function shouldn't be removed See task 202871.
/*!
Safely builds a formatted string from the format string \a cformat
@@ -9843,20 +9788,15 @@ QVector<uint> QStringRef::toUcs4() const
*/
QStringRef QStringRef::trimmed() const
{
- if (m_size == 0 || m_string == 0)
+ const QChar *begin = cbegin();
+ const QChar *end = cend();
+ QStringAlgorithms<const QStringRef>::trimmed_helper_positions(begin, end);
+ if (begin == cbegin() && end == cend())
return *this;
- const QChar *s = m_string->constData() + m_position;
- int start = 0;
- int end = m_size - 1;
- while (start <= end && s[start].isSpace()) // skip white space from start
- start++;
- if (start <= end) { // only white space
- while (end && s[end].isSpace()) // skip white space from end
- end--;
- }
- int l = end - start + 1;
- Q_ASSERT(l >= 0);
- return QStringRef(m_string, m_position + start, l);
+ if (begin == end)
+ return QStringRef();
+ int position = m_position + (begin - cbegin());
+ return QStringRef(m_string, position, end - begin);
}
/*!
diff --git a/src/corelib/tools/qstring.h b/src/corelib/tools/qstring.h
index a12946e23c..71d10f0663 100644
--- a/src/corelib/tools/qstring.h
+++ b/src/corelib/tools/qstring.h
@@ -34,6 +34,10 @@
#ifndef QSTRING_H
#define QSTRING_H
+#if defined(QT_NO_CAST_FROM_ASCII) && defined(QT_RESTRICTED_CAST_FROM_ASCII)
+#error QT_NO_CAST_FROM_ASCII and QT_RESTRICTED_CAST_FROM_ASCII must not be defined at the same time
+#endif
+
#include <QtCore/qchar.h>
#include <QtCore/qbytearray.h>
#include <QtCore/qrefcount.h>
@@ -93,7 +97,7 @@ public:
inline bool operator>=(const QString &s) const;
inline bool operator<=(const QString &s) const;
-#ifndef QT_NO_CAST_FROM_ASCII
+#if !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
inline QT_ASCII_CAST_WARN bool operator==(const char *s) const;
inline QT_ASCII_CAST_WARN bool operator!=(const char *s) const;
inline QT_ASCII_CAST_WARN bool operator<(const char *s) const;
@@ -107,7 +111,7 @@ public:
inline QT_ASCII_CAST_WARN bool operator>(const QByteArray &s) const;
inline QT_ASCII_CAST_WARN bool operator<=(const QByteArray &s) const;
inline QT_ASCII_CAST_WARN bool operator>=(const QByteArray &s) const;
-#endif // QT_NO_CAST_FROM_ASCII
+#endif // !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
private:
int m_size;
@@ -206,7 +210,7 @@ class Q_CORE_EXPORT QString
public:
typedef QStringData Data;
- inline QString();
+ inline QString() Q_DECL_NOTHROW;
explicit QString(const QChar *unicode, int size = -1);
QString(QChar c);
QString(int size, QChar c);
@@ -217,11 +221,11 @@ public:
QString &operator=(const QString &);
inline QString &operator=(QLatin1String latin1);
#ifdef Q_COMPILER_RVALUE_REFS
- inline QString(QString && other) : d(other.d) { other.d = Data::sharedNull(); }
- inline QString &operator=(QString &&other)
+ inline QString(QString && other) Q_DECL_NOTHROW : d(other.d) { other.d = Data::sharedNull(); }
+ inline QString &operator=(QString &&other) Q_DECL_NOTHROW
{ qSwap(d, other.d); return *this; }
#endif
- inline void swap(QString &other) { qSwap(d, other.d); }
+ inline void swap(QString &other) Q_DECL_NOTHROW { qSwap(d, other.d); }
inline int size() const { return d->size; }
inline int count() const { return d->size; }
inline int length() const;
@@ -327,7 +331,9 @@ public:
#ifndef QT_NO_REGULAREXPRESSION
int indexOf(const QRegularExpression &re, int from = 0) const;
+ int indexOf(const QRegularExpression &re, int from, QRegularExpressionMatch *rmatch) const; // ### Qt 6: merge overloads
int lastIndexOf(const QRegularExpression &re, int from = -1) const;
+ int lastIndexOf(const QRegularExpression &re, int from, QRegularExpressionMatch *rmatch) const; // ### Qt 6: merge overloads
bool contains(const QRegularExpression &re) const;
bool contains(const QRegularExpression &re, QRegularExpressionMatch *match) const; // ### Qt 6: merge overloads
int count(const QRegularExpression &re) const;
@@ -369,12 +375,44 @@ public:
QString leftJustified(int width, QChar fill = QLatin1Char(' '), bool trunc = false) const Q_REQUIRED_RESULT;
QString rightJustified(int width, QChar fill = QLatin1Char(' '), bool trunc = false) const Q_REQUIRED_RESULT;
+#if defined(Q_COMPILER_REF_QUALIFIERS) && !defined(QT_COMPILING_QSTRING_COMPAT_CPP)
+# if defined(Q_CC_GNU)
+ // required due to https://gcc.gnu.org/bugzilla/show_bug.cgi?id=61941
+# pragma push_macro("Q_REQUIRED_RESULT")
+# undef Q_REQUIRED_RESULT
+# define Q_REQUIRED_RESULT
+# define Q_REQUIRED_RESULT_pushed
+# endif
+ QString toLower() const & Q_REQUIRED_RESULT
+ { return toLower_helper(*this); }
+ QString toLower() && Q_REQUIRED_RESULT
+ { return toLower_helper(*this); }
+ QString toUpper() const & Q_REQUIRED_RESULT
+ { return toUpper_helper(*this); }
+ QString toUpper() && Q_REQUIRED_RESULT
+ { return toUpper_helper(*this); }
+ QString toCaseFolded() const & Q_REQUIRED_RESULT
+ { return toCaseFolded_helper(*this); }
+ QString toCaseFolded() && Q_REQUIRED_RESULT
+ { return toCaseFolded_helper(*this); }
+ QString trimmed() const & Q_REQUIRED_RESULT
+ { return trimmed_helper(*this); }
+ QString trimmed() && Q_REQUIRED_RESULT
+ { return trimmed_helper(*this); }
+ QString simplified() const & Q_REQUIRED_RESULT
+ { return simplified_helper(*this); }
+ QString simplified() && Q_REQUIRED_RESULT
+ { return simplified_helper(*this); }
+# ifdef Q_REQUIRED_RESULT_pushed
+# pragma pop_macro("Q_REQUIRED_RESULT")
+# endif
+#else
QString toLower() const Q_REQUIRED_RESULT;
QString toUpper() const Q_REQUIRED_RESULT;
QString toCaseFolded() const Q_REQUIRED_RESULT;
-
QString trimmed() const Q_REQUIRED_RESULT;
QString simplified() const Q_REQUIRED_RESULT;
+#endif
QString toHtmlEscaped() const Q_REQUIRED_RESULT;
QString &insert(int i, QChar c);
@@ -596,7 +634,16 @@ public:
inline bool operator>=(QLatin1String s) const { return !operator<(s); }
// ASCII compatibility
-#ifndef QT_NO_CAST_FROM_ASCII
+#if defined(QT_RESTRICTED_CAST_FROM_ASCII)
+ template <int N>
+ inline QString(const char (&ch)[N])
+ : d(fromAscii_helper(ch, N - 1))
+ {}
+ template <int N>
+ inline QString &operator=(const char (&ch)[N])
+ { return (*this = fromLatin1(ch, N - 1)); }
+#endif
+#if !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
inline QT_ASCII_CAST_WARN QString(const char *ch)
: d(fromAscii_helper(ch, ch ? int(strlen(ch)) : -1))
{}
@@ -734,6 +781,16 @@ private:
Qt::CaseSensitivity cs = Qt::CaseSensitive);
static int localeAwareCompare_helper(const QChar *data1, int length1,
const QChar *data2, int length2);
+ static QString toLower_helper(const QString &str);
+ static QString toLower_helper(QString &str);
+ static QString toUpper_helper(const QString &str);
+ static QString toUpper_helper(QString &str);
+ static QString toCaseFolded_helper(const QString &str);
+ static QString toCaseFolded_helper(QString &str);
+ static QString trimmed_helper(const QString &str);
+ static QString trimmed_helper(QString &str);
+ static QString simplified_helper(const QString &str);
+ static QString simplified_helper(QString &str);
static Data *fromLatin1_helper(const char *str, int size = -1);
static Data *fromAscii_helper(const char *str, int size = -1);
static QString fromUtf8_helper(const char *str, int size);
@@ -867,11 +924,8 @@ inline QString QString::arg(const QString &a1, const QString &a2, const QString
inline QString QString::section(QChar asep, int astart, int aend, SectionFlags aflags) const
{ return section(QString(asep), astart, aend, aflags); }
-#ifdef Q_CC_MSVC
-// "conditional expression is constant"
-#pragma warning(push)
-#pragma warning(disable : 4127)
-#endif
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_MSVC(4127) // "conditional expression is constant"
inline int QString::toWCharArray(wchar_t *array) const
{
@@ -882,9 +936,7 @@ inline int QString::toWCharArray(wchar_t *array) const
return toUcs4_helper(d->data(), size(), reinterpret_cast<uint *>(array));
}
-#ifdef Q_CC_MSVC
-#pragma warning(pop)
-#endif
+QT_WARNING_POP
inline QString QString::fromWCharArray(const wchar_t *string, int size)
{
@@ -988,7 +1040,7 @@ inline void QCharRef::setRow(uchar arow) { QChar(*this).setRow(arow); }
inline void QCharRef::setCell(uchar acell) { QChar(*this).setCell(acell); }
-inline QString::QString() : d(Data::sharedNull()) {}
+inline QString::QString() Q_DECL_NOTHROW : d(Data::sharedNull()) {}
inline QString::~QString() { if (!d->ref.deref()) Data::deallocate(d); }
inline void QString::reserve(int asize)
@@ -1083,7 +1135,7 @@ inline bool QLatin1String::operator>=(const QString &s) const
inline bool QLatin1String::operator<=(const QString &s) const
{ return s >= *this; }
-#ifndef QT_NO_CAST_FROM_ASCII
+#if !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
inline bool QString::operator==(const char *s) const
{ return QString::compare_helper(constData(), size(), s, -1) == 0; }
inline bool QString::operator!=(const char *s) const
@@ -1174,7 +1226,7 @@ inline bool QByteArray::operator<=(const QString &s) const
{ return QString::compare_helper(s.constData(), s.size(), constData(), qstrnlen(constData(), size())) <= 0; }
inline bool QByteArray::operator>=(const QString &s) const
{ return QString::compare_helper(s.constData(), s.size(), constData(), qstrnlen(constData(), size())) >= 0; }
-#endif // QT_NO_CAST_FROM_ASCII
+#endif // !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
#ifndef QT_NO_CAST_TO_ASCII
inline QByteArray &QByteArray::append(const QString &s)
@@ -1202,7 +1254,7 @@ inline const QString operator+(const QString &s1, QChar s2)
{ QString t(s1); t += s2; return t; }
inline const QString operator+(QChar s1, const QString &s2)
{ QString t(s1); t += s2; return t; }
-# ifndef QT_NO_CAST_FROM_ASCII
+# if !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
inline QT_ASCII_CAST_WARN const QString operator+(const QString &s1, const char *s2)
{ QString t(s1); t += QString::fromUtf8(s2); return t; }
inline QT_ASCII_CAST_WARN const QString operator+(const char *s1, const QString &s2)
@@ -1355,7 +1407,7 @@ public:
inline const QChar at(int i) const
{ Q_ASSERT(uint(i) < uint(size())); return m_string->at(i + m_position); }
-#ifndef QT_NO_CAST_FROM_ASCII
+#if !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
// ASCII compatibility
inline QT_ASCII_CAST_WARN bool operator==(const char *s) const;
inline QT_ASCII_CAST_WARN bool operator!=(const char *s) const;
@@ -1429,7 +1481,7 @@ inline bool operator<=(const QStringRef &s1, const QStringRef &s2)
inline bool operator>=(const QStringRef &s1, const QStringRef &s2)
{ return !(s1 < s2); }
-#ifndef QT_NO_CAST_FROM_ASCII
+#if !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
inline QT_ASCII_CAST_WARN bool QStringRef::operator==(const char *s) const
{ return QString::compare_helper(constData(), size(), s, -1) == 0; }
inline QT_ASCII_CAST_WARN bool QStringRef::operator!=(const char *s) const
@@ -1455,7 +1507,7 @@ inline QT_ASCII_CAST_WARN bool operator>(const char *s1, const QStringRef &s2)
{ return QString::compare_helper(s2.constData(), s2.size(), s1, -1) <= 0; }
inline QT_ASCII_CAST_WARN bool operator>=(const char *s1, const QStringRef &s2)
{ return QString::compare_helper(s2.constData(), s2.size(), s1, -1) >= 0; }
-#endif // QT_NO_CAST_FROM_ASCII
+#endif // !defined(QT_NO_CAST_FROM_ASCII) && !defined(QT_RESTRICTED_CAST_FROM_ASCII)
inline int QString::compare(const QStringRef &s, Qt::CaseSensitivity cs) const
{ return QString::compare_helper(constData(), length(), s.constData(), s.length(), cs); }
diff --git a/src/corelib/tools/qstring_compat.cpp b/src/corelib/tools/qstring_compat.cpp
index c776092569..d4f21e483a 100644
--- a/src/corelib/tools/qstring_compat.cpp
+++ b/src/corelib/tools/qstring_compat.cpp
@@ -31,16 +31,42 @@
**
****************************************************************************/
-#if defined(QSTRING_H)
+#if defined(QSTRING_H) || defined(QBYTEARRAY_H)
# error "This file cannot be compiled with pre-compiled headers"
#endif
#define QT_COMPILING_QSTRING_COMPAT_CPP
+#include "qbytearray.h"
#include "qstring.h"
QT_BEGIN_NAMESPACE
// all these implementations must be the same as the inline versions in qstring.h
+QString QString::trimmed() const
+{
+ return trimmed_helper(*this);
+}
+
+QString QString::simplified() const
+{
+ return simplified_helper(*this);
+}
+
+QString QString::toLower() const
+{
+ return toLower_helper(*this);
+}
+
+QString QString::toCaseFolded() const
+{
+ return toCaseFolded_helper(*this);
+}
+
+QString QString::toUpper() const
+{
+ return toUpper_helper(*this);
+}
+
QByteArray QString::toLatin1() const
{
return toLatin1_helper(*this);
@@ -56,4 +82,25 @@ QByteArray QString::toUtf8() const
return toUtf8_helper(*this);
}
+// ditto, for qbytearray.h (because we're lazy)
+QByteArray QByteArray::toLower() const
+{
+ return toLower_helper(*this);
+}
+
+QByteArray QByteArray::toUpper() const
+{
+ return toUpper_helper(*this);
+}
+
+QByteArray QByteArray::trimmed() const
+{
+ return trimmed_helper(*this);
+}
+
+QByteArray QByteArray::simplified() const
+{
+ return simplified_helper(*this);
+}
+
QT_END_NAMESPACE
diff --git a/src/corelib/tools/qstringalgorithms_p.h b/src/corelib/tools/qstringalgorithms_p.h
new file mode 100644
index 0000000000..2911055f6a
--- /dev/null
+++ b/src/corelib/tools/qstringalgorithms_p.h
@@ -0,0 +1,156 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Intel Corporation.
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QSTRINGALGORITHMS_P_H
+#define QSTRINGALGORITHMS_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists for the convenience
+// of internal files. This header file may change from version to version
+// without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include "qstring.h"
+#include "qlocale_p.h" // for ascii_isspace
+
+QT_BEGIN_NAMESPACE
+
+template <typename StringType> struct QStringAlgorithms
+{
+ typedef typename StringType::value_type Char;
+ typedef typename StringType::size_type size_type;
+ typedef typename QtPrivate::remove_cv<StringType>::type NakedStringType;
+ static const bool isConst = QtPrivate::is_const<StringType>::value;
+
+ static inline bool isSpace(char ch) { return ascii_isspace(ch); }
+ static inline bool isSpace(QChar ch) { return ch.isSpace(); }
+
+ // Surrogate pairs are not handled in either of the functions below. That is
+ // not a problem because there are no space characters (Zs, Zl, Zp) outside the
+ // Basic Multilingual Plane.
+
+ static inline StringType trimmed_helper_inplace(NakedStringType &str, const Char *begin, const Char *end)
+ {
+ // in-place trimming:
+ Char *data = const_cast<Char *>(str.cbegin());
+ if (begin != data)
+ memmove(data, begin, (end - begin) * sizeof(Char));
+ str.resize(end - begin);
+ return qMove(str);
+ }
+
+ static inline StringType trimmed_helper_inplace(const NakedStringType &, const Char *, const Char *)
+ {
+ // can't happen
+ Q_UNREACHABLE();
+ return StringType();
+ }
+
+ static inline void trimmed_helper_positions(const Char *&begin, const Char *&end)
+ {
+ // skip white space from start
+ while (begin < end && isSpace(*begin))
+ begin++;
+ // skip white space from end
+ if (begin < end) {
+ while (begin < end && isSpace(end[-1]))
+ end--;
+ }
+ }
+
+ static inline StringType trimmed_helper(StringType &str)
+ {
+ const Char *begin = str.cbegin();
+ const Char *end = str.cend();
+ trimmed_helper_positions(begin, end);
+
+ if (begin == str.cbegin() && end == str.cend())
+ return str;
+ if (begin == end)
+ return StringType();
+ if (!isConst && str.isDetached())
+ return trimmed_helper_inplace(str, begin, end);
+ return StringType(begin, end - begin);
+ }
+
+ static inline StringType simplified_helper(StringType &str)
+ {
+ if (str.isEmpty())
+ return str;
+ const Char *src = str.cbegin();
+ const Char *end = str.cend();
+ NakedStringType result = isConst ?
+ StringType(str.size(), Qt::Uninitialized) :
+ qMove(str);
+
+ Char *dst = const_cast<Char *>(result.cbegin());
+ Char *ptr = dst;
+ forever {
+ while (src != end && isSpace(*src))
+ ++src;
+ while (src != end && !isSpace(*src))
+ *ptr++ = *src++;
+ if (src != end)
+ *ptr++ = QChar::Space;
+ else
+ break;
+ }
+ if (ptr != dst && ptr[-1] == QChar::Space)
+ --ptr;
+
+ int newlen = ptr - dst;
+ if (isConst && newlen == str.size()) {
+ // nothing happened, return the original
+ return str;
+ }
+ result.resize(newlen);
+ return result;
+ }
+};
+
+QT_END_NAMESPACE
+
+#endif // QSTRINGALGORITHMS_P_H
diff --git a/src/corelib/tools/qstringiterator_p.h b/src/corelib/tools/qstringiterator_p.h
index b80193b790..3f431daf6f 100644
--- a/src/corelib/tools/qstringiterator_p.h
+++ b/src/corelib/tools/qstringiterator_p.h
@@ -74,6 +74,11 @@ public:
return pos;
}
+ inline int index() const
+ {
+ return pos - i;
+ }
+
inline void setPosition(QString::const_iterator position)
{
Q_ASSERT_X(i <= position && position <= e, Q_FUNC_INFO, "position out of bounds");
diff --git a/src/corelib/tools/qstringlist.cpp b/src/corelib/tools/qstringlist.cpp
index 4e5393e0b0..192306c059 100644
--- a/src/corelib/tools/qstringlist.cpp
+++ b/src/corelib/tools/qstringlist.cpp
@@ -516,28 +516,6 @@ QString QtPrivate::QStringList_join(const QStringList *that, const QChar *sep, i
the latter string list.
*/
-#ifndef QT_NO_DATASTREAM
-/*!
- \fn QDataStream &operator>>(QDataStream &in, QStringList &list)
- \relates QStringList
-
- Reads a string list from the given \a in stream into the specified
- \a list.
-
- \sa {Serializing Qt Data Types}
-*/
-
-/*!
- \fn QDataStream &operator<<(QDataStream &out, const QStringList &list)
- \relates QStringList
-
- Writes the given string \a list to the specified \a out stream.
-
- \sa {Serializing Qt Data Types}
-*/
-#endif // QT_NO_DATASTREAM
-
-
#ifndef QT_NO_REGEXP
static int indexOfMutating(const QStringList *that, QRegExp &rx, int from)
{
@@ -704,29 +682,6 @@ int QtPrivate::QStringList_lastIndexOf(const QStringList *that, const QRegularEx
#endif // QT_BOOTSTRAPPED
/*!
- \fn int QStringList::indexOf(const QString &value, int from = 0) const
-
- Returns the index position of the first occurrence of \a value in
- the list, searching forward from index position \a from. Returns
- -1 if no item matched.
-
- \sa lastIndexOf(), contains(), QList::indexOf()
-*/
-
-/*!
- \fn int QStringList::lastIndexOf(const QString &value, int from = -1) const
-
- Returns the index position of the last occurrence of \a value in
- the list, searching backward from index position \a from. If \a
- from is -1 (the default), the search starts at the last item.
- Returns -1 if no item matched.
-
- By default, this function is case sensitive.
-
- \sa indexOf(), QList::lastIndexOf()
-*/
-
-/*!
\fn int QStringList::removeDuplicates()
\since 4.5
diff --git a/src/corelib/tools/qstringlist.h b/src/corelib/tools/qstringlist.h
index b24a261a7c..f82981b9dc 100644
--- a/src/corelib/tools/qstringlist.h
+++ b/src/corelib/tools/qstringlist.h
@@ -31,33 +31,70 @@
**
****************************************************************************/
+#include <QtCore/qlist.h>
+
#ifndef QSTRINGLIST_H
#define QSTRINGLIST_H
#include <QtCore/qalgorithms.h>
-#include <QtCore/qdatastream.h>
-#include <QtCore/qlist.h>
#include <QtCore/qregexp.h>
#include <QtCore/qstring.h>
#include <QtCore/qstringmatcher.h>
QT_BEGIN_NAMESPACE
-
class QRegExp;
class QRegularExpression;
typedef QListIterator<QString> QStringListIterator;
typedef QMutableListIterator<QString> QMutableStringListIterator;
+class QStringList;
+
+#ifdef Q_QDOC
+class QStringList : public QList<QString>
+#else
+template <> struct QListSpecialMethods<QString>
+#endif
+{
+public:
+ inline void sort(Qt::CaseSensitivity cs = Qt::CaseSensitive);
+ inline int removeDuplicates();
+
+ inline QString join(const QString &sep) const;
+ inline QString join(QChar sep) const;
+
+ inline QStringList filter(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
+ inline QStringList &replaceInStrings(const QString &before, const QString &after, Qt::CaseSensitivity cs = Qt::CaseSensitive);
+
+#ifndef QT_NO_REGEXP
+ inline QStringList filter(const QRegExp &rx) const;
+ inline QStringList &replaceInStrings(const QRegExp &rx, const QString &after);
+#endif
+
+#ifndef QT_BOOTSTRAPPED
+#ifndef QT_NO_REGULAREXPRESSION
+ inline QStringList filter(const QRegularExpression &re) const;
+ inline QStringList &replaceInStrings(const QRegularExpression &re, const QString &after);
+#endif // QT_NO_REGULAREXPRESSION
+#endif // QT_BOOTSTRAPPED
+
+#ifndef Q_QDOC
+private:
+ inline QStringList *self();
+ inline const QStringList *self() const;
+};
+
+// ### Qt6: check if there's a better way
class QStringList : public QList<QString>
{
+#endif
public:
- inline QStringList() { }
+ inline QStringList() Q_DECL_NOTHROW { }
inline explicit QStringList(const QString &i) { append(i); }
inline QStringList(const QList<QString> &l) : QList<QString>(l) { }
#ifdef Q_COMPILER_RVALUE_REFS
- inline QStringList(QList<QString> &&l) : QList<QString>(std::move(l)) { }
+ inline QStringList(QList<QString> &&l) Q_DECL_NOTHROW : QList<QString>(std::move(l)) { }
#endif
#ifdef Q_COMPILER_INITIALIZER_LISTS
inline QStringList(std::initializer_list<QString> args) : QList<QString>(args) { }
@@ -66,21 +103,12 @@ public:
QStringList &operator=(const QList<QString> &other)
{ QList<QString>::operator=(other); return *this; }
#ifdef Q_COMPILER_RVALUE_REFS
- QStringList &operator=(QList<QString> &&other)
+ QStringList &operator=(QList<QString> &&other) Q_DECL_NOTHROW
{ QList<QString>::operator=(std::move(other)); return *this; }
#endif
- inline void sort(Qt::CaseSensitivity cs = Qt::CaseSensitive);
- inline int removeDuplicates();
-
- inline QString join(const QString &sep) const;
- inline QString join(QChar sep) const;
-
- inline QStringList filter(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
inline bool contains(const QString &str, Qt::CaseSensitivity cs = Qt::CaseSensitive) const;
- inline QStringList &replaceInStrings(const QString &before, const QString &after, Qt::CaseSensitivity cs = Qt::CaseSensitive);
-
inline QStringList operator+(const QStringList &other) const
{ QStringList n = *this; n += other; return n; }
inline QStringList &operator<<(const QString &str)
@@ -91,8 +119,6 @@ public:
{ *this += l; return *this; }
#ifndef QT_NO_REGEXP
- inline QStringList filter(const QRegExp &rx) const;
- inline QStringList &replaceInStrings(const QRegExp &rx, const QString &after);
inline int indexOf(const QRegExp &rx, int from = 0) const;
inline int lastIndexOf(const QRegExp &rx, int from = -1) const;
inline int indexOf(QRegExp &rx, int from = 0) const;
@@ -101,26 +127,22 @@ public:
#ifndef QT_BOOTSTRAPPED
#ifndef QT_NO_REGULAREXPRESSION
- inline QStringList filter(const QRegularExpression &re) const;
- inline QStringList &replaceInStrings(const QRegularExpression &re, const QString &after);
inline int indexOf(const QRegularExpression &re, int from = 0) const;
inline int lastIndexOf(const QRegularExpression &re, int from = -1) const;
#endif // QT_NO_REGULAREXPRESSION
#endif // QT_BOOTSTRAPPED
-#if !defined(Q_NO_USING_KEYWORD)
using QList<QString>::indexOf;
using QList<QString>::lastIndexOf;
-#else
- inline int indexOf(const QString &str, int from = 0) const
- { return QList<QString>::indexOf(str, from); }
- inline int lastIndexOf(const QString &str, int from = -1) const
- { return QList<QString>::lastIndexOf(str, from); }
-#endif
};
Q_DECLARE_TYPEINFO(QStringList, Q_MOVABLE_TYPE);
+inline QStringList *QListSpecialMethods<QString>::self()
+{ return static_cast<QStringList *>(this); }
+inline const QStringList *QListSpecialMethods<QString>::self() const
+{ return static_cast<const QStringList *>(this); }
+
namespace QtPrivate {
void Q_CORE_EXPORT QStringList_sort(QStringList *that, Qt::CaseSensitivity cs);
int Q_CORE_EXPORT QStringList_removeDuplicates(QStringList *that);
@@ -151,29 +173,29 @@ namespace QtPrivate {
#endif // QT_BOOTSTRAPPED
}
-inline void QStringList::sort(Qt::CaseSensitivity cs)
+inline void QListSpecialMethods<QString>::sort(Qt::CaseSensitivity cs)
{
- QtPrivate::QStringList_sort(this, cs);
+ QtPrivate::QStringList_sort(self(), cs);
}
-inline int QStringList::removeDuplicates()
+inline int QListSpecialMethods<QString>::removeDuplicates()
{
- return QtPrivate::QStringList_removeDuplicates(this);
+ return QtPrivate::QStringList_removeDuplicates(self());
}
-inline QString QStringList::join(const QString &sep) const
+inline QString QListSpecialMethods<QString>::join(const QString &sep) const
{
- return QtPrivate::QStringList_join(this, sep.constData(), sep.length());
+ return QtPrivate::QStringList_join(self(), sep.constData(), sep.length());
}
-inline QString QStringList::join(QChar sep) const
+inline QString QListSpecialMethods<QString>::join(QChar sep) const
{
- return QtPrivate::QStringList_join(this, &sep, 1);
+ return QtPrivate::QStringList_join(self(), &sep, 1);
}
-inline QStringList QStringList::filter(const QString &str, Qt::CaseSensitivity cs) const
+inline QStringList QListSpecialMethods<QString>::filter(const QString &str, Qt::CaseSensitivity cs) const
{
- return QtPrivate::QStringList_filter(this, str, cs);
+ return QtPrivate::QStringList_filter(self(), str, cs);
}
inline bool QStringList::contains(const QString &str, Qt::CaseSensitivity cs) const
@@ -181,22 +203,29 @@ inline bool QStringList::contains(const QString &str, Qt::CaseSensitivity cs) co
return QtPrivate::QStringList_contains(this, str, cs);
}
-inline QStringList &QStringList::replaceInStrings(const QString &before, const QString &after, Qt::CaseSensitivity cs)
+inline QStringList &QListSpecialMethods<QString>::replaceInStrings(const QString &before, const QString &after, Qt::CaseSensitivity cs)
+{
+ QtPrivate::QStringList_replaceInStrings(self(), before, after, cs);
+ return *self();
+}
+
+inline QStringList operator+(const QList<QString> &one, const QStringList &other)
{
- QtPrivate::QStringList_replaceInStrings(this, before, after, cs);
- return *this;
+ QStringList n = one;
+ n += other;
+ return n;
}
#ifndef QT_NO_REGEXP
-inline QStringList &QStringList::replaceInStrings(const QRegExp &rx, const QString &after)
+inline QStringList &QListSpecialMethods<QString>::replaceInStrings(const QRegExp &rx, const QString &after)
{
- QtPrivate::QStringList_replaceInStrings(this, rx, after);
- return *this;
+ QtPrivate::QStringList_replaceInStrings(self(), rx, after);
+ return *self();
}
-inline QStringList QStringList::filter(const QRegExp &rx) const
+inline QStringList QListSpecialMethods<QString>::filter(const QRegExp &rx) const
{
- return QtPrivate::QStringList_filter(this, rx);
+ return QtPrivate::QStringList_filter(self(), rx);
}
inline int QStringList::indexOf(const QRegExp &rx, int from) const
@@ -222,15 +251,15 @@ inline int QStringList::lastIndexOf(QRegExp &rx, int from) const
#ifndef QT_BOOTSTRAPPED
#ifndef QT_NO_REGULAREXPRESSION
-inline QStringList &QStringList::replaceInStrings(const QRegularExpression &rx, const QString &after)
+inline QStringList &QListSpecialMethods<QString>::replaceInStrings(const QRegularExpression &rx, const QString &after)
{
- QtPrivate::QStringList_replaceInStrings(this, rx, after);
- return *this;
+ QtPrivate::QStringList_replaceInStrings(self(), rx, after);
+ return *self();
}
-inline QStringList QStringList::filter(const QRegularExpression &rx) const
+inline QStringList QListSpecialMethods<QString>::filter(const QRegularExpression &rx) const
{
- return QtPrivate::QStringList_filter(this, rx);
+ return QtPrivate::QStringList_filter(self(), rx);
}
inline int QStringList::indexOf(const QRegularExpression &rx, int from) const
@@ -245,17 +274,6 @@ inline int QStringList::lastIndexOf(const QRegularExpression &rx, int from) cons
#endif // QT_NO_REGULAREXPRESSION
#endif // QT_BOOTSTRAPPED
-#ifndef QT_NO_DATASTREAM
-inline QDataStream &operator>>(QDataStream &in, QStringList &list)
-{
- return operator>>(in, static_cast<QList<QString> &>(list));
-}
-inline QDataStream &operator<<(QDataStream &out, const QStringList &list)
-{
- return operator<<(out, static_cast<const QList<QString> &>(list));
-}
-#endif // QT_NO_DATASTREAM
-
QT_END_NAMESPACE
#endif // QSTRINGLIST_H
diff --git a/src/corelib/tools/qstringmatcher.h b/src/corelib/tools/qstringmatcher.h
index 00e5fc1587..d416831434 100644
--- a/src/corelib/tools/qstringmatcher.h
+++ b/src/corelib/tools/qstringmatcher.h
@@ -66,11 +66,6 @@ private:
QStringMatcherPrivate *d_ptr;
QString q_pattern;
Qt::CaseSensitivity q_cs;
-#ifdef Q_CC_RVCT
-// explicitly allow anonymous unions for RVCT to prevent compiler warnings
-# pragma push
-# pragma anon_unions
-#endif
struct Data {
uchar q_skiptable[256];
const QChar *uc;
@@ -80,9 +75,6 @@ private:
uint q_data[256];
Data p;
};
-#ifdef Q_CC_RVCT
-# pragma pop
-#endif
};
QT_END_NAMESPACE
diff --git a/src/corelib/tools/qtimeline.h b/src/corelib/tools/qtimeline.h
index 8e577c2651..c0b245ed8d 100644
--- a/src/corelib/tools/qtimeline.h
+++ b/src/corelib/tools/qtimeline.h
@@ -137,7 +137,7 @@ Q_SIGNALS:
);
protected:
- void timerEvent(QTimerEvent *event);
+ void timerEvent(QTimerEvent *event) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QTimeLine)
diff --git a/src/corelib/tools/qtimezone.cpp b/src/corelib/tools/qtimezone.cpp
index 8f3db74131..30c4c60167 100644
--- a/src/corelib/tools/qtimezone.cpp
+++ b/src/corelib/tools/qtimezone.cpp
@@ -56,6 +56,8 @@ static QTimeZonePrivate *newBackendTimeZone()
#else
#if defined Q_OS_MAC
return new QMacTimeZonePrivate();
+#elif defined Q_OS_ANDROID
+ return new QAndroidTimeZonePrivate();
#elif defined Q_OS_UNIX
return new QTzTimeZonePrivate();
// Registry based timezone backend not available on WinRT
@@ -81,6 +83,8 @@ static QTimeZonePrivate *newBackendTimeZone(const QByteArray &ianaId)
#else
#if defined Q_OS_MAC
return new QMacTimeZonePrivate(ianaId);
+#elif defined Q_OS_ANDROID
+ return new QAndroidTimeZonePrivate(ianaId);
#elif defined Q_OS_UNIX
return new QTzTimeZonePrivate(ianaId);
// Registry based timezone backend not available on WinRT
@@ -785,6 +789,29 @@ QByteArray QTimeZone::systemTimeZoneId()
}
/*!
+ \since 5.5
+ Returns a QTimeZone object that refers to the local system time, as
+ specified by systemTimeZoneId().
+
+ \sa utc()
+*/
+QTimeZone QTimeZone::systemTimeZone()
+{
+ return QTimeZone(QTimeZone::systemTimeZoneId());
+}
+
+/*!
+ \since 5.5
+ Returns a QTimeZone object that refers to UTC (Universal Time Coordinated).
+
+ \sa systemTimeZone()
+*/
+QTimeZone QTimeZone::utc()
+{
+ return QTimeZone(QTimeZonePrivate::utcQByteArray());
+}
+
+/*!
Returns \c true if a given time zone \a ianaId is available on this system.
\sa availableTimeZoneIds()
diff --git a/src/corelib/tools/qtimezone.h b/src/corelib/tools/qtimezone.h
index ffc2316b5f..e35cee6bbe 100644
--- a/src/corelib/tools/qtimezone.h
+++ b/src/corelib/tools/qtimezone.h
@@ -79,10 +79,10 @@ public:
QTimeZone &operator=(const QTimeZone &other);
#ifdef Q_COMPILER_RVALUE_REFS
- QTimeZone &operator=(QTimeZone &&other) { swap(other); return *this; }
+ QTimeZone &operator=(QTimeZone &&other) Q_DECL_NOTHROW { swap(other); return *this; }
#endif
- void swap(QTimeZone &other)
+ void swap(QTimeZone &other) Q_DECL_NOTHROW
{ d.swap(other.d); }
bool operator==(const QTimeZone &other) const;
@@ -117,6 +117,8 @@ public:
OffsetDataList transitions(const QDateTime &fromDateTime, const QDateTime &toDateTime) const;
static QByteArray systemTimeZoneId();
+ static QTimeZone systemTimeZone();
+ static QTimeZone utc();
static bool isTimeZoneIdAvailable(const QByteArray &ianaId);
diff --git a/src/corelib/tools/qtimezoneprivate_android.cpp b/src/corelib/tools/qtimezoneprivate_android.cpp
new file mode 100644
index 0000000000..9d9bfc612d
--- /dev/null
+++ b/src/corelib/tools/qtimezoneprivate_android.cpp
@@ -0,0 +1,287 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Drew Parsons <dparsons@emerall.com>
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtCore/QSet>
+#include "qtimezone.h"
+#include "qtimezoneprivate_p.h"
+
+QT_BEGIN_NAMESPACE
+
+/*
+ Private
+
+ Android implementation
+*/
+
+// Create the system default time zone
+QAndroidTimeZonePrivate::QAndroidTimeZonePrivate()
+ : QTimeZonePrivate()
+{
+ // start with system time zone
+ androidTimeZone = QJNIObjectPrivate::callStaticObjectMethod("java.util.TimeZone", "getDefault", "()Ljava/util/TimeZone;");
+ init("UTC");
+}
+
+// Create a named time zone
+QAndroidTimeZonePrivate::QAndroidTimeZonePrivate(const QByteArray &ianaId)
+ : QTimeZonePrivate()
+{
+ init(ianaId);
+}
+
+QAndroidTimeZonePrivate::QAndroidTimeZonePrivate(const QAndroidTimeZonePrivate &other)
+ : QTimeZonePrivate(other)
+{
+ androidTimeZone = other.androidTimeZone;
+ m_id = other.id();
+}
+
+QAndroidTimeZonePrivate::~QAndroidTimeZonePrivate()
+{
+}
+
+
+void QAndroidTimeZonePrivate::init(const QByteArray &ianaId)
+{
+ QJNIObjectPrivate jo_ianaId = QJNIObjectPrivate::fromString( QString::fromUtf8(ianaId) );
+ androidTimeZone = QJNIObjectPrivate::callStaticObjectMethod( "java.util.TimeZone", "getTimeZone", "(Ljava/lang/String;)Ljava/util/TimeZone;", static_cast<jstring>(jo_ianaId.object()) );
+
+ if (ianaId.isEmpty())
+ m_id = systemTimeZoneId();
+ else
+ m_id = ianaId;
+}
+
+QTimeZonePrivate *QAndroidTimeZonePrivate::clone()
+{
+ return new QAndroidTimeZonePrivate(*this);
+}
+
+
+QString QAndroidTimeZonePrivate::displayName(QTimeZone::TimeType timeType, QTimeZone::NameType nameType,
+ const QLocale &locale) const
+{
+ QString name;
+
+ if (androidTimeZone.isValid()) {
+ jboolean daylightTime = (timeType == QTimeZone::DaylightTime); // treat QTimeZone::GenericTime as QTimeZone::StandardTime
+
+ // treat all NameTypes as java TimeZone style LONG (value 1), except of course QTimeZone::ShortName which is style SHORT (value 0);
+ jint style = (nameType == QTimeZone::ShortName ? 0 : 1);
+
+ QJNIObjectPrivate jlanguage = QJNIObjectPrivate::fromString(QLocale::languageToString(locale.language()));
+ QJNIObjectPrivate jcountry = QJNIObjectPrivate::fromString(QLocale::countryToString(locale.country()));
+ QJNIObjectPrivate jvariant = QJNIObjectPrivate::fromString(QLocale::scriptToString(locale.script()));
+ QJNIObjectPrivate jlocale("java.util.Locale", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V", static_cast<jstring>(jlanguage.object()), static_cast<jstring>(jcountry.object()), static_cast<jstring>(jvariant.object()));
+
+ QJNIObjectPrivate jname = androidTimeZone.callObjectMethod("getDisplayName", "(ZILjava/util/Locale;)Ljava/lang/String;", daylightTime, style, jlocale.object());
+
+ name = jname.toString();
+ }
+
+ return name;
+}
+
+QString QAndroidTimeZonePrivate::abbreviation(qint64 atMSecsSinceEpoch) const
+{
+ if ( isDaylightTime( atMSecsSinceEpoch ) )
+ return displayName(QTimeZone::DaylightTime, QTimeZone::ShortName, QLocale() );
+ else
+ return displayName(QTimeZone::StandardTime, QTimeZone::ShortName, QLocale() );
+}
+
+int QAndroidTimeZonePrivate::offsetFromUtc(qint64 atMSecsSinceEpoch) const
+{
+ // offsetFromUtc( ) is invoked when androidTimeZone may not yet be set at startup,
+ // so a validity test is needed here
+ if ( androidTimeZone.isValid() )
+ // the java method getOffset() returns milliseconds, but QTimeZone returns seconds
+ return androidTimeZone.callMethod<jint>( "getOffset", "(J)I", static_cast<jlong>(atMSecsSinceEpoch) ) / 1000;
+ else
+ return 0;
+}
+
+int QAndroidTimeZonePrivate::standardTimeOffset(qint64 atMSecsSinceEpoch) const
+{
+ // the java method does not use a reference time
+ Q_UNUSED( atMSecsSinceEpoch );
+ if ( androidTimeZone.isValid() )
+ // the java method getRawOffset() returns milliseconds, but QTimeZone returns seconds
+ return androidTimeZone.callMethod<jint>( "getRawOffset" ) / 1000;
+ else
+ return 0;
+}
+
+int QAndroidTimeZonePrivate::daylightTimeOffset(qint64 atMSecsSinceEpoch) const
+{
+ return ( offsetFromUtc(atMSecsSinceEpoch) - standardTimeOffset(atMSecsSinceEpoch) );
+}
+
+bool QAndroidTimeZonePrivate::hasDaylightTime() const
+{
+ if ( androidTimeZone.isValid() )
+ /* note: the Java function only tests for future daylight transtions, not past */
+ return androidTimeZone.callMethod<jboolean>("useDaylightTime" );
+ else
+ return false;
+}
+
+bool QAndroidTimeZonePrivate::isDaylightTime(qint64 atMSecsSinceEpoch) const
+{
+ if ( androidTimeZone.isValid() ) {
+ QJNIObjectPrivate jDate( "java/util/Date", "(J)V", static_cast<jlong>(atMSecsSinceEpoch) );
+ return androidTimeZone.callMethod<jboolean>("inDaylightTime", "(Ljava/util/Date;)Z", jDate.object() );
+ }
+ else
+ return false;
+}
+
+QTimeZonePrivate::Data QAndroidTimeZonePrivate::data(qint64 forMSecsSinceEpoch) const
+{
+ if (androidTimeZone.isValid()) {
+ Data data;
+ data.atMSecsSinceEpoch = forMSecsSinceEpoch;
+ data.standardTimeOffset = standardTimeOffset(forMSecsSinceEpoch);
+ data.offsetFromUtc = offsetFromUtc(forMSecsSinceEpoch);
+ data.daylightTimeOffset = data.offsetFromUtc - data.standardTimeOffset;
+ data.abbreviation = abbreviation(forMSecsSinceEpoch);
+ return data;
+ } else {
+ return invalidData();
+ }
+}
+
+bool QAndroidTimeZonePrivate::hasTransitions() const
+{
+ // java.util.TimeZone does not directly provide transitions
+ return false;
+}
+
+QTimeZonePrivate::Data QAndroidTimeZonePrivate::nextTransition(qint64 afterMSecsSinceEpoch) const
+{
+ // transitions not available on Android, so return an invalid data object
+ Q_UNUSED( afterMSecsSinceEpoch );
+ return invalidData();
+}
+
+QTimeZonePrivate::Data QAndroidTimeZonePrivate::previousTransition(qint64 beforeMSecsSinceEpoch) const
+{
+ // transitions not available on Android, so return an invalid data object
+ Q_UNUSED( beforeMSecsSinceEpoch );
+ return invalidData();
+}
+
+// Since Android does not provide an API to access transitions,
+// dataForLocalTime needs to be reimplemented without direct use of transitions
+QTimeZonePrivate::Data QAndroidTimeZonePrivate::dataForLocalTime(qint64 forLocalMSecs) const
+{
+ if (!androidTimeZone.isValid()) {
+ return invalidData();
+ } else {
+ qint64 UTCepochMSecs;
+
+ // compare the UTC time with standard offset against normal daylight offset of one hour
+ qint64 standardUTCMSecs(forLocalMSecs - (standardTimeOffset(forLocalMSecs) * 1000));
+ qint64 daylightUTCMsecs;
+
+ // Check if daylight time does apply,
+ // checking also for daylight time boundaries
+ if (isDaylightTime(standardUTCMSecs)) {
+ // If daylight does apply, then standardUTCMSecs will be an hour or so ahead of the real epoch time
+ // so check that time
+ daylightUTCMsecs = standardUTCMSecs - daylightTimeOffset(standardUTCMSecs)*1000;
+ if (isDaylightTime(daylightUTCMsecs)) {
+ // daylight time confirmed
+ UTCepochMSecs = daylightUTCMsecs;
+ } else {
+ // daylight time has just finished
+ UTCepochMSecs = standardUTCMSecs;
+ }
+ } else {
+ // Standard time indicated, but check for a false negative.
+ // Would a standard one-hour daylight offset indicate daylight time?
+ daylightUTCMsecs = standardUTCMSecs - 3600000; // 3600000 MSECS_PER_HOUR
+ if (isDaylightTime(daylightUTCMsecs)) {
+ // daylight time may have just started,
+ // but double check against timezone's own daylight offset
+ // (don't necessarily assume a one-hour offset)
+ daylightUTCMsecs = standardUTCMSecs - daylightTimeOffset(daylightUTCMsecs)*1000;
+ if (isDaylightTime(daylightUTCMsecs)) {
+ // daylight time confirmed
+ UTCepochMSecs = daylightUTCMsecs;
+ } else {
+ // false positive, apply standard time after all
+ UTCepochMSecs = standardUTCMSecs;
+ }
+ } else {
+ // confirmed standard time
+ UTCepochMSecs = standardUTCMSecs;
+ }
+ }
+
+ return data(UTCepochMSecs);
+ }
+}
+
+QByteArray QAndroidTimeZonePrivate::systemTimeZoneId() const
+{
+ QJNIObjectPrivate androidSystemTimeZone = QJNIObjectPrivate::callStaticObjectMethod("java.util.TimeZone", "getDefault", "()Ljava/util/TimeZone;");
+ QJNIObjectPrivate systemTZIdAndroid = androidSystemTimeZone.callObjectMethod<jstring>("getID");
+ QByteArray systemTZid = systemTZIdAndroid.toString().toUtf8();
+
+ return systemTZid;
+}
+
+QSet<QByteArray> QAndroidTimeZonePrivate::availableTimeZoneIds() const
+{
+ QSet<QByteArray> availableTimeZoneIdList;
+ QJNIObjectPrivate androidAvailableIdList = QJNIObjectPrivate::callStaticObjectMethod("java.util.TimeZone", "getAvailableIDs", "()[Ljava/lang/String;");
+
+ QJNIEnvironmentPrivate jniEnv;
+ int androidTZcount = jniEnv->GetArrayLength( static_cast<jarray>(androidAvailableIdList.object()) );
+
+ // need separate jobject and QAndroidJniObject here so that we can delete (DeleteLocalRef) the reference to the jobject
+ // (or else the JNI reference table fills after 512 entries from GetObjectArrayElement)
+ jobject androidTZobject;
+ QJNIObjectPrivate androidTZ;
+ for (int i=0; i<androidTZcount; i++ ) {
+ androidTZobject = jniEnv->GetObjectArrayElement( static_cast<jobjectArray>( androidAvailableIdList.object() ), i );
+ androidTZ = androidTZobject;
+ availableTimeZoneIdList.insert( androidTZ.toString().toUtf8() );
+ jniEnv->DeleteLocalRef(androidTZobject);
+ }
+
+ return availableTimeZoneIdList;
+}
+
+QT_END_NAMESPACE
diff --git a/src/corelib/tools/qtimezoneprivate_p.h b/src/corelib/tools/qtimezoneprivate_p.h
index 5ba42de560..6494ffe148 100644
--- a/src/corelib/tools/qtimezoneprivate_p.h
+++ b/src/corelib/tools/qtimezoneprivate_p.h
@@ -65,6 +65,10 @@ class NSTimeZone;
#include <qt_windows.h>
#endif // Q_OS_WIN
+#ifdef Q_OS_ANDROID
+#include <QtCore/private/qjni_p.h>
+#endif
+
QT_BEGIN_NAMESPACE
class Q_CORE_EXPORT QTimeZonePrivate : public QSharedData
@@ -256,7 +260,7 @@ private:
};
#endif // QT_USE_ICU
-#if defined Q_OS_UNIX && !defined Q_OS_MAC
+#if defined Q_OS_UNIX && !defined Q_OS_MAC && !defined Q_OS_ANDROID
class Q_AUTOTEST_EXPORT QTzTimeZonePrivate Q_DECL_FINAL : public QTimeZonePrivate
{
public:
@@ -424,6 +428,50 @@ private:
};
#endif // Q_OS_WIN
+#ifdef Q_OS_ANDROID
+class QAndroidTimeZonePrivate Q_DECL_FINAL : public QTimeZonePrivate
+{
+public:
+ // Create default time zone
+ QAndroidTimeZonePrivate();
+ // Create named time zone
+ QAndroidTimeZonePrivate(const QByteArray &ianaId);
+ QAndroidTimeZonePrivate(const QAndroidTimeZonePrivate &other);
+ ~QAndroidTimeZonePrivate();
+
+ QTimeZonePrivate *clone();
+
+ QString displayName(QTimeZone::TimeType timeType, QTimeZone::NameType nameType,
+ const QLocale &locale) const Q_DECL_OVERRIDE;
+ QString abbreviation(qint64 atMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+
+ int offsetFromUtc(qint64 atMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+ int standardTimeOffset(qint64 atMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+ int daylightTimeOffset(qint64 atMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+
+ bool hasDaylightTime() const Q_DECL_OVERRIDE;
+ bool isDaylightTime(qint64 atMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+
+ Data data(qint64 forMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+
+ bool hasTransitions() const Q_DECL_OVERRIDE;
+ Data nextTransition(qint64 afterMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+ Data previousTransition(qint64 beforeMSecsSinceEpoch) const Q_DECL_OVERRIDE;
+
+ Data dataForLocalTime(qint64 forLocalMSecs) const Q_DECL_OVERRIDE;
+
+ QByteArray systemTimeZoneId() const Q_DECL_OVERRIDE;
+
+ QSet<QByteArray> availableTimeZoneIds() const Q_DECL_OVERRIDE;
+
+private:
+ void init(const QByteArray &zoneId);
+
+ QJNIObjectPrivate androidTimeZone;
+
+};
+#endif // Q_OS_ANDROID
+
QT_END_NAMESPACE
#endif // QTIMEZONEPRIVATE_P_H
diff --git a/src/corelib/tools/qtools_p.h b/src/corelib/tools/qtools_p.h
index 3876d3822c..53d5228c3b 100644
--- a/src/corelib/tools/qtools_p.h
+++ b/src/corelib/tools/qtools_p.h
@@ -46,9 +46,40 @@
//
#include "QtCore/qglobal.h"
+#include <limits>
QT_BEGIN_NAMESPACE
+namespace QtMiscUtils {
+inline char toHexUpper(uint value)
+{
+ static const char hexdigits[] = "0123456789ABCDEF";
+ return hexdigits[value & 0xF];
+}
+
+inline char toHexLower(uint value)
+{
+ static const char hexdigits[] = "0123456789abcdef";
+ return hexdigits[value & 0xF];
+}
+
+inline int fromHex(uint c)
+{
+ if ((c >= '0') && (c <= '9'))
+ return c - '0';
+ if ((c >= 'A') && (c <= 'F'))
+ return c - 'A' + 10;
+ if ((c >= 'a') && (c <= 'f'))
+ return c - 'a' + 10;
+ return -1;
+}
+}
+
+// We typically need an extra bit for qNextPowerOfTwo when determining the next allocation size.
+enum {
+ MaxAllocSize = (1 << (std::numeric_limits<int>::digits - 1)) - 1
+};
+
// implemented in qbytearray.cpp
int Q_CORE_EXPORT qAllocMore(int alloc, int extra) Q_DECL_NOTHROW;
diff --git a/src/corelib/tools/qunicodetables.cpp b/src/corelib/tools/qunicodetables.cpp
index 072e8ad920..477a0441b0 100644
--- a/src/corelib/tools/qunicodetables.cpp
+++ b/src/corelib/tools/qunicodetables.cpp
@@ -6912,44 +6912,44 @@ static const Properties uc_properties[] = {
{ 12, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 12, 0 }
};
-Q_DECL_CONST_FUNCTION static inline const Properties *qGetProp(uint ucs4)
+Q_DECL_CONST_FUNCTION static inline const Properties *qGetProp(uint ucs4) Q_DECL_NOTHROW
{
const int index = GET_PROP_INDEX(ucs4);
return uc_properties + index;
}
-Q_DECL_CONST_FUNCTION static inline const Properties *qGetProp(ushort ucs2)
+Q_DECL_CONST_FUNCTION static inline const Properties *qGetProp(ushort ucs2) Q_DECL_NOTHROW
{
const int index = GET_PROP_INDEX_UCS2(ucs2);
return uc_properties + index;
}
-Q_DECL_CONST_FUNCTION Q_CORE_EXPORT const Properties * QT_FASTCALL properties(uint ucs4)
+Q_DECL_CONST_FUNCTION Q_CORE_EXPORT const Properties * QT_FASTCALL properties(uint ucs4) Q_DECL_NOTHROW
{
return qGetProp(ucs4);
}
-Q_DECL_CONST_FUNCTION Q_CORE_EXPORT const Properties * QT_FASTCALL properties(ushort ucs2)
+Q_DECL_CONST_FUNCTION Q_CORE_EXPORT const Properties * QT_FASTCALL properties(ushort ucs2) Q_DECL_NOTHROW
{
return qGetProp(ucs2);
}
-Q_CORE_EXPORT GraphemeBreakClass QT_FASTCALL graphemeBreakClass(uint ucs4)
+Q_CORE_EXPORT GraphemeBreakClass QT_FASTCALL graphemeBreakClass(uint ucs4) Q_DECL_NOTHROW
{
return (GraphemeBreakClass)qGetProp(ucs4)->graphemeBreakClass;
}
-Q_CORE_EXPORT WordBreakClass QT_FASTCALL wordBreakClass(uint ucs4)
+Q_CORE_EXPORT WordBreakClass QT_FASTCALL wordBreakClass(uint ucs4) Q_DECL_NOTHROW
{
return (WordBreakClass)qGetProp(ucs4)->wordBreakClass;
}
-Q_CORE_EXPORT SentenceBreakClass QT_FASTCALL sentenceBreakClass(uint ucs4)
+Q_CORE_EXPORT SentenceBreakClass QT_FASTCALL sentenceBreakClass(uint ucs4) Q_DECL_NOTHROW
{
return (SentenceBreakClass)qGetProp(ucs4)->sentenceBreakClass;
}
-Q_CORE_EXPORT LineBreakClass QT_FASTCALL lineBreakClass(uint ucs4)
+Q_CORE_EXPORT LineBreakClass QT_FASTCALL lineBreakClass(uint ucs4) Q_DECL_NOTHROW
{
return (LineBreakClass)qGetProp(ucs4)->lineBreakClass;
}
diff --git a/src/corelib/tools/qunicodetables_p.h b/src/corelib/tools/qunicodetables_p.h
index 64e1ad12b5..34da53ac58 100644
--- a/src/corelib/tools/qunicodetables_p.h
+++ b/src/corelib/tools/qunicodetables_p.h
@@ -79,8 +79,8 @@ struct Properties {
ushort script : 8; /* 7 used */
};
-Q_CORE_EXPORT const Properties * QT_FASTCALL properties(uint ucs4);
-Q_CORE_EXPORT const Properties * QT_FASTCALL properties(ushort ucs2);
+Q_CORE_EXPORT const Properties * QT_FASTCALL properties(uint ucs4) Q_DECL_NOTHROW;
+Q_CORE_EXPORT const Properties * QT_FASTCALL properties(ushort ucs2) Q_DECL_NOTHROW;
enum GraphemeBreakClass {
GraphemeBreak_Other,
@@ -147,20 +147,20 @@ enum LineBreakClass {
LineBreak_BK
};
-Q_CORE_EXPORT GraphemeBreakClass QT_FASTCALL graphemeBreakClass(uint ucs4);
-inline GraphemeBreakClass graphemeBreakClass(QChar ch)
+Q_CORE_EXPORT GraphemeBreakClass QT_FASTCALL graphemeBreakClass(uint ucs4) Q_DECL_NOTHROW;
+inline GraphemeBreakClass graphemeBreakClass(QChar ch) Q_DECL_NOTHROW
{ return graphemeBreakClass(ch.unicode()); }
-Q_CORE_EXPORT WordBreakClass QT_FASTCALL wordBreakClass(uint ucs4);
-inline WordBreakClass wordBreakClass(QChar ch)
+Q_CORE_EXPORT WordBreakClass QT_FASTCALL wordBreakClass(uint ucs4) Q_DECL_NOTHROW;
+inline WordBreakClass wordBreakClass(QChar ch) Q_DECL_NOTHROW
{ return wordBreakClass(ch.unicode()); }
-Q_CORE_EXPORT SentenceBreakClass QT_FASTCALL sentenceBreakClass(uint ucs4);
-inline SentenceBreakClass sentenceBreakClass(QChar ch)
+Q_CORE_EXPORT SentenceBreakClass QT_FASTCALL sentenceBreakClass(uint ucs4) Q_DECL_NOTHROW;
+inline SentenceBreakClass sentenceBreakClass(QChar ch) Q_DECL_NOTHROW
{ return sentenceBreakClass(ch.unicode()); }
-Q_CORE_EXPORT LineBreakClass QT_FASTCALL lineBreakClass(uint ucs4);
-inline LineBreakClass lineBreakClass(QChar ch)
+Q_CORE_EXPORT LineBreakClass QT_FASTCALL lineBreakClass(uint ucs4) Q_DECL_NOTHROW;
+inline LineBreakClass lineBreakClass(QChar ch) Q_DECL_NOTHROW
{ return lineBreakClass(ch.unicode()); }
} // namespace QUnicodeTables
diff --git a/src/corelib/tools/qvector.cpp b/src/corelib/tools/qvector.cpp
index 99e1db1cab..50c90ad746 100644
--- a/src/corelib/tools/qvector.cpp
+++ b/src/corelib/tools/qvector.cpp
@@ -463,6 +463,18 @@
\sa operator<<(), prepend(), insert()
*/
+/*! \fn void QVector::append(const QVector<T> &value)
+
+ \overload
+
+ \since 5.5
+
+ Appends the items of the \a value vector to this vector.
+
+ \sa operator<<(), operator+=()
+*/
+
+
/*! \fn void QVector::prepend(const T &value)
Inserts \a value at the beginning of the vector.
diff --git a/src/corelib/tools/qvector.h b/src/corelib/tools/qvector.h
index 07c66bc393..c3d65b7d51 100644
--- a/src/corelib/tools/qvector.h
+++ b/src/corelib/tools/qvector.h
@@ -61,7 +61,7 @@ class QVector
Data *d;
public:
- inline QVector() : d(Data::sharedNull()) { }
+ inline QVector() Q_DECL_NOTHROW : d(Data::sharedNull()) { }
explicit QVector(int size);
QVector(int size, const T &t);
inline QVector(const QVector<T> &v);
@@ -128,6 +128,7 @@ public:
T &operator[](int i);
const T &operator[](int i) const;
void append(const T &t);
+ inline void append(const QVector<T> &l) { *this += l; }
void prepend(const T &t);
void insert(int i, const T &t);
void insert(int i, int n, const T &t);
@@ -327,9 +328,11 @@ inline QVector<T>::QVector(const QVector<T> &v)
} else {
if (v.d->capacityReserved) {
d = Data::allocate(v.d->alloc);
+ Q_CHECK_PTR(d);
d->capacityReserved = true;
} else {
d = Data::allocate(v.d->size);
+ Q_CHECK_PTR(d);
}
if (d->alloc) {
copyConstruct(v.d->begin(), v.d->end(), d->begin());
@@ -439,6 +442,7 @@ QVector<T>::QVector(int asize)
Q_ASSERT_X(asize >= 0, "QVector::QVector", "Size must be greater than or equal to 0.");
if (Q_LIKELY(asize > 0)) {
d = Data::allocate(asize);
+ Q_CHECK_PTR(d);
d->size = asize;
defaultConstruct(d->begin(), d->end());
} else {
@@ -452,6 +456,7 @@ QVector<T>::QVector(int asize, const T &t)
Q_ASSERT_X(asize >= 0, "QVector::QVector", "Size must be greater than or equal to 0.");
if (asize > 0) {
d = Data::allocate(asize);
+ Q_CHECK_PTR(d);
d->size = asize;
T* i = d->end();
while (i != d->begin())
@@ -467,6 +472,7 @@ QVector<T>::QVector(std::initializer_list<T> args)
{
if (args.size() > 0) {
d = Data::allocate(args.size());
+ Q_CHECK_PTR(d);
// std::initializer_list<T>::iterator is guaranteed to be
// const T* ([support.initlist]/1), so can be memcpy'ed away from by copyConstruct
copyConstruct(args.begin(), args.end(), d->begin());
@@ -707,13 +713,10 @@ bool QVector<T>::operator==(const QVector<T> &v) const
return true;
if (d->size != v.d->size)
return false;
- T* b = d->begin();
- T* i = b + d->size;
- T* j = v.d->end();
- while (i != b)
- if (!(*--i == *--j))
- return false;
- return true;
+ const T *vb = v.d->begin();
+ const T *b = d->begin();
+ const T *e = d->end();
+ return std::equal(b, e, vb);
}
template <typename T>
@@ -791,12 +794,9 @@ int QVector<T>::lastIndexOf(const T &t, int from) const
template <typename T>
bool QVector<T>::contains(const T &t) const
{
- T* b = d->begin();
- T* i = d->end();
- while (i != b)
- if (*--i == t)
- return true;
- return false;
+ const T *b = d->begin();
+ const T *e = d->end();
+ return std::find(b, e, t) != e;
}
template <typename T>
diff --git a/src/corelib/tools/qversionnumber.cpp b/src/corelib/tools/qversionnumber.cpp
index 3c8a9db086..7817cabe33 100644
--- a/src/corelib/tools/qversionnumber.cpp
+++ b/src/corelib/tools/qversionnumber.cpp
@@ -473,13 +473,7 @@ QDebug operator<<(QDebug debug, const QVersionNumber &version)
*/
uint qHash(const QVersionNumber &key, uint seed)
{
- uint hash = seed;
- for (QVector<int>::const_iterator it = key.m_segments.begin(), end = key.m_segments.end(); it != end; ++it) {
- // used to preserve order
- // see N3876 for more information
- hash ^= qHash(*it) + 0x9e3779b9 + (hash << 6) + (hash >> 2);
- }
- return hash;
+ return qHashRange(key.m_segments.begin(), key.m_segments.end(), seed);
}
QT_END_NAMESPACE
diff --git a/src/corelib/tools/qversionnumber_p.h b/src/corelib/tools/qversionnumber_p.h
index a951b2f1a0..883aae11ff 100644
--- a/src/corelib/tools/qversionnumber_p.h
+++ b/src/corelib/tools/qversionnumber_p.h
@@ -59,7 +59,7 @@ Q_CORE_EXPORT QDataStream& operator<<(QDataStream &out, const QVersionNumber &ve
Q_CORE_EXPORT QDataStream& operator>>(QDataStream &in, QVersionNumber &version);
#endif
-class Q_CORE_EXPORT QVersionNumber
+class QVersionNumber
{
public:
inline QVersionNumber() Q_DECL_NOTHROW
@@ -150,17 +150,17 @@ public:
inline int segmentCount() const Q_DECL_NOTHROW Q_REQUIRED_RESULT
{ return m_segments.size(); }
- bool isPrefixOf(const QVersionNumber &other) const Q_DECL_NOTHROW Q_REQUIRED_RESULT;
+ Q_CORE_EXPORT bool isPrefixOf(const QVersionNumber &other) const Q_DECL_NOTHROW Q_REQUIRED_RESULT;
- static int compare(const QVersionNumber &v1, const QVersionNumber &v2) Q_DECL_NOTHROW Q_REQUIRED_RESULT;
+ Q_CORE_EXPORT static int compare(const QVersionNumber &v1, const QVersionNumber &v2) Q_DECL_NOTHROW Q_REQUIRED_RESULT;
- static Q_DECL_PURE_FUNCTION QVersionNumber commonPrefix(const QVersionNumber &v1, const QVersionNumber &v2) Q_REQUIRED_RESULT;
+ Q_CORE_EXPORT static Q_DECL_PURE_FUNCTION QVersionNumber commonPrefix(const QVersionNumber &v1, const QVersionNumber &v2) Q_REQUIRED_RESULT;
- QString toString() const Q_REQUIRED_RESULT;
- static Q_DECL_PURE_FUNCTION QVersionNumber fromString(const QString &string, int *suffixIndex = 0) Q_REQUIRED_RESULT;
+ Q_CORE_EXPORT QString toString() const Q_REQUIRED_RESULT;
+ Q_CORE_EXPORT static Q_DECL_PURE_FUNCTION QVersionNumber fromString(const QString &string, int *suffixIndex = 0) Q_REQUIRED_RESULT;
private:
- static QVersionNumber normalizedImpl(QVector<int> &segs) Q_REQUIRED_RESULT;
+ Q_CORE_EXPORT static QVersionNumber normalizedImpl(QVector<int> &segs) Q_REQUIRED_RESULT;
#ifndef QT_NO_DATASTREAM
friend Q_CORE_EXPORT QDataStream& operator>>(QDataStream &in, QVersionNumber &version);
diff --git a/src/corelib/tools/tools.pri b/src/corelib/tools/tools.pri
index cef802fa76..a7fbc15bea 100644
--- a/src/corelib/tools/tools.pri
+++ b/src/corelib/tools/tools.pri
@@ -57,6 +57,7 @@ HEADERS += \
tools/qsize.h \
tools/qstack.h \
tools/qstring.h \
+ tools/qstringalgorithms_p.h \
tools/qstringbuilder.h \
tools/qstringiterator_p.h \
tools/qstringlist.h \
@@ -128,13 +129,19 @@ false: SOURCES += $$NO_PCH_SOURCES # Hack for QtCreator
OBJECTIVE_SOURCES += tools/qlocale_mac.mm \
tools/qtimezoneprivate_mac.mm \
tools/qstring_mac.mm \
- tools/qbytearray_mac.mm
+ tools/qbytearray_mac.mm \
+ tools/qdatetime_mac.mm
}
else:blackberry {
SOURCES += tools/qelapsedtimer_unix.cpp tools/qlocale_blackberry.cpp tools/qtimezoneprivate_tz.cpp
HEADERS += tools/qlocale_blackberry.h
}
-else:unix:SOURCES += tools/qelapsedtimer_unix.cpp tools/qlocale_unix.cpp tools/qtimezoneprivate_tz.cpp
+else:android {
+ SOURCES += tools/qelapsedtimer_unix.cpp tools/qlocale_unix.cpp tools/qtimezoneprivate_android.cpp
+}
+else:unix {
+ SOURCES += tools/qelapsedtimer_unix.cpp tools/qlocale_unix.cpp tools/qtimezoneprivate_tz.cpp
+}
else:win32 {
SOURCES += tools/qelapsedtimer_win.cpp tools/qlocale_win.cpp
!winrt: SOURCES += tools/qtimezoneprivate_win.cpp
@@ -207,7 +214,7 @@ INCLUDEPATH += ../3rdparty/md5 \
../3rdparty/sha3
# Note: libm should be present by default becaue this is C++
-!macx-icc:!vxworks:unix:LIBS_PRIVATE += -lm
+!macx-icc:!vxworks:!haiku:unix:LIBS_PRIVATE += -lm
TR_EXCLUDE += ../3rdparty/*
diff --git a/src/corelib/xml/qxmlstream.cpp b/src/corelib/xml/qxmlstream.cpp
index e4ee71f0b1..fe3c4049ad 100644
--- a/src/corelib/xml/qxmlstream.cpp
+++ b/src/corelib/xml/qxmlstream.cpp
@@ -2393,15 +2393,6 @@ QXmlStreamAttribute& QXmlStreamAttribute::operator=(const QXmlStreamAttribute &o
*/
/*!
- \fn void QXmlStreamAttributes::append(const QXmlStreamAttribute &attribute)
-
- Appends the given \a attribute to the end of the vector.
-
- \sa QVector::append()
-*/
-
-
-/*!
\typedef QXmlStreamNotationDeclarations
\relates QXmlStreamNotationDeclaration
diff --git a/src/corelib/xml/qxmlstream.h b/src/corelib/xml/qxmlstream.h
index 77f99c5d16..9a5756a431 100644
--- a/src/corelib/xml/qxmlstream.h
+++ b/src/corelib/xml/qxmlstream.h
@@ -125,12 +125,7 @@ public:
return !value(namespaceUri, name).isNull();
}
-#if !defined(Q_NO_USING_KEYWORD)
using QVector<QXmlStreamAttribute>::append;
-#else
- inline void append(const QXmlStreamAttribute &attribute)
- { QVector<QXmlStreamAttribute>::append(attribute); }
-#endif
};
class Q_CORE_EXPORT QXmlStreamNamespaceDeclaration {
diff --git a/src/dbus/qdbus_symbols_p.h b/src/dbus/qdbus_symbols_p.h
index 4bec3af490..cfa3442518 100644
--- a/src/dbus/qdbus_symbols_p.h
+++ b/src/dbus/qdbus_symbols_p.h
@@ -64,14 +64,90 @@ void (*qdbus_resolve_conditionally(const char *name))(); // doesn't print a warn
void (*qdbus_resolve_me(const char *name))(); // prints a warning
bool qdbus_loadLibDBus();
+//# define TRACE_DBUS_CALLS
+# ifdef TRACE_DBUS_CALLS
+namespace QtDBusCallTracing {
+struct TraceDBusCall
+{
+ struct ThreadData {
+ TraceDBusCall *ptr;
+ int level;
+ bool finishedPrinted;
+ };
+
+ static inline ThreadData &td()
+ {
+ static thread_local ThreadData value;
+ return value;
+ }
+
+ ThreadData savedData;
+ QDebug s;
+ TraceDBusCall(QDebug s, const char *fname)
+ : savedData(td()), s(s.nospace() << QByteArray(savedData.level * 3, ' ').constData() << fname)
+ {
+ if (savedData.ptr && !savedData.finishedPrinted) {
+ savedData.ptr->s << " ...unfinished";
+ savedData.ptr->s = qDebug().nospace() << QByteArray(savedData.level * 3 - 3, ' ').constData();
+ savedData.finishedPrinted = true;
+ }
+ ThreadData &data = td();
+ data.ptr = this;
+ data.level++;
+ data.finishedPrinted = false;
+ }
+ ~TraceDBusCall()
+ {
+ td() = savedData;
+ }
+
+ void operator()() { s << ")"; }
+ template <typename... Args> void operator()(const char *arg1, Args &&... args)
+ {
+ s << '"' << arg1 << '"';
+ if (sizeof...(args))
+ s << ", ";
+ operator()(args...);
+ }
+ template <typename Arg1, typename... Args> void operator()(Arg1 &&arg1, Args &&... args)
+ {
+ s << arg1;
+ if (sizeof...(args))
+ s << ", ";
+ operator()(args...);
+ }
+};
+template <typename T> T operator,(TraceDBusCall &&tc, T &&ret)
+{
+ tc.s << " = " << ret;
+ return ret;
+}
+inline const char *operator,(TraceDBusCall &&tc, const char *ret)
+{
+ tc.s << " = \"" << ret << '"';
+ return ret;
+}
+
+template <typename T> struct TraceReturn { typedef TraceDBusCall Type; };
+template <> struct TraceReturn<void> { typedef void Type; };
+}
+
+# define DEBUGCALL(name, argcall) QtDBusCallTracing::TraceDBusCall tc(qDebug(), name "("); tc argcall
+# define DEBUGRET(ret) (QtDBusCallTracing::TraceReturn<ret>::Type) tc ,
+# else
+# define DEBUGCALL(name, argcall)
+# define DEBUGRET(ret)
+# endif
+
# define DEFINEFUNC(ret, func, args, argcall, funcret) \
typedef ret (* _q_PTR_##func) args; \
static inline ret q_##func args \
{ \
static _q_PTR_##func ptr; \
+ DEBUGCALL(#func, argcall); \
if (!ptr) \
ptr = (_q_PTR_##func) qdbus_resolve_me(#func); \
- funcret ptr argcall; \
+ funcret DEBUGRET(ret) ptr argcall; \
}
#else // defined QT_LINKED_LIBDBUS
diff --git a/src/dbus/qdbusabstractinterface.h b/src/dbus/qdbusabstractinterface.h
index e01cfad36b..7ad0048246 100644
--- a/src/dbus/qdbusabstractinterface.h
+++ b/src/dbus/qdbusabstractinterface.h
@@ -56,7 +56,7 @@ class QDBusAbstractInterfacePrivate;
class Q_DBUS_EXPORT QDBusAbstractInterfaceBase: public QObject
{
public:
- int qt_metacall(QMetaObject::Call, int, void**);
+ int qt_metacall(QMetaObject::Call, int, void**) Q_DECL_OVERRIDE;
protected:
QDBusAbstractInterfaceBase(QDBusAbstractInterfacePrivate &dd, QObject *parent);
private:
@@ -136,8 +136,8 @@ protected:
const QDBusConnection &connection, QObject *parent);
QDBusAbstractInterface(QDBusAbstractInterfacePrivate &, QObject *parent);
- void connectNotify(const QMetaMethod &signal);
- void disconnectNotify(const QMetaMethod &signal);
+ void connectNotify(const QMetaMethod &signal) Q_DECL_OVERRIDE;
+ void disconnectNotify(const QMetaMethod &signal) Q_DECL_OVERRIDE;
QVariant internalPropGet(const char *propname) const;
void internalPropSet(const char *propname, const QVariant &value);
QDBusMessage internalConstCall(QDBus::CallMode mode,
diff --git a/src/dbus/qdbusargument_p.h b/src/dbus/qdbusargument_p.h
index 12039307e1..5f8c13c2c5 100644
--- a/src/dbus/qdbusargument_p.h
+++ b/src/dbus/qdbusargument_p.h
@@ -97,7 +97,7 @@ public:
class QDBusMarshaller: public QDBusArgumentPrivate
{
public:
- QDBusMarshaller(int flags) : QDBusArgumentPrivate(flags), parent(0), ba(0), closeCode(0), ok(true)
+ QDBusMarshaller(int flags) : QDBusArgumentPrivate(flags), parent(0), ba(0), closeCode(0), ok(true), skipSignature(false)
{ direction = Marshalling; }
~QDBusMarshaller();
@@ -145,6 +145,7 @@ public:
QString errorString;
char closeCode;
bool ok;
+ bool skipSignature;
private:
Q_DISABLE_COPY(QDBusMarshaller)
diff --git a/src/dbus/qdbusconnection.cpp b/src/dbus/qdbusconnection.cpp
index a46df16ac5..d25c620b58 100644
--- a/src/dbus/qdbusconnection.cpp
+++ b/src/dbus/qdbusconnection.cpp
@@ -58,18 +58,6 @@ QT_BEGIN_NAMESPACE
Q_GLOBAL_STATIC(QDBusConnectionManager, _q_manager)
-QDBusConnectionPrivate *QDBusConnectionManager::sender() const
-{
- QMutexLocker locker(&senderMutex);
- return connection(senderName);
-}
-
-void QDBusConnectionManager::setSender(const QDBusConnectionPrivate *s)
-{
- QMutexLocker locker(&senderMutex);
- senderName = (s ? s->name : QString());
-}
-
QDBusConnectionPrivate *QDBusConnectionManager::connection(const QString &name) const
{
return connectionHash.value(name, 0);
@@ -1096,29 +1084,20 @@ QDBusConnection QDBusConnection::systemBus()
return *_q_systemBus();
}
+#if QT_DEPRECATED_SINCE(5,5)
/*!
- \nonreentrant
+ \deprecated
- Returns the connection that sent the signal, if called in a slot activated
- by QDBus; otherwise it returns 0.
+ Always returns a disconnected, invalid QDBusConnection object. For the old
+ functionality of determining the sender connection, please use \ref QDBusContext.
- \note Please avoid this function. This function is not thread-safe, so if
- there's any other thread delivering a D-Bus call, this function may return
- the wrong connection. In new code, please use QDBusContext::connection()
- (see that class for a description on how to use it).
+ \sa QDBusContext
*/
QDBusConnection QDBusConnection::sender()
{
- return QDBusConnection(_q_manager()->sender());
-}
-
-/*!
- \internal
-*/
-void QDBusConnectionPrivate::setSender(const QDBusConnectionPrivate *s)
-{
- _q_manager()->setSender(s);
+ return QDBusConnection(QString());
}
+#endif
/*!
\internal
diff --git a/src/dbus/qdbusconnection.h b/src/dbus/qdbusconnection.h
index 66fb514865..76657e0b5b 100644
--- a/src/dbus/qdbusconnection.h
+++ b/src/dbus/qdbusconnection.h
@@ -1,6 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2015 Intel Corporation.
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtDBus module of the Qt Toolkit.
@@ -35,6 +36,7 @@
#define QDBUSCONNECTION_H
#include <QtDBus/qdbusmacros.h>
+#include <QtCore/qobjectdefs.h>
#include <QtCore/qstring.h>
#ifndef QT_NO_DBUS
@@ -183,7 +185,10 @@ public:
static QDBusConnection sessionBus();
static QDBusConnection systemBus();
- static QDBusConnection sender();
+#if QT_DEPRECATED_SINCE(5,5)
+ static QT_DEPRECATED_X("This function no longer works, use QDBusContext instead")
+ QDBusConnection sender();
+#endif
protected:
explicit QDBusConnection(QDBusConnectionPrivate *dd);
diff --git a/src/dbus/qdbusconnection_p.h b/src/dbus/qdbusconnection_p.h
index 00c3aced0e..85c8719fd1 100644
--- a/src/dbus/qdbusconnection_p.h
+++ b/src/dbus/qdbusconnection_p.h
@@ -253,8 +253,8 @@ private:
QString getNameOwnerNoCache(const QString &service);
protected:
- void customEvent(QEvent *e);
- void timerEvent(QTimerEvent *e);
+ void customEvent(QEvent *e) Q_DECL_OVERRIDE;
+ void timerEvent(QTimerEvent *e) Q_DECL_OVERRIDE;
public slots:
// public slots
@@ -331,8 +331,6 @@ public:
static QDBusConnectionPrivate *d(const QDBusConnection& q) { return q.d; }
static QDBusConnection q(QDBusConnectionPrivate *connection) { return QDBusConnection(connection); }
- static void setSender(const QDBusConnectionPrivate *s);
-
friend class QDBusActivateObjectEvent;
friend class QDBusCallDeliveryEvent;
};
diff --git a/src/dbus/qdbusconnectioninterface.h b/src/dbus/qdbusconnectioninterface.h
index ed267ecc79..a6b18b7dc1 100644
--- a/src/dbus/qdbusconnectioninterface.h
+++ b/src/dbus/qdbusconnectioninterface.h
@@ -106,8 +106,8 @@ Q_SIGNALS:
void NameLost(const QString &);
void NameOwnerChanged(const QString &, const QString &, const QString &);
protected:
- void connectNotify(const QMetaMethod &);
- void disconnectNotify(const QMetaMethod &);
+ void connectNotify(const QMetaMethod &) Q_DECL_OVERRIDE;
+ void disconnectNotify(const QMetaMethod &) Q_DECL_OVERRIDE;
#endif
};
diff --git a/src/dbus/qdbusconnectionmanager_p.h b/src/dbus/qdbusconnectionmanager_p.h
index d2c8282f6c..6650685180 100644
--- a/src/dbus/qdbusconnectionmanager_p.h
+++ b/src/dbus/qdbusconnectionmanager_p.h
@@ -63,9 +63,6 @@ public:
void removeConnection(const QString &name);
void setConnection(const QString &name, QDBusConnectionPrivate *c);
- QDBusConnectionPrivate *sender() const;
- void setSender(const QDBusConnectionPrivate *s);
-
mutable QMutex mutex;
private:
QHash<QString, QDBusConnectionPrivate *> connectionHash;
diff --git a/src/dbus/qdbusintegrator.cpp b/src/dbus/qdbusintegrator.cpp
index 698fb1b46c..b741e97894 100644
--- a/src/dbus/qdbusintegrator.cpp
+++ b/src/dbus/qdbusintegrator.cpp
@@ -94,6 +94,8 @@ static inline QDebug operator<<(QDebug dbg, const QThread *th)
dbg.nospace() << "QThread(ptr=" << (void*)th;
if (th && !th->objectName().isEmpty())
dbg.nospace() << ", name=" << th->objectName();
+ else if (th)
+ dbg.nospace() << ", name=" << th->metaObject()->className();
dbg.nospace() << ')';
return dbg.space();
}
@@ -399,7 +401,7 @@ static void qDBusNewConnection(DBusServer *server, DBusConnection *connection, v
QDBusConnectionPrivate *newConnection = new QDBusConnectionPrivate(serverConnection->parent());
QMutexLocker locker(&QDBusConnectionManager::instance()->mutex);
- QDBusConnectionManager::instance()->setConnection(QLatin1String("QDBusServer-") + QString::number(reinterpret_cast<qulonglong>(newConnection)), newConnection);
+ QDBusConnectionManager::instance()->setConnection(QLatin1String("QDBusServer-") + QString::number(reinterpret_cast<qulonglong>(newConnection), 16), newConnection);
serverConnection->serverConnectionNames << newConnection->name;
// setPeer does the error handling for us
@@ -986,12 +988,10 @@ void QDBusConnectionPrivate::deliverCall(QObject *object, int /*flags*/, const Q
// FIXME: save the old sender!
QDBusContextPrivate context(QDBusConnection(this), msg);
QDBusContextPrivate *old = QDBusContextPrivate::set(object, &context);
- QDBusConnectionPrivate::setSender(this);
QPointer<QObject> ptr = object;
fail = object->qt_metacall(QMetaObject::InvokeMetaMethod,
slotIdx, params.data()) >= 0;
- QDBusConnectionPrivate::setSender(0);
// the object might be deleted in the slot
if (!ptr.isNull())
QDBusContextPrivate::set(object, old);
@@ -1025,7 +1025,7 @@ QDBusConnectionPrivate::QDBusConnectionPrivate(QObject *p)
{
static const bool threads = q_dbus_threads_init_default();
if (::isDebugging == -1)
- ::isDebugging = qgetenv("QDBUS_DEBUG").toInt();
+ ::isDebugging = qEnvironmentVariableIntValue("QDBUS_DEBUG");
Q_UNUSED(threads)
#ifdef QDBUS_THREAD_DEBUG
diff --git a/src/dbus/qdbusintegrator_p.h b/src/dbus/qdbusintegrator_p.h
index 38aad9fa86..116d77cca6 100644
--- a/src/dbus/qdbusintegrator_p.h
+++ b/src/dbus/qdbusintegrator_p.h
@@ -90,7 +90,7 @@ public:
: QMetaCallEvent(0, id, 0, sender, -1), connection(c), message(msg), metaTypes(types), flags(f)
{ }
- void placeMetaCall(QObject *object)
+ void placeMetaCall(QObject *object) Q_DECL_OVERRIDE
{
QDBusConnectionPrivate::d(connection)->deliverCall(object, flags, message, metaTypes, id());
}
@@ -113,7 +113,7 @@ public:
{ }
~QDBusActivateObjectEvent();
- void placeMetaCall(QObject *);
+ void placeMetaCall(QObject *) Q_DECL_OVERRIDE;
private:
QDBusConnection connection; // just for refcounting
diff --git a/src/dbus/qdbusinterface.h b/src/dbus/qdbusinterface.h
index 04adaced88..8e6fe02f1f 100644
--- a/src/dbus/qdbusinterface.h
+++ b/src/dbus/qdbusinterface.h
@@ -55,9 +55,9 @@ public:
QObject *parent = 0);
~QDBusInterface();
- virtual const QMetaObject *metaObject() const;
- virtual void *qt_metacast(const char *);
- virtual int qt_metacall(QMetaObject::Call, int, void **);
+ virtual const QMetaObject *metaObject() const Q_DECL_OVERRIDE;
+ virtual void *qt_metacast(const char *) Q_DECL_OVERRIDE;
+ virtual int qt_metacall(QMetaObject::Call, int, void **) Q_DECL_OVERRIDE;
private:
Q_DECLARE_PRIVATE(QDBusInterface)
diff --git a/src/dbus/qdbusmarshaller.cpp b/src/dbus/qdbusmarshaller.cpp
index 0e21e2f282..60b6db6aa6 100644
--- a/src/dbus/qdbusmarshaller.cpp
+++ b/src/dbus/qdbusmarshaller.cpp
@@ -62,55 +62,65 @@ inline QString QDBusMarshaller::currentSignature()
inline void QDBusMarshaller::append(uchar arg)
{
- qIterAppend(&iterator, ba, DBUS_TYPE_BYTE, &arg);
+ if (!skipSignature)
+ qIterAppend(&iterator, ba, DBUS_TYPE_BYTE, &arg);
}
inline void QDBusMarshaller::append(bool arg)
{
dbus_bool_t cast = arg;
- qIterAppend(&iterator, ba, DBUS_TYPE_BOOLEAN, &cast);
+ if (!skipSignature)
+ qIterAppend(&iterator, ba, DBUS_TYPE_BOOLEAN, &cast);
}
inline void QDBusMarshaller::append(short arg)
{
- qIterAppend(&iterator, ba, DBUS_TYPE_INT16, &arg);
+ if (!skipSignature)
+ qIterAppend(&iterator, ba, DBUS_TYPE_INT16, &arg);
}
inline void QDBusMarshaller::append(ushort arg)
{
- qIterAppend(&iterator, ba, DBUS_TYPE_UINT16, &arg);
+ if (!skipSignature)
+ qIterAppend(&iterator, ba, DBUS_TYPE_UINT16, &arg);
}
inline void QDBusMarshaller::append(int arg)
{
- qIterAppend(&iterator, ba, DBUS_TYPE_INT32, &arg);
+ if (!skipSignature)
+ qIterAppend(&iterator, ba, DBUS_TYPE_INT32, &arg);
}
inline void QDBusMarshaller::append(uint arg)
{
- qIterAppend(&iterator, ba, DBUS_TYPE_UINT32, &arg);
+ if (!skipSignature)
+ qIterAppend(&iterator, ba, DBUS_TYPE_UINT32, &arg);
}
inline void QDBusMarshaller::append(qlonglong arg)
{
- qIterAppend(&iterator, ba, DBUS_TYPE_INT64, &arg);
+ if (!skipSignature)
+ qIterAppend(&iterator, ba, DBUS_TYPE_INT64, &arg);
}
inline void QDBusMarshaller::append(qulonglong arg)
{
- qIterAppend(&iterator, ba, DBUS_TYPE_UINT64, &arg);
+ if (!skipSignature)
+ qIterAppend(&iterator, ba, DBUS_TYPE_UINT64, &arg);
}
inline void QDBusMarshaller::append(double arg)
{
- qIterAppend(&iterator, ba, DBUS_TYPE_DOUBLE, &arg);
+ if (!skipSignature)
+ qIterAppend(&iterator, ba, DBUS_TYPE_DOUBLE, &arg);
}
void QDBusMarshaller::append(const QString &arg)
{
QByteArray data = arg.toUtf8();
const char *cdata = data.constData();
- qIterAppend(&iterator, ba, DBUS_TYPE_STRING, &cdata);
+ if (!skipSignature)
+ qIterAppend(&iterator, ba, DBUS_TYPE_STRING, &cdata);
}
inline void QDBusMarshaller::append(const QDBusObjectPath &arg)
@@ -120,7 +130,8 @@ inline void QDBusMarshaller::append(const QDBusObjectPath &arg)
error(QLatin1String("Invalid object path passed in arguments"));
} else {
const char *cdata = data.constData();
- qIterAppend(&iterator, ba, DBUS_TYPE_OBJECT_PATH, &cdata);
+ if (!skipSignature)
+ qIterAppend(&iterator, ba, DBUS_TYPE_OBJECT_PATH, &cdata);
}
}
@@ -131,7 +142,8 @@ inline void QDBusMarshaller::append(const QDBusSignature &arg)
error(QLatin1String("Invalid signature passed in arguments"));
} else {
const char *cdata = data.constData();
- qIterAppend(&iterator, ba, DBUS_TYPE_SIGNATURE, &cdata);
+ if (!skipSignature)
+ qIterAppend(&iterator, ba, DBUS_TYPE_SIGNATURE, &cdata);
}
}
@@ -141,14 +153,16 @@ inline void QDBusMarshaller::append(const QDBusUnixFileDescriptor &arg)
if (!ba && fd == -1) {
error(QLatin1String("Invalid file descriptor passed in arguments"));
} else {
- qIterAppend(&iterator, ba, DBUS_TYPE_UNIX_FD, &fd);
+ if (!skipSignature)
+ qIterAppend(&iterator, ba, DBUS_TYPE_UNIX_FD, &fd);
}
}
inline void QDBusMarshaller::append(const QByteArray &arg)
{
if (ba) {
- *ba += DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_BYTE_AS_STRING;
+ if (!skipSignature)
+ *ba += DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_BYTE_AS_STRING;
return;
}
@@ -163,7 +177,8 @@ inline void QDBusMarshaller::append(const QByteArray &arg)
inline bool QDBusMarshaller::append(const QDBusVariant &arg)
{
if (ba) {
- *ba += DBUS_TYPE_VARIANT_AS_STRING;
+ if (!skipSignature)
+ *ba += DBUS_TYPE_VARIANT_AS_STRING;
return true;
}
@@ -206,7 +221,8 @@ inline bool QDBusMarshaller::append(const QDBusVariant &arg)
inline void QDBusMarshaller::append(const QStringList &arg)
{
if (ba) {
- *ba += DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_STRING_AS_STRING;
+ if (!skipSignature)
+ *ba += DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_STRING_AS_STRING;
return;
}
@@ -288,25 +304,30 @@ void QDBusMarshaller::open(QDBusMarshaller &sub, int code, const char *signature
sub.ba = ba;
sub.ok = true;
sub.capabilities = capabilities;
+ sub.skipSignature = skipSignature;
- if (ba)
- switch (code) {
- case DBUS_TYPE_ARRAY:
- *ba += char(code);
- *ba += signature;
- // fall through
-
- case DBUS_TYPE_DICT_ENTRY:
- sub.closeCode = 0;
- break;
-
- case DBUS_TYPE_STRUCT:
- *ba += DBUS_STRUCT_BEGIN_CHAR;
- sub.closeCode = DBUS_STRUCT_END_CHAR;
- break;
+ if (ba) {
+ if (!skipSignature) {
+ switch (code) {
+ case DBUS_TYPE_ARRAY:
+ *ba += char(code);
+ *ba += signature;
+ // fall through
+
+ case DBUS_TYPE_DICT_ENTRY:
+ sub.closeCode = 0;
+ sub.skipSignature = true;
+ break;
+
+ case DBUS_TYPE_STRUCT:
+ *ba += DBUS_STRUCT_BEGIN_CHAR;
+ sub.closeCode = DBUS_STRUCT_END_CHAR;
+ break;
+ }
}
- else
+ } else {
q_dbus_message_iter_open_container(&iterator, code, signature, &sub.iterator);
+ }
}
QDBusMarshaller *QDBusMarshaller::beginCommon(int code, const char *signature)
@@ -338,7 +359,7 @@ QDBusMarshaller *QDBusMarshaller::endCommon()
void QDBusMarshaller::close()
{
if (ba) {
- if (closeCode)
+ if (!skipSignature && closeCode)
*ba += closeCode;
} else if (parent) {
q_dbus_message_iter_close_container(&parent->iterator, &iterator);
diff --git a/src/dbus/qdbusmessage.cpp b/src/dbus/qdbusmessage.cpp
index 25206b4bb7..206d6a4b2a 100644
--- a/src/dbus/qdbusmessage.cpp
+++ b/src/dbus/qdbusmessage.cpp
@@ -49,14 +49,20 @@
QT_BEGIN_NAMESPACE
+Q_STATIC_ASSERT(QDBusMessage::InvalidMessage == DBUS_MESSAGE_TYPE_INVALID);
+Q_STATIC_ASSERT(QDBusMessage::MethodCallMessage == DBUS_MESSAGE_TYPE_METHOD_CALL);
+Q_STATIC_ASSERT(QDBusMessage::ReplyMessage == DBUS_MESSAGE_TYPE_METHOD_RETURN);
+Q_STATIC_ASSERT(QDBusMessage::ErrorMessage == DBUS_MESSAGE_TYPE_ERROR);
+Q_STATIC_ASSERT(QDBusMessage::SignalMessage == DBUS_MESSAGE_TYPE_SIGNAL);
+
static inline const char *data(const QByteArray &arr)
{
return arr.isEmpty() ? 0 : arr.constData();
}
QDBusMessagePrivate::QDBusMessagePrivate()
- : msg(0), reply(0), type(DBUS_MESSAGE_TYPE_INVALID),
- timeout(-1), localReply(0), ref(1), delayedReply(false), localMessage(false),
+ : msg(0), reply(0), localReply(0), ref(1), type(QDBusMessage::InvalidMessage),
+ delayedReply(false), localMessage(false),
parametersValidated(false), autoStartService(true)
{
}
@@ -106,10 +112,10 @@ DBusMessage *QDBusMessagePrivate::toDBusMessage(const QDBusMessage &message, QDB
const QDBusMessagePrivate *d_ptr = message.d_ptr;
switch (d_ptr->type) {
- case DBUS_MESSAGE_TYPE_INVALID:
+ case QDBusMessage::InvalidMessage:
//qDebug() << "QDBusMessagePrivate::toDBusMessage" << "message is invalid";
break;
- case DBUS_MESSAGE_TYPE_METHOD_CALL:
+ case QDBusMessage::MethodCallMessage:
// only service and interface can be empty -> path and name must not be empty
if (!d_ptr->parametersValidated) {
if (!QDBusUtil::checkBusName(d_ptr->service, QDBusUtil::EmptyAllowed, error))
@@ -126,14 +132,14 @@ DBusMessage *QDBusMessagePrivate::toDBusMessage(const QDBusMessage &message, QDB
data(d_ptr->interface.toUtf8()), d_ptr->name.toUtf8());
q_dbus_message_set_auto_start( msg, d_ptr->autoStartService );
break;
- case DBUS_MESSAGE_TYPE_METHOD_RETURN:
+ case QDBusMessage::ReplyMessage:
msg = q_dbus_message_new(DBUS_MESSAGE_TYPE_METHOD_RETURN);
if (!d_ptr->localMessage) {
q_dbus_message_set_destination(msg, q_dbus_message_get_sender(d_ptr->reply));
q_dbus_message_set_reply_serial(msg, q_dbus_message_get_serial(d_ptr->reply));
}
break;
- case DBUS_MESSAGE_TYPE_ERROR:
+ case QDBusMessage::ErrorMessage:
// error name can't be empty
if (!d_ptr->parametersValidated
&& !QDBusUtil::checkErrorName(d_ptr->name, QDBusUtil::EmptyNotAllowed, error))
@@ -146,7 +152,7 @@ DBusMessage *QDBusMessagePrivate::toDBusMessage(const QDBusMessage &message, QDB
q_dbus_message_set_reply_serial(msg, q_dbus_message_get_serial(d_ptr->reply));
}
break;
- case DBUS_MESSAGE_TYPE_SIGNAL:
+ case QDBusMessage::SignalMessage:
// nothing can be empty here
if (!d_ptr->parametersValidated) {
if (!QDBusUtil::checkObjectPath(d_ptr->path, QDBusUtil::EmptyNotAllowed, error))
@@ -160,9 +166,6 @@ DBusMessage *QDBusMessagePrivate::toDBusMessage(const QDBusMessage &message, QDB
msg = q_dbus_message_new_signal(d_ptr->path.toUtf8(), d_ptr->interface.toUtf8(),
d_ptr->name.toUtf8());
break;
- default:
- Q_ASSERT(false);
- break;
}
// if we got here, the parameters validated
@@ -221,7 +224,7 @@ QDBusMessage QDBusMessagePrivate::fromDBusMessage(DBusMessage *dmsg, QDBusConnec
if (!dmsg)
return message;
- message.d_ptr->type = q_dbus_message_get_type(dmsg);
+ message.d_ptr->type = QDBusMessage::MessageType(q_dbus_message_get_type(dmsg));
message.d_ptr->path = QString::fromUtf8(q_dbus_message_get_path(dmsg));
message.d_ptr->interface = QString::fromUtf8(q_dbus_message_get_interface(dmsg));
message.d_ptr->name = message.d_ptr->type == DBUS_MESSAGE_TYPE_ERROR ?
@@ -360,7 +363,7 @@ QDBusMessage QDBusMessage::createSignal(const QString &path, const QString &inte
const QString &name)
{
QDBusMessage message;
- message.d_ptr->type = DBUS_MESSAGE_TYPE_SIGNAL;
+ message.d_ptr->type = SignalMessage;
message.d_ptr->path = path;
message.d_ptr->interface = interface;
message.d_ptr->name = name;
@@ -391,7 +394,7 @@ QDBusMessage QDBusMessage::createMethodCall(const QString &service, const QStrin
const QString &interface, const QString &method)
{
QDBusMessage message;
- message.d_ptr->type = DBUS_MESSAGE_TYPE_METHOD_CALL;
+ message.d_ptr->type = MethodCallMessage;
message.d_ptr->service = service;
message.d_ptr->path = path;
message.d_ptr->interface = interface;
@@ -407,7 +410,7 @@ QDBusMessage QDBusMessage::createMethodCall(const QString &service, const QStrin
QDBusMessage QDBusMessage::createError(const QString &name, const QString &msg)
{
QDBusMessage error;
- error.d_ptr->type = DBUS_MESSAGE_TYPE_ERROR;
+ error.d_ptr->type = ErrorMessage;
error.d_ptr->name = name;
error.d_ptr->message = msg;
@@ -437,7 +440,7 @@ QDBusMessage QDBusMessage::createReply(const QVariantList &arguments) const
{
QDBusMessage reply;
reply.setArguments(arguments);
- reply.d_ptr->type = DBUS_MESSAGE_TYPE_METHOD_RETURN;
+ reply.d_ptr->type = ReplyMessage;
if (d_ptr->msg)
reply.d_ptr->reply = q_dbus_message_ref(d_ptr->msg);
if (d_ptr->localMessage) {
@@ -606,7 +609,7 @@ QString QDBusMessage::signature() const
bool QDBusMessage::isReplyRequired() const
{
// Only method calls can have replies
- if (d_ptr->type != DBUS_MESSAGE_TYPE_METHOD_CALL)
+ if (d_ptr->type != QDBusMessage::MethodCallMessage)
return false;
if (!d_ptr->msg)
diff --git a/src/dbus/qdbusmessage_p.h b/src/dbus/qdbusmessage_p.h
index 08f6d4bbfa..2c72c1befe 100644
--- a/src/dbus/qdbusmessage_p.h
+++ b/src/dbus/qdbusmessage_p.h
@@ -72,10 +72,9 @@ public:
DBusMessage *msg;
DBusMessage *reply;
- int type;
- int timeout;
mutable QDBusMessage *localReply;
QAtomicInt ref;
+ QDBusMessage::MessageType type;
mutable uint delayedReply : 1;
uint localMessage : 1;
diff --git a/src/dbus/qdbusmetaobject.cpp b/src/dbus/qdbusmetaobject.cpp
index 9f07817df0..2d009ebfca 100644
--- a/src/dbus/qdbusmetaobject.cpp
+++ b/src/dbus/qdbusmetaobject.cpp
@@ -123,17 +123,6 @@ QDBusMetaObjectGenerator::QDBusMetaObjectGenerator(const QString &interfaceName,
static int registerComplexDBusType(const char *typeName)
{
struct QDBusRawTypeHandler {
- static void destroy(void *)
- {
- qFatal("Cannot destroy placeholder type QDBusRawType");
- }
-
- static void *create(const void *)
- {
- qFatal("Cannot create placeholder type QDBusRawType");
- return 0;
- }
-
static void destruct(void *)
{
qFatal("Cannot destruct placeholder type QDBusRawType");
@@ -146,8 +135,7 @@ static int registerComplexDBusType(const char *typeName)
}
};
- return QMetaType::registerNormalizedType(typeName, QDBusRawTypeHandler::destroy,
- QDBusRawTypeHandler::create,
+ return QMetaType::registerNormalizedType(typeName,
QDBusRawTypeHandler::destruct,
QDBusRawTypeHandler::construct,
sizeof(void *),
@@ -516,7 +504,7 @@ void QDBusMetaObjectGenerator::write(QDBusMetaObject *obj)
}
Q_ASSERT(offset == header->methodData + header->methodCount * 5);
- Q_ASSERT(parametersOffset = header->propertyData);
+ Q_ASSERT(parametersOffset == header->propertyData);
Q_ASSERT(signatureOffset == header->methodDBusData + header->methodCount * intsPerMethod);
Q_ASSERT(typeidOffset == idata.size());
offset += methodParametersDataSize;
diff --git a/src/dbus/qdbuspendingreply.h b/src/dbus/qdbuspendingreply.h
index 2f7932af2f..8558c0a51d 100644
--- a/src/dbus/qdbuspendingreply.h
+++ b/src/dbus/qdbuspendingreply.h
@@ -139,9 +139,8 @@ public:
inline int count() const { return Count; }
-#if defined(Q_QDOC) || defined(Q_NO_USING_KEYWORD)
- inline QVariant argumentAt(int index) const
- { return QDBusPendingReplyData::argumentAt(index); }
+#if defined(Q_QDOC)
+ QVariant argumentAt(int index) const;
#else
using QDBusPendingReplyData::argumentAt;
#endif
diff --git a/src/gui/Qt5GuiConfigExtras.cmake.in b/src/gui/Qt5GuiConfigExtras.cmake.in
index 9a846d435e..07869efd7d 100644
--- a/src/gui/Qt5GuiConfigExtras.cmake.in
+++ b/src/gui/Qt5GuiConfigExtras.cmake.in
@@ -57,9 +57,6 @@ set(Qt5Gui_OPENGL_LIBRARIES Qt5::Gui_GLESv2)
set(_GL_INCDIRS $$CMAKE_GL_INCDIRS)
find_path(_qt5gui_OPENGL_INCLUDE_DIR $$CMAKE_GL_HEADER_NAME
PATHS ${_GL_INCDIRS}
-!!IF !mac
- NO_DEFAULT_PATH
-!!ENDIF
)
if (NOT _qt5gui_OPENGL_INCLUDE_DIR)
message(FATAL_ERROR \"Failed to find \\\"$$CMAKE_GL_HEADER_NAME\\\" in \\\"${_GL_INCDIRS}\\\".\")
diff --git a/src/gui/accessible/qaccessible.cpp b/src/gui/accessible/qaccessible.cpp
index a7053aa3da..7abe40d30c 100644
--- a/src/gui/accessible/qaccessible.cpp
+++ b/src/gui/accessible/qaccessible.cpp
@@ -455,14 +455,13 @@ QT_BEGIN_NAMESPACE
Synonym for unsigned, used by the QAccessibleInterface cache.
*/
+#ifndef QT_NO_ACCESSIBILITY
/* accessible widgets plugin discovery stuff */
-#ifndef QT_NO_ACCESSIBILITY
#ifndef QT_NO_LIBRARY
Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader,
(QAccessibleFactoryInterface_iid, QLatin1String("/accessible")))
#endif
-#endif
// FIXME turn this into one global static struct
Q_GLOBAL_STATIC(QList<QAccessible::InterfaceFactory>, qAccessibleFactories)
@@ -475,13 +474,11 @@ QAccessible::RootObjectHandler QAccessible::rootObjectHandler = 0;
static bool cleanupAdded = false;
-#ifndef QT_NO_ACCESSIBILITY
static QPlatformAccessibility *platformAccessibility()
{
QPlatformIntegration *pfIntegration = QGuiApplicationPrivate::platformIntegration();
return pfIntegration ? pfIntegration->accessibility() : 0;
}
-#endif
/*!
\fn QAccessible::QAccessible()
@@ -497,10 +494,8 @@ static QPlatformAccessibility *platformAccessibility()
*/
void QAccessible::cleanup()
{
-#ifndef QT_NO_ACCESSIBILITY
if (QPlatformAccessibility *pfAccessibility = platformAccessibility())
pfAccessibility->cleanup();
-#endif
}
static void qAccessibleCleanup()
@@ -684,7 +679,6 @@ QAccessibleInterface *QAccessible::queryAccessibleInterface(QObject *object)
return iface;
}
}
-#ifndef QT_NO_ACCESSIBILITY
#ifndef QT_NO_LIBRARY
// Find a QAccessiblePlugin (factory) for the class name. If there's
// no entry in the cache try to create it using the plugin loader.
@@ -708,18 +702,15 @@ QAccessibleInterface *QAccessible::queryAccessibleInterface(QObject *object)
return result;
}
#endif
-#endif
mo = mo->superClass();
}
-#ifndef QT_NO_ACCESSIBILITY
if (object == qApp) {
QAccessibleInterface *appInterface = new QAccessibleApplication;
QAccessibleCache::instance()->insert(object, appInterface);
Q_ASSERT(QAccessibleCache::instance()->objectToId.contains(qApp));
return appInterface;
}
-#endif
return 0;
}
@@ -789,10 +780,8 @@ QAccessibleInterface *QAccessible::accessibleInterface(Id id)
*/
bool QAccessible::isActive()
{
-#ifndef QT_NO_ACCESSIBILITY
if (QPlatformAccessibility *pfAccessibility = platformAccessibility())
return pfAccessibility->isActive();
-#endif
return false;
}
@@ -827,10 +816,8 @@ void QAccessible::setRootObject(QObject *object)
return;
}
-#ifndef QT_NO_ACCESSIBILITY
if (QPlatformAccessibility *pfAccessibility = platformAccessibility())
pfAccessibility->setRootObject(object);
-#endif
}
/*!
@@ -863,7 +850,6 @@ void QAccessible::updateAccessibility(QAccessibleEvent *event)
if (!isActive() || !event->accessibleInterface())
return;
-#ifndef QT_NO_ACCESSIBILITY
if (event->type() == QAccessible::TableModelChanged) {
QAccessibleInterface *iface = event->accessibleInterface();
if (iface && iface->tableInterface())
@@ -877,7 +863,6 @@ void QAccessible::updateAccessibility(QAccessibleEvent *event)
if (QPlatformAccessibility *pfAccessibility = platformAccessibility())
pfAccessibility->notifyAccessibilityUpdate(event);
-#endif
}
#if QT_DEPRECATED_SINCE(5, 0)
@@ -1824,7 +1809,7 @@ QDebug operator<<(QDebug d, const QAccessibleEvent &ev)
d.nospace() << ")";
return d.space();
}
-
+#endif // QT_NO_DEBUGSTREAM
/*!
\class QAccessibleTextInterface
@@ -2626,7 +2611,14 @@ struct QAccessibleActionStrings
decreaseAction(QStringLiteral(QT_TRANSLATE_NOOP("QAccessibleActionInterface", "Decrease"))),
showMenuAction(QStringLiteral(QT_TRANSLATE_NOOP("QAccessibleActionInterface", "ShowMenu"))),
setFocusAction(QStringLiteral(QT_TRANSLATE_NOOP("QAccessibleActionInterface", "SetFocus"))),
- toggleAction(QStringLiteral(QT_TRANSLATE_NOOP("QAccessibleActionInterface", "Toggle"))) {}
+ toggleAction(QStringLiteral(QT_TRANSLATE_NOOP("QAccessibleActionInterface", "Toggle"))),
+ scrollLeftAction(QStringLiteral(QT_TRANSLATE_NOOP("QAccessibleActionInterface", "Scroll Left"))),
+ scrollRightAction(QStringLiteral(QT_TRANSLATE_NOOP("QAccessibleActionInterface", "Scroll Right"))),
+ scrollUpAction(QStringLiteral(QT_TRANSLATE_NOOP("QAccessibleActionInterface", "Scroll Up"))),
+ scrollDownAction(QStringLiteral(QT_TRANSLATE_NOOP("QAccessibleActionInterface", "Scroll Down"))),
+ previousPageAction(QStringLiteral(QT_TRANSLATE_NOOP("QAccessibleActionInterface", "Previous Page"))),
+ nextPageAction(QStringLiteral(QT_TRANSLATE_NOOP("QAccessibleActionInterface", "Next Page")))
+ {}
const QString pressAction;
const QString increaseAction;
@@ -2634,6 +2626,12 @@ struct QAccessibleActionStrings
const QString showMenuAction;
const QString setFocusAction;
const QString toggleAction;
+ const QString scrollLeftAction;
+ const QString scrollRightAction;
+ const QString scrollUpAction;
+ const QString scrollDownAction;
+ const QString previousPageAction;
+ const QString nextPageAction;
QString localizedDescription(const QString &actionName)
{
@@ -2649,6 +2647,20 @@ struct QAccessibleActionStrings
return QAccessibleActionInterface::tr("Sets the focus");
else if (actionName == toggleAction)
return QAccessibleActionInterface::tr("Toggles the state");
+ else if (actionName == scrollLeftAction)
+ return QAccessibleActionInterface::tr("Scrolls to the left");
+ else if (actionName == scrollRightAction)
+ return QAccessibleActionInterface::tr("Scrolls to the right");
+ else if (actionName == scrollUpAction)
+ return QAccessibleActionInterface::tr("Scrolls up");
+ else if (actionName == scrollDownAction)
+ return QAccessibleActionInterface::tr("Scrolls down");
+ else if (actionName == previousPageAction)
+ return QAccessibleActionInterface::tr("Goes back a page");
+ else if (actionName == nextPageAction)
+ return QAccessibleActionInterface::tr("Goes to the next page");
+
+
return QString();
}
};
@@ -2719,14 +2731,67 @@ const QString &QAccessibleActionInterface::toggleAction()
return accessibleActionStrings()->toggleAction;
}
+/*!
+ Returns the name of the scroll left default action.
+ \sa actionNames(), localizedActionName()
+ */
+const QString &QAccessibleActionInterface::scrollLeftAction()
+{
+ return accessibleActionStrings()->scrollLeftAction;
+}
+
+/*!
+ Returns the name of the scroll right default action.
+ \sa actionNames(), localizedActionName()
+ */
+const QString &QAccessibleActionInterface::scrollRightAction()
+{
+ return accessibleActionStrings()->scrollRightAction;
+}
+
+/*!
+ Returns the name of the scroll up default action.
+ \sa actionNames(), localizedActionName()
+ */
+const QString &QAccessibleActionInterface::scrollUpAction()
+{
+ return accessibleActionStrings()->scrollUpAction;
+}
+
+/*!
+ Returns the name of the scroll down default action.
+ \sa actionNames(), localizedActionName()
+ */
+const QString &QAccessibleActionInterface::scrollDownAction()
+{
+ return accessibleActionStrings()->scrollDownAction;
+}
+
+/*!
+ Returns the name of the previous page default action.
+ \sa actionNames(), localizedActionName()
+ */
+const QString &QAccessibleActionInterface::previousPageAction()
+{
+ return accessibleActionStrings()->previousPageAction;
+}
+
+/*!
+ Returns the name of the next page default action.
+ \sa actionNames(), localizedActionName()
+ */
+const QString &QAccessibleActionInterface::nextPageAction()
+{
+ return accessibleActionStrings()->nextPageAction;
+}
+
/*! \internal */
QString qAccessibleLocalizedActionDescription(const QString &actionName)
{
return accessibleActionStrings()->localizedDescription(actionName);
}
-
-#endif
+#endif // QT_NO_ACCESSIBILITY
QT_END_NAMESPACE
diff --git a/src/gui/accessible/qaccessible.h b/src/gui/accessible/qaccessible.h
index 7b5d7a1bfd..1d935cbf2d 100644
--- a/src/gui/accessible/qaccessible.h
+++ b/src/gui/accessible/qaccessible.h
@@ -635,6 +635,12 @@ public:
static const QString &showMenuAction();
static const QString &setFocusAction();
static const QString &toggleAction();
+ static const QString &scrollLeftAction();
+ static const QString &scrollRightAction();
+ static const QString &scrollUpAction();
+ static const QString &scrollDownAction();
+ static const QString &nextPageAction();
+ static const QString &previousPageAction();
};
class Q_GUI_EXPORT QAccessibleImageInterface
diff --git a/src/gui/accessible/qaccessiblecache.cpp b/src/gui/accessible/qaccessiblecache.cpp
index cf5290ed38..825ef032cb 100644
--- a/src/gui/accessible/qaccessiblecache.cpp
+++ b/src/gui/accessible/qaccessiblecache.cpp
@@ -33,6 +33,8 @@
#include "qaccessiblecache_p.h"
+#ifndef QT_NO_ACCESSIBILITY
+
QT_BEGIN_NAMESPACE
/*!
@@ -119,3 +121,5 @@ void QAccessibleCache::deleteInterface(QAccessible::Id id, QObject *obj)
}
QT_END_NAMESPACE
+
+#endif
diff --git a/src/gui/accessible/qaccessiblecache_p.h b/src/gui/accessible/qaccessiblecache_p.h
index 97d2b41bbb..9866b8fdb1 100644
--- a/src/gui/accessible/qaccessiblecache_p.h
+++ b/src/gui/accessible/qaccessiblecache_p.h
@@ -51,6 +51,8 @@
#include "qaccessible.h"
+#ifndef QT_NO_ACCESSIBILITY
+
Q_FORWARD_DECLARE_OBJC_CLASS(QT_MANGLE_NAMESPACE(QMacAccessibilityElement));
QT_BEGIN_NAMESPACE
@@ -90,4 +92,6 @@ private:
QT_END_NAMESPACE
+#endif // QT_NO_ACCESSIBILITY
+
#endif
diff --git a/src/gui/gui.pro b/src/gui/gui.pro
index af84eb7342..aa05d72a3d 100644
--- a/src/gui/gui.pro
+++ b/src/gui/gui.pro
@@ -9,11 +9,13 @@ QMAKE_DOCS = $$PWD/doc/qtgui.qdocconf
MODULE_PLUGIN_TYPES = \
platforms \
+ xcbglintegrations \
platformthemes \
platforminputcontexts \
generic \
iconengines \
- imageformats
+ imageformats \
+ egldeviceintegrations
# This is here only because the platform plugin is no module, obviously.
win32:contains(QT_CONFIG, angle)|contains(QT_CONFIG, dynamicgl) {
diff --git a/src/gui/image/qbmphandler.cpp b/src/gui/image/qbmphandler.cpp
index 21c1a2f813..bf3563932d 100644
--- a/src/gui/image/qbmphandler.cpp
+++ b/src/gui/image/qbmphandler.cpp
@@ -791,6 +791,10 @@ bool QBmpHandler::write(const QImage &img)
case QImage::Format_ARGB32:
image = img;
break;
+ case QImage::Format_Alpha8:
+ case QImage::Format_Grayscale8:
+ image = img.convertToFormat(QImage::Format_Indexed8);
+ break;
default:
if (img.hasAlphaChannel())
image = img.convertToFormat(QImage::Format_ARGB32);
diff --git a/src/gui/image/qgifhandler_p.h b/src/gui/image/qgifhandler_p.h
index 40bff19e7a..08910bf111 100644
--- a/src/gui/image/qgifhandler_p.h
+++ b/src/gui/image/qgifhandler_p.h
@@ -63,22 +63,22 @@ public:
QGifHandler();
~QGifHandler();
- bool canRead() const;
- bool read(QImage *image);
- bool write(const QImage &image);
+ bool canRead() const Q_DECL_OVERRIDE;
+ bool read(QImage *image) Q_DECL_OVERRIDE;
+ bool write(const QImage &image) Q_DECL_OVERRIDE;
- QByteArray name() const;
+ QByteArray name() const Q_DECL_OVERRIDE;
static bool canRead(QIODevice *device);
- QVariant option(ImageOption option) const;
- void setOption(ImageOption option, const QVariant &value);
- bool supportsOption(ImageOption option) const;
+ QVariant option(ImageOption option) const Q_DECL_OVERRIDE;
+ void setOption(ImageOption option, const QVariant &value) Q_DECL_OVERRIDE;
+ bool supportsOption(ImageOption option) const Q_DECL_OVERRIDE;
- int imageCount() const;
- int loopCount() const;
- int nextImageDelay() const;
- int currentImageNumber() const;
+ int imageCount() const Q_DECL_OVERRIDE;
+ int loopCount() const Q_DECL_OVERRIDE;
+ int nextImageDelay() const Q_DECL_OVERRIDE;
+ int currentImageNumber() const Q_DECL_OVERRIDE;
private:
bool imageIsComing() const;
diff --git a/src/gui/image/qicon.cpp b/src/gui/image/qicon.cpp
index 6f6bf158c8..d885729cbd 100644
--- a/src/gui/image/qicon.cpp
+++ b/src/gui/image/qicon.cpp
@@ -1024,7 +1024,7 @@ void QIcon::addFile(const QString &fileName, const QSize &size, Mode mode, State
d->engine->addFile(fileName, size, mode, state);
// Check if a "@2x" file exists and add it.
- static bool disable2xImageLoading = !qgetenv("QT_HIGHDPI_DISABLE_2X_IMAGE_LOADING").isEmpty();
+ static bool disable2xImageLoading = !qEnvironmentVariableIsEmpty("QT_HIGHDPI_DISABLE_2X_IMAGE_LOADING");
if (!disable2xImageLoading && qApp->devicePixelRatio() > 1.0) {
int dotIndex = fileName.lastIndexOf(QLatin1Char('.'));
if (dotIndex != -1) {
diff --git a/src/gui/image/qicon_p.h b/src/gui/image/qicon_p.h
index 4896aa89c0..e5ae8ec431 100644
--- a/src/gui/image/qicon_p.h
+++ b/src/gui/image/qicon_p.h
@@ -104,18 +104,18 @@ public:
QPixmapIconEngine();
QPixmapIconEngine(const QPixmapIconEngine &);
~QPixmapIconEngine();
- void paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state);
- QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state);
+ void paint(QPainter *painter, const QRect &rect, QIcon::Mode mode, QIcon::State state) Q_DECL_OVERRIDE;
+ QPixmap pixmap(const QSize &size, QIcon::Mode mode, QIcon::State state) Q_DECL_OVERRIDE;
QPixmapIconEngineEntry *bestMatch(const QSize &size, QIcon::Mode mode, QIcon::State state, bool sizeOnly);
- QSize actualSize(const QSize &size, QIcon::Mode mode, QIcon::State state);
- void addPixmap(const QPixmap &pixmap, QIcon::Mode mode, QIcon::State state);
- void addFile(const QString &fileName, const QSize &size, QIcon::Mode mode, QIcon::State state);
-
- QString key() const;
- QIconEngine *clone() const;
- bool read(QDataStream &in);
- bool write(QDataStream &out) const;
- void virtual_hook(int id, void *data);
+ QSize actualSize(const QSize &size, QIcon::Mode mode, QIcon::State state) Q_DECL_OVERRIDE;
+ void addPixmap(const QPixmap &pixmap, QIcon::Mode mode, QIcon::State state) Q_DECL_OVERRIDE;
+ void addFile(const QString &fileName, const QSize &size, QIcon::Mode mode, QIcon::State state) Q_DECL_OVERRIDE;
+
+ QString key() const Q_DECL_OVERRIDE;
+ QIconEngine *clone() const Q_DECL_OVERRIDE;
+ bool read(QDataStream &in) Q_DECL_OVERRIDE;
+ bool write(QDataStream &out) const Q_DECL_OVERRIDE;
+ void virtual_hook(int id, void *data) Q_DECL_OVERRIDE;
private:
QPixmapIconEngineEntry *tryMatch(const QSize &size, QIcon::Mode mode, QIcon::State state);
diff --git a/src/gui/image/qimage.cpp b/src/gui/image/qimage.cpp
index 887a7c29eb..38fa2df906 100644
--- a/src/gui/image/qimage.cpp
+++ b/src/gui/image/qimage.cpp
@@ -653,7 +653,8 @@ bool QImageData::checkForAlphaPixels() const
The following image formats are available in Qt. Values from Format_ARGB8565_Premultiplied
to Format_ARGB4444_Premultiplied were added in Qt 4.4. Values Format_RGBX8888, Format_RGBA8888
and Format_RGBA8888_Premultiplied were added in Qt 5.2. Values Format_BGR30, Format_A2BGR30_Premultiplied,
- Format_RGB30, Format_A2RGB30_Premultiplied were added in Qt 5.4.
+ Format_RGB30, Format_A2RGB30_Premultiplied were added in Qt 5.4. Format_Alpha8 and Format_Grayscale8
+ were added in Qt 5.5.
See the notes after the table.
\value Format_Invalid The image is invalid.
@@ -709,6 +710,8 @@ bool QImageData::checkForAlphaPixels() const
\value Format_A2BGR30_Premultiplied The image is stored using a 32-bit premultiplied ABGR format (2-10-10-10).
\value Format_RGB30 The image is stored using a 32-bit RGB format (x-10-10-10).
\value Format_A2RGB30_Premultiplied The image is stored using a 32-bit premultiplied ARGB format (2-10-10-10).
+ \value Format_Alpha8 The image is stored using an 8-bit alpha only format.
+ \value Format_Grayscale8 The image is stored using an 8-bit grayscale format.
\note Drawing into a QImage with QImage::Format_Indexed8 is not
supported.
@@ -2352,6 +2355,10 @@ bool QImage::allGray() const
return false;
}
return true;
+ case Format_Alpha8:
+ return false;
+ case Format_Grayscale8:
+ return true;
case Format_RGB32:
case Format_ARGB32:
case Format_ARGB32_Premultiplied:
@@ -2405,9 +2412,9 @@ bool QImage::allGray() const
/*!
For 32-bit images, this function is equivalent to allGray().
- For 8-bpp images, this function returns \c true if color(i) is
- QRgb(i, i, i) for all indexes of the color table; otherwise
- returns \c false.
+ For color indexed images, this function returns \c true if
+ color(i) is QRgb(i, i, i) for all indexes of the color table;
+ otherwise returns \c false.
\sa allGray(), {QImage#Image Formats}{Image Formats}
*/
@@ -2416,12 +2423,19 @@ bool QImage::isGrayscale() const
if (!d)
return false;
+ if (d->format == QImage::Format_Alpha8)
+ return false;
+
+ if (d->format == QImage::Format_Grayscale8)
+ return true;
+
switch (depth()) {
case 32:
case 24:
case 16:
return allGray();
case 8: {
+ Q_ASSERT(d->format == QImage::Format_Indexed8);
for (int i = 0; i < colorCount(); i++)
if (d->colortable.at(i) != qRgb(i,i,i))
return false;
@@ -2998,6 +3012,9 @@ QImage QImage::rgbSwapped_helper() const
case NImageFormats:
Q_ASSERT(false);
break;
+ case Format_Alpha8:
+ case Format_Grayscale8:
+ return *this;
case Format_Mono:
case Format_MonoLSB:
case Format_Indexed8:
@@ -3084,6 +3101,9 @@ void QImage::rgbSwapped_inplace()
case NImageFormats:
Q_ASSERT(false);
break;
+ case Format_Alpha8:
+ case Format_Grayscale8:
+ return;
case Format_Mono:
case Format_MonoLSB:
case Format_Indexed8:
@@ -4017,7 +4037,7 @@ void QImage::setAlphaChannel(const QImage &alphaChannel)
return;
// Slight optimization since alphachannels are returned as 8-bit grays.
- if (alphaChannel.d->depth == 8 && alphaChannel.isGrayscale()) {
+ if (alphaChannel.format() == QImage::Format_Alpha8 ||( alphaChannel.d->depth == 8 && alphaChannel.isGrayscale())) {
const uchar *src_data = alphaChannel.d->data;
const uchar *dest_data = d->data;
for (int y=0; y<h; ++y) {
@@ -4075,9 +4095,13 @@ void QImage::setAlphaChannel(const QImage &alphaChannel)
Most usecases for this function can be replaced with QPainter and
using composition modes.
+ Note this returns a color-indexed image if you want the alpha channel in
+ the alpha8 format instead use convertToFormat(Format_Alpha8) on the source
+ image.
+
\warning This is an expensive function.
- \sa setAlphaChannel(), hasAlphaChannel(),
+ \sa setAlphaChannel(), hasAlphaChannel(), convertToFormat(),
{QPixmap#Pixmap Information}{Pixmap},
{QImage#Image Transformations}{Image Transformations}
*/
@@ -4087,6 +4111,9 @@ QImage QImage::alphaChannel() const
if (!d)
return QImage();
+ if (d->format == QImage::Format_Alpha8)
+ return *this;
+
int w = d->width;
int h = d->height;
@@ -4264,6 +4291,8 @@ static QImage rotated90(const QImage &image) {
reinterpret_cast<quint16*>(out.bits()),
out.bytesPerLine());
break;
+ case QImage::Format_Alpha8:
+ case QImage::Format_Grayscale8:
case QImage::Format_Indexed8:
qt_memrotate270(reinterpret_cast<const quint8*>(image.bits()),
w, h, image.bytesPerLine(),
@@ -4330,6 +4359,8 @@ static QImage rotated270(const QImage &image) {
reinterpret_cast<quint16*>(out.bits()),
out.bytesPerLine());
break;
+ case QImage::Format_Alpha8:
+ case QImage::Format_Grayscale8:
case QImage::Format_Indexed8:
qt_memrotate90(reinterpret_cast<const quint8*>(image.bits()),
w, h, image.bytesPerLine(),
@@ -4481,24 +4512,17 @@ QImage QImage::transformed(const QTransform &matrix, Qt::TransformationMode mode
dImage.d->dpmx = dotsPerMeterX();
dImage.d->dpmy = dotsPerMeterY();
- switch (bpp) {
- // initizialize the data
- case 8:
- if (dImage.d->colortable.size() < 256) {
- // colors are left in the color table, so pick that one as transparent
- dImage.d->colortable.append(0x0);
- memset(dImage.bits(), dImage.d->colortable.size() - 1, dImage.byteCount());
- } else {
- memset(dImage.bits(), 0, dImage.byteCount());
- }
- break;
- case 1:
- case 16:
- case 24:
- case 32:
- memset(dImage.bits(), 0x00, dImage.byteCount());
- break;
- }
+ // initizialize the data
+ if (d->format == QImage::Format_Indexed8) {
+ if (dImage.d->colortable.size() < 256) {
+ // colors are left in the color table, so pick that one as transparent
+ dImage.d->colortable.append(0x0);
+ memset(dImage.bits(), dImage.d->colortable.size() - 1, dImage.byteCount());
+ } else {
+ memset(dImage.bits(), 0, dImage.byteCount());
+ }
+ } else
+ memset(dImage.bits(), 0x00, dImage.byteCount());
if (target_format >= QImage::Format_RGB32) {
// Prevent QPainter from applying devicePixelRatio corrections
@@ -4942,6 +4966,32 @@ static Q_CONSTEXPR QPixelFormat pixelformats[] = {
/*PREMULTIPLIED*/ QPixelFormat::Premultiplied,
/*INTERPRETATION*/ QPixelFormat::UnsignedInteger,
/*BYTE ORDER*/ QPixelFormat::CurrentSystemEndian),
+ //QImage::Format_Alpha8:
+ QPixelFormat(QPixelFormat::Alpha,
+ /*First*/ 0,
+ /*SECOND*/ 0,
+ /*THIRD*/ 0,
+ /*FOURTH*/ 0,
+ /*FIFTH*/ 0,
+ /*ALPHA*/ 8,
+ /*ALPHA USAGE*/ QPixelFormat::UsesAlpha,
+ /*ALPHA POSITION*/ QPixelFormat::AtBeginning,
+ /*PREMULTIPLIED*/ QPixelFormat::Premultiplied,
+ /*INTERPRETATION*/ QPixelFormat::UnsignedByte,
+ /*BYTE ORDER*/ QPixelFormat::CurrentSystemEndian),
+ //QImage::Format_Grayscale8:
+ QPixelFormat(QPixelFormat::Grayscale,
+ /*GRAY*/ 8,
+ /*SECOND*/ 0,
+ /*THIRD*/ 0,
+ /*FOURTH*/ 0,
+ /*FIFTH*/ 0,
+ /*ALPHA*/ 0,
+ /*ALPHA USAGE*/ QPixelFormat::IgnoresAlpha,
+ /*ALPHA POSITION*/ QPixelFormat::AtBeginning,
+ /*PREMULTIPLIED*/ QPixelFormat::NotPremultiplied,
+ /*INTERPRETATION*/ QPixelFormat::UnsignedByte,
+ /*BYTE ORDER*/ QPixelFormat::CurrentSystemEndian),
};
Q_STATIC_ASSERT(sizeof(pixelformats) / sizeof(*pixelformats) == QImage::NImageFormats);
diff --git a/src/gui/image/qimage.h b/src/gui/image/qimage.h
index 55b8690c77..8984af12d1 100644
--- a/src/gui/image/qimage.h
+++ b/src/gui/image/qimage.h
@@ -106,20 +106,16 @@ public:
Format_RGBX8888,
Format_RGBA8888,
Format_RGBA8888_Premultiplied,
-#if 0
- // reserved for future use
- Format_RGB15,
- Format_Grayscale16,
- Format_Grayscale8,
- Format_Grayscale4,
- Format_Grayscale4LSB,
- Format_Grayscale2,
- Format_Grayscale2LSB
-#endif
Format_BGR30,
Format_A2BGR30_Premultiplied,
Format_RGB30,
Format_A2RGB30_Premultiplied,
+ Format_Alpha8,
+ Format_Grayscale8,
+#if 0
+ // reserved for future use
+ Format_Grayscale16,
+#endif
#ifndef Q_QDOC
NImageFormats
#endif
@@ -155,7 +151,7 @@ public:
bool isNull() const;
- int devType() const;
+ int devType() const Q_DECL_OVERRIDE;
bool operator==(const QImage &) const;
bool operator!=(const QImage &) const;
@@ -288,7 +284,7 @@ public:
#endif
qint64 cacheKey() const;
- QPaintEngine *paintEngine() const;
+ QPaintEngine *paintEngine() const Q_DECL_OVERRIDE;
// Auxiliary data
int dotsPerMeterX() const;
@@ -321,7 +317,7 @@ public:
#endif
protected:
- virtual int metric(PaintDeviceMetric metric) const;
+ virtual int metric(PaintDeviceMetric metric) const Q_DECL_OVERRIDE;
QImage mirrored_helper(bool horizontal, bool vertical) const;
QImage rgbSwapped_helper() const;
void mirrored_inplace(bool horizontal, bool vertical);
@@ -353,13 +349,9 @@ inline void QImage::setPixel(const QPoint &pt, uint index_or_rgb) { setPixel(pt.
#if QT_DEPRECATED_SINCE(5, 0)
-#if defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 406)
-# pragma GCC diagnostic push
-# pragma GCC diagnostic ignored "-Wdeprecated-declarations"
-#elif defined(Q_CC_MSVC)
-# pragma warning(push)
-# pragma warning(disable: 4996)
-#endif
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_GCC("-Wdeprecated-declarations")
+QT_WARNING_DISABLE_MSVC(4996)
inline QString QImage::text(const char* key, const char* lang) const
{
@@ -431,11 +423,7 @@ inline void QImage::setText(const char* key, const char* lang, const QString &s)
setText(k, s);
}
-#if defined(Q_CC_GNU) && !defined(Q_CC_INTEL) && (__GNUC__ * 100 + __GNUC_MINOR__ >= 406)
-# pragma GCC diagnostic pop
-#elif defined(Q_CC_MSVC)
-# pragma warning(pop)
-#endif
+QT_WARNING_POP
inline int QImage::numColors() const
{
diff --git a/src/gui/image/qimage_conversions.cpp b/src/gui/image/qimage_conversions.cpp
index 858a0d9f21..2e8fc1963d 100644
--- a/src/gui/image/qimage_conversions.cpp
+++ b/src/gui/image/qimage_conversions.cpp
@@ -1861,11 +1861,154 @@ static void convert_Mono_to_Indexed8(QImageData *dest, const QImageData *src, Qt
}
}
+static void convert_Indexed8_to_Alpha8(QImageData *dest, const QImageData *src, Qt::ImageConversionFlags)
+{
+ Q_ASSERT(src->format == QImage::Format_Indexed8);
+ Q_ASSERT(dest->format == QImage::Format_Alpha8);
+
+ uchar translate[256];
+ const QVector<QRgb> &colors = src->colortable;
+ bool simpleCase = (colors.size() == 256);
+ for (int i = 0; i < colors.size(); ++i) {
+ uchar alpha = qAlpha(colors[i]);
+ translate[i] = alpha;
+ simpleCase = simpleCase && (alpha == i);
+ }
+
+ if (simpleCase)
+ memcpy(dest->data, src->data, src->bytes_per_line * src->height);
+ else {
+ int size = src->bytes_per_line * src->height;
+ for (int i = 0; i < size; ++i) {
+ dest->data[i] = translate[src->data[i]];
+ }
+ }
+}
+
+static void convert_Indexed8_to_Grayscale8(QImageData *dest, const QImageData *src, Qt::ImageConversionFlags)
+{
+ Q_ASSERT(src->format == QImage::Format_Indexed8);
+ Q_ASSERT(dest->format == QImage::Format_Grayscale8);
+
+ uchar translate[256];
+ const QVector<QRgb> &colors = src->colortable;
+ bool simpleCase = (colors.size() == 256);
+ for (int i = 0; i < colors.size(); ++i) {
+ uchar gray = qGray(colors[i]);
+ translate[i] = gray;
+ simpleCase = simpleCase && (gray == i);
+ }
+
+ if (simpleCase)
+ memcpy(dest->data, src->data, src->bytes_per_line * src->height);
+ else {
+ int size = src->bytes_per_line * src->height;
+ for (int i = 0; i < size; ++i) {
+ dest->data[i] = translate[src->data[i]];
+ }
+ }
+}
+
+static bool convert_Indexed8_to_Alpha8_inplace(QImageData *data, Qt::ImageConversionFlags)
+{
+ Q_ASSERT(data->format == QImage::Format_Indexed8);
+
+ // Just check if this is an Alpha8 in Indexed8 disguise.
+ const QVector<QRgb> &colors = data->colortable;
+ if (colors.size() != 256)
+ return false;
+ for (int i = 0; i < colors.size(); ++i) {
+ if (i != qAlpha(colors[i]))
+ return false;
+ }
+
+ data->colortable.clear();
+ data->format = QImage::Format_Alpha8;
+
+ return true;
+}
+
+static bool convert_Indexed8_to_Grayscale8_inplace(QImageData *data, Qt::ImageConversionFlags)
+{
+ Q_ASSERT(data->format == QImage::Format_Indexed8);
+
+ // Just check if this is a Grayscale8 in Indexed8 disguise.
+ const QVector<QRgb> &colors = data->colortable;
+ if (colors.size() != 256)
+ return false;
+ for (int i = 0; i < colors.size(); ++i) {
+ if (i != qGray(colors[i]))
+ return false;
+ }
+
+ data->colortable.clear();
+ data->format = QImage::Format_Grayscale8;
+
+ return true;
+}
+
+static void convert_Alpha8_to_Indexed8(QImageData *dest, const QImageData *src, Qt::ImageConversionFlags)
+{
+ Q_ASSERT(src->format == QImage::Format_Alpha8);
+ Q_ASSERT(dest->format == QImage::Format_Indexed8);
+
+ memcpy(dest->data, src->data, src->bytes_per_line * src->height);
+
+ QVector<QRgb> colors(256);
+ for (int i=0; i<256; ++i)
+ colors[i] = qRgba(0, 0, 0, i);
+
+ dest->colortable = colors;
+}
+
+static void convert_Grayscale8_to_Indexed8(QImageData *dest, const QImageData *src, Qt::ImageConversionFlags)
+{
+ Q_ASSERT(src->format == QImage::Format_Grayscale8);
+ Q_ASSERT(dest->format == QImage::Format_Indexed8);
+
+ memcpy(dest->data, src->data, src->bytes_per_line * src->height);
+
+ QVector<QRgb> colors(256);
+ for (int i=0; i<256; ++i)
+ colors[i] = qRgb(i, i, i);
+
+ dest->colortable = colors;
+}
+
+static bool convert_Alpha8_to_Indexed8_inplace(QImageData *data, Qt::ImageConversionFlags)
+{
+ Q_ASSERT(data->format == QImage::Format_Alpha8);
+
+ QVector<QRgb> colors(256);
+ for (int i=0; i<256; ++i)
+ colors[i] = qRgba(0, 0, 0, i);
+
+ data->colortable = colors;
+ data->format = QImage::Format_Indexed8;
+
+ return true;
+}
+
+static bool convert_Grayscale8_to_Indexed8_inplace(QImageData *data, Qt::ImageConversionFlags)
+{
+ Q_ASSERT(data->format == QImage::Format_Grayscale8);
+
+ QVector<QRgb> colors(256);
+ for (int i=0; i<256; ++i)
+ colors[i] = qRgb(i, i, i);
+
+ data->colortable = colors;
+ data->format = QImage::Format_Indexed8;
+
+ return true;
+}
+
+
// first index source, second dest
Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormats] =
{
{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
},
{
0,
@@ -1886,7 +2029,7 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat
0,
0,
0,
- 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0, 0
}, // Format_Mono
{
@@ -1908,7 +2051,7 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat
0,
0,
0,
- 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0, 0
}, // Format_MonoLSB
{
@@ -1930,7 +2073,9 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat
0,
0,
0,
- 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0,
+ convert_Indexed8_to_Alpha8,
+ convert_Indexed8_to_Grayscale8,
}, // Format_Indexed8
{
@@ -1957,6 +2102,7 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat
convert_RGB_to_RGB30<PixelOrderBGR>,
convert_RGB_to_RGB30<PixelOrderRGB>,
convert_RGB_to_RGB30<PixelOrderRGB>,
+ 0, 0
}, // Format_RGB32
{
@@ -1983,6 +2129,7 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat
0,
convert_RGB_to_RGB30<PixelOrderRGB>,
0,
+ 0, 0
}, // Format_ARGB32
{
@@ -2009,6 +2156,7 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat
convert_ARGB_to_A2RGB30<PixelOrderBGR>,
convert_ARGB_PM_to_RGB30<PixelOrderRGB>,
convert_ARGB_to_A2RGB30<PixelOrderRGB>,
+ 0, 0
}, // Format_ARGB32_Premultiplied
{
@@ -2030,7 +2178,7 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat
0,
0,
0,
- 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0, 0
}, // Format_RGB16
{
@@ -2052,7 +2200,7 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat
0,
0,
0,
- 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0, 0
}, // Format_ARGB8565_Premultiplied
{
@@ -2074,7 +2222,7 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat
0,
0,
0,
- 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0, 0
}, // Format_RGB666
{
@@ -2096,7 +2244,7 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat
0,
0,
0,
- 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0, 0
}, // Format_ARGB6666_Premultiplied
{
@@ -2118,7 +2266,7 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat
0,
0,
0,
- 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0, 0
}, // Format_RGB555
{
@@ -2140,7 +2288,7 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat
0,
0,
0,
- 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0, 0
}, // Format_ARGB8555_Premultiplied
{
@@ -2162,7 +2310,7 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat
0,
0,
0,
- 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0, 0
}, // Format_RGB888
{
@@ -2184,7 +2332,7 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat
0,
0,
0,
- 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0, 0
}, // Format_RGB444
{
@@ -2205,7 +2353,7 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat
0,
0,
0,
- 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0, 0
}, // Format_ARGB4444_Premultiplied
{
0,
@@ -2227,7 +2375,7 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat
0,
mask_alpha_converter_RGBx,
mask_alpha_converter_RGBx,
- 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0
}, // Format_RGBX8888
{
0,
@@ -2254,7 +2402,7 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat
0,
0,
#endif
- 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0
}, // Format_RGBA8888
{
@@ -2283,7 +2431,7 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat
0,
0,
#endif
- 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0
}, // Format_RGBA8888_Premultiplied
{
@@ -2309,7 +2457,8 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat
0,
convert_passthrough,
convert_BGR30_to_RGB30,
- convert_BGR30_to_RGB30
+ convert_BGR30_to_RGB30,
+ 0, 0
}, // Format_BGR30
{
0,
@@ -2334,7 +2483,8 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat
convert_A2RGB30_PM_to_RGB30,
0,
0,
- convert_BGR30_to_RGB30
+ convert_BGR30_to_RGB30,
+ 0, 0
}, // Format_BGR30A2_Premultiplied
{
0,
@@ -2360,6 +2510,7 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat
0,
0,
convert_passthrough,
+ 0, 0
}, // Format_RGB30
{
0,
@@ -2385,19 +2536,61 @@ Image_Converter qimage_converter_map[QImage::NImageFormats][QImage::NImageFormat
convert_BGR30_to_RGB30,
convert_A2RGB30_PM_to_RGB30,
0,
+ 0,
+ 0,
}, // Format_RGB30A2_Premultiplied
+ {
+ 0,
+ 0,
+ 0,
+ convert_Alpha8_to_Indexed8,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0, 0, 0, 0, 0, 0, 0
+ }, // Format_Alpha8
+ {
+ 0,
+ 0,
+ 0,
+ convert_Grayscale8_to_Indexed8,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0, 0, 0, 0, 0, 0, 0
+ } // Format_Grayscale8
};
InPlace_Image_Converter qimage_inplace_converter_map[QImage::NImageFormats][QImage::NImageFormats] =
{
{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
},
{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
}, // Format_Mono
{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
}, // Format_MonoLSB
{
0,
@@ -2418,7 +2611,9 @@ InPlace_Image_Converter qimage_inplace_converter_map[QImage::NImageFormats][QIma
0,
0,
0,
- 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0,
+ convert_Indexed8_to_Alpha8_inplace,
+ convert_Indexed8_to_Grayscale8_inplace,
}, // Format_Indexed8
{
0,
@@ -2439,7 +2634,7 @@ InPlace_Image_Converter qimage_inplace_converter_map[QImage::NImageFormats][QIma
0,
0,
0,
- 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0, 0
}, // Format_RGB32
{
0,
@@ -2464,7 +2659,7 @@ InPlace_Image_Converter qimage_inplace_converter_map[QImage::NImageFormats][QIma
0,
0,
convert_ARGB_to_RGBA_inplace,
- 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0, 0
}, // Format_ARGB32
{
0,
@@ -2486,34 +2681,34 @@ InPlace_Image_Converter qimage_inplace_converter_map[QImage::NImageFormats][QIma
0,
0,
convert_ARGB_to_RGBA_inplace,
- 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0
}, // Format_ARGB32_Premultiplied
{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
}, // Format_RGB16
{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
}, // Format_ARGB8565_Premultiplied
{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
}, // Format_RGB666
{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
}, // Format_ARGB6666_Premultiplied
{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
}, // Format_RGB555
{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
}, // Format_ARGB8555_Premultiplied
{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
}, // Format_RGB888
{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
}, // Format_RGB444
{
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
}, // Format_ARGB4444_Premultiplied
{
0,
@@ -2535,7 +2730,7 @@ InPlace_Image_Converter qimage_inplace_converter_map[QImage::NImageFormats][QIma
0,
convert_passthrough_inplace<QImage::Format_RGBA8888>,
convert_passthrough_inplace<QImage::Format_RGBA8888_Premultiplied>,
- 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0
}, // Format_RGBX8888
{
0,
@@ -2557,7 +2752,7 @@ InPlace_Image_Converter qimage_inplace_converter_map[QImage::NImageFormats][QIma
0,
0,
0,
- 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0
}, // Format_RGBA8888
{
0,
@@ -2579,7 +2774,7 @@ InPlace_Image_Converter qimage_inplace_converter_map[QImage::NImageFormats][QIma
0,
0,
0,
- 0, 0, 0, 0
+ 0, 0, 0, 0, 0, 0
}, // Format_RGBA8888_Premultiplied
{
0,
@@ -2604,7 +2799,8 @@ InPlace_Image_Converter qimage_inplace_converter_map[QImage::NImageFormats][QIma
0,
convert_passthrough_inplace<QImage::Format_A2BGR30_Premultiplied>,
convert_BGR30_to_RGB30_inplace,
- convert_BGR30_to_RGB30_inplace
+ convert_BGR30_to_RGB30_inplace,
+ 0, 0
}, // Format_BGR30
{
0,
@@ -2629,7 +2825,8 @@ InPlace_Image_Converter qimage_inplace_converter_map[QImage::NImageFormats][QIma
convert_A2RGB30_PM_to_RGB30_inplace,
0,
0,
- convert_BGR30_to_RGB30_inplace
+ convert_BGR30_to_RGB30_inplace,
+ 0, 0
}, // Format_BGR30A2_Premultiplied
{
0,
@@ -2654,7 +2851,8 @@ InPlace_Image_Converter qimage_inplace_converter_map[QImage::NImageFormats][QIma
convert_BGR30_to_RGB30_inplace,
convert_BGR30_to_RGB30_inplace,
0,
- convert_passthrough_inplace<QImage::Format_A2RGB30_Premultiplied>
+ convert_passthrough_inplace<QImage::Format_A2RGB30_Premultiplied>,
+ 0, 0
}, // Format_RGB30
{
0,
@@ -2679,8 +2877,61 @@ InPlace_Image_Converter qimage_inplace_converter_map[QImage::NImageFormats][QIma
0,
convert_BGR30_to_RGB30_inplace,
convert_A2RGB30_PM_to_RGB30_inplace,
- 0
+ 0,
+ 0, 0
}, // Format_RGB30A2_Premultiplied
+ {
+ 0,
+ 0,
+ 0,
+ convert_Alpha8_to_Indexed8_inplace,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0, 0
+ }, // Format_Alpha8
+ {
+ 0,
+ 0,
+ 0,
+ convert_Grayscale8_to_Indexed8_inplace,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0, 0
+ } // Format_Grayscale8
};
void qInitImageConversions()
diff --git a/src/gui/image/qimage_p.h b/src/gui/image/qimage_p.h
index 7e2d4305ef..47e68b14a5 100644
--- a/src/gui/image/qimage_p.h
+++ b/src/gui/image/qimage_p.h
@@ -131,6 +131,8 @@ inline int qt_depthForFormat(QImage::Format format)
depth = 1;
break;
case QImage::Format_Indexed8:
+ case QImage::Format_Alpha8:
+ case QImage::Format_Grayscale8:
depth = 8;
break;
case QImage::Format_RGB32:
diff --git a/src/gui/image/qimageiohandler.cpp b/src/gui/image/qimageiohandler.cpp
index 1ecf445d57..7e7f3295e9 100644
--- a/src/gui/image/qimageiohandler.cpp
+++ b/src/gui/image/qimageiohandler.cpp
@@ -153,6 +153,12 @@
\value SupportedSubTypes Image formats that support different saving
variants should return a list of supported variant names
(QList<QByteArray>) in this option.
+
+ \value OptimizedWrite. A handler which supports this option
+ is expected to turn on optimization flags when writing.
+
+ \value ProgressiveScanWrite. A handler which supports
+ this option is expected to write the image as a progressive scan image.
*/
/*!
diff --git a/src/gui/image/qimageiohandler.h b/src/gui/image/qimageiohandler.h
index 3b3c410e0c..1c906436fe 100644
--- a/src/gui/image/qimageiohandler.h
+++ b/src/gui/image/qimageiohandler.h
@@ -84,7 +84,9 @@ public:
Animation,
BackgroundColor,
ImageFormat,
- SupportedSubTypes
+ SupportedSubTypes,
+ OptimizedWrite,
+ ProgressiveScanWrite
};
virtual QVariant option(ImageOption option) const;
virtual void setOption(ImageOption option, const QVariant &value);
diff --git a/src/gui/image/qimagereader.cpp b/src/gui/image/qimagereader.cpp
index a7a08a6fee..ad84b0a091 100644
--- a/src/gui/image/qimagereader.cpp
+++ b/src/gui/image/qimagereader.cpp
@@ -1290,7 +1290,7 @@ bool QImageReader::read(QImage *image)
}
// successful read; check for "@2x" file name suffix and set device pixel ratio.
- static bool disable2xImageLoading = !qgetenv("QT_HIGHDPI_DISABLE_2X_IMAGE_LOADING").isEmpty();
+ static bool disable2xImageLoading = !qEnvironmentVariableIsEmpty("QT_HIGHDPI_DISABLE_2X_IMAGE_LOADING");
if (!disable2xImageLoading && QFileInfo(fileName()).baseName().endsWith(QLatin1String("@2x"))) {
image->setDevicePixelRatio(2.0);
}
diff --git a/src/gui/image/qimagewriter.cpp b/src/gui/image/qimagewriter.cpp
index fa261df1a5..0e03c9b215 100644
--- a/src/gui/image/qimagewriter.cpp
+++ b/src/gui/image/qimagewriter.cpp
@@ -252,6 +252,8 @@ public:
QString description;
QString text;
QByteArray subType;
+ bool optimizedWrite;
+ bool progressiveScanWrite;
// error
QImageWriter::ImageWriterError imageWriterError;
@@ -271,6 +273,8 @@ QImageWriterPrivate::QImageWriterPrivate(QImageWriter *qq)
quality = -1;
compression = 0;
gamma = 0.0;
+ optimizedWrite = false;
+ progressiveScanWrite = false;
imageWriterError = QImageWriter::UnknownError;
errorString = QImageWriter::tr("Unknown error");
@@ -555,6 +559,63 @@ QList<QByteArray> QImageWriter::supportedSubTypes() const
}
/*!
+ \since 5.5
+
+ This is an image format-specific function which sets the \a optimize flags when
+ writing images. For image formats that do not support setting an \a optimize flag,
+ this value is ignored.
+
+ The default is false.
+
+ \sa optimizedWrite()
+*/
+void QImageWriter::setOptimizedWrite(bool optimize)
+{
+ d->optimizedWrite = optimize;
+}
+
+/*!
+ \since 5.5
+
+ Returns whether optimization has been turned on for writing the image.
+
+ \sa setOptimizedWrite()
+*/
+bool QImageWriter::optimizedWrite() const
+{
+ return d->optimizedWrite;
+}
+
+/*!
+ \since 5.5
+
+ This is an image format-specific function which turns on \a progressive scanning
+ when writing images. For image formats that do not support setting a \a progressive
+ scan flag, this value is ignored.
+
+ The default is false.
+
+ \sa progressiveScanWrite()
+*/
+
+void QImageWriter::setProgressiveScanWrite(bool progressive)
+{
+ d->progressiveScanWrite = progressive;
+}
+
+/*!
+ \since 5.5
+
+ Returns whether the image should be written as a progressive image.
+
+ \sa setProgressiveScanWrite()
+*/
+bool QImageWriter::progressiveScanWrite() const
+{
+ return d->progressiveScanWrite;
+}
+
+/*!
\obsolete
Use setText() instead.
@@ -657,6 +718,10 @@ bool QImageWriter::write(const QImage &image)
d->handler->setOption(QImageIOHandler::Description, d->description);
if (!d->subType.isEmpty() && d->handler->supportsOption(QImageIOHandler::SubType))
d->handler->setOption(QImageIOHandler::SubType, d->subType);
+ if (d->handler->supportsOption(QImageIOHandler::OptimizedWrite))
+ d->handler->setOption(QImageIOHandler::OptimizedWrite, d->optimizedWrite);
+ if (d->handler->supportsOption(QImageIOHandler::ProgressiveScanWrite))
+ d->handler->setOption(QImageIOHandler::ProgressiveScanWrite, d->progressiveScanWrite);
if (!d->handler->write(image))
return false;
diff --git a/src/gui/image/qimagewriter.h b/src/gui/image/qimagewriter.h
index f458a259aa..e070d3b3d6 100644
--- a/src/gui/image/qimagewriter.h
+++ b/src/gui/image/qimagewriter.h
@@ -83,6 +83,12 @@ public:
QByteArray subType() const;
QList<QByteArray> supportedSubTypes() const;
+ void setOptimizedWrite(bool optimize);
+ bool optimizedWrite() const;
+
+ void setProgressiveScanWrite(bool progressive);
+ bool progressiveScanWrite() const;
+
// Obsolete as of 4.1
void setDescription(const QString &description);
QString description() const;
diff --git a/src/gui/image/qjpeghandler.cpp b/src/gui/image/qjpeghandler.cpp
index 9cf9947b6c..b07e1e28d3 100644
--- a/src/gui/image/qjpeghandler.cpp
+++ b/src/gui/image/qjpeghandler.cpp
@@ -86,9 +86,7 @@ struct my_error_mgr : public jpeg_error_mgr {
jmp_buf setjmp_buffer;
};
-#if defined(Q_C_CALLBACKS)
extern "C" {
-#endif
static void my_error_exit (j_common_ptr cinfo)
{
@@ -106,9 +104,7 @@ static void my_output_message(j_common_ptr cinfo)
qWarning("%s", buffer);
}
-#if defined(Q_C_CALLBACKS)
}
-#endif
static const int max_buf = 4096;
@@ -123,9 +119,7 @@ public:
my_jpeg_source_mgr(QIODevice *device);
};
-#if defined(Q_C_CALLBACKS)
extern "C" {
-#endif
static void qt_init_source(j_decompress_ptr)
{
@@ -185,9 +179,7 @@ static void qt_term_source(j_decompress_ptr cinfo)
src->device->seek(src->device->pos() - src->bytes_in_buffer);
}
-#if defined(Q_C_CALLBACKS)
}
-#endif
inline my_jpeg_source_mgr::my_jpeg_source_mgr(QIODevice *device)
{
@@ -220,7 +212,7 @@ inline static bool read_jpeg_format(QImage::Format &format, j_decompress_ptr cin
bool result = true;
switch (cinfo->output_components) {
case 1:
- format = QImage::Format_Indexed8;
+ format = QImage::Format_Grayscale8;
break;
case 3:
case 4:
@@ -240,7 +232,7 @@ static bool ensureValidImage(QImage *dest, struct jpeg_decompress_struct *info,
QImage::Format format;
switch (info->output_components) {
case 1:
- format = QImage::Format_Indexed8;
+ format = QImage::Format_Grayscale8;
break;
case 3:
case 4:
@@ -250,16 +242,9 @@ static bool ensureValidImage(QImage *dest, struct jpeg_decompress_struct *info,
return false; // unsupported format
}
- if (dest->size() != size || dest->format() != format) {
+ if (dest->size() != size || dest->format() != format)
*dest = QImage(size, format);
- if (format == QImage::Format_Indexed8) {
- dest->setColorCount(256);
- for (int i = 0; i < 256; i++)
- dest->setColor(i, qRgb(i,i,i));
- }
- }
-
return !dest->isNull();
}
@@ -465,9 +450,7 @@ public:
};
-#if defined(Q_C_CALLBACKS)
extern "C" {
-#endif
static void qt_init_destination(j_compress_ptr)
{
@@ -497,9 +480,7 @@ static void qt_term_destination(j_compress_ptr cinfo)
(*cinfo->err->error_exit)((j_common_ptr)cinfo);
}
-#if defined(Q_C_CALLBACKS)
}
-#endif
inline my_jpeg_destination_mgr::my_jpeg_destination_mgr(QIODevice *device)
{
@@ -545,11 +526,14 @@ static inline void set_text(const QImage &image, j_compress_ptr cinfo, const QSt
}
}
-static bool write_jpeg_image(const QImage &image, QIODevice *device, volatile int sourceQuality, const QString &description)
+static bool write_jpeg_image(const QImage &image, QIODevice *device, volatile int sourceQuality, const QString &description, bool optimize, bool progressive)
{
bool success = false;
const QVector<QRgb> cmap = image.colorTable();
+ if (image.format() == QImage::Format_Invalid || image.format() == QImage::Format_Alpha8)
+ return false;
+
struct jpeg_compress_struct cinfo;
JSAMPROW row_pointer[1];
row_pointer[0] = 0;
@@ -573,19 +557,23 @@ static bool write_jpeg_image(const QImage &image, QIODevice *device, volatile in
cinfo.image_width = image.width();
cinfo.image_height = image.height();
- bool gray=false;
+ bool gray = false;
switch (image.format()) {
case QImage::Format_Mono:
case QImage::Format_MonoLSB:
case QImage::Format_Indexed8:
gray = true;
- for (int i = image.colorCount(); gray && i--;) {
- gray = gray & (qRed(cmap[i]) == qGreen(cmap[i]) &&
- qRed(cmap[i]) == qBlue(cmap[i]));
+ for (int i = image.colorCount(); gray && i; i--) {
+ gray = gray & qIsGray(cmap[i-1]);
}
cinfo.input_components = gray ? 1 : 3;
cinfo.in_color_space = gray ? JCS_GRAYSCALE : JCS_RGB;
break;
+ case QImage::Format_Grayscale8:
+ gray = true;
+ cinfo.input_components = 1;
+ cinfo.in_color_space = JCS_GRAYSCALE;
+ break;
default:
cinfo.input_components = 3;
cinfo.in_color_space = JCS_RGB;
@@ -607,6 +595,11 @@ static bool write_jpeg_image(const QImage &image, QIODevice *device, volatile in
cinfo.Y_density = (image.dotsPerMeterY()+50) / 100;
}
+ if (optimize)
+ cinfo.optimize_coding = true;
+
+ if (progressive)
+ jpeg_simple_progression(&cinfo);
int quality = sourceQuality >= 0 ? qMin(int(sourceQuality),100) : 75;
jpeg_set_quality(&cinfo, quality, TRUE /* limit to baseline-JPEG values */);
@@ -670,6 +663,9 @@ static bool write_jpeg_image(const QImage &image, QIODevice *device, volatile in
}
}
break;
+ case QImage::Format_Grayscale8:
+ memcpy(row, image.constScanLine(cinfo.next_scanline), w);
+ break;
case QImage::Format_RGB888:
memcpy(row, image.constScanLine(cinfo.next_scanline), w * 3);
break;
@@ -726,7 +722,7 @@ public:
};
QJpegHandlerPrivate(QJpegHandler *qq)
- : quality(75), exifOrientation(1), iod_src(0), state(Ready), q(qq)
+ : quality(75), exifOrientation(1), iod_src(0), state(Ready), optimize(false), progressive(false), q(qq)
{}
~QJpegHandlerPrivate()
@@ -759,6 +755,9 @@ public:
State state;
+ bool optimize;
+ bool progressive;
+
QJpegHandler *q;
};
@@ -1063,7 +1062,7 @@ bool QJpegHandler::read(QImage *image)
bool QJpegHandler::write(const QImage &image)
{
- return write_jpeg_image(image, device(), d->quality, d->description);
+ return write_jpeg_image(image, device(), d->quality, d->description, d->optimize, d->progressive);
}
bool QJpegHandler::supportsOption(ImageOption option) const
@@ -1074,7 +1073,9 @@ bool QJpegHandler::supportsOption(ImageOption option) const
|| option == ClipRect
|| option == Description
|| option == Size
- || option == ImageFormat;
+ || option == ImageFormat
+ || option == OptimizedWrite
+ || option == ProgressiveScanWrite;
}
QVariant QJpegHandler::option(ImageOption option) const
@@ -1097,6 +1098,10 @@ QVariant QJpegHandler::option(ImageOption option) const
case ImageFormat:
d->readJpegHeader(device());
return d->format;
+ case OptimizedWrite:
+ return d->optimize;
+ case ProgressiveScanWrite:
+ return d->progressive;
default:
break;
}
@@ -1122,6 +1127,12 @@ void QJpegHandler::setOption(ImageOption option, const QVariant &value)
case Description:
d->description = value.toString();
break;
+ case OptimizedWrite:
+ d->optimize = value.toBool();
+ break;
+ case ProgressiveScanWrite:
+ d->progressive = value.toBool();
+ break;
default:
break;
}
diff --git a/src/gui/image/qjpeghandler_p.h b/src/gui/image/qjpeghandler_p.h
index 85b903bf44..12f2553f92 100644
--- a/src/gui/image/qjpeghandler_p.h
+++ b/src/gui/image/qjpeghandler_p.h
@@ -58,17 +58,17 @@ public:
QJpegHandler();
~QJpegHandler();
- bool canRead() const;
- bool read(QImage *image);
- bool write(const QImage &image);
+ bool canRead() const Q_DECL_OVERRIDE;
+ bool read(QImage *image) Q_DECL_OVERRIDE;
+ bool write(const QImage &image) Q_DECL_OVERRIDE;
- QByteArray name() const;
+ QByteArray name() const Q_DECL_OVERRIDE;
static bool canRead(QIODevice *device);
- QVariant option(ImageOption option) const;
- void setOption(ImageOption option, const QVariant &value);
- bool supportsOption(ImageOption option) const;
+ QVariant option(ImageOption option) const Q_DECL_OVERRIDE;
+ void setOption(ImageOption option, const QVariant &value) Q_DECL_OVERRIDE;
+ bool supportsOption(ImageOption option) const Q_DECL_OVERRIDE;
private:
QJpegHandlerPrivate *d;
diff --git a/src/gui/image/qpaintengine_pic_p.h b/src/gui/image/qpaintengine_pic_p.h
index ef8b5643d1..168be55927 100644
--- a/src/gui/image/qpaintengine_pic_p.h
+++ b/src/gui/image/qpaintengine_pic_p.h
@@ -62,10 +62,10 @@ public:
QPicturePaintEngine();
~QPicturePaintEngine();
- bool begin(QPaintDevice *pdev);
- bool end();
+ bool begin(QPaintDevice *pdev) Q_DECL_OVERRIDE;
+ bool end() Q_DECL_OVERRIDE;
- void updateState(const QPaintEngineState &state);
+ void updateState(const QPaintEngineState &state) Q_DECL_OVERRIDE;
void updatePen(const QPen &pen);
void updateBrush(const QBrush &brush);
@@ -80,23 +80,18 @@ public:
void updateClipEnabled(bool enabled);
void updateOpacity(qreal opacity);
- void drawEllipse(const QRectF &rect);
- void drawPath(const QPainterPath &path);
- void drawPolygon(const QPointF *points, int numPoints, PolygonDrawMode mode);
-#ifdef Q_NO_USING_KEYWORD
- inline void drawPolygon(const QPoint *points, int pointCount, PolygonDrawMode mode)
- { QPaintEngine::drawPolygon(points, pointCount, mode); }
-#else
+ void drawEllipse(const QRectF &rect) Q_DECL_OVERRIDE;
+ void drawPath(const QPainterPath &path) Q_DECL_OVERRIDE;
+ void drawPolygon(const QPointF *points, int numPoints, PolygonDrawMode mode) Q_DECL_OVERRIDE;
using QPaintEngine::drawPolygon;
-#endif
- void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr);
- void drawTiledPixmap(const QRectF &r, const QPixmap &pixmap, const QPointF &s);
+ void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) Q_DECL_OVERRIDE;
+ void drawTiledPixmap(const QRectF &r, const QPixmap &pixmap, const QPointF &s) Q_DECL_OVERRIDE;
void drawImage(const QRectF &r, const QImage &image, const QRectF &sr,
- Qt::ImageConversionFlags flags = Qt::AutoColor);
- void drawTextItem(const QPointF &p, const QTextItem &ti);
+ Qt::ImageConversionFlags flags = Qt::AutoColor) Q_DECL_OVERRIDE;
+ void drawTextItem(const QPointF &p, const QTextItem &ti) Q_DECL_OVERRIDE;
- Type type() const { return Picture; }
+ Type type() const Q_DECL_OVERRIDE { return Picture; }
protected:
QPicturePaintEngine(QPaintEnginePrivate &dptr);
diff --git a/src/gui/image/qpicture.cpp b/src/gui/image/qpicture.cpp
index bb37461b4f..bdfb987567 100644
--- a/src/gui/image/qpicture.cpp
+++ b/src/gui/image/qpicture.cpp
@@ -450,8 +450,8 @@ public:
QFakeDevice() { dpi_x = qt_defaultDpiX(); dpi_y = qt_defaultDpiY(); }
void setDpiX(int dpi) { dpi_x = dpi; }
void setDpiY(int dpi) { dpi_y = dpi; }
- QPaintEngine *paintEngine() const { return 0; }
- int metric(PaintDeviceMetric m) const
+ QPaintEngine *paintEngine() const Q_DECL_OVERRIDE { return 0; }
+ int metric(PaintDeviceMetric m) const Q_DECL_OVERRIDE
{
switch(m) {
case PdmPhysicalDpiX:
diff --git a/src/gui/image/qpicture.h b/src/gui/image/qpicture.h
index 1ad20a4e70..2ce8b3b75e 100644
--- a/src/gui/image/qpicture.h
+++ b/src/gui/image/qpicture.h
@@ -55,7 +55,7 @@ public:
bool isNull() const;
- int devType() const;
+ int devType() const Q_DECL_OVERRIDE;
uint size() const;
const char* data() const;
virtual void setData(const char* data, uint size);
@@ -88,12 +88,12 @@ public:
static QStringList inputFormatList();
static QStringList outputFormatList();
- QPaintEngine *paintEngine() const;
+ QPaintEngine *paintEngine() const Q_DECL_OVERRIDE;
protected:
QPicture(QPicturePrivate &data);
- int metric(PaintDeviceMetric m) const;
+ int metric(PaintDeviceMetric m) const Q_DECL_OVERRIDE;
private:
bool exec(QPainter *p, QDataStream &ds, int i);
diff --git a/src/gui/image/qpixmap.h b/src/gui/image/qpixmap.h
index dce64bd2dd..ce3a42abc4 100644
--- a/src/gui/image/qpixmap.h
+++ b/src/gui/image/qpixmap.h
@@ -75,7 +75,7 @@ public:
operator QVariant() const;
bool isNull() const;
- int devType() const;
+ int devType() const Q_DECL_OVERRIDE;
int width() const;
int height() const;
@@ -154,7 +154,7 @@ public:
bool isQBitmap() const;
- QPaintEngine *paintEngine() const;
+ QPaintEngine *paintEngine() const Q_DECL_OVERRIDE;
inline bool operator!() const { return isNull(); }
@@ -164,7 +164,7 @@ public:
#endif
protected:
- int metric(PaintDeviceMetric) const;
+ int metric(PaintDeviceMetric) const Q_DECL_OVERRIDE;
static QPixmap fromImageInPlace(QImage &image, Qt::ImageConversionFlags flags = Qt::AutoColor);
private:
diff --git a/src/gui/image/qpixmap_blitter_p.h b/src/gui/image/qpixmap_blitter_p.h
index ec6c1eb8e5..069efbf593 100644
--- a/src/gui/image/qpixmap_blitter_p.h
+++ b/src/gui/image/qpixmap_blitter_p.h
@@ -62,17 +62,17 @@ public:
QBlittable *blittable() const;
void setBlittable(QBlittable *blittable);
- void resize(int width, int height);
- int metric(QPaintDevice::PaintDeviceMetric metric) const;
- void fill(const QColor &color);
- QImage *buffer();
- QImage toImage() const;
- bool hasAlphaChannel() const;
- void fromImage(const QImage &image, Qt::ImageConversionFlags flags);
- qreal devicePixelRatio() const;
- void setDevicePixelRatio(qreal scaleFactor);
-
- QPaintEngine *paintEngine() const;
+ void resize(int width, int height) Q_DECL_OVERRIDE;
+ int metric(QPaintDevice::PaintDeviceMetric metric) const Q_DECL_OVERRIDE;
+ void fill(const QColor &color) Q_DECL_OVERRIDE;
+ QImage *buffer() Q_DECL_OVERRIDE;
+ QImage toImage() const Q_DECL_OVERRIDE;
+ bool hasAlphaChannel() const Q_DECL_OVERRIDE;
+ void fromImage(const QImage &image, Qt::ImageConversionFlags flags) Q_DECL_OVERRIDE;
+ qreal devicePixelRatio() const Q_DECL_OVERRIDE;
+ void setDevicePixelRatio(qreal scaleFactor) Q_DECL_OVERRIDE;
+
+ QPaintEngine *paintEngine() const Q_DECL_OVERRIDE;
void markRasterOverlay(const QRectF &);
void markRasterOverlay(const QPointF &, const QTextItem &);
diff --git a/src/gui/image/qpixmap_raster.cpp b/src/gui/image/qpixmap_raster.cpp
index 65e7fb0096..9c9db1c9c1 100644
--- a/src/gui/image/qpixmap_raster.cpp
+++ b/src/gui/image/qpixmap_raster.cpp
@@ -203,9 +203,14 @@ void QRasterPlatformPixmap::fill(const QColor &color)
pixel = qPremultiply(color.rgba());
const QPixelLayout *layout = &qPixelLayouts[image.format()];
layout->convertFromARGB32PM(&pixel, &pixel, 1, layout, 0);
- } else {
+ } else if (image.format() == QImage::Format_Alpha8) {
+ pixel = qAlpha(color.rgba());
+ } else if (image.format() == QImage::Format_Grayscale8) {
+ pixel = qGray(color.rgba());
+ } else
+ {
pixel = 0;
- // ### what about 8 bits
+ // ### what about 8 bit indexed?
}
image.fill(pixel);
diff --git a/src/gui/image/qpixmap_raster_p.h b/src/gui/image/qpixmap_raster_p.h
index ffb4b591de..cbbd681314 100644
--- a/src/gui/image/qpixmap_raster_p.h
+++ b/src/gui/image/qpixmap_raster_p.h
@@ -56,28 +56,28 @@ public:
QRasterPlatformPixmap(PixelType type);
~QRasterPlatformPixmap();
- QPlatformPixmap *createCompatiblePlatformPixmap() const;
-
- void resize(int width, int height);
- bool fromData(const uchar *buffer, uint len, const char *format, Qt::ImageConversionFlags flags);
- void fromImage(const QImage &image, Qt::ImageConversionFlags flags);
- void fromImageInPlace(QImage &image, Qt::ImageConversionFlags flags);
- void fromImageReader(QImageReader *imageReader, Qt::ImageConversionFlags flags);
-
- void copy(const QPlatformPixmap *data, const QRect &rect);
- bool scroll(int dx, int dy, const QRect &rect);
- void fill(const QColor &color);
- bool hasAlphaChannel() const;
- QImage toImage() const;
- QImage toImage(const QRect &rect) const;
- QPaintEngine* paintEngine() const;
- QImage* buffer();
- qreal devicePixelRatio() const;
- void setDevicePixelRatio(qreal scaleFactor);
+ QPlatformPixmap *createCompatiblePlatformPixmap() const Q_DECL_OVERRIDE;
+
+ void resize(int width, int height) Q_DECL_OVERRIDE;
+ bool fromData(const uchar *buffer, uint len, const char *format, Qt::ImageConversionFlags flags) Q_DECL_OVERRIDE;
+ void fromImage(const QImage &image, Qt::ImageConversionFlags flags) Q_DECL_OVERRIDE;
+ void fromImageInPlace(QImage &image, Qt::ImageConversionFlags flags) Q_DECL_OVERRIDE;
+ void fromImageReader(QImageReader *imageReader, Qt::ImageConversionFlags flags) Q_DECL_OVERRIDE;
+
+ void copy(const QPlatformPixmap *data, const QRect &rect) Q_DECL_OVERRIDE;
+ bool scroll(int dx, int dy, const QRect &rect) Q_DECL_OVERRIDE;
+ void fill(const QColor &color) Q_DECL_OVERRIDE;
+ bool hasAlphaChannel() const Q_DECL_OVERRIDE;
+ QImage toImage() const Q_DECL_OVERRIDE;
+ QImage toImage(const QRect &rect) const Q_DECL_OVERRIDE;
+ QPaintEngine* paintEngine() const Q_DECL_OVERRIDE;
+ QImage* buffer() Q_DECL_OVERRIDE;
+ qreal devicePixelRatio() const Q_DECL_OVERRIDE;
+ void setDevicePixelRatio(qreal scaleFactor) Q_DECL_OVERRIDE;
protected:
- int metric(QPaintDevice::PaintDeviceMetric metric) const;
+ int metric(QPaintDevice::PaintDeviceMetric metric) const Q_DECL_OVERRIDE;
void createPixmapForImage(QImage &sourceImage, Qt::ImageConversionFlags flags, bool inPlace);
void setImage(const QImage &image);
QImage image;
diff --git a/src/gui/image/qpixmapcache.cpp b/src/gui/image/qpixmapcache.cpp
index 170a295cf8..d4b5cee74c 100644
--- a/src/gui/image/qpixmapcache.cpp
+++ b/src/gui/image/qpixmapcache.cpp
@@ -159,7 +159,7 @@ public:
QPMCache();
~QPMCache();
- void timerEvent(QTimerEvent *);
+ void timerEvent(QTimerEvent *) Q_DECL_OVERRIDE;
bool insert(const QString& key, const QPixmap &pixmap, int cost);
QPixmapCache::Key insert(const QPixmap &pixmap, int cost);
bool replace(const QPixmapCache::Key &key, const QPixmap &pixmap, int cost);
diff --git a/src/gui/image/qpnghandler.cpp b/src/gui/image/qpnghandler.cpp
index 17a0dd3eb9..c19bc52a97 100644
--- a/src/gui/image/qpnghandler.cpp
+++ b/src/gui/image/qpnghandler.cpp
@@ -157,10 +157,6 @@ public:
};
-#if defined(Q_C_CALLBACKS)
-extern "C" {
-#endif
-
class QPNGImageWriter {
public:
explicit QPNGImageWriter(QIODevice*);
@@ -190,6 +186,7 @@ private:
float gamma;
};
+extern "C" {
static
void CALLBACK_CALL_TYPE iod_read_fn(png_structp png_ptr, png_bytep data, png_size_t length)
{
@@ -234,9 +231,7 @@ void CALLBACK_CALL_TYPE qpiw_flush_fn(png_structp /* png_ptr */)
{
}
-#if defined(Q_C_CALLBACKS)
}
-#endif
static
void setup_qt(QImage& image, png_structp png_ptr, png_infop info_ptr, QSize scaledSize, bool *doScaledRead, float screen_gamma=0.0)
@@ -295,6 +290,15 @@ void setup_qt(QImage& image, png_structp png_ptr, png_infop info_ptr, QSize scal
png_set_swap_alpha(png_ptr);
png_read_update_info(png_ptr, info_ptr);
+ } else if (bit_depth == 8 && !png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) {
+ png_set_expand(png_ptr);
+ if (image.size() != QSize(width, height) || image.format() != QImage::Format_Grayscale8) {
+ image = QImage(width, height, QImage::Format_Grayscale8);
+ if (image.isNull())
+ return;
+ }
+
+ png_read_update_info(png_ptr, info_ptr);
} else {
if (bit_depth == 16)
png_set_strip_16(png_ptr);
@@ -483,17 +487,13 @@ static void read_image_scaled(QImage *outImage, png_structp png_ptr, png_infop i
}
-#if defined(Q_C_CALLBACKS)
extern "C" {
-#endif
static void CALLBACK_CALL_TYPE qt_png_warning(png_structp /*png_ptr*/, png_const_charp message)
{
qWarning("libpng warning: %s", message);
}
-#if defined(Q_C_CALLBACKS)
}
-#endif
void Q_INTERNAL_WIN_NO_THROW QPngHandlerPrivate::readPngTexts(png_info *info)
@@ -666,6 +666,8 @@ QImage::Format QPngHandlerPrivate::readImageFormat()
format = QImage::Format_Mono;
} else if (bit_depth == 16 && png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) {
format = QImage::Format_ARGB32;
+ } else if (bit_depth == 8 && !png_get_valid(png_ptr, info_ptr, PNG_INFO_tRNS)) {
+ format = QImage::Format_Grayscale8;
} else {
format = QImage::Format_Indexed8;
}
@@ -857,6 +859,8 @@ bool Q_INTERNAL_WIN_NO_THROW QPNGImageWriter::writeImage(const QImage& image, vo
else
color_type = PNG_COLOR_TYPE_PALETTE;
}
+ else if (image.format() == QImage::Format_Grayscale8)
+ color_type = PNG_COLOR_TYPE_GRAY;
else if (image.hasAlphaChannel())
color_type = PNG_COLOR_TYPE_RGB_ALPHA;
else
@@ -955,6 +959,7 @@ bool Q_INTERNAL_WIN_NO_THROW QPNGImageWriter::writeImage(const QImage& image, vo
case QImage::Format_Mono:
case QImage::Format_MonoLSB:
case QImage::Format_Indexed8:
+ case QImage::Format_Grayscale8:
case QImage::Format_RGB32:
case QImage::Format_ARGB32:
case QImage::Format_RGB888:
diff --git a/src/gui/image/qppmhandler.cpp b/src/gui/image/qppmhandler.cpp
index 314abca9f0..e1c76cce7f 100644
--- a/src/gui/image/qppmhandler.cpp
+++ b/src/gui/image/qppmhandler.cpp
@@ -122,7 +122,7 @@ static bool read_pbm_body(QIODevice *device, char type, int w, int h, int mcc, Q
case '2': // ascii PGM
case '5': // raw PGM
nbits = 8;
- format = QImage::Format_Indexed8;
+ format = QImage::Format_Grayscale8;
break;
case '3': // ascii PPM
case '6': // raw PPM
@@ -200,13 +200,13 @@ static bool read_pbm_body(QIODevice *device, char type, int w, int h, int mcc, Q
*p++ = b;
}
} else if (nbits == 8) {
- if (mcc == maxc) {
+ if (mcc == 255) {
while (n--) {
*p++ = read_pbm_int(device);
}
} else {
while (n--) {
- *p++ = read_pbm_int(device) * maxc / mcc;
+ *p++ = read_pbm_int(device) * 255 / mcc;
}
}
} else { // 32 bits
@@ -233,14 +233,10 @@ static bool read_pbm_body(QIODevice *device, char type, int w, int h, int mcc, Q
}
}
- if (nbits == 1) { // bitmap
+ if (format == QImage::Format_Mono) {
outImage->setColorCount(2);
- outImage->setColor(0, qRgb(255,255,255)); // white
- outImage->setColor(1, qRgb(0,0,0)); // black
- } else if (nbits == 8) { // graymap
- outImage->setColorCount(maxc+1);
- for (int i=0; i<=maxc; i++)
- outImage->setColor(i, qRgb(i*255/maxc,i*255/maxc,i*255/maxc));
+ outImage->setColor(0, qRgb(255,255,255)); // white
+ outImage->setColor(1, qRgb(0,0,0)); // black
}
return true;
@@ -257,6 +253,8 @@ static bool write_pbm_image(QIODevice *out, const QImage &sourceImage, const QBy
if (format == "pbm") {
image = image.convertToFormat(QImage::Format_Mono);
+ } else if (gray) {
+ image = image.convertToFormat(QImage::Format_Grayscale8);
} else {
switch (image.format()) {
case QImage::Format_Mono:
@@ -317,63 +315,77 @@ static bool write_pbm_image(QIODevice *out, const QImage &sourceImage, const QBy
str.append("255\n");
if (out->write(str, str.length()) != str.length())
return false;
- QVector<QRgb> color = image.colorTable();
- uint bpl = w*(gray ? 1 : 3);
- uchar *buf = new uchar[bpl];
- for (uint y=0; y<h; y++) {
- uchar *b = image.scanLine(y);
- uchar *p = buf;
- uchar *end = buf+bpl;
- if (gray) {
- while (p < end) {
- uchar g = (uchar)qGray(color[*b++]);
- *p++ = g;
+ uint bpl = w * (gray ? 1 : 3);
+ uchar *buf = new uchar[bpl];
+ if (image.format() == QImage::Format_Indexed8) {
+ QVector<QRgb> color = image.colorTable();
+ for (uint y=0; y<h; y++) {
+ uchar *b = image.scanLine(y);
+ uchar *p = buf;
+ uchar *end = buf+bpl;
+ if (gray) {
+ while (p < end) {
+ uchar g = (uchar)qGray(color[*b++]);
+ *p++ = g;
+ }
+ } else {
+ while (p < end) {
+ QRgb rgb = color[*b++];
+ *p++ = qRed(rgb);
+ *p++ = qGreen(rgb);
+ *p++ = qBlue(rgb);
+ }
}
- } else {
- while (p < end) {
- QRgb rgb = color[*b++];
- *p++ = qRed(rgb);
- *p++ = qGreen(rgb);
- *p++ = qBlue(rgb);
+ if (bpl != (uint)out->write((char*)buf, bpl))
+ return false;
+ }
+ } else {
+ for (uint y=0; y<h; y++) {
+ uchar *b = image.scanLine(y);
+ uchar *p = buf;
+ uchar *end = buf + bpl;
+ if (gray) {
+ while (p < end)
+ *p++ = *b++;
+ } else {
+ while (p < end) {
+ uchar color = *b++;
+ *p++ = color;
+ *p++ = color;
+ *p++ = color;
+ }
}
+ if (bpl != (uint)out->write((char*)buf, bpl))
+ return false;
}
- if (bpl != (uint)out->write((char*)buf, bpl))
- return false;
}
delete [] buf;
- }
break;
+ }
case 32: {
- str.insert(1, gray ? '5' : '6');
+ str.insert(1, '6');
str.append("255\n");
if (out->write(str, str.length()) != str.length())
return false;
- uint bpl = w*(gray ? 1 : 3);
+ uint bpl = w * 3;
uchar *buf = new uchar[bpl];
for (uint y=0; y<h; y++) {
QRgb *b = (QRgb*)image.scanLine(y);
uchar *p = buf;
uchar *end = buf+bpl;
- if (gray) {
- while (p < end) {
- uchar g = (uchar)qGray(*b++);
- *p++ = g;
- }
- } else {
- while (p < end) {
- QRgb rgb = *b++;
- *p++ = qRed(rgb);
- *p++ = qGreen(rgb);
- *p++ = qBlue(rgb);
- }
+ while (p < end) {
+ QRgb rgb = *b++;
+ *p++ = qRed(rgb);
+ *p++ = qGreen(rgb);
+ *p++ = qBlue(rgb);
}
if (bpl != (uint)out->write((char*)buf, bpl))
return false;
}
delete [] buf;
- }
break;
+ }
default:
return false;
@@ -488,11 +500,11 @@ QVariant QPpmHandler::option(ImageOption option) const
switch (type) {
case '1': // ascii PBM
case '4': // raw PBM
- format = QImage::Format_Mono;
- break;
+ format = QImage::Format_Mono;
+ break;
case '2': // ascii PGM
case '5': // raw PGM
- format = QImage::Format_Indexed8;
+ format = QImage::Format_Grayscale8;
break;
case '3': // ascii PPM
case '6': // raw PPM
diff --git a/src/gui/itemmodels/qstandarditemmodel.cpp b/src/gui/itemmodels/qstandarditemmodel.cpp
index 44ee710268..4102230e1b 100644
--- a/src/gui/itemmodels/qstandarditemmodel.cpp
+++ b/src/gui/itemmodels/qstandarditemmodel.cpp
@@ -2909,12 +2909,6 @@ void QStandardItemModel::sort(int column, Qt::SortOrder order)
}
/*!
- \fn QObject *QStandardItemModel::parent() const
- \internal
-*/
-
-
-/*!
\reimp
*/
QStringList QStandardItemModel::mimeTypes() const
diff --git a/src/gui/itemmodels/qstandarditemmodel.h b/src/gui/itemmodels/qstandarditemmodel.h
index 8a71182bd6..75e6a71a6c 100644
--- a/src/gui/itemmodels/qstandarditemmodel.h
+++ b/src/gui/itemmodels/qstandarditemmodel.h
@@ -316,43 +316,39 @@ public:
void setItemRoleNames(const QHash<int,QByteArray> &roleNames);
- QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
- QModelIndex parent(const QModelIndex &child) const;
+ QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
+ QModelIndex parent(const QModelIndex &child) const Q_DECL_OVERRIDE;
- int rowCount(const QModelIndex &parent = QModelIndex()) const;
- int columnCount(const QModelIndex &parent = QModelIndex()) const;
- bool hasChildren(const QModelIndex &parent = QModelIndex()) const;
+ int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
+ int columnCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
+ bool hasChildren(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
// Qt 6: Remove
- QModelIndex sibling(int row, int column, const QModelIndex &idx) const;
+ QModelIndex sibling(int row, int column, const QModelIndex &idx) const Q_DECL_OVERRIDE;
- QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
- bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
+ bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE;
QVariant headerData(int section, Qt::Orientation orientation,
- int role = Qt::DisplayRole) const;
+ int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value,
- int role = Qt::EditRole);
+ int role = Qt::EditRole) Q_DECL_OVERRIDE;
- bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex());
- bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex());
- bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex());
- bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex());
+ bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
+ bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
+ bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
+ bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
- Qt::ItemFlags flags(const QModelIndex &index) const;
- Qt::DropActions supportedDropActions() const;
+ Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE;
+ Qt::DropActions supportedDropActions() const Q_DECL_OVERRIDE;
- QMap<int, QVariant> itemData(const QModelIndex &index) const;
- bool setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles);
+ QMap<int, QVariant> itemData(const QModelIndex &index) const Q_DECL_OVERRIDE;
+ bool setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles) Q_DECL_OVERRIDE;
void clear();
-#ifdef Q_NO_USING_KEYWORD
- inline QObject *parent() const { return QObject::parent(); }
-#else
using QObject::parent;
-#endif
- void sort(int column, Qt::SortOrder order = Qt::AscendingOrder);
+ void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) Q_DECL_OVERRIDE;
QStandardItem *itemFromIndex(const QModelIndex &index) const;
QModelIndex indexFromItem(const QStandardItem *item) const;
@@ -401,9 +397,9 @@ public:
int sortRole() const;
void setSortRole(int role);
- QStringList mimeTypes() const;
- QMimeData *mimeData(const QModelIndexList &indexes) const;
- bool dropMimeData (const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent);
+ QStringList mimeTypes() const Q_DECL_OVERRIDE;
+ QMimeData *mimeData(const QModelIndexList &indexes) const Q_DECL_OVERRIDE;
+ bool dropMimeData (const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) Q_DECL_OVERRIDE;
Q_SIGNALS:
void itemChanged(QStandardItem *item);
diff --git a/src/gui/kernel/kernel.pri b/src/gui/kernel/kernel.pri
index 1169985ea8..6479acd3fc 100644
--- a/src/gui/kernel/kernel.pri
+++ b/src/gui/kernel/kernel.pri
@@ -68,10 +68,13 @@ HEADERS += \
kernel/qplatformservices.h \
kernel/qplatformsystemtrayicon.h \
kernel/qplatformsessionmanager.h \
+ kernel/qplatformhardwarecompositor.h \
kernel/qpixelformat.h \
kernel/qpaintdevicewindow.h \
kernel/qpaintdevicewindow_p.h \
- kernel/qrasterwindow.h
+ kernel/qrasterwindow.h \
+ kernel/qplatformgraphicsbuffer.h \
+ kernel/qplatformgraphicsbufferhelper.h
SOURCES += \
kernel/qgenericpluginfactory.cpp \
@@ -124,7 +127,10 @@ SOURCES += \
kernel/qplatformmenu.cpp \
kernel/qpixelformat.cpp \
kernel/qpaintdevicewindow.cpp \
- kernel/qrasterwindow.cpp
+ kernel/qrasterwindow.cpp \
+ kernel/qplatformgraphicsbuffer.cpp \
+ kernel/qplatformgraphicsbufferhelper.cpp \
+ kernel/qplatformhardwarecompositor.cpp
contains(QT_CONFIG, opengl)|contains(QT_CONFIG, opengles2) {
HEADERS += \
diff --git a/src/gui/kernel/qcursor.cpp b/src/gui/kernel/qcursor.cpp
index 235d2b3053..9c5bce7750 100644
--- a/src/gui/kernel/qcursor.cpp
+++ b/src/gui/kernel/qcursor.cpp
@@ -149,6 +149,16 @@ QT_BEGIN_NAMESPACE
*/
/*!
+ \fn QCursor::QCursor(QCursor &&other)
+ \since 5.5
+
+ Move-constructs a cursor from \a other. After being moved from,
+ the only valid operations on \a other are destruction and
+ (move and copy) assignment. The effects of calling any other
+ member function on a moved-from instance are undefined.
+*/
+
+/*!
\fn QCursor &QCursor::operator=(QCursor &&other)
Move-assigns \a other to this QCursor instance.
diff --git a/src/gui/kernel/qcursor.h b/src/gui/kernel/qcursor.h
index 72c6a6504f..3c0e8ecf30 100644
--- a/src/gui/kernel/qcursor.h
+++ b/src/gui/kernel/qcursor.h
@@ -80,6 +80,7 @@ public:
~QCursor();
QCursor &operator=(const QCursor &cursor);
#ifdef Q_COMPILER_RVALUE_REFS
+ QCursor(QCursor &&other) Q_DECL_NOTHROW : d(other.d) { other.d = Q_NULLPTR; }
inline QCursor &operator=(QCursor &&other)
{ qSwap(d, other.d); return *this; }
#endif
diff --git a/src/gui/kernel/qdnd_p.h b/src/gui/kernel/qdnd_p.h
index 573035ce24..92d489184e 100644
--- a/src/gui/kernel/qdnd_p.h
+++ b/src/gui/kernel/qdnd_p.h
@@ -70,8 +70,8 @@ public:
QInternalMimeData();
~QInternalMimeData();
- bool hasFormat(const QString &mimeType) const;
- QStringList formats() const;
+ bool hasFormat(const QString &mimeType) const Q_DECL_OVERRIDE;
+ QStringList formats() const Q_DECL_OVERRIDE;
static bool canReadData(const QString &mimeType);
@@ -80,7 +80,7 @@ public:
static QByteArray renderDataHelper(const QString &mimeType, const QMimeData *data);
protected:
- QVariant retrieveData(const QString &mimeType, QVariant::Type type) const;
+ QVariant retrieveData(const QString &mimeType, QVariant::Type type) const Q_DECL_OVERRIDE;
virtual bool hasFormat_sys(const QString &mimeType) const = 0;
virtual QStringList formats_sys() const = 0;
diff --git a/src/gui/kernel/qevent.cpp b/src/gui/kernel/qevent.cpp
index 60e7b97f12..5bc70b9fb2 100644
--- a/src/gui/kernel/qevent.cpp
+++ b/src/gui/kernel/qevent.cpp
@@ -575,7 +575,8 @@ QHoverEvent::~QHoverEvent()
wheel event delta: angleDelta() returns the delta in wheel
degrees. This value is always provided. pixelDelta() returns
the delta in screen pixels and is available on platforms that
- have high-resolution trackpads, such as Mac OS X.
+ have high-resolution trackpads, such as Mac OS X. If that is the
+ case, source() will return Qt::MouseEventSynthesizedBySystem.
The functions pos() and globalPos() return the mouse cursor's
location at the time of the event.
@@ -600,6 +601,22 @@ QHoverEvent::~QHoverEvent()
*/
/*!
+ \fn Qt::MouseEventSource QWheelEvent::source() const
+ \since 5.5
+
+ Returns information about the wheel event source.
+
+ The source can be used to distinguish between events that come from a mouse
+ with a physical wheel and events that are generated by some other means,
+ such as a flick gesture on a touchpad.
+
+ \note Many platforms provide no such information. On such platforms
+ \l Qt::MouseEventNotSynthesized is returned always.
+
+ \sa Qt::MouseEventSource
+*/
+
+/*!
\fn Qt::Orientation QWheelEvent::orientation() const
\obsolete
@@ -731,7 +748,44 @@ QWheelEvent::QWheelEvent(const QPointF &pos, const QPointF& globalPos,
QPoint pixelDelta, QPoint angleDelta, int qt4Delta, Qt::Orientation qt4Orientation,
Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, Qt::ScrollPhase phase)
: QInputEvent(Wheel, modifiers), p(pos), g(globalPos), pixelD(pixelDelta),
- angleD(angleDelta), qt4D(qt4Delta), qt4O(qt4Orientation), mouseState(buttons), ph(phase)
+ angleD(angleDelta), qt4D(qt4Delta), qt4O(qt4Orientation), mouseState(buttons), ph(phase),
+ src(Qt::MouseEventNotSynthesized)
+{}
+
+/*!
+ Constructs a wheel event object.
+
+ The \a pos provides the location of the mouse cursor
+ within the window. The position in global coordinates is specified
+ by \a globalPos.
+
+ \a pixelDelta contains the scrolling distance in pixels on screen, while
+ \a angleDelta contains the wheel rotation distance. \a pixelDelta is
+ optional and can be null.
+
+ The mouse and keyboard states at the time of the event are specified by
+ \a buttons and \a modifiers.
+
+ For backwards compatibility, the event can also hold monodirectional wheel
+ event data: \a qt4Delta specifies the rotation, and \a qt4Orientation the
+ direction.
+
+ The scrolling phase of the event is specified by \a phase.
+
+ If the wheel event comes from a physical mouse wheel, \a source is set to
+ Qt::MouseEventNotSynthesized. If it comes from a gesture detected by the
+ operating system, or from a non-mouse hardware device, such that \a pixelDelta is
+ directly related to finger movement, \a source is set to Qt::MouseEventSynthesizedBySystem.
+ If it comes from Qt, source would be set to Qt::MouseEventSynthesizedByQt.
+
+ \sa posF(), globalPosF(), angleDelta(), pixelDelta(), phase()
+*/
+
+QWheelEvent::QWheelEvent(const QPointF &pos, const QPointF& globalPos,
+ QPoint pixelDelta, QPoint angleDelta, int qt4Delta, Qt::Orientation qt4Orientation,
+ Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, Qt::ScrollPhase phase, Qt::MouseEventSource source)
+ : QInputEvent(Wheel, modifiers), p(pos), g(globalPos), pixelD(pixelDelta),
+ angleD(angleDelta), qt4D(qt4Delta), qt4O(qt4Orientation), mouseState(buttons), ph(phase), src(source)
{}
#endif // QT_NO_WHEELEVENT
@@ -1324,6 +1378,55 @@ QExposeEvent::~QExposeEvent()
}
/*!
+ \class QPlatformSurfaceEvent
+ \since 5.5
+ \brief The QPlatformSurfaceEvent class is used to notify about native platform surface events.
+ \inmodule QtGui
+
+ \ingroup events
+
+ Platform window events are synchronously sent to windows and offscreen surfaces when their
+ underlying native surfaces are created or are about to be destroyed.
+
+ Applications can respond to these events to know when the underlying platform
+ surface exists.
+*/
+
+/*!
+ \enum QPlatformSurfaceEvent::SurfaceEventType
+
+ This enum describes the type of platform surface event. The possible types are:
+
+ \value SurfaceCreated The underlying native surface has been created
+ \value SurfaceAboutToBeDestroyed The underlying native surface will be destroyed immediately after this event
+
+ The \c SurfaceAboutToBeDestroyed event type is useful as a means of stopping rendering to
+ a platform window before it is destroyed.
+*/
+
+/*!
+ \fn QPlatformSurfaceEvent::SurfaceEventType QPlatformSurfaceEvent::surfaceEventType() const
+
+ Returns the specific type of platform surface event.
+*/
+
+/*!
+ Constructs a platform surface event for the given \a surfaceEventType.
+*/
+QPlatformSurfaceEvent::QPlatformSurfaceEvent(SurfaceEventType surfaceEventType)
+ : QEvent(PlatformSurface)
+ , m_surfaceEventType(surfaceEventType)
+{
+}
+
+/*!
+ \internal
+*/
+QPlatformSurfaceEvent::~QPlatformSurfaceEvent()
+{
+}
+
+/*!
\fn const QRegion &QExposeEvent::region() const
Returns the window area that has been exposed. The region is given in local coordinates.
@@ -3556,6 +3659,8 @@ static const char *eventClassName(QEvent::Type t)
return "QGraphicsSceneEvent";
case QEvent::Timer:
return "QTimerEvent";
+ case QEvent::PlatformSurface:
+ return "QPlatformSurfaceEvent";
default:
break;
}
@@ -3814,6 +3919,18 @@ QDebug operator<<(QDebug dbg, const QEvent *e)
case QEvent::Timer:
dbg << "QTimerEvent(id=" << static_cast<const QTimerEvent *>(e)->timerId() << ')';
break;
+ case QEvent::PlatformSurface:
+ dbg << "QPlatformSurfaceEvent(surfaceEventType=";
+ switch (static_cast<const QPlatformSurfaceEvent *>(e)->surfaceEventType()) {
+ case QPlatformSurfaceEvent::SurfaceCreated:
+ dbg << "SurfaceCreated";
+ break;
+ case QPlatformSurfaceEvent::SurfaceAboutToBeDestroyed:
+ dbg << "SurfaceAboutToBeDestroyed";
+ break;
+ }
+ dbg << ')';
+ break;
default:
dbg << eventClassName(type) << '(' << eventTypeName(type) << ", "
<< (const void *)e << ", type = " << e->type() << ')';
diff --git a/src/gui/kernel/qevent.h b/src/gui/kernel/qevent.h
index 6fca54e2b6..35a8884865 100644
--- a/src/gui/kernel/qevent.h
+++ b/src/gui/kernel/qevent.h
@@ -162,6 +162,8 @@ protected:
class Q_GUI_EXPORT QWheelEvent : public QInputEvent
{
public:
+ enum { DefaultDeltasPerStep = 120 };
+
QWheelEvent(const QPointF &pos, int delta,
Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers,
Qt::Orientation orient = Qt::Vertical);
@@ -174,7 +176,9 @@ public:
QWheelEvent(const QPointF &pos, const QPointF& globalPos,
QPoint pixelDelta, QPoint angleDelta, int qt4Delta, Qt::Orientation qt4Orientation,
Qt::MouseButtons buttons, Qt::KeyboardModifiers modifiers, Qt::ScrollPhase phase);
-
+ QWheelEvent(const QPointF &pos, const QPointF &globalPos, QPoint pixelDelta, QPoint angleDelta,
+ int qt4Delta, Qt::Orientation qt4Orientation, Qt::MouseButtons buttons,
+ Qt::KeyboardModifiers modifiers, Qt::ScrollPhase phase, Qt::MouseEventSource source);
~QWheelEvent();
@@ -199,6 +203,8 @@ public:
inline Qt::ScrollPhase phase() const { return Qt::ScrollPhase(ph); }
+ Qt::MouseEventSource source() const { return Qt::MouseEventSource(src); }
+
protected:
QPointF p;
QPointF g;
@@ -208,7 +214,8 @@ protected:
Qt::Orientation qt4O;
Qt::MouseButtons mouseState;
uint ph : 2;
- int reserved : 30;
+ uint src: 2;
+ int reserved : 28;
};
#endif
@@ -408,6 +415,23 @@ protected:
QRegion rgn;
};
+class Q_GUI_EXPORT QPlatformSurfaceEvent : public QEvent
+{
+public:
+ enum SurfaceEventType {
+ SurfaceCreated,
+ SurfaceAboutToBeDestroyed
+ };
+
+ explicit QPlatformSurfaceEvent(SurfaceEventType surfaceEventType);
+ ~QPlatformSurfaceEvent();
+
+ inline SurfaceEventType surfaceEventType() const { return m_surfaceEventType; }
+
+protected:
+ SurfaceEventType m_surfaceEventType;
+};
+
class Q_GUI_EXPORT QResizeEvent : public QEvent
{
public:
diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp
index dc5501eaf5..a2953259ff 100644
--- a/src/gui/kernel/qguiapplication.cpp
+++ b/src/gui/kernel/qguiapplication.cpp
@@ -215,11 +215,6 @@ static inline void clearFontUnlocked()
QGuiApplicationPrivate::app_font = 0;
}
-static inline bool isPopupWindow(const QWindow *w)
-{
- return (w->flags() & Qt::WindowType_Mask) == Qt::Popup;
-}
-
// Geometry specification for top level windows following the convention of the
// -geometry command line arguments in X11 (see XParseGeometry).
struct QWindowGeometrySpecification
@@ -671,7 +666,7 @@ static void updateBlockedStatusRecursion(QWindow *window, bool shouldBeBlocked)
void QGuiApplicationPrivate::updateBlockedStatus(QWindow *window)
{
bool shouldBeBlocked = false;
- if (!isPopupWindow(window) && !self->modalWindowList.isEmpty())
+ if (!QWindowPrivate::get(window)->isPopup() && !self->modalWindowList.isEmpty())
shouldBeBlocked = self->isWindowBlocked(window);
updateBlockedStatusRecursion(window, shouldBeBlocked);
}
@@ -681,7 +676,7 @@ void QGuiApplicationPrivate::showModalWindow(QWindow *modal)
self->modalWindowList.prepend(modal);
// Send leave for currently entered window if it should be blocked
- if (currentMouseWindow && !isPopupWindow(currentMouseWindow)) {
+ if (currentMouseWindow && !QWindowPrivate::get(currentMouseWindow)->isPopup()) {
bool shouldBeBlocked = self->isWindowBlocked(currentMouseWindow);
if (shouldBeBlocked) {
// Remove the new window from modalWindowList temporarily so leave can go through
@@ -1094,6 +1089,8 @@ static void init_plugins(const QList<QByteArray> &pluginList)
QLatin1String(pluginSpec.mid(colonPos+1)));
if (plugin)
QGuiApplicationPrivate::generic_plugin_list.append(plugin);
+ else
+ qWarning() << "No such plugin for spec " << pluginSpec;
}
}
@@ -1259,8 +1256,11 @@ void QGuiApplicationPrivate::init()
}
// Load environment exported generic plugins
- foreach (const QByteArray &plugin, qgetenv("QT_QPA_GENERIC_PLUGINS").split(','))
- pluginList << plugin;
+ QByteArray envPlugins = qgetenv("QT_QPA_GENERIC_PLUGINS");
+ if (!envPlugins.isEmpty()) {
+ foreach (const QByteArray &plugin, envPlugins.split(','))
+ pluginList << plugin;
+ }
if (platform_integration == 0)
createPlatformIntegration();
@@ -1366,6 +1366,8 @@ QGuiApplicationPrivate::~QGuiApplicationPrivate()
}
#endif
+ platform_integration->destroy();
+
delete platform_theme;
platform_theme = 0;
delete platform_integration;
@@ -1511,18 +1513,6 @@ int QGuiApplication::exec()
*/
bool QGuiApplication::notify(QObject *object, QEvent *event)
{
-#ifndef QT_NO_SHORTCUT
- if (event->type() == QEvent::KeyPress) {
- // Try looking for a Shortcut before sending key events
- QWindow *w = qobject_cast<QWindow *>(object);
- QObject *focus = w ? w->focusObject() : 0;
- if (!focus)
- focus = object;
- if (QGuiApplicationPrivate::instance()->shortcutMap.tryShortcutEvent(focus, static_cast<QKeyEvent *>(event)))
- return true;
- }
-#endif
-
if (object->isWindowType())
QGuiApplicationPrivate::sendQWindowEventToQPlatformWindow(static_cast<QWindow *>(object), event);
return QCoreApplication::notify(object, event);
@@ -1686,7 +1676,8 @@ void QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::Mo
// will update the global mouse position and cause the second event to be a button only event.
QWindowSystemInterfacePrivate::MouseEvent moveEvent(e->window.data(),
e->timestamp, e->type, e->localPos, e->globalPos, buttons, e->modifiers, e->source);
- moveEvent.synthetic = e->synthetic;
+ if (e->flags & QWindowSystemInterfacePrivate::WindowSystemEvent::Synthetic)
+ moveEvent.flags |= QWindowSystemInterfacePrivate::WindowSystemEvent::Synthetic;
processMouseEvent(&moveEvent);
Q_ASSERT(e->globalPos == QGuiApplicationPrivate::lastCursorPosition);
// continue with processing mouse button change event
@@ -1698,7 +1689,7 @@ void QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::Mo
QPointF localPoint = e->localPos;
QPointF globalPoint = e->globalPos;
- if (e->nullWindow) {
+ if (e->nullWindow()) {
window = QGuiApplication::topLevelAt(globalPoint.toPoint());
if (window) {
QPointF delta = globalPoint - globalPoint.toPoint();
@@ -1751,7 +1742,7 @@ void QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::Mo
ev.setTimestamp(e->timestamp);
setMouseEventSource(&ev, e->source);
#ifndef QT_NO_CURSOR
- if (!e->synthetic) {
+ if (!e->synthetic()) {
if (const QScreen *screen = window->screen())
if (QPlatformCursor *cursor = screen->handle()->cursor())
cursor->pointerEvent(ev);
@@ -1769,7 +1760,7 @@ void QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::Mo
}
QGuiApplication::sendSpontaneousEvent(window, &ev);
- if (!e->synthetic && !ev.isAccepted()
+ if (!e->synthetic() && !ev.isAccepted()
&& !frameStrut
&& qApp->testAttribute(Qt::AA_SynthesizeTouchForUnhandledMouseEvents)) {
if (!m_fakeTouchDevice) {
@@ -1800,12 +1791,12 @@ void QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::Mo
QList<QTouchEvent::TouchPoint> touchPoints = QWindowSystemInterfacePrivate::convertTouchPoints(points, &type);
QWindowSystemInterfacePrivate::TouchEvent fake(window, e->timestamp, type, m_fakeTouchDevice, touchPoints, e->modifiers);
- fake.synthetic = true;
+ fake.flags |= QWindowSystemInterfacePrivate::WindowSystemEvent::Synthetic;
processTouchEvent(&fake);
}
if (doubleClick) {
mousePressButton = Qt::NoButton;
- if (!e->window.isNull() || e->nullWindow) { // QTBUG-36364, check if window closed in response to press
+ if (!e->window.isNull() || e->nullWindow()) { // QTBUG-36364, check if window closed in response to press
const QEvent::Type doubleClickType = frameStrut ? QEvent::NonClientAreaMouseButtonDblClick : QEvent::MouseButtonDblClick;
QMouseEvent dblClickEvent(doubleClickType, localPoint, localPoint, globalPoint,
button, buttons, e->modifiers);
@@ -1823,7 +1814,7 @@ void QGuiApplicationPrivate::processWheelEvent(QWindowSystemInterfacePrivate::Wh
QPointF globalPoint = e->globalPos;
QPointF localPoint = e->localPos;
- if (e->nullWindow) {
+ if (e->nullWindow()) {
window = QGuiApplication::topLevelAt(globalPoint.toPoint());
if (window) {
QPointF delta = globalPoint - globalPoint.toPoint();
@@ -1842,7 +1833,7 @@ void QGuiApplicationPrivate::processWheelEvent(QWindowSystemInterfacePrivate::Wh
return;
}
- QWheelEvent ev(localPoint, globalPoint, e->pixelDelta, e->angleDelta, e->qt4Delta, e->qt4Orientation, buttons, e->modifiers, e->phase);
+ QWheelEvent ev(localPoint, globalPoint, e->pixelDelta, e->angleDelta, e->qt4Delta, e->qt4Orientation, buttons, e->modifiers, e->phase, e->source);
ev.setTimestamp(e->timestamp);
QGuiApplication::sendSpontaneousEvent(window, &ev);
#endif /* ifndef QT_NO_WHEELEVENT */
@@ -1854,7 +1845,7 @@ void QGuiApplicationPrivate::processKeyEvent(QWindowSystemInterfacePrivate::KeyE
{
QWindow *window = e->window.data();
modifier_buttons = e->modifiers;
- if (e->nullWindow
+ if (e->nullWindow()
#if defined(Q_OS_ANDROID) && !defined(Q_OS_ANDROID_NO_SDK)
|| e->key == Qt::Key_Back || e->key == Qt::Key_Menu
#endif
@@ -2095,7 +2086,7 @@ void QGuiApplicationPrivate::processTabletEvent(QWindowSystemInterfacePrivate::T
// subsequent events up to the release are delivered to that same window.
// If window is given, just send to that.
if (type == QEvent::TabletPress) {
- if (e->nullWindow) {
+ if (e->nullWindow()) {
window = QGuiApplication::topLevelAt(e->global.toPoint());
localValid = false;
}
@@ -2103,7 +2094,7 @@ void QGuiApplicationPrivate::processTabletEvent(QWindowSystemInterfacePrivate::T
return;
tabletPressTarget = window;
} else {
- if (e->nullWindow) {
+ if (e->nullWindow()) {
window = tabletPressTarget;
localValid = false;
}
@@ -2240,7 +2231,7 @@ void QGuiApplicationPrivate::processTouchEvent(QWindowSystemInterfacePrivate::To
touchEvent.setWindow(*winIt);
QGuiApplication::sendSpontaneousEvent(*winIt, &touchEvent);
}
- if (!self->synthesizedMousePoints.isEmpty() && !e->synthetic) {
+ if (!self->synthesizedMousePoints.isEmpty() && !e->synthetic()) {
for (QHash<QWindow *, SynthesizedMouseData>::const_iterator synthIt = self->synthesizedMousePoints.constBegin(),
synthItEnd = self->synthesizedMousePoints.constEnd(); synthIt != synthItEnd; ++synthIt) {
if (!synthIt->window)
@@ -2252,7 +2243,7 @@ void QGuiApplicationPrivate::processTouchEvent(QWindowSystemInterfacePrivate::To
buttons & ~Qt::LeftButton,
e->modifiers,
Qt::MouseEventSynthesizedByQt);
- fake.synthetic = true;
+ fake.flags |= QWindowSystemInterfacePrivate::WindowSystemEvent::Synthetic;
processMouseEvent(&fake);
}
self->synthesizedMousePoints.clear();
@@ -2431,7 +2422,7 @@ void QGuiApplicationPrivate::processTouchEvent(QWindowSystemInterfacePrivate::To
}
QGuiApplication::sendSpontaneousEvent(w, &touchEvent);
- if (!e->synthetic && !touchEvent.isAccepted() && synthesizeMouseFromTouchEventsEnabled()) {
+ if (!e->synthetic() && !touchEvent.isAccepted() && synthesizeMouseFromTouchEventsEnabled()) {
// exclude touchpads as those generate their own mouse events
if (touchEvent.device()->type() != QTouchDevice::TouchPad) {
Qt::MouseButtons b = eventType == QEvent::TouchEnd ? Qt::NoButton : Qt::LeftButton;
@@ -2454,7 +2445,7 @@ void QGuiApplicationPrivate::processTouchEvent(QWindowSystemInterfacePrivate::To
b | (buttons & ~Qt::LeftButton),
e->modifiers,
Qt::MouseEventSynthesizedByQt);
- fake.synthetic = true;
+ fake.flags |= QWindowSystemInterfacePrivate::WindowSystemEvent::Synthetic;
processMouseEvent(&fake);
break;
}
diff --git a/src/gui/kernel/qguiapplication.h b/src/gui/kernel/qguiapplication.h
index 713f2f2669..ff6d5f5fba 100644
--- a/src/gui/kernel/qguiapplication.h
+++ b/src/gui/kernel/qguiapplication.h
@@ -143,7 +143,7 @@ public:
static Qt::ApplicationState applicationState();
static int exec();
- bool notify(QObject *, QEvent *);
+ bool notify(QObject *, QEvent *) Q_DECL_OVERRIDE;
#ifndef QT_NO_SESSIONMANAGER
// session management
@@ -170,8 +170,8 @@ Q_SIGNALS:
void paletteChanged(const QPalette &pal);
protected:
- bool event(QEvent *);
- bool compressEvent(QEvent *, QObject *receiver, QPostEventList *);
+ bool event(QEvent *) Q_DECL_OVERRIDE;
+ bool compressEvent(QEvent *, QObject *receiver, QPostEventList *) Q_DECL_OVERRIDE;
QGuiApplication(QGuiApplicationPrivate &p);
diff --git a/src/gui/kernel/qguiapplication_p.h b/src/gui/kernel/qguiapplication_p.h
index eed3d5c10e..8b444e1d34 100644
--- a/src/gui/kernel/qguiapplication_p.h
+++ b/src/gui/kernel/qguiapplication_p.h
@@ -81,7 +81,7 @@ public:
virtual void notifyLayoutDirectionChange();
virtual void notifyActiveWindowChange(QWindow *previous);
- virtual bool shouldQuit();
+ virtual bool shouldQuit() Q_DECL_OVERRIDE;
bool shouldQuitInternal(const QWindowList &processedWindows);
virtual bool tryCloseAllWindows();
@@ -270,6 +270,8 @@ public:
static Qt::MouseEventFlags mouseEventFlags(const QMouseEvent *event);
static void setMouseEventFlags(QMouseEvent *event, Qt::MouseEventFlags flags);
+ static Qt::MouseEventSource wheelEventSource(const QWheelEvent *event);
+
const QDrawHelperGammaTables *gammaTables();
// hook reimplemented in QApplication to apply the QStyle function on the QIcon
diff --git a/src/gui/kernel/qkeysequence.cpp b/src/gui/kernel/qkeysequence.cpp
index 209d1dd499..4a4ce22f35 100644
--- a/src/gui/kernel/qkeysequence.cpp
+++ b/src/gui/kernel/qkeysequence.cpp
@@ -289,6 +289,7 @@ void Q_GUI_EXPORT qt_set_sequence_auto_mnemonic(bool b) { qt_sequence_no_mnemoni
\row \li DeleteCompleteLine \li (none) \li (none) \li Ctrl+U \li Ctrl+U
\row \li InsertParagraphSeparator \li Enter \li Enter \li Enter \li Enter
\row \li InsertLineSeparator \li Shift+Enter \li Meta+Enter, Meta+O \li Shift+Enter \li Shift+Enter
+ \row \li Backspace \li (none) \li Meta+H \li (none) \li (none)
\endtable
Note that, since the key sequences used for the standard shortcuts differ
@@ -663,6 +664,9 @@ static const struct {
{ Qt::Key_Play, QT_TRANSLATE_NOOP("QShortcut", "Play") },
{ Qt::Key_Zoom, QT_TRANSLATE_NOOP("QShortcut", "Zoom") },
{ Qt::Key_Exit, QT_TRANSLATE_NOOP("QShortcut", "Exit") },
+ { Qt::Key_TouchpadToggle, QT_TRANSLATE_NOOP("QShortcut", "Touchpad Toggle") },
+ { Qt::Key_TouchpadOn, QT_TRANSLATE_NOOP("QShortcut", "Touchpad On") },
+ { Qt::Key_TouchpadOff, QT_TRANSLATE_NOOP("QShortcut", "Touchpad Off") },
{ 0, 0 }
};
@@ -679,6 +683,7 @@ static const struct {
\value AddTab Add new tab.
\value Back Navigate back.
+ \value Backspace Delete previous character.
\value Bold Bold text.
\value Close Close document/tab.
\value Copy Copy.
diff --git a/src/gui/kernel/qkeysequence.h b/src/gui/kernel/qkeysequence.h
index 5a2ce5a8b9..fd2a3e9d7b 100644
--- a/src/gui/kernel/qkeysequence.h
+++ b/src/gui/kernel/qkeysequence.h
@@ -134,7 +134,8 @@ public:
Quit,
FullScreen,
Deselect,
- DeleteCompleteLine
+ DeleteCompleteLine,
+ Backspace
};
enum SequenceFormat {
diff --git a/src/gui/kernel/qoffscreensurface.cpp b/src/gui/kernel/qoffscreensurface.cpp
index 5cf77de5d8..fb1dfd8df5 100644
--- a/src/gui/kernel/qoffscreensurface.cpp
+++ b/src/gui/kernel/qoffscreensurface.cpp
@@ -180,6 +180,9 @@ void QOffscreenSurface::create()
d->offscreenWindow->setGeometry(0, 0, d->size.width(), d->size.height());
d->offscreenWindow->create();
}
+
+ QPlatformSurfaceEvent e(QPlatformSurfaceEvent::SurfaceCreated);
+ QGuiApplication::sendEvent(this, &e);
}
}
@@ -191,6 +194,10 @@ void QOffscreenSurface::create()
void QOffscreenSurface::destroy()
{
Q_D(QOffscreenSurface);
+
+ QPlatformSurfaceEvent e(QPlatformSurfaceEvent::SurfaceAboutToBeDestroyed);
+ QGuiApplication::sendEvent(this, &e);
+
delete d->platformOffscreenSurface;
d->platformOffscreenSurface = 0;
if (d->offscreenWindow) {
diff --git a/src/gui/kernel/qoffscreensurface.h b/src/gui/kernel/qoffscreensurface.h
index a4ba51320b..a5dae71ae5 100644
--- a/src/gui/kernel/qoffscreensurface.h
+++ b/src/gui/kernel/qoffscreensurface.h
@@ -54,7 +54,7 @@ public:
explicit QOffscreenSurface(QScreen *screen = 0);
virtual ~QOffscreenSurface();
- SurfaceType surfaceType() const;
+ SurfaceType surfaceType() const Q_DECL_OVERRIDE;
void create();
void destroy();
@@ -62,10 +62,10 @@ public:
bool isValid() const;
void setFormat(const QSurfaceFormat &format);
- QSurfaceFormat format() const;
+ QSurfaceFormat format() const Q_DECL_OVERRIDE;
QSurfaceFormat requestedFormat() const;
- QSize size() const;
+ QSize size() const Q_DECL_OVERRIDE;
QScreen *screen() const;
void setScreen(QScreen *screen);
@@ -80,7 +80,7 @@ private Q_SLOTS:
private:
- QPlatformSurface *surfaceHandle() const;
+ QPlatformSurface *surfaceHandle() const Q_DECL_OVERRIDE;
Q_DISABLE_COPY(QOffscreenSurface)
};
diff --git a/src/gui/kernel/qopenglcontext.cpp b/src/gui/kernel/qopenglcontext.cpp
index b663afabbc..3fccd6ba9a 100644
--- a/src/gui/kernel/qopenglcontext.cpp
+++ b/src/gui/kernel/qopenglcontext.cpp
@@ -597,6 +597,7 @@ bool QOpenGLContext::create()
d->platformGLContext = QGuiApplicationPrivate::platformIntegration()->createPlatformOpenGLContext(this);
if (!d->platformGLContext)
return false;
+ d->platformGLContext->initialize();
d->platformGLContext->setContext(this);
if (!d->platformGLContext->isSharing())
d->shareContext = 0;
diff --git a/src/gui/kernel/qopenglcontext_p.h b/src/gui/kernel/qopenglcontext_p.h
index 975553e7cd..c4eb6545bc 100644
--- a/src/gui/kernel/qopenglcontext_p.h
+++ b/src/gui/kernel/qopenglcontext_p.h
@@ -105,12 +105,12 @@ public:
GLuint id() const { return m_id; }
protected:
- void invalidateResource()
+ void invalidateResource() Q_DECL_OVERRIDE
{
m_id = 0;
}
- void freeResource(QOpenGLContext *context);
+ void freeResource(QOpenGLContext *context) Q_DECL_OVERRIDE;
private:
GLuint m_id;
diff --git a/src/gui/kernel/qopenglwindow.cpp b/src/gui/kernel/qopenglwindow.cpp
index c37974c429..c58e296b5a 100644
--- a/src/gui/kernel/qopenglwindow.cpp
+++ b/src/gui/kernel/qopenglwindow.cpp
@@ -166,10 +166,13 @@ class QOpenGLWindowPrivate : public QPaintDeviceWindowPrivate
{
Q_DECLARE_PUBLIC(QOpenGLWindow)
public:
- QOpenGLWindowPrivate(QOpenGLWindow::UpdateBehavior updateBehavior)
+ QOpenGLWindowPrivate(QOpenGLContext *shareContext, QOpenGLWindow::UpdateBehavior updateBehavior)
: updateBehavior(updateBehavior)
, hasFboBlit(false)
+ , shareContext(shareContext)
{
+ if (!shareContext)
+ this->shareContext = qt_gl_global_share_context();
}
~QOpenGLWindowPrivate()
@@ -201,7 +204,7 @@ public:
if (!context) {
context.reset(new QOpenGLContext);
- context->setShareContext(qt_gl_global_share_context());
+ context->setShareContext(shareContext);
context->setFormat(q->requestedFormat());
if (!context->create())
qWarning("QOpenGLWindow::beginPaint: Failed to create context");
@@ -299,6 +302,7 @@ public:
QOpenGLWindow::UpdateBehavior updateBehavior;
bool hasFboBlit;
QScopedPointer<QOpenGLContext> context;
+ QOpenGLContext *shareContext;
QScopedPointer<QOpenGLFramebufferObject> fbo;
QScopedPointer<QOpenGLWindowPaintDevice> paintDevice;
QOpenGLTextureBlitter blitter;
@@ -317,12 +321,22 @@ void QOpenGLWindowPaintDevice::ensureActiveTarget()
\sa QOpenGLWindow::UpdateBehavior
*/
QOpenGLWindow::QOpenGLWindow(QOpenGLWindow::UpdateBehavior updateBehavior, QWindow *parent)
- : QPaintDeviceWindow(*(new QOpenGLWindowPrivate(updateBehavior)), parent)
+ : QPaintDeviceWindow(*(new QOpenGLWindowPrivate(Q_NULLPTR, updateBehavior)), parent)
{
setSurfaceType(QSurface::OpenGLSurface);
}
/*!
+ Constructs a new QOpenGLWindow with the given \a parent and \a updateBehavior. The QOpenGLWindow's context will share with \a shareContext.
+
+ \sa QOpenGLWindow::UpdateBehavior shareContext
+*/
+QOpenGLWindow::QOpenGLWindow(QOpenGLContext *shareContext, UpdateBehavior updateBehavior, QWindow *parent)
+ : QPaintDeviceWindow(*(new QOpenGLWindowPrivate(shareContext, updateBehavior)), parent)
+{
+ setSurfaceType(QSurface::OpenGLSurface);
+}
+/*!
\return the update behavior for this QOpenGLWindow.
*/
QOpenGLWindow::UpdateBehavior QOpenGLWindow::updateBehavior() const
@@ -414,6 +428,15 @@ QOpenGLContext *QOpenGLWindow::context() const
}
/*!
+ \return The QOpenGLContext requested to be shared with this window's QOpenGLContext.
+*/
+QOpenGLContext *QOpenGLWindow::shareContext() const
+{
+ Q_D(const QOpenGLWindow);
+ return d->shareContext;
+}
+
+/*!
The framebuffer object handle used by this window.
When the update behavior is set to \c NoPartialUpdate, there is no separate
diff --git a/src/gui/kernel/qopenglwindow.h b/src/gui/kernel/qopenglwindow.h
index 3b0b399b0a..6b64271b7b 100644
--- a/src/gui/kernel/qopenglwindow.h
+++ b/src/gui/kernel/qopenglwindow.h
@@ -59,6 +59,7 @@ public:
};
explicit QOpenGLWindow(UpdateBehavior updateBehavior = NoPartialUpdate, QWindow *parent = 0);
+ explicit QOpenGLWindow(QOpenGLContext *shareContext, UpdateBehavior updateBehavior = NoPartialUpdate, QWindow *parent = 0);
UpdateBehavior updateBehavior() const;
bool isValid() const;
@@ -67,6 +68,7 @@ public:
void doneCurrent();
QOpenGLContext *context() const;
+ QOpenGLContext *shareContext() const;
GLuint defaultFramebufferObject() const;
diff --git a/src/gui/kernel/qpaintdevicewindow.cpp b/src/gui/kernel/qpaintdevicewindow.cpp
index cf8653426f..d5b15ed5f5 100644
--- a/src/gui/kernel/qpaintdevicewindow.cpp
+++ b/src/gui/kernel/qpaintdevicewindow.cpp
@@ -76,7 +76,7 @@ void QPaintDeviceWindow::update(const QRect &rect)
{
Q_D(QPaintDeviceWindow);
d->dirtyRegion += rect;
- d->triggerUpdate();
+ requestUpdate();
}
/*!
@@ -89,7 +89,7 @@ void QPaintDeviceWindow::update(const QRegion &region)
{
Q_D(QPaintDeviceWindow);
d->dirtyRegion += region;
- d->triggerUpdate();
+ requestUpdate();
}
/*!
@@ -179,7 +179,6 @@ bool QPaintDeviceWindow::event(QEvent *event)
Q_D(QPaintDeviceWindow);
if (event->type() == QEvent::UpdateRequest) {
- d->paintEventSent = false;
if (handle()) // platform window may be gone when the window is closed during app exit
d->handleUpdateEvent();
return true;
diff --git a/src/gui/kernel/qpaintdevicewindow_p.h b/src/gui/kernel/qpaintdevicewindow_p.h
index 1935bb6db5..865861125b 100644
--- a/src/gui/kernel/qpaintdevicewindow_p.h
+++ b/src/gui/kernel/qpaintdevicewindow_p.h
@@ -46,8 +46,6 @@ class Q_GUI_EXPORT QPaintDeviceWindowPrivate : public QWindowPrivate
Q_DECLARE_PUBLIC(QPaintDeviceWindow)
public:
- QPaintDeviceWindowPrivate() : paintEventSent(false) { }
-
virtual void beginPaint(const QRegion &region)
{
Q_UNUSED(region);
@@ -82,15 +80,6 @@ public:
return true;
}
- void triggerUpdate()
- {
- Q_Q(QPaintDeviceWindow);
- if (!paintEventSent) {
- QCoreApplication::postEvent(q, new QEvent(QEvent::UpdateRequest));
- paintEventSent = true;
- }
- }
-
void doFlush(const QRegion &region)
{
QRegion toFlush = region;
@@ -113,7 +102,6 @@ public:
private:
QRegion dirtyRegion;
- bool paintEventSent;
};
diff --git a/src/gui/kernel/qpixelformat.cpp b/src/gui/kernel/qpixelformat.cpp
index cfa8a96d69..7e50a0cd41 100644
--- a/src/gui/kernel/qpixelformat.cpp
+++ b/src/gui/kernel/qpixelformat.cpp
@@ -69,6 +69,7 @@ QT_BEGIN_NAMESPACE
\enum QPixelFormat::ColorModel
This enum type is used to describe the color model of the pixelformat.
+ Alpha was added in 5.5.
\value RGB The color model is RGB.
@@ -86,6 +87,8 @@ QT_BEGIN_NAMESPACE
\value HSV The color model is HSV.
\value YUV The color model is YUV.
+
+ \value Alpha There is no color model, only alpha is used.
*/
/*!
@@ -282,6 +285,21 @@ QT_BEGIN_NAMESPACE
*/
/*!
+ \fn QPixelFormat qPixelFormatAlpha(uchar channelSize,
+ QPixelFormat::TypeInterpretation typeInterpretation = QPixelFormat::UnsignedInteger)
+ \relates QPixelFormat
+ \since 5.5
+
+ Constructor function for creating an Alpha format. A mask format can be
+ described by passing 1 to \a channelSize. Its also possible to define very
+ accurate alpha formats using doubles to describe each pixel by passing 8
+ as \a channelSize and FloatingPoint as \a typeInterpretation.
+
+ \sa QPixelFormat::TypeInterpretation
+*/
+
+
+/*!
\fn QPixelFormat qPixelFormatCmyk(uchar channelSize,
uchar alphaSize = 0,
QPixelFormat::AlphaUsage alphaUsage = QPixelFormat::IgnoresAlpha,
diff --git a/src/gui/kernel/qpixelformat.h b/src/gui/kernel/qpixelformat.h
index f55c97c7c0..b7a4377a69 100644
--- a/src/gui/kernel/qpixelformat.h
+++ b/src/gui/kernel/qpixelformat.h
@@ -103,7 +103,8 @@ public:
CMYK,
HSL,
HSV,
- YUV
+ YUV,
+ Alpha
};
enum AlphaUsage {
@@ -304,6 +305,22 @@ Q_DECL_CONSTEXPR inline QPixelFormat qPixelFormatGrayscale(uchar channelSize,
typeInt);
}
+Q_DECL_CONSTEXPR inline QPixelFormat qPixelFormatAlpha(uchar channelSize,
+ QPixelFormat::TypeInterpretation typeInt=QPixelFormat::UnsignedInteger) Q_DECL_NOTHROW
+{
+ return QPixelFormat(QPixelFormat::Alpha,
+ 0,
+ 0,
+ 0,
+ 0,
+ 0,
+ channelSize,
+ QPixelFormat::UsesAlpha,
+ QPixelFormat::AtBeginning,
+ QPixelFormat::NotPremultiplied,
+ typeInt);
+}
+
Q_DECL_CONSTEXPR inline QPixelFormat qPixelFormatCmyk(uchar channelSize,
uchar alfa=0,
QPixelFormat::AlphaUsage usage=QPixelFormat::IgnoresAlpha,
diff --git a/src/gui/kernel/qplatformgraphicsbuffer.cpp b/src/gui/kernel/qplatformgraphicsbuffer.cpp
new file mode 100644
index 0000000000..f032601b29
--- /dev/null
+++ b/src/gui/kernel/qplatformgraphicsbuffer.cpp
@@ -0,0 +1,277 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qplatformgraphicsbuffer.h"
+#include <QtGui/QOpenGLContext>
+#include <QtGui/QOpenGLFunctions>
+#include <QtGui/qopengl.h>
+#include <QtCore/QDebug>
+
+QT_BEGIN_NAMESPACE
+/*!
+ \class QPlatformGraphicsBuffer
+ \inmodule QtGui
+ \since 5.5
+ \brief The QPlatformGraphicsBuffer is a windowsystem abstraction for native graphics buffers
+
+ Different platforms have different ways of representing graphics buffers. On
+ some platforms, it is possible to create one graphics buffer that you can bind
+ to a texture and also get main memory access to the image bits. On the
+ other hand, on some platforms all graphics buffer abstraction is completely
+ hidden.
+
+ QPlatformGraphicsBuffer is an abstraction of a single Graphics Buffer.
+
+ There is no public constructor nor any public factory function.
+
+ QPlatformGraphicsBuffer is intended to be created by using platform specific
+ APIs available from QtPlatformHeaders, or there might be accessor functions
+ similar to the accessor function that QPlatformBackingstore has.
+*/
+
+/*!
+ \enum QPlatformGraphicsBuffer::AccessType
+
+ This enum describes the access that is desired or granted for the graphics
+ buffer.
+
+ \value None
+ \value SWReadAccess
+ \value SWWriteAccess
+ \value TextureAccess
+ \value HWCompositor
+*/
+
+/*!
+ \enum QPlatformGraphicsBuffer::Origin
+
+ This enum describes the origin of the content of the buffer.
+
+ \value OriginTopLeft
+ \value OriginBottomLeft
+*/
+
+/*!
+ Protected constructor to initialize the private members.
+
+ \a size is the size of the buffer.
+ \a format is the format of the buffer.
+
+ \sa size() format()
+*/
+QPlatformGraphicsBuffer::QPlatformGraphicsBuffer(const QSize &size, const QPixelFormat &format)
+ : m_size(size)
+ , m_format(format)
+{
+}
+
+
+/*!
+ Virtual destructor.
+*/
+QPlatformGraphicsBuffer::~QPlatformGraphicsBuffer()
+{
+}
+
+/*!
+ Binds the content of this graphics buffer into the currently bound texture.
+
+ This function should fail for buffers not capable of locking to TextureAccess.
+
+ \a rect is the subrect which is desired to be bounded to the texture. This
+ argument has a no less than semantic, meaning more (if not all) of the buffer
+ can be bounded to the texture. An empty QRect is interpreted as entire buffer
+ should be bound.
+
+ This function only supports binding buffers to the GL_TEXTURE_2D texture
+ target.
+
+ Returns true on success, otherwise false.
+*/
+bool QPlatformGraphicsBuffer::bindToTexture(const QRect &rect) const
+{
+ Q_UNUSED(rect);
+ return false;
+}
+
+/*!
+ \fn QPlatformGraphicsBuffer::AccessTypes QPlatformGraphicsBuffer::isLocked() const
+ Function to check if the buffer is locked.
+
+ \sa lock()
+*/
+
+/*!
+ Before the data can be retrieved or before a buffer can be bound to a
+ texture it needs to be locked. This is a separate function call since this
+ operation might be time consuming, and it would not be satisfactory to do
+ it per function call.
+
+ \a access is the access type wanted.
+
+ \a rect is the subrect which is desired to be locked. This
+ argument has a no less than semantic, meaning more (if not all) of the buffer
+ can be locked. An empty QRect is interpreted as entire buffer should be locked.
+
+ Return true on successfully locking all AccessTypes specified \a access
+ otherwise returns false and no locks have been granted.
+*/
+bool QPlatformGraphicsBuffer::lock(AccessTypes access, const QRect &rect)
+{
+ bool locked = doLock(access, rect);
+ if (locked)
+ m_lock_access |= access;
+
+ return locked;
+}
+
+/*!
+ Unlocks the current buffer lock.
+
+ This function calls doUnlock, and then emits the unlocked signal with the
+ AccessTypes from before doUnlock was called.
+*/
+void QPlatformGraphicsBuffer::unlock()
+{
+ if (m_lock_access == None)
+ return;
+ AccessTypes previous = m_lock_access;
+ doUnlock();
+ m_lock_access = None;
+ emit unlocked(previous);
+}
+
+
+/*!
+ \fn QPlatformGraphicsBuffer::doLock(AccessTypes access, const QRect &rect = QRect())
+
+ This function should be reimplemented by subclasses. If one of the \a
+ access types specified can not be locked, then all should fail and this
+ function should return false.
+
+ \a rect is the subrect which is desired to be locked. This
+ argument has a no less than semantic, meaning more (if not all) of the
+ buffer can be locked. An empty QRect should be interpreted as the entire buffer
+ should be locked.
+
+ It is safe to call isLocked() to verify the current lock state.
+*/
+
+/*!
+ \fn QPlatformGraphicsBuffer::doUnlock()
+
+ This function should remove all locks set on the buffer.
+
+ It is safe to call isLocked() to verify the current lock state.
+*/
+
+/*!
+ \fn QPlatformGraphicsBuffer::unlocked(AccessTypes previousAccessTypes)
+
+ Signal that is emitted after unlocked has been called.
+
+ \a previousAccessTypes is the access types locked before unlock was called.
+*/
+
+/*!
+ Accessor for the bytes of the buffer. This function needs to be called on a
+ buffer with SWReadAccess access lock. Behavior is undefined for modifying
+ the memory returned when not having a SWWriteAccess.
+*/
+const uchar *QPlatformGraphicsBuffer::data() const
+{ return Q_NULLPTR; }
+
+/*!
+ Accessor for the bytes of the buffer. This function needs to be called on a
+ buffer with SWReadAccess access lock. Behavior is undefined for modifying
+ the memory returned when not having a SWWriteAccess.
+*/
+uchar *QPlatformGraphicsBuffer::data()
+{
+ return Q_NULLPTR;
+}
+
+/*!
+ Accessor for the length of the data buffer. This function is a convenience
+ function multiplying height of buffer with bytesPerLine().
+
+ \sa data() bytesPerLine() size()
+*/
+int QPlatformGraphicsBuffer::byteCount() const
+{
+ Q_ASSERT(isLocked() & SWReadAccess);
+ return size().height() * bytesPerLine();
+}
+
+/*!
+ Accessor for bytes per line in the graphics buffer.
+*/
+int QPlatformGraphicsBuffer::bytesPerLine() const
+{
+ return 0;
+}
+
+
+/*!
+ In origin of the content of the graphics buffer.
+
+ Default implementation is OriginTopLeft, as this is the coordinate
+ system default for Qt. However, for most regular OpenGL textures
+ this will be OriginBottomLeft.
+*/
+QPlatformGraphicsBuffer::Origin QPlatformGraphicsBuffer::origin() const
+{
+ return OriginTopLeft;
+}
+
+/*!
+ \fn QPlatformGraphicsBuffer::size() const
+
+ Accessor for content size.
+*/
+
+/*!
+ \fn QPlatformGraphicsBuffer::format() const
+
+ Accessor for the pixel format of the buffer.
+*/
+
+QT_END_NAMESPACE
diff --git a/src/gui/kernel/qplatformgraphicsbuffer.h b/src/gui/kernel/qplatformgraphicsbuffer.h
new file mode 100644
index 0000000000..62e06bceeb
--- /dev/null
+++ b/src/gui/kernel/qplatformgraphicsbuffer.h
@@ -0,0 +1,117 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QPLATFORMGRAPHICSBUFFER_H
+#define QPLATFORMGRAPHICSBUFFER_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is part of the QPA API and is not meant to be used
+// in applications. Usage of this API may make your code
+// source and binary incompatible with future versions of Qt.
+//
+
+
+#include <QtCore/QSize>
+#include <QtCore/QRect>
+#include <QtGui/QPixelFormat>
+#include <QtCore/qflags.h>
+#include <QtCore/QObject>
+
+QT_BEGIN_NAMESPACE
+
+class Q_GUI_EXPORT QPlatformGraphicsBuffer : public QObject
+{
+Q_OBJECT
+public:
+ enum AccessType
+ {
+ None = 0x00,
+ SWReadAccess = 0x01,
+ SWWriteAccess = 0x02,
+ TextureAccess = 0x04,
+ HWCompositor = 0x08
+ };
+ Q_DECLARE_FLAGS(AccessTypes, AccessType);
+
+ enum Origin {
+ OriginBottomLeft,
+ OriginTopLeft
+ };
+
+ virtual ~QPlatformGraphicsBuffer();
+
+ AccessTypes isLocked() const { return m_lock_access; }
+ bool lock(AccessTypes access, const QRect &rect = QRect());
+ void unlock();
+
+ virtual bool bindToTexture(const QRect &rect = QRect()) const;
+
+ virtual const uchar *data() const;
+ virtual uchar *data();
+ virtual int bytesPerLine() const;
+ int byteCount() const;
+
+ virtual Origin origin() const;
+
+ QSize size() const { return m_size; }
+ QPixelFormat format() const { return m_format; }
+
+Q_SIGNALS:
+ void unlocked(AccessTypes previousAccessTypes);
+
+protected:
+ QPlatformGraphicsBuffer(const QSize &size, const QPixelFormat &format);
+
+ virtual bool doLock(AccessTypes access, const QRect &rect = QRect()) = 0;
+ virtual void doUnlock() = 0;
+
+private:
+ QSize m_size;
+ QPixelFormat m_format;
+ AccessTypes m_lock_access;
+};
+
+QT_END_NAMESPACE
+
+#endif //QPLATFORMGRAPHICSBUFFER_H
diff --git a/src/gui/kernel/qplatformgraphicsbufferhelper.cpp b/src/gui/kernel/qplatformgraphicsbufferhelper.cpp
new file mode 100644
index 0000000000..f3ea521356
--- /dev/null
+++ b/src/gui/kernel/qplatformgraphicsbufferhelper.cpp
@@ -0,0 +1,185 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtPlatformSupport module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui/qpa/qplatformgraphicsbuffer.h>
+
+#include "qplatformgraphicsbufferhelper.h"
+#include <QtCore/QDebug>
+#include <QtGui/qopengl.h>
+#include <QtGui/QImage>
+#include <QtGui/QOpenGLContext>
+#include <QtGui/QOpenGLFunctions>
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ Convenience function to both lock and bind the buffer to a texture. This
+ function will first try and lock with texture read and texture write
+ access. If this succeeds it will use the bindToTexture function to bind the
+ content to the currently bound texture. If this fail it will try and lock
+ with SWReadAccess and then use the bindSWToTexture convenience function.
+
+ \a swizzle is suppose to be used by the caller to figure out if the Red and
+ Blue color channels need to be swizzled when rendering.
+
+ \a rect is the subrect which is desired to be bounded to the texture. This
+ argument has a no less than semantic, meaning more (if not all) of the buffer
+ can be bounded to the texture. An empty QRect is interpreted as entire buffer
+ should be bound.
+
+ The user should use the AccessTypes returned by isLocked to figure out what
+ lock has been obtained.
+
+ returns true if the buffer has successfully been bound to the currently
+ bound texture, otherwise returns false.
+*/
+bool QPlatformGraphicsBufferHelper::lockAndBindToTexture(QPlatformGraphicsBuffer *graphicsBuffer,
+ bool *swizzle,
+ const QRect &rect)
+{
+ if (graphicsBuffer->lock(QPlatformGraphicsBuffer::TextureAccess)) {
+ if (!graphicsBuffer->bindToTexture(rect)) {
+ qWarning() << Q_FUNC_INFO << "Failed to bind graphicsbuffer to texture";
+ return false;
+ }
+ if (swizzle)
+ *swizzle = false;
+ } else if (graphicsBuffer->lock(QPlatformGraphicsBuffer::SWReadAccess)) {
+ if (!bindSWToTexture(graphicsBuffer, swizzle, rect)) {
+ qWarning() << Q_FUNC_INFO << "Failed to bind SW graphcisbuffer to texture";
+ return false;
+ }
+ } else {
+ qWarning() << Q_FUNC_INFO << "Failed to lock";
+ return false;
+ }
+ return true;
+}
+
+/*!
+ Convenience function that uploads the current raster content to the currently bound texture.
+
+ \a swizzleRandB is suppose to be used by the caller to figure out if the Red and
+ Blue color channels need to be swizzled when rendering. This is an
+ optimization. Qt often renders to software buffers interpreting pixels as
+ unsigned ints. When these buffers are uploaded to textures and each color
+ channel per pixel is interpreted as a byte (read sequentially), then the
+ Red and Blue channels are swapped. Conveniently the Alpha buffer will be
+ correct since Qt historically has had the alpha channel as the first
+ channel, while OpenGL typically expects the alpha channel to be the last
+ channel.
+
+ \a subRect is the subrect which is desired to be bounded to the texture. This
+ argument has a no less than semantic, meaning more (if not all) of the buffer
+ can be bounded to the texture. An empty QRect is interpreted as entire buffer
+ should be bound.
+
+ This function fails for buffers not capable of locking to SWAccess.
+
+ Returns true on success, otherwise false.
+*/
+bool QPlatformGraphicsBufferHelper::bindSWToTexture(const QPlatformGraphicsBuffer *graphicsBuffer,
+ bool *swizzleRandB,
+ const QRect &subRect)
+{
+ if (!QOpenGLContext::currentContext())
+ return false;
+
+ if (!(graphicsBuffer->isLocked() & QPlatformGraphicsBuffer::SWReadAccess))
+ return false;
+
+ QSize size = graphicsBuffer->size();
+
+ Q_ASSERT(subRect.isEmpty() || QRect(QPoint(0,0), size).contains(subRect));
+
+ bool swizzle = false;
+ QImage::Format imageformat = QImage::toImageFormat(graphicsBuffer->format());
+ QImage image(graphicsBuffer->data(), size.width(), size.height(), graphicsBuffer->bytesPerLine(), imageformat);
+ if (graphicsBuffer->bytesPerLine() != (size.width() * 4)) {
+ image = image.convertToFormat(QImage::Format_RGBA8888);
+ } else if (imageformat == QImage::Format_RGB32) {
+ swizzle = true;
+ } else if (imageformat != QImage::Format_RGBA8888) {
+ image = image.convertToFormat(QImage::Format_RGBA8888);
+ }
+
+ QOpenGLFunctions *funcs = QOpenGLContext::currentContext()->functions();
+
+ QRect rect = subRect;
+ if (rect.isNull() || rect == QRect(QPoint(0,0),size)) {
+ funcs->glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, size.width(), size.height(), 0, GL_RGBA, GL_UNSIGNED_BYTE, image.constBits());
+ } else {
+#ifndef QT_OPENGL_ES_2
+ if (!QOpenGLContext::currentContext()->isOpenGLES()) {
+ funcs->glPixelStorei(GL_UNPACK_ROW_LENGTH, image.width());
+ funcs->glTexSubImage2D(GL_TEXTURE_2D, 0, rect.x(), rect.y(), rect.width(), rect.height(), GL_RGBA, GL_UNSIGNED_BYTE,
+ image.constScanLine(rect.y()) + rect.x() * 4);
+ funcs->glPixelStorei(GL_UNPACK_ROW_LENGTH, 0);
+ } else
+#endif
+ {
+ // if the rect is wide enough it's cheaper to just
+ // extend it instead of doing an image copy
+ if (rect.width() >= size.width() / 2) {
+ rect.setX(0);
+ rect.setWidth(size.width());
+ }
+
+ // if the sub-rect is full-width we can pass the image data directly to
+ // OpenGL instead of copying, since there's no gap between scanlines
+
+ if (rect.width() == size.width()) {
+ funcs->glTexSubImage2D(GL_TEXTURE_2D, 0, 0, rect.y(), rect.width(), rect.height(), GL_RGBA, GL_UNSIGNED_BYTE,
+ image.constScanLine(rect.y()));
+ } else {
+ funcs->glTexSubImage2D(GL_TEXTURE_2D, 0, rect.x(), rect.y(), rect.width(), rect.height(), GL_RGBA, GL_UNSIGNED_BYTE,
+ image.copy(rect).constBits());
+ }
+ }
+ }
+ if (swizzleRandB)
+ *swizzleRandB = swizzle;
+
+ return true;
+
+}
+
+QT_END_NAMESPACE
diff --git a/src/gui/kernel/qplatformgraphicsbufferhelper.h b/src/gui/kernel/qplatformgraphicsbufferhelper.h
new file mode 100644
index 0000000000..089bbba755
--- /dev/null
+++ b/src/gui/kernel/qplatformgraphicsbufferhelper.h
@@ -0,0 +1,56 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtPlatformSupport module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QPLATFORMGRAPHICSBUFFERHELPER_H
+#define QPLATFORMGRAPHICSBUFFERHELPER_H
+
+#include <QtGui/qpa/qplatformgraphicsbuffer.h>
+
+QT_BEGIN_NAMESPACE
+
+namespace QPlatformGraphicsBufferHelper {
+ bool lockAndBindToTexture(QPlatformGraphicsBuffer *graphicsBuffer, bool *swizzleRandB, const QRect &rect = QRect());
+ bool bindSWToTexture(const QPlatformGraphicsBuffer *graphicsBuffer, bool *swizzleRandB = Q_NULLPTR, const QRect &rect = QRect());
+}
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/gui/kernel/qplatformhardwarecompositor.cpp b/src/gui/kernel/qplatformhardwarecompositor.cpp
new file mode 100644
index 0000000000..6c010a7d7c
--- /dev/null
+++ b/src/gui/kernel/qplatformhardwarecompositor.cpp
@@ -0,0 +1,98 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Jolla Ltd, author: <gunnar.sletta@jollamobile.com>
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qplatformhardwarecompositor.h"
+
+QT_BEGIN_NAMESPACE
+
+/*
+ Layer:
+
+ 'transform' is a generic transform which can position the layer at
+ any given position with optional scale and rotation. It is quite likely that
+ the hardware compositor does not support arbitrary rotations and projective
+ transforms, but this is an easy way of expressing a number of different
+ scale/rotations in a generic way so deal with it.
+
+ 'opacity' is the opacity of the layer
+
+ 'subRect' is the region of the layer to actually draw. By default
+ this is (0,0)->(1,1). The values are relative to size and can
+ thus support subpixels.
+
+ 'color' If color is a valid color and handle is 0, render the layer as
+ a solid color layer.
+
+ 'buffer' The buffer to compose. Please note that the compositor might
+ lock buffers for read access and retain that lock after the composition
+ step has finished.
+
+ // Screen geometry (in pixels)
+ +-----------------------------------------
+ |\
+ | \ transform
+ | \ (0, 0) is top left in "layer coordinates"
+ | +-----------------------------------------+ size.width (in pixels)
+ | | |
+ | | |
+ | | |
+ | | subRect |
+ | | +---------------------------+ |
+ | | | float coords in the range | |
+ | | | 0-1. 0 is top/left. 1 is | |
+ | | | bottom/right. Relative to | |
+ | | | size. | |
+ | | +---------------------------+ |
+ | | |
+ | +-----------------------------------------+
+ | size.height (in pixels)
+ |
+
+*/
+
+QPlatformHardwareCompositor::Layer::Layer()
+ : opacity(1)
+ , subRect(0, 0, 1, 1)
+ , buffer(0)
+{
+}
+
+QT_END_NAMESPACE
diff --git a/src/gui/kernel/qplatformhardwarecompositor.h b/src/gui/kernel/qplatformhardwarecompositor.h
new file mode 100644
index 0000000000..89c98a6262
--- /dev/null
+++ b/src/gui/kernel/qplatformhardwarecompositor.h
@@ -0,0 +1,80 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Jolla Ltd, author: <gunnar.sletta@jollamobile.com>
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is part of the QPA API and is not meant to be used
+// in applications. Usage of this API may make your code
+// source and binary incompatible with future versions of Qt.
+//
+
+#ifndef QPLATFORMHARDWARECOMPOSITOR_H
+#define QPLATFORMHARDWARECOMPOSITOR_H
+
+#include <QtGui/QMatrix4x4>
+#include <QtGui/QColor>
+
+QT_BEGIN_NAMESPACE
+
+class QPlatformGraphicsBuffer;
+
+class Q_GUI_EXPORT QPlatformHardwareCompositor : public QObject
+{
+ Q_OBJECT
+
+public:
+ struct Layer {
+ Layer();
+ QMatrix4x4 transform;
+ qreal opacity;
+ QRectF subRect;
+ QColor color;
+ QPlatformGraphicsBuffer *buffer;
+ };
+ virtual ~QPlatformHardwareCompositor() {}
+ virtual bool compose(const QVector<Layer> &layers) = 0;
+};
+
+QT_END_NAMESPACE
+
+#endif // QPLATFORMHARDWARECOMPOSITOR_H
diff --git a/src/gui/kernel/qplatformintegration.cpp b/src/gui/kernel/qplatformintegration.cpp
index 39b031ef6d..98755c3a5e 100644
--- a/src/gui/kernel/qplatformintegration.cpp
+++ b/src/gui/kernel/qplatformintegration.cpp
@@ -324,6 +324,16 @@ void QPlatformIntegration::initialize()
}
/*!
+ Called before the platform integration is deleted. Useful when cleanup relies on virtual
+ functions.
+
+ \since 5.5
+*/
+void QPlatformIntegration::destroy()
+{
+}
+
+/*!
Returns the platforms input context.
The default implementation returns 0, implying no input method support.
@@ -429,7 +439,7 @@ QList<int> QPlatformIntegration::possibleKeys(const QKeyEvent *) const
This adds the screen to QGuiApplication::screens(), and emits the
QGuiApplication::screenAdded() signal.
- The screen is automatically removed when the QPlatformScreen is destroyed.
+ The screen should be deleted by calling QPlatformIntegration::destroyScreen().
*/
void QPlatformIntegration::screenAdded(QPlatformScreen *ps)
{
@@ -439,6 +449,22 @@ void QPlatformIntegration::screenAdded(QPlatformScreen *ps)
emit qGuiApp->screenAdded(screen);
}
+/*!
+ Should be called by the implementation whenever a screen is removed.
+
+ This removes the screen from QGuiApplication::screens(), and deletes it.
+
+ Failing to call this and manually deleting the QPlatformScreen instead may
+ lead to a crash due to a pure virtual call.
+*/
+void QPlatformIntegration::destroyScreen(QPlatformScreen *screen)
+{
+ QGuiApplicationPrivate::screen_list.removeOne(screen->d_func()->screen);
+ delete screen->d_func()->screen;
+ screen->d_func()->screen = Q_NULLPTR;
+ delete screen;
+}
+
QStringList QPlatformIntegration::themeNames() const
{
return QStringList();
@@ -513,4 +539,9 @@ QOpenGLContext::OpenGLModuleType QPlatformIntegration::openGLModuleType()
}
#endif
+QPlatformHardwareCompositor *QPlatformIntegration::hardwareCompositor(QScreen *) const
+{
+ return 0;
+}
+
QT_END_NAMESPACE
diff --git a/src/gui/kernel/qplatformintegration.h b/src/gui/kernel/qplatformintegration.h
index d510240fa4..adc9c98c37 100644
--- a/src/gui/kernel/qplatformintegration.h
+++ b/src/gui/kernel/qplatformintegration.h
@@ -71,6 +71,7 @@ class QPlatformSessionManager;
class QKeyEvent;
class QPlatformOffscreenSurface;
class QOffscreenSurface;
+class QPlatformHardwareCompositor;
class Q_GUI_EXPORT QPlatformIntegration
{
@@ -109,6 +110,7 @@ public:
// Event dispatcher:
virtual QAbstractEventDispatcher *createEventDispatcher() const = 0;
virtual void initialize();
+ virtual void destroy();
//Deeper window system integrations
virtual QPlatformFontDatabase *fontDatabase() const;
@@ -168,8 +170,11 @@ public:
virtual QOpenGLContext::OpenGLModuleType openGLModuleType();
#endif
+ virtual QPlatformHardwareCompositor *hardwareCompositor(QScreen *) const;
+
protected:
void screenAdded(QPlatformScreen *screen);
+ void destroyScreen(QPlatformScreen *screen);
};
QT_END_NAMESPACE
diff --git a/src/gui/kernel/qplatformoffscreensurface.h b/src/gui/kernel/qplatformoffscreensurface.h
index 07bb710eb8..abd51313b9 100644
--- a/src/gui/kernel/qplatformoffscreensurface.h
+++ b/src/gui/kernel/qplatformoffscreensurface.h
@@ -63,7 +63,7 @@ public:
QPlatformScreen *screen() const;
- virtual QSurfaceFormat format() const;
+ virtual QSurfaceFormat format() const Q_DECL_OVERRIDE;
virtual bool isValid() const;
protected:
diff --git a/src/gui/kernel/qplatformopenglcontext.cpp b/src/gui/kernel/qplatformopenglcontext.cpp
index 527bfdd983..bf0dccd440 100644
--- a/src/gui/kernel/qplatformopenglcontext.cpp
+++ b/src/gui/kernel/qplatformopenglcontext.cpp
@@ -89,6 +89,16 @@ QPlatformOpenGLContext::~QPlatformOpenGLContext()
}
/*!
+ Called after a new instance is constructed. The default implementation does nothing.
+
+ Subclasses can use this function to perform additional initialization that relies on
+ virtual functions.
+ */
+void QPlatformOpenGLContext::initialize()
+{
+}
+
+/*!
Reimplement in subclass if your platform uses framebuffer objects for surfaces.
The default implementation returns 0.
diff --git a/src/gui/kernel/qplatformopenglcontext.h b/src/gui/kernel/qplatformopenglcontext.h
index 261b6921a4..0a2bacfbde 100644
--- a/src/gui/kernel/qplatformopenglcontext.h
+++ b/src/gui/kernel/qplatformopenglcontext.h
@@ -63,6 +63,8 @@ public:
QPlatformOpenGLContext();
virtual ~QPlatformOpenGLContext();
+ virtual void initialize();
+
virtual QSurfaceFormat format() const = 0;
virtual void swapBuffers(QPlatformSurface *surface) = 0;
diff --git a/src/gui/kernel/qplatformscreen.cpp b/src/gui/kernel/qplatformscreen.cpp
index 71710d1cb1..fa6d785b04 100644
--- a/src/gui/kernel/qplatformscreen.cpp
+++ b/src/gui/kernel/qplatformscreen.cpp
@@ -52,9 +52,11 @@ QPlatformScreen::QPlatformScreen()
QPlatformScreen::~QPlatformScreen()
{
Q_D(QPlatformScreen);
-
- QGuiApplicationPrivate::screen_list.removeOne(d->screen);
- delete d->screen;
+ if (d->screen) {
+ qWarning("Manually deleting a QPlatformScreen. Call QPlatformIntegration::destroyScreen instead.");
+ QGuiApplicationPrivate::screen_list.removeOne(d->screen);
+ delete d->screen;
+ }
}
/*!
diff --git a/src/gui/kernel/qplatformsystemtrayicon.cpp b/src/gui/kernel/qplatformsystemtrayicon.cpp
index ba1ccc379d..a8fe4e04fb 100644
--- a/src/gui/kernel/qplatformsystemtrayicon.cpp
+++ b/src/gui/kernel/qplatformsystemtrayicon.cpp
@@ -118,7 +118,7 @@ QPlatformSystemTrayIcon::~QPlatformSystemTrayIcon()
*/
/*!
- \fn void QPlatformSystemTrayIcon::showMessage(const QString &msg, const QString &title,
+ \fn void QPlatformSystemTrayIcon::showMessage(const QString &title, const QString &msg,
const QIcon &icon, MessageIcon iconType, int msecs)
Shows a balloon message for the entry with the given \a title, message \a msg and \a icon for
the time specified in \a msecs. \a iconType is used as a hint for the implementing platform.
diff --git a/src/gui/kernel/qplatformsystemtrayicon.h b/src/gui/kernel/qplatformsystemtrayicon.h
index 1317708cd1..d77bfa9f8f 100644
--- a/src/gui/kernel/qplatformsystemtrayicon.h
+++ b/src/gui/kernel/qplatformsystemtrayicon.h
@@ -69,7 +69,7 @@ public:
virtual void updateToolTip(const QString &tooltip) = 0;
virtual void updateMenu(QPlatformMenu *menu) = 0;
virtual QRect geometry() const = 0;
- virtual void showMessage(const QString &msg, const QString &title,
+ virtual void showMessage(const QString &title, const QString &msg,
const QIcon &icon, MessageIcon iconType, int msecs) = 0;
virtual bool isSystemTrayAvailable() const = 0;
diff --git a/src/gui/kernel/qplatformtheme.cpp b/src/gui/kernel/qplatformtheme.cpp
index 646bd90e56..92c1b09406 100644
--- a/src/gui/kernel/qplatformtheme.cpp
+++ b/src/gui/kernel/qplatformtheme.cpp
@@ -320,7 +320,8 @@ const QKeyBinding QPlatformThemePrivate::keyBindings[] = {
{QKeySequence::FullScreen, 1, Qt::CTRL | Qt::Key_F11, KB_Gnome},
{QKeySequence::FullScreen, 1, Qt::Key_F11, KB_Win | KB_KDE},
{QKeySequence::Deselect, 0, Qt::CTRL | Qt::SHIFT | Qt::Key_A, KB_X11},
- {QKeySequence::DeleteCompleteLine, 0, Qt::CTRL | Qt::Key_U, KB_X11}
+ {QKeySequence::DeleteCompleteLine, 0, Qt::CTRL | Qt::Key_U, KB_X11},
+ {QKeySequence::Backspace, 0, Qt::META | Qt::Key_H, KB_Mac}
};
const uint QPlatformThemePrivate::numberOfKeyBindings = sizeof(QPlatformThemePrivate::keyBindings)/(sizeof(QKeyBinding));
@@ -502,9 +503,11 @@ QVariant QPlatformTheme::defaultThemeHint(ThemeHint hint)
case MouseDoubleClickDistance:
{
bool ok = false;
- int dist = qgetenv("QT_DBL_CLICK_DIST").toInt(&ok);
+ const int dist = qEnvironmentVariableIntValue("QT_DBL_CLICK_DIST", &ok);
return QVariant(ok ? dist : 5);
}
+ case WheelScrollLines:
+ return QVariant(3);
}
return QVariant();
}
diff --git a/src/gui/kernel/qplatformtheme.h b/src/gui/kernel/qplatformtheme.h
index a41dd8f257..be1eacf002 100644
--- a/src/gui/kernel/qplatformtheme.h
+++ b/src/gui/kernel/qplatformtheme.h
@@ -101,7 +101,8 @@ public:
DialogSnapToDefaultButton,
ContextMenuOnMouseRelease,
MousePressAndHoldInterval,
- MouseDoubleClickDistance
+ MouseDoubleClickDistance,
+ WheelScrollLines
};
enum DialogType {
diff --git a/src/gui/kernel/qplatformwindow.cpp b/src/gui/kernel/qplatformwindow.cpp
index 754395592c..167bd44f0e 100644
--- a/src/gui/kernel/qplatformwindow.cpp
+++ b/src/gui/kernel/qplatformwindow.cpp
@@ -453,7 +453,7 @@ bool QPlatformWindow::frameStrutEventsEnabled() const
QString QPlatformWindow::formatWindowTitle(const QString &title, const QString &separator)
{
QString fullTitle = title;
- if (QGuiApplicationPrivate::displayName) {
+ if (QGuiApplicationPrivate::displayName && !title.endsWith(*QGuiApplicationPrivate::displayName)) {
// Append display name, if set.
if (!fullTitle.isEmpty())
fullTitle += separator;
@@ -595,6 +595,36 @@ QRect QPlatformWindow::initialGeometry(const QWindow *w,
}
/*!
+ Requests an QEvent::UpdateRequest event. The event will be
+ delivered to the QWindow.
+
+ QPlatformWindow subclasses can re-implement this function to
+ provide display refresh synchronized updates. The event
+ should be delivered using QWindowPrivate::deliverUpdateRequest()
+ to not get out of sync with the the internal state of QWindow.
+
+ The default implementation posts an UpdateRequest event to the
+ window after 5 ms. The additional time is there to give the event
+ loop a bit of idle time to gather system events.
+
+*/
+void QPlatformWindow::requestUpdate()
+{
+ static int timeout = -1;
+ if (timeout == -1) {
+ bool ok = false;
+ timeout = qEnvironmentVariableIntValue("QT_QPA_UPDATE_IDLE_TIME", &ok);
+ if (!ok)
+ timeout = 5;
+ }
+
+ QWindow *w = window();
+ QWindowPrivate *wp = (QWindowPrivate *) QObjectPrivate::get(w);
+ Q_ASSERT(wp->updateTimer == 0);
+ wp->updateTimer = w->startTimer(timeout, Qt::PreciseTimer);
+}
+
+/*!
\class QPlatformWindow
\since 4.8
\internal
diff --git a/src/gui/kernel/qplatformwindow.h b/src/gui/kernel/qplatformwindow.h
index 5c351a69d2..d66bf31569 100644
--- a/src/gui/kernel/qplatformwindow.h
+++ b/src/gui/kernel/qplatformwindow.h
@@ -72,7 +72,7 @@ public:
QPlatformScreen *screen() const;
- virtual QSurfaceFormat format() const;
+ virtual QSurfaceFormat format() const Q_DECL_OVERRIDE;
virtual void setGeometry(const QRect &rect);
virtual QRect geometry() const;
@@ -129,6 +129,7 @@ public:
static QRect initialGeometry(const QWindow *w,
const QRect &initialGeometry, int defaultWidth, int defaultHeight);
+ virtual void requestUpdate();
protected:
static QString formatWindowTitle(const QString &title, const QString &separator);
QPlatformScreen *screenForGeometry(const QRect &newGeometry) const;
diff --git a/src/gui/kernel/qshapedpixmapdndwindow_p.h b/src/gui/kernel/qshapedpixmapdndwindow_p.h
index 04198c83cb..4c3d49e853 100644
--- a/src/gui/kernel/qshapedpixmapdndwindow_p.h
+++ b/src/gui/kernel/qshapedpixmapdndwindow_p.h
@@ -66,7 +66,7 @@ public:
void updateGeometry();
protected:
- void exposeEvent(QExposeEvent *);
+ void exposeEvent(QExposeEvent *) Q_DECL_OVERRIDE;
private:
QBackingStore *m_backingStore;
diff --git a/src/gui/kernel/qshortcutmap.cpp b/src/gui/kernel/qshortcutmap.cpp
index cad707ab70..b3e71c77fa 100644
--- a/src/gui/kernel/qshortcutmap.cpp
+++ b/src/gui/kernel/qshortcutmap.cpp
@@ -310,6 +310,10 @@ QKeySequence::SequenceMatch QShortcutMap::state()
Uses ShortcutOverride event to see if any widgets want to override
the event. If not, uses nextState(QKeyEvent) to check for a grabbed
Shortcut, and dispatchEvent() is found and identical.
+
+ \note that this function should only be called from QWindowSystemInterface,
+ otherwise it will result in duplicate events.
+
\sa nextState, dispatchEvent
*/
bool QShortcutMap::tryShortcutEvent(QObject *o, QKeyEvent *e)
diff --git a/src/gui/kernel/qsimpledrag_p.h b/src/gui/kernel/qsimpledrag_p.h
index 8ef8f99616..c506fa8676 100644
--- a/src/gui/kernel/qsimpledrag_p.h
+++ b/src/gui/kernel/qsimpledrag_p.h
@@ -64,9 +64,9 @@ class Q_GUI_EXPORT QBasicDrag : public QPlatformDrag, public QObject
public:
virtual ~QBasicDrag();
- virtual Qt::DropAction drag(QDrag *drag);
+ virtual Qt::DropAction drag(QDrag *drag) Q_DECL_OVERRIDE;
- virtual bool eventFilter(QObject *o, QEvent *e);
+ virtual bool eventFilter(QObject *o, QEvent *e) Q_DECL_OVERRIDE;
protected:
QBasicDrag();
@@ -106,13 +106,13 @@ class Q_GUI_EXPORT QSimpleDrag : public QBasicDrag
{
public:
QSimpleDrag();
- virtual QMimeData *platformDropData();
+ virtual QMimeData *platformDropData() Q_DECL_OVERRIDE;
protected:
- virtual void startDrag();
- virtual void cancel();
- virtual void move(const QMouseEvent *me);
- virtual void drop(const QMouseEvent *me);
+ virtual void startDrag() Q_DECL_OVERRIDE;
+ virtual void cancel() Q_DECL_OVERRIDE;
+ virtual void move(const QMouseEvent *me) Q_DECL_OVERRIDE;
+ virtual void drop(const QMouseEvent *me) Q_DECL_OVERRIDE;
private:
QWindow *m_current_window;
diff --git a/src/gui/kernel/qstylehints.cpp b/src/gui/kernel/qstylehints.cpp
index 125e59aa5f..3e71175fa6 100644
--- a/src/gui/kernel/qstylehints.cpp
+++ b/src/gui/kernel/qstylehints.cpp
@@ -104,11 +104,15 @@ QStyleHints::QStyleHints()
void QStyleHints::setMouseDoubleClickInterval(int mouseDoubleClickInterval)
{
Q_D(QStyleHints);
+ if (d->m_mouseDoubleClickInterval == mouseDoubleClickInterval)
+ return;
d->m_mouseDoubleClickInterval = mouseDoubleClickInterval;
+ emit mouseDoubleClickIntervalChanged(mouseDoubleClickInterval);
}
/*!
- Returns the time limit in milliseconds that distinguishes a double click
+ \property QStyleHints::mouseDoubleClickInterval
+ \brief the time limit in milliseconds that distinguishes a double click
from two consecutive mouse clicks.
*/
int QStyleHints::mouseDoubleClickInterval() const
@@ -120,7 +124,8 @@ int QStyleHints::mouseDoubleClickInterval() const
}
/*!
- Returns the time limit in milliseconds that activates
+ \property QStyleHints::mousePressAndHoldInterval
+ \brief the time limit in milliseconds that activates
a press and hold.
\since 5.3
@@ -139,11 +144,15 @@ int QStyleHints::mousePressAndHoldInterval() const
void QStyleHints::setStartDragDistance(int startDragDistance)
{
Q_D(QStyleHints);
+ if (d->m_startDragDistance == startDragDistance)
+ return;
d->m_startDragDistance = startDragDistance;
+ emit startDragDistanceChanged(startDragDistance);
}
/*!
- Returns the distance, in pixels, that the mouse must be moved with a button
+ \property QStyleHints::startDragDistance
+ \brief the distance, in pixels, that the mouse must be moved with a button
held down before a drag and drop operation will begin.
If you support drag and drop in your application, and want to start a drag
@@ -157,7 +166,7 @@ void QStyleHints::setStartDragDistance(int startDragDistance)
\snippet code/src_gui_kernel_qapplication.cpp 6
- \sa startDragTime(), QPoint::manhattanLength(), {Drag and Drop}
+ \sa startDragTime, QPoint::manhattanLength(), {Drag and Drop}
*/
int QStyleHints::startDragDistance() const
{
@@ -176,18 +185,22 @@ int QStyleHints::startDragDistance() const
void QStyleHints::setStartDragTime(int startDragTime)
{
Q_D(QStyleHints);
+ if (d->m_startDragTime == startDragTime)
+ return;
d->m_startDragTime = startDragTime;
+ emit startDragTimeChanged(startDragTime);
}
/*!
- Returns the time, in milliseconds, that a mouse button must be held down
+ \property QStyleHints::startDragTime
+ \brief the time, in milliseconds, that a mouse button must be held down
before a drag and drop operation will begin.
If you support drag and drop in your application, and want to start a drag
and drop operation after the user has held down a mouse button for a
certain amount of time, you should use this property's value as the delay.
- \sa startDragDistance(), {Drag and Drop}
+ \sa startDragDistance, {Drag and Drop}
*/
int QStyleHints::startDragTime() const
{
@@ -198,11 +211,12 @@ int QStyleHints::startDragTime() const
}
/*!
- Returns the limit for the velocity, in pixels per second, that the mouse may
+ \property QStyleHints::startDragVelocity
+ \brief the limit for the velocity, in pixels per second, that the mouse may
be moved, with a button held down, for a drag and drop operation to begin.
A value of 0 means there is no such limit.
- \sa startDragDistance(), {Drag and Drop}
+ \sa startDragDistance, {Drag and Drop}
*/
int QStyleHints::startDragVelocity() const
{
@@ -218,11 +232,15 @@ int QStyleHints::startDragVelocity() const
void QStyleHints::setKeyboardInputInterval(int keyboardInputInterval)
{
Q_D(QStyleHints);
+ if (d->m_keyboardInputInterval == keyboardInputInterval)
+ return;
d->m_keyboardInputInterval = keyboardInputInterval;
+ emit keyboardInputIntervalChanged(keyboardInputInterval);
}
/*!
- Returns the time limit, in milliseconds, that distinguishes a key press
+ \property QStyleHints::keyboardInputInterval
+ \brief the time limit, in milliseconds, that distinguishes a key press
from two consecutive key presses.
*/
int QStyleHints::keyboardInputInterval() const
@@ -234,7 +252,8 @@ int QStyleHints::keyboardInputInterval() const
}
/*!
- Returns the rate, in events per second, in which additional repeated key
+ \property QStyleHints::keyboardAutoRepeatRate
+ \brief the rate, in events per second, in which additional repeated key
presses will automatically be generated if a key is being held down.
*/
int QStyleHints::keyboardAutoRepeatRate() const
@@ -251,11 +270,15 @@ int QStyleHints::keyboardAutoRepeatRate() const
void QStyleHints::setCursorFlashTime(int cursorFlashTime)
{
Q_D(QStyleHints);
+ if (d->m_cursorFlashTime == cursorFlashTime)
+ return;
d->m_cursorFlashTime = cursorFlashTime;
+ emit cursorFlashTimeChanged(cursorFlashTime);
}
/*!
- Returns the text cursor's flash (blink) time in milliseconds.
+ \property QStyleHints::cursorFlashTime
+ \brief the text cursor's flash (blink) time in milliseconds.
The flash time is the time used to display, invert and restore the
caret display. Usually the text cursor is displayed for half the cursor
@@ -270,11 +293,12 @@ int QStyleHints::cursorFlashTime() const
}
/*!
- Returns \c true if the platform defaults to windows being fullscreen,
+ \property QStyleHints::showIsFullScreen
+ \brief \c true if the platform defaults to windows being fullscreen,
otherwise \c false.
\note The platform may still choose to show certain windows non-fullscreen,
- such as popups or dialogs. This method only returns the default behavior.
+ such as popups or dialogs. This property only reports the default behavior.
\sa QWindow::show()
*/
@@ -284,7 +308,8 @@ bool QStyleHints::showIsFullScreen() const
}
/*!
- Returns the time, in milliseconds, a typed letter is displayed unshrouded
+ \property QStyleHints::passwordMaskDelay
+ \brief the time, in milliseconds, a typed letter is displayed unshrouded
in a text input field in password mode.
*/
int QStyleHints::passwordMaskDelay() const
@@ -293,7 +318,8 @@ int QStyleHints::passwordMaskDelay() const
}
/*!
- Returns the character used to mask the characters typed into text input
+ \property QStyleHints::passwordMaskCharacter
+ \brief the character used to mask the characters typed into text input
fields in password mode.
*/
QChar QStyleHints::passwordMaskCharacter() const
@@ -302,7 +328,8 @@ QChar QStyleHints::passwordMaskCharacter() const
}
/*!
- Returns the gamma value used in font smoothing.
+ \property QStyleHints::fontSmoothingGamma
+ \brief the gamma value used in font smoothing.
*/
qreal QStyleHints::fontSmoothingGamma() const
{
@@ -310,7 +337,8 @@ qreal QStyleHints::fontSmoothingGamma() const
}
/*!
- Returns \c true if right-to-left writing direction is enabled,
+ \property QStyleHints::useRtlExtensions
+ \brief \c true if right-to-left writing direction is enabled,
otherwise \c false.
*/
bool QStyleHints::useRtlExtensions() const
@@ -319,7 +347,8 @@ bool QStyleHints::useRtlExtensions() const
}
/*!
- Returns \c true if focus objects (line edits etc) should receive
+ \property QStyleHints::setFocusOnTouchRelease
+ \brief \c true if focus objects (line edits etc) should receive
input focus after a touch/mouse release. This is normal behavior on
touch platforms. On desktop platforms, the standard is to set
focus already on touch/mouse press.
diff --git a/src/gui/kernel/qstylehints.h b/src/gui/kernel/qstylehints.h
index 09807ecb24..de7a68018a 100644
--- a/src/gui/kernel/qstylehints.h
+++ b/src/gui/kernel/qstylehints.h
@@ -46,6 +46,21 @@ class Q_GUI_EXPORT QStyleHints : public QObject
{
Q_OBJECT
Q_DECLARE_PRIVATE(QStyleHints)
+ Q_PROPERTY(int cursorFlashTime READ cursorFlashTime NOTIFY cursorFlashTimeChanged FINAL)
+ Q_PROPERTY(qreal fontSmoothingGamma READ fontSmoothingGamma STORED false FINAL)
+ Q_PROPERTY(int keyboardAutoRepeatRate READ keyboardAutoRepeatRate STORED false FINAL)
+ Q_PROPERTY(int keyboardInputInterval READ keyboardInputInterval NOTIFY keyboardInputIntervalChanged FINAL)
+ Q_PROPERTY(int mouseDoubleClickInterval READ mouseDoubleClickInterval NOTIFY mouseDoubleClickIntervalChanged FINAL)
+ Q_PROPERTY(int mousePressAndHoldInterval READ mousePressAndHoldInterval STORED false FINAL)
+ Q_PROPERTY(QChar passwordMaskCharacter READ passwordMaskCharacter STORED false FINAL)
+ Q_PROPERTY(int passwordMaskDelay READ passwordMaskDelay STORED false FINAL)
+ Q_PROPERTY(bool setFocusOnTouchRelease READ setFocusOnTouchRelease STORED false FINAL)
+ Q_PROPERTY(bool showIsFullScreen READ showIsFullScreen STORED false FINAL)
+ Q_PROPERTY(int startDragDistance READ startDragDistance NOTIFY startDragDistanceChanged FINAL)
+ Q_PROPERTY(int startDragTime READ startDragTime NOTIFY startDragTimeChanged FINAL)
+ Q_PROPERTY(int startDragVelocity READ startDragVelocity STORED false FINAL)
+ Q_PROPERTY(bool useRtlExtensions READ useRtlExtensions STORED false FINAL)
+
public:
void setMouseDoubleClickInterval(int mouseDoubleClickInterval);
int mouseDoubleClickInterval() const;
@@ -67,6 +82,13 @@ public:
bool useRtlExtensions() const;
bool setFocusOnTouchRelease() const;
+Q_SIGNALS:
+ void cursorFlashTimeChanged(int cursorFlashTime);
+ void keyboardInputIntervalChanged(int keyboardInputInterval);
+ void mouseDoubleClickIntervalChanged(int mouseDoubleClickInterval);
+ void startDragDistanceChanged(int startDragDistance);
+ void startDragTimeChanged(int startDragTime);
+
private:
friend class QGuiApplication;
QStyleHints();
diff --git a/src/gui/kernel/qsurface.h b/src/gui/kernel/qsurface.h
index 58b7ce018e..0c02a3564c 100644
--- a/src/gui/kernel/qsurface.h
+++ b/src/gui/kernel/qsurface.h
@@ -36,7 +36,7 @@
#include <QtCore/qnamespace.h>
#include <QtGui/qsurfaceformat.h>
-
+#include <QtCore/qmetatype.h>
#include <QtCore/qsize.h>
QT_BEGIN_NAMESPACE
@@ -82,4 +82,6 @@ protected:
QT_END_NAMESPACE
+Q_DECLARE_METATYPE(QSurface*)
+
#endif //QSURFACE_H
diff --git a/src/gui/kernel/qwindow.cpp b/src/gui/kernel/qwindow.cpp
index a4b5376b6f..ced39bbe10 100644
--- a/src/gui/kernel/qwindow.cpp
+++ b/src/gui/kernel/qwindow.cpp
@@ -404,6 +404,11 @@ void QWindowPrivate::create(bool recursive)
window->d_func()->platformWindow->setParent(platformWindow);
}
}
+
+ if (platformWindow) {
+ QPlatformSurfaceEvent e(QPlatformSurfaceEvent::SurfaceCreated);
+ QGuiApplication::sendEvent(q, &e);
+ }
}
}
@@ -1603,6 +1608,10 @@ void QWindow::destroy()
bool wasVisible = isVisible();
setVisible(false);
+
+ QPlatformSurfaceEvent e(QPlatformSurfaceEvent::SurfaceAboutToBeDestroyed);
+ QGuiApplication::sendEvent(this, &e);
+
delete d->platformWindow;
d->resizeEventPending = true;
d->receivedExpose = false;
@@ -2052,12 +2061,56 @@ bool QWindow::event(QEvent *ev)
break;
#endif
+ case QEvent::Timer: {
+ Q_D(QWindow);
+ if (static_cast<QTimerEvent *>(ev)->timerId() == d->updateTimer) {
+ killTimer(d->updateTimer);
+ d->updateTimer = 0;
+ d->deliverUpdateRequest();
+ } else {
+ QObject::event(ev);
+ }
+ break;
+ }
+
default:
return QObject::event(ev);
}
return true;
}
+void QWindowPrivate::deliverUpdateRequest()
+{
+ Q_Q(QWindow);
+ updateRequestPending = false;
+ QEvent request(QEvent::UpdateRequest);
+ QCoreApplication::sendEvent(q, &request);
+}
+
+/*!
+ Schedules a QEvent::UpdateRequest event to be delivered to this window.
+
+ The event is delivered in sync with the display vsync on platforms
+ where this is possible. When driving animations, this function should
+ be called once after drawing has completed.
+
+ Calling this function multiple times will result in a single event
+ being delivered to the window.
+
+ Subclasses of QWindow should reimplement QWindow::event(), intercept
+ the event and call the application's rendering code, then call the
+ base class implementation.
+*/
+
+void QWindow::requestUpdate()
+{
+ Q_D(QWindow);
+ if (d->updateRequestPending || !d->platformWindow)
+ return;
+ d->updateRequestPending = true;
+ d->platformWindow->requestUpdate();
+}
+
/*!
Override this to handle key press events (\a ev).
@@ -2237,24 +2290,22 @@ void QWindowPrivate::maybeQuitOnLastWindowClosed()
Q_Q(QWindow);
// Attempt to close the application only if this has WA_QuitOnClose set and a non-visible parent
bool quitOnClose = QGuiApplication::quitOnLastWindowClosed() && !q->parent();
-
- if (quitOnClose) {
- QWindowList list = QGuiApplication::topLevelWindows();
- bool lastWindowClosed = true;
- for (int i = 0; i < list.size(); ++i) {
- QWindow *w = list.at(i);
- if (!w->isVisible() || w->transientParent())
- continue;
- lastWindowClosed = false;
- break;
- }
- if (lastWindowClosed) {
- QGuiApplicationPrivate::emitLastWindowClosed();
+ QWindowList list = QGuiApplication::topLevelWindows();
+ bool lastWindowClosed = true;
+ for (int i = 0; i < list.size(); ++i) {
+ QWindow *w = list.at(i);
+ if (!w->isVisible() || w->transientParent())
+ continue;
+ lastWindowClosed = false;
+ break;
+ }
+ if (lastWindowClosed) {
+ QGuiApplicationPrivate::emitLastWindowClosed();
+ if (quitOnClose) {
QCoreApplicationPrivate *applicationPrivate = static_cast<QCoreApplicationPrivate*>(QObjectPrivate::get(QCoreApplication::instance()));
applicationPrivate->maybeQuit();
}
}
-
}
QWindow *QWindowPrivate::topLevelWindow() const
diff --git a/src/gui/kernel/qwindow.h b/src/gui/kernel/qwindow.h
index 473d275b56..350cd8af24 100644
--- a/src/gui/kernel/qwindow.h
+++ b/src/gui/kernel/qwindow.h
@@ -128,7 +128,7 @@ public:
virtual ~QWindow();
void setSurfaceType(SurfaceType surfaceType);
- SurfaceType surfaceType() const;
+ SurfaceType surfaceType() const Q_DECL_OVERRIDE;
bool isVisible() const;
@@ -149,7 +149,7 @@ public:
void setModality(Qt::WindowModality modality);
void setFormat(const QSurfaceFormat &format);
- QSurfaceFormat format() const;
+ QSurfaceFormat format() const Q_DECL_OVERRIDE;
QSurfaceFormat requestedFormat() const;
void setFlags(Qt::WindowFlags flags);
@@ -286,6 +286,8 @@ public Q_SLOTS:
Q_REVISION(1) void alert(int msec);
+ Q_REVISION(3) void requestUpdate();
+
Q_SIGNALS:
void screenChanged(QScreen *screen);
void modalityChanged(Qt::WindowModality modality);
@@ -326,7 +328,7 @@ protected:
virtual void hideEvent(QHideEvent *);
// TODO Qt 6 - add closeEvent virtual handler
- virtual bool event(QEvent *);
+ virtual bool event(QEvent *) Q_DECL_OVERRIDE;
virtual void keyPressEvent(QKeyEvent *);
virtual void keyReleaseEvent(QKeyEvent *);
virtual void mousePressEvent(QMouseEvent *);
@@ -346,7 +348,7 @@ protected:
private:
Q_PRIVATE_SLOT(d_func(), void _q_clearAlert())
- QPlatformSurface *surfaceHandle() const;
+ QPlatformSurface *surfaceHandle() const Q_DECL_OVERRIDE;
Q_DISABLE_COPY(QWindow)
diff --git a/src/gui/kernel/qwindow_p.h b/src/gui/kernel/qwindow_p.h
index bc5dfa4876..c496d7716b 100644
--- a/src/gui/kernel/qwindow_p.h
+++ b/src/gui/kernel/qwindow_p.h
@@ -86,6 +86,8 @@ public:
, maximumSize(QWINDOWSIZE_MAX, QWINDOWSIZE_MAX)
, modality(Qt::NonModal)
, blockedByModalWindow(false)
+ , updateRequestPending(false)
+ , updateTimer(0)
, transientParent(0)
, topLevelScreen(0)
#ifndef QT_NO_CURSOR
@@ -109,6 +111,8 @@ public:
void applyCursor();
#endif
+ void deliverUpdateRequest();
+
QPoint globalPosition() const {
Q_Q(const QWindow);
QPoint offset = q->position();
@@ -134,6 +138,10 @@ public:
virtual void clearFocusObject();
virtual QRectF closestAcceptableGeometry(const QRectF &rect) const;
+ bool isPopup() const { return (windowFlags & Qt::WindowType_Mask) == Qt::Popup; }
+
+ static QWindowPrivate *get(QWindow *window) { return window->d_func(); }
+
QWindow::SurfaceType surfaceType;
Qt::WindowFlags windowFlags;
QWindow *parentWindow;
@@ -163,6 +171,9 @@ public:
Qt::WindowModality modality;
bool blockedByModalWindow;
+ bool updateRequestPending;
+ int updateTimer;
+
QPointer<QWindow> transientParent;
QScreen *topLevelScreen;
diff --git a/src/gui/kernel/qwindowsysteminterface.cpp b/src/gui/kernel/qwindowsysteminterface.cpp
index 722a695481..6f41d85965 100644
--- a/src/gui/kernel/qwindowsysteminterface.cpp
+++ b/src/gui/kernel/qwindowsysteminterface.cpp
@@ -201,6 +201,11 @@ bool QWindowSystemInterface::tryHandleShortcutEvent(QWindow *w, ulong timestamp,
#ifndef QT_NO_SHORTCUT
QGuiApplicationPrivate::modifier_buttons = mods;
+ if (!w)
+ w = QGuiApplication::focusWindow();
+ if (!w)
+ return false;
+
QObject *focus = w->focusObject();
if (!focus)
focus = w;
@@ -220,6 +225,28 @@ bool QWindowSystemInterface::tryHandleShortcutEvent(QWindow *w, ulong timestamp,
#endif
}
+// used by QTestLib to directly send shortcuts to objects
+bool QWindowSystemInterface::tryHandleShortcutEventToObject(QObject *o, ulong timestamp, int k, Qt::KeyboardModifiers mods,
+ const QString &text, bool autorep, ushort count)
+{
+#ifndef QT_NO_SHORTCUT
+ QGuiApplicationPrivate::modifier_buttons = mods;
+
+ QKeyEvent qevent(QEvent::ShortcutOverride, k, mods, text, autorep, count);
+ qevent.setTimestamp(timestamp);
+ return QGuiApplicationPrivate::instance()->shortcutMap.tryShortcutEvent(o, &qevent);
+#else
+ Q_UNUSED(w)
+ Q_UNUSED(timestamp)
+ Q_UNUSED(k)
+ Q_UNUSED(mods)
+ Q_UNUSED(text)
+ Q_UNUSED(autorep)
+ Q_UNUSED(count)
+ return false;
+#endif
+}
+
bool QWindowSystemInterface::tryHandleExtendedShortcutEvent(QWindow *w, int k, Qt::KeyboardModifiers mods,
quint32 nativeScanCode, quint32 nativeVirtualKey, quint32 nativeModifiers,
const QString &text, bool autorep, ushort count)
@@ -265,6 +292,9 @@ void QWindowSystemInterface::handleKeyEvent(QWindow *w, QEvent::Type t, int k, Q
void QWindowSystemInterface::handleKeyEvent(QWindow *tlw, ulong timestamp, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text, bool autorep, ushort count)
{
+ if (t == QEvent::KeyPress && QWindowSystemInterface::tryHandleShortcutEvent(tlw, timestamp, k, mods, text))
+ return;
+
QWindowSystemInterfacePrivate::KeyEvent * e =
new QWindowSystemInterfacePrivate::KeyEvent(tlw, timestamp, t, k, mods, text, autorep, count);
QWindowSystemInterfacePrivate::handleWindowSystemEvent(e);
@@ -286,8 +316,12 @@ void QWindowSystemInterface::handleExtendedKeyEvent(QWindow *tlw, ulong timestam
quint32 nativeScanCode, quint32 nativeVirtualKey,
quint32 nativeModifiers,
const QString& text, bool autorep,
- ushort count)
+ ushort count, bool tryShortcutOverride)
{
+ // on OS X we try the shortcut override even earlier and thus shouldn't handle it here
+ if (tryShortcutOverride && type == QEvent::KeyPress && QWindowSystemInterface::tryHandleShortcutEvent(tlw, timestamp, key, modifiers, text))
+ return;
+
QWindowSystemInterfacePrivate::KeyEvent * e =
new QWindowSystemInterfacePrivate::KeyEvent(tlw, timestamp, type, key, modifiers,
nativeScanCode, nativeVirtualKey, nativeModifiers, text, autorep, count);
@@ -305,13 +339,13 @@ void QWindowSystemInterface::handleWheelEvent(QWindow *tlw, ulong timestamp, con
handleWheelEvent(tlw, timestamp, local, global, QPoint(), point, mods);
}
-void QWindowSystemInterface::handleWheelEvent(QWindow *w, const QPointF & local, const QPointF & global, QPoint pixelDelta, QPoint angleDelta, Qt::KeyboardModifiers mods, Qt::ScrollPhase phase)
+void QWindowSystemInterface::handleWheelEvent(QWindow *w, const QPointF & local, const QPointF & global, QPoint pixelDelta, QPoint angleDelta, Qt::KeyboardModifiers mods, Qt::ScrollPhase phase, Qt::MouseEventSource source)
{
unsigned long time = QWindowSystemInterfacePrivate::eventTime.elapsed();
- handleWheelEvent(w, time, local, global, pixelDelta, angleDelta, mods, phase);
+ handleWheelEvent(w, time, local, global, pixelDelta, angleDelta, mods, phase, source);
}
-void QWindowSystemInterface::handleWheelEvent(QWindow *tlw, ulong timestamp, const QPointF & local, const QPointF & global, QPoint pixelDelta, QPoint angleDelta, Qt::KeyboardModifiers mods, Qt::ScrollPhase phase)
+void QWindowSystemInterface::handleWheelEvent(QWindow *tlw, ulong timestamp, const QPointF & local, const QPointF & global, QPoint pixelDelta, QPoint angleDelta, Qt::KeyboardModifiers mods, Qt::ScrollPhase phase, Qt::MouseEventSource source)
{
// Qt 4 sends two separate wheel events for horizontal and vertical
// deltas. For Qt 5 we want to send the deltas in one event, but at the
@@ -329,14 +363,14 @@ void QWindowSystemInterface::handleWheelEvent(QWindow *tlw, ulong timestamp, con
// Simple case: vertical deltas only:
if (angleDelta.y() != 0 && angleDelta.x() == 0) {
- e = new QWindowSystemInterfacePrivate::WheelEvent(tlw, timestamp, local, global, pixelDelta, angleDelta, angleDelta.y(), Qt::Vertical, mods, phase);
+ e = new QWindowSystemInterfacePrivate::WheelEvent(tlw, timestamp, local, global, pixelDelta, angleDelta, angleDelta.y(), Qt::Vertical, mods, phase, source);
QWindowSystemInterfacePrivate::handleWindowSystemEvent(e);
return;
}
// Simple case: horizontal deltas only:
if (angleDelta.y() == 0 && angleDelta.x() != 0) {
- e = new QWindowSystemInterfacePrivate::WheelEvent(tlw, timestamp, local, global, pixelDelta, angleDelta, angleDelta.x(), Qt::Horizontal, mods, phase);
+ e = new QWindowSystemInterfacePrivate::WheelEvent(tlw, timestamp, local, global, pixelDelta, angleDelta, angleDelta.x(), Qt::Horizontal, mods, phase, source);
QWindowSystemInterfacePrivate::handleWindowSystemEvent(e);
return;
}
@@ -344,12 +378,12 @@ void QWindowSystemInterface::handleWheelEvent(QWindow *tlw, ulong timestamp, con
// Both horizontal and vertical deltas: Send two wheel events.
// The first event contains the Qt 5 pixel and angle delta as points,
// and in addition the Qt 4 compatibility vertical angle delta.
- e = new QWindowSystemInterfacePrivate::WheelEvent(tlw, timestamp, local, global, pixelDelta, angleDelta, angleDelta.y(), Qt::Vertical, mods, phase);
+ e = new QWindowSystemInterfacePrivate::WheelEvent(tlw, timestamp, local, global, pixelDelta, angleDelta, angleDelta.y(), Qt::Vertical, mods, phase, source);
QWindowSystemInterfacePrivate::handleWindowSystemEvent(e);
// The second event contains null pixel and angle points and the
// Qt 4 compatibility horizontal angle delta.
- e = new QWindowSystemInterfacePrivate::WheelEvent(tlw, timestamp, local, global, QPoint(), QPoint(), angleDelta.x(), Qt::Horizontal, mods, phase);
+ e = new QWindowSystemInterfacePrivate::WheelEvent(tlw, timestamp, local, global, QPoint(), QPoint(), angleDelta.x(), Qt::Horizontal, mods, phase, source);
QWindowSystemInterfacePrivate::handleWindowSystemEvent(e);
}
@@ -746,7 +780,8 @@ void QWindowSystemInterface::handleEnterWhatsThisEvent()
#ifndef QT_NO_DEBUG_STREAM
Q_GUI_EXPORT QDebug operator<<(QDebug dbg, const QWindowSystemInterface::TouchPoint &p) {
- dbg.nospace() << "TouchPoint(" << p.id << " @" << p.normalPosition << " press " << p.pressure << " vel " << p.velocity << " state " << (int)p.state;
+ dbg.nospace() << "TouchPoint(" << p.id << " @" << p.area << " normalized " << p.normalPosition
+ << " press " << p.pressure << " vel " << p.velocity << " state " << (int)p.state;
return dbg.space();
}
#endif
@@ -760,6 +795,11 @@ Q_GUI_EXPORT void qt_handleKeyEvent(QWindow *w, QEvent::Type t, int k, Qt::Keybo
QWindowSystemInterface::handleKeyEvent(w, t, k, mods, text, autorep, count);
}
+Q_GUI_EXPORT bool qt_sendShortcutOverrideEvent(QObject *o, ulong timestamp, int k, Qt::KeyboardModifiers mods, const QString &text = QString(), bool autorep = false, ushort count = 1)
+{
+ return QWindowSystemInterface::tryHandleShortcutEventToObject(o, timestamp, k, mods, text, autorep, count);
+}
+
static QWindowSystemInterface::TouchPoint touchPoint(const QTouchEvent::TouchPoint& pt)
{
QWindowSystemInterface::TouchPoint p;
diff --git a/src/gui/kernel/qwindowsysteminterface.h b/src/gui/kernel/qwindowsysteminterface.h
index 30c236b51f..4d3bc43f1c 100644
--- a/src/gui/kernel/qwindowsysteminterface.h
+++ b/src/gui/kernel/qwindowsysteminterface.h
@@ -83,6 +83,9 @@ public:
static bool tryHandleShortcutEvent(QWindow *w, ulong timestamp, int k, Qt::KeyboardModifiers mods,
const QString & text = QString(), bool autorep = false, ushort count = 1);
+ static bool tryHandleShortcutEventToObject(QObject *o, ulong timestamp, int k, Qt::KeyboardModifiers mods,
+ const QString & text = QString(), bool autorep = false, ushort count = 1);
+
static bool tryHandleExtendedShortcutEvent(QWindow *w, int k, Qt::KeyboardModifiers mods,
quint32 nativeScanCode, quint32 nativeVirtualKey, quint32 nativeModifiers,
const QString & text = QString(), bool autorep = false, ushort count = 1);
@@ -102,9 +105,9 @@ public:
quint32 nativeScanCode, quint32 nativeVirtualKey,
quint32 nativeModifiers,
const QString& text = QString(), bool autorep = false,
- ushort count = 1);
- static void handleWheelEvent(QWindow *w, const QPointF & local, const QPointF & global, QPoint pixelDelta, QPoint angleDelta, Qt::KeyboardModifiers mods = Qt::NoModifier, Qt::ScrollPhase phase = Qt::ScrollUpdate);
- static void handleWheelEvent(QWindow *w, ulong timestamp, const QPointF & local, const QPointF & global, QPoint pixelDelta, QPoint angleDelta, Qt::KeyboardModifiers mods = Qt::NoModifier, Qt::ScrollPhase phase = Qt::ScrollUpdate);
+ ushort count = 1, bool tryShortcutOverride = true);
+ static void handleWheelEvent(QWindow *w, const QPointF & local, const QPointF & global, QPoint pixelDelta, QPoint angleDelta, Qt::KeyboardModifiers mods = Qt::NoModifier, Qt::ScrollPhase phase = Qt::ScrollUpdate, Qt::MouseEventSource source = Qt::MouseEventNotSynthesized);
+ static void handleWheelEvent(QWindow *w, ulong timestamp, const QPointF & local, const QPointF & global, QPoint pixelDelta, QPoint angleDelta, Qt::KeyboardModifiers mods = Qt::NoModifier, Qt::ScrollPhase phase = Qt::ScrollUpdate, Qt::MouseEventSource source = Qt::MouseEventNotSynthesized);
// Wheel event compatibility functions. Will be removed: do not use.
static void handleWheelEvent(QWindow *w, const QPointF & local, const QPointF & global, int d, Qt::Orientation o, Qt::KeyboardModifiers mods = Qt::NoModifier);
diff --git a/src/gui/kernel/qwindowsysteminterface_p.h b/src/gui/kernel/qwindowsysteminterface_p.h
index c3f41da835..782d3e9400 100644
--- a/src/gui/kernel/qwindowsysteminterface_p.h
+++ b/src/gui/kernel/qwindowsysteminterface_p.h
@@ -93,11 +93,20 @@ public:
class WindowSystemEvent {
public:
+ enum {
+ Synthetic = 0x1,
+ NullWindow = 0x2
+ };
+
explicit WindowSystemEvent(EventType t)
- : type(t), synthetic(false) { }
+ : type(t), flags(0) { }
virtual ~WindowSystemEvent() { }
+
+ bool synthetic() const { return flags & Synthetic; }
+ bool nullWindow() const { return flags & NullWindow; }
+
EventType type;
- bool synthetic;
+ int flags;
};
class CloseEvent : public WindowSystemEvent {
@@ -188,9 +197,12 @@ public:
class UserEvent : public WindowSystemEvent {
public:
UserEvent(QWindow * w, ulong time, EventType t)
- : WindowSystemEvent(t), window(w), nullWindow(w == 0), timestamp(time) { }
+ : WindowSystemEvent(t), window(w), timestamp(time)
+ {
+ if (!w)
+ flags |= NullWindow;
+ }
QPointer<QWindow> window;
- bool nullWindow;
unsigned long timestamp;
};
@@ -220,8 +232,8 @@ public:
class WheelEvent : public InputEvent {
public:
WheelEvent(QWindow *w, ulong time, const QPointF & local, const QPointF & global, QPoint pixelD, QPoint angleD, int qt4D, Qt::Orientation qt4O,
- Qt::KeyboardModifiers mods, Qt::ScrollPhase phase = Qt::ScrollUpdate)
- : InputEvent(w, time, Wheel, mods), pixelDelta(pixelD), angleDelta(angleD), qt4Delta(qt4D), qt4Orientation(qt4O), localPos(local), globalPos(global), phase(phase) { }
+ Qt::KeyboardModifiers mods, Qt::ScrollPhase phase = Qt::ScrollUpdate, Qt::MouseEventSource src = Qt::MouseEventNotSynthesized)
+ : InputEvent(w, time, Wheel, mods), pixelDelta(pixelD), angleDelta(angleD), qt4Delta(qt4D), qt4Orientation(qt4O), localPos(local), globalPos(global), phase(phase), source(src) { }
QPoint pixelDelta;
QPoint angleDelta;
int qt4Delta;
@@ -229,6 +241,7 @@ public:
QPointF localPos;
QPointF globalPos;
Qt::ScrollPhase phase;
+ Qt::MouseEventSource source;
};
class KeyEvent : public InputEvent {
diff --git a/src/gui/opengl/qopenglengineshadermanager.cpp b/src/gui/opengl/qopenglengineshadermanager.cpp
index 5bdb2f35ac..15ae720c26 100644
--- a/src/gui/opengl/qopenglengineshadermanager.cpp
+++ b/src/gui/opengl/qopenglengineshadermanager.cpp
@@ -61,13 +61,13 @@ public:
delete m_shaders;
}
- void invalidateResource()
+ void invalidateResource() Q_DECL_OVERRIDE
{
delete m_shaders;
m_shaders = 0;
}
- void freeResource(QOpenGLContext *)
+ void freeResource(QOpenGLContext *) Q_DECL_OVERRIDE
{
}
@@ -154,6 +154,8 @@ QOpenGLEngineSharedShaders::QOpenGLEngineSharedShaders(QOpenGLContext* context)
code[ImageSrcFragmentShader] = qopenglslImageSrcFragmentShader;
code[ImageSrcWithPatternFragmentShader] = qopenglslImageSrcWithPatternFragmentShader;
code[NonPremultipliedImageSrcFragmentShader] = qopenglslNonPremultipliedImageSrcFragmentShader;
+ code[GrayscaleImageSrcFragmentShader] = qopenglslGrayscaleImageSrcFragmentShader;
+ code[AlphaImageSrcFragmentShader] = qopenglslAlphaImageSrcFragmentShader;
code[CustomImageSrcFragmentShader] = qopenglslCustomSrcFragmentShader; // Calls "customShader", which must be appended
code[SolidBrushSrcFragmentShader] = qopenglslSolidBrushSrcFragmentShader;
if (context->isOpenGLES())
@@ -700,6 +702,16 @@ bool QOpenGLEngineShaderManager::useCorrectShaderProg()
requiredProgram.positionVertexShader = QOpenGLEngineSharedShaders::PositionOnlyVertexShader;
texCoords = true;
break;
+ case QOpenGLEngineShaderManager::GrayscaleImageSrc:
+ requiredProgram.srcPixelFragShader = QOpenGLEngineSharedShaders::GrayscaleImageSrcFragmentShader;
+ requiredProgram.positionVertexShader = QOpenGLEngineSharedShaders::PositionOnlyVertexShader;
+ texCoords = true;
+ break;
+ case QOpenGLEngineShaderManager::AlphaImageSrc:
+ requiredProgram.srcPixelFragShader = QOpenGLEngineSharedShaders::AlphaImageSrcFragmentShader;
+ requiredProgram.positionVertexShader = QOpenGLEngineSharedShaders::PositionOnlyVertexShader;
+ texCoords = true;
+ break;
case QOpenGLEngineShaderManager::PatternSrc:
requiredProgram.srcPixelFragShader = QOpenGLEngineSharedShaders::ImageSrcWithPatternFragmentShader;
requiredProgram.positionVertexShader = QOpenGLEngineSharedShaders::PositionOnlyVertexShader;
diff --git a/src/gui/opengl/qopenglengineshadermanager_p.h b/src/gui/opengl/qopenglengineshadermanager_p.h
index 2ae0ae0866..56aa18cb6b 100644
--- a/src/gui/opengl/qopenglengineshadermanager_p.h
+++ b/src/gui/opengl/qopenglengineshadermanager_p.h
@@ -288,6 +288,8 @@ public:
ImageSrcFragmentShader,
ImageSrcWithPatternFragmentShader,
NonPremultipliedImageSrcFragmentShader,
+ GrayscaleImageSrcFragmentShader,
+ AlphaImageSrcFragmentShader,
CustomImageSrcFragmentShader,
SolidBrushSrcFragmentShader,
TextureBrushSrcFragmentShader,
@@ -414,7 +416,9 @@ public:
ImageSrc = Qt::TexturePattern+1,
NonPremultipliedImageSrc = Qt::TexturePattern+2,
PatternSrc = Qt::TexturePattern+3,
- TextureSrcWithPattern = Qt::TexturePattern+4
+ TextureSrcWithPattern = Qt::TexturePattern+4,
+ GrayscaleImageSrc = Qt::TexturePattern+5,
+ AlphaImageSrc = Qt::TexturePattern+6,
};
enum Uniform {
diff --git a/src/gui/opengl/qopenglengineshadersource_p.h b/src/gui/opengl/qopenglengineshadersource_p.h
index bc81fe4c77..acda09a8ee 100644
--- a/src/gui/opengl/qopenglengineshadersource_p.h
+++ b/src/gui/opengl/qopenglengineshadersource_p.h
@@ -367,6 +367,22 @@ static const char* const qopenglslNonPremultipliedImageSrcFragmentShader = "\n\
return sample; \n\
}\n";
+static const char* const qopenglslGrayscaleImageSrcFragmentShader = "\n\
+ varying highp vec2 textureCoords; \n\
+ uniform sampler2D imageTexture; \n\
+ lowp vec4 srcPixel() \n\
+ { \n\
+ return texture2D(imageTexture, textureCoords).rrra; \n\
+ }\n";
+
+static const char* const qopenglslAlphaImageSrcFragmentShader = "\n\
+ varying highp vec2 textureCoords; \n\
+ uniform sampler2D imageTexture; \n\
+ lowp vec4 srcPixel() \n\
+ { \n\
+ return vec4(0, 0, 0, texture2D(imageTexture, textureCoords).r); \n\
+ }\n";
+
static const char* const qopenglslShockingPinkSrcFragmentShader = "\n\
lowp vec4 srcPixel() \n\
{ \n\
diff --git a/src/gui/opengl/qopenglextensions_p.h b/src/gui/opengl/qopenglextensions_p.h
index 23cfe16467..0d0cfd26ba 100644
--- a/src/gui/opengl/qopenglextensions_p.h
+++ b/src/gui/opengl/qopenglextensions_p.h
@@ -81,7 +81,8 @@ public:
MapBuffer = 0x00040000,
GeometryShaders = 0x00080000,
MapBufferRange = 0x00100000,
- Sized8Formats = 0x00200000
+ Sized8Formats = 0x00200000,
+ DiscardFramebuffer = 0x00400000
};
Q_DECLARE_FLAGS(OpenGLExtensions, OpenGLExtension)
@@ -102,6 +103,8 @@ public:
void glGetBufferSubData(GLenum target, qopengl_GLintptr offset, qopengl_GLsizeiptr size, GLvoid *data);
+ void glDiscardFramebufferEXT (GLenum target, GLsizei numAttachments, const GLenum *attachments);
+
private:
static bool isInitialized(const QOpenGLFunctionsPrivate *d) { return d != 0; }
};
@@ -124,6 +127,7 @@ public:
GLenum internalFormat,
GLsizei width, GLsizei height);
void (QOPENGLF_APIENTRYP GetBufferSubData)(GLenum target, qopengl_GLintptr offset, qopengl_GLsizeiptr size, GLvoid *data);
+ void (QOPENGLF_APIENTRYP DiscardFramebuffer)(GLenum target, GLsizei numAttachments, const GLenum *attachments);
};
inline GLvoid *QOpenGLExtensions::glMapBuffer(GLenum target, GLenum access)
@@ -182,6 +186,14 @@ inline void QOpenGLExtensions::glGetBufferSubData(GLenum target, qopengl_GLintpt
Q_OPENGL_FUNCTIONS_DEBUG
}
+
+inline void QOpenGLExtensions::glDiscardFramebufferEXT (GLenum target, GLsizei numAttachments, const GLenum *attachments)
+{
+ Q_D(QOpenGLExtensions);
+ Q_ASSERT(QOpenGLExtensions::isInitialized(d));
+ d->DiscardFramebuffer(target,numAttachments, attachments);
+ Q_OPENGL_FUNCTIONS_DEBUG
+}
QT_END_NAMESPACE
#endif // QOPENGL_EXTENSIONS_P_H
diff --git a/src/gui/opengl/qopenglfunctions.cpp b/src/gui/opengl/qopenglfunctions.cpp
index 44b56699df..99604ca8b2 100644
--- a/src/gui/opengl/qopenglfunctions.cpp
+++ b/src/gui/opengl/qopenglfunctions.cpp
@@ -173,6 +173,7 @@ QT_BEGIN_NAMESPACE
\value NPOTTextures Non power of two textures are available.
\value NPOTTextureRepeat Non power of two textures can use GL_REPEAT as wrap parameter.
\value FixedFunctionPipeline The fixed function pipeline is available.
+ \value TextureRGFormats The GL_RED and GL_RG texture formats are available.
*/
// Hidden private fields for additional extension data.
@@ -185,13 +186,13 @@ struct QOpenGLFunctionsPrivateEx : public QOpenGLExtensionsPrivate, public QOpen
, m_extensions(-1)
{}
- void invalidateResource()
+ void invalidateResource() Q_DECL_OVERRIDE
{
m_features = -1;
m_extensions = -1;
}
- void freeResource(QOpenGLContext *)
+ void freeResource(QOpenGLContext *) Q_DECL_OVERRIDE
{
// no gl resources to free
}
@@ -284,10 +285,12 @@ static int qt_gl_resolve_features()
if (extensions.match("GL_OES_texture_npot"))
features |= QOpenGLFunctions::NPOTTextures |
QOpenGLFunctions::NPOTTextureRepeat;
+ if (ctx->format().majorVersion() >= 3 || extensions.match("GL_EXT_texture_rg"))
+ features |= QOpenGLFunctions::TextureRGFormats;
return features;
} else {
// OpenGL
- int features = 0;
+ int features = QOpenGLFunctions::TextureRGFormats;
QSurfaceFormat format = QOpenGLContext::currentContext()->format();
QOpenGLExtensionMatcher extensions;
@@ -412,6 +415,9 @@ static int qt_gl_resolve_extensions()
// We don't match GL_APPLE_texture_format_BGRA8888 here because it has different semantics.
if (extensionMatcher.match("GL_IMG_texture_format_BGRA8888") || extensionMatcher.match("GL_EXT_texture_format_BGRA8888"))
extensions |= QOpenGLExtensions::BGRATextureFormat;
+
+ if (extensionMatcher.match("GL_EXT_discard_framebuffer"))
+ extensions |= QOpenGLExtensions::DiscardFramebuffer;
} else {
extensions |= QOpenGLExtensions::ElementIndexUint | QOpenGLExtensions::MapBuffer;
@@ -3254,6 +3260,11 @@ static void QOPENGLF_APIENTRY qopenglfResolveGetBufferSubData(GLenum target, qop
(target, offset, size, data);
}
+static void QOPENGLF_APIENTRY qopenglfResolveDiscardFramebuffer(GLenum target, GLsizei numAttachments, const GLenum *attachments)
+{
+ RESOLVE_FUNC_VOID(ResolveEXT, DiscardFramebuffer)(target, numAttachments, attachments);
+}
+
#if !defined(QT_OPENGL_ES_2) && !defined(QT_OPENGL_DYNAMIC)
// Special translation functions for ES-specific calls on desktop GL
@@ -3492,6 +3503,7 @@ QOpenGLExtensionsPrivate::QOpenGLExtensionsPrivate(QOpenGLContext *ctx)
BlitFramebuffer = qopenglfResolveBlitFramebuffer;
RenderbufferStorageMultisample = qopenglfResolveRenderbufferStorageMultisample;
GetBufferSubData = qopenglfResolveGetBufferSubData;
+ DiscardFramebuffer = qopenglfResolveDiscardFramebuffer;
}
QT_END_NAMESPACE
diff --git a/src/gui/opengl/qopenglfunctions.h b/src/gui/opengl/qopenglfunctions.h
index 479a280abe..85d255fe61 100644
--- a/src/gui/opengl/qopenglfunctions.h
+++ b/src/gui/opengl/qopenglfunctions.h
@@ -240,7 +240,8 @@ public:
StencilSeparate = 0x0800,
NPOTTextures = 0x1000,
NPOTTextureRepeat = 0x2000,
- FixedFunctionPipeline = 0x4000
+ FixedFunctionPipeline = 0x4000,
+ TextureRGFormats = 0x8000
};
Q_DECLARE_FLAGS(OpenGLFeatures, OpenGLFeature)
diff --git a/src/gui/opengl/qopenglgradientcache_p.h b/src/gui/opengl/qopenglgradientcache_p.h
index fc6df0b97f..c414b485a1 100644
--- a/src/gui/opengl/qopenglgradientcache_p.h
+++ b/src/gui/opengl/qopenglgradientcache_p.h
@@ -77,8 +77,8 @@ public:
GLuint getBuffer(const QGradient &gradient, qreal opacity);
inline int paletteSize() const { return 1024; }
- void invalidateResource();
- void freeResource(QOpenGLContext *ctx);
+ void invalidateResource() Q_DECL_OVERRIDE;
+ void freeResource(QOpenGLContext *ctx) Q_DECL_OVERRIDE;
private:
inline int maxCacheSize() const { return 60; }
diff --git a/src/gui/opengl/qopenglpaintengine.cpp b/src/gui/opengl/qopenglpaintengine.cpp
index 8eeaa316d0..6ed2fe58b9 100644
--- a/src/gui/opengl/qopenglpaintengine.cpp
+++ b/src/gui/opengl/qopenglpaintengine.cpp
@@ -1496,6 +1496,20 @@ void QOpenGL2PaintEngineEx::drawImage(const QRectF& dest, const QImage& image, c
d->shaderManager->setSrcPixelType(QOpenGLEngineShaderManager::NonPremultipliedImageSrc);
bindOption = 0;
break;
+ case QImage::Format_Alpha8:
+ if (ctx->functions()->hasOpenGLFeature(QOpenGLFunctions::TextureRGFormats)) {
+ d->shaderManager->setSrcPixelType(QOpenGLEngineShaderManager::AlphaImageSrc);
+ bindOption = QOpenGLTextureCache::UseRedFor8BitBindOption;
+ } else
+ d->shaderManager->setSrcPixelType(QOpenGLEngineShaderManager::ImageSrc);
+ break;
+ case QImage::Format_Grayscale8:
+ if (ctx->functions()->hasOpenGLFeature(QOpenGLFunctions::TextureRGFormats)) {
+ d->shaderManager->setSrcPixelType(QOpenGLEngineShaderManager::GrayscaleImageSrc);
+ bindOption = QOpenGLTextureCache::UseRedFor8BitBindOption;
+ } else
+ d->shaderManager->setSrcPixelType(QOpenGLEngineShaderManager::ImageSrc);
+ break;
default:
d->shaderManager->setSrcPixelType(QOpenGLEngineShaderManager::ImageSrc);
break;
@@ -1586,10 +1600,8 @@ void QOpenGL2PaintEngineEx::drawTextItem(const QPointF &p, const QTextItem &text
{
QStaticTextItem staticTextItem;
- staticTextItem.chars = const_cast<QChar *>(ti.chars);
staticTextItem.setFontEngine(ti.fontEngine);
staticTextItem.glyphs = glyphs.data();
- staticTextItem.numChars = ti.num_chars;
staticTextItem.numGlyphs = glyphs.size();
staticTextItem.glyphPositions = positions.data();
diff --git a/src/gui/opengl/qopenglpaintengine_p.h b/src/gui/opengl/qopenglpaintengine_p.h
index 9722ea3196..e8557e61cd 100644
--- a/src/gui/opengl/qopenglpaintengine_p.h
+++ b/src/gui/opengl/qopenglpaintengine_p.h
@@ -106,37 +106,37 @@ public:
QOpenGL2PaintEngineEx();
~QOpenGL2PaintEngineEx();
- bool begin(QPaintDevice *device);
+ bool begin(QPaintDevice *device) Q_DECL_OVERRIDE;
void ensureActive();
- bool end();
-
- virtual void clipEnabledChanged();
- virtual void penChanged();
- virtual void brushChanged();
- virtual void brushOriginChanged();
- virtual void opacityChanged();
- virtual void compositionModeChanged();
- virtual void renderHintsChanged();
- virtual void transformChanged();
-
- virtual void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr);
+ bool end() Q_DECL_OVERRIDE;
+
+ virtual void clipEnabledChanged() Q_DECL_OVERRIDE;
+ virtual void penChanged() Q_DECL_OVERRIDE;
+ virtual void brushChanged() Q_DECL_OVERRIDE;
+ virtual void brushOriginChanged() Q_DECL_OVERRIDE;
+ virtual void opacityChanged() Q_DECL_OVERRIDE;
+ virtual void compositionModeChanged() Q_DECL_OVERRIDE;
+ virtual void renderHintsChanged() Q_DECL_OVERRIDE;
+ virtual void transformChanged() Q_DECL_OVERRIDE;
+
+ virtual void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) Q_DECL_OVERRIDE;
virtual void drawPixmapFragments(const QPainter::PixmapFragment *fragments, int fragmentCount, const QPixmap &pixmap,
- QPainter::PixmapFragmentHints hints);
+ QPainter::PixmapFragmentHints hints) Q_DECL_OVERRIDE;
virtual void drawImage(const QRectF &r, const QImage &pm, const QRectF &sr,
- Qt::ImageConversionFlags flags = Qt::AutoColor);
- virtual void drawTextItem(const QPointF &p, const QTextItem &textItem);
- virtual void fill(const QVectorPath &path, const QBrush &brush);
- virtual void stroke(const QVectorPath &path, const QPen &pen);
- virtual void clip(const QVectorPath &path, Qt::ClipOperation op);
+ Qt::ImageConversionFlags flags = Qt::AutoColor) Q_DECL_OVERRIDE;
+ virtual void drawTextItem(const QPointF &p, const QTextItem &textItem) Q_DECL_OVERRIDE;
+ virtual void fill(const QVectorPath &path, const QBrush &brush) Q_DECL_OVERRIDE;
+ virtual void stroke(const QVectorPath &path, const QPen &pen) Q_DECL_OVERRIDE;
+ virtual void clip(const QVectorPath &path, Qt::ClipOperation op) Q_DECL_OVERRIDE;
- virtual void drawStaticTextItem(QStaticTextItem *textItem);
+ virtual void drawStaticTextItem(QStaticTextItem *textItem) Q_DECL_OVERRIDE;
bool drawTexture(const QRectF &r, GLuint textureId, const QSize &size, const QRectF &sr);
- Type type() const { return OpenGL2; }
+ Type type() const Q_DECL_OVERRIDE { return OpenGL2; }
- virtual void setState(QPainterState *s);
- virtual QPainterState *createState(QPainterState *orig) const;
+ virtual void setState(QPainterState *s) Q_DECL_OVERRIDE;
+ virtual QPainterState *createState(QPainterState *orig) const Q_DECL_OVERRIDE;
inline QOpenGL2PaintEngineState *state() {
return static_cast<QOpenGL2PaintEngineState *>(QPaintEngineEx::state());
}
@@ -144,16 +144,16 @@ public:
return static_cast<const QOpenGL2PaintEngineState *>(QPaintEngineEx::state());
}
- void beginNativePainting();
- void endNativePainting();
+ void beginNativePainting() Q_DECL_OVERRIDE;
+ void endNativePainting() Q_DECL_OVERRIDE;
void invalidateState();
void setRenderTextActive(bool);
bool isNativePaintingActive() const;
- bool requiresPretransformedGlyphPositions(QFontEngine *, const QTransform &) const { return false; }
- bool shouldDrawCachedGlyphs(QFontEngine *, const QTransform &) const;
+ bool requiresPretransformedGlyphPositions(QFontEngine *, const QTransform &) const Q_DECL_OVERRIDE { return false; }
+ bool shouldDrawCachedGlyphs(QFontEngine *, const QTransform &) const Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QOpenGL2PaintEngineEx)
@@ -250,7 +250,7 @@ public:
void updateClipScissorTest();
void setScissor(const QRect &rect);
void regenerateClip();
- void systemStateChanged();
+ void systemStateChanged() Q_DECL_OVERRIDE;
void setVertexAttribArrayEnabled(int arrayIndex, bool enabled = true);
void syncGlState();
diff --git a/src/gui/opengl/qopenglshaderprogram.cpp b/src/gui/opengl/qopenglshaderprogram.cpp
index 5ea7a10e0d..2d99833fdf 100644
--- a/src/gui/opengl/qopenglshaderprogram.cpp
+++ b/src/gui/opengl/qopenglshaderprogram.cpp
@@ -39,6 +39,7 @@
#include <QtCore/qfile.h>
#include <QtCore/qvarlengtharray.h>
#include <QtCore/qvector.h>
+#include <QtCore/qregularexpression.h>
#include <QtGui/qtransform.h>
#include <QtGui/QColor>
#include <QtGui/QSurfaceFormat>
@@ -47,6 +48,8 @@
#include <QtGui/qopenglfunctions_4_0_core.h>
#endif
+#include <algorithm>
+
QT_BEGIN_NAMESPACE
/*!
@@ -401,6 +404,96 @@ static const char redefineHighp[] =
"#endif\n";
#endif
+struct QVersionDirectivePosition
+{
+ Q_DECL_CONSTEXPR QVersionDirectivePosition(int position = 0, int line = -1)
+ : position(position)
+ , line(line)
+ {
+ }
+
+ Q_DECL_CONSTEXPR bool hasPosition() const
+ {
+ return position > 0;
+ }
+
+ const int position;
+ const int line;
+};
+
+static QVersionDirectivePosition findVersionDirectivePosition(const char *source)
+{
+ Q_ASSERT(source);
+
+ QString working = QString::fromUtf8(source);
+
+ // According to the GLSL spec the #version directive must not be
+ // preceded by anything but whitespace and comments.
+ // In order to not get confused by #version directives within a
+ // multiline comment, we need to run a minimal preprocessor first.
+ enum {
+ Normal,
+ CommentStarting,
+ MultiLineComment,
+ SingleLineComment,
+ CommentEnding
+ } state = Normal;
+
+ for (QChar *c = working.begin(); c != working.end(); ++c) {
+ switch (state) {
+ case Normal:
+ if (*c == QLatin1Char('/'))
+ state = CommentStarting;
+ break;
+ case CommentStarting:
+ if (*c == QLatin1Char('*'))
+ state = MultiLineComment;
+ else if (*c == QLatin1Char('/'))
+ state = SingleLineComment;
+ else
+ state = Normal;
+ break;
+ case MultiLineComment:
+ if (*c == QLatin1Char('*'))
+ state = CommentEnding;
+ else if (*c == QLatin1Char('#'))
+ *c = QLatin1Char('_');
+ break;
+ case SingleLineComment:
+ if (*c == QLatin1Char('\n'))
+ state = Normal;
+ else if (*c == QLatin1Char('#'))
+ *c = QLatin1Char('_');
+ break;
+ case CommentEnding:
+ if (*c == QLatin1Char('/')) {
+ state = Normal;
+ } else {
+ if (*c == QLatin1Char('#'))
+ *c = QLatin1Char('_');
+ if (*c != QLatin1Char('*'))
+ state = MultiLineComment;
+ }
+ break;
+ }
+ }
+
+ // Search for #version directive
+ int splitPosition = 0;
+ int linePosition = 1;
+
+ static const QRegularExpression pattern(QStringLiteral("^\\s*#\\s*version.*(\\n)?"),
+ QRegularExpression::MultilineOption
+ | QRegularExpression::OptimizeOnFirstUsageOption);
+ QRegularExpressionMatch match = pattern.match(working);
+ if (match.hasMatch()) {
+ splitPosition = match.capturedEnd();
+ linePosition += int(std::count(working.begin(), working.begin() + splitPosition, QLatin1Char('\n')));
+ }
+
+ return QVersionDirectivePosition(splitPosition, linePosition);
+}
+
/*!
Sets the \a source code for this shader and compiles it.
Returns \c true if the source was successfully compiled, false otherwise.
@@ -410,26 +503,24 @@ static const char redefineHighp[] =
bool QOpenGLShader::compileSourceCode(const char *source)
{
Q_D(QOpenGLShader);
- if (d->shaderGuard && d->shaderGuard->id()) {
- QVarLengthArray<const char *, 4> src;
- QVarLengthArray<GLint, 4> srclen;
- int headerLen = 0;
- while (source && source[headerLen] == '#') {
- // Skip #version and #extension directives at the start of
- // the shader code. We need to insert the qualifierDefines
- // and redefineHighp just after them.
- if (qstrncmp(source + headerLen, "#version", 8) != 0 &&
- qstrncmp(source + headerLen, "#extension", 10) != 0) {
- break;
- }
- while (source[headerLen] != '\0' && source[headerLen] != '\n')
- ++headerLen;
- if (source[headerLen] == '\n')
- ++headerLen;
- }
- if (headerLen > 0) {
- src.append(source);
- srclen.append(GLint(headerLen));
+ // This method breaks the shader code into two parts:
+ // 1. Up to and including an optional #version directive.
+ // 2. The rest.
+ // If a #version directive exists, qualifierDefines and redefineHighp
+ // are inserted after. Otherwise they are inserted right at the start.
+ // In both cases a #line directive is appended in order to compensate
+ // for line number changes in case of compiler errors.
+
+ if (d->shaderGuard && d->shaderGuard->id() && source) {
+ const QVersionDirectivePosition versionDirectivePosition = findVersionDirectivePosition(source);
+
+ QVarLengthArray<const char *, 5> sourceChunks;
+ QVarLengthArray<GLint, 5> sourceChunkLengths;
+
+ if (versionDirectivePosition.hasPosition()) {
+ // Append source up to #version directive
+ sourceChunks.append(source);
+ sourceChunkLengths.append(GLint(versionDirectivePosition.position));
}
// The precision qualifiers are useful on OpenGL/ES systems,
@@ -442,20 +533,28 @@ bool QOpenGLShader::compileSourceCode(const char *source)
|| true
#endif
) {
- src.append(qualifierDefines);
- srclen.append(GLint(sizeof(qualifierDefines) - 1));
+ sourceChunks.append(qualifierDefines);
+ sourceChunkLengths.append(GLint(sizeof(qualifierDefines) - 1));
}
#ifdef QOpenGL_REDEFINE_HIGHP
if (d->shaderType == Fragment && !ctx_d->workaround_missingPrecisionQualifiers
&& QOpenGLContext::currentContext()->isOpenGLES()) {
- src.append(redefineHighp);
- srclen.append(GLint(sizeof(redefineHighp) - 1));
+ sourceChunks.append(redefineHighp);
+ sourceChunkLengths.append(GLint(sizeof(redefineHighp) - 1));
}
#endif
- src.append(source + headerLen);
- srclen.append(GLint(qstrlen(source + headerLen)));
- d->glfuncs->glShaderSource(d->shaderGuard->id(), src.size(), src.data(), srclen.data());
+
+ // Append #line directive in order to compensate for text insertion
+ QByteArray lineDirective = QStringLiteral("#line %1\n").arg(versionDirectivePosition.line).toUtf8();
+ sourceChunks.append(lineDirective.constData());
+ sourceChunkLengths.append(GLint(lineDirective.length()));
+
+ // Append rest of shader code
+ sourceChunks.append(source + versionDirectivePosition.position);
+ sourceChunkLengths.append(GLint(qstrlen(source + versionDirectivePosition.position)));
+
+ d->glfuncs->glShaderSource(d->shaderGuard->id(), sourceChunks.size(), sourceChunks.data(), sourceChunkLengths.data());
return d->compile(this);
} else {
return false;
diff --git a/src/gui/opengl/qopengltexture.cpp b/src/gui/opengl/qopengltexture.cpp
index b96bc6f346..903cfb2bf8 100644
--- a/src/gui/opengl/qopengltexture.cpp
+++ b/src/gui/opengl/qopengltexture.cpp
@@ -64,6 +64,8 @@ QOpenGLTexturePrivate::QOpenGLTexturePrivate(QOpenGLTexture::Target textureTarge
baseLevel(0),
maxLevel(1000),
depthStencilMode(QOpenGLTexture::DepthMode),
+ comparisonFunction(QOpenGLTexture::CompareLessEqual),
+ comparisonMode(QOpenGLTexture::CompareNone),
minFilter(QOpenGLTexture::Nearest),
magFilter(QOpenGLTexture::Nearest),
maxAnisotropy(1.0f),
@@ -294,16 +296,166 @@ int QOpenGLTexturePrivate::evaluateMipLevels() const
}
}
-void QOpenGLTexturePrivate::allocateStorage()
+static bool isSizedTextureFormat(QOpenGLTexture::TextureFormat internalFormat)
+{
+ switch (internalFormat) {
+ case QOpenGLTexture::NoFormat:
+ return false;
+
+ case QOpenGLTexture::R8_UNorm:
+ case QOpenGLTexture::RG8_UNorm:
+ case QOpenGLTexture::RGB8_UNorm:
+ case QOpenGLTexture::RGBA8_UNorm:
+ case QOpenGLTexture::R16_UNorm:
+ case QOpenGLTexture::RG16_UNorm:
+ case QOpenGLTexture::RGB16_UNorm:
+ case QOpenGLTexture::RGBA16_UNorm:
+ case QOpenGLTexture::R8_SNorm:
+ case QOpenGLTexture::RG8_SNorm:
+ case QOpenGLTexture::RGB8_SNorm:
+ case QOpenGLTexture::RGBA8_SNorm:
+ case QOpenGLTexture::R16_SNorm:
+ case QOpenGLTexture::RG16_SNorm:
+ case QOpenGLTexture::RGB16_SNorm:
+ case QOpenGLTexture::RGBA16_SNorm:
+ case QOpenGLTexture::R8U:
+ case QOpenGLTexture::RG8U:
+ case QOpenGLTexture::RGB8U:
+ case QOpenGLTexture::RGBA8U:
+ case QOpenGLTexture::R16U:
+ case QOpenGLTexture::RG16U:
+ case QOpenGLTexture::RGB16U:
+ case QOpenGLTexture::RGBA16U:
+ case QOpenGLTexture::R32U:
+ case QOpenGLTexture::RG32U:
+ case QOpenGLTexture::RGB32U:
+ case QOpenGLTexture::RGBA32U:
+ case QOpenGLTexture::R8I:
+ case QOpenGLTexture::RG8I:
+ case QOpenGLTexture::RGB8I:
+ case QOpenGLTexture::RGBA8I:
+ case QOpenGLTexture::R16I:
+ case QOpenGLTexture::RG16I:
+ case QOpenGLTexture::RGB16I:
+ case QOpenGLTexture::RGBA16I:
+ case QOpenGLTexture::R32I:
+ case QOpenGLTexture::RG32I:
+ case QOpenGLTexture::RGB32I:
+ case QOpenGLTexture::RGBA32I:
+ case QOpenGLTexture::R16F:
+ case QOpenGLTexture::RG16F:
+ case QOpenGLTexture::RGB16F:
+ case QOpenGLTexture::RGBA16F:
+ case QOpenGLTexture::R32F:
+ case QOpenGLTexture::RG32F:
+ case QOpenGLTexture::RGB32F:
+ case QOpenGLTexture::RGBA32F:
+ case QOpenGLTexture::RGB9E5:
+ case QOpenGLTexture::RG11B10F:
+ case QOpenGLTexture::RG3B2:
+ case QOpenGLTexture::R5G6B5:
+ case QOpenGLTexture::RGB5A1:
+ case QOpenGLTexture::RGBA4:
+ case QOpenGLTexture::RGB10A2:
+
+ case QOpenGLTexture::D16:
+ case QOpenGLTexture::D24:
+ case QOpenGLTexture::D32:
+ case QOpenGLTexture::D32F:
+
+ case QOpenGLTexture::D24S8:
+ case QOpenGLTexture::D32FS8X24:
+
+ case QOpenGLTexture::S8:
+
+ case QOpenGLTexture::RGB_DXT1:
+ case QOpenGLTexture::RGBA_DXT1:
+ case QOpenGLTexture::RGBA_DXT3:
+ case QOpenGLTexture::RGBA_DXT5:
+ case QOpenGLTexture::R_ATI1N_UNorm:
+ case QOpenGLTexture::R_ATI1N_SNorm:
+ case QOpenGLTexture::RG_ATI2N_UNorm:
+ case QOpenGLTexture::RG_ATI2N_SNorm:
+ case QOpenGLTexture::RGB_BP_UNSIGNED_FLOAT:
+ case QOpenGLTexture::RGB_BP_SIGNED_FLOAT:
+ case QOpenGLTexture::RGB_BP_UNorm:
+ case QOpenGLTexture::SRGB8:
+ case QOpenGLTexture::SRGB8_Alpha8:
+ case QOpenGLTexture::SRGB_DXT1:
+ case QOpenGLTexture::SRGB_Alpha_DXT1:
+ case QOpenGLTexture::SRGB_Alpha_DXT3:
+ case QOpenGLTexture::SRGB_Alpha_DXT5:
+ case QOpenGLTexture::SRGB_BP_UNorm:
+ case QOpenGLTexture::R11_EAC_UNorm:
+ case QOpenGLTexture::R11_EAC_SNorm:
+ case QOpenGLTexture::RG11_EAC_UNorm:
+ case QOpenGLTexture::RG11_EAC_SNorm:
+ case QOpenGLTexture::RGB8_ETC2:
+ case QOpenGLTexture::SRGB8_ETC2:
+ case QOpenGLTexture::RGB8_PunchThrough_Alpha1_ETC2:
+ case QOpenGLTexture::SRGB8_PunchThrough_Alpha1_ETC2:
+ case QOpenGLTexture::RGBA8_ETC2_EAC:
+ case QOpenGLTexture::SRGB8_Alpha8_ETC2_EAC:
+ return true;
+
+ case QOpenGLTexture::DepthFormat:
+ case QOpenGLTexture::AlphaFormat:
+
+ case QOpenGLTexture::RGBFormat:
+ case QOpenGLTexture::RGBAFormat:
+
+ case QOpenGLTexture::LuminanceFormat:
+
+ case QOpenGLTexture::LuminanceAlphaFormat:
+ return false;
+ }
+
+ Q_UNREACHABLE();
+ return false;
+}
+
+static bool isTextureTargetMultisample(QOpenGLTexture::Target target)
+{
+ switch (target) {
+ case QOpenGLTexture::Target1D:
+ case QOpenGLTexture::Target1DArray:
+ case QOpenGLTexture::Target2D:
+ case QOpenGLTexture::Target2DArray:
+ case QOpenGLTexture::Target3D:
+ case QOpenGLTexture::TargetCubeMap:
+ case QOpenGLTexture::TargetCubeMapArray:
+ return false;
+
+ case QOpenGLTexture::Target2DMultisample:
+ case QOpenGLTexture::Target2DMultisampleArray:
+ return true;
+
+ case QOpenGLTexture::TargetRectangle:
+ case QOpenGLTexture::TargetBuffer:
+ return false;
+ }
+
+ Q_UNREACHABLE();
+ return false;
+}
+
+void QOpenGLTexturePrivate::allocateStorage(QOpenGLTexture::PixelFormat pixelFormat, QOpenGLTexture::PixelType pixelType)
{
// Resolve the actual number of mipmap levels we can use
mipLevels = evaluateMipLevels();
- // Use immutable storage whenever possible, falling back to mutable when not available
- if (features.testFlag(QOpenGLTexture::ImmutableStorage))
+ // Use immutable storage whenever possible, falling back to mutable
+ // Note that if multisample textures are not supported at all, we'll still fail into
+ // the mutable storage allocation
+ const bool useImmutableStorage = isSizedTextureFormat(format)
+ && (isTextureTargetMultisample(target)
+ ? features.testFlag(QOpenGLTexture::ImmutableMultisampleStorage)
+ : features.testFlag(QOpenGLTexture::ImmutableStorage));
+
+ if (useImmutableStorage)
allocateImmutableStorage();
else
- allocateMutableStorage();
+ allocateMutableStorage(pixelFormat, pixelType);
}
static QOpenGLTexture::PixelFormat pixelFormatCompatibleWithInternalFormat(QOpenGLTexture::TextureFormat internalFormat)
@@ -313,59 +465,167 @@ static QOpenGLTexture::PixelFormat pixelFormatCompatibleWithInternalFormat(QOpen
return QOpenGLTexture::NoSourceFormat;
case QOpenGLTexture::R8_UNorm:
+ return QOpenGLTexture::Red;
+
case QOpenGLTexture::RG8_UNorm:
+ return QOpenGLTexture::RG;
+
case QOpenGLTexture::RGB8_UNorm:
+ return QOpenGLTexture::RGB;
+
case QOpenGLTexture::RGBA8_UNorm:
+ return QOpenGLTexture::RGBA;
+
case QOpenGLTexture::R16_UNorm:
+ return QOpenGLTexture::Red;
+
case QOpenGLTexture::RG16_UNorm:
+ return QOpenGLTexture::RG;
+
case QOpenGLTexture::RGB16_UNorm:
+ return QOpenGLTexture::RGB;
+
case QOpenGLTexture::RGBA16_UNorm:
+ return QOpenGLTexture::RGBA;
+
case QOpenGLTexture::R8_SNorm:
+ return QOpenGLTexture::Red;
+
case QOpenGLTexture::RG8_SNorm:
+ return QOpenGLTexture::RG;
+
case QOpenGLTexture::RGB8_SNorm:
+ return QOpenGLTexture::RGB;
+
case QOpenGLTexture::RGBA8_SNorm:
+ return QOpenGLTexture::RGBA;
+
case QOpenGLTexture::R16_SNorm:
+ return QOpenGLTexture::Red;
+
case QOpenGLTexture::RG16_SNorm:
+ return QOpenGLTexture::RG;
+
case QOpenGLTexture::RGB16_SNorm:
+ return QOpenGLTexture::RGB;
+
case QOpenGLTexture::RGBA16_SNorm:
+ return QOpenGLTexture::RGBA;
+
case QOpenGLTexture::R8U:
+ return QOpenGLTexture::Red_Integer;
+
case QOpenGLTexture::RG8U:
+ return QOpenGLTexture::RG_Integer;
+
case QOpenGLTexture::RGB8U:
+ return QOpenGLTexture::RGB_Integer;
+
case QOpenGLTexture::RGBA8U:
+ return QOpenGLTexture::RGBA_Integer;
+
case QOpenGLTexture::R16U:
+ return QOpenGLTexture::Red_Integer;
+
case QOpenGLTexture::RG16U:
+ return QOpenGLTexture::RG_Integer;
+
case QOpenGLTexture::RGB16U:
+ return QOpenGLTexture::RGB_Integer;
+
case QOpenGLTexture::RGBA16U:
+ return QOpenGLTexture::RGBA_Integer;
+
case QOpenGLTexture::R32U:
+ return QOpenGLTexture::Red_Integer;
+
case QOpenGLTexture::RG32U:
+ return QOpenGLTexture::RG_Integer;
+
case QOpenGLTexture::RGB32U:
+ return QOpenGLTexture::RGB_Integer;
+
case QOpenGLTexture::RGBA32U:
+ return QOpenGLTexture::RGBA_Integer;
+
case QOpenGLTexture::R8I:
+ return QOpenGLTexture::Red_Integer;
+
case QOpenGLTexture::RG8I:
+ return QOpenGLTexture::RG_Integer;
+
case QOpenGLTexture::RGB8I:
+ return QOpenGLTexture::RGB_Integer;
+
case QOpenGLTexture::RGBA8I:
+ return QOpenGLTexture::RGBA_Integer;
+
case QOpenGLTexture::R16I:
+ return QOpenGLTexture::Red_Integer;
+
case QOpenGLTexture::RG16I:
+ return QOpenGLTexture::RG_Integer;
+
case QOpenGLTexture::RGB16I:
+ return QOpenGLTexture::RGB_Integer;
+
case QOpenGLTexture::RGBA16I:
+ return QOpenGLTexture::RGBA_Integer;
+
case QOpenGLTexture::R32I:
+ return QOpenGLTexture::Red_Integer;
+
case QOpenGLTexture::RG32I:
+ return QOpenGLTexture::RG_Integer;
+
case QOpenGLTexture::RGB32I:
+ return QOpenGLTexture::RGB_Integer;
+
case QOpenGLTexture::RGBA32I:
+ return QOpenGLTexture::RGBA_Integer;
+
case QOpenGLTexture::R16F:
+ return QOpenGLTexture::Red;
+
case QOpenGLTexture::RG16F:
+ return QOpenGLTexture::RG;
+
case QOpenGLTexture::RGB16F:
+ return QOpenGLTexture::RGB;
+
case QOpenGLTexture::RGBA16F:
+ return QOpenGLTexture::RGBA;
+
case QOpenGLTexture::R32F:
+ return QOpenGLTexture::Red;
+
case QOpenGLTexture::RG32F:
+ return QOpenGLTexture::RG;
+
case QOpenGLTexture::RGB32F:
+ return QOpenGLTexture::RGB;
+
case QOpenGLTexture::RGBA32F:
+ return QOpenGLTexture::RGBA;
+
case QOpenGLTexture::RGB9E5:
+ return QOpenGLTexture::RGB;
+
case QOpenGLTexture::RG11B10F:
+ return QOpenGLTexture::RGB;
+
case QOpenGLTexture::RG3B2:
+ return QOpenGLTexture::RGB;
+
case QOpenGLTexture::R5G6B5:
+ return QOpenGLTexture::RGB;
+
case QOpenGLTexture::RGB5A1:
+ return QOpenGLTexture::RGBA;
+
case QOpenGLTexture::RGBA4:
+ return QOpenGLTexture::RGBA;
+
case QOpenGLTexture::RGB10A2:
return QOpenGLTexture::RGBA;
@@ -402,6 +662,26 @@ static QOpenGLTexture::PixelFormat pixelFormatCompatibleWithInternalFormat(QOpen
case QOpenGLTexture::SRGB_BP_UNorm:
return QOpenGLTexture::RGBA;
+ case QOpenGLTexture::R11_EAC_UNorm:
+ case QOpenGLTexture::R11_EAC_SNorm:
+ return QOpenGLTexture::Red;
+
+ case QOpenGLTexture::RG11_EAC_UNorm:
+ case QOpenGLTexture::RG11_EAC_SNorm:
+ return QOpenGLTexture::RG;
+
+ case QOpenGLTexture::RGB8_ETC2:
+ case QOpenGLTexture::SRGB8_ETC2:
+ return QOpenGLTexture::RGB;
+
+ case QOpenGLTexture::RGB8_PunchThrough_Alpha1_ETC2:
+ case QOpenGLTexture::SRGB8_PunchThrough_Alpha1_ETC2:
+ return QOpenGLTexture::RGBA;
+
+ case QOpenGLTexture::RGBA8_ETC2_EAC:
+ case QOpenGLTexture::SRGB8_Alpha8_ETC2_EAC:
+ return QOpenGLTexture::RGBA;
+
case QOpenGLTexture::DepthFormat:
return QOpenGLTexture::Depth;
@@ -437,6 +717,8 @@ static QOpenGLTexture::PixelType pixelTypeCompatibleWithInternalFormat(QOpenGLTe
case QOpenGLTexture::RG16_UNorm:
case QOpenGLTexture::RGB16_UNorm:
case QOpenGLTexture::RGBA16_UNorm:
+ return QOpenGLTexture::UInt8;
+
case QOpenGLTexture::R8_SNorm:
case QOpenGLTexture::RG8_SNorm:
case QOpenGLTexture::RGB8_SNorm:
@@ -445,6 +727,8 @@ static QOpenGLTexture::PixelType pixelTypeCompatibleWithInternalFormat(QOpenGLTe
case QOpenGLTexture::RG16_SNorm:
case QOpenGLTexture::RGB16_SNorm:
case QOpenGLTexture::RGBA16_SNorm:
+ return QOpenGLTexture::Int8;
+
case QOpenGLTexture::R8U:
case QOpenGLTexture::RG8U:
case QOpenGLTexture::RGB8U:
@@ -457,6 +741,8 @@ static QOpenGLTexture::PixelType pixelTypeCompatibleWithInternalFormat(QOpenGLTe
case QOpenGLTexture::RG32U:
case QOpenGLTexture::RGB32U:
case QOpenGLTexture::RGBA32U:
+ return QOpenGLTexture::UInt8;
+
case QOpenGLTexture::R8I:
case QOpenGLTexture::RG8I:
case QOpenGLTexture::RGB8I:
@@ -469,28 +755,50 @@ static QOpenGLTexture::PixelType pixelTypeCompatibleWithInternalFormat(QOpenGLTe
case QOpenGLTexture::RG32I:
case QOpenGLTexture::RGB32I:
case QOpenGLTexture::RGBA32I:
+ return QOpenGLTexture::Int8;
+
case QOpenGLTexture::R16F:
case QOpenGLTexture::RG16F:
case QOpenGLTexture::RGB16F:
case QOpenGLTexture::RGBA16F:
+ return QOpenGLTexture::Float16;
+
case QOpenGLTexture::R32F:
case QOpenGLTexture::RG32F:
case QOpenGLTexture::RGB32F:
case QOpenGLTexture::RGBA32F:
+ return QOpenGLTexture::Float32;
+
case QOpenGLTexture::RGB9E5:
+ return QOpenGLTexture::UInt16_RGB5A1_Rev;
+
case QOpenGLTexture::RG11B10F:
+ return QOpenGLTexture::UInt32_RG11B10F;
+
case QOpenGLTexture::RG3B2:
+ return QOpenGLTexture::UInt8_RG3B2;
+
case QOpenGLTexture::R5G6B5:
+ return QOpenGLTexture::UInt16_R5G6B5;
+
case QOpenGLTexture::RGB5A1:
+ return QOpenGLTexture::UInt16_RGB5A1;
+
case QOpenGLTexture::RGBA4:
+ return QOpenGLTexture::UInt16_RGBA4;
+
case QOpenGLTexture::RGB10A2:
- return QOpenGLTexture::UInt8;
+ return QOpenGLTexture::UInt32_RGB10A2;
case QOpenGLTexture::D16:
+ return QOpenGLTexture::UInt16;
+
case QOpenGLTexture::D24:
case QOpenGLTexture::D32:
+ return QOpenGLTexture::UInt32;
+
case QOpenGLTexture::D32F:
- return QOpenGLTexture::UInt8;
+ return QOpenGLTexture::Float32;
case QOpenGLTexture::D24S8:
return QOpenGLTexture::UInt32_D24S8;
@@ -519,6 +827,16 @@ static QOpenGLTexture::PixelType pixelTypeCompatibleWithInternalFormat(QOpenGLTe
case QOpenGLTexture::SRGB_Alpha_DXT3:
case QOpenGLTexture::SRGB_Alpha_DXT5:
case QOpenGLTexture::SRGB_BP_UNorm:
+ case QOpenGLTexture::R11_EAC_UNorm:
+ case QOpenGLTexture::R11_EAC_SNorm:
+ case QOpenGLTexture::RG11_EAC_UNorm:
+ case QOpenGLTexture::RG11_EAC_SNorm:
+ case QOpenGLTexture::RGB8_ETC2:
+ case QOpenGLTexture::SRGB8_ETC2:
+ case QOpenGLTexture::RGB8_PunchThrough_Alpha1_ETC2:
+ case QOpenGLTexture::SRGB8_PunchThrough_Alpha1_ETC2:
+ case QOpenGLTexture::RGBA8_ETC2_EAC:
+ case QOpenGLTexture::SRGB8_Alpha8_ETC2_EAC:
return QOpenGLTexture::UInt8;
case QOpenGLTexture::DepthFormat:
@@ -534,11 +852,8 @@ static QOpenGLTexture::PixelType pixelTypeCompatibleWithInternalFormat(QOpenGLTe
return QOpenGLTexture::NoPixelType;
}
-void QOpenGLTexturePrivate::allocateMutableStorage()
+void QOpenGLTexturePrivate::allocateMutableStorage(QOpenGLTexture::PixelFormat pixelFormat, QOpenGLTexture::PixelType pixelType)
{
- const QOpenGLTexture::PixelFormat pixelFormat = pixelFormatCompatibleWithInternalFormat(format);
- const QOpenGLTexture::PixelType pixelType = pixelTypeCompatibleWithInternalFormat(format);
-
switch (target) {
case QOpenGLTexture::TargetBuffer:
// Buffer textures get their storage from an external OpenGL buffer
@@ -747,7 +1062,7 @@ void QOpenGLTexturePrivate::allocateImmutableStorage()
break;
case QOpenGLTexture::Target2DMultisample:
- if (features.testFlag(QOpenGLTexture::TextureMultisample)) {
+ if (features.testFlag(QOpenGLTexture::ImmutableMultisampleStorage)) {
texFuncs->glTextureStorage2DMultisample(textureId, target, bindingTarget, samples, format,
dimensions[0], dimensions[1],
fixedSamplePositions);
@@ -758,7 +1073,7 @@ void QOpenGLTexturePrivate::allocateImmutableStorage()
break;
case QOpenGLTexture::Target2DMultisampleArray:
- if (features.testFlag(QOpenGLTexture::TextureMultisample)
+ if (features.testFlag(QOpenGLTexture::ImmutableMultisampleStorage)
&& features.testFlag(QOpenGLTexture::TextureArrays)) {
texFuncs->glTextureStorage3DMultisample(textureId, target, bindingTarget, samples, format,
dimensions[0], dimensions[1], layers,
@@ -1525,6 +1840,16 @@ QOpenGLTexture *QOpenGLTexturePrivate::createTextureView(QOpenGLTexture::Target
\value RGB_BP_UNSIGNED_FLOAT Equivalent to GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB
\value RGB_BP_SIGNED_FLOAT Equivalent to GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB
\value RGB_BP_UNorm Equivalent to GL_COMPRESSED_RGBA_BPTC_UNORM_ARB
+ \value R11_EAC_UNorm Equivalent to GL_COMPRESSED_R11_EAC
+ \value R11_EAC_SNorm Equivalent to GL_COMPRESSED_SIGNED_R11_EAC
+ \value RG11_EAC_UNorm Equivalent to GL_COMPRESSED_RG11_EAC
+ \value RG11_EAC_SNorm Equivalent to GL_COMPRESSED_SIGNED_RG11_EAC
+ \value RGB8_ETC2 Equivalent to GL_COMPRESSED_RGB8_ETC2
+ \value SRGB8_ETC2 Equivalent to GL_COMPRESSED_SRGB8_ETC2
+ \value RGB8_PunchThrough_Alpha1_ETC2 Equivalent to GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2
+ \value SRGB8_PunchThrough_Alpha1_ETC2 Equivalent to GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2
+ \value RGBA8_ETC2_EAC Equivalent to GL_COMPRESSED_RGBA8_ETC2_EAC
+ \value SRGB8_Alpha8_ETC2_EAC Equivalent to GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC
\value SRGB8 Equivalent to GL_SRGB8
\value SRGB8_Alpha8 Equivalent to GL_SRGB8_ALPHA8
@@ -2050,6 +2375,16 @@ void QOpenGLTexture::setFormat(TextureFormat format)
d->formatClass = FormatClass_S3TC_DXT5_RGBA;
break;
+ case QOpenGLTexture::R11_EAC_UNorm:
+ case QOpenGLTexture::R11_EAC_SNorm:
+ case QOpenGLTexture::RG11_EAC_UNorm:
+ case QOpenGLTexture::RG11_EAC_SNorm:
+ case QOpenGLTexture::RGB8_ETC2:
+ case QOpenGLTexture::SRGB8_ETC2:
+ case QOpenGLTexture::RGB8_PunchThrough_Alpha1_ETC2:
+ case QOpenGLTexture::SRGB8_PunchThrough_Alpha1_ETC2:
+ case QOpenGLTexture::RGBA8_ETC2_EAC:
+ case QOpenGLTexture::SRGB8_Alpha8_ETC2_EAC:
case RG3B2:
case R5G6B5:
case RGB5A1:
@@ -2436,17 +2771,58 @@ bool QOpenGLTexture::isFixedSamplePositions() const
Once storage has been allocated for the texture then pixel data
can be uploaded via one of the setData() overloads.
+ \note If immutable texture storage is not available,
+ then a default pixel format and pixel type will be used to
+ create the mutable storage. You can use the other
+ allocateStorage() overload to specify exactly the pixel format
+ and the pixel type to use when allocating mutable storage;
+ this is particulary useful under certain OpenGL ES implementations
+ (notably, OpenGL ES 2), where the pixel format and the pixel type
+ used at allocation time must perfectly match the format
+ and the type passed to any subsequent setData() call.
+
\sa isStorageAllocated(), setData()
*/
void QOpenGLTexture::allocateStorage()
{
Q_D(QOpenGLTexture);
if (d->create()) {
- d->allocateStorage();
+ const QOpenGLTexture::PixelFormat pixelFormat = pixelFormatCompatibleWithInternalFormat(d->format);
+ const QOpenGLTexture::PixelType pixelType = pixelTypeCompatibleWithInternalFormat(d->format);
+ d->allocateStorage(pixelFormat, pixelType);
}
}
/*!
+ \since 5.5
+
+ Allocates server-side storage for this texture object taking
+ into account, the format, dimensions, mipmap levels, array
+ layers and cubemap faces.
+
+ Once storage has been allocated it is no longer possible to change
+ these properties.
+
+ If supported QOpenGLTexture makes use of immutable texture
+ storage. However, if immutable texture storage is not available,
+ then the specified \a pixelFormat and \a pixelType will be used
+ to allocate mutable storage; note that in certain OpenGL implementations
+ (notably, OpenGL ES 2) they must perfectly match the format
+ and the type passed to any subsequent setData() call.
+
+ Once storage has been allocated for the texture then pixel data
+ can be uploaded via one of the setData() overloads.
+
+ \sa isStorageAllocated(), setData()
+*/
+void QOpenGLTexture::allocateStorage(QOpenGLTexture::PixelFormat pixelFormat, QOpenGLTexture::PixelType pixelType)
+{
+ Q_D(QOpenGLTexture);
+ if (d->create())
+ d->allocateStorage(pixelFormat, pixelType);
+}
+
+/*!
Returns \c true if server-side storage for this texture as been
allocated.
@@ -2547,7 +2923,7 @@ void QOpenGLTexture::setData(int mipLevel, int layer, CubeMapFace cubeFace,
Q_ASSERT(d->textureId);
if (!isStorageAllocated()) {
qWarning("Cannot set data on a texture that does not have storage allocated.\n"
- "To do so call allocate() before this function");
+ "To do so call allocateStorage() before this function");
return;
}
d->setData(mipLevel, layer, cubeFace, sourceFormat, sourceType, data, options);
@@ -2606,7 +2982,7 @@ void QOpenGLTexture::setData(int mipLevel, int layer, CubeMapFace cubeFace,
Q_ASSERT(d->textureId);
if (!isStorageAllocated()) {
qWarning("Cannot set data on a texture that does not have storage allocated.\n"
- "To do so call allocate() before this function");
+ "To do so call allocateStorage() before this function");
return;
}
d->setData(mipLevel, layer, cubeFace, sourceFormat, sourceType, data, options);
@@ -2672,7 +3048,7 @@ void QOpenGLTexture::setData(const QImage& image, MipMapGeneration genMipMaps)
setSize(image.width(), image.height());
setMipLevels(genMipMaps == GenerateMipMaps ? maximumMipLevels() : 1);
- allocateStorage();
+ allocateStorage(QOpenGLTexture::RGBA, QOpenGLTexture::UInt8);
// Upload pixel data and generate mipmaps
QImage glImage = image.convertToFormat(QImage::Format_RGBA8888);
@@ -2699,7 +3075,7 @@ void QOpenGLTexture::setCompressedData(int mipLevel, int layer, CubeMapFace cube
Q_ASSERT(d->textureId);
if (!isStorageAllocated()) {
qWarning("Cannot set data on a texture that does not have storage allocated.\n"
- "To do so call allocate() before this function");
+ "To do so call allocateStorage() before this function");
return;
}
d->setCompressedData(mipLevel, layer, cubeFace, dataSize, data, options);
@@ -2751,7 +3127,7 @@ void QOpenGLTexture::setCompressedData(int mipLevel, int layer, CubeMapFace cube
Q_ASSERT(d->textureId);
if (!isStorageAllocated()) {
qWarning("Cannot set data on a texture that does not have storage allocated.\n"
- "To do so call allocate() before this function");
+ "To do so call allocateStorage() before this function");
return;
}
d->setCompressedData(mipLevel, layer, cubeFace, dataSize, data, options);
@@ -2830,7 +3206,8 @@ bool QOpenGLTexture::hasFeature(Feature feature)
case ImmutableStorage:
supported = f.version() >= qMakePair(4, 2)
- || ctx->hasExtension(QByteArrayLiteral("GL_ARB_texture_storage"));
+ || ctx->hasExtension(QByteArrayLiteral("GL_ARB_texture_storage"))
+ || ctx->hasExtension(QByteArrayLiteral("GL_EXT_texture_storage"));
break;
case TextureCubeMapArrays:
@@ -2875,10 +3252,17 @@ bool QOpenGLTexture::hasFeature(Feature feature)
supported = f.version() >= qMakePair(1, 1);
break;
- case MaxFeatureFlag:
+ case TextureComparisonOperators:
+ // GL 1.4 and GL_ARB_shadow alone support only LEQUAL and GEQUAL;
+ // since we're talking about history anyhow avoid to be extra pedantic
+ // in the feature set, and simply claim supported if we have the full set of operators
+ // (which has been added into 1.5 / GL_EXT_shadow_funcs).
+ supported = f.version() >= qMakePair(1, 5)
+ || (ctx->hasExtension(QByteArrayLiteral("GL_ARB_shadow"))
+ && ctx->hasExtension(QByteArrayLiteral("GL_EXT_shadow_funcs")));
break;
- default:
+ case MaxFeatureFlag:
break;
}
}
@@ -2887,21 +3271,64 @@ bool QOpenGLTexture::hasFeature(Feature feature)
#endif
{
switch (feature) {
+ case ImmutableStorage:
+ supported = f.version() >= qMakePair(3, 0)
+ || ctx->hasExtension(QByteArrayLiteral("EXT_texture_storage"));
+ break;
+
+ case ImmutableMultisampleStorage:
+ supported = f.version() >= qMakePair(3, 1);
+ break;
+
+ case TextureRectangle:
+ break;
+
+ case TextureArrays:
+ supported = f.version() >= qMakePair(3, 0);
+ break;
+
case Texture3D:
- supported = ctx->hasExtension(QByteArrayLiteral("GL_OES_texture_3D"));
+ supported = f.version() >= qMakePair(3, 0)
+ || ctx->hasExtension(QByteArrayLiteral("GL_OES_texture_3D"));
break;
+
+ case TextureMultisample:
+ supported = f.version() >= qMakePair(3, 1);
+ break;
+
+ case TextureBuffer:
+ break;
+
+ case TextureCubeMapArrays:
+ break;
+
+ case Swizzle:
+ supported = f.version() >= qMakePair(3, 0);
+ break;
+
+ case StencilTexturing:
+ break;
+
case AnisotropicFiltering:
supported = ctx->hasExtension(QByteArrayLiteral("GL_EXT_texture_filter_anisotropic"));
break;
+
case NPOTTextures:
case NPOTTextureRepeat:
- supported = f.version() >= qMakePair(3,0);
- if (!supported) {
- supported = ctx->hasExtension(QByteArrayLiteral("GL_OES_texture_npot"));
- if (!supported)
- supported = ctx->hasExtension(QByteArrayLiteral("GL_ARB_texture_non_power_of_two"));
- }
- default:
+ supported = f.version() >= qMakePair(3,0)
+ || ctx->hasExtension(QByteArrayLiteral("GL_OES_texture_npot"))
+ || ctx->hasExtension(QByteArrayLiteral("GL_ARB_texture_non_power_of_two"));
+ break;
+
+ case Texture1D:
+ break;
+
+ case TextureComparisonOperators:
+ supported = f.version() >= qMakePair(3, 0)
+ || ctx->hasExtension(QByteArrayLiteral("GL_EXT_shadow_samplers"));
+ break;
+
+ case MaxFeatureFlag:
break;
}
}
@@ -3167,6 +3594,16 @@ QOpenGLTexture::SwizzleValue QOpenGLTexture::swizzleMask(SwizzleComponent compon
}
/*!
+ \enum QOpenGLTexture::DepthStencilMode
+ \since 5.4
+ This enum specifies which component of a depth/stencil texture is
+ accessed when the texture is sampled.
+
+ \value DepthMode Equivalent to GL_DEPTH_COMPONENT.
+ \value StencilMode Equivalent to GL_STENCIL_INDEX.
+*/
+
+/*!
If using a texture that has a combined depth/stencil format this function sets
which component of the texture is accessed to \a mode.
@@ -3175,6 +3612,7 @@ QOpenGLTexture::SwizzleValue QOpenGLTexture::swizzleMask(SwizzleComponent compon
the parameter is set to StencilMode, the shader will access the stencil component.
\note This function has no effect on Mac and Qt built for OpenGL ES 2.
+ \since 5.4
\sa depthStencilMode()
*/
void QOpenGLTexture::setDepthStencilMode(QOpenGLTexture::DepthStencilMode mode)
@@ -3202,6 +3640,7 @@ void QOpenGLTexture::setDepthStencilMode(QOpenGLTexture::DepthStencilMode mode)
/*!
Returns the depth stencil mode for textures using a combined depth/stencil format.
+ \since 5.4
\sa setDepthStencilMode()
*/
QOpenGLTexture::DepthStencilMode QOpenGLTexture::depthStencilMode() const
@@ -3211,6 +3650,110 @@ QOpenGLTexture::DepthStencilMode QOpenGLTexture::depthStencilMode() const
}
/*!
+ \enum ComparisonFunction
+ \since 5.5
+ This enum specifies which comparison operator is used when texture comparison
+ is enabled on this texture.
+
+ \value CompareLessEqual Equivalent to GL_LEQUAL.
+ \value CompareGreaterEqual Equivalent to GL_GEQUAL.
+ \value CompareLess Equivalent to GL_LESS.
+ \value CompareGreater Equivalent to GL_GREATER.
+ \value CompareEqual Equivalent to GL_EQUAL.
+ \value CommpareNotEqual Equivalent to GL_NOTEQUAL.
+ \value CompareAlways Equivalent to GL_ALWAYS.
+ \value CompareNever Equivalent to GL_NEVER.
+
+*/
+
+/*
+ \since 5.5
+
+ Sets the texture comparison function on this texture to \a function. The texture
+ comparison function is used by shadow samplers when sampling a depth texture.
+
+ \sa comparisonFunction()
+*/
+void QOpenGLTexture::setComparisonFunction(QOpenGLTexture::ComparisonFunction function)
+{
+#if !defined(QT_OPENGL_ES_2)
+ Q_D(QOpenGLTexture);
+ d->create();
+ if (!d->features.testFlag(TextureComparisonOperators)) {
+ qWarning("QOpenGLTexture::setComparisonFunction: requires OpenGL >= 1.5 or OpenGL ES >= 3.0");
+ return;
+ }
+ d->comparisonFunction = function;
+ d->texFuncs->glTextureParameteri(d->textureId, d->target, d->bindingTarget, GL_TEXTURE_COMPARE_FUNC, function);
+#else
+ Q_UNUSED(function);
+ qWarning("QOpenGLTexture: texture comparison functions are not supported");
+#endif
+}
+
+/*!
+ \since 5.5
+
+ Returns the texture comparison operator set on this texture. By default, a
+ texture has a CompareLessEqual comparison function.
+
+ \sa setComparisonFunction()
+*/
+QOpenGLTexture::ComparisonFunction QOpenGLTexture::comparisonFunction() const
+{
+ Q_D(const QOpenGLTexture);
+ return d->comparisonFunction;
+}
+
+/*!
+ \enum QOpenGLTexture::ComparisonMode
+ \since 5.5
+ This enum specifies which comparison mode is used when sampling this texture.
+
+ \value CompareRefToTexture Equivalent to GL_COMPARE_REF_TO_TEXTURE.
+ \value CompareNone Equivalent to GL_NONE.
+*/
+
+/*!
+ \since 5.5
+
+ Sets the texture comparison mode on this texture to \a mode. The texture
+ comparison mode is used by shadow samplers when sampling a depth texture.
+
+ \sa comparisonMode()
+*/
+void QOpenGLTexture::setComparisonMode(QOpenGLTexture::ComparisonMode mode)
+{
+#if !defined(QT_OPENGL_ES_2)
+ Q_D(QOpenGLTexture);
+ d->create();
+ if (!d->features.testFlag(TextureComparisonOperators)) {
+ qWarning("QOpenGLTexture::setComparisonMode: requires OpenGL >= 1.5 or OpenGL ES >= 3.0");
+ return;
+ }
+ d->comparisonMode = mode;
+ d->texFuncs->glTextureParameteri(d->textureId, d->target, d->bindingTarget, GL_TEXTURE_COMPARE_MODE, mode);
+#else
+ Q_UNUSED(mode);
+ qWarning("QOpenGLTexture: texture comparison modes are not supported");
+#endif
+}
+
+/*!
+ \since 5.5
+
+ Returns the texture comparison mode set on this texture. By default, a
+ texture has a CompareNone comparison mode (i.e. comparisons are disabled).
+
+ \sa setComparisonMode()
+*/
+QOpenGLTexture::ComparisonMode QOpenGLTexture::comparisonMode() const
+{
+ Q_D(const QOpenGLTexture);
+ return d->comparisonMode;
+}
+
+/*!
Sets the filter used for minification to \a filter.
\sa minificationFilter(), setMagnificationFilter(), setMinMagFilters()
diff --git a/src/gui/opengl/qopengltexture.h b/src/gui/opengl/qopengltexture.h
index a0b23c211c..56fdd07f2f 100644
--- a/src/gui/opengl/qopengltexture.h
+++ b/src/gui/opengl/qopengltexture.h
@@ -88,29 +88,6 @@ public:
DontResetTextureUnit
};
- explicit QOpenGLTexture(Target target);
- explicit QOpenGLTexture(const QImage& image, MipMapGeneration genMipMaps = GenerateMipMaps);
- ~QOpenGLTexture();
-
- Target target() const;
-
- // Creation and destruction
- bool create();
- void destroy();
- bool isCreated() const;
- GLuint textureId() const;
-
- // Binding and releasing
- void bind();
- void bind(uint unit, TextureUnitReset reset = DontResetTextureUnit);
- void release();
- void release(uint unit, TextureUnitReset reset = DontResetTextureUnit);
-
- bool isBound() const;
- bool isBound(uint unit);
- static GLuint boundTextureId(BindingTarget target);
- static GLuint boundTextureId(uint unit, BindingTarget target);
-
enum TextureFormat {
NoFormat = 0, // GL_NONE
@@ -209,6 +186,16 @@ public:
RGB_BP_UNSIGNED_FLOAT = 0x8E8F, // GL_COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_ARB
RGB_BP_SIGNED_FLOAT = 0x8E8E, // GL_COMPRESSED_RGB_BPTC_SIGNED_FLOAT_ARB
RGB_BP_UNorm = 0x8E8C, // GL_COMPRESSED_RGBA_BPTC_UNORM_ARB
+ R11_EAC_UNorm = 0x9270, // GL_COMPRESSED_R11_EAC
+ R11_EAC_SNorm = 0x9271, // GL_COMPRESSED_SIGNED_R11_EAC
+ RG11_EAC_UNorm = 0x9272, // GL_COMPRESSED_RG11_EAC
+ RG11_EAC_SNorm = 0x9273, // GL_COMPRESSED_SIGNED_RG11_EAC
+ RGB8_ETC2 = 0x9274, // GL_COMPRESSED_RGB8_ETC2
+ SRGB8_ETC2 = 0x9275, // GL_COMPRESSED_SRGB8_ETC2
+ RGB8_PunchThrough_Alpha1_ETC2 = 0x9276, // GL_COMPRESSED_RGB8_PUNCHTHROUGH_ALPHA1_ETC2
+ SRGB8_PunchThrough_Alpha1_ETC2 = 0x9277, // GL_COMPRESSED_SRGB8_PUNCHTHROUGH_ALPHA1_ETC2
+ RGBA8_ETC2_EAC = 0x9278, // GL_COMPRESSED_RGBA8_ETC2_EAC
+ SRGB8_Alpha8_ETC2_EAC = 0x9279, // GL_COMPRESSED_SRGB8_ALPHA8_ETC2_EAC
// sRGB formats
SRGB8 = 0x8C41, // GL_SRGB8
@@ -254,32 +241,6 @@ public:
};
#endif
- // Storage allocation
- void setFormat(TextureFormat format);
- TextureFormat format() const;
- void setSize(int width, int height = 1, int depth = 1);
- int width() const;
- int height() const;
- int depth() const;
- void setMipLevels(int levels);
- int mipLevels() const;
- int maximumMipLevels() const;
- void setLayers(int layers);
- int layers() const;
- int faces() const;
- void setSamples(int samples);
- int samples() const;
- void setFixedSamplePositions(bool fixed);
- bool isFixedSamplePositions() const;
- void allocateStorage();
- bool isStorageAllocated() const;
-
- QOpenGLTexture *createTextureView(Target target,
- TextureFormat viewFormat,
- int minimumMipmapLevel, int maximumMipmapLevel,
- int minimumLayer, int maximumLayer) const;
- bool isTextureView() const;
-
enum CubeMapFace {
CubeMapPositiveX = 0x8515, // GL_TEXTURE_CUBE_MAP_POSITIVE_X
CubeMapNegativeX = 0x8516, // GL_TEXTURE_CUBE_MAP_NEGATIVE_X
@@ -340,6 +301,108 @@ public:
Float32_D32_UInt32_S8_X24 = 0x8DAD // GL_FLOAT_32_UNSIGNED_INT_24_8_REV
};
+ enum SwizzleComponent {
+ SwizzleRed = 0x8E42, // GL_TEXTURE_SWIZZLE_R
+ SwizzleGreen = 0x8E43, // GL_TEXTURE_SWIZZLE_G
+ SwizzleBlue = 0x8E44, // GL_TEXTURE_SWIZZLE_B
+ SwizzleAlpha = 0x8E45 // GL_TEXTURE_SWIZZLE_A
+ };
+
+ enum SwizzleValue {
+ RedValue = 0x1903, // GL_RED
+ GreenValue = 0x1904, // GL_GREEN
+ BlueValue = 0x1905, // GL_BLUE
+ AlphaValue = 0x1906, // GL_ALPHA
+ ZeroValue = 0, // GL_ZERO
+ OneValue = 1 // GL_ONE
+ };
+
+ enum WrapMode {
+ Repeat = 0x2901, // GL_REPEAT
+ MirroredRepeat = 0x8370, // GL_MIRRORED_REPEAT
+ ClampToEdge = 0x812F, // GL_CLAMP_TO_EDGE
+ ClampToBorder = 0x812D // GL_CLAMP_TO_BORDER
+ };
+
+ enum CoordinateDirection {
+ DirectionS = 0x2802, // GL_TEXTURE_WRAP_S
+ DirectionT = 0x2803, // GL_TEXTURE_WRAP_T
+ DirectionR = 0x8072 // GL_TEXTURE_WRAP_R
+ };
+
+ // Features
+ enum Feature {
+ ImmutableStorage = 0x00000001,
+ ImmutableMultisampleStorage = 0x00000002,
+ TextureRectangle = 0x00000004,
+ TextureArrays = 0x00000008,
+ Texture3D = 0x00000010,
+ TextureMultisample = 0x00000020,
+ TextureBuffer = 0x00000040,
+ TextureCubeMapArrays = 0x00000080,
+ Swizzle = 0x00000100,
+ StencilTexturing = 0x00000200,
+ AnisotropicFiltering = 0x00000400,
+ NPOTTextures = 0x00000800,
+ NPOTTextureRepeat = 0x00001000,
+ Texture1D = 0x00002000,
+ TextureComparisonOperators = 0x00004000,
+#ifndef Q_QDOC
+ MaxFeatureFlag = 0x00008000
+#endif
+ };
+ Q_DECLARE_FLAGS(Features, Feature)
+
+ explicit QOpenGLTexture(Target target);
+ explicit QOpenGLTexture(const QImage& image, MipMapGeneration genMipMaps = GenerateMipMaps);
+ ~QOpenGLTexture();
+
+ Target target() const;
+
+ // Creation and destruction
+ bool create();
+ void destroy();
+ bool isCreated() const;
+ GLuint textureId() const;
+
+ // Binding and releasing
+ void bind();
+ void bind(uint unit, TextureUnitReset reset = DontResetTextureUnit);
+ void release();
+ void release(uint unit, TextureUnitReset reset = DontResetTextureUnit);
+
+ bool isBound() const;
+ bool isBound(uint unit);
+ static GLuint boundTextureId(BindingTarget target);
+ static GLuint boundTextureId(uint unit, BindingTarget target);
+
+ // Storage allocation
+ void setFormat(TextureFormat format);
+ TextureFormat format() const;
+ void setSize(int width, int height = 1, int depth = 1);
+ int width() const;
+ int height() const;
+ int depth() const;
+ void setMipLevels(int levels);
+ int mipLevels() const;
+ int maximumMipLevels() const;
+ void setLayers(int layers);
+ int layers() const;
+ int faces() const;
+ void setSamples(int samples);
+ int samples() const;
+ void setFixedSamplePositions(bool fixed);
+ bool isFixedSamplePositions() const;
+ void allocateStorage();
+ void allocateStorage(PixelFormat pixelFormat, PixelType pixelType);
+ bool isStorageAllocated() const;
+
+ QOpenGLTexture *createTextureView(Target target,
+ TextureFormat viewFormat,
+ int minimumMipmapLevel, int maximumMipmapLevel,
+ int minimumLayer, int maximumLayer) const;
+ bool isTextureView() const;
+
// Pixel transfer
// ### Qt 6: remove the non-const void * overloads
#if QT_DEPRECATED_SINCE(5, 3)
@@ -397,28 +460,6 @@ public:
// Helpful overloads for setData
void setData(const QImage& image, MipMapGeneration genMipMaps = GenerateMipMaps);
- // Features
- enum Feature {
- ImmutableStorage = 0x00000001,
- ImmutableMultisampleStorage = 0x00000002,
- TextureRectangle = 0x00000004,
- TextureArrays = 0x00000008,
- Texture3D = 0x00000010,
- TextureMultisample = 0x00000020,
- TextureBuffer = 0x00000040,
- TextureCubeMapArrays = 0x00000080,
- Swizzle = 0x00000100,
- StencilTexturing = 0x00000200,
- AnisotropicFiltering = 0x00000400,
- NPOTTextures = 0x00000800,
- NPOTTextureRepeat = 0x00001000,
- Texture1D = 0x00002000,
-#ifndef Q_QDOC
- MaxFeatureFlag = 0x00004000
-#endif
- };
- Q_DECLARE_FLAGS(Features, Feature)
-
static bool hasFeature(Feature feature);
// Texture Parameters
@@ -435,22 +476,6 @@ public:
void generateMipMaps();
void generateMipMaps(int baseLevel, bool resetBaseLevel = true);
- enum SwizzleComponent {
- SwizzleRed = 0x8E42, // GL_TEXTURE_SWIZZLE_R
- SwizzleGreen = 0x8E43, // GL_TEXTURE_SWIZZLE_G
- SwizzleBlue = 0x8E44, // GL_TEXTURE_SWIZZLE_B
- SwizzleAlpha = 0x8E45 // GL_TEXTURE_SWIZZLE_A
- };
-
- enum SwizzleValue {
- RedValue = 0x1903, // GL_RED
- GreenValue = 0x1904, // GL_GREEN
- BlueValue = 0x1905, // GL_BLUE
- AlphaValue = 0x1906, // GL_ALPHA
- ZeroValue = 0, // GL_ZERO
- OneValue = 1 // GL_ONE
- };
-
void setSwizzleMask(SwizzleComponent component, SwizzleValue value);
void setSwizzleMask(SwizzleValue r, SwizzleValue g,
SwizzleValue b, SwizzleValue a);
@@ -464,6 +489,28 @@ public:
void setDepthStencilMode(DepthStencilMode mode);
DepthStencilMode depthStencilMode() const;
+ enum ComparisonFunction {
+ CompareLessEqual = 0x0203, // GL_LEQUAL
+ CompareGreaterEqual = 0x0206, // GL_GEQUAL
+ CompareLess = 0x0201, // GL_LESS
+ CompareGreater = 0x0204, // GL_GREATER
+ CompareEqual = 0x0202, // GL_EQUAL
+ CommpareNotEqual = 0x0205, // GL_NOTEQUAL
+ CompareAlways = 0x0207, // GL_ALWAYS
+ CompareNever = 0x0200 // GL_NEVER
+ };
+
+ void setComparisonFunction(ComparisonFunction function);
+ ComparisonFunction comparisonFunction() const;
+
+ enum ComparisonMode {
+ CompareRefToTexture = 0x884E, // GL_COMPARE_REF_TO_TEXTURE
+ CompareNone = 0x0000 // GL_NONE
+ };
+
+ void setComparisonMode(ComparisonMode mode);
+ ComparisonMode comparisonMode() const;
+
// Sampling Parameters
enum Filter {
Nearest = 0x2600, // GL_NEAREST
@@ -484,19 +531,6 @@ public:
void setMaximumAnisotropy(float anisotropy);
float maximumAnisotropy() const;
- enum WrapMode {
- Repeat = 0x2901, // GL_REPEAT
- MirroredRepeat = 0x8370, // GL_MIRRORED_REPEAT
- ClampToEdge = 0x812F, // GL_CLAMP_TO_EDGE
- ClampToBorder = 0x812D // GL_CLAMP_TO_BORDER
- };
-
- enum CoordinateDirection {
- DirectionS = 0x2802, // GL_TEXTURE_WRAP_S
- DirectionT = 0x2803, // GL_TEXTURE_WRAP_T
- DirectionR = 0x8072 // GL_TEXTURE_WRAP_R
- };
-
void setWrapMode(WrapMode mode);
void setWrapMode(CoordinateDirection direction, WrapMode mode);
WrapMode wrapMode(CoordinateDirection direction) const;
diff --git a/src/gui/opengl/qopengltexture_p.h b/src/gui/opengl/qopengltexture_p.h
index b584d3ec8f..bd0396bab9 100644
--- a/src/gui/opengl/qopengltexture_p.h
+++ b/src/gui/opengl/qopengltexture_p.h
@@ -87,8 +87,8 @@ public:
bool isBound() const;
bool isBound(uint unit) const;
- void allocateStorage();
- void allocateMutableStorage();
+ void allocateStorage(QOpenGLTexture::PixelFormat pixelFormat, QOpenGLTexture::PixelType pixelType);
+ void allocateMutableStorage(QOpenGLTexture::PixelFormat pixelFormat, QOpenGLTexture::PixelType pixelType);
void allocateImmutableStorage();
void setData(int mipLevel, int layer, QOpenGLTexture::CubeMapFace cubeFace,
QOpenGLTexture::PixelFormat sourceFormat, QOpenGLTexture::PixelType sourceType,
@@ -138,6 +138,8 @@ public:
QOpenGLTexture::SwizzleValue swizzleMask[4];
QOpenGLTexture::DepthStencilMode depthStencilMode;
+ QOpenGLTexture::ComparisonFunction comparisonFunction;
+ QOpenGLTexture::ComparisonMode comparisonMode;
QOpenGLTexture::Filter minFilter;
QOpenGLTexture::Filter magFilter;
diff --git a/src/gui/opengl/qopengltexturecache.cpp b/src/gui/opengl/qopengltexturecache.cpp
index 3b24e1f576..f85a26cd6e 100644
--- a/src/gui/opengl/qopengltexturecache.cpp
+++ b/src/gui/opengl/qopengltexturecache.cpp
@@ -41,6 +41,10 @@
QT_BEGIN_NAMESPACE
+#ifndef GL_RED
+#define GL_RED 0x1903
+#endif
+
#ifndef GL_RGB10_A2
#define GL_RGB10_A2 0x8059
#endif
@@ -273,6 +277,35 @@ GLuint QOpenGLTextureCache::bindTexture(QOpenGLContext *context, qint64 key, con
pixelType = GL_UNSIGNED_BYTE;
targetFormat = image.format();
break;
+ case QImage::Format_Indexed8:
+ if (options & UseRedFor8BitBindOption) {
+ externalFormat = internalFormat = GL_RED;
+ pixelType = GL_UNSIGNED_BYTE;
+ targetFormat = image.format();
+ }
+ break;
+ case QImage::Format_Alpha8:
+ if (options & UseRedFor8BitBindOption) {
+ externalFormat = internalFormat = GL_RED;
+ pixelType = GL_UNSIGNED_BYTE;
+ targetFormat = image.format();
+ } else if (context->isOpenGLES() || context->format().profile() != QSurfaceFormat::CoreProfile) {
+ externalFormat = internalFormat = GL_ALPHA;
+ pixelType = GL_UNSIGNED_BYTE;
+ targetFormat = image.format();
+ }
+ break;
+ case QImage::Format_Grayscale8:
+ if (options & UseRedFor8BitBindOption) {
+ externalFormat = internalFormat = GL_RED;
+ pixelType = GL_UNSIGNED_BYTE;
+ targetFormat = image.format();
+ } else if (context->isOpenGLES() || context->format().profile() != QSurfaceFormat::CoreProfile) {
+ externalFormat = internalFormat = GL_LUMINANCE;
+ pixelType = GL_UNSIGNED_BYTE;
+ targetFormat = image.format();
+ }
+ break;
default:
break;
}
diff --git a/src/gui/opengl/qopengltexturecache_p.h b/src/gui/opengl/qopengltexturecache_p.h
index f856054a85..7cff13911c 100644
--- a/src/gui/opengl/qopengltexturecache_p.h
+++ b/src/gui/opengl/qopengltexturecache_p.h
@@ -78,6 +78,7 @@ public:
enum BindOption {
NoBindOption = 0x0000,
PremultipliedAlphaBindOption = 0x0001,
+ UseRedFor8BitBindOption = 0x0002,
};
Q_DECLARE_FLAGS(BindOptions, BindOption)
@@ -86,8 +87,8 @@ public:
void invalidate(qint64 key);
- void invalidateResource();
- void freeResource(QOpenGLContext *ctx);
+ void invalidateResource() Q_DECL_OVERRIDE;
+ void freeResource(QOpenGLContext *ctx) Q_DECL_OVERRIDE;
private:
GLuint bindTexture(QOpenGLContext *context, qint64 key, const QImage &image, QOpenGLTextureCache::BindOptions options);
diff --git a/src/gui/opengl/qopengltextureglyphcache_p.h b/src/gui/opengl/qopengltextureglyphcache_p.h
index f61f264526..cfa73f1a83 100644
--- a/src/gui/opengl/qopengltextureglyphcache_p.h
+++ b/src/gui/opengl/qopengltextureglyphcache_p.h
@@ -74,7 +74,7 @@ public:
#endif
}
- void freeResource(QOpenGLContext *context)
+ void freeResource(QOpenGLContext *context) Q_DECL_OVERRIDE
{
QOpenGLContext *ctx = context;
#ifdef QT_GL_TEXTURE_GLYPH_CACHE_DEBUG
@@ -86,7 +86,7 @@ public:
ctx->functions()->glDeleteTextures(1, &m_texture);
}
- void invalidateResource()
+ void invalidateResource() Q_DECL_OVERRIDE
{
m_texture = 0;
m_fbo = 0;
@@ -106,12 +106,12 @@ public:
QOpenGLTextureGlyphCache(QFontEngine::GlyphFormat glyphFormat, const QTransform &matrix);
~QOpenGLTextureGlyphCache();
- virtual void createTextureData(int width, int height);
- virtual void resizeTextureData(int width, int height);
- virtual void fillTexture(const Coord &c, glyph_t glyph, QFixed subPixelPosition);
- virtual int glyphPadding() const;
- virtual int maxTextureWidth() const;
- virtual int maxTextureHeight() const;
+ virtual void createTextureData(int width, int height) Q_DECL_OVERRIDE;
+ virtual void resizeTextureData(int width, int height) Q_DECL_OVERRIDE;
+ virtual void fillTexture(const Coord &c, glyph_t glyph, QFixed subPixelPosition) Q_DECL_OVERRIDE;
+ virtual int glyphPadding() const Q_DECL_OVERRIDE;
+ virtual int maxTextureWidth() const Q_DECL_OVERRIDE;
+ virtual int maxTextureHeight() const Q_DECL_OVERRIDE;
inline GLuint texture() const {
QOpenGLTextureGlyphCache *that = const_cast<QOpenGLTextureGlyphCache *>(this);
diff --git a/src/gui/opengl/qopengltexturehelper.cpp b/src/gui/opengl/qopengltexturehelper.cpp
index 29cecf0ea8..1eeab64911 100644
--- a/src/gui/opengl/qopengltexturehelper.cpp
+++ b/src/gui/opengl/qopengltexturehelper.cpp
@@ -200,8 +200,13 @@ QOpenGLTextureHelper::QOpenGLTextureHelper(QOpenGLContext *context)
TexImage2DMultisample = 0;
// OpenGL 4.2
+#ifdef QT_OPENGL_ES_3
+ TexStorage3D = ::glTexStorage3D;
+ TexStorage2D = ::glTexStorage2D;
+#else
TexStorage3D = 0;
TexStorage2D = 0;
+#endif
TexStorage1D = 0;
// OpenGL 4.3
diff --git a/src/gui/opengl/qopenglvertexarrayobject.cpp b/src/gui/opengl/qopenglvertexarrayobject.cpp
index 5520dfed08..d8979fd98f 100644
--- a/src/gui/opengl/qopenglvertexarrayobject.cpp
+++ b/src/gui/opengl/qopenglvertexarrayobject.cpp
@@ -146,6 +146,11 @@ bool QOpenGLVertexArrayObjectPrivate::create()
qWarning("QOpenGLVertexArrayObject::create() requires a valid current OpenGL context");
return false;
}
+
+ //Fail early, if context is the same as ctx, it means we have tried to initialize for this context and failed
+ if (ctx == context)
+ return false;
+
context = ctx;
QObject::connect(context, SIGNAL(aboutToBeDestroyed()), q, SLOT(_q_contextAboutToBeDestroyed()));
diff --git a/src/gui/opengl/qtriangulator.cpp b/src/gui/opengl/qtriangulator.cpp
index f44c8adcf5..74b8f01985 100644
--- a/src/gui/opengl/qtriangulator.cpp
+++ b/src/gui/opengl/qtriangulator.cpp
@@ -441,8 +441,8 @@ T QMaxHeap<T>::pop()
// Copied from qhash.cpp
static const uchar prime_deltas[] = {
- 0, 0, 1, 3, 1, 5, 3, 3, 1, 9, 7, 5, 3, 9, 25, 3,
- 1, 21, 3, 21, 7, 15, 9, 5, 3, 29, 15, 0, 0, 0, 0, 0
+ 0, 0, 1, 3, 1, 5, 3, 3, 1, 9, 7, 5, 3, 17, 27, 3,
+ 1, 29, 3, 21, 7, 17, 15, 9, 43, 35, 15, 0, 0, 0, 0, 0
};
// Copied from qhash.cpp
@@ -457,7 +457,7 @@ static inline int primeForCount(int count)
int high = 32;
for (int i = 0; i < 5; ++i) {
int mid = (high + low) / 2;
- if (count >= 1 << mid)
+ if (uint(count) >= (1u << mid))
low = mid;
else
high = mid;
diff --git a/src/gui/painting/painting.pri b/src/gui/painting/painting.pri
index a5a395cce2..588a2f0a88 100644
--- a/src/gui/painting/painting.pri
+++ b/src/gui/painting/painting.pri
@@ -41,6 +41,7 @@ HEADERS += \
painting/qrasterdefs_p.h \
painting/qrasterizer_p.h \
painting/qregion.h \
+ painting/qrgb.h \
painting/qstroker_p.h \
painting/qtextureglyphcache_p.h \
painting/qtransform.h \
diff --git a/src/gui/painting/qblendfunctions.cpp b/src/gui/painting/qblendfunctions.cpp
index 2da5dbb356..e174d1f1cd 100644
--- a/src/gui/painting/qblendfunctions.cpp
+++ b/src/gui/painting/qblendfunctions.cpp
@@ -764,7 +764,9 @@ SrcOverScaleFunc qScaleFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGRs30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_Mono
0, // Format_Invalid,
@@ -789,7 +791,9 @@ SrcOverScaleFunc qScaleFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_MonoLSB
0, // Format_Invalid,
@@ -814,7 +818,9 @@ SrcOverScaleFunc qScaleFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_Indexed8
0, // Format_Invalid,
@@ -839,7 +845,9 @@ SrcOverScaleFunc qScaleFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_RGB32
0, // Format_Invalid,
@@ -864,7 +872,9 @@ SrcOverScaleFunc qScaleFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_ARGB32
0, // Format_Invalid,
@@ -889,7 +899,9 @@ SrcOverScaleFunc qScaleFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_ARGB32_Premultiplied
0, // Format_Invalid,
@@ -914,7 +926,9 @@ SrcOverScaleFunc qScaleFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_RGB16
0, // Format_Invalid,
@@ -939,7 +953,9 @@ SrcOverScaleFunc qScaleFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_ARGB8565_Premultiplied
0, // Format_Invalid,
@@ -964,7 +980,9 @@ SrcOverScaleFunc qScaleFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_RGB666
0, // Format_Invalid,
@@ -989,7 +1007,9 @@ SrcOverScaleFunc qScaleFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_ARGB6666_Premultiplied
0, // Format_Invalid,
@@ -1014,7 +1034,9 @@ SrcOverScaleFunc qScaleFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_RGB555
0, // Format_Invalid,
@@ -1039,7 +1061,9 @@ SrcOverScaleFunc qScaleFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_ARGB8555_Premultiplied
0, // Format_Invalid,
@@ -1064,7 +1088,9 @@ SrcOverScaleFunc qScaleFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_RGB888
0, // Format_Invalid,
@@ -1089,7 +1115,9 @@ SrcOverScaleFunc qScaleFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_RGB444
0, // Format_Invalid,
@@ -1114,7 +1142,9 @@ SrcOverScaleFunc qScaleFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_ARGB4444_Premultiplied
0, // Format_Invalid,
@@ -1139,7 +1169,9 @@ SrcOverScaleFunc qScaleFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_RGBX8888
0, // Format_Invalid,
@@ -1170,7 +1202,9 @@ SrcOverScaleFunc qScaleFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_RGBA8888
0, // Format_Invalid,
@@ -1195,7 +1229,9 @@ SrcOverScaleFunc qScaleFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_RGBA8888_Premultiplied
0, // Format_Invalid,
@@ -1226,7 +1262,9 @@ SrcOverScaleFunc qScaleFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_BGR30
0, // Format_Invalid,
@@ -1251,7 +1289,9 @@ SrcOverScaleFunc qScaleFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_A2BGR30_Premultiplied
0, // Format_Invalid,
@@ -1276,7 +1316,9 @@ SrcOverScaleFunc qScaleFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_RGB30
0, // Format_Invalid,
@@ -1301,7 +1343,9 @@ SrcOverScaleFunc qScaleFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_A2RGB30_Premultiplied
0, // Format_Invalid,
@@ -1326,8 +1370,64 @@ SrcOverScaleFunc qScaleFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
+ },
+ { // Format_Alpha8
+ 0, // Format_Invalid,
+ 0, // Format_Mono,
+ 0, // Format_MonoLSB,
+ 0, // Format_Indexed8,
+ 0, // Format_RGB32,
+ 0, // Format_ARGB32,
+ 0, // Format_ARGB32_Premultiplied,
+ 0, // Format_RGB16,
+ 0, // Format_ARGB8565_Premultiplied,
+ 0, // Format_RGB666,
+ 0, // Format_ARGB6666_Premultiplied,
+ 0, // Format_RGB555,
+ 0, // Format_ARGB8555_Premultiplied,
+ 0, // Format_RGB888,
+ 0, // Format_RGB444,
+ 0, // Format_ARGB4444_Premultiplied,
+ 0, // Format_RGBX8888,
+ 0, // Format_RGBA8888,
+ 0, // Format_RGBA8888_Premultiplied,
+ 0, // Format_BGR30,
+ 0, // Format_A2BGR30_Premultiplied,
+ 0, // Format_RGB30,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
+ { // Format_Grayscale8
+ 0, // Format_Invalid,
+ 0, // Format_Mono,
+ 0, // Format_MonoLSB,
+ 0, // Format_Indexed8,
+ 0, // Format_RGB32,
+ 0, // Format_ARGB32,
+ 0, // Format_ARGB32_Premultiplied,
+ 0, // Format_RGB16,
+ 0, // Format_ARGB8565_Premultiplied,
+ 0, // Format_RGB666,
+ 0, // Format_ARGB6666_Premultiplied,
+ 0, // Format_RGB555,
+ 0, // Format_ARGB8555_Premultiplied,
+ 0, // Format_RGB888,
+ 0, // Format_RGB444,
+ 0, // Format_ARGB4444_Premultiplied,
+ 0, // Format_RGBX8888,
+ 0, // Format_RGBA8888,
+ 0, // Format_RGBA8888_Premultiplied,
+ 0, // Format_BGR30,
+ 0, // Format_A2BGR30_Premultiplied,
+ 0, // Format_RGB30,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
+ }
};
@@ -1355,7 +1455,9 @@ SrcOverBlendFunc qBlendFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_Mono
0, // Format_Invalid,
@@ -1380,7 +1482,9 @@ SrcOverBlendFunc qBlendFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_MonoLSB
0, // Format_Invalid,
@@ -1405,7 +1509,9 @@ SrcOverBlendFunc qBlendFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_Indexed8
0, // Format_Invalid,
@@ -1430,7 +1536,9 @@ SrcOverBlendFunc qBlendFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_RGB32
0, // Format_Invalid,
@@ -1455,7 +1563,9 @@ SrcOverBlendFunc qBlendFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_ARGB32
0, // Format_Invalid,
@@ -1480,7 +1590,9 @@ SrcOverBlendFunc qBlendFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_ARGB32_Premultiplied
0, // Format_Invalid,
@@ -1505,7 +1617,9 @@ SrcOverBlendFunc qBlendFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_RGB16
0, // Format_Invalid,
@@ -1530,7 +1644,9 @@ SrcOverBlendFunc qBlendFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_ARGB8565_Premultiplied
0, // Format_Invalid,
@@ -1555,7 +1671,9 @@ SrcOverBlendFunc qBlendFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_RGB666
0, // Format_Invalid,
@@ -1580,7 +1698,9 @@ SrcOverBlendFunc qBlendFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_ARGB6666_Premultiplied
0, // Format_Invalid,
@@ -1605,7 +1725,9 @@ SrcOverBlendFunc qBlendFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_RGB555
0, // Format_Invalid,
@@ -1630,7 +1752,9 @@ SrcOverBlendFunc qBlendFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_ARGB8555_Premultiplied
0, // Format_Invalid,
@@ -1655,7 +1779,9 @@ SrcOverBlendFunc qBlendFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_RGB888
0, // Format_Invalid,
@@ -1680,7 +1806,9 @@ SrcOverBlendFunc qBlendFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_RGB444
0, // Format_Invalid,
@@ -1705,7 +1833,9 @@ SrcOverBlendFunc qBlendFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_ARGB4444_Premultiplied
0, // Format_Invalid,
@@ -1730,7 +1860,9 @@ SrcOverBlendFunc qBlendFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_RGBX8888
0, // Format_Invalid,
@@ -1761,7 +1893,9 @@ SrcOverBlendFunc qBlendFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_RGBA8888
0, // Format_Invalid,
@@ -1786,7 +1920,9 @@ SrcOverBlendFunc qBlendFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_RGBA8888_Premultiplied
0, // Format_Invalid,
@@ -1818,6 +1954,8 @@ SrcOverBlendFunc qBlendFunctions[QImage::NImageFormats][QImage::NImageFormats] =
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_BGR30
0, // Format_Invalid,
@@ -1843,6 +1981,7 @@ SrcOverBlendFunc qBlendFunctions[QImage::NImageFormats][QImage::NImageFormats] =
qt_blend_a2rgb30pm_on_a2rgb30pm, // Format_A2RGB30_Premultiplied,
qt_blend_a2bgr30pm_on_a2rgb30pm, // Format_RGB30,
qt_blend_a2bgr30pm_on_a2rgb30pm, // Format_A2RGB30_Premultiplied,
+ 0, 0,
},
{ // Format_A2BGR30_Premultiplied
0, // Format_Invalid,
@@ -1868,6 +2007,7 @@ SrcOverBlendFunc qBlendFunctions[QImage::NImageFormats][QImage::NImageFormats] =
qt_blend_a2rgb30pm_on_a2rgb30pm, // Format_A2BGR30_Premultiplied,
qt_blend_a2bgr30pm_on_a2rgb30pm, // Format_RGB30,
qt_blend_a2bgr30pm_on_a2rgb30pm, // Format_A2RGB30_Premultiplied,
+ 0, 0,
},
{ // Format_RGB30
0, // Format_Invalid,
@@ -1893,6 +2033,7 @@ SrcOverBlendFunc qBlendFunctions[QImage::NImageFormats][QImage::NImageFormats] =
qt_blend_a2bgr30pm_on_a2rgb30pm, // Format_A2BGR30_Premultiplied,
qt_blend_rgb30_on_rgb30, // Format_RGB30,
qt_blend_a2rgb30pm_on_a2rgb30pm, // Format_A2RGB30_Premultiplied,
+ 0, 0,
},
{ // Format_A2RGB30_Premultiplied
0, // Format_Invalid,
@@ -1917,8 +2058,63 @@ SrcOverBlendFunc qBlendFunctions[QImage::NImageFormats][QImage::NImageFormats] =
qt_blend_a2bgr30pm_on_a2rgb30pm, // Format_BGR30,
qt_blend_a2bgr30pm_on_a2rgb30pm, // Format_A2BGR30_Premultiplied,
qt_blend_rgb30_on_rgb30, // Format_RGB30,
- qt_blend_a2rgb30pm_on_a2rgb30pm // Format_A2RGB30_Premultiplied,
+ qt_blend_a2rgb30pm_on_a2rgb30pm, // Format_A2RGB30_Premultiplied,
+ 0, 0,
+ },
+ { // Format_Alpha8
+ 0, // Format_Invalid,
+ 0, // Format_Mono,
+ 0, // Format_MonoLSB,
+ 0, // Format_Indexed8,
+ 0, // Format_RGB32,
+ 0, // Format_ARGB32,
+ 0, // Format_ARGB32_Premultiplied,
+ 0, // Format_RGB16,
+ 0, // Format_ARGB8565_Premultiplied,
+ 0, // Format_RGB666,
+ 0, // Format_ARGB6666_Premultiplied,
+ 0, // Format_RGB555,
+ 0, // Format_ARGB8555_Premultiplied,
+ 0, // Format_RGB888,
+ 0, // Format_RGB444,
+ 0, // Format_ARGB4444_Premultiplied,
+ 0, // Format_RGBX8888,
+ 0, // Format_RGBA8888,
+ 0, // Format_RGBA8888_Premultiplied,
+ 0, // Format_BGR30,
+ 0, // Format_A2BGR30_Premultiplied,
+ 0, // Format_RGB30,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
+ { // Format_Grayscale8
+ 0, // Format_Invalid,
+ 0, // Format_Mono,
+ 0, // Format_MonoLSB,
+ 0, // Format_Indexed8,
+ 0, // Format_RGB32,
+ 0, // Format_ARGB32,
+ 0, // Format_ARGB32_Premultiplied,
+ 0, // Format_RGB16,
+ 0, // Format_ARGB8565_Premultiplied,
+ 0, // Format_RGB666,
+ 0, // Format_ARGB6666_Premultiplied,
+ 0, // Format_RGB555,
+ 0, // Format_ARGB8555_Premultiplied,
+ 0, // Format_RGB888,
+ 0, // Format_RGB444,
+ 0, // Format_ARGB4444_Premultiplied,
+ 0, // Format_RGBX8888,
+ 0, // Format_RGBA8888,
+ 0, // Format_RGBA8888_Premultiplied,
+ 0, // Format_BGR30,
+ 0, // Format_A2BGR30_Premultiplied,
+ 0, // Format_RGB30,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
+ }
};
SrcOverTransformFunc qTransformFunctions[QImage::NImageFormats][QImage::NImageFormats] = {
@@ -1945,7 +2141,9 @@ SrcOverTransformFunc qTransformFunctions[QImage::NImageFormats][QImage::NImageFo
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_Mono
0, // Format_Invalid,
@@ -1970,7 +2168,9 @@ SrcOverTransformFunc qTransformFunctions[QImage::NImageFormats][QImage::NImageFo
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_MonoLSB
0, // Format_Invalid,
@@ -1995,7 +2195,9 @@ SrcOverTransformFunc qTransformFunctions[QImage::NImageFormats][QImage::NImageFo
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_Indexed8
0, // Format_Invalid,
@@ -2020,7 +2222,9 @@ SrcOverTransformFunc qTransformFunctions[QImage::NImageFormats][QImage::NImageFo
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_RGB32
0, // Format_Invalid,
@@ -2045,7 +2249,9 @@ SrcOverTransformFunc qTransformFunctions[QImage::NImageFormats][QImage::NImageFo
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_ARGB32
0, // Format_Invalid,
@@ -2070,7 +2276,9 @@ SrcOverTransformFunc qTransformFunctions[QImage::NImageFormats][QImage::NImageFo
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_ARGB32_Premultiplied
0, // Format_Invalid,
@@ -2095,7 +2303,9 @@ SrcOverTransformFunc qTransformFunctions[QImage::NImageFormats][QImage::NImageFo
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_RGB16
0, // Format_Invalid,
@@ -2120,7 +2330,9 @@ SrcOverTransformFunc qTransformFunctions[QImage::NImageFormats][QImage::NImageFo
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_ARGB8565_Premultiplied
0, // Format_Invalid,
@@ -2145,7 +2357,9 @@ SrcOverTransformFunc qTransformFunctions[QImage::NImageFormats][QImage::NImageFo
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_RGB666
0, // Format_Invalid,
@@ -2170,7 +2384,9 @@ SrcOverTransformFunc qTransformFunctions[QImage::NImageFormats][QImage::NImageFo
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_ARGB6666_Premultiplied
0, // Format_Invalid,
@@ -2195,7 +2411,9 @@ SrcOverTransformFunc qTransformFunctions[QImage::NImageFormats][QImage::NImageFo
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_RGB555
0, // Format_Invalid,
@@ -2220,7 +2438,9 @@ SrcOverTransformFunc qTransformFunctions[QImage::NImageFormats][QImage::NImageFo
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_ARGB8555_Premultiplied
0, // Format_Invalid,
@@ -2245,7 +2465,9 @@ SrcOverTransformFunc qTransformFunctions[QImage::NImageFormats][QImage::NImageFo
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_RGB888
0, // Format_Invalid,
@@ -2270,7 +2492,9 @@ SrcOverTransformFunc qTransformFunctions[QImage::NImageFormats][QImage::NImageFo
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_RGB444
0, // Format_Invalid,
@@ -2295,7 +2519,9 @@ SrcOverTransformFunc qTransformFunctions[QImage::NImageFormats][QImage::NImageFo
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_ARGB4444_Premultiplied
0, // Format_Invalid,
@@ -2320,7 +2546,9 @@ SrcOverTransformFunc qTransformFunctions[QImage::NImageFormats][QImage::NImageFo
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_RGBX8888
0, // Format_Invalid,
@@ -2351,7 +2579,9 @@ SrcOverTransformFunc qTransformFunctions[QImage::NImageFormats][QImage::NImageFo
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_RGBA8888
0, // Format_Invalid,
@@ -2376,7 +2606,9 @@ SrcOverTransformFunc qTransformFunctions[QImage::NImageFormats][QImage::NImageFo
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_RGBA8888_Premultiplied
0, // Format_Invalid,
@@ -2407,7 +2639,9 @@ SrcOverTransformFunc qTransformFunctions[QImage::NImageFormats][QImage::NImageFo
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_BGR30
0, // Format_Invalid,
@@ -2432,7 +2666,9 @@ SrcOverTransformFunc qTransformFunctions[QImage::NImageFormats][QImage::NImageFo
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_A2BGR30_Premultiplied
0, // Format_Invalid,
@@ -2457,7 +2693,9 @@ SrcOverTransformFunc qTransformFunctions[QImage::NImageFormats][QImage::NImageFo
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_RGB30
0, // Format_Invalid,
@@ -2482,7 +2720,9 @@ SrcOverTransformFunc qTransformFunctions[QImage::NImageFormats][QImage::NImageFo
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
{ // Format_A2RGB30_Premultiplied
0, // Format_Invalid,
@@ -2507,7 +2747,63 @@ SrcOverTransformFunc qTransformFunctions[QImage::NImageFormats][QImage::NImageFo
0, // Format_BGR30,
0, // Format_A2BGR30_Premultiplied,
0, // Format_RGB30,
- 0 // Format_A2RGB30_Premultiplied,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
+ },
+ { // Format_Alpha8
+ 0, // Format_Invalid,
+ 0, // Format_Mono,
+ 0, // Format_MonoLSB,
+ 0, // Format_Indexed8,
+ 0, // Format_RGB32,
+ 0, // Format_ARGB32,
+ 0, // Format_ARGB32_Premultiplied,
+ 0, // Format_RGB16,
+ 0, // Format_ARGB8565_Premultiplied,
+ 0, // Format_RGB666,
+ 0, // Format_ARGB6666_Premultiplied,
+ 0, // Format_RGB555,
+ 0, // Format_ARGB8555_Premultiplied,
+ 0, // Format_RGB888,
+ 0, // Format_RGB444,
+ 0, // Format_ARGB4444_Premultiplied,
+ 0, // Format_RGBX8888,
+ 0, // Format_RGBA8888,
+ 0, // Format_RGBA8888_Premultiplied,
+ 0, // Format_BGR30,
+ 0, // Format_A2BGR30_Premultiplied,
+ 0, // Format_RGB30,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
+ },
+ { // Format_Grayscale8
+ 0, // Format_Invalid,
+ 0, // Format_Mono,
+ 0, // Format_MonoLSB,
+ 0, // Format_Indexed8,
+ 0, // Format_RGB32,
+ 0, // Format_ARGB32,
+ 0, // Format_ARGB32_Premultiplied,
+ 0, // Format_RGB16,
+ 0, // Format_ARGB8565_Premultiplied,
+ 0, // Format_RGB666,
+ 0, // Format_ARGB6666_Premultiplied,
+ 0, // Format_RGB555,
+ 0, // Format_ARGB8555_Premultiplied,
+ 0, // Format_RGB888,
+ 0, // Format_RGB444,
+ 0, // Format_ARGB4444_Premultiplied,
+ 0, // Format_RGBX8888,
+ 0, // Format_RGBA8888,
+ 0, // Format_RGBA8888_Premultiplied,
+ 0, // Format_BGR30,
+ 0, // Format_A2BGR30_Premultiplied,
+ 0, // Format_RGB30,
+ 0, // Format_A2RGB30_Premultiplied,
+ 0, // Format_Alpha8
+ 0, // Format_Grayscale8
},
};
diff --git a/src/gui/painting/qbrush.h b/src/gui/painting/qbrush.h
index ff652fe288..3dc2230afc 100644
--- a/src/gui/painting/qbrush.h
+++ b/src/gui/painting/qbrush.h
@@ -235,7 +235,7 @@ private:
qreal cx, cy, angle;
} conical;
} m_data;
- void *dummy;
+ void *dummy; // ### Qt 6: replace with actual content (CoordinateMode, InterpolationMode, ...)
};
inline void QGradient::setSpread(Spread aspread)
diff --git a/src/gui/painting/qcolor.h b/src/gui/painting/qcolor.h
index b68504c865..926d05707e 100644
--- a/src/gui/painting/qcolor.h
+++ b/src/gui/painting/qcolor.h
@@ -65,7 +65,7 @@ public:
QColor(QRgb rgb);
QColor(const QString& name);
QColor(const char *name);
- QColor(const QColor &color);
+ QColor(const QColor &color); // ### Qt 6: remove, the trivial one is fine.
QColor(Spec spec);
bool isValid() const;
diff --git a/src/gui/painting/qdrawhelper.cpp b/src/gui/painting/qdrawhelper.cpp
index 9c1b2e707d..de4be7177b 100644
--- a/src/gui/painting/qdrawhelper.cpp
+++ b/src/gui/painting/qdrawhelper.cpp
@@ -527,6 +527,22 @@ static const uint *QT_FASTCALL convertRGBA8888ToARGB32PM(uint *buffer, const uin
return buffer;
}
+static const uint *QT_FASTCALL convertAlpha8ToRGB32(uint *buffer, const uint *src, int count,
+ const QPixelLayout *, const QRgb *)
+{
+ for (int i = 0; i < count; ++i)
+ buffer[i] = qRgba(0, 0, 0, src[i]);
+ return buffer;
+}
+
+static const uint *QT_FASTCALL convertGrayscale8ToRGB32(uint *buffer, const uint *src, int count,
+ const QPixelLayout *, const QRgb *)
+{
+ for (int i = 0; i < count; ++i)
+ buffer[i] = qRgb(src[i], src[i], src[i]);
+ return buffer;
+}
+
static const uint *QT_FASTCALL convertARGB32FromARGB32PM(uint *buffer, const uint *src, int count,
const QPixelLayout *, const QRgb *)
{
@@ -603,6 +619,30 @@ static const uint *QT_FASTCALL convertRGB30FromARGB32PM(uint *buffer, const uint
return buffer;
}
+static const uint *QT_FASTCALL convertAlpha8FromARGB32PM(uint *buffer, const uint *src, int count,
+ const QPixelLayout *, const QRgb *)
+{
+ for (int i = 0; i < count; ++i)
+ buffer[i] = qAlpha(src[i]);
+ return buffer;
+}
+
+static const uint *QT_FASTCALL convertGrayscale8FromRGB32(uint *buffer, const uint *src, int count,
+ const QPixelLayout *, const QRgb *)
+{
+ for (int i = 0; i < count; ++i)
+ buffer[i] = qGray(src[i]);
+ return buffer;
+}
+
+static const uint *QT_FASTCALL convertGrayscale8FromARGB32PM(uint *buffer, const uint *src, int count,
+ const QPixelLayout *, const QRgb *)
+{
+ for (int i = 0; i < count; ++i)
+ buffer[i] = qGray(qUnpremultiply(src[i]));
+ return buffer;
+}
+
template <QPixelLayout::BPP bpp> static
uint QT_FASTCALL fetchPixel(const uchar *src, int index);
@@ -756,6 +796,8 @@ QPixelLayout qPixelLayouts[QImage::NImageFormats] = {
{ 10, 20, 10, 10, 10, 0, 2, 30, true, QPixelLayout::BPP32, convertA2RGB30PMToARGB32PM<PixelOrderBGR>, convertA2RGB30PMFromARGB32PM<PixelOrderBGR>, 0 }, // Format_A2BGR30_Premultiplied
{ 10, 0, 10, 10, 10, 20, 0, 30, false, QPixelLayout::BPP32, convertA2RGB30PMToARGB32PM<PixelOrderRGB>, convertRGB30FromARGB32PM<PixelOrderRGB>, convertRGB30FromRGB32<PixelOrderRGB> }, // Format_RGB30
{ 10, 0, 10, 10, 10, 20, 2, 30, true, QPixelLayout::BPP32, convertA2RGB30PMToARGB32PM<PixelOrderRGB>, convertA2RGB30PMFromARGB32PM<PixelOrderRGB>, 0 }, // Format_A2RGB30_Premultiplied
+ { 0, 0, 0, 0, 0, 0, 8, 0, false, QPixelLayout::BPP8, convertAlpha8ToRGB32, convertAlpha8FromARGB32PM, 0 }, // Format_Alpha8
+ { 0, 0, 0, 0, 0, 0, 0, 0, false, QPixelLayout::BPP8, convertGrayscale8ToRGB32, convertGrayscale8FromARGB32PM, convertGrayscale8FromRGB32 } // Format_Grayscale8
};
FetchPixelsFunc qFetchPixels[QPixelLayout::BPPCount] = {
@@ -867,6 +909,8 @@ static DestFetchProc destFetchProc[QImage::NImageFormats] =
destFetch, // Format_A2BGR30_Premultiplied
destFetch, // Format_RGB30
destFetch, // Format_A2RGB30_Premultiplied
+ destFetch, // Format_Alpha8
+ destFetch, // Format_Grayscale8
};
/*
@@ -1011,6 +1055,8 @@ static DestStoreProc destStoreProc[QImage::NImageFormats] =
destStore, // Format_A2BGR30_Premultiplied
destStore, // Format_RGB30
destStore, // Format_A2RGB30_Premultiplied
+ destStore, // Format_Alpha8
+ destStore, // Format_Grayscale8
};
/*
@@ -2266,6 +2312,8 @@ static SourceFetchProc sourceFetch[NBlendTypes][QImage::NImageFormats] = {
fetchUntransformed, // Format_A2BGR30_Premultiplied
fetchUntransformed, // Format_RGB30
fetchUntransformed, // Format_A2RGB30_Premultiplied
+ fetchUntransformed, // Alpha8
+ fetchUntransformed, // Grayscale8
},
// Tiled
{
@@ -2291,7 +2339,9 @@ static SourceFetchProc sourceFetch[NBlendTypes][QImage::NImageFormats] = {
fetchUntransformed, // BGR30
fetchUntransformed, // A2BGR30_Premultiplied
fetchUntransformed, // RGB30
- fetchUntransformed // A2RGB30_Premultiplied
+ fetchUntransformed, // A2RGB30_Premultiplied
+ fetchUntransformed, // Alpha8
+ fetchUntransformed, // Grayscale8
},
// Transformed
{
@@ -2318,6 +2368,8 @@ static SourceFetchProc sourceFetch[NBlendTypes][QImage::NImageFormats] = {
fetchTransformed<BlendTransformed>, // A2BGR30_Premultiplied
fetchTransformed<BlendTransformed>, // RGB30
fetchTransformed<BlendTransformed>, // A2RGB30_Premultiplied
+ fetchTransformed<BlendTransformed>, // Alpah8
+ fetchTransformed<BlendTransformed>, // Grayscale8
},
{
0, // TransformedTiled
@@ -2343,6 +2395,8 @@ static SourceFetchProc sourceFetch[NBlendTypes][QImage::NImageFormats] = {
fetchTransformed<BlendTransformedTiled>, // A2BGR30_Premultiplied
fetchTransformed<BlendTransformedTiled>, // RGB30
fetchTransformed<BlendTransformedTiled>, // A2RGB30_Premultiplied
+ fetchTransformed<BlendTransformedTiled>, // Alpha8
+ fetchTransformed<BlendTransformedTiled>, // Grayscale8
},
{
0, // Bilinear
@@ -2368,6 +2422,8 @@ static SourceFetchProc sourceFetch[NBlendTypes][QImage::NImageFormats] = {
fetchTransformedBilinear<BlendTransformedBilinear>, // A2BGR30_Premultiplied
fetchTransformedBilinear<BlendTransformedBilinear>, // RGB30
fetchTransformedBilinear<BlendTransformedBilinear>, // A2RGB30_Premultiplied
+ fetchTransformedBilinear<BlendTransformedBilinear>, // Alpha8
+ fetchTransformedBilinear<BlendTransformedBilinear>, // Grayscale8
},
{
0, // BilinearTiled
@@ -2392,7 +2448,9 @@ static SourceFetchProc sourceFetch[NBlendTypes][QImage::NImageFormats] = {
fetchTransformedBilinear<BlendTransformedBilinearTiled>, // BGR30
fetchTransformedBilinear<BlendTransformedBilinearTiled>, // A2BGR30_Premultiplied
fetchTransformedBilinear<BlendTransformedBilinearTiled>, // RGB30
- fetchTransformedBilinear<BlendTransformedBilinearTiled> // A2RGB30_Premultiplied
+ fetchTransformedBilinear<BlendTransformedBilinearTiled>, // A2RGB30_Premultiplied
+ fetchTransformedBilinear<BlendTransformedBilinearTiled>, // Alpha8
+ fetchTransformedBilinear<BlendTransformedBilinearTiled>, // Grayscale8
},
};
@@ -2590,32 +2648,10 @@ static const uint * QT_FASTCALL qt_fetch_conical_gradient(uint *buffer, const Op
return b;
}
-#if defined(Q_CC_RVCT)
-// Force ARM code generation for comp_func_* -methods
-# pragma push
-# pragma arm
-# if defined(Q_PROCESSOR_ARM_V6)
-static __forceinline void preload(const uint *start)
-{
- asm( "pld [start]" );
-}
-static const uint L2CacheLineLength = 32;
-static const uint L2CacheLineLengthInInts = L2CacheLineLength/sizeof(uint);
-# define PRELOAD_INIT(x) preload(x);
-# define PRELOAD_INIT2(x,y) PRELOAD_INIT(x) PRELOAD_INIT(y)
-# define PRELOAD_COND(x) if (((uint)&x[i])%L2CacheLineLength == 0) preload(&x[i] + L2CacheLineLengthInInts);
-// Two consecutive preloads stall, so space them out a bit by using different modulus.
-# define PRELOAD_COND2(x,y) if (((uint)&x[i])%L2CacheLineLength == 0) preload(&x[i] + L2CacheLineLengthInInts); \
- if (((uint)&y[i])%L2CacheLineLength == 16) preload(&y[i] + L2CacheLineLengthInInts);
-# endif // Q_PROCESSOR_ARM_V6
-#endif // Q_CC_RVCT
-
-#if !defined(Q_CC_RVCT) || !defined(Q_PROCESSOR_ARM_V6)
# define PRELOAD_INIT(x)
# define PRELOAD_INIT2(x,y)
# define PRELOAD_COND(x)
# define PRELOAD_COND2(x,y)
-#endif
/* The constant alpha factor describes an alpha factor that gets applied
to the result of the composition operation combining it with the destination.
@@ -3770,11 +3806,7 @@ static inline int soft_light_op(int dst, int src, int da, int sa)
else if (4 * dst <= da)
return (dst * sa * 255 + da * (src2 - sa) * ((((16 * dst_np - 12 * 255) * dst_np + 3 * 65025) * dst_np) / 65025) + temp) / 65025;
else {
-# ifdef Q_CC_RVCT // needed to avoid compiler crash in RVCT 2.2
- return (dst * sa * 255 + da * (src2 - sa) * (qIntSqrtInt(dst_np * 255) - dst_np) + temp) / 65025;
-# else
return (dst * sa * 255 + da * (src2 - sa) * (int(qSqrt(qreal(dst_np * 255))) - dst_np) + temp) / 65025;
-# endif
}
}
@@ -3982,11 +4014,6 @@ void QT_FASTCALL comp_func_Exclusion(uint *Q_DECL_RESTRICT dest, const uint *Q_D
comp_func_Exclusion_impl(dest, src, length, QPartialCoverage(const_alpha));
}
-#if defined(Q_CC_RVCT)
-// Restore pragma state from previous #pragma arm
-# pragma pop
-#endif
-
void QT_FASTCALL rasterop_solid_SourceOrDestination(uint *dest,
int length,
uint color,
@@ -5815,6 +5842,8 @@ static const ProcessSpans processTextureSpans[NBlendTypes][QImage::NImageFormats
blend_untransformed_generic,
blend_untransformed_generic,
blend_untransformed_generic,
+ blend_untransformed_generic,
+ blend_untransformed_generic,
},
// Tiled
{
@@ -5841,6 +5870,8 @@ static const ProcessSpans processTextureSpans[NBlendTypes][QImage::NImageFormats
blend_tiled_generic,
blend_tiled_generic,
blend_tiled_generic,
+ blend_tiled_generic,
+ blend_tiled_generic,
},
// Transformed
{
@@ -5867,6 +5898,8 @@ static const ProcessSpans processTextureSpans[NBlendTypes][QImage::NImageFormats
blend_src_generic,
blend_src_generic,
blend_src_generic,
+ blend_src_generic,
+ blend_src_generic,
},
// TransformedTiled
{
@@ -5892,6 +5925,7 @@ static const ProcessSpans processTextureSpans[NBlendTypes][QImage::NImageFormats
blend_src_generic,
blend_src_generic,
blend_src_generic,
+ blend_src_generic,
blend_src_generic
},
// Bilinear
@@ -5919,6 +5953,8 @@ static const ProcessSpans processTextureSpans[NBlendTypes][QImage::NImageFormats
blend_src_generic,
blend_src_generic,
blend_src_generic,
+ blend_src_generic,
+ blend_src_generic,
},
// BilinearTiled
{
@@ -5945,6 +5981,8 @@ static const ProcessSpans processTextureSpans[NBlendTypes][QImage::NImageFormats
blend_src_generic, // A2BGR30_Premultiplied
blend_src_generic, // RGB30
blend_src_generic, // A2RGB30_Premultiplied
+ blend_src_generic, // Alpha8
+ blend_src_generic, // Grayscale8
}
};
@@ -6468,6 +6506,22 @@ static void qt_rectfill_nonpremul_rgba(QRasterBuffer *rasterBuffer,
ARGB2RGBA(qUnpremultiply(color)), x, y, width, height, rasterBuffer->bytesPerLine());
}
+static void qt_rectfill_alpha(QRasterBuffer *rasterBuffer,
+ int x, int y, int width, int height,
+ quint32 color)
+{
+ qt_rectfill<quint8>(reinterpret_cast<quint8 *>(rasterBuffer->buffer()),
+ qAlpha(color), x, y, width, height, rasterBuffer->bytesPerLine());
+}
+
+static void qt_rectfill_gray(QRasterBuffer *rasterBuffer,
+ int x, int y, int width, int height,
+ quint32 color)
+{
+ qt_rectfill<quint8>(reinterpret_cast<quint8 *>(rasterBuffer->buffer()),
+ qGray(color), x, y, width, height, rasterBuffer->bytesPerLine());
+}
+
// Map table for destination image format. Contains function pointers
// for blends of various types unto the destination
@@ -6652,6 +6706,20 @@ DrawHelper qDrawHelper[QImage::NImageFormats] =
0,
0
},
+ // Format_Alpha8
+ {
+ blend_color_generic,
+ blend_src_generic,
+ 0, 0, 0,
+ qt_rectfill_alpha
+ },
+ // Format_Grayscale8
+ {
+ blend_color_generic,
+ blend_src_generic,
+ 0, 0, 0,
+ qt_rectfill_gray
+ },
};
#if defined(Q_CC_MSVC) && !defined(_MIPS_)
diff --git a/src/gui/painting/qdrawhelper_p.h b/src/gui/painting/qdrawhelper_p.h
index 695fbbdbbd..a2c8f9e7a1 100644
--- a/src/gui/painting/qdrawhelper_p.h
+++ b/src/gui/painting/qdrawhelper_p.h
@@ -59,12 +59,7 @@
QT_BEGIN_NAMESPACE
-#if defined(Q_CC_RVCT)
-// RVCT doesn't like static template functions
-# define Q_STATIC_TEMPLATE_FUNCTION
-# define Q_ALWAYS_INLINE __forceinline
-# define Q_DECL_RESTRICT
-#elif defined(Q_CC_GNU)
+#if defined(Q_CC_GNU)
# define Q_STATIC_TEMPLATE_FUNCTION static
# define Q_ALWAYS_INLINE inline __attribute__((always_inline))
# define Q_DECL_RESTRICT __restrict__
@@ -555,10 +550,6 @@ public:
}
};
-#if defined(Q_CC_RVCT)
-# pragma push
-# pragma arm
-#endif
static Q_ALWAYS_INLINE uint INTERPOLATE_PIXEL_255(uint x, uint a, uint y, uint b) {
uint t = (x & 0xff00ff) * a + (y & 0xff00ff) * b;
t = (t + ((t >> 8) & 0xff00ff) + 0x800080) >> 8;
@@ -570,9 +561,6 @@ static Q_ALWAYS_INLINE uint INTERPOLATE_PIXEL_255(uint x, uint a, uint y, uint b
x |= t;
return x;
}
-#if defined(Q_CC_RVCT)
-# pragma pop
-#endif
#if QT_POINTER_SIZE == 8 // 64-bit versions
@@ -604,10 +592,6 @@ static Q_ALWAYS_INLINE uint INTERPOLATE_PIXEL_256(uint x, uint a, uint y, uint b
return x;
}
-#if defined(Q_CC_RVCT)
-# pragma push
-# pragma arm
-#endif
static Q_ALWAYS_INLINE uint BYTE_MUL(uint x, uint a) {
uint t = (x & 0xff00ff) * a;
t = (t + ((t >> 8) & 0xff00ff) + 0x800080) >> 8;
@@ -619,10 +603,6 @@ static Q_ALWAYS_INLINE uint BYTE_MUL(uint x, uint a) {
x |= t;
return x;
}
-#if defined(Q_CC_RVCT)
-# pragma pop
-#endif
-
#endif
@@ -664,14 +644,7 @@ static Q_ALWAYS_INLINE uint BYTE_MUL_RGB16_32(uint x, uint a) {
return t;
}
-#if defined(Q_CC_RVCT)
-# pragma push
-# pragma arm
-#endif
static Q_ALWAYS_INLINE int qt_div_255(int x) { return (x + (x>>8) + 0x80) >> 8; }
-#if defined(Q_CC_RVCT)
-# pragma pop
-#endif
static Q_ALWAYS_INLINE uint BYTE_MUL_RGB30(uint x, uint a) {
uint xa = x >> 30;
diff --git a/src/gui/painting/qdrawhelper_sse2.cpp b/src/gui/painting/qdrawhelper_sse2.cpp
index 77889b3c35..95552afbee 100644
--- a/src/gui/painting/qdrawhelper_sse2.cpp
+++ b/src/gui/painting/qdrawhelper_sse2.cpp
@@ -484,9 +484,7 @@ void qt_bitmapblit16_sse2(QRasterBuffer *rasterBuffer, int x, int y,
const int destStride = rasterBuffer->bytesPerLine() / sizeof(quint16);
const __m128i c128 = _mm_set1_epi16(c);
-#if defined(Q_CC_MSVC)
-# pragma warning(disable: 4309) // truncation of constant value
-#endif
+QT_WARNING_DISABLE_MSVC(4309) // truncation of constant value
const __m128i maskmask = _mm_set_epi16(0x0101, 0x0202, 0x0404, 0x0808,
0x1010, 0x2020, 0x4040, 0x8080);
const __m128i maskadd = _mm_set_epi16(0x7f7f, 0x7e7e, 0x7c7c, 0x7878,
diff --git a/src/gui/painting/qdrawhelper_sse_p.h b/src/gui/painting/qdrawhelper_sse_p.h
index a1f878b5c0..de1a1d86be 100644
--- a/src/gui/painting/qdrawhelper_sse_p.h
+++ b/src/gui/painting/qdrawhelper_sse_p.h
@@ -124,9 +124,7 @@ inline void qt_bitmapblit16_sse_template(QRasterBuffer *rasterBuffer,
const int destStride = rasterBuffer->bytesPerLine() / sizeof(quint16);
const __m64 c64 = _mm_set1_pi16(c);
-#ifdef Q_CC_MSVC
-# pragma warning(disable: 4309) // truncation of constant value
-#endif
+QT_WARNING_DISABLE_MSVC(4309) // truncation of constant value
const __m64 maskmask1 = _mm_set_pi16(0x1010, 0x2020, 0x4040, 0x8080);
const __m64 maskadd1 = _mm_set_pi16(0x7070, 0x6060, 0x4040, 0x0000);
diff --git a/src/gui/painting/qgrayraster.c b/src/gui/painting/qgrayraster.c
index 614d95ace1..52b2371c3f 100644
--- a/src/gui/painting/qgrayraster.c
+++ b/src/gui/painting/qgrayraster.c
@@ -480,10 +480,10 @@
ras.area = 0;
ras.cover = 0;
+ ras.ex = ex;
+ ras.ey = ey;
}
- ras.ex = ex;
- ras.ey = ey;
ras.invalid = ( (unsigned)ey >= (unsigned)ras.count_ey ||
ex >= ras.count_ex );
}
@@ -670,38 +670,64 @@
}
/* vertical line - avoid calling gray_render_scanline */
- incr = 1;
-
if ( dx == 0 )
{
TCoord ex = TRUNC( ras.x );
TCoord two_fx = (TCoord)( ( ras.x - SUBPIXELS( ex ) ) << 1 );
- TPos area;
+ TPos area, max_ey1;
first = ONE_PIXEL;
if ( dy < 0 )
- {
first = 0;
- incr = -1;
- }
delta = (int)( first - fy1 );
ras.area += (TArea)two_fx * delta;
ras.cover += delta;
- ey1 += incr;
-
- gray_set_cell( &ras, ex, ey1 );
delta = (int)( first + first - ONE_PIXEL );
area = (TArea)two_fx * delta;
- while ( ey1 != ey2 )
- {
- ras.area += area;
- ras.cover += delta;
- ey1 += incr;
+ max_ey1 = ras.count_ey + ras.min_ey;
+ if (dy < 0) {
+ if (ey1 > max_ey1) {
+ ey1 = (max_ey1 > ey2) ? max_ey1 : ey2;
+ gray_set_cell( &ras, ex, ey1 );
+ } else {
+ ey1--;
+ gray_set_cell( &ras, ex, ey1 );
+ }
+ while ( ey1 > ey2 && ey1 >= ras.min_ey)
+ {
+ ras.area += area;
+ ras.cover += delta;
+ ey1--;
+
+ gray_set_cell( &ras, ex, ey1 );
+ }
+ if (ey1 != ey2) {
+ ey1 = ey2;
+ gray_set_cell( &ras, ex, ey1 );
+ }
+ } else {
+ if (ey1 < ras.min_ey) {
+ ey1 = (ras.min_ey < ey2) ? ras.min_ey : ey2;
+ gray_set_cell( &ras, ex, ey1 );
+ } else {
+ ey1++;
+ gray_set_cell( &ras, ex, ey1 );
+ }
+ while ( ey1 < ey2 && ey1 < max_ey1)
+ {
+ ras.area += area;
+ ras.cover += delta;
+ ey1++;
- gray_set_cell( &ras, ex, ey1 );
+ gray_set_cell( &ras, ex, ey1 );
+ }
+ if (ey1 != ey2) {
+ ey1 = ey2;
+ gray_set_cell( &ras, ex, ey1 );
+ }
}
delta = (int)( fy2 - ONE_PIXEL + first );
diff --git a/src/gui/painting/qmemrotate.cpp b/src/gui/painting/qmemrotate.cpp
index b55f3b0dcc..442eda14ad 100644
--- a/src/gui/painting/qmemrotate.cpp
+++ b/src/gui/painting/qmemrotate.cpp
@@ -473,6 +473,21 @@ QT_IMPL_MEMROTATE(quint16)
QT_IMPL_MEMROTATE(quint24)
QT_IMPL_MEMROTATE(quint8)
+void qt_memrotate90_8(const uchar *srcPixels, int w, int h, int sbpl, uchar *destPixels, int dbpl)
+{
+ qt_memrotate90(srcPixels, w, h, sbpl, destPixels, dbpl);
+}
+
+void qt_memrotate180_8(const uchar *srcPixels, int w, int h, int sbpl, uchar *destPixels, int dbpl)
+{
+ qt_memrotate180(srcPixels, w, h, sbpl, destPixels, dbpl);
+}
+
+void qt_memrotate270_8(const uchar *srcPixels, int w, int h, int sbpl, uchar *destPixels, int dbpl)
+{
+ qt_memrotate270(srcPixels, w, h, sbpl, destPixels, dbpl);
+}
+
void qt_memrotate90_16(const uchar *srcPixels, int w, int h, int sbpl, uchar *destPixels, int dbpl)
{
qt_memrotate90((const ushort *)srcPixels, w, h, sbpl, (ushort *)destPixels, dbpl);
@@ -529,6 +544,8 @@ MemRotateFunc qMemRotateFunctions[QImage::NImageFormats][3] =
{ qt_memrotate90_32, qt_memrotate180_32, qt_memrotate270_32 }, // Format_A2BGR30_Premultiplied,
{ qt_memrotate90_32, qt_memrotate180_32, qt_memrotate270_32 }, // Format_RGB30,
{ qt_memrotate90_32, qt_memrotate180_32, qt_memrotate270_32 }, // Format_A2RGB30_Premultiplied,
+ { qt_memrotate90_8, qt_memrotate180_8, qt_memrotate270_8 }, // Format_Alpha8,
+ { qt_memrotate90_8, qt_memrotate180_8, qt_memrotate270_8 }, // Format_Grayscale8,
};
QT_END_NAMESPACE
diff --git a/src/gui/painting/qpaintbuffer.cpp b/src/gui/painting/qpaintbuffer.cpp
index be147ec842..56b3e37762 100644
--- a/src/gui/painting/qpaintbuffer.cpp
+++ b/src/gui/painting/qpaintbuffer.cpp
@@ -545,7 +545,7 @@ class QPaintBufferEnginePrivate : public QPaintEngineExPrivate
{
Q_DECLARE_PUBLIC(QPaintBufferEngine)
public:
- void systemStateChanged() {
+ void systemStateChanged() Q_DECL_OVERRIDE {
Q_Q(QPaintBufferEngine);
q->buffer->addCommand(QPaintBufferPrivate::Cmd_SystemStateChanged, QVariant(systemClip));
}
@@ -1327,8 +1327,8 @@ public:
QFakeDevice() { dpi_x = qt_defaultDpiX(); dpi_y = qt_defaultDpiY(); }
void setDpiX(int dpi) { dpi_x = dpi; }
void setDpiY(int dpi) { dpi_y = dpi; }
- QPaintEngine *paintEngine() const { return 0; }
- int metric(PaintDeviceMetric m) const
+ QPaintEngine *paintEngine() const Q_DECL_OVERRIDE { return 0; }
+ int metric(PaintDeviceMetric m) const Q_DECL_OVERRIDE
{
switch(m) {
case PdmPhysicalDpiX:
diff --git a/src/gui/painting/qpaintengineex_p.h b/src/gui/painting/qpaintengineex_p.h
index 82fcd9765a..8a273a6b86 100644
--- a/src/gui/painting/qpaintengineex_p.h
+++ b/src/gui/painting/qpaintengineex_p.h
@@ -98,22 +98,22 @@ public:
virtual void drawRoundedRect(const QRectF &rect, qreal xrad, qreal yrad, Qt::SizeMode mode);
- virtual void drawRects(const QRect *rects, int rectCount);
- virtual void drawRects(const QRectF *rects, int rectCount);
+ virtual void drawRects(const QRect *rects, int rectCount) Q_DECL_OVERRIDE;
+ virtual void drawRects(const QRectF *rects, int rectCount) Q_DECL_OVERRIDE;
- virtual void drawLines(const QLine *lines, int lineCount);
- virtual void drawLines(const QLineF *lines, int lineCount);
+ virtual void drawLines(const QLine *lines, int lineCount) Q_DECL_OVERRIDE;
+ virtual void drawLines(const QLineF *lines, int lineCount) Q_DECL_OVERRIDE;
- virtual void drawEllipse(const QRectF &r);
- virtual void drawEllipse(const QRect &r);
+ virtual void drawEllipse(const QRectF &r) Q_DECL_OVERRIDE;
+ virtual void drawEllipse(const QRect &r) Q_DECL_OVERRIDE;
- virtual void drawPath(const QPainterPath &path);
+ virtual void drawPath(const QPainterPath &path) Q_DECL_OVERRIDE;
- virtual void drawPoints(const QPointF *points, int pointCount);
- virtual void drawPoints(const QPoint *points, int pointCount);
+ virtual void drawPoints(const QPointF *points, int pointCount) Q_DECL_OVERRIDE;
+ virtual void drawPoints(const QPoint *points, int pointCount) Q_DECL_OVERRIDE;
- virtual void drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode);
- virtual void drawPolygon(const QPoint *points, int pointCount, PolygonDrawMode mode);
+ virtual void drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode) Q_DECL_OVERRIDE;
+ virtual void drawPolygon(const QPoint *points, int pointCount, PolygonDrawMode mode) Q_DECL_OVERRIDE;
virtual void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) = 0;
virtual void drawPixmap(const QPointF &pos, const QPixmap &pm);
@@ -122,12 +122,12 @@ public:
Qt::ImageConversionFlags flags = Qt::AutoColor) = 0;
virtual void drawImage(const QPointF &pos, const QImage &image);
- virtual void drawTiledPixmap(const QRectF &r, const QPixmap &pixmap, const QPointF &s);
+ virtual void drawTiledPixmap(const QRectF &r, const QPixmap &pixmap, const QPointF &s) Q_DECL_OVERRIDE;
virtual void drawPixmapFragments(const QPainter::PixmapFragment *fragments, int fragmentCount, const QPixmap &pixmap,
QFlags<QPainter::PixmapFragmentHint> hints);
- virtual void updateState(const QPaintEngineState &state);
+ virtual void updateState(const QPaintEngineState &state) Q_DECL_OVERRIDE;
virtual void drawStaticTextItem(QStaticTextItem *);
diff --git a/src/gui/painting/qpainter.cpp b/src/gui/painting/qpainter.cpp
index d40a2b9456..b99a32df27 100644
--- a/src/gui/painting/qpainter.cpp
+++ b/src/gui/painting/qpainter.cpp
@@ -200,11 +200,8 @@ void QPainterPrivate::checkEmulation()
QPainterPrivate::~QPainterPrivate()
{
delete emulationEngine;
- for (int i=0; i<states.size(); ++i)
- delete states.at(i);
-
- if (dummyState)
- delete dummyState;
+ qDeleteAll(states);
+ delete dummyState;
}
@@ -456,7 +453,7 @@ void QPainterPrivate::draw_helper(const QPainterPath &originalPath, DrawOperatio
p.drawPath(originalPath);
#ifndef QT_NO_DEBUG
- static bool do_fallback_overlay = qgetenv("QT_PAINT_FALLBACK_OVERLAY").size() > 0;
+ static bool do_fallback_overlay = !qEnvironmentVariableIsEmpty("QT_PAINT_FALLBACK_OVERLAY");
if (do_fallback_overlay) {
QImage block(8, 8, QImage::Format_ARGB32_Premultiplied);
QPainter pt(&block);
@@ -3432,8 +3429,7 @@ void QPainter::drawPath(const QPainterPath &path)
\fn void QPainter::drawLine(int x1, int y1, int x2, int y2)
\overload
- Draws a line from (\a x1, \a y1) to (\a x2, \a y2) and sets the
- current pen position to (\a x2, \a y2).
+ Draws a line from (\a x1, \a y1) to (\a x2, \a y2).
*/
/*!
@@ -7027,7 +7023,7 @@ void QPainter::setRenderHint(RenderHint hint, bool on)
#endif
#ifndef QT_NO_DEBUG
- static const bool antialiasingDisabled = qgetenv("QT_NO_ANTIALIASING").toInt();
+ static const bool antialiasingDisabled = qEnvironmentVariableIntValue("QT_NO_ANTIALIASING");
if (hint == QPainter::Antialiasing && antialiasingDisabled)
return;
#endif
diff --git a/src/gui/painting/qpdf.cpp b/src/gui/painting/qpdf.cpp
index 473231b142..2efaec41ef 100644
--- a/src/gui/painting/qpdf.cpp
+++ b/src/gui/painting/qpdf.cpp
@@ -2317,6 +2317,14 @@ int QPdfEnginePrivate::addBrushPattern(const QTransform &m, bool *specifyColor,
return patternObj;
}
+static inline bool is_monochrome(const QVector<QRgb> &colorTable)
+{
+ return colorTable.size() == 2
+ && colorTable.at(0) == QColor(Qt::black).rgba()
+ && colorTable.at(1) == QColor(Qt::white).rgba()
+ ;
+}
+
/*!
* Adds an image to the pdf and return the pdf-object id. Returns -1 if adding the image failed.
*/
@@ -2331,10 +2339,7 @@ int QPdfEnginePrivate::addImage(const QImage &img, bool *bitmap, qint64 serial_n
QImage image = img;
QImage::Format format = image.format();
- if (image.depth() == 1 && *bitmap && img.colorTable().size() == 2
- && img.colorTable().at(0) == QColor(Qt::black).rgba()
- && img.colorTable().at(1) == QColor(Qt::white).rgba())
- {
+ if (image.depth() == 1 && *bitmap && is_monochrome(img.colorTable())) {
if (format == QImage::Format_MonoLSB)
image = image.convertToFormat(QImage::Format_Mono);
format = QImage::Format_Mono;
diff --git a/src/gui/painting/qpdf_p.h b/src/gui/painting/qpdf_p.h
index 0fffa608ac..5547a28bcd 100644
--- a/src/gui/painting/qpdf_p.h
+++ b/src/gui/painting/qpdf_p.h
@@ -177,26 +177,26 @@ public:
int resolution() const;
// reimplementations QPaintEngine
- bool begin(QPaintDevice *pdev);
- bool end();
+ bool begin(QPaintDevice *pdev) Q_DECL_OVERRIDE;
+ bool end() Q_DECL_OVERRIDE;
- void drawPoints(const QPointF *points, int pointCount);
- void drawLines(const QLineF *lines, int lineCount);
- void drawRects(const QRectF *rects, int rectCount);
- void drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode);
- void drawPath (const QPainterPath & path);
+ void drawPoints(const QPointF *points, int pointCount) Q_DECL_OVERRIDE;
+ void drawLines(const QLineF *lines, int lineCount) Q_DECL_OVERRIDE;
+ void drawRects(const QRectF *rects, int rectCount) Q_DECL_OVERRIDE;
+ void drawPolygon(const QPointF *points, int pointCount, PolygonDrawMode mode) Q_DECL_OVERRIDE;
+ void drawPath (const QPainterPath & path) Q_DECL_OVERRIDE;
- void drawTextItem(const QPointF &p, const QTextItem &textItem);
+ void drawTextItem(const QPointF &p, const QTextItem &textItem) Q_DECL_OVERRIDE;
- void drawPixmap (const QRectF & rectangle, const QPixmap & pixmap, const QRectF & sr);
+ void drawPixmap (const QRectF & rectangle, const QPixmap & pixmap, const QRectF & sr) Q_DECL_OVERRIDE;
void drawImage(const QRectF &r, const QImage &pm, const QRectF &sr,
- Qt::ImageConversionFlags flags = Qt::AutoColor);
- void drawTiledPixmap (const QRectF & rectangle, const QPixmap & pixmap, const QPointF & point);
+ Qt::ImageConversionFlags flags = Qt::AutoColor) Q_DECL_OVERRIDE;
+ void drawTiledPixmap (const QRectF & rectangle, const QPixmap & pixmap, const QPointF & point) Q_DECL_OVERRIDE;
- void updateState(const QPaintEngineState &state);
+ void updateState(const QPaintEngineState &state) Q_DECL_OVERRIDE;
int metric(QPaintDevice::PaintDeviceMetric metricType) const;
- Type type() const;
+ Type type() const Q_DECL_OVERRIDE;
// end reimplementations QPaintEngine
// Printer stuff...
diff --git a/src/gui/painting/qpen.cpp b/src/gui/painting/qpen.cpp
index c3bc7964a3..5679c600ba 100644
--- a/src/gui/painting/qpen.cpp
+++ b/src/gui/painting/qpen.cpp
@@ -316,7 +316,7 @@ QPen::QPen(const QBrush &brush, qreal width, Qt::PenStyle s, Qt::PenCapStyle c,
Constructs a pen that is a copy of the given \a pen.
*/
-QPen::QPen(const QPen &p)
+QPen::QPen(const QPen &p) Q_DECL_NOTHROW
{
d = p.d;
if (d)
@@ -375,7 +375,7 @@ void QPen::detach()
this pen.
*/
-QPen &QPen::operator=(const QPen &p)
+QPen &QPen::operator=(const QPen &p) Q_DECL_NOTHROW
{
QPen(p).swap(*this);
return *this;
diff --git a/src/gui/painting/qpen.h b/src/gui/painting/qpen.h
index 30f55cd4ce..48b7379924 100644
--- a/src/gui/painting/qpen.h
+++ b/src/gui/painting/qpen.h
@@ -58,18 +58,18 @@ public:
QPen(const QColor &color);
QPen(const QBrush &brush, qreal width, Qt::PenStyle s = Qt::SolidLine,
Qt::PenCapStyle c = Qt::SquareCap, Qt::PenJoinStyle j = Qt::BevelJoin);
- QPen(const QPen &pen);
+ QPen(const QPen &pen) Q_DECL_NOTHROW;
~QPen();
- QPen &operator=(const QPen &pen);
+ QPen &operator=(const QPen &pen) Q_DECL_NOTHROW;
#ifdef Q_COMPILER_RVALUE_REFS
- inline QPen(QPen &&other)
+ QPen(QPen &&other) Q_DECL_NOTHROW
: d(other.d) { other.d = 0; }
- inline QPen &operator=(QPen &&other)
+ QPen &operator=(QPen &&other) Q_DECL_NOTHROW
{ qSwap(d, other.d); return *this; }
#endif
- inline void swap(QPen &other) { qSwap(d, other.d); }
+ void swap(QPen &other) Q_DECL_NOTHROW { qSwap(d, other.d); }
Qt::PenStyle style() const;
void setStyle(Qt::PenStyle);
diff --git a/src/gui/painting/qplatformbackingstore.cpp b/src/gui/painting/qplatformbackingstore.cpp
index 76269f6e65..0d550887d9 100644
--- a/src/gui/painting/qplatformbackingstore.cpp
+++ b/src/gui/painting/qplatformbackingstore.cpp
@@ -45,6 +45,8 @@
#ifndef QT_NO_OPENGL
#include <QtGui/private/qopengltextureblitter_p.h>
#endif
+#include <qpa/qplatformgraphicsbuffer.h>
+#include <qpa/qplatformgraphicsbufferhelper.h>
QT_BEGIN_NAMESPACE
@@ -69,7 +71,6 @@ public:
#endif
}
QWindow *window;
- QSize size;
#ifndef QT_NO_OPENGL
mutable GLuint textureId;
mutable QSize textureSize;
@@ -267,13 +268,50 @@ void QPlatformBackingStore::composeAndFlush(QWindow *window, const QRegion &regi
// semi-transparency even when it is not wanted.
funcs->glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_FALSE);
- // Backingstore texture with the normal widgets.
- GLuint textureId = toTexture(deviceRegion(region, window), &d_ptr->textureSize, &d_ptr->needsSwizzle);
+ GLuint textureId = 0;
+ QOpenGLTextureBlitter::Origin origin = QOpenGLTextureBlitter::OriginTopLeft;
+ if (QPlatformGraphicsBuffer *graphicsBuffer = this->graphicsBuffer()) {
+ if (graphicsBuffer->size() != d_ptr->textureSize) {
+ if (d_ptr->textureId)
+ funcs->glDeleteTextures(1, &d_ptr->textureId);
+ funcs->glGenTextures(1, &d_ptr->textureId);
+ funcs->glBindTexture(GL_TEXTURE_2D, d_ptr->textureId);
+#ifndef QT_OPENGL_ES_2
+ if (!QOpenGLContext::currentContext()->isOpenGLES()) {
+ funcs->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, 0);
+ funcs->glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 0);
+ }
+#endif
+ funcs->glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ funcs->glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ funcs->glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
+ funcs->glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
+
+ if (QPlatformGraphicsBufferHelper::lockAndBindToTexture(graphicsBuffer, &d_ptr->needsSwizzle)) {
+ d_ptr->textureSize = graphicsBuffer->size();
+ } else {
+ d_ptr->textureSize = QSize(0,0);
+ }
+
+ graphicsBuffer->unlock();
+ } else if (!region.isEmpty()){
+ funcs->glBindTexture(GL_TEXTURE_2D, d_ptr->textureId);
+ QPlatformGraphicsBufferHelper::lockAndBindToTexture(graphicsBuffer, &d_ptr->needsSwizzle);
+ }
+
+ if (graphicsBuffer->origin() == QPlatformGraphicsBuffer::OriginBottomLeft)
+ origin = QOpenGLTextureBlitter::OriginBottomLeft;
+ textureId = d_ptr->textureId;
+ } else {
+ // Backingstore texture with the normal widgets.
+ textureId = toTexture(deviceRegion(region, window), &d_ptr->textureSize, &d_ptr->needsSwizzle);
+ }
+
if (textureId) {
QMatrix4x4 target = QOpenGLTextureBlitter::targetTransform(QRect(QPoint(), d_ptr->textureSize), windowRect);
if (d_ptr->needsSwizzle)
d_ptr->blitter->setSwizzleRB(true);
- d_ptr->blitter->blit(textureId, target, QOpenGLTextureBlitter::OriginTopLeft);
+ d_ptr->blitter->blit(textureId, target, origin);
if (d_ptr->needsSwizzle)
d_ptr->blitter->setSwizzleRB(false);
}
@@ -463,6 +501,14 @@ void QPlatformBackingStore::endPaint()
}
/*!
+ Accessor for a backingstores graphics buffer abstraction
+*/
+QPlatformGraphicsBuffer *QPlatformBackingStore::graphicsBuffer() const
+{
+ return Q_NULLPTR;
+}
+
+/*!
Scrolls the given \a area \a dx pixels to the right and \a dy
downward; both \a dx and \a dy may be negative.
diff --git a/src/gui/painting/qplatformbackingstore.h b/src/gui/painting/qplatformbackingstore.h
index c69612ca44..e967e757e3 100644
--- a/src/gui/painting/qplatformbackingstore.h
+++ b/src/gui/painting/qplatformbackingstore.h
@@ -62,6 +62,7 @@ class QPlatformWindow;
class QPlatformTextureList;
class QPlatformTextureListPrivate;
class QOpenGLContext;
+class QPlatformGraphicsBuffer;
#ifndef QT_NO_OPENGL
class Q_GUI_EXPORT QPlatformTextureList : public QObject
@@ -116,6 +117,8 @@ public:
virtual GLuint toTexture(const QRegion &dirtyRegion, QSize *textureSize, bool *needsSwizzle) const;
#endif
+ virtual QPlatformGraphicsBuffer *graphicsBuffer() const;
+
virtual void resize(const QSize &size, const QRegion &staticContents) = 0;
virtual bool scroll(const QRegion &area, int dx, int dy);
diff --git a/src/gui/painting/qrgb.h b/src/gui/painting/qrgb.h
index 6b0516e557..e6bda490ff 100644
--- a/src/gui/painting/qrgb.h
+++ b/src/gui/painting/qrgb.h
@@ -72,9 +72,11 @@ inline Q_DECL_CONSTEXPR int qGray(QRgb rgb) // convert RGB to gra
inline Q_DECL_CONSTEXPR bool qIsGray(QRgb rgb)
{ return qRed(rgb) == qGreen(rgb) && qRed(rgb) == qBlue(rgb); }
+template <int ProcessorWordSize>
+inline QRgb qPremultiply_impl(QRgb x);
-#if Q_PROCESSOR_WORDSIZE == 8 // 64-bit version
-inline QRgb qPremultiply(QRgb x)
+template <> // 64-bit version
+inline QRgb qPremultiply_impl<8>(QRgb x)
{
const uint a = qAlpha(x);
quint64 t = (((quint64(x)) | ((quint64(x)) << 24)) & 0x00ff00ff00ff00ff) * a;
@@ -82,8 +84,9 @@ inline QRgb qPremultiply(QRgb x)
t &= 0x000000ff00ff00ff;
return (uint(t)) | (uint(t >> 24)) | (a << 24);
}
-#else // 32-bit version
-inline QRgb qPremultiply(QRgb x)
+
+template <> // 32-bit version
+inline QRgb qPremultiply_impl<4>(QRgb x)
{
const uint a = qAlpha(x);
uint t = (x & 0xff00ff) * a;
@@ -96,7 +99,8 @@ inline QRgb qPremultiply(QRgb x)
x |= t | (a << 24);
return x;
}
-#endif
+
+inline QRgb qPremultiply(QRgb x) { return qPremultiply_impl<Q_PROCESSOR_WORDSIZE>(x); }
Q_GUI_EXPORT extern const uint qt_inv_premul_factor[];
diff --git a/src/gui/painting/qtextureglyphcache.cpp b/src/gui/painting/qtextureglyphcache.cpp
index be46a0fba3..38e714bfcc 100644
--- a/src/gui/painting/qtextureglyphcache.cpp
+++ b/src/gui/painting/qtextureglyphcache.cpp
@@ -285,13 +285,7 @@ void QImageTextureGlyphCache::createTextureData(int width, int height)
m_image = QImage(width, height, QImage::Format_Mono);
break;
case QFontEngine::Format_A8: {
- m_image = QImage(width, height, QImage::Format_Indexed8);
- m_image.fill(0);
- QVector<QRgb> colors(256);
- QRgb *it = colors.data();
- for (int i=0; i<256; ++i, ++it)
- *it = 0xff000000 | i | (i<<8) | (i<<16);
- m_image.setColorTable(colors);
+ m_image = QImage(width, height, QImage::Format_Alpha8);
break; }
case QFontEngine::Format_A32:
m_image = QImage(width, height, QImage::Format_RGB32);
diff --git a/src/gui/painting/qtextureglyphcache_p.h b/src/gui/painting/qtextureglyphcache_p.h
index 2d2fcdfc93..efa3b8d902 100644
--- a/src/gui/painting/qtextureglyphcache_p.h
+++ b/src/gui/painting/qtextureglyphcache_p.h
@@ -158,9 +158,9 @@ class Q_GUI_EXPORT QImageTextureGlyphCache : public QTextureGlyphCache
public:
QImageTextureGlyphCache(QFontEngine::GlyphFormat format, const QTransform &matrix)
: QTextureGlyphCache(format, matrix) { }
- virtual void createTextureData(int width, int height);
- virtual void resizeTextureData(int width, int height);
- virtual void fillTexture(const Coord &c, glyph_t glyph, QFixed subPixelPosition);
+ virtual void createTextureData(int width, int height) Q_DECL_OVERRIDE;
+ virtual void resizeTextureData(int width, int height) Q_DECL_OVERRIDE;
+ virtual void fillTexture(const Coord &c, glyph_t glyph, QFixed subPixelPosition) Q_DECL_OVERRIDE;
inline const QImage &image() const { return m_image; }
diff --git a/src/gui/text/qcssparser.cpp b/src/gui/text/qcssparser.cpp
index 8c2e40f319..3e4677a85e 100644
--- a/src/gui/text/qcssparser.cpp
+++ b/src/gui/text/qcssparser.cpp
@@ -41,7 +41,6 @@
#include <qfontmetrics.h>
#include <qbrush.h>
#include <qimagereader.h>
-#include "private/qfunctions_p.h"
#include <algorithm>
@@ -340,18 +339,18 @@ static const QCssKnownValue styleFeatures[NumKnownStyleFeatures - 1] = {
};
#if defined(Q_CC_MSVC) && _MSC_VER < 1600
-Q_STATIC_GLOBAL_OPERATOR bool operator<(const QCssKnownValue &prop1, const QCssKnownValue &prop2)
+static bool operator<(const QCssKnownValue &prop1, const QCssKnownValue &prop2)
{
return QString::compare(QString::fromLatin1(prop1.name), QLatin1String(prop2.name), Qt::CaseInsensitive) < 0;
}
#endif
-Q_STATIC_GLOBAL_OPERATOR bool operator<(const QString &name, const QCssKnownValue &prop)
+static bool operator<(const QString &name, const QCssKnownValue &prop)
{
return QString::compare(name, QLatin1String(prop.name), Qt::CaseInsensitive) < 0;
}
-Q_STATIC_GLOBAL_OPERATOR bool operator<(const QCssKnownValue &prop, const QString &name)
+static bool operator<(const QCssKnownValue &prop, const QString &name)
{
return QString::compare(QLatin1String(prop.name), name, Qt::CaseInsensitive) < 0;
}
diff --git a/src/gui/text/qdistancefield.cpp b/src/gui/text/qdistancefield.cpp
index b2d0298e04..10fe1a2c84 100644
--- a/src/gui/text/qdistancefield.cpp
+++ b/src/gui/text/qdistancefield.cpp
@@ -34,6 +34,7 @@
#include "qdistancefield_p.h"
#include <qmath.h>
#include <private/qdatabuffer_p.h>
+#include <private/qimage_p.h>
#include <private/qpathsimplifier_p.h>
QT_BEGIN_NAMESPACE
@@ -987,12 +988,12 @@ QImage QDistanceField::toImage(QImage::Format format) const
if (isNull())
return QImage();
- QImage image(d->width, d->height, format == QImage::Format_Indexed8 ?
+ QImage image(d->width, d->height, qt_depthForFormat(format) == 8 ?
format : QImage::Format_ARGB32_Premultiplied);
if (image.isNull())
return image;
- if (format == QImage::Format_Indexed8) {
+ if (image.depth() == 8) {
for (int y = 0; y < d->height; ++y)
memcpy(image.scanLine(y), scanLine(y), d->width);
} else {
diff --git a/src/gui/text/qfont.cpp b/src/gui/text/qfont.cpp
index b867dc6ef2..515de99c9e 100644
--- a/src/gui/text/qfont.cpp
+++ b/src/gui/text/qfont.cpp
@@ -406,9 +406,6 @@ QFontEngineData::~QFontEngineData()
setPointSize() has a similar effect and provides device
independence.
- In X11 you can set a font using its system
- specific name with setRawName().
-
Loading fonts can be expensive, especially on X11. QFont contains
extensive optimizations to make the copying of QFont objects fast,
and to cache the results of the slow window system functions it
@@ -1033,10 +1030,14 @@ int QFont::weight() const
This enum contains the predefined font weights:
+ \value Thin 0
+ \value ExtraLight 12
\value Light 25
\value Normal 50
+ \value Medium 57
\value DemiBold 63
\value Bold 75
+ \value ExtraBold 81
\value Black 87
*/
@@ -1063,7 +1064,7 @@ void QFont::setWeight(int weight)
\fn bool QFont::bold() const
Returns \c true if weight() is a value greater than
- \l{Weight}{QFont::Normal}; otherwise returns \c false.
+ \l{Weight}{QFont::Medium}; otherwise returns \c false.
\sa weight(), setBold(), QFontInfo::bold()
*/
@@ -1580,10 +1581,9 @@ QFont::Capitalization QFont::capitalization() const
return the values set in the QFont for all parameters, including
the family name).
- \warning Do not use raw mode unless you really, really need it! In
- most (if not all) cases, setRawName() is a much better choice.
+ \warning Do not use raw mode unless you really, really need it!
- \sa rawMode(), setRawName()
+ \sa rawMode()
*/
void QFont::setRawMode(bool enable)
{
@@ -1713,7 +1713,7 @@ bool QFont::isCopyOf(const QFont & f) const
Returns \c true if raw mode is used for font name matching; otherwise
returns \c false.
- \sa setRawMode(), rawName()
+ \sa setRawMode()
*/
bool QFont::rawMode() const
{
@@ -1877,7 +1877,7 @@ QStringList QFont::substitutions()
return ret;
}
-
+#ifndef QT_NO_DATASTREAM
/* \internal
Internal function. Converts boolean font settings to an unsigned
8-bit number. Used for serialization etc.
@@ -1920,8 +1920,6 @@ static quint8 get_extended_font_bits(const QFontPrivate *f)
return bits;
}
-#ifndef QT_NO_DATASTREAM
-
/* \internal
Internal function. Sets boolean font settings from an unsigned
8-bit number. Used for serialization etc.
@@ -2163,7 +2161,7 @@ QString QFont::defaultFamily() const
happens. Please \l{bughowto.html}{report it as a bug} if
it does, preferably with a list of the fonts you have installed.
- \sa lastResortFamily(), rawName()
+ \sa lastResortFamily()
*/
QString QFont::lastResortFont() const
{
diff --git a/src/gui/text/qfont.h b/src/gui/text/qfont.h
index 2a84fa680d..df2815ae73 100644
--- a/src/gui/text/qfont.h
+++ b/src/gui/text/qfont.h
@@ -86,12 +86,17 @@ public:
PreferFullHinting = 3
};
+ // Mapping OpenType weight value.
enum Weight {
- Light = 25,
- Normal = 50,
- DemiBold = 63,
- Bold = 75,
- Black = 87
+ Thin = 0, // 100
+ ExtraLight = 12, // 200
+ Light = 25, // 300
+ Normal = 50, // 400
+ Medium = 57, // 500
+ DemiBold = 63, // 600
+ Bold = 75, // 700
+ ExtraBold = 81, // 800
+ Black = 87 // 900
};
enum Style {
@@ -313,7 +318,7 @@ Q_DECLARE_SHARED(QFont)
Q_GUI_EXPORT uint qHash(const QFont &font, uint seed = 0) Q_DECL_NOTHROW;
inline bool QFont::bold() const
-{ return weight() > Normal; }
+{ return weight() > Medium; }
inline void QFont::setBold(bool enable)
diff --git a/src/gui/text/qfont_p.h b/src/gui/text/qfont_p.h
index 0d5223821a..630c08dfa4 100644
--- a/src/gui/text/qfont_p.h
+++ b/src/gui/text/qfont_p.h
@@ -277,7 +277,7 @@ public:
private:
void increaseCost(uint cost);
void decreaseCost(uint cost);
- void timerEvent(QTimerEvent *event);
+ void timerEvent(QTimerEvent *event) Q_DECL_OVERRIDE;
static const uint min_cost;
uint total_cost, max_cost;
diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp
index 99814dba82..16b0b8d76d 100644
--- a/src/gui/text/qfontdatabase.cpp
+++ b/src/gui/text/qfontdatabase.cpp
@@ -50,7 +50,6 @@
#include <QtCore/qmath.h>
#include <stdlib.h>
-#include <limits.h>
#include <algorithm>
@@ -84,60 +83,91 @@ static int getFontWeight(const QString &weightString)
{
QString s = weightString.toLower();
+ // Order here is important. We want to match the common cases first, but we
+ // must also take care to acknowledge the cost of our tests.
+ //
+ // As a result, we test in two orders; the order of commonness, and the
+ // order of "expense".
+ //
+ // A simple string test is the cheapest, so let's do that first.
// Test in decreasing order of commonness
- if (s == QLatin1String("normal")
- || s.compare(QCoreApplication::translate("QFontDatabase", "Normal"), Qt::CaseInsensitive) == 0)
+ if (s == QLatin1String("normal") || s == QLatin1String("regular"))
return QFont::Normal;
- if (s == QLatin1String("medium"))
- return qt_mediumFontWeight;
- if (s == QLatin1String("bold")
- || s.compare(QCoreApplication::translate("QFontDatabase", "Bold"), Qt::CaseInsensitive) == 0)
+ if (s == QLatin1String("bold"))
return QFont::Bold;
- if (s == QLatin1String("demibold") || s == QLatin1String("demi bold")
- || s.compare(QCoreApplication::translate("QFontDatabase", "Demi Bold"), Qt::CaseInsensitive) == 0)
+ if (s == QLatin1String("semibold") || s == QLatin1String("semi bold")
+ || s == QLatin1String("demibold") || s == QLatin1String("demi bold"))
return QFont::DemiBold;
- if (s == QLatin1String("black")
- || s.compare(QCoreApplication::translate("QFontDatabase", "Black"), Qt::CaseInsensitive) == 0)
+ if (s == QLatin1String("medium"))
+ return QFont::Medium;
+ if (s == QLatin1String("black"))
return QFont::Black;
if (s == QLatin1String("light"))
return QFont::Light;
if (s == QLatin1String("thin"))
- return qt_thinFontWeight;
- if (s == QLatin1String("extralight"))
- return qt_extralightFontWeight;
-
- if (s.contains(QLatin1String("bold"))
- || s.contains(QCoreApplication::translate("QFontDatabase", "Bold"), Qt::CaseInsensitive)) {
- if (s.contains(QLatin1String("demi"))
- || s.compare(QCoreApplication::translate("QFontDatabase", "Demi"), Qt::CaseInsensitive) == 0)
- return (int) QFont::DemiBold;
- return (int) QFont::Bold;
+ return QFont::Thin;
+ const QStringRef s2 = s.midRef(2);
+ if (s.startsWith(QLatin1String("ex")) || s.startsWith(QLatin1String("ul"))) {
+ if (s2 == QLatin1String("tralight") || s == QLatin1String("tra light"))
+ return QFont::ExtraLight;
+ if (s2 == QLatin1String("trabold") || s2 == QLatin1String("tra bold"))
+ return QFont::ExtraBold;
}
- if (s.contains(QLatin1String("light"))
- || s.compare(QCoreApplication::translate("QFontDatabase", "Light"), Qt::CaseInsensitive) == 0)
- return (int) QFont::Light;
-
- if (s.contains(QLatin1String("black"))
- || s.compare(QCoreApplication::translate("QFontDatabase", "Black"), Qt::CaseInsensitive) == 0)
- return (int) QFont::Black;
-
- return (int) QFont::Normal;
-}
-
-// convert 0 ~ 1000 integer to QFont::Weight
-QFont::Weight weightFromInteger(int weight)
-{
- if (weight < 400)
+ // Next up, let's see if contains() matches: slightly more expensive, but
+ // still fast enough.
+ if (s.contains(QLatin1String("bold"))) {
+ if (s.contains(QLatin1String("demi")))
+ return QFont::DemiBold;
+ return QFont::Bold;
+ }
+ if (s.contains(QLatin1String("light")))
return QFont::Light;
- else if (weight < 600)
+ if (s.contains(QLatin1String("black")))
+ return QFont::Black;
+
+ // Now, we perform string translations & comparisons with those.
+ // These are (very) slow compared to simple string ops, so we do these last.
+ // As using translated values for such things is not very common, this should
+ // not be too bad.
+ if (s.compare(QCoreApplication::translate("QFontDatabase", "Normal", "The Normal or Regular font weight"), Qt::CaseInsensitive) == 0)
return QFont::Normal;
- else if (weight < 700)
- return QFont::DemiBold;
- else if (weight < 800)
+ const QString translatedBold = QCoreApplication::translate("QFontDatabase", "Bold").toLower();
+ if (s == translatedBold)
return QFont::Bold;
- else
+ if (s.compare(QCoreApplication::translate("QFontDatabase", "Demi Bold"), Qt::CaseInsensitive) == 0)
+ return QFont::DemiBold;
+ if (s.compare(QCoreApplication::translate("QFontDatabase", "Medium", "The Medium font weight"), Qt::CaseInsensitive) == 0)
+ return QFont::Medium;
+ if (s.compare(QCoreApplication::translate("QFontDatabase", "Black"), Qt::CaseInsensitive) == 0)
return QFont::Black;
+ const QString translatedLight = QCoreApplication::translate("QFontDatabase", "Light").toLower();
+ if (s == translatedLight)
+ return QFont::Light;
+ if (s.compare(QCoreApplication::translate("QFontDatabase", "Thin"), Qt::CaseInsensitive) == 0)
+ return QFont::Thin;
+ if (s.compare(QCoreApplication::translate("QFontDatabase", "Extra Light"), Qt::CaseInsensitive) == 0)
+ return QFont::ExtraLight;
+ if (s.compare(QCoreApplication::translate("QFontDatabase", "Extra Bold"), Qt::CaseInsensitive) == 0)
+ return QFont::ExtraBold;
+
+ // And now the contains() checks for the translated strings.
+ const QString translatedExtra = QCoreApplication::translate("QFontDatabase", "Extra").toLower();
+ if (s.contains(translatedBold)) {
+ QString translatedDemi = QCoreApplication::translate("QFontDatabase", "Demi").toLower();
+ if (s .contains(translatedDemi))
+ return QFont::DemiBold;
+ if (s.contains(translatedExtra))
+ return QFont::ExtraBold;
+ return QFont::Bold;
+ }
+
+ if (s.contains(translatedLight)) {
+ if (s.contains(translatedExtra))
+ return QFont::ExtraLight;
+ return QFont::Light;
+ }
+ return QFont::Normal;
}
struct QtFontEncoding
@@ -428,8 +458,6 @@ public:
bool isApplicationFont(const QString &fileName);
void invalidate();
-
- QStringList fallbackFamilies;
};
void QFontDatabasePrivate::invalidate()
@@ -624,18 +652,6 @@ static void initFontDef(const QtFontDesc &desc, const QFontDef &request, QFontDe
fontDef->ignorePitch = false;
}
-static void getEngineData(const QFontPrivate *d, const QFontDef &def)
-{
- // look for the requested font in the engine data cache
- d->engineData = QFontCache::instance()->findEngineData(def);
- if (!d->engineData) {
- // create a new one
- d->engineData = new QFontEngineData;
- QFontCache::instance()->insertEngineData(def, d->engineData);
- }
- d->engineData->ref.ref();
-}
-
static QStringList familyList(const QFontDef &req)
{
// list of families to try
@@ -800,7 +816,7 @@ static inline void load(const QString & = QString(), int = -1)
static
QFontEngine *loadSingleEngine(int script,
const QFontDef &request,
- QtFontFoundry *foundry,
+ QtFontFamily *family, QtFontFoundry *foundry,
QtFontStyle *style, QtFontSize *size)
{
Q_UNUSED(foundry);
@@ -819,6 +835,24 @@ QFontEngine *loadSingleEngine(int script,
QFontCache::Key key(def,script);
QFontEngine *engine = QFontCache::instance()->findEngine(key);
if (!engine) {
+ if (script != QChar::Script_Common) {
+ // fast path: check if engine was loaded for another script
+ key.script = QChar::Script_Common;
+ engine = QFontCache::instance()->findEngine(key);
+ key.script = script;
+ if (engine) {
+ Q_ASSERT(engine->type() != QFontEngine::Multi);
+ // Also check for OpenType tables when using complex scripts
+ if (Q_UNLIKELY(!engine->supportsScript(QChar::Script(script)))) {
+ qWarning(" OpenType support missing for script %d", script);
+ return 0;
+ }
+
+ QFontCache::instance()->insertEngine(key, engine);
+ return engine;
+ }
+ }
+
// If the font data's native stretch matches the requested stretch we need to set stretch to 100
// to avoid the fontengine synthesizing stretch. If they didn't match exactly we need to calculate
// the new stretch factor. This only done if not matched by styleName.
@@ -838,6 +872,13 @@ QFontEngine *loadSingleEngine(int script,
}
QFontCache::instance()->insertEngine(key, engine);
+
+ if (!engine->symbol && script != QChar::Script_Common && (family->writingSystems[QFontDatabase::Latin] & QtFontFamily::Supported) != 0) {
+ // cache engine for Common script as well
+ key.script = QChar::Script_Common;
+ if (!QFontCache::instance()->findEngine(key))
+ QFontCache::instance()->insertEngine(key, engine);
+ }
}
}
return engine;
@@ -848,7 +889,7 @@ QFontEngine *loadEngine(int script, const QFontDef &request,
QtFontFamily *family, QtFontFoundry *foundry,
QtFontStyle *style, QtFontSize *size)
{
- QFontEngine *engine = loadSingleEngine(script, request, foundry, style, size);
+ QFontEngine *engine = loadSingleEngine(script, request, family, foundry, style, size);
Q_ASSERT(!engine || engine->type() != QFontEngine::Multi);
if (engine && !(request.styleStrategy & QFont::NoFontMerging) && !engine->symbol) {
// make sure that the db has all fallback families
@@ -863,10 +904,8 @@ QFontEngine *loadEngine(int script, const QFontDef &request,
}
QStringList fallbacks = request.fallBackFamilies;
- if (family && !family->fallbackFamilies.isEmpty())
+ if (family)
fallbacks += family->fallbackFamilies;
- else
- fallbacks += privateDb()->fallbackFamilies;
QPlatformFontDatabase *pfdb = QGuiApplicationPrivate::platformIntegration()->fontDatabase();
QFontEngineMulti *pfMultiEngine = pfdb->fontEngineMulti(engine, QChar::Script(script));
@@ -1117,7 +1156,10 @@ static int match(int script, const QFontDef &request,
load(family_name, script);
- const size_t writingSystem = std::find(scriptForWritingSystem, scriptForWritingSystem + QFontDatabase::WritingSystemsCount, script) - scriptForWritingSystem;
+ size_t writingSystem = std::find(scriptForWritingSystem, scriptForWritingSystem +
+ QFontDatabase::WritingSystemsCount, script) - scriptForWritingSystem;
+ if (writingSystem >= QFontDatabase::WritingSystemsCount)
+ writingSystem = QFontDatabase::Any;
QFontDatabasePrivate *db = privateDb();
for (int x = 0; x < db->count; ++x) {
@@ -1136,7 +1178,7 @@ static int match(int script, const QFontDef &request,
load(test.family->name, script);
// Check if family is supported in the script we want
- if (script != QChar::Script_Common && !(test.family->writingSystems[writingSystem] & QtFontFamily::Supported))
+ if (writingSystem != QFontDatabase::Any && !(test.family->writingSystems[writingSystem] & QtFontFamily::Supported))
continue;
// as we know the script is supported, we can be sure
@@ -1145,7 +1187,7 @@ static int match(int script, const QFontDef &request,
bestFoundry(script, score, request.styleStrategy,
test.family, foundry_name, styleKey, request.pixelSize, pitch,
&test, force_encoding_id, request.styleName);
- if (test.foundry == 0) {
+ if (test.foundry == 0 && !foundry_name.isEmpty()) {
// the specific foundry was not found, so look for
// any foundry matching our requirements
newscore = bestFoundry(script, score, request.styleStrategy, test.family,
@@ -1562,6 +1604,15 @@ bool QFontDatabase::isSmoothlyScalable(const QString &family, const QString &sty
QtFontStyle::Key styleKey(style);
QtFontFamily *f = d->family(familyName);
+ if (!f) {
+ for (int i = 0; i < d->count; i++) {
+ if (d->families[i]->matchesFamilyName(familyName)) {
+ f = d->families[i];
+ f->ensurePopulated();
+ break;
+ }
+ }
+ }
if (!f) return smoothScalable;
for (int j = 0; j < f->count; j++) {
@@ -1639,7 +1690,7 @@ QList<int> QFontDatabase::pointSizes(const QString &family,
for (int l = 0; l < style->count; l++) {
const QtFontSize *size = style->pixelSizes + l;
- if (size->pixelSize != 0 && size->pixelSize != USHRT_MAX) {
+ if (size->pixelSize != 0 && size->pixelSize != SMOOTH_SCALABLE) {
const uint pointSize = qRound(size->pixelSize * 72.0 / dpi);
if (! sizes.contains(pointSize))
sizes.append(pointSize);
@@ -1742,7 +1793,7 @@ QList<int> QFontDatabase::smoothSizes(const QString &family,
for (int l = 0; l < style->count; l++) {
const QtFontSize *size = style->pixelSizes + l;
- if (size->pixelSize != 0 && size->pixelSize != USHRT_MAX) {
+ if (size->pixelSize != 0 && size->pixelSize != SMOOTH_SCALABLE) {
const uint pointSize = qRound(size->pixelSize * 72.0 / dpi);
if (! sizes.contains(pointSize))
sizes.append(pointSize);
@@ -2572,19 +2623,27 @@ void QFontDatabase::load(const QFontPrivate *d, int script)
if (req.stretch == 0)
req.stretch = 100;
+ if (!d->engineData) {
+ // look for the requested font in the engine data cache
+ d->engineData = QFontCache::instance()->findEngineData(req);
+ if (!d->engineData) {
+ // create a new one
+ d->engineData = new QFontEngineData;
+ QFontCache::instance()->insertEngineData(req, d->engineData);
+ }
+ d->engineData->ref.ref();
+ }
+
+ // the cached engineData could have already loaded the engine we want
+ if (d->engineData->engines[script])
+ return;
+
// Until we specifically asked not to, try looking for Multi font engine
// first, the last '1' indicates that we want Multi font engine instead
// of single ones
bool multi = !(req.styleStrategy & QFont::NoFontMerging);
QFontCache::Key key(req, script, multi ? 1 : 0);
- if (!d->engineData)
- getEngineData(d, req);
-
- // the cached engineData could have already loaded the engine we want
- if (d->engineData->engines[script])
- return;
-
QFontEngine *fe = QFontCache::instance()->findEngine(key);
// list of families to try
diff --git a/src/gui/text/qfontdatabase.h b/src/gui/text/qfontdatabase.h
index d7d8745f12..5688ce6b7a 100644
--- a/src/gui/text/qfontdatabase.h
+++ b/src/gui/text/qfontdatabase.h
@@ -159,7 +159,7 @@ private:
friend class QFontPrivate;
friend class QFontDialog;
friend class QFontDialogPrivate;
- friend class QFontEngineMultiBasicImpl;
+ friend class QFontEngineMulti;
QFontDatabasePrivate *d;
};
diff --git a/src/gui/text/qfontengine.cpp b/src/gui/text/qfontengine.cpp
index b2a7a8e91f..e686c9fe81 100644
--- a/src/gui/text/qfontengine.cpp
+++ b/src/gui/text/qfontengine.cpp
@@ -761,7 +761,7 @@ QImage QFontEngine::alphaMapForGlyph(glyph_t glyph, const QTransform &t)
{
QImage i = alphaMapForGlyph(glyph);
if (t.type() > QTransform::TxTranslate)
- i = i.transformed(t).convertToFormat(QImage::Format_Indexed8);
+ i = i.transformed(t).convertToFormat(QImage::Format_Alpha8);
Q_ASSERT(i.depth() <= 8); // To verify that transformed didn't change the format...
return i;
@@ -774,7 +774,7 @@ QImage QFontEngine::alphaMapForGlyph(glyph_t glyph, QFixed subPixelPosition, con
QImage i = alphaMapForGlyph(glyph, subPixelPosition);
if (t.type() > QTransform::TxTranslate)
- i = i.transformed(t).convertToFormat(QImage::Format_Indexed8);
+ i = i.transformed(t).convertToFormat(QImage::Format_Alpha8);
Q_ASSERT(i.depth() <= 8); // To verify that transformed didn't change the format...
return i;
@@ -785,12 +785,11 @@ QImage QFontEngine::alphaRGBMapForGlyph(glyph_t glyph, QFixed /*subPixelPosition
QImage alphaMask = alphaMapForGlyph(glyph, t);
QImage rgbMask(alphaMask.width(), alphaMask.height(), QImage::Format_RGB32);
- QVector<QRgb> colorTable = alphaMask.colorTable();
for (int y=0; y<alphaMask.height(); ++y) {
uint *dst = (uint *) rgbMask.scanLine(y);
uchar *src = (uchar *) alphaMask.scanLine(y);
for (int x=0; x<alphaMask.width(); ++x) {
- int val = qAlpha(colorTable.at(src[x]));
+ int val = src[x];
dst[x] = qRgb(val, val, val);
}
}
@@ -871,20 +870,16 @@ QImage QFontEngine::alphaMapForGlyph(glyph_t glyph)
p.drawPath(path);
p.end();
- QImage indexed(im.width(), im.height(), QImage::Format_Indexed8);
- QVector<QRgb> colors(256);
- for (int i=0; i<256; ++i)
- colors[i] = qRgba(0, 0, 0, i);
- indexed.setColorTable(colors);
+ QImage alphaMap(im.width(), im.height(), QImage::Format_Alpha8);
for (int y=0; y<im.height(); ++y) {
- uchar *dst = (uchar *) indexed.scanLine(y);
+ uchar *dst = (uchar *) alphaMap.scanLine(y);
uint *src = (uint *) im.scanLine(y);
for (int x=0; x<im.width(); ++x)
dst[x] = qAlpha(src[x]);
}
- return indexed;
+ return alphaMap;
}
void QFontEngine::removeGlyphFromCache(glyph_t)
@@ -1535,14 +1530,10 @@ bool QFontEngineBox::canRender(const QChar *, int) const
QImage QFontEngineBox::alphaMapForGlyph(glyph_t)
{
- QImage image(_size, _size, QImage::Format_Indexed8);
- QVector<QRgb> colors(256);
- for (int i=0; i<256; ++i)
- colors[i] = qRgba(0, 0, 0, i);
- image.setColorTable(colors);
+ QImage image(_size, _size, QImage::Format_Alpha8);
image.fill(0);
- // can't use qpainter for index8; so use setPixel to draw our rectangle.
+ // FIXME: use qpainter
for (int i=2; i <= _size-3; ++i) {
image.setPixel(i, 2, 255);
image.setPixel(i, _size-3, 255);
@@ -1563,34 +1554,108 @@ static inline uchar highByte(glyph_t glyph)
static inline glyph_t stripped(glyph_t glyph)
{ return glyph & 0x00ffffff; }
-QFontEngineMulti::QFontEngineMulti(int engineCount)
- : QFontEngine(Multi)
+QFontEngineMulti::QFontEngineMulti(QFontEngine *engine, int script, const QStringList &fallbackFamilies)
+ : QFontEngine(Multi),
+ m_fallbackFamilies(fallbackFamilies),
+ m_script(script),
+ m_fallbackFamiliesQueried(!m_fallbackFamilies.isEmpty())
{
- engines.fill(0, engineCount);
- cache_cost = 0;
+ Q_ASSERT(engine && engine->type() != QFontEngine::Multi);
+
+ if (m_fallbackFamilies.isEmpty()) {
+ // defer obtaining the fallback families until loadEngine(1)
+ m_fallbackFamilies << QString();
+ }
+
+ m_engines.resize(m_fallbackFamilies.size() + 1);
+
+ engine->ref.ref();
+ m_engines[0] = engine;
+
+ fontDef = engine->fontDef;
+ cache_cost = engine->cache_cost;
}
QFontEngineMulti::~QFontEngineMulti()
{
- for (int i = 0; i < engines.size(); ++i) {
- QFontEngine *fontEngine = engines.at(i);
+ for (int i = 0; i < m_engines.size(); ++i) {
+ QFontEngine *fontEngine = m_engines.at(i);
if (fontEngine && !fontEngine->ref.deref())
delete fontEngine;
}
}
+void QFontEngineMulti::ensureFallbackFamiliesQueried()
+{
+ if (QPlatformIntegration *integration = QGuiApplicationPrivate::platformIntegration()) {
+ const QStringList fallbackFamilies = integration->fontDatabase()->fallbacksForFamily(fontDef.family,
+ QFont::Style(fontDef.style),
+ QFont::AnyStyle,
+ QChar::Script(m_script));
+ setFallbackFamiliesList(fallbackFamilies);
+ }
+}
+
+void QFontEngineMulti::setFallbackFamiliesList(const QStringList &fallbackFamilies)
+{
+ Q_ASSERT(!m_fallbackFamiliesQueried);
+
+ m_fallbackFamilies = fallbackFamilies;
+ if (m_fallbackFamilies.isEmpty()) {
+ // turns out we lied about having any fallback at all
+ Q_ASSERT(m_engines.size() == 2); // see c-tor for details
+ QFontEngine *engine = m_engines.at(0);
+ engine->ref.ref();
+ m_engines[1] = engine;
+ m_fallbackFamilies << fontDef.family;
+ } else {
+ m_engines.resize(m_fallbackFamilies.size() + 1);
+ }
+
+ m_fallbackFamiliesQueried = true;
+}
+
+void QFontEngineMulti::ensureEngineAt(int at)
+{
+ Q_ASSERT(m_fallbackFamiliesQueried);
+ Q_ASSERT(at < m_engines.size());
+ if (!m_engines.at(at)) {
+ QFontEngine *engine = loadEngine(at);
+ if (!engine)
+ engine = new QFontEngineBox(fontDef.pixelSize);
+ Q_ASSERT(engine && engine->type() != QFontEngine::Multi);
+ engine->ref.ref();
+ m_engines[at] = engine;
+ }
+}
+
+QFontEngine *QFontEngineMulti::loadEngine(int at)
+{
+ QFontDef request(fontDef);
+ request.styleStrategy |= QFont::NoFontMerging;
+ request.family = fallbackFamilyAt(at - 1);
+
+ if (QFontEngine *engine = QFontDatabase::findFont(m_script, /*fontprivate = */0, request, /*multi = */false)) {
+ engine->fontDef = request;
+ return engine;
+ }
+
+ return 0;
+}
+
glyph_t QFontEngineMulti::glyphIndex(uint ucs4) const
{
glyph_t glyph = engine(0)->glyphIndex(ucs4);
if (glyph == 0 && ucs4 != QChar::LineSeparator) {
- const_cast<QFontEngineMulti *>(this)->ensureFallbackFamiliesQueried();
- for (int x = 1, n = qMin(engines.size(), 256); x < n; ++x) {
- QFontEngine *engine = engines.at(x);
+ if (!m_fallbackFamiliesQueried)
+ const_cast<QFontEngineMulti *>(this)->ensureFallbackFamiliesQueried();
+ for (int x = 1, n = qMin(m_engines.size(), 256); x < n; ++x) {
+ QFontEngine *engine = m_engines.at(x);
if (!engine) {
if (!shouldLoadFontEngineForCharacter(x, ucs4))
continue;
- const_cast<QFontEngineMulti *>(this)->loadEngine(x);
- engine = engines.at(x);
+ const_cast<QFontEngineMulti *>(this)->ensureEngineAt(x);
+ engine = m_engines.at(x);
}
Q_ASSERT(engine != 0);
if (engine->type() == Box)
@@ -1615,20 +1680,22 @@ bool QFontEngineMulti::stringToCMap(const QChar *str, int len,
if (!engine(0)->stringToCMap(str, len, glyphs, nglyphs, flags))
return false;
- const_cast<QFontEngineMulti *>(this)->ensureFallbackFamiliesQueried();
int glyph_pos = 0;
QStringIterator it(str, str + len);
while (it.hasNext()) {
const uint ucs4 = it.peekNext();
if (glyphs->glyphs[glyph_pos] == 0 && ucs4 != QChar::LineSeparator) {
- for (int x = 1, n = qMin(engines.size(), 256); x < n; ++x) {
- if (engines.at(x) == 0 && !shouldLoadFontEngineForCharacter(x, ucs4))
- continue;
-
- QFontEngine *engine = engines.at(x);
+ if (!m_fallbackFamiliesQueried)
+ const_cast<QFontEngineMulti *>(this)->ensureFallbackFamiliesQueried();
+ for (int x = 1, n = qMin(m_engines.size(), 256); x < n; ++x) {
+ QFontEngine *engine = m_engines.at(x);
if (!engine) {
- const_cast<QFontEngineMulti *>(this)->loadEngine(x);
- engine = engines.at(x);
+ if (!shouldLoadFontEngineForCharacter(x, ucs4))
+ continue;
+ const_cast<QFontEngineMulti *>(this)->ensureEngineAt(x);
+ engine = m_engines.at(x);
+ if (!engine)
+ continue;
}
Q_ASSERT(engine != 0);
if (engine->type() == Box)
@@ -1883,7 +1950,6 @@ void QFontEngineMulti::doKerning(QGlyphLayout *glyphs, QFontEngine::ShaperFlags
glyph_metrics_t QFontEngineMulti::boundingBox(glyph_t glyph)
{
const int which = highByte(glyph);
- Q_ASSERT(which < engines.size());
return engine(which)->boundingBox(stripped(glyph));
}
@@ -1962,111 +2028,34 @@ bool QFontEngineMulti::canRender(const QChar *string, int len) const
QImage QFontEngineMulti::alphaMapForGlyph(glyph_t glyph)
{
const int which = highByte(glyph);
- Q_ASSERT(which < engines.size());
return engine(which)->alphaMapForGlyph(stripped(glyph));
}
QImage QFontEngineMulti::alphaMapForGlyph(glyph_t glyph, QFixed subPixelPosition)
{
const int which = highByte(glyph);
- Q_ASSERT(which < engines.size());
return engine(which)->alphaMapForGlyph(stripped(glyph), subPixelPosition);
}
QImage QFontEngineMulti::alphaMapForGlyph(glyph_t glyph, const QTransform &t)
{
const int which = highByte(glyph);
- Q_ASSERT(which < engines.size());
return engine(which)->alphaMapForGlyph(stripped(glyph), t);
}
QImage QFontEngineMulti::alphaMapForGlyph(glyph_t glyph, QFixed subPixelPosition, const QTransform &t)
{
const int which = highByte(glyph);
- Q_ASSERT(which < engines.size());
return engine(which)->alphaMapForGlyph(stripped(glyph), subPixelPosition, t);
}
QImage QFontEngineMulti::alphaRGBMapForGlyph(glyph_t glyph, QFixed subPixelPosition, const QTransform &t)
{
const int which = highByte(glyph);
- Q_ASSERT(which < engines.size());
return engine(which)->alphaRGBMapForGlyph(stripped(glyph), subPixelPosition, t);
}
/*
- Creates a new multi engine.
-
- This function takes ownership of the QFontEngine, increasing it's refcount.
-*/
-QFontEngineMultiBasicImpl::QFontEngineMultiBasicImpl(QFontEngine *fe, int _script, const QStringList &fallbacks)
- : QFontEngineMulti(fallbacks.size() + 1),
- fallbackFamilies(fallbacks), script(_script)
- , fallbacksQueried(true)
-{
- init(fe);
-}
-
-QFontEngineMultiBasicImpl::QFontEngineMultiBasicImpl(QFontEngine *fe, int _script)
- : QFontEngineMulti(2)
- , script(_script)
- , fallbacksQueried(false)
-{
- fallbackFamilies << QString();
- init(fe);
-}
-
-void QFontEngineMultiBasicImpl::init(QFontEngine *fe)
-{
- Q_ASSERT(fe && fe->type() != QFontEngine::Multi);
- engines[0] = fe;
- fe->ref.ref();
- fontDef = engines[0]->fontDef;
- cache_cost = fe->cache_cost;
-}
-
-void QFontEngineMultiBasicImpl::loadEngine(int at)
-{
- ensureFallbackFamiliesQueried();
- Q_ASSERT(at < engines.size());
- Q_ASSERT(engines.at(at) == 0);
- QFontDef request = fontDef;
- request.styleStrategy |= QFont::NoFontMerging;
- request.family = fallbackFamilies.at(at-1);
- engines[at] = QFontDatabase::findFont(script,
- /*fontprivate = */0,
- request, /*multi = */false);
- Q_ASSERT(engines[at]);
- engines[at]->ref.ref();
- engines[at]->fontDef = request;
-}
-void QFontEngineMultiBasicImpl::ensureFallbackFamiliesQueried()
-{
- if (fallbacksQueried)
- return;
- QStringList fallbacks = QGuiApplicationPrivate::instance()->platformIntegration()->fontDatabase()->fallbacksForFamily(engine(0)->fontDef.family, QFont::Style(engine(0)->fontDef.style)
- , QFont::AnyStyle, QChar::Script(script));
- setFallbackFamiliesList(fallbacks);
-}
-
-void QFontEngineMultiBasicImpl::setFallbackFamiliesList(const QStringList &fallbacks)
-{
- // Original FontEngine to restore after the fill.
- QFontEngine *fe = engines[0];
- fallbackFamilies = fallbacks;
- if (!fallbackFamilies.isEmpty()) {
- engines.fill(0, fallbackFamilies.size() + 1);
- engines[0] = fe;
- } else {
- // Turns out we lied about having any fallback at all.
- fallbackFamilies << fe->fontDef.family;
- engines[1] = fe;
- fe->ref.ref();
- }
- fallbacksQueried = true;
-}
-
-/*
This is used indirectly by Qt WebKit when using QTextLayout::setRawFont
The purpose of this is to provide the necessary font fallbacks when drawing complex
@@ -2074,7 +2063,7 @@ void QFontEngineMultiBasicImpl::setFallbackFamiliesList(const QStringList &fallb
the same raw font over and over again, we want to cache the corresponding multi font engine
as it may contain fallback font engines already.
*/
-QFontEngine* QFontEngineMultiBasicImpl::createMultiFontEngine(QFontEngine *fe, int script)
+QFontEngine *QFontEngineMulti::createMultiFontEngine(QFontEngine *fe, int script)
{
QFontEngine *engine = 0;
QFontCache::Key key(fe->fontDef, script, /*multi = */true);
diff --git a/src/gui/text/qfontengine_ft.cpp b/src/gui/text/qfontengine_ft.cpp
index 792bfadb5e..e0c1b46a90 100644
--- a/src/gui/text/qfontengine_ft.cpp
+++ b/src/gui/text/qfontengine_ft.cpp
@@ -76,34 +76,6 @@
QT_BEGIN_NAMESPACE
-/*
- * Freetype 2.1.7 and earlier used width/height
- * for matching sizes in the BDF and PCF loaders.
- * This has been fixed for 2.1.8.
- */
-#if (FREETYPE_MAJOR*10000+FREETYPE_MINOR*100+FREETYPE_PATCH) >= 20105
-#define X_SIZE(face,i) ((face)->available_sizes[i].x_ppem)
-#define Y_SIZE(face,i) ((face)->available_sizes[i].y_ppem)
-#else
-#define X_SIZE(face,i) ((face)->available_sizes[i].width << 6)
-#define Y_SIZE(face,i) ((face)->available_sizes[i].height << 6)
-#endif
-
-/* FreeType 2.1.10 starts to provide FT_GlyphSlot_Embolden */
-#if (FREETYPE_MAJOR*10000+FREETYPE_MINOR*100+FREETYPE_PATCH) >= 20110
-#define Q_FT_GLYPHSLOT_EMBOLDEN(slot) FT_GlyphSlot_Embolden(slot)
-#else
-#define Q_FT_GLYPHSLOT_EMBOLDEN(slot)
-#endif
-
-/* FreeType 2.1.10 starts to provide FT_GlyphSlot_Oblique */
-#if (FREETYPE_MAJOR*10000+FREETYPE_MINOR*100+FREETYPE_PATCH) >= 20110
-#define Q_HAS_FT_GLYPHSLOT_OBLIQUE
-#define Q_FT_GLYPHSLOT_OBLIQUE(slot) FT_GlyphSlot_Oblique(slot)
-#else
-#define Q_FT_GLYPHSLOT_OBLIQUE(slot)
-#endif
-
#define FLOOR(x) ((x) & -64)
#define CEIL(x) (((x)+63) & -64)
#define TRUNC(x) ((x) >> 6)
@@ -297,7 +269,7 @@ QFreetypeFace *QFreetypeFace::getFace(const QFontEngine::FaceId &face_id,
}
if (!FT_IS_SCALABLE(newFreetype->face) && newFreetype->face->num_fixed_sizes == 1)
- FT_Set_Char_Size (face, X_SIZE(newFreetype->face, 0), Y_SIZE(newFreetype->face, 0), 0, 0);
+ FT_Set_Char_Size(face, newFreetype->face->available_sizes[0].x_ppem, newFreetype->face->available_sizes[0].y_ppem, 0, 0);
FT_Set_Charmap(newFreetype->face, newFreetype->unicode_map);
QT_TRY {
@@ -357,18 +329,18 @@ void QFreetypeFace::computeSize(const QFontDef &fontDef, int *xsize, int *ysize,
if (!(face->face_flags & FT_FACE_FLAG_SCALABLE)) {
int best = 0;
for (int i = 1; i < face->num_fixed_sizes; i++) {
- if (qAbs(*ysize - Y_SIZE(face,i)) <
- qAbs (*ysize - Y_SIZE(face, best)) ||
- (qAbs (*ysize - Y_SIZE(face, i)) ==
- qAbs (*ysize - Y_SIZE(face, best)) &&
- qAbs (*xsize - X_SIZE(face, i)) <
- qAbs (*xsize - X_SIZE(face, best)))) {
+ if (qAbs(*ysize - face->available_sizes[i].y_ppem) <
+ qAbs(*ysize - face->available_sizes[best].y_ppem) ||
+ (qAbs(*ysize - face->available_sizes[i].y_ppem) ==
+ qAbs(*ysize - face->available_sizes[best].y_ppem) &&
+ qAbs(*xsize - face->available_sizes[i].x_ppem) <
+ qAbs(*xsize - face->available_sizes[best].x_ppem))) {
best = i;
}
}
- if (FT_Set_Char_Size (face, X_SIZE(face, best), Y_SIZE(face, best), 0, 0) == 0) {
- *xsize = X_SIZE(face, best);
- *ysize = Y_SIZE(face, best);
+ if (FT_Set_Char_Size(face, face->available_sizes[best].x_ppem, face->available_sizes[best].y_ppem, 0, 0) == 0) {
+ *xsize = face->available_sizes[best].x_ppem;
+ *ysize = face->available_sizes[best].y_ppem;
} else {
int err = 1;
if (!(face->face_flags & FT_FACE_FLAG_SCALABLE) && ysize == 0 && face->num_fixed_sizes >= 1) {
@@ -719,14 +691,8 @@ bool QFontEngineFT::init(FaceId faceId, bool antialias, GlyphFormat format,
if (FT_IS_SCALABLE(face)) {
bool fake_oblique = (fontDef.style != QFont::StyleNormal) && !(face->style_flags & FT_STYLE_FLAG_ITALIC);
- if (fake_oblique) {
-#if !defined(Q_HAS_FT_GLYPHSLOT_OBLIQUE)
- matrix.xy = 0x10000*3/10;
- transform = true;
-#else
+ if (fake_oblique)
obliquen = true;
-#endif
- }
FT_Set_Transform(face, &matrix, 0);
freetype->matrix = matrix;
// fake bold
@@ -758,7 +724,7 @@ bool QFontEngineFT::init(FaceId faceId, bool antialias, GlyphFormat format,
*/
if (FT_IS_SCALABLE(face)) {
for (int i = 0; i < face->num_fixed_sizes; ++i) {
- if (xsize == X_SIZE(face, i) && ysize == Y_SIZE(face, i)) {
+ if (xsize == face->available_sizes[i].x_ppem && ysize == face->available_sizes[i].y_ppem) {
face->face_flags &= ~FT_FACE_FLAG_SCALABLE;
FT_Select_Size(face, i);
@@ -908,9 +874,10 @@ QFontEngineFT::Glyph *QFontEngineFT::loadGlyph(QGlyphSet *set, uint glyph,
FT_GlyphSlot slot = face->glyph;
- if (embolden) Q_FT_GLYPHSLOT_EMBOLDEN(slot);
+ if (embolden)
+ FT_GlyphSlot_Embolden(slot);
if (obliquen) {
- Q_FT_GLYPHSLOT_OBLIQUE(slot);
+ FT_GlyphSlot_Oblique(slot);
// While Embolden alters the metrics of the slot, oblique does not, so we need
// to fix this ourselves.
@@ -1482,8 +1449,10 @@ void QFontEngineFT::addGlyphsToPath(glyph_t *glyphs, QFixedPoint *positions, int
FT_GlyphSlot g = face->glyph;
if (g->format != FT_GLYPH_FORMAT_OUTLINE)
continue;
- if (embolden) Q_FT_GLYPHSLOT_EMBOLDEN(g);
- if (obliquen) Q_FT_GLYPHSLOT_OBLIQUE(g);
+ if (embolden)
+ FT_GlyphSlot_Embolden(g);
+ if (obliquen)
+ FT_GlyphSlot_Oblique(g);
QFreetypeFace::addGlyphToPath(face, g, positions[gl], path, xsize, ysize);
}
unlockFace();
@@ -1775,7 +1744,7 @@ QImage *QFontEngineFT::lockedAlphaMapForGlyph(glyph_t glyphIndex, QFixed subPixe
format = QImage::Format_Mono;
break;
case Format_A8:
- format = QImage::Format_Indexed8;
+ format = QImage::Format_Alpha8;
break;
case Format_A32:
format = QImage::Format_ARGB32;
@@ -1918,13 +1887,8 @@ QImage QFontEngineFT::alphaMapForGlyph(glyph_t g, QFixed subPixelPosition, const
const int pitch = antialias ? (glyph->width + 3) & ~3 : ((glyph->width + 31)/32) * 4;
- QImage img(glyph->width, glyph->height, antialias ? QImage::Format_Indexed8 : QImage::Format_Mono);
- if (antialias) {
- QVector<QRgb> colors(256);
- for (int i=0; i<256; ++i)
- colors[i] = qRgba(0, 0, 0, i);
- img.setColorTable(colors);
- } else {
+ QImage img(glyph->width, glyph->height, antialias ? QImage::Format_Alpha8 : QImage::Format_Mono);
+ if (!antialias) {
QVector<QRgb> colors(2);
colors[0] = qRgba(0, 0, 0, 0);
colors[1] = qRgba(0, 0, 0, 255);
diff --git a/src/gui/text/qfontengine_ft_p.h b/src/gui/text/qfontengine_ft_p.h
index 383902c784..e33f0fc0f5 100644
--- a/src/gui/text/qfontengine_ft_p.h
+++ b/src/gui/text/qfontengine_ft_p.h
@@ -188,67 +188,67 @@ private:
mutable int fast_glyph_count;
};
- virtual QFontEngine::FaceId faceId() const;
- virtual QFontEngine::Properties properties() const;
- virtual QFixed emSquareSize() const;
- virtual bool supportsSubPixelPositions() const
+ virtual QFontEngine::FaceId faceId() const Q_DECL_OVERRIDE;
+ virtual QFontEngine::Properties properties() const Q_DECL_OVERRIDE;
+ virtual QFixed emSquareSize() const Q_DECL_OVERRIDE;
+ virtual bool supportsSubPixelPositions() const Q_DECL_OVERRIDE
{
return default_hint_style == HintLight ||
default_hint_style == HintNone;
}
- virtual bool getSfntTableData(uint tag, uchar *buffer, uint *length) const;
- virtual int synthesized() const;
+ virtual bool getSfntTableData(uint tag, uchar *buffer, uint *length) const Q_DECL_OVERRIDE;
+ virtual int synthesized() const Q_DECL_OVERRIDE;
- virtual QFixed ascent() const;
- virtual QFixed descent() const;
- virtual QFixed leading() const;
- virtual QFixed xHeight() const;
- virtual QFixed averageCharWidth() const;
+ virtual QFixed ascent() const Q_DECL_OVERRIDE;
+ virtual QFixed descent() const Q_DECL_OVERRIDE;
+ virtual QFixed leading() const Q_DECL_OVERRIDE;
+ virtual QFixed xHeight() const Q_DECL_OVERRIDE;
+ virtual QFixed averageCharWidth() const Q_DECL_OVERRIDE;
- virtual qreal maxCharWidth() const;
- virtual qreal minLeftBearing() const;
- virtual qreal minRightBearing() const;
- virtual QFixed lineThickness() const;
- virtual QFixed underlinePosition() const;
+ virtual qreal maxCharWidth() const Q_DECL_OVERRIDE;
+ virtual qreal minLeftBearing() const Q_DECL_OVERRIDE;
+ virtual qreal minRightBearing() const Q_DECL_OVERRIDE;
+ virtual QFixed lineThickness() const Q_DECL_OVERRIDE;
+ virtual QFixed underlinePosition() const Q_DECL_OVERRIDE;
- virtual glyph_t glyphIndex(uint ucs4) const;
- void doKerning(QGlyphLayout *, ShaperFlags) const;
+ virtual glyph_t glyphIndex(uint ucs4) const Q_DECL_OVERRIDE;
+ void doKerning(QGlyphLayout *, ShaperFlags) const Q_DECL_OVERRIDE;
- virtual void getUnscaledGlyph(glyph_t glyph, QPainterPath *path, glyph_metrics_t *metrics);
+ virtual void getUnscaledGlyph(glyph_t glyph, QPainterPath *path, glyph_metrics_t *metrics) Q_DECL_OVERRIDE;
- virtual bool supportsTransformation(const QTransform &transform) const;
+ virtual bool supportsTransformation(const QTransform &transform) const Q_DECL_OVERRIDE;
virtual void addGlyphsToPath(glyph_t *glyphs, QFixedPoint *positions, int nglyphs,
- QPainterPath *path, QTextItem::RenderFlags flags);
+ QPainterPath *path, QTextItem::RenderFlags flags) Q_DECL_OVERRIDE;
virtual void addOutlineToPath(qreal x, qreal y, const QGlyphLayout &glyphs,
- QPainterPath *path, QTextItem::RenderFlags flags);
+ QPainterPath *path, QTextItem::RenderFlags flags) Q_DECL_OVERRIDE;
- virtual bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, ShaperFlags flags) const;
+ virtual bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, ShaperFlags flags) const Q_DECL_OVERRIDE;
- virtual glyph_metrics_t boundingBox(const QGlyphLayout &glyphs);
- virtual glyph_metrics_t boundingBox(glyph_t glyph);
- virtual glyph_metrics_t boundingBox(glyph_t glyph, const QTransform &matrix);
+ virtual glyph_metrics_t boundingBox(const QGlyphLayout &glyphs) Q_DECL_OVERRIDE;
+ virtual glyph_metrics_t boundingBox(glyph_t glyph) Q_DECL_OVERRIDE;
+ virtual glyph_metrics_t boundingBox(glyph_t glyph, const QTransform &matrix) Q_DECL_OVERRIDE;
- virtual void recalcAdvances(QGlyphLayout *glyphs, ShaperFlags flags) const;
- virtual QImage alphaMapForGlyph(glyph_t g) { return alphaMapForGlyph(g, 0); }
- virtual QImage alphaMapForGlyph(glyph_t, QFixed);
- QImage alphaMapForGlyph(glyph_t glyph, QFixed subPixelPosition, const QTransform &t);
- virtual QImage alphaRGBMapForGlyph(glyph_t, QFixed subPixelPosition, const QTransform &t);
+ virtual void recalcAdvances(QGlyphLayout *glyphs, ShaperFlags flags) const Q_DECL_OVERRIDE;
+ virtual QImage alphaMapForGlyph(glyph_t g) Q_DECL_OVERRIDE { return alphaMapForGlyph(g, 0); }
+ virtual QImage alphaMapForGlyph(glyph_t, QFixed) Q_DECL_OVERRIDE;
+ QImage alphaMapForGlyph(glyph_t glyph, QFixed subPixelPosition, const QTransform &t) Q_DECL_OVERRIDE;
+ virtual QImage alphaRGBMapForGlyph(glyph_t, QFixed subPixelPosition, const QTransform &t) Q_DECL_OVERRIDE;
virtual glyph_metrics_t alphaMapBoundingBox(glyph_t glyph,
QFixed subPixelPosition,
const QTransform &matrix,
- QFontEngine::GlyphFormat format);
+ QFontEngine::GlyphFormat format) Q_DECL_OVERRIDE;
virtual QImage *lockedAlphaMapForGlyph(glyph_t glyph, QFixed subPixelPosition,
GlyphFormat neededFormat, const QTransform &t,
- QPoint *offset);
- virtual bool hasInternalCaching() const { return cacheEnabled; }
- virtual void unlockAlphaMapForGlyph();
+ QPoint *offset) Q_DECL_OVERRIDE;
+ virtual bool hasInternalCaching() const Q_DECL_OVERRIDE { return cacheEnabled; }
+ virtual void unlockAlphaMapForGlyph() Q_DECL_OVERRIDE;
- virtual void removeGlyphFromCache(glyph_t glyph);
- virtual int glyphMargin(QFontEngine::GlyphFormat /* format */) { return 0; }
+ virtual void removeGlyphFromCache(glyph_t glyph) Q_DECL_OVERRIDE;
+ virtual int glyphMargin(QFontEngine::GlyphFormat /* format */) Q_DECL_OVERRIDE { return 0; }
- virtual int glyphCount() const;
+ virtual int glyphCount() const Q_DECL_OVERRIDE;
enum Scaling {
Scaled,
@@ -278,12 +278,12 @@ private:
bool init(FaceId faceId, bool antialias, GlyphFormat format,
QFreetypeFace *freetypeFace);
- virtual int getPointInOutline(glyph_t glyph, int flags, quint32 point, QFixed *xpos, QFixed *ypos, quint32 *nPoints);
+ virtual int getPointInOutline(glyph_t glyph, int flags, quint32 point, QFixed *xpos, QFixed *ypos, quint32 *nPoints) Q_DECL_OVERRIDE;
- virtual void setDefaultHintStyle(HintStyle style);
+ virtual void setDefaultHintStyle(HintStyle style) Q_DECL_OVERRIDE;
- virtual QFontEngine *cloneWithSize(qreal pixelSize) const;
+ virtual QFontEngine *cloneWithSize(qreal pixelSize) const Q_DECL_OVERRIDE;
bool initFromFontEngine(const QFontEngineFT *fontEngine);
HintStyle defaultHintStyle() const { return default_hint_style; }
diff --git a/src/gui/text/qfontengine_p.h b/src/gui/text/qfontengine_p.h
index 9364b82bed..cd42cc89d7 100644
--- a/src/gui/text/qfontengine_p.h
+++ b/src/gui/text/qfontengine_p.h
@@ -78,10 +78,6 @@ enum HB_Compat_Error {
typedef void (*qt_destroy_func_t) (void *user_data);
typedef bool (*qt_get_font_table_func_t) (void *user_data, uint tag, uchar *buffer, uint *length);
-const QFont::Weight qt_mediumFontWeight = static_cast<QFont::Weight>(57);
-const QFont::Weight qt_extralightFontWeight = static_cast<QFont::Weight>(12);
-const QFont::Weight qt_thinFontWeight = static_cast<QFont::Weight>(0);
-
class Q_GUI_EXPORT QFontEngine
{
public:
@@ -351,26 +347,26 @@ public:
QFontEngineBox(int size);
~QFontEngineBox();
- virtual glyph_t glyphIndex(uint ucs4) const;
- virtual bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, ShaperFlags flags) const;
- virtual void recalcAdvances(QGlyphLayout *, ShaperFlags) const;
+ virtual glyph_t glyphIndex(uint ucs4) const Q_DECL_OVERRIDE;
+ virtual bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, ShaperFlags flags) const Q_DECL_OVERRIDE;
+ virtual void recalcAdvances(QGlyphLayout *, ShaperFlags) const Q_DECL_OVERRIDE;
void draw(QPaintEngine *p, qreal x, qreal y, const QTextItemInt &si);
- virtual void addOutlineToPath(qreal x, qreal y, const QGlyphLayout &glyphs, QPainterPath *path, QTextItem::RenderFlags flags);
-
- virtual glyph_metrics_t boundingBox(const QGlyphLayout &glyphs);
- virtual glyph_metrics_t boundingBox(glyph_t glyph);
- virtual QFontEngine *cloneWithSize(qreal pixelSize) const;
-
- virtual QFixed ascent() const;
- virtual QFixed descent() const;
- virtual QFixed leading() const;
- virtual qreal maxCharWidth() const;
- virtual qreal minLeftBearing() const { return 0; }
- virtual qreal minRightBearing() const { return 0; }
- virtual QImage alphaMapForGlyph(glyph_t);
+ virtual void addOutlineToPath(qreal x, qreal y, const QGlyphLayout &glyphs, QPainterPath *path, QTextItem::RenderFlags flags) Q_DECL_OVERRIDE;
+
+ virtual glyph_metrics_t boundingBox(const QGlyphLayout &glyphs) Q_DECL_OVERRIDE;
+ virtual glyph_metrics_t boundingBox(glyph_t glyph) Q_DECL_OVERRIDE;
+ virtual QFontEngine *cloneWithSize(qreal pixelSize) const Q_DECL_OVERRIDE;
+
+ virtual QFixed ascent() const Q_DECL_OVERRIDE;
+ virtual QFixed descent() const Q_DECL_OVERRIDE;
+ virtual QFixed leading() const Q_DECL_OVERRIDE;
+ virtual qreal maxCharWidth() const Q_DECL_OVERRIDE;
+ virtual qreal minLeftBearing() const Q_DECL_OVERRIDE { return 0; }
+ virtual qreal minRightBearing() const Q_DECL_OVERRIDE { return 0; }
+ virtual QImage alphaMapForGlyph(glyph_t) Q_DECL_OVERRIDE;
- virtual bool canRender(const QChar *string, int len) const;
+ virtual bool canRender(const QChar *string, int len) const Q_DECL_OVERRIDE;
inline int size() const { return _size; }
@@ -385,79 +381,61 @@ private:
class Q_GUI_EXPORT QFontEngineMulti : public QFontEngine
{
public:
- explicit QFontEngineMulti(int engineCount);
+ explicit QFontEngineMulti(QFontEngine *engine, int script, const QStringList &fallbackFamilies = QStringList());
~QFontEngineMulti();
- virtual glyph_t glyphIndex(uint ucs4) const;
- virtual bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, ShaperFlags flags) const;
-
- virtual glyph_metrics_t boundingBox(const QGlyphLayout &glyphs);
- virtual glyph_metrics_t boundingBox(glyph_t glyph);
-
- virtual void recalcAdvances(QGlyphLayout *, ShaperFlags) const;
- virtual void doKerning(QGlyphLayout *, ShaperFlags) const;
- virtual void addOutlineToPath(qreal, qreal, const QGlyphLayout &, QPainterPath *, QTextItem::RenderFlags flags);
- virtual void getGlyphBearings(glyph_t glyph, qreal *leftBearing = 0, qreal *rightBearing = 0);
+ virtual glyph_t glyphIndex(uint ucs4) const Q_DECL_OVERRIDE;
+ virtual bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, ShaperFlags flags) const Q_DECL_OVERRIDE;
- virtual QFixed ascent() const;
- virtual QFixed descent() const;
- virtual QFixed leading() const;
- virtual QFixed xHeight() const;
- virtual QFixed averageCharWidth() const;
- virtual QImage alphaMapForGlyph(glyph_t);
- virtual QImage alphaMapForGlyph(glyph_t glyph, QFixed subPixelPosition);
- virtual QImage alphaMapForGlyph(glyph_t, const QTransform &t);
- virtual QImage alphaMapForGlyph(glyph_t, QFixed subPixelPosition, const QTransform &t);
- virtual QImage alphaRGBMapForGlyph(glyph_t, QFixed subPixelPosition, const QTransform &t);
+ virtual glyph_metrics_t boundingBox(const QGlyphLayout &glyphs) Q_DECL_OVERRIDE;
+ virtual glyph_metrics_t boundingBox(glyph_t glyph) Q_DECL_OVERRIDE;
- virtual QFixed lineThickness() const;
- virtual QFixed underlinePosition() const;
- virtual qreal maxCharWidth() const;
- virtual qreal minLeftBearing() const;
- virtual qreal minRightBearing() const;
+ virtual void recalcAdvances(QGlyphLayout *, ShaperFlags) const Q_DECL_OVERRIDE;
+ virtual void doKerning(QGlyphLayout *, ShaperFlags) const Q_DECL_OVERRIDE;
+ virtual void addOutlineToPath(qreal, qreal, const QGlyphLayout &, QPainterPath *, QTextItem::RenderFlags flags) Q_DECL_OVERRIDE;
+ virtual void getGlyphBearings(glyph_t glyph, qreal *leftBearing = 0, qreal *rightBearing = 0) Q_DECL_OVERRIDE;
- virtual bool canRender(const QChar *string, int len) const;
+ virtual QFixed ascent() const Q_DECL_OVERRIDE;
+ virtual QFixed descent() const Q_DECL_OVERRIDE;
+ virtual QFixed leading() const Q_DECL_OVERRIDE;
+ virtual QFixed xHeight() const Q_DECL_OVERRIDE;
+ virtual QFixed averageCharWidth() const Q_DECL_OVERRIDE;
+ virtual QImage alphaMapForGlyph(glyph_t) Q_DECL_OVERRIDE;
+ virtual QImage alphaMapForGlyph(glyph_t glyph, QFixed subPixelPosition) Q_DECL_OVERRIDE;
+ virtual QImage alphaMapForGlyph(glyph_t, const QTransform &t) Q_DECL_OVERRIDE;
+ virtual QImage alphaMapForGlyph(glyph_t, QFixed subPixelPosition, const QTransform &t) Q_DECL_OVERRIDE;
+ virtual QImage alphaRGBMapForGlyph(glyph_t, QFixed subPixelPosition, const QTransform &t) Q_DECL_OVERRIDE;
- QFontEngine *engine(int at) const
- {Q_ASSERT(at < engines.size()); return engines.at(at); }
+ virtual QFixed lineThickness() const Q_DECL_OVERRIDE;
+ virtual QFixed underlinePosition() const Q_DECL_OVERRIDE;
+ virtual qreal maxCharWidth() const Q_DECL_OVERRIDE;
+ virtual qreal minLeftBearing() const Q_DECL_OVERRIDE;
+ virtual qreal minRightBearing() const Q_DECL_OVERRIDE;
- inline void ensureEngineAt(int at)
- {
- if (at >= engines.size() || engines.at(at) == 0)
- loadEngine(at);
- }
+ virtual bool canRender(const QChar *string, int len) const Q_DECL_OVERRIDE;
- virtual bool shouldLoadFontEngineForCharacter(int at, uint ucs4) const;
- virtual void setFallbackFamiliesList(const QStringList &) {}
+ inline int fallbackFamilyCount() const { return m_fallbackFamilies.size(); }
+ inline QString fallbackFamilyAt(int at) const { return m_fallbackFamilies.at(at); }
-protected:
- friend class QRawFont;
- virtual void loadEngine(int at) = 0;
- virtual void ensureFallbackFamiliesQueried() {}
- QVector<QFontEngine *> engines;
-};
+ void setFallbackFamiliesList(const QStringList &fallbackFamilies);
-class Q_GUI_EXPORT QFontEngineMultiBasicImpl : public QFontEngineMulti
-{
-public:
- QFontEngineMultiBasicImpl(QFontEngine *fe, int script, const QStringList &fallbacks);
- QFontEngineMultiBasicImpl(QFontEngine *fe, int script);
+ inline QFontEngine *engine(int at) const
+ { Q_ASSERT(at < m_engines.size()); return m_engines.at(at); }
- void loadEngine(int at);
- static QFontEngine* createMultiFontEngine(QFontEngine *fe, int script);
+ void ensureEngineAt(int at);
- int fallbackFamilyCount() const { return fallbackFamilies.size(); }
- QString fallbackFamilyAt(int at) const { return fallbackFamilies.at(at); }
+ static QFontEngine *createMultiFontEngine(QFontEngine *fe, int script);
+protected:
virtual void ensureFallbackFamiliesQueried();
- virtual void setFallbackFamiliesList(const QStringList &fallbacks);
+ virtual bool shouldLoadFontEngineForCharacter(int at, uint ucs4) const;
+ virtual QFontEngine *loadEngine(int at);
private:
- void init(QFontEngine *fe);
-
- mutable QStringList fallbackFamilies;
- int script;
- mutable bool fallbacksQueried;
+ QVector<QFontEngine *> m_engines;
+ QStringList m_fallbackFamilies;
+ const int m_script;
+ bool m_fallbackFamiliesQueried;
};
class QTestFontEngine : public QFontEngineBox
diff --git a/src/gui/text/qfontengine_qpf2.cpp b/src/gui/text/qfontengine_qpf2.cpp
index 4785902c99..8e924102e5 100644
--- a/src/gui/text/qfontengine_qpf2.cpp
+++ b/src/gui/text/qfontengine_qpf2.cpp
@@ -396,7 +396,7 @@ QImage QFontEngineQPF2::alphaMapForGlyph(glyph_t g)
const uchar *bits = ((const uchar *) glyph) + sizeof(Glyph);
- QImage image(bits,glyph->width, glyph->height, glyph->bytesPerLine, QImage::Format_Indexed8);
+ QImage image(bits,glyph->width, glyph->height, glyph->bytesPerLine, QImage::Format_Alpha8);
return image;
}
diff --git a/src/gui/text/qfontengine_qpf2_p.h b/src/gui/text/qfontengine_qpf2_p.h
index e8c3989b58..68e20e2ed0 100644
--- a/src/gui/text/qfontengine_qpf2_p.h
+++ b/src/gui/text/qfontengine_qpf2_p.h
@@ -152,29 +152,29 @@ public:
QFontEngineQPF2(const QFontDef &def, const QByteArray &data);
~QFontEngineQPF2();
- FaceId faceId() const { return face_id; }
- bool getSfntTableData(uint tag, uchar *buffer, uint *length) const;
+ FaceId faceId() const Q_DECL_OVERRIDE { return face_id; }
+ bool getSfntTableData(uint tag, uchar *buffer, uint *length) const Q_DECL_OVERRIDE;
- virtual glyph_t glyphIndex(uint ucs4) const;
- bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, ShaperFlags flags) const;
- void recalcAdvances(QGlyphLayout *, ShaperFlags) const;
+ virtual glyph_t glyphIndex(uint ucs4) const Q_DECL_OVERRIDE;
+ bool stringToCMap(const QChar *str, int len, QGlyphLayout *glyphs, int *nglyphs, ShaperFlags flags) const Q_DECL_OVERRIDE;
+ void recalcAdvances(QGlyphLayout *, ShaperFlags) const Q_DECL_OVERRIDE;
- void addOutlineToPath(qreal x, qreal y, const QGlyphLayout &glyphs, QPainterPath *path, QTextItem::RenderFlags flags);
- QImage alphaMapForGlyph(glyph_t t);
+ void addOutlineToPath(qreal x, qreal y, const QGlyphLayout &glyphs, QPainterPath *path, QTextItem::RenderFlags flags) Q_DECL_OVERRIDE;
+ QImage alphaMapForGlyph(glyph_t t) Q_DECL_OVERRIDE;
- glyph_metrics_t boundingBox(const QGlyphLayout &glyphs);
- glyph_metrics_t boundingBox(glyph_t glyph);
+ glyph_metrics_t boundingBox(const QGlyphLayout &glyphs) Q_DECL_OVERRIDE;
+ glyph_metrics_t boundingBox(glyph_t glyph) Q_DECL_OVERRIDE;
- QFixed ascent() const;
- QFixed descent() const;
- QFixed leading() const;
- qreal maxCharWidth() const;
- qreal minLeftBearing() const;
- qreal minRightBearing() const;
- QFixed underlinePosition() const;
- QFixed lineThickness() const;
+ QFixed ascent() const Q_DECL_OVERRIDE;
+ QFixed descent() const Q_DECL_OVERRIDE;
+ QFixed leading() const Q_DECL_OVERRIDE;
+ qreal maxCharWidth() const Q_DECL_OVERRIDE;
+ qreal minLeftBearing() const Q_DECL_OVERRIDE;
+ qreal minRightBearing() const Q_DECL_OVERRIDE;
+ QFixed underlinePosition() const Q_DECL_OVERRIDE;
+ QFixed lineThickness() const Q_DECL_OVERRIDE;
- virtual int glyphCount() const { return glyphMapEntries; }
+ virtual int glyphCount() const Q_DECL_OVERRIDE { return glyphMapEntries; }
bool isValid() const;
diff --git a/src/gui/text/qfontsubset.cpp b/src/gui/text/qfontsubset.cpp
index 160472cb5d..521b44b839 100644
--- a/src/gui/text/qfontsubset.cpp
+++ b/src/gui/text/qfontsubset.cpp
@@ -36,7 +36,6 @@
#include <qendian.h>
#include <qpainterpath.h>
#include "private/qpdf_p.h"
-#include "private/qfunctions_p.h"
#include "qfontsubset_agl.cpp"
@@ -979,7 +978,7 @@ static QTtfGlyph generateGlyph(int index, const QPainterPath &path, qreal advanc
return glyph;
}
-Q_STATIC_GLOBAL_OPERATOR bool operator <(const QTtfGlyph &g1, const QTtfGlyph &g2)
+static bool operator <(const QTtfGlyph &g1, const QTtfGlyph &g2)
{
return g1.index < g2.index;
}
@@ -1057,7 +1056,7 @@ static QList<QTtfTable> generateGlyphTables(qttf_font_tables &tables, const QLis
return list;
}
-Q_STATIC_GLOBAL_OPERATOR bool operator <(const QTtfTable &t1, const QTtfTable &t2)
+static bool operator <(const QTtfTable &t1, const QTtfTable &t2)
{
return t1.tag < t2.tag;
}
diff --git a/src/gui/text/qfragmentmap_p.h b/src/gui/text/qfragmentmap_p.h
index 012d3c25ce..a19e3d9ea3 100644
--- a/src/gui/text/qfragmentmap_p.h
+++ b/src/gui/text/qfragmentmap_p.h
@@ -249,6 +249,8 @@ uint QFragmentMapData<Fragment>::createFragment()
uint freePos = head->freelist;
if (freePos == head->allocated) {
// need to create some free space
+ if (freePos >= uint(MaxAllocSize) / fragmentSize)
+ qBadAlloc();
uint needed = qAllocMore((freePos+1)*fragmentSize, 0);
Q_ASSERT(needed/fragmentSize > head->allocated);
Fragment *newFragments = (Fragment *)realloc(fragments, needed);
diff --git a/src/gui/text/qharfbuzzng.cpp b/src/gui/text/qharfbuzzng.cpp
index 16c45e642b..5a442a0eb5 100644
--- a/src/gui/text/qharfbuzzng.cpp
+++ b/src/gui/text/qharfbuzzng.cpp
@@ -375,7 +375,7 @@ _hb_qt_font_get_glyph(hb_font_t * /*font*/, void *font_data,
hb_codepoint_t *glyph,
void * /*user_data*/)
{
- QFontEngine *fe = (QFontEngine *)font_data;
+ QFontEngine *fe = static_cast<QFontEngine *>(font_data);
Q_ASSERT(fe);
*glyph = fe->glyphIndex(unicode);
@@ -388,7 +388,7 @@ _hb_qt_font_get_glyph_h_advance(hb_font_t *font, void *font_data,
hb_codepoint_t glyph,
void * /*user_data*/)
{
- QFontEngine *fe = (QFontEngine *)font_data;
+ QFontEngine *fe = static_cast<QFontEngine *>(font_data);
Q_ASSERT(fe);
QFixed advance;
@@ -436,7 +436,7 @@ _hb_qt_font_get_glyph_h_kerning(hb_font_t *font, void *font_data,
hb_codepoint_t first_glyph, hb_codepoint_t second_glyph,
void * /*user_data*/)
{
- QFontEngine *fe = (QFontEngine *)font_data;
+ QFontEngine *fe = static_cast<QFontEngine *>(font_data);
Q_ASSERT(fe);
glyph_t glyphs[2] = { first_glyph, second_glyph };
@@ -467,7 +467,7 @@ _hb_qt_font_get_glyph_extents(hb_font_t * /*font*/, void *font_data,
hb_glyph_extents_t *extents,
void * /*user_data*/)
{
- QFontEngine *fe = (QFontEngine *)font_data;
+ QFontEngine *fe = static_cast<QFontEngine *>(font_data);
Q_ASSERT(fe);
glyph_metrics_t gm = fe->boundingBox(glyph);
@@ -486,7 +486,7 @@ _hb_qt_font_get_glyph_contour_point(hb_font_t * /*font*/, void *font_data,
unsigned int point_index, hb_position_t *x, hb_position_t *y,
void * /*user_data*/)
{
- QFontEngine *fe = (QFontEngine *)font_data;
+ QFontEngine *fe = static_cast<QFontEngine *>(font_data);
Q_ASSERT(fe);
QFixed xpos, ypos;
@@ -573,7 +573,7 @@ hb_font_funcs_t *hb_qt_get_font_funcs()
static hb_blob_t *
_hb_qt_reference_table(hb_face_t * /*face*/, hb_tag_t tag, void *user_data)
{
- QFontEngine::FaceData *data = (QFontEngine::FaceData *)user_data;
+ QFontEngine::FaceData *data = static_cast<QFontEngine::FaceData *>(user_data);
Q_ASSERT(data);
qt_get_font_table_func_t get_font_table = data->get_font_table;
@@ -583,21 +583,21 @@ _hb_qt_reference_table(hb_face_t * /*face*/, hb_tag_t tag, void *user_data)
if (Q_UNLIKELY(!get_font_table(data->user_data, tag, 0, &length)))
return hb_blob_get_empty();
- char *buffer = (char *)malloc(length);
+ char *buffer = static_cast<char *>(malloc(length));
Q_CHECK_PTR(buffer);
if (Q_UNLIKELY(!get_font_table(data->user_data, tag, reinterpret_cast<uchar *>(buffer), &length)))
length = 0;
return hb_blob_create(const_cast<const char *>(buffer), length,
- HB_MEMORY_MODE_WRITABLE,
+ HB_MEMORY_MODE_READONLY,
buffer, free);
}
static inline hb_face_t *
_hb_qt_face_create(QFontEngine *fe)
{
- QFontEngine::FaceData *data = (QFontEngine::FaceData *)malloc(sizeof(QFontEngine::FaceData));
+ QFontEngine::FaceData *data = static_cast<QFontEngine::FaceData *>(malloc(sizeof(QFontEngine::FaceData)));
Q_CHECK_PTR(data);
data->user_data = fe->faceData.user_data;
data->get_font_table = fe->faceData.get_font_table;
@@ -618,7 +618,7 @@ static void
_hb_qt_face_release(void *user_data)
{
if (Q_LIKELY(user_data))
- hb_face_destroy((hb_face_t *)user_data);
+ hb_face_destroy(static_cast<hb_face_t *>(user_data));
}
hb_face_t *hb_qt_face_get_for_engine(QFontEngine *fe)
@@ -632,7 +632,7 @@ hb_face_t *hb_qt_face_get_for_engine(QFontEngine *fe)
fe->face_destroy_func = _hb_qt_face_release;
}
- return (hb_face_t *)fe->face_;
+ return static_cast<hb_face_t *>(fe->face_);
}
@@ -668,7 +668,7 @@ static void
_hb_qt_font_release(void *user_data)
{
if (Q_LIKELY(user_data))
- hb_font_destroy((hb_font_t *)user_data);
+ hb_font_destroy(static_cast<hb_font_t *>(user_data));
}
hb_font_t *hb_qt_font_get_for_engine(QFontEngine *fe)
@@ -682,7 +682,7 @@ hb_font_t *hb_qt_font_get_for_engine(QFontEngine *fe)
fe->font_destroy_func = _hb_qt_font_release;
}
- return (hb_font_t *)fe->font_;
+ return static_cast<hb_font_t *>(fe->font_);
}
QT_END_NAMESPACE
diff --git a/src/gui/text/qplatformfontdatabase.cpp b/src/gui/text/qplatformfontdatabase.cpp
index f18ddbab8a..8f47933e6d 100644
--- a/src/gui/text/qplatformfontdatabase.cpp
+++ b/src/gui/text/qplatformfontdatabase.cpp
@@ -314,7 +314,7 @@ void QPlatformFontDatabase::invalidate()
*/
QFontEngineMulti *QPlatformFontDatabase::fontEngineMulti(QFontEngine *fontEngine, QChar::Script script)
{
- return new QFontEngineMultiBasicImpl(fontEngine, script);
+ return new QFontEngineMulti(fontEngine, script);
}
/*!
@@ -599,6 +599,34 @@ QSupportedWritingSystems QPlatformFontDatabase::writingSystemsFromTrueTypeBits(q
}
/*!
+ Helper function that returns the Qt font weight matching a given opentype integer value.
+
+ \since 5.5
+*/
+
+// convert 0 ~ 1000 integer to QFont::Weight
+QFont::Weight QPlatformFontDatabase::weightFromInteger(int weight)
+{
+ if (weight < 150)
+ return QFont::Thin;
+ if (weight < 250)
+ return QFont::ExtraLight;
+ if (weight < 350)
+ return QFont::Light;
+ if (weight < 450)
+ return QFont::Normal;
+ if (weight < 550)
+ return QFont::Medium;
+ if (weight < 650)
+ return QFont::DemiBold;
+ if (weight < 750)
+ return QFont::Bold;
+ if (weight < 850)
+ return QFont::ExtraBold;
+ return QFont::Black;
+}
+
+/*!
Helper function that register the \a alias for the \a familyName.
\since 5.2
diff --git a/src/gui/text/qplatformfontdatabase.h b/src/gui/text/qplatformfontdatabase.h
index a75d55f91a..2497ec2ff3 100644
--- a/src/gui/text/qplatformfontdatabase.h
+++ b/src/gui/text/qplatformfontdatabase.h
@@ -110,6 +110,7 @@ public:
// helper
static QSupportedWritingSystems writingSystemsFromTrueTypeBits(quint32 unicodeRange[4], quint32 codePageRange[2]);
+ static QFont::Weight weightFromInteger(int weight);
//callback
static void registerQPF2Font(const QByteArray &dataArray, void *handle);
diff --git a/src/gui/text/qstatictext.cpp b/src/gui/text/qstatictext.cpp
index a7868f36ab..913cd08a0e 100644
--- a/src/gui/text/qstatictext.cpp
+++ b/src/gui/text/qstatictext.cpp
@@ -393,7 +393,7 @@ QSizeF QStaticText::size() const
}
QStaticTextPrivate::QStaticTextPrivate()
- : textWidth(-1.0), items(0), itemCount(0), glyphPool(0), positionPool(0), charPool(0),
+ : textWidth(-1.0), items(0), itemCount(0), glyphPool(0), positionPool(0),
needsRelayout(true), useBackendOptimizations(false), textFormat(Qt::AutoText),
untransformedCoordinates(false)
{
@@ -401,7 +401,7 @@ QStaticTextPrivate::QStaticTextPrivate()
QStaticTextPrivate::QStaticTextPrivate(const QStaticTextPrivate &other)
: text(other.text), font(other.font), textWidth(other.textWidth), matrix(other.matrix),
- items(0), itemCount(0), glyphPool(0), positionPool(0), charPool(0), textOption(other.textOption),
+ items(0), itemCount(0), glyphPool(0), positionPool(0), textOption(other.textOption),
needsRelayout(true), useBackendOptimizations(other.useBackendOptimizations),
textFormat(other.textFormat), untransformedCoordinates(other.untransformedCoordinates)
{
@@ -412,7 +412,6 @@ QStaticTextPrivate::~QStaticTextPrivate()
delete[] items;
delete[] glyphPool;
delete[] positionPool;
- delete[] charPool;
}
QStaticTextPrivate *QStaticTextPrivate::get(const QStaticText *q)
@@ -431,7 +430,7 @@ namespace {
{
}
- virtual void updateState(const QPaintEngineState &newState)
+ virtual void updateState(const QPaintEngineState &newState) Q_DECL_OVERRIDE
{
if (newState.state() & QPaintEngine::DirtyPen
&& newState.pen().color() != m_currentColor) {
@@ -440,15 +439,13 @@ namespace {
}
}
- virtual void drawTextItem(const QPointF &position, const QTextItem &textItem)
+ virtual void drawTextItem(const QPointF &position, const QTextItem &textItem) Q_DECL_OVERRIDE
{
const QTextItemInt &ti = static_cast<const QTextItemInt &>(textItem);
QStaticTextItem currentItem;
currentItem.setFontEngine(ti.fontEngine);
currentItem.font = ti.font();
- currentItem.charOffset = m_chars.size();
- currentItem.numChars = ti.num_chars;
currentItem.glyphOffset = m_glyphs.size(); // Store offset into glyph pool
currentItem.positionOffset = m_glyphs.size(); // Offset into position pool
currentItem.useBackendOptimizations = m_useBackendOptimizations;
@@ -468,7 +465,6 @@ namespace {
m_glyphs.resize(m_glyphs.size() + size);
m_positions.resize(m_glyphs.size());
- m_chars.resize(m_chars.size() + ti.num_chars);
glyph_t *glyphsDestination = m_glyphs.data() + currentItem.glyphOffset;
memcpy(glyphsDestination, glyphs.constData(), sizeof(glyph_t) * currentItem.numGlyphs);
@@ -476,21 +472,18 @@ namespace {
QFixedPoint *positionsDestination = m_positions.data() + currentItem.positionOffset;
memcpy(positionsDestination, positions.constData(), sizeof(QFixedPoint) * currentItem.numGlyphs);
- QChar *charsDestination = m_chars.data() + currentItem.charOffset;
- memcpy(charsDestination, ti.chars, sizeof(QChar) * currentItem.numChars);
-
m_items.append(currentItem);
}
- virtual void drawPolygon(const QPointF *, int , PolygonDrawMode )
+ virtual void drawPolygon(const QPointF *, int , PolygonDrawMode ) Q_DECL_OVERRIDE
{
/* intentionally empty */
}
- virtual bool begin(QPaintDevice *) { return true; }
- virtual bool end() { return true; }
- virtual void drawPixmap(const QRectF &, const QPixmap &, const QRectF &) {}
- virtual Type type() const
+ virtual bool begin(QPaintDevice *) Q_DECL_OVERRIDE { return true; }
+ virtual bool end() Q_DECL_OVERRIDE { return true; }
+ virtual void drawPixmap(const QRectF &, const QPixmap &, const QRectF &) Q_DECL_OVERRIDE {}
+ virtual Type type() const Q_DECL_OVERRIDE
{
return User;
}
@@ -510,16 +503,10 @@ namespace {
return m_glyphs;
}
- QVector<QChar> chars() const
- {
- return m_chars;
- }
-
private:
QVector<QStaticTextItem> m_items;
QVector<QFixedPoint> m_positions;
QVector<glyph_t> m_glyphs;
- QVector<QChar> m_chars;
bool m_dirtyPen;
bool m_useBackendOptimizations;
@@ -541,7 +528,7 @@ namespace {
delete m_paintEngine;
}
- int metric(PaintDeviceMetric m) const
+ int metric(PaintDeviceMetric m) const Q_DECL_OVERRIDE
{
int val;
switch (m) {
@@ -575,7 +562,7 @@ namespace {
return val;
}
- virtual QPaintEngine *paintEngine() const
+ virtual QPaintEngine *paintEngine() const Q_DECL_OVERRIDE
{
return m_paintEngine;
}
@@ -595,11 +582,6 @@ namespace {
return m_paintEngine->items();
}
- QVector<QChar> chars() const
- {
- return m_paintEngine->chars();
- }
-
private:
DrawTextItemRecorder *m_paintEngine;
};
@@ -677,7 +659,6 @@ void QStaticTextPrivate::init()
delete[] items;
delete[] glyphPool;
delete[] positionPool;
- delete[] charPool;
position = QPointF(0, 0);
@@ -693,7 +674,6 @@ void QStaticTextPrivate::init()
QVector<QStaticTextItem> deviceItems = device.items();
QVector<QFixedPoint> positions = device.positions();
QVector<glyph_t> glyphs = device.glyphs();
- QVector<QChar> chars = device.chars();
itemCount = deviceItems.size();
items = new QStaticTextItem[itemCount];
@@ -704,15 +684,11 @@ void QStaticTextPrivate::init()
positionPool = new QFixedPoint[positions.size()];
memcpy(positionPool, positions.constData(), positions.size() * sizeof(QFixedPoint));
- charPool = new QChar[chars.size()];
- memcpy(charPool, chars.constData(), chars.size() * sizeof(QChar));
-
for (int i=0; i<itemCount; ++i) {
items[i] = deviceItems.at(i);
items[i].glyphs = glyphPool + items[i].glyphOffset;
items[i].glyphPositions = positionPool + items[i].positionOffset;
- items[i].chars = charPool + items[i].charOffset;
}
needsRelayout = false;
diff --git a/src/gui/text/qstatictext_p.h b/src/gui/text/qstatictext_p.h
index 29db8836d9..694a2e4baa 100644
--- a/src/gui/text/qstatictext_p.h
+++ b/src/gui/text/qstatictext_p.h
@@ -70,7 +70,7 @@ public:
class Q_GUI_EXPORT QStaticTextItem
{
public:
- QStaticTextItem() : chars(0), numChars(0), useBackendOptimizations(false),
+ QStaticTextItem() : useBackendOptimizations(false),
userDataNeedsUpdate(0), usesRawFont(0),
m_fontEngine(0), m_userData(0) {}
@@ -83,9 +83,7 @@ public:
{
glyphPositions = other.glyphPositions;
glyphs = other.glyphs;
- chars = other.chars;
numGlyphs = other.numGlyphs;
- numChars = other.numChars;
font = other.font;
color = other.color;
useBackendOptimizations = other.useBackendOptimizations;
@@ -125,28 +123,22 @@ public:
glyph_t *glyphs; // 4 bytes per glyph
int glyphOffset;
};
- union {
- QChar *chars; // 2 bytes per glyph
- int charOffset;
- };
// =================
- // 14 bytes per glyph
+ // 12 bytes per glyph
- // 12 bytes for pointers
+ // 8 bytes for pointers
int numGlyphs; // 4 bytes per item
- int numChars; // 4 bytes per item
QFont font; // 8 bytes per item
QColor color; // 10 bytes per item
char useBackendOptimizations : 1; // 1 byte per item
char userDataNeedsUpdate : 1; //
char usesRawFont : 1; //
- // ================
- // 51 bytes per item
private: // Needs special handling in setters, so private to avoid abuse
QFontEngine *m_fontEngine; // 4 bytes per item
QStaticTextUserData *m_userData; // 8 bytes per item
-
+ // ================
+ // 43 bytes per item
};
class QStaticText;
@@ -179,7 +171,6 @@ public:
glyph_t *glyphPool; // 4 bytes per text
QFixedPoint *positionPool; // 4 bytes per text
- QChar *charPool; // 4 bytes per text
QTextOption textOption; // 28 bytes per text
@@ -188,7 +179,7 @@ public:
unsigned char textFormat : 2;
unsigned char untransformedCoordinates : 1;
// ================
- // 195 bytes per text
+ // 191 bytes per text
static QStaticTextPrivate *get(const QStaticText *q);
};
diff --git a/src/gui/text/qtextdocument.cpp b/src/gui/text/qtextdocument.cpp
index ea2b794feb..bd5877c924 100644
--- a/src/gui/text/qtextdocument.cpp
+++ b/src/gui/text/qtextdocument.cpp
@@ -40,6 +40,7 @@
#include "qtextlist.h"
#include <qdebug.h>
#include <qregexp.h>
+#include <qregularexpression.h>
#include <qvarlengtharray.h>
#include <qtextcodec.h>
#include <qthread.h>
@@ -1243,6 +1244,39 @@ void QTextDocument::setHtml(const QString &html)
\sa metaInformation(), setMetaInformation()
*/
+static bool findInBlock(const QTextBlock &block, const QString &expression, int offset,
+ QTextDocument::FindFlags options, QTextCursor *cursor)
+{
+ QString text = block.text();
+ text.replace(QChar::Nbsp, QLatin1Char(' '));
+ Qt::CaseSensitivity sensitivity = options & QTextDocument::FindCaseSensitively ? Qt::CaseSensitive : Qt::CaseInsensitive;
+ int idx = -1;
+
+ while (offset >= 0 && offset <= text.length()) {
+ idx = (options & QTextDocument::FindBackward) ?
+ text.lastIndexOf(expression, offset, sensitivity) : text.indexOf(expression, offset, sensitivity);
+ if (idx == -1)
+ return false;
+
+ if (options & QTextDocument::FindWholeWords) {
+ const int start = idx;
+ const int end = start + expression.length();
+ if ((start != 0 && text.at(start - 1).isLetterOrNumber())
+ || (end != text.length() && text.at(end).isLetterOrNumber())) {
+ //if this is not a whole word, continue the search in the string
+ offset = (options & QTextDocument::FindBackward) ? idx-1 : end+1;
+ idx = -1;
+ continue;
+ }
+ }
+ //we have a hit, return the cursor for that.
+ *cursor = QTextCursor(block.docHandle(), block.position() + idx);
+ cursor->setPosition(cursor->position() + expression.length(), QTextCursor::KeepAnchor);
+ return true;
+ }
+ return false;
+}
+
/*!
\fn QTextCursor QTextDocument::find(const QString &subString, int position, FindFlags options) const
@@ -1261,16 +1295,44 @@ void QTextDocument::setHtml(const QString &html)
*/
QTextCursor QTextDocument::find(const QString &subString, int from, FindFlags options) const
{
- QRegExp expr(subString);
- expr.setPatternSyntax(QRegExp::FixedString);
- expr.setCaseSensitivity((options & QTextDocument::FindCaseSensitively) ? Qt::CaseSensitive : Qt::CaseInsensitive);
+ Q_D(const QTextDocument);
+
+ if (subString.isEmpty())
+ return QTextCursor();
+
+ int pos = from;
+ //the cursor is positioned between characters, so for a backward search
+ //do not include the character given in the position.
+ if (options & FindBackward) {
+ --pos ;
+ if (pos < subString.size())
+ return QTextCursor();
+ }
- return find(expr, from, options);
+ QTextCursor cursor;
+ QTextBlock block = d->blocksFind(pos);
+ int blockOffset = pos - block.position();
+
+ if (!(options & FindBackward)) {
+ while (block.isValid()) {
+ if (findInBlock(block, subString, blockOffset, options, &cursor))
+ return cursor;
+ block = block.next();
+ blockOffset = 0;
+ }
+ } else {
+ while (block.isValid()) {
+ if (findInBlock(block, subString, blockOffset, options, &cursor))
+ return cursor;
+ block = block.previous();
+ blockOffset = block.length() - 2;
+ }
+ }
+
+ return QTextCursor();
}
/*!
- \fn QTextCursor QTextDocument::find(const QString &subString, const QTextCursor &cursor, FindFlags options) const
-
Finds the next occurrence of the string, \a subString, in the document.
The search starts at the position of the given \a cursor, and proceeds
forwards through the document unless specified otherwise in the search
@@ -1285,25 +1347,23 @@ QTextCursor QTextDocument::find(const QString &subString, int from, FindFlags op
By default the search is case-sensitive, and can match text anywhere in the
document.
*/
-QTextCursor QTextDocument::find(const QString &subString, const QTextCursor &from, FindFlags options) const
+QTextCursor QTextDocument::find(const QString &subString, const QTextCursor &cursor, FindFlags options) const
{
int pos = 0;
- if (!from.isNull()) {
+ if (!cursor.isNull()) {
if (options & QTextDocument::FindBackward)
- pos = from.selectionStart();
+ pos = cursor.selectionStart();
else
- pos = from.selectionEnd();
+ pos = cursor.selectionEnd();
}
- QRegExp expr(subString);
- expr.setPatternSyntax(QRegExp::FixedString);
- expr.setCaseSensitivity((options & QTextDocument::FindCaseSensitively) ? Qt::CaseSensitive : Qt::CaseInsensitive);
- return find(expr, pos, options);
+ return find(subString, pos, options);
}
+#ifndef QT_NO_REGEXP
static bool findInBlock(const QTextBlock &block, const QRegExp &expression, int offset,
- QTextDocument::FindFlags options, QTextCursor &cursor)
+ QTextDocument::FindFlags options, QTextCursor *cursor)
{
QRegExp expr(expression);
QString text = block.text();
@@ -1328,22 +1388,18 @@ static bool findInBlock(const QTextBlock &block, const QRegExp &expression, int
}
}
//we have a hit, return the cursor for that.
- break;
+ *cursor = QTextCursor(block.docHandle(), block.position() + idx);
+ cursor->setPosition(cursor->position() + expr.matchedLength(), QTextCursor::KeepAnchor);
+ return true;
}
- if (idx == -1)
- return false;
- cursor = QTextCursor(block.docHandle(), block.position() + idx);
- cursor.setPosition(cursor.position() + expr.matchedLength(), QTextCursor::KeepAnchor);
- return true;
+ return false;
}
/*!
- \fn QTextCursor QTextDocument::find(const QRegExp & expr, int position, FindFlags options) const
-
\overload
Finds the next occurrence, matching the regular expression, \a expr, in the document.
- The search starts at the given \a position, and proceeds forwards
+ The search starts at the given \a from position, and proceeds forwards
through the document unless specified otherwise in the search options.
The \a options control the type of search performed. The FindCaseSensitively
option is ignored for this overload, use QRegExp::caseSensitivity instead.
@@ -1351,7 +1407,7 @@ static bool findInBlock(const QTextBlock &block, const QRegExp &expression, int
Returns a cursor with the match selected if a match was found; otherwise
returns a null cursor.
- If the \a position is 0 (the default) the search begins from the beginning
+ If the \a from position is 0 (the default) the search begins from the beginning
of the document; otherwise it begins at the specified position.
*/
QTextCursor QTextDocument::find(const QRegExp & expr, int from, FindFlags options) const
@@ -1372,19 +1428,17 @@ QTextCursor QTextDocument::find(const QRegExp & expr, int from, FindFlags option
QTextCursor cursor;
QTextBlock block = d->blocksFind(pos);
-
+ int blockOffset = pos - block.position();
if (!(options & FindBackward)) {
- int blockOffset = qMax(0, pos - block.position());
while (block.isValid()) {
- if (findInBlock(block, expr, blockOffset, options, cursor))
+ if (findInBlock(block, expr, blockOffset, options, &cursor))
return cursor;
- blockOffset = 0;
block = block.next();
+ blockOffset = 0;
}
} else {
- int blockOffset = pos - block.position();
while (block.isValid()) {
- if (findInBlock(block, expr, blockOffset, options, cursor))
+ if (findInBlock(block, expr, blockOffset, options, &cursor))
return cursor;
block = block.previous();
blockOffset = block.length() - 1;
@@ -1395,10 +1449,10 @@ QTextCursor QTextDocument::find(const QRegExp & expr, int from, FindFlags option
}
/*!
- \fn QTextCursor QTextDocument::find(const QRegExp &expr, const QTextCursor &cursor, FindFlags options) const
+ \overload
Finds the next occurrence, matching the regular expression, \a expr, in the document.
- The search starts at the position of the given \a cursor, and proceeds
+ The search starts at the position of the given \a from cursor, and proceeds
forwards through the document unless specified otherwise in the search
options. The \a options control the type of search performed. The FindCaseSensitively
option is ignored for this overload, use QRegExp::caseSensitivity instead.
@@ -1406,24 +1460,147 @@ QTextCursor QTextDocument::find(const QRegExp & expr, int from, FindFlags option
Returns a cursor with the match selected if a match was found; otherwise
returns a null cursor.
- If the given \a cursor has a selection, the search begins after the
+ If the given \a from cursor has a selection, the search begins after the
selection; otherwise it begins at the cursor's position.
By default the search is case-sensitive, and can match text anywhere in the
document.
*/
-QTextCursor QTextDocument::find(const QRegExp &expr, const QTextCursor &from, FindFlags options) const
+QTextCursor QTextDocument::find(const QRegExp &expr, const QTextCursor &cursor, FindFlags options) const
{
int pos = 0;
- if (!from.isNull()) {
+ if (!cursor.isNull()) {
if (options & QTextDocument::FindBackward)
- pos = from.selectionStart();
+ pos = cursor.selectionStart();
else
- pos = from.selectionEnd();
+ pos = cursor.selectionEnd();
}
return find(expr, pos, options);
}
+#endif // QT_REGEXP
+
+#ifndef QT_NO_REGULAREXPRESSION
+static bool findInBlock(const QTextBlock &block, const QRegularExpression &expression, int offset,
+ QTextDocument::FindFlags options, QTextCursor *cursor)
+{
+ QRegularExpression expr(expression);
+ if (!(options & QTextDocument::FindCaseSensitively))
+ expr.setPatternOptions(expr.patternOptions() | QRegularExpression::CaseInsensitiveOption);
+ else
+ expr.setPatternOptions(expr.patternOptions() & ~QRegularExpression::CaseInsensitiveOption);
+
+ QString text = block.text();
+ text.replace(QChar::Nbsp, QLatin1Char(' '));
+ QRegularExpressionMatch match;
+ int idx = -1;
+
+ while (offset >= 0 && offset <= text.length()) {
+ idx = (options & QTextDocument::FindBackward) ?
+ text.lastIndexOf(expr, offset, &match) : text.indexOf(expr, offset, &match);
+ if (idx == -1)
+ return false;
+
+ if (options & QTextDocument::FindWholeWords) {
+ const int start = idx;
+ const int end = start + match.capturedLength();
+ if ((start != 0 && text.at(start - 1).isLetterOrNumber())
+ || (end != text.length() && text.at(end).isLetterOrNumber())) {
+ //if this is not a whole word, continue the search in the string
+ offset = (options & QTextDocument::FindBackward) ? idx-1 : end+1;
+ idx = -1;
+ continue;
+ }
+ }
+ //we have a hit, return the cursor for that.
+ *cursor = QTextCursor(block.docHandle(), block.position() + idx);
+ cursor->setPosition(cursor->position() + match.capturedLength(), QTextCursor::KeepAnchor);
+ return true;
+ }
+ return false;
+}
+
+/*!
+ \since 5.5
+
+ Finds the next occurrence, matching the regular expression, \a expr, in the document.
+ The search starts at the given \a from position, and proceeds forwards
+ through the document unless specified otherwise in the search options.
+ The \a options control the type of search performed.
+
+ Returns a cursor with the match selected if a match was found; otherwise
+ returns a null cursor.
+
+ If the \a from position is 0 (the default) the search begins from the beginning
+ of the document; otherwise it begins at the specified position.
+*/
+QTextCursor QTextDocument::find(const QRegularExpression &expr, int from, FindFlags options) const
+{
+ Q_D(const QTextDocument);
+
+ if (!expr.isValid())
+ return QTextCursor();
+
+ int pos = from;
+ //the cursor is positioned between characters, so for a backward search
+ //do not include the character given in the position.
+ if (options & FindBackward) {
+ --pos ;
+ if (pos < 0)
+ return QTextCursor();
+ }
+
+ QTextCursor cursor;
+ QTextBlock block = d->blocksFind(pos);
+ int blockOffset = pos - block.position();
+ if (!(options & FindBackward)) {
+ while (block.isValid()) {
+ if (findInBlock(block, expr, blockOffset, options, &cursor))
+ return cursor;
+ block = block.next();
+ blockOffset = 0;
+ }
+ } else {
+ while (block.isValid()) {
+ if (findInBlock(block, expr, blockOffset, options, &cursor))
+ return cursor;
+ block = block.previous();
+ blockOffset = block.length() - 1;
+ }
+ }
+
+ return QTextCursor();
+}
+
+/*!
+ \since 5.5
+
+ Finds the next occurrence, matching the regular expression, \a expr, in the document.
+ The search starts at the position of the given \a cursor, and proceeds
+ forwards through the document unless specified otherwise in the search
+ options. The \a options control the type of search performed.
+
+ Returns a cursor with the match selected if a match was found; otherwise
+ returns a null cursor.
+
+ If the given \a cursor has a selection, the search begins after the
+ selection; otherwise it begins at the cursor's position.
+
+ By default the search is case-sensitive, and can match text anywhere in the
+ document.
+*/
+QTextCursor QTextDocument::find(const QRegularExpression &expr, const QTextCursor &cursor, FindFlags options) const
+{
+ int pos = 0;
+ if (!cursor.isNull()) {
+ if (options & QTextDocument::FindBackward)
+ pos = cursor.selectionStart();
+ else
+ pos = cursor.selectionEnd();
+ }
+ return find(expr, pos, options);
+}
+#endif // QT_NO_REGULAREXPRESSION
/*!
\fn QTextObject *QTextDocument::createObject(const QTextFormat &format)
diff --git a/src/gui/text/qtextdocument.h b/src/gui/text/qtextdocument.h
index 2329a9e721..271c29b16b 100644
--- a/src/gui/text/qtextdocument.h
+++ b/src/gui/text/qtextdocument.h
@@ -160,10 +160,17 @@ public:
Q_DECLARE_FLAGS(FindFlags, FindFlag)
QTextCursor find(const QString &subString, int from = 0, FindFlags options = 0) const;
- QTextCursor find(const QString &subString, const QTextCursor &from, FindFlags options = 0) const;
+ QTextCursor find(const QString &subString, const QTextCursor &cursor, FindFlags options = 0) const;
+#ifndef QT_NO_REGEXP
QTextCursor find(const QRegExp &expr, int from = 0, FindFlags options = 0) const;
- QTextCursor find(const QRegExp &expr, const QTextCursor &from, FindFlags options = 0) const;
+ QTextCursor find(const QRegExp &expr, const QTextCursor &cursor, FindFlags options = 0) const;
+#endif
+
+#ifndef QT_NO_REGULAREXPRESSION
+ QTextCursor find(const QRegularExpression &expr, int from = 0, FindFlags options = 0) const;
+ QTextCursor find(const QRegularExpression &expr, const QTextCursor &cursor, FindFlags options = 0) const;
+#endif
QTextFrame *frameAt(int pos) const;
QTextFrame *rootFrame() const;
diff --git a/src/gui/text/qtextdocument_p.cpp b/src/gui/text/qtextdocument_p.cpp
index 8ff15106e3..d30ff78b8f 100644
--- a/src/gui/text/qtextdocument_p.cpp
+++ b/src/gui/text/qtextdocument_p.cpp
@@ -125,14 +125,12 @@ static bool isValidBlockSeparator(QChar ch)
|| ch == QTextEndOfFrame;
}
-#if !defined(QT_NO_DEBUG) || defined(QT_FORCE_ASSERTS)
static bool noBlockInString(const QString &str)
{
return !str.contains(QChar::ParagraphSeparator)
&& !str.contains(QTextBeginningOfFrame)
&& !str.contains(QTextEndOfFrame);
}
-#endif
bool QTextUndoCommand::tryMerge(const QTextUndoCommand &other)
{
diff --git a/src/gui/text/qtextdocumentlayout.cpp b/src/gui/text/qtextdocumentlayout.cpp
index 163d51aec2..a96a8e18e6 100644
--- a/src/gui/text/qtextdocumentlayout.cpp
+++ b/src/gui/text/qtextdocumentlayout.cpp
@@ -383,12 +383,12 @@ struct QCheckPoint
};
Q_DECLARE_TYPEINFO(QCheckPoint, Q_PRIMITIVE_TYPE);
-Q_STATIC_GLOBAL_OPERATOR bool operator<(const QCheckPoint &checkPoint, QFixed y)
+static bool operator<(const QCheckPoint &checkPoint, QFixed y)
{
return checkPoint.y < y;
}
-Q_STATIC_GLOBAL_OPERATOR bool operator<(const QCheckPoint &checkPoint, int pos)
+static bool operator<(const QCheckPoint &checkPoint, int pos)
{
return checkPoint.positionInFrame < pos;
}
@@ -396,17 +396,17 @@ Q_STATIC_GLOBAL_OPERATOR bool operator<(const QCheckPoint &checkPoint, int pos)
#if defined(Q_CC_MSVC) && _MSC_VER < 1600
//The STL implementation of MSVC 2008 requires the definitions
-Q_STATIC_GLOBAL_OPERATOR bool operator<(const QCheckPoint &checkPoint1, const QCheckPoint &checkPoint2)
+static bool operator<(const QCheckPoint &checkPoint1, const QCheckPoint &checkPoint2)
{
return checkPoint1.y < checkPoint2.y;
}
-Q_STATIC_GLOBAL_OPERATOR bool operator<(QFixed y, const QCheckPoint &checkPoint)
+static bool operator<(QFixed y, const QCheckPoint &checkPoint)
{
return y < checkPoint.y;
}
-Q_STATIC_GLOBAL_OPERATOR bool operator<(int pos, const QCheckPoint &checkPoint)
+static bool operator<(int pos, const QCheckPoint &checkPoint)
{
return pos < checkPoint.positionInFrame;
}
diff --git a/src/gui/text/qtextdocumentlayout_p.h b/src/gui/text/qtextdocumentlayout_p.h
index f72a177d13..70c256ce89 100644
--- a/src/gui/text/qtextdocumentlayout_p.h
+++ b/src/gui/text/qtextdocumentlayout_p.h
@@ -66,11 +66,11 @@ public:
explicit QTextDocumentLayout(QTextDocument *doc);
// from the abstract layout
- void draw(QPainter *painter, const PaintContext &context);
- int hitTest(const QPointF &point, Qt::HitTestAccuracy accuracy) const;
+ void draw(QPainter *painter, const PaintContext &context) Q_DECL_OVERRIDE;
+ int hitTest(const QPointF &point, Qt::HitTestAccuracy accuracy) const Q_DECL_OVERRIDE;
- int pageCount() const;
- QSizeF documentSize() const;
+ int pageCount() const Q_DECL_OVERRIDE;
+ QSizeF documentSize() const Q_DECL_OVERRIDE;
void setCursorWidth(int width);
int cursorWidth() const;
@@ -81,8 +81,8 @@ public:
// internal for QTextEdit's NoWrap mode
void setViewport(const QRectF &viewport);
- virtual QRectF frameBoundingRect(QTextFrame *frame) const;
- virtual QRectF blockBoundingRect(const QTextBlock &block) const;
+ virtual QRectF frameBoundingRect(QTextFrame *frame) const Q_DECL_OVERRIDE;
+ virtual QRectF blockBoundingRect(const QTextBlock &block) const Q_DECL_OVERRIDE;
QRectF tableBoundingRect(QTextTable *table) const;
QRectF tableCellBoundingRect(QTextTable *table, const QTextTableCell &cell) const;
@@ -97,12 +97,12 @@ public:
bool contentHasAlignment() const;
protected:
- void documentChanged(int from, int oldLength, int length);
- void resizeInlineObject(QTextInlineObject item, int posInDocument, const QTextFormat &format);
- void positionInlineObject(QTextInlineObject item, int posInDocument, const QTextFormat &format);
+ void documentChanged(int from, int oldLength, int length) Q_DECL_OVERRIDE;
+ void resizeInlineObject(QTextInlineObject item, int posInDocument, const QTextFormat &format) Q_DECL_OVERRIDE;
+ void positionInlineObject(QTextInlineObject item, int posInDocument, const QTextFormat &format) Q_DECL_OVERRIDE;
void drawInlineObject(QPainter *p, const QRectF &rect, QTextInlineObject item,
- int posInDocument, const QTextFormat &format);
- virtual void timerEvent(QTimerEvent *e);
+ int posInDocument, const QTextFormat &format) Q_DECL_OVERRIDE;
+ virtual void timerEvent(QTimerEvent *e) Q_DECL_OVERRIDE;
private:
QRectF doLayout(int from, int oldLength, int length);
void layoutFinished();
diff --git a/src/gui/text/qtextengine.cpp b/src/gui/text/qtextengine.cpp
index d156124b98..ff84bc0cca 100644
--- a/src/gui/text/qtextengine.cpp
+++ b/src/gui/text/qtextengine.cpp
@@ -1950,7 +1950,7 @@ QFontEngine *QTextEngine::fontEngine(const QScriptItem &si, QFixed *ascent, QFix
if (feCache.prevFontEngine && feCache.prevFontEngine->type() == QFontEngine::Multi && feCache.prevScript == script) {
engine = feCache.prevFontEngine;
} else {
- engine = QFontEngineMultiBasicImpl::createMultiFontEngine(rawFont.d->fontEngine, script);
+ engine = QFontEngineMulti::createMultiFontEngine(rawFont.d->fontEngine, script);
feCache.prevFontEngine = engine;
feCache.prevScript = script;
engine->ref.ref();
@@ -1965,7 +1965,7 @@ QFontEngine *QTextEngine::fontEngine(const QScriptItem &si, QFixed *ascent, QFix
} else {
QFontEngine *scEngine = rawFont.d->fontEngine->cloneWithSize(smallCapsFraction * rawFont.pixelSize());
scEngine->ref.ref();
- scaledEngine = QFontEngineMultiBasicImpl::createMultiFontEngine(scEngine, script);
+ scaledEngine = QFontEngineMulti::createMultiFontEngine(scEngine, script);
scaledEngine->ref.ref();
feCache.prevScaledFontEngine = scaledEngine;
// If scEngine is not ref'ed by scaledEngine, make sure it is deallocated and not leaked.
diff --git a/src/gui/text/qtextformat.cpp b/src/gui/text/qtextformat.cpp
index ecd87188e7..ab4b10522a 100644
--- a/src/gui/text/qtextformat.cpp
+++ b/src/gui/text/qtextformat.cpp
@@ -258,20 +258,6 @@ private:
friend QDataStream &operator>>(QDataStream &, QTextFormat &);
};
-// this is only safe because sizeof(int) == sizeof(float)
-static inline uint hash(float d)
-{
-#ifdef Q_CC_GNU
- // this is a GCC extension and isn't guaranteed to work in other compilers
- // the reinterpret_cast below generates a strict-aliasing warning with GCC
- union { float f; uint u; } cvt;
- cvt.f = d;
- return cvt.u;
-#else
- return reinterpret_cast<uint&>(d);
-#endif
-}
-
static inline uint hash(const QColor &color)
{
return (color.isValid()) ? color.rgba() : 0x234109;
@@ -279,7 +265,7 @@ static inline uint hash(const QColor &color)
static inline uint hash(const QPen &pen)
{
- return hash(pen.color()) + hash(pen.widthF());
+ return hash(pen.color()) + qHash(pen.widthF());
}
static inline uint hash(const QBrush &brush)
@@ -292,7 +278,7 @@ static inline uint variantHash(const QVariant &variant)
// simple and fast hash functions to differentiate between type and value
switch (variant.userType()) { // sorted by occurrence frequency
case QVariant::String: return qHash(variant.toString());
- case QVariant::Double: return hash(variant.toDouble());
+ case QVariant::Double: return qHash(variant.toDouble());
case QVariant::Int: return 0x811890 + variant.toInt();
case QVariant::Brush:
return 0x01010101 + hash(qvariant_cast<QBrush>(variant));
@@ -303,7 +289,7 @@ static inline uint variantHash(const QVariant &variant)
case QVariant::Color: return hash(qvariant_cast<QColor>(variant));
case QVariant::TextLength:
return 0x377 + hash(qvariant_cast<QTextLength>(variant).rawValue());
- case QMetaType::Float: return hash(variant.toFloat());
+ case QMetaType::Float: return qHash(variant.toFloat());
case QVariant::Invalid: return 0;
default: break;
}
diff --git a/src/gui/text/qtexthtmlparser.cpp b/src/gui/text/qtexthtmlparser.cpp
index e1a7781722..c7237e9e38 100644
--- a/src/gui/text/qtexthtmlparser.cpp
+++ b/src/gui/text/qtexthtmlparser.cpp
@@ -45,7 +45,6 @@
#include "qtextdocument_p.h"
#include "qtextcursor.h"
#include "qfont_p.h"
-#include "private/qfunctions_p.h"
#include <algorithm>
@@ -323,12 +322,12 @@ bool operator<(const QTextHtmlEntity &entity1, const QTextHtmlEntity &entity2)
}
#endif
-Q_STATIC_GLOBAL_OPERATOR bool operator<(const QString &entityStr, const QTextHtmlEntity &entity)
+static bool operator<(const QString &entityStr, const QTextHtmlEntity &entity)
{
return entityStr < QLatin1String(entity.name);
}
-Q_STATIC_GLOBAL_OPERATOR bool operator<(const QTextHtmlEntity &entity, const QString &entityStr)
+static bool operator<(const QTextHtmlEntity &entity, const QString &entityStr)
{
return QLatin1String(entity.name) < entityStr;
}
@@ -443,18 +442,18 @@ static const QTextHtmlElement elements[Html_NumElements]= {
};
#if defined(Q_CC_MSVC) && _MSC_VER < 1600
-Q_STATIC_GLOBAL_OPERATOR bool operator<(const QTextHtmlElement &e1, const QTextHtmlElement &e2)
+static bool operator<(const QTextHtmlElement &e1, const QTextHtmlElement &e2)
{
return QLatin1String(e1.name) < QLatin1String(e2.name);
}
#endif
-Q_STATIC_GLOBAL_OPERATOR bool operator<(const QString &str, const QTextHtmlElement &e)
+static bool operator<(const QString &str, const QTextHtmlElement &e)
{
return str < QLatin1String(e.name);
}
-Q_STATIC_GLOBAL_OPERATOR bool operator<(const QTextHtmlElement &e, const QString &str)
+static bool operator<(const QTextHtmlElement &e, const QString &str)
{
return QLatin1String(e.name) < str;
}
@@ -1713,14 +1712,14 @@ public:
inline QTextHtmlStyleSelector(const QTextHtmlParser *parser)
: parser(parser) { nameCaseSensitivity = Qt::CaseInsensitive; }
- virtual QStringList nodeNames(NodePtr node) const;
- virtual QString attribute(NodePtr node, const QString &name) const;
- virtual bool hasAttributes(NodePtr node) const;
- virtual bool isNullNode(NodePtr node) const;
- virtual NodePtr parentNode(NodePtr node) const;
- virtual NodePtr previousSiblingNode(NodePtr node) const;
- virtual NodePtr duplicateNode(NodePtr node) const;
- virtual void freeNode(NodePtr node) const;
+ virtual QStringList nodeNames(NodePtr node) const Q_DECL_OVERRIDE;
+ virtual QString attribute(NodePtr node, const QString &name) const Q_DECL_OVERRIDE;
+ virtual bool hasAttributes(NodePtr node) const Q_DECL_OVERRIDE;
+ virtual bool isNullNode(NodePtr node) const Q_DECL_OVERRIDE;
+ virtual NodePtr parentNode(NodePtr node) const Q_DECL_OVERRIDE;
+ virtual NodePtr previousSiblingNode(NodePtr node) const Q_DECL_OVERRIDE;
+ virtual NodePtr duplicateNode(NodePtr node) const Q_DECL_OVERRIDE;
+ virtual void freeNode(NodePtr node) const Q_DECL_OVERRIDE;
private:
const QTextHtmlParser *parser;
diff --git a/src/gui/text/qtextimagehandler_p.h b/src/gui/text/qtextimagehandler_p.h
index c986c81f8b..e3e37ba1c1 100644
--- a/src/gui/text/qtextimagehandler_p.h
+++ b/src/gui/text/qtextimagehandler_p.h
@@ -60,8 +60,8 @@ class Q_GUI_EXPORT QTextImageHandler : public QObject,
public:
explicit QTextImageHandler(QObject *parent = 0);
- virtual QSizeF intrinsicSize(QTextDocument *doc, int posInDocument, const QTextFormat &format);
- virtual void drawObject(QPainter *p, const QRectF &rect, QTextDocument *doc, int posInDocument, const QTextFormat &format);
+ virtual QSizeF intrinsicSize(QTextDocument *doc, int posInDocument, const QTextFormat &format) Q_DECL_OVERRIDE;
+ virtual void drawObject(QPainter *p, const QRectF &rect, QTextDocument *doc, int posInDocument, const QTextFormat &format) Q_DECL_OVERRIDE;
QImage image(QTextDocument *doc, const QTextImageFormat &imageFormat);
};
diff --git a/src/gui/text/qtextodfwriter.cpp b/src/gui/text/qtextodfwriter.cpp
index ef7bbb44ff..2c61d2cfd4 100644
--- a/src/gui/text/qtextodfwriter.cpp
+++ b/src/gui/text/qtextodfwriter.cpp
@@ -88,7 +88,7 @@ public:
if (contentStream)
contentStream->close();
}
- virtual void addFile(const QString &, const QString &, const QByteArray &)
+ virtual void addFile(const QString &, const QString &, const QByteArray &) Q_DECL_OVERRIDE
{
// we ignore this...
}
@@ -131,7 +131,7 @@ public:
zip.close();
}
- virtual void addFile(const QString &fileName, const QString &mimeType, const QByteArray &bytes)
+ virtual void addFile(const QString &fileName, const QString &mimeType, const QByteArray &bytes) Q_DECL_OVERRIDE
{
zip.addFile(fileName, bytes);
addFile(fileName, mimeType);
diff --git a/src/gui/text/qtexttable.cpp b/src/gui/text/qtexttable.cpp
index c2cc822ad6..7bb7056395 100644
--- a/src/gui/text/qtexttable.cpp
+++ b/src/gui/text/qtexttable.cpp
@@ -37,7 +37,6 @@
#include <qdebug.h>
#include "qtexttable_p.h"
#include "qvarlengtharray.h"
-#include "private/qfunctions_p.h"
#include <algorithm>
#include <stdlib.h>
@@ -371,12 +370,12 @@ struct QFragmentFindHelper
const QTextDocumentPrivate::FragmentMap &fragmentMap;
};
-Q_STATIC_GLOBAL_INLINE_OPERATOR bool operator<(int fragment, const QFragmentFindHelper &helper)
+static inline bool operator<(int fragment, const QFragmentFindHelper &helper)
{
return helper.fragmentMap.position(fragment) < helper.pos;
}
-Q_STATIC_GLOBAL_INLINE_OPERATOR bool operator<(const QFragmentFindHelper &helper, int fragment)
+static inline bool operator<(const QFragmentFindHelper &helper, int fragment)
{
return helper.pos < helper.fragmentMap.position(fragment);
}
diff --git a/src/gui/text/qtexttable_p.h b/src/gui/text/qtexttable_p.h
index 0459242ae9..48c72eeef1 100644
--- a/src/gui/text/qtexttable_p.h
+++ b/src/gui/text/qtexttable_p.h
@@ -58,8 +58,8 @@ public:
~QTextTablePrivate();
static QTextTable *createTable(QTextDocumentPrivate *, int pos, int rows, int cols, const QTextTableFormat &tableFormat);
- void fragmentAdded(QChar type, uint fragment);
- void fragmentRemoved(QChar type, uint fragment);
+ void fragmentAdded(QChar type, uint fragment) Q_DECL_OVERRIDE;
+ void fragmentRemoved(QChar type, uint fragment) Q_DECL_OVERRIDE;
void update() const;
diff --git a/src/gui/util/qabstractlayoutstyleinfo.cpp b/src/gui/util/qabstractlayoutstyleinfo.cpp
index 4338a0ccbf..af4ad0470b 100644
--- a/src/gui/util/qabstractlayoutstyleinfo.cpp
+++ b/src/gui/util/qabstractlayoutstyleinfo.cpp
@@ -35,11 +35,4 @@
QT_BEGIN_NAMESPACE
-bool QAbstractLayoutStyleInfo::hasChanged() const
-{
- if (m_changed == Unknown)
- m_changed = hasChangedCore() ? Changed : Unchanged;
- return m_changed == Changed;
-}
-
QT_END_NAMESPACE
diff --git a/src/gui/util/qabstractlayoutstyleinfo_p.h b/src/gui/util/qabstractlayoutstyleinfo_p.h
index 3479c47c4e..d64cb94aa4 100644
--- a/src/gui/util/qabstractlayoutstyleinfo_p.h
+++ b/src/gui/util/qabstractlayoutstyleinfo_p.h
@@ -53,13 +53,8 @@ QT_BEGIN_NAMESPACE
class Q_GUI_EXPORT QAbstractLayoutStyleInfo {
public:
- typedef enum {
- Unknown = 0,
- Changed,
- Unchanged
- } ChangedState;
- QAbstractLayoutStyleInfo() : m_isWindow(false), m_changed(Changed) {}
+ QAbstractLayoutStyleInfo() : m_isWindow(false) {}
virtual ~QAbstractLayoutStyleInfo() {}
virtual qreal combinedLayoutSpacing(QLayoutPolicy::ControlTypes /*controls1*/,
QLayoutPolicy::ControlTypes /*controls2*/, Qt::Orientation /*orientation*/) const {
@@ -74,15 +69,9 @@ public:
virtual qreal spacing(Qt::Orientation orientation) const = 0;
- virtual bool hasChangedCore() const = 0;
+ virtual bool hasChangedCore() const { return false; } // ### Remove when usage is gone from subclasses
- void updateChanged(ChangedState change) {
- m_changed = change;
- }
-
- bool hasChanged() const;
-
- virtual void invalidate() { updateChanged(Changed);}
+ virtual void invalidate() { }
virtual qreal windowMargin(Qt::Orientation orientation) const = 0;
@@ -92,7 +81,9 @@ public:
protected:
unsigned m_isWindow : 1;
- mutable unsigned m_changed : 2;
+ mutable unsigned m_hSpacingState: 2;
+ mutable unsigned m_vSpacingState: 2;
+ mutable qreal m_spacing[2];
};
QT_END_NAMESPACE
diff --git a/src/gui/util/qgridlayoutengine.cpp b/src/gui/util/qgridlayoutengine.cpp
index 65f2297fce..b58096a231 100644
--- a/src/gui/util/qgridlayoutengine.cpp
+++ b/src/gui/util/qgridlayoutengine.cpp
@@ -1367,7 +1367,7 @@ void QGridLayoutEngine::fillRowData(QGridLayoutRowData *rowData,
rowStretch = qMax(rowStretch, itemStretch);
} else {
QGridLayoutMultiCellData &multiCell =
- rowData->multiCellMap[qMakePair(row, effectiveRowSpan)];
+ rowData->multiCellMap[qMakePair(row, itemRowSpan)];
box = &multiCell.q_box;
multiCell.q_stretch = itemStretch;
}
@@ -1590,7 +1590,7 @@ Qt::Orientation QGridLayoutEngine::constraintOrientation() const
void QGridLayoutEngine::ensureGeometries(const QSizeF &size,
const QAbstractLayoutStyleInfo *styleInfo) const
{
- if (!styleInfo->hasChanged() && q_cachedSize == size)
+ if (q_cachedSize == size)
return;
q_cachedSize = size;
diff --git a/src/gui/util/qvalidator.h b/src/gui/util/qvalidator.h
index f09c349ac8..d78a96de3f 100644
--- a/src/gui/util/qvalidator.h
+++ b/src/gui/util/qvalidator.h
@@ -90,8 +90,8 @@ public:
QIntValidator(int bottom, int top, QObject *parent = 0);
~QIntValidator();
- QValidator::State validate(QString &, int &) const;
- void fixup(QString &input) const;
+ QValidator::State validate(QString &, int &) const Q_DECL_OVERRIDE;
+ void fixup(QString &input) const Q_DECL_OVERRIDE;
void setBottom(int);
void setTop(int);
@@ -132,7 +132,7 @@ public:
StandardNotation,
ScientificNotation
};
- QValidator::State validate(QString &, int &) const;
+ QValidator::State validate(QString &, int &) const Q_DECL_OVERRIDE;
virtual void setRange(double bottom, double top, int decimals = 0);
void setBottom(double);
@@ -171,7 +171,7 @@ public:
explicit QRegExpValidator(const QRegExp& rx, QObject *parent = 0);
~QRegExpValidator();
- virtual QValidator::State validate(QString& input, int& pos) const;
+ virtual QValidator::State validate(QString& input, int& pos) const Q_DECL_OVERRIDE;
void setRegExp(const QRegExp& rx);
const QRegExp& regExp() const { return r; }
diff --git a/src/network/access/qhttpmultipart_p.h b/src/network/access/qhttpmultipart_p.h
index f00883afd0..307843ea27 100644
--- a/src/network/access/qhttpmultipart_p.h
+++ b/src/network/access/qhttpmultipart_p.h
@@ -117,30 +117,30 @@ public:
~QHttpMultiPartIODevice() {
}
- virtual bool atEnd() const {
+ virtual bool atEnd() const Q_DECL_OVERRIDE {
return readPointer == size();
}
- virtual qint64 bytesAvailable() const {
+ virtual qint64 bytesAvailable() const Q_DECL_OVERRIDE {
return size() - readPointer;
}
- virtual void close() {
+ virtual void close() Q_DECL_OVERRIDE {
readPointer = 0;
partOffsets.clear();
deviceSize = -1;
QIODevice::close();
}
- virtual qint64 bytesToWrite() const {
+ virtual qint64 bytesToWrite() const Q_DECL_OVERRIDE {
return 0;
}
- virtual qint64 size() const;
- virtual bool isSequential() const;
- virtual bool reset();
- virtual qint64 readData(char *data, qint64 maxSize);
- virtual qint64 writeData(const char *data, qint64 maxSize);
+ virtual qint64 size() const Q_DECL_OVERRIDE;
+ virtual bool isSequential() const Q_DECL_OVERRIDE;
+ virtual bool reset() Q_DECL_OVERRIDE;
+ virtual qint64 readData(char *data, qint64 maxSize) Q_DECL_OVERRIDE;
+ virtual qint64 writeData(const char *data, qint64 maxSize) Q_DECL_OVERRIDE;
QHttpMultiPartPrivate *multiPart;
qint64 readPointer;
diff --git a/src/network/access/qhttpnetworkconnection.cpp b/src/network/access/qhttpnetworkconnection.cpp
index 365ce55f2b..6caf118c59 100644
--- a/src/network/access/qhttpnetworkconnection.cpp
+++ b/src/network/access/qhttpnetworkconnection.cpp
@@ -385,11 +385,12 @@ void QHttpNetworkConnectionPrivate::copyCredentials(int fromChannel, QAuthentica
Q_ASSERT(auth);
// NTLM is a multi phase authentication. Copying credentials between authenticators would mess things up.
- if (!isProxy && channels[fromChannel].authMethod == QAuthenticatorPrivate::Ntlm)
- return;
- if (isProxy && channels[fromChannel].proxyAuthMethod == QAuthenticatorPrivate::Ntlm)
- return;
-
+ if (fromChannel >= 0) {
+ if (!isProxy && channels[fromChannel].authMethod == QAuthenticatorPrivate::Ntlm)
+ return;
+ if (isProxy && channels[fromChannel].proxyAuthMethod == QAuthenticatorPrivate::Ntlm)
+ return;
+ }
// select another channel
QAuthenticator* otherAuth = 0;
diff --git a/src/network/access/qhttpnetworkconnection_p.h b/src/network/access/qhttpnetworkconnection_p.h
index e34c15d729..a65f9018fe 100644
--- a/src/network/access/qhttpnetworkconnection_p.h
+++ b/src/network/access/qhttpnetworkconnection_p.h
@@ -79,6 +79,7 @@ QT_BEGIN_NAMESPACE
class QHttpNetworkRequest;
class QHttpNetworkReply;
+class QHttpThreadDelegate;
class QByteArray;
class QHostInfo;
@@ -148,6 +149,7 @@ public:
private:
Q_DECLARE_PRIVATE(QHttpNetworkConnection)
Q_DISABLE_COPY(QHttpNetworkConnection)
+ friend class QHttpThreadDelegate;
friend class QHttpNetworkReply;
friend class QHttpNetworkReplyPrivate;
friend class QHttpNetworkConnectionChannel;
diff --git a/src/network/access/qhttpnetworkreply_p.h b/src/network/access/qhttpnetworkreply_p.h
index 6163f6c789..7a13358a4b 100644
--- a/src/network/access/qhttpnetworkreply_p.h
+++ b/src/network/access/qhttpnetworkreply_p.h
@@ -82,18 +82,18 @@ public:
explicit QHttpNetworkReply(const QUrl &url = QUrl(), QObject *parent = 0);
virtual ~QHttpNetworkReply();
- QUrl url() const;
- void setUrl(const QUrl &url);
+ QUrl url() const Q_DECL_OVERRIDE;
+ void setUrl(const QUrl &url) Q_DECL_OVERRIDE;
- int majorVersion() const;
- int minorVersion() const;
+ int majorVersion() const Q_DECL_OVERRIDE;
+ int minorVersion() const Q_DECL_OVERRIDE;
- qint64 contentLength() const;
- void setContentLength(qint64 length);
+ qint64 contentLength() const Q_DECL_OVERRIDE;
+ void setContentLength(qint64 length) Q_DECL_OVERRIDE;
- QList<QPair<QByteArray, QByteArray> > header() const;
- QByteArray headerField(const QByteArray &name, const QByteArray &defaultValue = QByteArray()) const;
- void setHeaderField(const QByteArray &name, const QByteArray &data);
+ QList<QPair<QByteArray, QByteArray> > header() const Q_DECL_OVERRIDE;
+ QByteArray headerField(const QByteArray &name, const QByteArray &defaultValue = QByteArray()) const Q_DECL_OVERRIDE;
+ void setHeaderField(const QByteArray &name, const QByteArray &data) Q_DECL_OVERRIDE;
void parseHeader(const QByteArray &header); // mainly for testing
QHttpNetworkRequest request() const;
diff --git a/src/network/access/qhttpnetworkrequest_p.h b/src/network/access/qhttpnetworkrequest_p.h
index d6683afa20..f39f3c7b6f 100644
--- a/src/network/access/qhttpnetworkrequest_p.h
+++ b/src/network/access/qhttpnetworkrequest_p.h
@@ -81,18 +81,18 @@ public:
QHttpNetworkRequest &operator=(const QHttpNetworkRequest &other);
bool operator==(const QHttpNetworkRequest &other) const;
- QUrl url() const;
- void setUrl(const QUrl &url);
+ QUrl url() const Q_DECL_OVERRIDE;
+ void setUrl(const QUrl &url) Q_DECL_OVERRIDE;
- int majorVersion() const;
- int minorVersion() const;
+ int majorVersion() const Q_DECL_OVERRIDE;
+ int minorVersion() const Q_DECL_OVERRIDE;
- qint64 contentLength() const;
- void setContentLength(qint64 length);
+ qint64 contentLength() const Q_DECL_OVERRIDE;
+ void setContentLength(qint64 length) Q_DECL_OVERRIDE;
- QList<QPair<QByteArray, QByteArray> > header() const;
- QByteArray headerField(const QByteArray &name, const QByteArray &defaultValue = QByteArray()) const;
- void setHeaderField(const QByteArray &name, const QByteArray &data);
+ QList<QPair<QByteArray, QByteArray> > header() const Q_DECL_OVERRIDE;
+ QByteArray headerField(const QByteArray &name, const QByteArray &defaultValue = QByteArray()) const Q_DECL_OVERRIDE;
+ void setHeaderField(const QByteArray &name, const QByteArray &data) Q_DECL_OVERRIDE;
Operation operation() const;
void setOperation(Operation operation);
diff --git a/src/network/access/qhttpthreaddelegate.cpp b/src/network/access/qhttpthreaddelegate.cpp
index 06d62fbbcb..e31f23c18c 100644
--- a/src/network/access/qhttpthreaddelegate.cpp
+++ b/src/network/access/qhttpthreaddelegate.cpp
@@ -187,7 +187,7 @@ public:
setShareable(true);
}
- virtual void dispose()
+ virtual void dispose() Q_DECL_OVERRIDE
{
#if 0 // sample code; do this right with the API
Q_ASSERT(!isWorking());
@@ -328,6 +328,16 @@ void QHttpThreadDelegate::startRequest()
// cache the QHttpNetworkConnection corresponding to this cache key
connections.localData()->addEntry(cacheKey, httpConnection);
+ } else {
+ if (httpRequest.withCredentials()) {
+ QNetworkAuthenticationCredential credential = authenticationManager->fetchCachedCredentials(httpRequest.url(), 0);
+ if (!credential.user.isEmpty() && !credential.password.isEmpty()) {
+ QAuthenticator auth;
+ auth.setUser(credential.user);
+ auth.setPassword(credential.password);
+ httpConnection->d_func()->copyCredentials(-1, &auth, false);
+ }
+ }
}
diff --git a/src/network/access/qhttpthreaddelegate_p.h b/src/network/access/qhttpthreaddelegate_p.h
index 16610828cb..b1367fec0c 100644
--- a/src/network/access/qhttpthreaddelegate_p.h
+++ b/src/network/access/qhttpthreaddelegate_p.h
@@ -202,7 +202,7 @@ public:
{
}
- const char* readPointer(qint64 maximumLength, qint64 &len)
+ const char* readPointer(qint64 maximumLength, qint64 &len) Q_DECL_OVERRIDE
{
if (m_amount > 0) {
len = m_amount;
@@ -222,7 +222,7 @@ public:
return 0;
}
- bool advanceReadPointer(qint64 a)
+ bool advanceReadPointer(qint64 a) Q_DECL_OVERRIDE
{
if (m_data == 0)
return false;
@@ -238,7 +238,7 @@ public:
return true;
}
- bool atEnd()
+ bool atEnd() Q_DECL_OVERRIDE
{
if (m_amount > 0)
return false;
@@ -246,7 +246,7 @@ public:
return m_atEnd;
}
- bool reset()
+ bool reset() Q_DECL_OVERRIDE
{
m_amount = 0;
m_data = 0;
@@ -257,7 +257,7 @@ public:
return b;
}
- qint64 size()
+ qint64 size() Q_DECL_OVERRIDE
{
return m_size;
}
diff --git a/src/network/access/qnetworkaccessauthenticationmanager.cpp b/src/network/access/qnetworkaccessauthenticationmanager.cpp
index c8ba8ae978..622ec6c082 100644
--- a/src/network/access/qnetworkaccessauthenticationmanager.cpp
+++ b/src/network/access/qnetworkaccessauthenticationmanager.cpp
@@ -89,7 +89,7 @@ public:
}
}
- virtual void dispose() { delete this; }
+ virtual void dispose() Q_DECL_OVERRIDE { delete this; }
};
#ifndef QT_NO_NETWORKPROXY
diff --git a/src/network/access/qnetworkaccessbackend.cpp b/src/network/access/qnetworkaccessbackend.cpp
index a4067daf49..f879136163 100644
--- a/src/network/access/qnetworkaccessbackend.cpp
+++ b/src/network/access/qnetworkaccessbackend.cpp
@@ -129,12 +129,6 @@ QNonContiguousByteDevice* QNetworkAccessBackend::createUploadByteDevice()
return 0;
}
- bool bufferDisallowed =
- reply->request.attribute(QNetworkRequest::DoNotBufferUploadDataAttribute,
- QVariant(false)) == QVariant(true);
- if (bufferDisallowed)
- uploadByteDevice->disableReset();
-
// We want signal emissions only for normal asynchronous uploads
if (!isSynchronous())
connect(uploadByteDevice.data(), SIGNAL(readProgress(qint64,qint64)), this, SLOT(emitReplyUploadProgress(qint64,qint64)));
diff --git a/src/network/access/qnetworkaccesscache_p.h b/src/network/access/qnetworkaccesscache_p.h
index 171c2cda86..66b2e509bf 100644
--- a/src/network/access/qnetworkaccesscache_p.h
+++ b/src/network/access/qnetworkaccesscache_p.h
@@ -99,7 +99,7 @@ signals:
void entryReady(QNetworkAccessCache::CacheableObject *);
protected:
- void timerEvent(QTimerEvent *);
+ void timerEvent(QTimerEvent *) Q_DECL_OVERRIDE;
private:
// idea copied from qcache.h
diff --git a/src/network/access/qnetworkaccesscachebackend_p.h b/src/network/access/qnetworkaccesscachebackend_p.h
index f298b84471..c91e5a9206 100644
--- a/src/network/access/qnetworkaccesscachebackend_p.h
+++ b/src/network/access/qnetworkaccesscachebackend_p.h
@@ -58,12 +58,12 @@ public:
QNetworkAccessCacheBackend();
~QNetworkAccessCacheBackend();
- void open();
- void closeDownstreamChannel();
+ void open() Q_DECL_OVERRIDE;
+ void closeDownstreamChannel() Q_DECL_OVERRIDE;
void closeUpstreamChannel();
void upstreamReadyRead();
- void downstreamReadyWrite();
+ void downstreamReadyWrite() Q_DECL_OVERRIDE;
private:
bool sendCacheContents();
diff --git a/src/network/access/qnetworkaccessdebugpipebackend_p.h b/src/network/access/qnetworkaccessdebugpipebackend_p.h
index da8cc9a8d2..cb5a12722f 100644
--- a/src/network/access/qnetworkaccessdebugpipebackend_p.h
+++ b/src/network/access/qnetworkaccessdebugpipebackend_p.h
@@ -61,10 +61,10 @@ public:
QNetworkAccessDebugPipeBackend();
virtual ~QNetworkAccessDebugPipeBackend();
- virtual void open();
- virtual void closeDownstreamChannel();
+ virtual void open() Q_DECL_OVERRIDE;
+ virtual void closeDownstreamChannel() Q_DECL_OVERRIDE;
- virtual void downstreamReadyWrite();
+ virtual void downstreamReadyWrite() Q_DECL_OVERRIDE;
protected:
void pushFromSocketToDownstream();
@@ -96,7 +96,7 @@ class QNetworkAccessDebugPipeBackendFactory: public QNetworkAccessBackendFactory
public:
virtual QStringList supportedSchemes() const Q_DECL_OVERRIDE;
virtual QNetworkAccessBackend *create(QNetworkAccessManager::Operation op,
- const QNetworkRequest &request) const;
+ const QNetworkRequest &request) const Q_DECL_OVERRIDE;
};
#endif // QT_BUILD_INTERNAL
diff --git a/src/network/access/qnetworkaccessfilebackend_p.h b/src/network/access/qnetworkaccessfilebackend_p.h
index e0fe148aa0..3109bb55e7 100644
--- a/src/network/access/qnetworkaccessfilebackend_p.h
+++ b/src/network/access/qnetworkaccessfilebackend_p.h
@@ -59,10 +59,10 @@ public:
QNetworkAccessFileBackend();
virtual ~QNetworkAccessFileBackend();
- virtual void open();
- virtual void closeDownstreamChannel();
+ virtual void open() Q_DECL_OVERRIDE;
+ virtual void closeDownstreamChannel() Q_DECL_OVERRIDE;
- virtual void downstreamReadyWrite();
+ virtual void downstreamReadyWrite() Q_DECL_OVERRIDE;
public slots:
void uploadReadyReadSlot();
@@ -82,7 +82,7 @@ class QNetworkAccessFileBackendFactory: public QNetworkAccessBackendFactory
public:
virtual QStringList supportedSchemes() const Q_DECL_OVERRIDE;
virtual QNetworkAccessBackend *create(QNetworkAccessManager::Operation op,
- const QNetworkRequest &request) const;
+ const QNetworkRequest &request) const Q_DECL_OVERRIDE;
};
QT_END_NAMESPACE
diff --git a/src/network/access/qnetworkaccessftpbackend.cpp b/src/network/access/qnetworkaccessftpbackend.cpp
index 317d9f90d5..60dcf0f49e 100644
--- a/src/network/access/qnetworkaccessftpbackend.cpp
+++ b/src/network/access/qnetworkaccessftpbackend.cpp
@@ -90,7 +90,7 @@ public:
setShareable(false);
}
- void dispose()
+ void dispose() Q_DECL_OVERRIDE
{
connect(this, SIGNAL(done(bool)), this, SLOT(deleteLater()));
close();
diff --git a/src/network/access/qnetworkaccessftpbackend_p.h b/src/network/access/qnetworkaccessftpbackend_p.h
index 0371c456f3..d49ed2afdf 100644
--- a/src/network/access/qnetworkaccessftpbackend_p.h
+++ b/src/network/access/qnetworkaccessftpbackend_p.h
@@ -77,10 +77,10 @@ public:
QNetworkAccessFtpBackend();
virtual ~QNetworkAccessFtpBackend();
- virtual void open();
- virtual void closeDownstreamChannel();
+ virtual void open() Q_DECL_OVERRIDE;
+ virtual void closeDownstreamChannel() Q_DECL_OVERRIDE;
- virtual void downstreamReadyWrite();
+ virtual void downstreamReadyWrite() Q_DECL_OVERRIDE;
enum CacheCleanupMode {
ReleaseCachedConnection,
@@ -110,7 +110,7 @@ class QNetworkAccessFtpBackendFactory: public QNetworkAccessBackendFactory
public:
virtual QStringList supportedSchemes() const Q_DECL_OVERRIDE;
virtual QNetworkAccessBackend *create(QNetworkAccessManager::Operation op,
- const QNetworkRequest &request) const;
+ const QNetworkRequest &request) const Q_DECL_OVERRIDE;
};
QT_END_NAMESPACE
diff --git a/src/network/access/qnetworkdiskcache.h b/src/network/access/qnetworkdiskcache.h
index 8984c640e7..426c71b6d6 100644
--- a/src/network/access/qnetworkdiskcache.h
+++ b/src/network/access/qnetworkdiskcache.h
@@ -56,18 +56,18 @@ public:
qint64 maximumCacheSize() const;
void setMaximumCacheSize(qint64 size);
- qint64 cacheSize() const;
- QNetworkCacheMetaData metaData(const QUrl &url);
- void updateMetaData(const QNetworkCacheMetaData &metaData);
- QIODevice *data(const QUrl &url);
- bool remove(const QUrl &url);
- QIODevice *prepare(const QNetworkCacheMetaData &metaData);
- void insert(QIODevice *device);
+ qint64 cacheSize() const Q_DECL_OVERRIDE;
+ QNetworkCacheMetaData metaData(const QUrl &url) Q_DECL_OVERRIDE;
+ void updateMetaData(const QNetworkCacheMetaData &metaData) Q_DECL_OVERRIDE;
+ QIODevice *data(const QUrl &url) Q_DECL_OVERRIDE;
+ bool remove(const QUrl &url) Q_DECL_OVERRIDE;
+ QIODevice *prepare(const QNetworkCacheMetaData &metaData) Q_DECL_OVERRIDE;
+ void insert(QIODevice *device) Q_DECL_OVERRIDE;
QNetworkCacheMetaData fileMetaData(const QString &fileName) const;
public Q_SLOTS:
- void clear();
+ void clear() Q_DECL_OVERRIDE;
protected:
virtual qint64 expire();
diff --git a/src/network/access/qnetworkreply.cpp b/src/network/access/qnetworkreply.cpp
index fe9564a91c..1710af723f 100644
--- a/src/network/access/qnetworkreply.cpp
+++ b/src/network/access/qnetworkreply.cpp
@@ -41,6 +41,7 @@ const int QNetworkReplyPrivate::progressSignalInterval = 100;
QNetworkReplyPrivate::QNetworkReplyPrivate()
: readBufferMaxSize(0),
+ emitAllUploadProgressSignals(false),
operation(QNetworkAccessManager::UnknownOperation),
errorCode(QNetworkReply::NoError)
, isFinished(false)
diff --git a/src/network/access/qnetworkreply.h b/src/network/access/qnetworkreply.h
index 4a32131775..453116ea0e 100644
--- a/src/network/access/qnetworkreply.h
+++ b/src/network/access/qnetworkreply.h
@@ -104,8 +104,8 @@ public:
~QNetworkReply();
// reimplemented from QIODevice
- virtual void close();
- virtual bool isSequential() const;
+ virtual void close() Q_DECL_OVERRIDE;
+ virtual bool isSequential() const Q_DECL_OVERRIDE;
// like QAbstractSocket:
qint64 readBufferSize() const;
@@ -158,7 +158,7 @@ Q_SIGNALS:
protected:
explicit QNetworkReply(QObject *parent = 0);
QNetworkReply(QNetworkReplyPrivate &dd, QObject *parent);
- virtual qint64 writeData(const char *data, qint64 len);
+ virtual qint64 writeData(const char *data, qint64 len) Q_DECL_OVERRIDE;
void setOperation(QNetworkAccessManager::Operation operation);
void setRequest(const QNetworkRequest &request);
diff --git a/src/network/access/qnetworkreply_p.h b/src/network/access/qnetworkreply_p.h
index 6a68ecfea3..1d7d027954 100644
--- a/src/network/access/qnetworkreply_p.h
+++ b/src/network/access/qnetworkreply_p.h
@@ -74,6 +74,7 @@ public:
qint64 readBufferMaxSize;
QElapsedTimer downloadProgressSignalChoke;
QElapsedTimer uploadProgressSignalChoke;
+ bool emitAllUploadProgressSignals;
const static int progressSignalInterval;
QNetworkAccessManager::Operation operation;
QNetworkReply::NetworkError errorCode;
diff --git a/src/network/access/qnetworkreplydataimpl_p.h b/src/network/access/qnetworkreplydataimpl_p.h
index 469203019a..bae3e58faf 100644
--- a/src/network/access/qnetworkreplydataimpl_p.h
+++ b/src/network/access/qnetworkreplydataimpl_p.h
@@ -60,15 +60,15 @@ class QNetworkReplyDataImpl: public QNetworkReply
public:
QNetworkReplyDataImpl(QObject *parent, const QNetworkRequest &req, const QNetworkAccessManager::Operation op);
~QNetworkReplyDataImpl();
- virtual void abort();
+ virtual void abort() Q_DECL_OVERRIDE;
// reimplemented from QNetworkReply
- virtual void close();
- virtual qint64 bytesAvailable() const;
- virtual bool isSequential () const;
- qint64 size() const;
+ virtual void close() Q_DECL_OVERRIDE;
+ virtual qint64 bytesAvailable() const Q_DECL_OVERRIDE;
+ virtual bool isSequential () const Q_DECL_OVERRIDE;
+ qint64 size() const Q_DECL_OVERRIDE;
- virtual qint64 readData(char *data, qint64 maxlen);
+ virtual qint64 readData(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
Q_DECLARE_PRIVATE(QNetworkReplyDataImpl)
};
diff --git a/src/network/access/qnetworkreplyfileimpl_p.h b/src/network/access/qnetworkreplyfileimpl_p.h
index 715a48d508..b4526d0bf5 100644
--- a/src/network/access/qnetworkreplyfileimpl_p.h
+++ b/src/network/access/qnetworkreplyfileimpl_p.h
@@ -61,15 +61,15 @@ class QNetworkReplyFileImpl: public QNetworkReply
public:
QNetworkReplyFileImpl(QObject *parent, const QNetworkRequest &req, const QNetworkAccessManager::Operation op);
~QNetworkReplyFileImpl();
- virtual void abort();
+ virtual void abort() Q_DECL_OVERRIDE;
// reimplemented from QNetworkReply
- virtual void close();
- virtual qint64 bytesAvailable() const;
- virtual bool isSequential () const;
- qint64 size() const;
+ virtual void close() Q_DECL_OVERRIDE;
+ virtual qint64 bytesAvailable() const Q_DECL_OVERRIDE;
+ virtual bool isSequential () const Q_DECL_OVERRIDE;
+ qint64 size() const Q_DECL_OVERRIDE;
- virtual qint64 readData(char *data, qint64 maxlen);
+ virtual qint64 readData(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
Q_DECLARE_PRIVATE(QNetworkReplyFileImpl)
};
diff --git a/src/network/access/qnetworkreplyhttpimpl.cpp b/src/network/access/qnetworkreplyhttpimpl.cpp
index 4ce7303dbb..e7c1b61d4d 100644
--- a/src/network/access/qnetworkreplyhttpimpl.cpp
+++ b/src/network/access/qnetworkreplyhttpimpl.cpp
@@ -754,6 +754,9 @@ void QNetworkReplyHttpImplPrivate::postRequest()
QNetworkRequest::Automatic).toInt()) == QNetworkRequest::Manual)
httpRequest.setWithCredentials(false);
+ if (request.attribute(QNetworkRequest::EmitAllUploadProgressSignalsAttribute).toBool() == true)
+ emitAllUploadProgressSignals = true;
+
// Create the HTTP thread delegate
QHttpThreadDelegate *delegate = new QHttpThreadDelegate;
@@ -853,8 +856,6 @@ void QNetworkReplyHttpImplPrivate::postRequest()
if (uploadByteDevice) {
QNonContiguousByteDeviceThreadForwardImpl *forwardUploadDevice =
new QNonContiguousByteDeviceThreadForwardImpl(uploadByteDevice->atEnd(), uploadByteDevice->size());
- if (uploadByteDevice->isResetDisabled())
- forwardUploadDevice->disableReset();
forwardUploadDevice->setParent(delegate); // needed to make sure it is moved on moveToThread()
delegate->httpRequest.setUploadByteDevice(forwardUploadDevice);
@@ -1866,14 +1867,16 @@ void QNetworkReplyHttpImplPrivate::emitReplyUploadProgress(qint64 bytesSent, qin
if (isFinished)
return;
- //choke signal emissions, except the first and last signals which are unconditional
- if (uploadProgressSignalChoke.isValid()) {
- if (bytesSent != bytesTotal && uploadProgressSignalChoke.elapsed() < progressSignalInterval) {
- return;
+ if (!emitAllUploadProgressSignals) {
+ //choke signal emissions, except the first and last signals which are unconditional
+ if (uploadProgressSignalChoke.isValid()) {
+ if (bytesSent != bytesTotal && uploadProgressSignalChoke.elapsed() < progressSignalInterval) {
+ return;
+ }
+ uploadProgressSignalChoke.restart();
+ } else {
+ uploadProgressSignalChoke.start();
}
- uploadProgressSignalChoke.restart();
- } else {
- uploadProgressSignalChoke.start();
}
emit q->uploadProgress(bytesSent, bytesTotal);
@@ -1891,12 +1894,6 @@ QNonContiguousByteDevice* QNetworkReplyHttpImplPrivate::createUploadByteDevice()
return 0;
}
- bool bufferDisallowed =
- request.attribute(QNetworkRequest::DoNotBufferUploadDataAttribute,
- QVariant(false)) == QVariant(true);
- if (bufferDisallowed)
- uploadByteDevice->disableReset();
-
// We want signal emissions only for normal asynchronous uploads
if (!synchronous)
QObject::connect(uploadByteDevice.data(), SIGNAL(readProgress(qint64,qint64)),
diff --git a/src/network/access/qnetworkreplyhttpimpl_p.h b/src/network/access/qnetworkreplyhttpimpl_p.h
index 77d9c5a368..73349f4e7a 100644
--- a/src/network/access/qnetworkreplyhttpimpl_p.h
+++ b/src/network/access/qnetworkreplyhttpimpl_p.h
@@ -78,14 +78,14 @@ public:
QNetworkReplyHttpImpl(QNetworkAccessManager* const, const QNetworkRequest&, QNetworkAccessManager::Operation&, QIODevice* outgoingData);
virtual ~QNetworkReplyHttpImpl();
- void close();
- void abort();
- qint64 bytesAvailable() const;
- bool isSequential () const;
- qint64 size() const;
- qint64 readData(char*, qint64);
- void setReadBufferSize(qint64 size);
- bool canReadLine () const;
+ void close() Q_DECL_OVERRIDE;
+ void abort() Q_DECL_OVERRIDE;
+ qint64 bytesAvailable() const Q_DECL_OVERRIDE;
+ bool isSequential () const Q_DECL_OVERRIDE;
+ qint64 size() const Q_DECL_OVERRIDE;
+ qint64 readData(char*, qint64) Q_DECL_OVERRIDE;
+ void setReadBufferSize(qint64 size) Q_DECL_OVERRIDE;
+ bool canReadLine () const Q_DECL_OVERRIDE;
Q_DECLARE_PRIVATE(QNetworkReplyHttpImpl)
Q_PRIVATE_SLOT(d_func(), void _q_startOperation())
@@ -129,10 +129,10 @@ public:
#ifndef QT_NO_SSL
protected:
- void ignoreSslErrors();
- void ignoreSslErrorsImplementation(const QList<QSslError> &errors);
- void setSslConfigurationImplementation(const QSslConfiguration &configuration);
- void sslConfigurationImplementation(QSslConfiguration &configuration) const;
+ void ignoreSslErrors() Q_DECL_OVERRIDE;
+ void ignoreSslErrorsImplementation(const QList<QSslError> &errors) Q_DECL_OVERRIDE;
+ void setSslConfigurationImplementation(const QSslConfiguration &configuration) Q_DECL_OVERRIDE;
+ void sslConfigurationImplementation(QSslConfiguration &configuration) const Q_DECL_OVERRIDE;
#endif
signals:
diff --git a/src/network/access/qnetworkreplyimpl.cpp b/src/network/access/qnetworkreplyimpl.cpp
index 5af3bb37be..3c7a911974 100644
--- a/src/network/access/qnetworkreplyimpl.cpp
+++ b/src/network/access/qnetworkreplyimpl.cpp
@@ -59,6 +59,8 @@ inline QNetworkReplyImplPrivate::QNetworkReplyImplPrivate()
, downloadBufferMaximumSize(0)
, downloadBuffer(0)
{
+ if (request.attribute(QNetworkRequest::EmitAllUploadProgressSignalsAttribute).toBool() == true)
+ emitAllUploadProgressSignals = true;
}
void QNetworkReplyImplPrivate::_q_startOperation()
@@ -542,14 +544,16 @@ void QNetworkReplyImplPrivate::emitUploadProgress(qint64 bytesSent, qint64 bytes
Q_Q(QNetworkReplyImpl);
bytesUploaded = bytesSent;
- //choke signal emissions, except the first and last signals which are unconditional
- if (uploadProgressSignalChoke.isValid()) {
- if (bytesSent != bytesTotal && uploadProgressSignalChoke.elapsed() < progressSignalInterval) {
- return;
+ if (!emitAllUploadProgressSignals) {
+ //choke signal emissions, except the first and last signals which are unconditional
+ if (uploadProgressSignalChoke.isValid()) {
+ if (bytesSent != bytesTotal && uploadProgressSignalChoke.elapsed() < progressSignalInterval) {
+ return;
+ }
+ uploadProgressSignalChoke.restart();
+ } else {
+ uploadProgressSignalChoke.start();
}
- uploadProgressSignalChoke.restart();
- } else {
- uploadProgressSignalChoke.start();
}
pauseNotificationHandling();
diff --git a/src/network/access/qnetworkreplyimpl_p.h b/src/network/access/qnetworkreplyimpl_p.h
index 9bd7c88c84..aa1d04f3f8 100644
--- a/src/network/access/qnetworkreplyimpl_p.h
+++ b/src/network/access/qnetworkreplyimpl_p.h
@@ -69,16 +69,16 @@ class QNetworkReplyImpl: public QNetworkReply
public:
QNetworkReplyImpl(QObject *parent = 0);
~QNetworkReplyImpl();
- virtual void abort();
+ virtual void abort() Q_DECL_OVERRIDE;
// reimplemented from QNetworkReply / QIODevice
- virtual void close();
- virtual qint64 bytesAvailable() const;
- virtual void setReadBufferSize(qint64 size);
- virtual bool canReadLine () const;
+ virtual void close() Q_DECL_OVERRIDE;
+ virtual qint64 bytesAvailable() const Q_DECL_OVERRIDE;
+ virtual void setReadBufferSize(qint64 size) Q_DECL_OVERRIDE;
+ virtual bool canReadLine () const Q_DECL_OVERRIDE;
- virtual qint64 readData(char *data, qint64 maxlen);
- virtual bool event(QEvent *);
+ virtual qint64 readData(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
+ virtual bool event(QEvent *) Q_DECL_OVERRIDE;
Q_DECLARE_PRIVATE(QNetworkReplyImpl)
Q_PRIVATE_SLOT(d_func(), void _q_startOperation())
@@ -94,10 +94,10 @@ public:
#ifndef QT_NO_SSL
protected:
- void sslConfigurationImplementation(QSslConfiguration &configuration) const;
- void setSslConfigurationImplementation(const QSslConfiguration &configuration);
- virtual void ignoreSslErrors();
- virtual void ignoreSslErrorsImplementation(const QList<QSslError> &errors);
+ void sslConfigurationImplementation(QSslConfiguration &configuration) const Q_DECL_OVERRIDE;
+ void setSslConfigurationImplementation(const QSslConfiguration &configuration) Q_DECL_OVERRIDE;
+ virtual void ignoreSslErrors() Q_DECL_OVERRIDE;
+ virtual void ignoreSslErrorsImplementation(const QList<QSslError> &errors) Q_DECL_OVERRIDE;
#endif
};
@@ -214,9 +214,9 @@ public:
QNetworkAccessManager::Operation op);
~QDisabledNetworkReply();
- void abort() { }
+ void abort() Q_DECL_OVERRIDE { }
protected:
- qint64 readData(char *, qint64) { return -1; }
+ qint64 readData(char *, qint64) Q_DECL_OVERRIDE { return -1; }
};
#endif
diff --git a/src/network/access/qnetworkrequest.cpp b/src/network/access/qnetworkrequest.cpp
index c51470e25a..2c0486d615 100644
--- a/src/network/access/qnetworkrequest.cpp
+++ b/src/network/access/qnetworkrequest.cpp
@@ -249,6 +249,13 @@ QT_BEGIN_NAMESPACE
Indicates whether SPDY was used for receiving
this reply.
+ \value EmitAllUploadProgressSignalsAttribute
+ Requests only, type: QMetaType::Bool (default: false)
+ Indicates whether all upload signals should be emitted.
+ By default, the uploadProgress signal is emitted only
+ in 100 millisecond intervals.
+ (This value was introduced in 5.5.)
+
\value User
Special type. Additional information can be passed in
QVariants with types ranging from User to UserMax. The default
diff --git a/src/network/access/qnetworkrequest.h b/src/network/access/qnetworkrequest.h
index 0239ae7f4b..3221438db4 100644
--- a/src/network/access/qnetworkrequest.h
+++ b/src/network/access/qnetworkrequest.h
@@ -80,6 +80,7 @@ public:
BackgroundRequestAttribute,
SpdyAllowedAttribute,
SpdyWasUsedAttribute,
+ EmitAllUploadProgressSignalsAttribute,
User = 1000,
UserMax = 32767
diff --git a/src/network/bearer/qnetworksession.h b/src/network/bearer/qnetworksession.h
index 281e868145..86559af94e 100644
--- a/src/network/bearer/qnetworksession.h
+++ b/src/network/bearer/qnetworksession.h
@@ -124,8 +124,8 @@ Q_SIGNALS:
void usagePoliciesChanged(QNetworkSession::UsagePolicies usagePolicies);
protected:
- virtual void connectNotify(const QMetaMethod &signal);
- virtual void disconnectNotify(const QMetaMethod &signal);
+ virtual void connectNotify(const QMetaMethod &signal) Q_DECL_OVERRIDE;
+ virtual void disconnectNotify(const QMetaMethod &signal) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QNetworkSession)
diff --git a/src/network/kernel/qauthenticator.cpp b/src/network/kernel/qauthenticator.cpp
index ecfdecc020..69bb55690e 100644
--- a/src/network/kernel/qauthenticator.cpp
+++ b/src/network/kernel/qauthenticator.cpp
@@ -53,14 +53,8 @@
#endif
#endif
-//#define NTLMV1_CLIENT
-
QT_BEGIN_NAMESPACE
-#ifdef NTLMV1_CLIENT
-#include "../../3rdparty/des/des.cpp"
-#endif
-
static QByteArray qNtlmPhase1();
static QByteArray qNtlmPhase3(QAuthenticatorPrivate *ctx, const QByteArray& phase2data);
#if defined(Q_OS_WIN) && !defined(Q_OS_WINRT)
@@ -848,8 +842,6 @@ QByteArray QAuthenticatorPrivate::digestMd5Response(const QByteArray &challenge,
*/
#define AVTIMESTAMP 7
-//#define NTLMV1_CLIENT
-
//************************Global variables***************************
@@ -1096,49 +1088,6 @@ static QString qStringFromUcs2Le(const QByteArray& src)
return QString((const QChar *)src.data(), src.size()/2);
}
-#ifdef NTLMV1_CLIENT
-static QByteArray qEncodeNtlmResponse(const QAuthenticatorPrivate *ctx, const QNtlmPhase2Block& ch)
-{
- QCryptographicHash md4(QCryptographicHash::Md4);
- QByteArray asUcs2Le = qStringAsUcs2Le(ctx->password);
- md4.addData(asUcs2Le.data(), asUcs2Le.size());
-
- unsigned char md4hash[22];
- memset(md4hash, 0, sizeof(md4hash));
- QByteArray hash = md4.result();
- Q_ASSERT(hash.size() == 16);
- memcpy(md4hash, hash.constData(), 16);
-
- QByteArray rc(24, 0);
- deshash((unsigned char *)rc.data(), md4hash, (unsigned char *)ch.challenge);
- deshash((unsigned char *)rc.data() + 8, md4hash + 7, (unsigned char *)ch.challenge);
- deshash((unsigned char *)rc.data() + 16, md4hash + 14, (unsigned char *)ch.challenge);
-
- hash.fill(0);
- return rc;
-}
-
-
-static QByteArray qEncodeLmResponse(const QAuthenticatorPrivate *ctx, const QNtlmPhase2Block& ch)
-{
- QByteArray hash(21, 0);
- QByteArray key(14, 0);
- qstrncpy(key.data(), ctx->password.toUpper().toLatin1(), 14);
- const char *block = "KGS!@#$%";
-
- deshash((unsigned char *)hash.data(), (unsigned char *)key.data(), (unsigned char *)block);
- deshash((unsigned char *)hash.data() + 8, (unsigned char *)key.data() + 7, (unsigned char *)block);
- key.fill(0);
-
- QByteArray rc(24, 0);
- deshash((unsigned char *)rc.data(), (unsigned char *)hash.data(), ch.challenge);
- deshash((unsigned char *)rc.data() + 8, (unsigned char *)hash.data() + 7, ch.challenge);
- deshash((unsigned char *)rc.data() + 16, (unsigned char *)hash.data() + 14, ch.challenge);
-
- hash.fill(0);
- return rc;
-}
-#endif
/*********************************************************************
* Function Name: qEncodeHmacMd5
@@ -1457,23 +1406,15 @@ static QByteArray qNtlmPhase3(QAuthenticatorPrivate *ctx, const QByteArray& phas
pb.workstationStr = ctx->workstation;
// Get LM response
-#ifdef NTLMV1_CLIENT
- pb.lmResponseBuf = qEncodeLmResponse(ctx, ch);
-#else
if (ch.targetInfo.len > 0) {
pb.lmResponseBuf = QByteArray();
} else {
pb.lmResponseBuf = qEncodeLmv2Response(ctx, ch, &pb);
}
-#endif
offset = qEncodeNtlmBuffer(pb.lmResponse, offset, pb.lmResponseBuf);
// Get NTLM response
-#ifdef NTLMV1_CLIENT
- pb.ntlmResponseBuf = qEncodeNtlmResponse(ctx, ch);
-#else
pb.ntlmResponseBuf = qEncodeNtlmv2Response(ctx, ch, &pb);
-#endif
offset = qEncodeNtlmBuffer(pb.ntlmResponse, offset, pb.ntlmResponseBuf);
diff --git a/src/network/kernel/qdnslookup_p.h b/src/network/kernel/qdnslookup_p.h
index ded1e51313..d2e3f5fb02 100644
--- a/src/network/kernel/qdnslookup_p.h
+++ b/src/network/kernel/qdnslookup_p.h
@@ -109,7 +109,7 @@ public:
, requestName(name)
, nameserver(nameserver)
{ }
- void run();
+ void run() Q_DECL_OVERRIDE;
signals:
void finished(const QDnsLookupReply &reply);
diff --git a/src/network/kernel/qhostinfo.cpp b/src/network/kernel/qhostinfo.cpp
index a9a80054f4..68752660ba 100644
--- a/src/network/kernel/qhostinfo.cpp
+++ b/src/network/kernel/qhostinfo.cpp
@@ -724,8 +724,7 @@ QHostInfo QHostInfoCache::get(const QString &name, bool *valid)
QMutexLocker locker(&this->mutex);
*valid = false;
- if (cache.contains(name)) {
- QHostInfoCacheElement *element = cache.object(name);
+ if (QHostInfoCacheElement *element = cache.object(name)) {
if (element->age.elapsed() < max_age*1000)
*valid = true;
return element->info;
diff --git a/src/network/kernel/qhostinfo_p.h b/src/network/kernel/qhostinfo_p.h
index b51773f803..e36c630b59 100644
--- a/src/network/kernel/qhostinfo_p.h
+++ b/src/network/kernel/qhostinfo_p.h
@@ -146,7 +146,7 @@ class QHostInfoRunnable : public QRunnable
{
public:
QHostInfoRunnable (QString hn, int i);
- void run();
+ void run() Q_DECL_OVERRIDE;
QString toBeLookedUp;
int id;
@@ -177,7 +177,7 @@ public:
QHostInfoLookupManager();
~QHostInfoLookupManager();
- void clear();
+ void clear() Q_DECL_OVERRIDE;
void work();
// called from QHostInfo
diff --git a/src/network/kernel/qnetworkinterface.cpp b/src/network/kernel/qnetworkinterface.cpp
index b21bcee585..633d2ee9a8 100644
--- a/src/network/kernel/qnetworkinterface.cpp
+++ b/src/network/kernel/qnetworkinterface.cpp
@@ -615,13 +615,8 @@ QDebug operator<<(QDebug debug, const QNetworkInterface &networkInterface)
<< ", hardware address = " << networkInterface.hardwareAddress()
<< ", flags = ";
flagsDebug(debug, networkInterface.flags());
-#if defined(Q_CC_RVCT)
- // RVCT gets confused with << networkInterface.addressEntries(), reason unknown.
- debug.nospace() << ")\n";
-#else
debug.nospace() << ", entries = " << networkInterface.addressEntries()
<< ")\n";
-#endif
return debug.space();
}
#endif
diff --git a/src/network/kernel/qnetworkinterface_unix.cpp b/src/network/kernel/qnetworkinterface_unix.cpp
index 782bb76f20..f1a6d1d8ff 100644
--- a/src/network/kernel/qnetworkinterface_unix.cpp
+++ b/src/network/kernel/qnetworkinterface_unix.cpp
@@ -58,6 +58,11 @@
# define QT_NO_IPV6IFNAME
#endif
+#ifdef Q_OS_HAIKU
+# include <sys/sockio.h>
+# define IFF_RUNNING 0x0001
+#endif
+
#ifndef QT_NO_GETIFADDRS
# include <ifaddrs.h>
#endif
diff --git a/src/network/socket/qabstractsocket.h b/src/network/socket/qabstractsocket.h
index 35e9ea1aac..fa4e7c9a28 100644
--- a/src/network/socket/qabstractsocket.h
+++ b/src/network/socket/qabstractsocket.h
@@ -140,10 +140,10 @@ public:
bool isValid() const;
- qint64 bytesAvailable() const;
- qint64 bytesToWrite() const;
+ qint64 bytesAvailable() const Q_DECL_OVERRIDE;
+ qint64 bytesToWrite() const Q_DECL_OVERRIDE;
- bool canReadLine() const;
+ bool canReadLine() const Q_DECL_OVERRIDE;
quint16 localPort() const;
QHostAddress localAddress() const;
@@ -168,15 +168,15 @@ public:
SocketError error() const;
// from QIODevice
- void close();
- bool isSequential() const;
- bool atEnd() const;
+ void close() Q_DECL_OVERRIDE;
+ bool isSequential() const Q_DECL_OVERRIDE;
+ bool atEnd() const Q_DECL_OVERRIDE;
bool flush();
// for synchronous access
virtual bool waitForConnected(int msecs = 30000);
- bool waitForReadyRead(int msecs = 30000);
- bool waitForBytesWritten(int msecs = 30000);
+ bool waitForReadyRead(int msecs = 30000) Q_DECL_OVERRIDE;
+ bool waitForBytesWritten(int msecs = 30000) Q_DECL_OVERRIDE;
virtual bool waitForDisconnected(int msecs = 30000);
#ifndef QT_NO_NETWORKPROXY
@@ -195,9 +195,9 @@ Q_SIGNALS:
#endif
protected:
- qint64 readData(char *data, qint64 maxlen);
- qint64 readLineData(char *data, qint64 maxlen);
- qint64 writeData(const char *data, qint64 len);
+ qint64 readData(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
+ qint64 readLineData(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
+ qint64 writeData(const char *data, qint64 len) Q_DECL_OVERRIDE;
void setSocketState(SocketState state);
void setSocketError(SocketError socketError);
diff --git a/src/network/socket/qhttpsocketengine_p.h b/src/network/socket/qhttpsocketengine_p.h
index 0448293981..6b837c2c90 100644
--- a/src/network/socket/qhttpsocketengine_p.h
+++ b/src/network/socket/qhttpsocketengine_p.h
@@ -73,63 +73,63 @@ public:
QHttpSocketEngine(QObject *parent = 0);
~QHttpSocketEngine();
- bool initialize(QAbstractSocket::SocketType type, QAbstractSocket::NetworkLayerProtocol protocol = QAbstractSocket::IPv4Protocol);
- bool initialize(qintptr socketDescriptor, QAbstractSocket::SocketState socketState = QAbstractSocket::ConnectedState);
+ bool initialize(QAbstractSocket::SocketType type, QAbstractSocket::NetworkLayerProtocol protocol = QAbstractSocket::IPv4Protocol) Q_DECL_OVERRIDE;
+ bool initialize(qintptr socketDescriptor, QAbstractSocket::SocketState socketState = QAbstractSocket::ConnectedState) Q_DECL_OVERRIDE;
void setProxy(const QNetworkProxy &networkProxy);
- qintptr socketDescriptor() const;
+ qintptr socketDescriptor() const Q_DECL_OVERRIDE;
- bool isValid() const;
+ bool isValid() const Q_DECL_OVERRIDE;
bool connectInternal();
- bool connectToHost(const QHostAddress &address, quint16 port);
- bool connectToHostByName(const QString &name, quint16 port);
- bool bind(const QHostAddress &address, quint16 port);
- bool listen();
- int accept();
- void close();
+ bool connectToHost(const QHostAddress &address, quint16 port) Q_DECL_OVERRIDE;
+ bool connectToHostByName(const QString &name, quint16 port) Q_DECL_OVERRIDE;
+ bool bind(const QHostAddress &address, quint16 port) Q_DECL_OVERRIDE;
+ bool listen() Q_DECL_OVERRIDE;
+ int accept() Q_DECL_OVERRIDE;
+ void close() Q_DECL_OVERRIDE;
- qint64 bytesAvailable() const;
+ qint64 bytesAvailable() const Q_DECL_OVERRIDE;
- qint64 read(char *data, qint64 maxlen);
- qint64 write(const char *data, qint64 len);
+ qint64 read(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
+ qint64 write(const char *data, qint64 len) Q_DECL_OVERRIDE;
#ifndef QT_NO_UDPSOCKET
#ifndef QT_NO_NETWORKINTERFACE
bool joinMulticastGroup(const QHostAddress &groupAddress,
- const QNetworkInterface &interface);
+ const QNetworkInterface &interface) Q_DECL_OVERRIDE;
bool leaveMulticastGroup(const QHostAddress &groupAddress,
- const QNetworkInterface &interface);
- QNetworkInterface multicastInterface() const;
- bool setMulticastInterface(const QNetworkInterface &iface);
+ const QNetworkInterface &interface) Q_DECL_OVERRIDE;
+ QNetworkInterface multicastInterface() const Q_DECL_OVERRIDE;
+ bool setMulticastInterface(const QNetworkInterface &iface) Q_DECL_OVERRIDE;
#endif // QT_NO_NETWORKINTERFACE
qint64 readDatagram(char *data, qint64 maxlen, QHostAddress *addr = 0,
- quint16 *port = 0);
+ quint16 *port = 0) Q_DECL_OVERRIDE;
qint64 writeDatagram(const char *data, qint64 len, const QHostAddress &addr,
- quint16 port);
- bool hasPendingDatagrams() const;
- qint64 pendingDatagramSize() const;
+ quint16 port) Q_DECL_OVERRIDE;
+ bool hasPendingDatagrams() const Q_DECL_OVERRIDE;
+ qint64 pendingDatagramSize() const Q_DECL_OVERRIDE;
#endif // QT_NO_UDPSOCKET
- qint64 bytesToWrite() const;
+ qint64 bytesToWrite() const Q_DECL_OVERRIDE;
- int option(SocketOption option) const;
- bool setOption(SocketOption option, int value);
+ int option(SocketOption option) const Q_DECL_OVERRIDE;
+ bool setOption(SocketOption option, int value) Q_DECL_OVERRIDE;
- bool waitForRead(int msecs = 30000, bool *timedOut = 0);
- bool waitForWrite(int msecs = 30000, bool *timedOut = 0);
+ bool waitForRead(int msecs = 30000, bool *timedOut = 0) Q_DECL_OVERRIDE;
+ bool waitForWrite(int msecs = 30000, bool *timedOut = 0) Q_DECL_OVERRIDE;
bool waitForReadOrWrite(bool *readyToRead, bool *readyToWrite,
bool checkRead, bool checkWrite,
- int msecs = 30000, bool *timedOut = 0);
+ int msecs = 30000, bool *timedOut = 0) Q_DECL_OVERRIDE;
- bool isReadNotificationEnabled() const;
- void setReadNotificationEnabled(bool enable);
- bool isWriteNotificationEnabled() const;
- void setWriteNotificationEnabled(bool enable);
- bool isExceptionNotificationEnabled() const;
- void setExceptionNotificationEnabled(bool enable);
+ bool isReadNotificationEnabled() const Q_DECL_OVERRIDE;
+ void setReadNotificationEnabled(bool enable) Q_DECL_OVERRIDE;
+ bool isWriteNotificationEnabled() const Q_DECL_OVERRIDE;
+ void setWriteNotificationEnabled(bool enable) Q_DECL_OVERRIDE;
+ bool isExceptionNotificationEnabled() const Q_DECL_OVERRIDE;
+ void setExceptionNotificationEnabled(bool enable) Q_DECL_OVERRIDE;
public slots:
void slotSocketConnected();
@@ -186,8 +186,8 @@ class Q_AUTOTEST_EXPORT QHttpSocketEngineHandler : public QSocketEngineHandler
{
public:
virtual QAbstractSocketEngine *createSocketEngine(QAbstractSocket::SocketType socketType,
- const QNetworkProxy &, QObject *parent);
- virtual QAbstractSocketEngine *createSocketEngine(qintptr socketDescripter, QObject *parent);
+ const QNetworkProxy &, QObject *parent) Q_DECL_OVERRIDE;
+ virtual QAbstractSocketEngine *createSocketEngine(qintptr socketDescripter, QObject *parent) Q_DECL_OVERRIDE;
};
#endif
diff --git a/src/network/socket/qlocalsocket.h b/src/network/socket/qlocalsocket.h
index c0429d3a1f..c88f9d6ff8 100644
--- a/src/network/socket/qlocalsocket.h
+++ b/src/network/socket/qlocalsocket.h
@@ -85,12 +85,12 @@ public:
QString fullServerName() const;
void abort();
- virtual bool isSequential() const;
- virtual qint64 bytesAvailable() const;
- virtual qint64 bytesToWrite() const;
- virtual bool canReadLine() const;
+ virtual bool isSequential() const Q_DECL_OVERRIDE;
+ virtual qint64 bytesAvailable() const Q_DECL_OVERRIDE;
+ virtual qint64 bytesToWrite() const Q_DECL_OVERRIDE;
+ virtual bool canReadLine() const Q_DECL_OVERRIDE;
virtual bool open(OpenMode openMode = ReadWrite) Q_DECL_OVERRIDE;
- virtual void close();
+ virtual void close() Q_DECL_OVERRIDE;
LocalSocketError error() const;
bool flush();
bool isValid() const;
@@ -103,10 +103,10 @@ public:
qintptr socketDescriptor() const;
LocalSocketState state() const;
- bool waitForBytesWritten(int msecs = 30000);
+ bool waitForBytesWritten(int msecs = 30000) Q_DECL_OVERRIDE;
bool waitForConnected(int msecs = 30000);
bool waitForDisconnected(int msecs = 30000);
- bool waitForReadyRead(int msecs = 30000);
+ bool waitForReadyRead(int msecs = 30000) Q_DECL_OVERRIDE;
Q_SIGNALS:
void connected();
@@ -115,8 +115,8 @@ Q_SIGNALS:
void stateChanged(QLocalSocket::LocalSocketState socketState);
protected:
- virtual qint64 readData(char*, qint64);
- virtual qint64 writeData(const char*, qint64);
+ virtual qint64 readData(char*, qint64) Q_DECL_OVERRIDE;
+ virtual qint64 writeData(const char*, qint64) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QLocalSocket)
diff --git a/src/network/socket/qnativesocketengine_p.h b/src/network/socket/qnativesocketengine_p.h
index 67412ca326..de638e4e76 100644
--- a/src/network/socket/qnativesocketengine_p.h
+++ b/src/network/socket/qnativesocketengine_p.h
@@ -105,42 +105,42 @@ public:
QNativeSocketEngine(QObject *parent = 0);
~QNativeSocketEngine();
- bool initialize(QAbstractSocket::SocketType type, QAbstractSocket::NetworkLayerProtocol protocol = QAbstractSocket::IPv4Protocol);
- bool initialize(qintptr socketDescriptor, QAbstractSocket::SocketState socketState = QAbstractSocket::ConnectedState);
+ bool initialize(QAbstractSocket::SocketType type, QAbstractSocket::NetworkLayerProtocol protocol = QAbstractSocket::IPv4Protocol) Q_DECL_OVERRIDE;
+ bool initialize(qintptr socketDescriptor, QAbstractSocket::SocketState socketState = QAbstractSocket::ConnectedState) Q_DECL_OVERRIDE;
- qintptr socketDescriptor() const;
+ qintptr socketDescriptor() const Q_DECL_OVERRIDE;
- bool isValid() const;
+ bool isValid() const Q_DECL_OVERRIDE;
- bool connectToHost(const QHostAddress &address, quint16 port);
- bool connectToHostByName(const QString &name, quint16 port);
- bool bind(const QHostAddress &address, quint16 port);
- bool listen();
- int accept();
- void close();
+ bool connectToHost(const QHostAddress &address, quint16 port) Q_DECL_OVERRIDE;
+ bool connectToHostByName(const QString &name, quint16 port) Q_DECL_OVERRIDE;
+ bool bind(const QHostAddress &address, quint16 port) Q_DECL_OVERRIDE;
+ bool listen() Q_DECL_OVERRIDE;
+ int accept() Q_DECL_OVERRIDE;
+ void close() Q_DECL_OVERRIDE;
#ifndef QT_NO_NETWORKINTERFACE
bool joinMulticastGroup(const QHostAddress &groupAddress,
- const QNetworkInterface &iface);
+ const QNetworkInterface &iface) Q_DECL_OVERRIDE;
bool leaveMulticastGroup(const QHostAddress &groupAddress,
- const QNetworkInterface &iface);
- QNetworkInterface multicastInterface() const;
- bool setMulticastInterface(const QNetworkInterface &iface);
+ const QNetworkInterface &iface) Q_DECL_OVERRIDE;
+ QNetworkInterface multicastInterface() const Q_DECL_OVERRIDE;
+ bool setMulticastInterface(const QNetworkInterface &iface) Q_DECL_OVERRIDE;
#endif
- qint64 bytesAvailable() const;
+ qint64 bytesAvailable() const Q_DECL_OVERRIDE;
- qint64 read(char *data, qint64 maxlen);
- qint64 write(const char *data, qint64 len);
+ qint64 read(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
+ qint64 write(const char *data, qint64 len) Q_DECL_OVERRIDE;
qint64 readDatagram(char *data, qint64 maxlen, QHostAddress *addr = 0,
- quint16 *port = 0);
+ quint16 *port = 0) Q_DECL_OVERRIDE;
qint64 writeDatagram(const char *data, qint64 len, const QHostAddress &addr,
- quint16 port);
- bool hasPendingDatagrams() const;
- qint64 pendingDatagramSize() const;
+ quint16 port) Q_DECL_OVERRIDE;
+ bool hasPendingDatagrams() const Q_DECL_OVERRIDE;
+ qint64 pendingDatagramSize() const Q_DECL_OVERRIDE;
- qint64 bytesToWrite() const;
+ qint64 bytesToWrite() const Q_DECL_OVERRIDE;
qint64 receiveBufferSize() const;
void setReceiveBufferSize(qint64 bufferSize);
@@ -148,21 +148,21 @@ public:
qint64 sendBufferSize() const;
void setSendBufferSize(qint64 bufferSize);
- int option(SocketOption option) const;
- bool setOption(SocketOption option, int value);
+ int option(SocketOption option) const Q_DECL_OVERRIDE;
+ bool setOption(SocketOption option, int value) Q_DECL_OVERRIDE;
- bool waitForRead(int msecs = 30000, bool *timedOut = 0);
- bool waitForWrite(int msecs = 30000, bool *timedOut = 0);
+ bool waitForRead(int msecs = 30000, bool *timedOut = 0) Q_DECL_OVERRIDE;
+ bool waitForWrite(int msecs = 30000, bool *timedOut = 0) Q_DECL_OVERRIDE;
bool waitForReadOrWrite(bool *readyToRead, bool *readyToWrite,
bool checkRead, bool checkWrite,
- int msecs = 30000, bool *timedOut = 0);
-
- bool isReadNotificationEnabled() const;
- void setReadNotificationEnabled(bool enable);
- bool isWriteNotificationEnabled() const;
- void setWriteNotificationEnabled(bool enable);
- bool isExceptionNotificationEnabled() const;
- void setExceptionNotificationEnabled(bool enable);
+ int msecs = 30000, bool *timedOut = 0) Q_DECL_OVERRIDE;
+
+ bool isReadNotificationEnabled() const Q_DECL_OVERRIDE;
+ void setReadNotificationEnabled(bool enable) Q_DECL_OVERRIDE;
+ bool isWriteNotificationEnabled() const Q_DECL_OVERRIDE;
+ void setWriteNotificationEnabled(bool enable) Q_DECL_OVERRIDE;
+ bool isExceptionNotificationEnabled() const Q_DECL_OVERRIDE;
+ void setExceptionNotificationEnabled(bool enable) Q_DECL_OVERRIDE;
public Q_SLOTS:
// non-virtual override;
diff --git a/src/network/socket/qsocks5socketengine.cpp b/src/network/socket/qsocks5socketengine.cpp
index 1634352333..56652744fd 100644
--- a/src/network/socket/qsocks5socketengine.cpp
+++ b/src/network/socket/qsocks5socketengine.cpp
@@ -331,7 +331,7 @@ public:
QSocks5BindData *retrieve(qintptr socketDescriptor);
protected:
- void timerEvent(QTimerEvent * event);
+ void timerEvent(QTimerEvent * event) Q_DECL_OVERRIDE;
QMutex mutex;
int sweepTimerId;
diff --git a/src/network/socket/qsocks5socketengine_p.h b/src/network/socket/qsocks5socketengine_p.h
index fd6e187b98..bc02cbda23 100644
--- a/src/network/socket/qsocks5socketengine_p.h
+++ b/src/network/socket/qsocks5socketengine_p.h
@@ -61,63 +61,63 @@ public:
QSocks5SocketEngine(QObject *parent = 0);
~QSocks5SocketEngine();
- bool initialize(QAbstractSocket::SocketType type, QAbstractSocket::NetworkLayerProtocol protocol = QAbstractSocket::IPv4Protocol);
- bool initialize(qintptr socketDescriptor, QAbstractSocket::SocketState socketState = QAbstractSocket::ConnectedState);
+ bool initialize(QAbstractSocket::SocketType type, QAbstractSocket::NetworkLayerProtocol protocol = QAbstractSocket::IPv4Protocol) Q_DECL_OVERRIDE;
+ bool initialize(qintptr socketDescriptor, QAbstractSocket::SocketState socketState = QAbstractSocket::ConnectedState) Q_DECL_OVERRIDE;
void setProxy(const QNetworkProxy &networkProxy);
- qintptr socketDescriptor() const;
+ qintptr socketDescriptor() const Q_DECL_OVERRIDE;
- bool isValid() const;
+ bool isValid() const Q_DECL_OVERRIDE;
bool connectInternal();
- bool connectToHost(const QHostAddress &address, quint16 port);
- bool connectToHostByName(const QString &name, quint16 port);
- bool bind(const QHostAddress &address, quint16 port);
- bool listen();
- int accept();
- void close();
+ bool connectToHost(const QHostAddress &address, quint16 port) Q_DECL_OVERRIDE;
+ bool connectToHostByName(const QString &name, quint16 port) Q_DECL_OVERRIDE;
+ bool bind(const QHostAddress &address, quint16 port) Q_DECL_OVERRIDE;
+ bool listen() Q_DECL_OVERRIDE;
+ int accept() Q_DECL_OVERRIDE;
+ void close() Q_DECL_OVERRIDE;
- qint64 bytesAvailable() const;
+ qint64 bytesAvailable() const Q_DECL_OVERRIDE;
- qint64 read(char *data, qint64 maxlen);
- qint64 write(const char *data, qint64 len);
+ qint64 read(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
+ qint64 write(const char *data, qint64 len) Q_DECL_OVERRIDE;
#ifndef QT_NO_UDPSOCKET
#ifndef QT_NO_NETWORKINTERFACE
bool joinMulticastGroup(const QHostAddress &groupAddress,
- const QNetworkInterface &interface);
+ const QNetworkInterface &interface) Q_DECL_OVERRIDE;
bool leaveMulticastGroup(const QHostAddress &groupAddress,
- const QNetworkInterface &interface);
- QNetworkInterface multicastInterface() const;
- bool setMulticastInterface(const QNetworkInterface &iface);
+ const QNetworkInterface &interface) Q_DECL_OVERRIDE;
+ QNetworkInterface multicastInterface() const Q_DECL_OVERRIDE;
+ bool setMulticastInterface(const QNetworkInterface &iface) Q_DECL_OVERRIDE;
#endif // QT_NO_NETWORKINTERFACE
qint64 readDatagram(char *data, qint64 maxlen, QHostAddress *addr = 0,
- quint16 *port = 0);
+ quint16 *port = 0) Q_DECL_OVERRIDE;
qint64 writeDatagram(const char *data, qint64 len, const QHostAddress &addr,
- quint16 port);
- bool hasPendingDatagrams() const;
- qint64 pendingDatagramSize() const;
+ quint16 port) Q_DECL_OVERRIDE;
+ bool hasPendingDatagrams() const Q_DECL_OVERRIDE;
+ qint64 pendingDatagramSize() const Q_DECL_OVERRIDE;
#endif // QT_NO_UDPSOCKET
- qint64 bytesToWrite() const;
+ qint64 bytesToWrite() const Q_DECL_OVERRIDE;
- int option(SocketOption option) const;
- bool setOption(SocketOption option, int value);
+ int option(SocketOption option) const Q_DECL_OVERRIDE;
+ bool setOption(SocketOption option, int value) Q_DECL_OVERRIDE;
- bool waitForRead(int msecs = 30000, bool *timedOut = 0);
- bool waitForWrite(int msecs = 30000, bool *timedOut = 0);
+ bool waitForRead(int msecs = 30000, bool *timedOut = 0) Q_DECL_OVERRIDE;
+ bool waitForWrite(int msecs = 30000, bool *timedOut = 0) Q_DECL_OVERRIDE;
bool waitForReadOrWrite(bool *readyToRead, bool *readyToWrite,
bool checkRead, bool checkWrite,
- int msecs = 30000, bool *timedOut = 0);
+ int msecs = 30000, bool *timedOut = 0) Q_DECL_OVERRIDE;
- bool isReadNotificationEnabled() const;
- void setReadNotificationEnabled(bool enable);
- bool isWriteNotificationEnabled() const;
- void setWriteNotificationEnabled(bool enable);
- bool isExceptionNotificationEnabled() const;
- void setExceptionNotificationEnabled(bool enable);
+ bool isReadNotificationEnabled() const Q_DECL_OVERRIDE;
+ void setReadNotificationEnabled(bool enable) Q_DECL_OVERRIDE;
+ bool isWriteNotificationEnabled() const Q_DECL_OVERRIDE;
+ void setWriteNotificationEnabled(bool enable) Q_DECL_OVERRIDE;
+ bool isExceptionNotificationEnabled() const Q_DECL_OVERRIDE;
+ void setExceptionNotificationEnabled(bool enable) Q_DECL_OVERRIDE;
private:
Q_DECLARE_PRIVATE(QSocks5SocketEngine)
@@ -160,11 +160,11 @@ class QSocks5PasswordAuthenticator : public QSocks5Authenticator
{
public:
QSocks5PasswordAuthenticator(const QString &userName, const QString &password);
- char methodId();
- bool beginAuthenticate(QTcpSocket *socket, bool *completed);
- bool continueAuthenticate(QTcpSocket *socket, bool *completed);
+ char methodId() Q_DECL_OVERRIDE;
+ bool beginAuthenticate(QTcpSocket *socket, bool *completed) Q_DECL_OVERRIDE;
+ bool continueAuthenticate(QTcpSocket *socket, bool *completed) Q_DECL_OVERRIDE;
- QString errorString();
+ QString errorString() Q_DECL_OVERRIDE;
private:
QString userName;
@@ -282,8 +282,8 @@ class Q_AUTOTEST_EXPORT QSocks5SocketEngineHandler : public QSocketEngineHandler
{
public:
virtual QAbstractSocketEngine *createSocketEngine(QAbstractSocket::SocketType socketType,
- const QNetworkProxy &, QObject *parent);
- virtual QAbstractSocketEngine *createSocketEngine(qintptr socketDescriptor, QObject *parent);
+ const QNetworkProxy &, QObject *parent) Q_DECL_OVERRIDE;
+ virtual QAbstractSocketEngine *createSocketEngine(qintptr socketDescriptor, QObject *parent) Q_DECL_OVERRIDE;
};
diff --git a/src/network/socket/qtcpserver.cpp b/src/network/socket/qtcpserver.cpp
index ad3d529a3e..dd916ad5c0 100644
--- a/src/network/socket/qtcpserver.cpp
+++ b/src/network/socket/qtcpserver.cpp
@@ -92,7 +92,8 @@
*/
#include "qtcpserver.h"
-#include "private/qobject_p.h"
+#include "qtcpserver_p.h"
+
#include "qalgorithms.h"
#include "qhostaddress.h"
#include "qlist.h"
@@ -108,43 +109,6 @@ QT_BEGIN_NAMESPACE
return returnValue; \
} } while (0)
-class QTcpServerPrivate : public QObjectPrivate, public QAbstractSocketEngineReceiver
-{
- Q_DECLARE_PUBLIC(QTcpServer)
-public:
- QTcpServerPrivate();
- ~QTcpServerPrivate();
-
- QList<QTcpSocket *> pendingConnections;
-
- quint16 port;
- QHostAddress address;
-
- QAbstractSocket::SocketState state;
- QAbstractSocketEngine *socketEngine;
-
- QAbstractSocket::SocketError serverSocketError;
- QString serverSocketErrorString;
-
- int maxConnections;
-
-#ifndef QT_NO_NETWORKPROXY
- QNetworkProxy proxy;
- QNetworkProxy resolveProxy(const QHostAddress &address, quint16 port);
-#endif
-
- // from QAbstractSocketEngineReceiver
- void readNotification();
- void closeNotification() { readNotification(); }
- inline void writeNotification() {}
- inline void exceptionNotification() {}
- inline void connectionNotification() {}
-#ifndef QT_NO_NETWORKPROXY
- inline void proxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *) {}
-#endif
-
-};
-
/*! \internal
*/
QTcpServerPrivate::QTcpServerPrivate()
@@ -257,6 +221,13 @@ QTcpServer::~QTcpServer()
close();
}
+/*! \internal
+*/
+QTcpServer::QTcpServer(QTcpServerPrivate &dd, QObject *parent)
+ : QObject(dd, parent)
+{
+}
+
/*!
Tells the server to listen for incoming connections on address \a
address and port \a port. If \a port is 0, a port is chosen
diff --git a/src/network/socket/qtcpserver.h b/src/network/socket/qtcpserver.h
index 2098a3b97d..1c66326660 100644
--- a/src/network/socket/qtcpserver.h
+++ b/src/network/socket/qtcpserver.h
@@ -87,6 +87,8 @@ protected:
virtual void incomingConnection(qintptr handle);
void addPendingConnection(QTcpSocket* socket);
+ QTcpServer(QTcpServerPrivate &dd, QObject *parent = 0);
+
Q_SIGNALS:
void newConnection();
void acceptError(QAbstractSocket::SocketError socketError);
diff --git a/src/network/socket/qtcpserver_p.h b/src/network/socket/qtcpserver_p.h
new file mode 100644
index 0000000000..3c46cec9c4
--- /dev/null
+++ b/src/network/socket/qtcpserver_p.h
@@ -0,0 +1,105 @@
+/****************************************************************************
+**
+** Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtNetwork module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QTCPSERVER_P_H
+#define QTCPSERVER_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists for the convenience
+// of the QLibrary class. This header file may change from
+// version to version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include "QtNetwork/qtcpserver.h"
+#include "private/qobject_p.h"
+#include "private/qabstractsocketengine_p.h"
+#include "QtNetwork/qabstractsocket.h"
+#include "qnetworkproxy.h"
+#include "QtCore/qlist.h"
+#include "qhostaddress.h"
+
+QT_BEGIN_NAMESPACE
+
+class QTcpServerPrivate : public QObjectPrivate, public QAbstractSocketEngineReceiver
+{
+ Q_DECLARE_PUBLIC(QTcpServer)
+public:
+ QTcpServerPrivate();
+ ~QTcpServerPrivate();
+
+ QList<QTcpSocket *> pendingConnections;
+
+ quint16 port;
+ QHostAddress address;
+
+ QAbstractSocket::SocketState state;
+ QAbstractSocketEngine *socketEngine;
+
+ QAbstractSocket::SocketError serverSocketError;
+ QString serverSocketErrorString;
+
+ int maxConnections;
+
+#ifndef QT_NO_NETWORKPROXY
+ QNetworkProxy proxy;
+ QNetworkProxy resolveProxy(const QHostAddress &address, quint16 port);
+#endif
+
+ // from QAbstractSocketEngineReceiver
+ void readNotification() Q_DECL_OVERRIDE;
+ void closeNotification() Q_DECL_OVERRIDE { readNotification(); }
+ inline void writeNotification() {}
+ inline void exceptionNotification() {}
+ inline void connectionNotification() {}
+#ifndef QT_NO_NETWORKPROXY
+ inline void proxyAuthenticationRequired(const QNetworkProxy &, QAuthenticator *) {}
+#endif
+
+};
+
+QT_END_NAMESPACE
+
+#endif // QTCPSERVER_P_H
diff --git a/src/network/socket/socket.pri b/src/network/socket/socket.pri
index 7e3a54e303..3fb85160ea 100644
--- a/src/network/socket/socket.pri
+++ b/src/network/socket/socket.pri
@@ -12,7 +12,8 @@ HEADERS += socket/qabstractsocketengine_p.h \
socket/qlocalserver.h \
socket/qlocalserver_p.h \
socket/qlocalsocket.h \
- socket/qlocalsocket_p.h
+ socket/qlocalsocket_p.h \
+ socket/qtcpserver_p.h
SOURCES += socket/qabstractsocketengine.cpp \
socket/qhttpsocketengine.cpp \
diff --git a/src/network/ssl/qssl.cpp b/src/network/ssl/qssl.cpp
index 98be348e19..f76674f500 100644
--- a/src/network/ssl/qssl.cpp
+++ b/src/network/ssl/qssl.cpp
@@ -65,6 +65,7 @@ Q_LOGGING_CATEGORY(lcSsl, "qt.network.ssl");
\value Rsa The RSA algorithm.
\value Dsa The DSA algorithm.
+ \value Ec The Elliptic Curve algorithm
\value Opaque A key that should be treated as a 'black box' by QSslKey.
The opaque key facility allows applications to add support for facilities
diff --git a/src/network/ssl/qssl.h b/src/network/ssl/qssl.h
index b0a35075fc..b626b884dc 100644
--- a/src/network/ssl/qssl.h
+++ b/src/network/ssl/qssl.h
@@ -55,7 +55,8 @@ namespace QSsl {
enum KeyAlgorithm {
Opaque,
Rsa,
- Dsa
+ Dsa,
+ Ec
};
enum AlternativeNameEntryType {
diff --git a/src/network/ssl/qsslcertificate_openssl.cpp b/src/network/ssl/qsslcertificate_openssl.cpp
index 065f0bfd04..4cb2e525eb 100644
--- a/src/network/ssl/qsslcertificate_openssl.cpp
+++ b/src/network/ssl/qsslcertificate_openssl.cpp
@@ -249,6 +249,12 @@ QSslKey QSslCertificate::publicKey() const
key.d->dsa = q_EVP_PKEY_get1_DSA(pkey);
key.d->algorithm = QSsl::Dsa;
key.d->isNull = false;
+#ifndef OPENSSL_NO_EC
+ } else if (q_EVP_PKEY_type(pkey->type) == EVP_PKEY_EC) {
+ key.d->ec = q_EVP_PKEY_get1_EC_KEY(pkey);
+ key.d->algorithm = QSsl::Ec;
+ key.d->isNull = false;
+#endif
} else if (q_EVP_PKEY_type(pkey->type) == EVP_PKEY_DH) {
// DH unsupported
} else {
diff --git a/src/network/ssl/qsslcertificate_qt.cpp b/src/network/ssl/qsslcertificate_qt.cpp
index c560c5af87..217592df37 100644
--- a/src/network/ssl/qsslcertificate_qt.cpp
+++ b/src/network/ssl/qsslcertificate_qt.cpp
@@ -49,6 +49,8 @@
#include "qsslcertificateextension_p.h"
#include "qasn1element_p.h"
+#include <QtCore/qdatastream.h>
+
QT_BEGIN_NAMESPACE
enum GeneralNameType
diff --git a/src/network/ssl/qsslconfiguration.cpp b/src/network/ssl/qsslconfiguration.cpp
index 7bb6e02b7e..9054d412f7 100644
--- a/src/network/ssl/qsslconfiguration.cpp
+++ b/src/network/ssl/qsslconfiguration.cpp
@@ -203,6 +203,7 @@ bool QSslConfiguration::operator==(const QSslConfiguration &other) const
d->sessionCipher == other.d->sessionCipher &&
d->sessionProtocol == other.d->sessionProtocol &&
d->ciphers == other.d->ciphers &&
+ d->ellipticCurves == other.d->ellipticCurves &&
d->caCertificates == other.d->caCertificates &&
d->protocol == other.d->protocol &&
d->peerVerifyMode == other.d->peerVerifyMode &&
@@ -243,6 +244,7 @@ bool QSslConfiguration::isNull() const
d->allowRootCertOnDemandLoading == true &&
d->caCertificates.count() == 0 &&
d->ciphers.count() == 0 &&
+ d->ellipticCurves.isEmpty() &&
d->localCertificateChain.isEmpty() &&
d->privateKey.isNull() &&
d->peerCertificate.isNull() &&
@@ -697,6 +699,50 @@ int QSslConfiguration::sessionTicketLifeTimeHint() const
}
/*!
+ \since 5.5
+
+ Returns this connection's current list of elliptic curves. This
+ list is used during the handshake phase for choosing an
+ elliptic curve (when using an elliptic curve cipher).
+ The returned list of curves is ordered by descending preference
+ (i.e., the first curve in the list is the most preferred one).
+
+ By default, the handshake phase can choose any of the curves
+ supported by this system's SSL libraries, which may vary from
+ system to system. The list of curves supported by this system's
+ SSL libraries is returned by QSslSocket::supportedEllipticCurves().
+
+ You can restrict the list of curves used for choosing the session cipher
+ for this socket by calling setEllipticCurves() with a subset of the
+ supported ciphers. You can revert to using the entire set by calling
+ setEllipticCurves() with the list returned by
+ QSslSocket::supportedEllipticCurves().
+
+ \sa setEllipticCurves
+ */
+QVector<QSslEllipticCurve> QSslConfiguration::ellipticCurves() const
+{
+ return d->ellipticCurves;
+}
+
+/*!
+ \since 5.5
+
+ Sets the list of elliptic curves to be used by this socket to \a curves,
+ which must contain a subset of the curves in the list returned by
+ supportedEllipticCurves().
+
+ Restricting the elliptic curves must be done before the handshake
+ phase, where the session cipher is chosen.
+
+ \sa ellipticCurves
+ */
+void QSslConfiguration::setEllipticCurves(const QVector<QSslEllipticCurve> &curves)
+{
+ d->ellipticCurves = curves;
+}
+
+/*!
\since 5.3
This function returns the protocol negotiated with the server
diff --git a/src/network/ssl/qsslconfiguration.h b/src/network/ssl/qsslconfiguration.h
index 0c4e122912..7bc7a32cb7 100644
--- a/src/network/ssl/qsslconfiguration.h
+++ b/src/network/ssl/qsslconfiguration.h
@@ -62,6 +62,7 @@ template<typename T> class QList;
class QSslCertificate;
class QSslCipher;
class QSslKey;
+class QSslEllipticCurve;
class QSslConfigurationPrivate;
class Q_NETWORK_EXPORT QSslConfiguration
@@ -122,6 +123,10 @@ public:
void setSessionTicket(const QByteArray &sessionTicket);
int sessionTicketLifeTimeHint() const;
+ // EC settings
+ QVector<QSslEllipticCurve> ellipticCurves() const;
+ void setEllipticCurves(const QVector<QSslEllipticCurve> &curves);
+
static QSslConfiguration defaultConfiguration();
static void setDefaultConfiguration(const QSslConfiguration &configuration);
diff --git a/src/network/ssl/qsslconfiguration_p.h b/src/network/ssl/qsslconfiguration_p.h
index 6880f59c4b..54a4786d9f 100644
--- a/src/network/ssl/qsslconfiguration_p.h
+++ b/src/network/ssl/qsslconfiguration_p.h
@@ -66,6 +66,7 @@
#include "qsslcertificate.h"
#include "qsslcipher.h"
#include "qsslkey.h"
+#include "qsslellipticcurve.h"
QT_BEGIN_NAMESPACE
@@ -107,6 +108,8 @@ public:
Q_AUTOTEST_EXPORT static const QSsl::SslOptions defaultSslOptions;
+ QVector<QSslEllipticCurve> ellipticCurves;
+
QByteArray sslSession;
int sslSessionTicketLifeTimeHint;
diff --git a/src/network/ssl/qsslcontext_openssl.cpp b/src/network/ssl/qsslcontext_openssl.cpp
index 92e726bc01..d5328901a7 100644
--- a/src/network/ssl/qsslcontext_openssl.cpp
+++ b/src/network/ssl/qsslcontext_openssl.cpp
@@ -2,6 +2,7 @@
**
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Copyright (C) 2014 BlackBerry Limited. All rights reserved.
+** Copyright (C) 2014 Governikus GmbH & Co. KG.
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtNetwork module of the Qt Toolkit.
@@ -200,7 +201,7 @@ init_context:
// Initialize ciphers
QByteArray cipherString;
- int first = true;
+ bool first = true;
QList<QSslCipher> ciphers = sslContext->sslConfiguration.ciphers();
if (ciphers.isEmpty())
ciphers = QSslSocketPrivate::defaultCiphers();
@@ -268,8 +269,12 @@ init_context:
// take ownership of the RSA/DSA key instance because the QSslKey already has ownership.
if (configuration.d->privateKey.algorithm() == QSsl::Rsa)
q_EVP_PKEY_set1_RSA(sslContext->pkey, reinterpret_cast<RSA *>(configuration.d->privateKey.handle()));
- else
+ else if (configuration.d->privateKey.algorithm() == QSsl::Dsa)
q_EVP_PKEY_set1_DSA(sslContext->pkey, reinterpret_cast<DSA *>(configuration.d->privateKey.handle()));
+#ifndef OPENSSL_NO_EC
+ else if (configuration.d->privateKey.algorithm() == QSsl::Ec)
+ q_EVP_PKEY_set1_EC_KEY(sslContext->pkey, reinterpret_cast<EC_KEY *>(configuration.d->privateKey.handle()));
+#endif
}
if (!q_SSL_CTX_use_PrivateKey(sslContext->ctx, sslContext->pkey)) {
@@ -321,13 +326,45 @@ init_context:
q_DH_free(dh);
#ifndef OPENSSL_NO_EC
- // Set temp ECDH params
- EC_KEY *ecdh = 0;
- ecdh = q_EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
- q_SSL_CTX_set_tmp_ecdh(sslContext->ctx, ecdh);
- q_EC_KEY_free(ecdh);
+#if OPENSSL_VERSION_NUMBER >= 0x10002000L
+ if (q_SSLeay() >= 0x10002000L) {
+ q_SSL_CTX_ctrl(sslContext->ctx, SSL_CTRL_SET_ECDH_AUTO, 1, NULL);
+ } else
+#endif
+ {
+ // Set temp ECDH params
+ EC_KEY *ecdh = 0;
+ ecdh = q_EC_KEY_new_by_curve_name(NID_X9_62_prime256v1);
+ q_SSL_CTX_set_tmp_ecdh(sslContext->ctx, ecdh);
+ q_EC_KEY_free(ecdh);
+ }
#endif // OPENSSL_NO_EC
+ const QVector<QSslEllipticCurve> qcurves = sslContext->sslConfiguration.ellipticCurves();
+ if (!qcurves.isEmpty()) {
+#if OPENSSL_VERSION_NUMBER >= 0x10002000L && !defined(OPENSSL_NO_EC)
+ // Set the curves to be used
+ if (q_SSLeay() >= 0x10002000L) {
+ // SSL_CTX_ctrl wants a non-const pointer as last argument,
+ // but let's avoid a copy into a temporary array
+ if (!q_SSL_CTX_ctrl(sslContext->ctx,
+ SSL_CTRL_SET_CURVES,
+ qcurves.size(),
+ const_cast<int *>(reinterpret_cast<const int *>(qcurves.data())))) {
+ sslContext->errorStr = QSslSocket::tr("Error when setting the elliptic curves (%1)").arg(QSslSocketBackendPrivate::getErrorsFromOpenSsl());
+ sslContext->errorCode = QSslError::UnspecifiedError;
+ return sslContext;
+ }
+ } else
+#endif // OPENSSL_VERSION_NUMBER >= 0x10002000L && !defined(OPENSSL_NO_EC)
+ {
+ // specific curves requested, but not possible to set -> error
+ sslContext->errorStr = QSslSocket::tr("Error when setting the elliptic curves (OpenSSL version too old, need at least v1.0.2)");
+ sslContext->errorCode = QSslError::UnspecifiedError;
+ return sslContext;
+ }
+ }
+
return sslContext;
}
diff --git a/src/network/ssl/qsslellipticcurve.cpp b/src/network/ssl/qsslellipticcurve.cpp
new file mode 100644
index 0000000000..7e122557df
--- /dev/null
+++ b/src/network/ssl/qsslellipticcurve.cpp
@@ -0,0 +1,173 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Governikus GmbH & Co. KG.
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtNetwork module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qsslellipticcurve.h"
+
+#ifndef QT_NO_DEBUG_STREAM
+#include <QDebug>
+#endif
+
+QT_BEGIN_NAMESPACE
+
+/*!
+ \class QSslEllipticCurve
+ \since 5.5
+
+ \brief Represents an elliptic curve for use by elliptic-curve cipher algorithms.
+
+ \reentrant
+ \ingroup network
+ \ingroup ssl
+ \inmodule QtNetwork
+
+ The class QSslEllipticCurve represents an elliptic curve for use by
+ elliptic-curve cipher algorithms.
+
+ Elliptic curves can be constructed from a "short name" (SN) (fromShortName()),
+ and by a call to QSslSocket::supportedEllipticCurves().
+
+ QSslEllipticCurve instances can be compared for equality and can be used as keys
+ in QHash and QSet. They cannot be used as key in a QMap.
+*/
+
+/*!
+ \fn QSslEllipticCurve::QSslEllipticCurve()
+
+ Constructs an invalid elliptic curve.
+
+ \sa isValid(), QSslSocket::supportedEllipticCurves()
+*/
+
+/*!
+ \fn QSslEllipticCurve QSslEllipticCurve::fromShortName(const QString &name)
+
+ Returns an QSslEllipticCurve instance representing the
+ named curve \a name. The \a name is the conventional short
+ name for the curve, as represented by RFC 4492 (for instance \c{secp521r1}),
+ or as NIST short names (for instance \c{P-256}). The actual set of
+ recognized names depends on the SSL implementation.
+
+ If the given \a name is not supported, returns an invalid QSslEllipticCurve instance.
+
+ \note The OpenSSL implementation of this function treats the name case-sensitively.
+
+ \sa shortName()
+*/
+
+
+/*!
+ \fn QString QSslEllipticCurve::shortName() const
+
+ Returns the conventional short name for this curve. If this
+ curve is invalid, returns an empty string.
+
+ \sa longName()
+*/
+
+/*!
+ \fn QString QSslEllipticCurve::longName() const
+
+ Returns the conventional long name for this curve. If this
+ curve is invalid, returns an empty string.
+
+ \sa shortName()
+*/
+
+/*!
+ \fn bool QSslEllipticCurve::isValid() const
+
+ Returns true if this elliptic curve is a valid curve, false otherwise.
+*/
+
+/*!
+ \fn bool QSslEllipticCurve::isTlsNamedCurve() const
+
+ Returns true if this elliptic curve is one of the named curves that can be
+ used in the key exchange when using an elliptic curve cipher with TLS;
+ false otherwise.
+*/
+
+/*!
+ \fn bool operator==(QSslEllipticCurve lhs, QSslEllipticCurve rhs)
+ \since 5.5
+ \relates QSslEllipticCurve
+
+ Returns true if the curve \a lhs represents the same curve of \a rhs;
+ false otherwise.
+*/
+
+/*!
+ \fn bool operator!=(QSslEllipticCurve lhs, QSslEllipticCurve rhs)
+ \since 5.5
+ \relates QSslEllipticCurve
+
+ Returns true if the curve \a lhs represents a different curve than \a rhs;
+ false otherwise.
+*/
+
+/*!
+ \fn uint qHash(QSslEllipticCurve curve, uint seed)
+ \since 5.5
+ \relates QHash
+
+ Returns an hash value for the curve \a curve, using \a seed to seed
+ the calculation.
+*/
+
+#ifndef QT_NO_DEBUG_STREAM
+/*!
+ \relates QSslEllipticCurve
+ \since 5.5
+
+ Writes the elliptic curve \a curve into the debug object \a debug for
+ debugging purposes.
+
+ \sa {Debugging Techniques}
+*/
+QDebug operator<<(QDebug debug, QSslEllipticCurve curve)
+{
+ QDebugStateSaver saver(debug);
+ debug.nospace() << "QSslEllipticCurve(" << curve.shortName() << ")";
+ return debug;
+}
+#endif
+
+QT_END_NAMESPACE
diff --git a/src/network/ssl/qsslellipticcurve.h b/src/network/ssl/qsslellipticcurve.h
new file mode 100644
index 0000000000..6d2a764d87
--- /dev/null
+++ b/src/network/ssl/qsslellipticcurve.h
@@ -0,0 +1,103 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Governikus GmbH & Co. KG.
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtNetwork module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QSSLELLIPTICCURVE_H
+#define QSSLELLIPTICCURVE_H
+
+#include <QtCore/QtGlobal>
+#include <QtCore/QString>
+#include <QtCore/QStringList>
+#include <QtCore/QMetaType>
+#include <QtCore/QVector>
+#include <QtCore/QHash>
+
+QT_BEGIN_NAMESPACE
+
+class QSslEllipticCurve;
+// qHash is a friend, but we can't use default arguments for friends (§8.3.6.4)
+Q_DECL_CONSTEXPR uint qHash(QSslEllipticCurve curve, uint seed = 0) Q_DECL_NOTHROW;
+
+class QSslEllipticCurve {
+public:
+ Q_DECL_CONSTEXPR QSslEllipticCurve()
+ : id(0)
+ {
+ }
+
+ Q_NETWORK_EXPORT static QSslEllipticCurve fromShortName(const QString &name);
+
+ Q_NETWORK_EXPORT QString shortName() const Q_REQUIRED_RESULT;
+ Q_NETWORK_EXPORT QString longName() const Q_REQUIRED_RESULT;
+
+ Q_DECL_CONSTEXPR bool isValid() const
+ {
+ return id != 0;
+ }
+
+ Q_NETWORK_EXPORT bool isTlsNamedCurve() const;
+
+private:
+ int id;
+
+ friend Q_DECL_CONSTEXPR bool operator==(QSslEllipticCurve lhs, QSslEllipticCurve rhs) Q_DECL_NOTHROW
+ { return lhs.id == rhs.id; }
+ friend Q_DECL_CONSTEXPR uint qHash(QSslEllipticCurve curve, uint seed) Q_DECL_NOTHROW
+ { return qHash(curve.id, seed); }
+
+ friend class QSslSocketPrivate;
+ friend class QSslSocketBackendPrivate;
+};
+
+Q_DECLARE_TYPEINFO(QSslEllipticCurve, Q_PRIMITIVE_TYPE);
+
+Q_DECL_CONSTEXPR inline bool operator!=(QSslEllipticCurve lhs, QSslEllipticCurve rhs) Q_DECL_NOTHROW
+{ return !operator==(lhs, rhs); }
+
+#ifndef QT_NO_DEBUG_STREAM
+class QDebug;
+Q_NETWORK_EXPORT QDebug operator<<(QDebug debug, QSslEllipticCurve curve);
+#endif
+
+QT_END_NAMESPACE
+
+Q_DECLARE_METATYPE(QSslEllipticCurve)
+
+#endif // QSSLELLIPTICCURVE_H
diff --git a/src/network/ssl/qsslellipticcurve_dummy.cpp b/src/network/ssl/qsslellipticcurve_dummy.cpp
new file mode 100644
index 0000000000..64ac1514ab
--- /dev/null
+++ b/src/network/ssl/qsslellipticcurve_dummy.cpp
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Governikus GmbH & Co. KG.
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtNetwork module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qsslellipticcurve.h"
+
+QT_BEGIN_NAMESPACE
+
+QString QSslEllipticCurve::shortName() const
+{
+ return QString();
+}
+
+QString QSslEllipticCurve::longName() const
+{
+ return QString();
+}
+
+QSslEllipticCurve QSslEllipticCurve::fromShortName(const QString &name)
+{
+ Q_UNUSED(name);
+ return QSslEllipticCurve();
+}
+
+bool QSslEllipticCurve::isTlsNamedCurve() const
+{
+ return false;
+}
+
+QT_END_NAMESPACE
diff --git a/src/network/ssl/qsslellipticcurve_openssl.cpp b/src/network/ssl/qsslellipticcurve_openssl.cpp
new file mode 100644
index 0000000000..d8d1307b2e
--- /dev/null
+++ b/src/network/ssl/qsslellipticcurve_openssl.cpp
@@ -0,0 +1,167 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Governikus GmbH & Co. KG.
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtNetwork module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qsslellipticcurve.h"
+#include "qsslsocket_p.h"
+#include "qsslsocket_openssl_symbols_p.h"
+
+#include <openssl/ssl.h>
+#include <openssl/obj_mac.h>
+
+#include <algorithm>
+
+QT_BEGIN_NAMESPACE
+
+QString QSslEllipticCurve::shortName() const
+{
+ if (id == 0)
+ return QString();
+
+ QSslSocketPrivate::ensureInitialized();
+
+ QString result;
+#ifndef OPENSSL_NO_EC
+ result = QString::fromLatin1(q_OBJ_nid2sn(id));
+#endif
+ return result;
+}
+
+QString QSslEllipticCurve::longName() const
+{
+ if (id == 0)
+ return QString();
+
+ QSslSocketPrivate::ensureInitialized();
+
+ QString result;
+#ifndef OPENSSL_NO_EC
+ result = QString::fromLatin1(q_OBJ_nid2ln(id));
+#endif
+ return result;
+}
+
+QSslEllipticCurve QSslEllipticCurve::fromShortName(const QString &name)
+{
+ if (name.isEmpty())
+ return QSslEllipticCurve();
+
+ QSslSocketPrivate::ensureInitialized();
+
+ QSslEllipticCurve result;
+
+#ifndef OPENSSL_NO_EC
+ const QByteArray curveNameLatin1 = name.toLatin1();
+
+ int nid = q_OBJ_sn2nid(curveNameLatin1.data());
+
+#if OPENSSL_VERSION_NUMBER >= 0x10002000L
+ if (nid == 0 && q_SSLeay() >= 0x10002000L)
+ nid = q_EC_curve_nist2nid(curveNameLatin1.data());
+#endif // OPENSSL_VERSION_NUMBER >= 0x10002000L
+
+ result.id = nid;
+#endif
+
+ return result;
+}
+
+// The brainpool curve NIDs (RFC 7027) have been introduced in OpenSSL 1.0.2,
+// redefine them here to make Qt compile with previous versions of OpenSSL
+// (yet correctly recognize them as TLS named curves).
+// See crypto/objects/obj_mac.h
+#ifndef NID_brainpoolP256r1
+#define NID_brainpoolP256r1 927
+#endif
+
+#ifndef NID_brainpoolP384r1
+#define NID_brainpoolP384r1 931
+#endif
+
+#ifndef NID_brainpoolP512r1
+#define NID_brainpoolP512r1 933
+#endif
+
+// NIDs of named curves allowed in TLS as per RFCs 4492 and 7027,
+// see also https://www.iana.org/assignments/tls-parameters/tls-parameters.xhtml#tls-parameters-8
+static const int tlsNamedCurveNIDs[] = {
+ // RFC 4492
+ NID_sect163k1,
+ NID_sect163r1,
+ NID_sect163r2,
+ NID_sect193r1,
+ NID_sect193r2,
+ NID_sect233k1,
+ NID_sect233r1,
+ NID_sect239k1,
+ NID_sect283k1,
+ NID_sect283r1,
+ NID_sect409k1,
+ NID_sect409r1,
+ NID_sect571k1,
+ NID_sect571r1,
+
+ NID_secp160k1,
+ NID_secp160r1,
+ NID_secp160r2,
+ NID_secp192k1,
+ NID_X9_62_prime192v1, // secp192r1
+ NID_secp224k1,
+ NID_secp224r1,
+ NID_secp256k1,
+ NID_X9_62_prime256v1, // secp256r1
+ NID_secp384r1,
+ NID_secp521r1,
+
+ // RFC 7027
+ NID_brainpoolP256r1,
+ NID_brainpoolP384r1,
+ NID_brainpoolP512r1
+};
+
+static const size_t tlsNamedCurveNIDCount = sizeof(tlsNamedCurveNIDs) / sizeof(tlsNamedCurveNIDs[0]);
+
+bool QSslEllipticCurve::isTlsNamedCurve() const
+{
+ const int * const tlsNamedCurveNIDsEnd = tlsNamedCurveNIDs + tlsNamedCurveNIDCount;
+ return std::find(tlsNamedCurveNIDs, tlsNamedCurveNIDsEnd, id) != tlsNamedCurveNIDsEnd;
+}
+
+QT_END_NAMESPACE
diff --git a/src/network/ssl/qsslkey_openssl.cpp b/src/network/ssl/qsslkey_openssl.cpp
index e4d30ff229..ee4e8efa7c 100644
--- a/src/network/ssl/qsslkey_openssl.cpp
+++ b/src/network/ssl/qsslkey_openssl.cpp
@@ -70,6 +70,13 @@ void QSslKeyPrivate::clear(bool deep)
q_DSA_free(dsa);
dsa = 0;
}
+#ifndef OPENSSL_NO_EC
+ if (ec) {
+ if (deep)
+ q_EC_KEY_free(ec);
+ ec = 0;
+ }
+#endif
if (opaque) {
if (deep)
q_EVP_PKEY_free(opaque);
@@ -99,6 +106,16 @@ bool QSslKeyPrivate::fromEVP_PKEY(EVP_PKEY *pkey)
return true;
}
+#ifndef OPENSSL_NO_EC
+ else if (pkey->type == EVP_PKEY_EC) {
+ isNull = false;
+ algorithm = QSsl::Ec;
+ type = QSsl::PrivateKey;
+ ec = q_EC_KEY_dup(q_EVP_PKEY_get1_EC_KEY(pkey));
+
+ return true;
+ }
+#endif
else {
// Unknown key type. This could be handled as opaque, but then
// we'd eventually leak memory since we wouldn't be able to free
@@ -138,12 +155,20 @@ void QSslKeyPrivate::decodePem(const QByteArray &pem, const QByteArray &passPhra
: q_PEM_read_bio_RSAPrivateKey(bio, &rsa, 0, phrase);
if (rsa && rsa == result)
isNull = false;
- } else {
+ } else if (algorithm == QSsl::Dsa) {
DSA *result = (type == QSsl::PublicKey)
? q_PEM_read_bio_DSA_PUBKEY(bio, &dsa, 0, phrase)
: q_PEM_read_bio_DSAPrivateKey(bio, &dsa, 0, phrase);
if (dsa && dsa == result)
isNull = false;
+#ifndef OPENSSL_NO_EC
+ } else if (algorithm == QSsl::Ec) {
+ EC_KEY *result = (type == QSsl::PublicKey)
+ ? q_PEM_read_bio_EC_PUBKEY(bio, &ec, 0, phrase)
+ : q_PEM_read_bio_ECPrivateKey(bio, &ec, 0, phrase);
+ if (ec && ec == result)
+ isNull = false;
+#endif
}
q_BIO_free(bio);
@@ -154,8 +179,14 @@ int QSslKeyPrivate::length() const
if (isNull || algorithm == QSsl::Opaque)
return -1;
- return (algorithm == QSsl::Rsa)
- ? q_BN_num_bits(rsa->n) : q_BN_num_bits(dsa->p);
+ switch (algorithm) {
+ case QSsl::Rsa: return q_BN_num_bits(rsa->n);
+ case QSsl::Dsa: return q_BN_num_bits(dsa->p);
+#ifndef OPENSSL_NO_EC
+ case QSsl::Ec: return q_EC_GROUP_get_degree(q_EC_KEY_get0_group(ec));
+#endif
+ default: return -1;
+ }
}
QByteArray QSslKeyPrivate::toPem(const QByteArray &passPhrase) const
@@ -182,7 +213,7 @@ QByteArray QSslKeyPrivate::toPem(const QByteArray &passPhrase) const
fail = true;
}
}
- } else {
+ } else if (algorithm == QSsl::Dsa) {
if (type == QSsl::PublicKey) {
if (!q_PEM_write_bio_DSA_PUBKEY(bio, dsa))
fail = true;
@@ -195,6 +226,23 @@ QByteArray QSslKeyPrivate::toPem(const QByteArray &passPhrase) const
fail = true;
}
}
+#ifndef OPENSSL_NO_EC
+ } else if (algorithm == QSsl::Ec) {
+ if (type == QSsl::PublicKey) {
+ if (!q_PEM_write_bio_EC_PUBKEY(bio, ec))
+ fail = true;
+ } else {
+ if (!q_PEM_write_bio_ECPrivateKey(
+ bio, ec,
+ // ### the cipher should be selectable in the API:
+ passPhrase.isEmpty() ? (const EVP_CIPHER *)0 : q_EVP_des_ede3_cbc(),
+ (uchar *)passPhrase.data(), passPhrase.size(), 0, 0)) {
+ fail = true;
+ }
+ }
+#endif
+ } else {
+ fail = true;
}
QByteArray pem;
@@ -216,6 +264,10 @@ Qt::HANDLE QSslKeyPrivate::handle() const
return Qt::HANDLE(rsa);
case QSsl::Dsa:
return Qt::HANDLE(dsa);
+#ifndef OPENSSL_NO_EC
+ case QSsl::Ec:
+ return Qt::HANDLE(ec);
+#endif
default:
return Qt::HANDLE(NULL);
}
diff --git a/src/network/ssl/qsslkey_p.cpp b/src/network/ssl/qsslkey_p.cpp
index 6162034fd7..99d502e8f9 100644
--- a/src/network/ssl/qsslkey_p.cpp
+++ b/src/network/ssl/qsslkey_p.cpp
@@ -103,7 +103,13 @@ QByteArray QSslKeyPrivate::pemHeader() const
return QByteArrayLiteral("-----BEGIN PUBLIC KEY-----");
else if (algorithm == QSsl::Rsa)
return QByteArrayLiteral("-----BEGIN RSA PRIVATE KEY-----");
- return QByteArrayLiteral("-----BEGIN DSA PRIVATE KEY-----");
+ else if (algorithm == QSsl::Dsa)
+ return QByteArrayLiteral("-----BEGIN DSA PRIVATE KEY-----");
+ else if (algorithm == QSsl::Ec)
+ return QByteArrayLiteral("-----BEGIN EC PRIVATE KEY-----");
+
+ Q_UNREACHABLE();
+ return QByteArray();
}
/*!
@@ -115,7 +121,13 @@ QByteArray QSslKeyPrivate::pemFooter() const
return QByteArrayLiteral("-----END PUBLIC KEY-----");
else if (algorithm == QSsl::Rsa)
return QByteArrayLiteral("-----END RSA PRIVATE KEY-----");
- return QByteArrayLiteral("-----END DSA PRIVATE KEY-----");
+ else if (algorithm == QSsl::Dsa)
+ return QByteArrayLiteral("-----END DSA PRIVATE KEY-----");
+ else if (algorithm == QSsl::Ec)
+ return QByteArrayLiteral("-----END EC PRIVATE KEY-----");
+
+ Q_UNREACHABLE();
+ return QByteArray();
}
/*!
@@ -438,7 +450,7 @@ QDebug operator<<(QDebug debug, const QSslKey &key)
debug << "QSslKey("
<< (key.type() == QSsl::PublicKey ? "PublicKey" : "PrivateKey")
<< ", " << (key.algorithm() == QSsl::Opaque ? "OPAQUE" :
- (key.algorithm() == QSsl::Rsa ? "RSA" : "DSA"))
+ (key.algorithm() == QSsl::Rsa ? "RSA" : ((key.algorithm() == QSsl::Dsa) ? "DSA" : "EC")))
<< ", " << key.length()
<< ')';
return debug;
diff --git a/src/network/ssl/qsslkey_p.h b/src/network/ssl/qsslkey_p.h
index 1254b33dfb..9cea860867 100644
--- a/src/network/ssl/qsslkey_p.h
+++ b/src/network/ssl/qsslkey_p.h
@@ -65,6 +65,9 @@ public:
#ifndef QT_NO_OPENSSL
, rsa(0)
, dsa(0)
+#ifndef OPENSSL_NO_EC
+ , ec(0)
+#endif
#endif
{
clear();
@@ -97,6 +100,9 @@ public:
EVP_PKEY *opaque;
RSA *rsa;
DSA *dsa;
+#ifndef OPENSSL_NO_EC
+ EC_KEY *ec;
+#endif
#else
enum Cipher {
DesCbc,
diff --git a/src/network/ssl/qsslkey_qt.cpp b/src/network/ssl/qsslkey_qt.cpp
index bc1ebc3c08..8ad0ea1746 100644
--- a/src/network/ssl/qsslkey_qt.cpp
+++ b/src/network/ssl/qsslkey_qt.cpp
@@ -43,6 +43,7 @@
#include "qsslkey_p.h"
#include "qasn1element_p.h"
+#include <QtCore/qdatastream.h>
#include <QtCore/qcryptographichash.h>
QT_USE_NAMESPACE
diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp
index 31c7b3087e..3838e70310 100644
--- a/src/network/ssl/qsslsocket.cpp
+++ b/src/network/ssl/qsslsocket.cpp
@@ -321,6 +321,7 @@ public:
QMutex mutex;
QList<QSslCipher> supportedCiphers;
+ QVector<QSslEllipticCurve> supportedEllipticCurves;
QExplicitlySharedDataPointer<QSslConfigurationPrivate> config;
};
Q_GLOBAL_STATIC(QSslSocketGlobalData, globalData)
@@ -902,6 +903,7 @@ void QSslSocket::setSslConfiguration(const QSslConfiguration &configuration)
d->configuration.localCertificateChain = configuration.localCertificateChain();
d->configuration.privateKey = configuration.privateKey();
d->configuration.ciphers = configuration.ciphers();
+ d->configuration.ellipticCurves = configuration.ellipticCurves();
d->configuration.caCertificates = configuration.caCertificates();
d->configuration.peerVerifyDepth = configuration.peerVerifyDepth();
d->configuration.peerVerifyMode = configuration.peerVerifyMode();
@@ -1270,6 +1272,120 @@ QList<QSslCipher> QSslSocket::supportedCiphers()
}
/*!
+ \since 5.5
+
+ Returns this socket's current list of elliptic curves. This
+ list is used during the socket's handshake phase for choosing an
+ elliptic curve (when using an elliptic curve cipher).
+ The returned list of curves is ordered by descending preference
+ (i.e., the first curve in the list is the most preferred one).
+
+ By default, this list is empty. An empty default list means that the
+ handshake phase can choose any of the curves supported by this system's SSL
+ libraries (which may vary from system to system). The list of curves
+ supported by this system's SSL libraries is returned by
+ supportedEllipticCurves().
+
+ You can restrict the list of curves used for choosing the session cipher
+ for this socket by calling setEllipticCurves() with a subset of the
+ supported ciphers. You can revert to using the entire set by calling
+ setEllipticCurves() with the list returned by supportedEllipticCurves().
+
+ \sa setEllipticCurves(), defaultEllipticCurves(), setDefaultEllipticCurves(), supportedEllipticCurves()
+*/
+QVector<QSslEllipticCurve> QSslSocket::ellipticCurves() const
+{
+ Q_D(const QSslSocket);
+ return d->configuration.ellipticCurves;
+}
+
+/*!
+ \since 5.5
+
+ Sets the list of elliptic curves to be used by this socket to \a curves,
+ which must contain a subset of the curves in the list returned by
+ supportedEllipticCurves().
+
+ Restricting the elliptic curves must be done before the handshake
+ phase, where the session cipher is chosen.
+
+ If an empty list is set, then the handshake phase can choose any of the
+ curves supported by this system's SSL libraries (which may vary from system
+ to system). The list of curves supported by this system's SSL libraries is
+ returned by supportedEllipticCurves().
+
+ Use setCipher() in order to disable the usage of elliptic curve ciphers.
+
+ \sa ellipticCurves(), setDefaultEllipticCurves(), supportedEllipticCurves()
+*/
+void QSslSocket::setEllipticCurves(const QVector<QSslEllipticCurve> &curves)
+{
+ Q_D(QSslSocket);
+ d->configuration.ellipticCurves = curves;
+}
+
+/*!
+ \since 5.5
+
+ Sets the list of elliptic curves to be used by all sockets in this
+ application to \a curves, which must contain a subset of the curves in the
+ list returned by supportedEllipticCurves().
+
+ Restricting the default elliptic curves only affects SSL sockets
+ that perform their handshake phase after the default list has been changed.
+
+ If an empty list is set, then the handshake phase can choose any of the
+ curves supported by this system's SSL libraries (which may vary from system
+ to system). The list of curves supported by this system's SSL libraries is
+ returned by supportedEllipticCurves().
+
+ Use setDefaultCiphers() in order to disable the usage of elliptic curve ciphers.
+
+ \sa setEllipticCurves(), defaultEllipticCurves(), supportedEllipticCurves()
+*/
+void QSslSocket::setDefaultEllipticCurves(const QVector<QSslEllipticCurve> &curves)
+{
+ QSslSocketPrivate::setDefaultEllipticCurves(curves);
+}
+
+
+/*!
+ \since 5.5
+
+ Returns the default elliptic curves list for all sockets in
+ this application. This list is used during the socket's handshake
+ phase when negotiating with the peer to choose a session cipher.
+ The list is ordered by preference (i.e., the first curve in the
+ list is the most preferred one).
+
+ By default, this list is empty. An empty default list means that the
+ handshake phase can choose any of the curves supported by this system's SSL
+ libraries (which may vary from system to system). The list of curves
+ supported by this system's SSL libraries is returned by
+ supportedEllipticCurves().
+
+ \sa setDefaultEllipticCurves(), supportedEllipticCurves()
+*/
+QVector<QSslEllipticCurve> QSslSocket::defaultEllipticCurves()
+{
+ return QSslSocketPrivate::defaultEllipticCurves();
+}
+
+/*!
+ \since 5.5
+
+ Returns the list of elliptic curves supported by this
+ system. This list is set by the system's SSL libraries and may
+ vary from system to system.
+
+ \sa ellipticCurves(), setEllipticCurves(), defaultEllipticCurves()
+*/
+QVector<QSslEllipticCurve> QSslSocket::supportedEllipticCurves()
+{
+ return QSslSocketPrivate::supportedEllipticCurves();
+}
+
+/*!
Searches all files in the \a path for certificates encoded in the
specified \a format and adds them to this socket's CA certificate
database. \a path can be explicit, or it can contain wildcards in
@@ -2036,6 +2152,46 @@ void QSslSocketPrivate::setDefaultSupportedCiphers(const QList<QSslCipher> &ciph
/*!
\internal
*/
+QVector<QSslEllipticCurve> QSslSocketPrivate::defaultEllipticCurves()
+{
+ QSslSocketPrivate::ensureInitialized();
+ const QMutexLocker locker(&globalData()->mutex);
+ return globalData()->config->ellipticCurves;
+}
+
+/*!
+ \internal
+*/
+QVector<QSslEllipticCurve> QSslSocketPrivate::supportedEllipticCurves()
+{
+ QSslSocketPrivate::ensureInitialized();
+ const QMutexLocker locker(&globalData()->mutex);
+ return globalData()->supportedEllipticCurves;
+}
+
+/*!
+ \internal
+*/
+void QSslSocketPrivate::setDefaultEllipticCurves(const QVector<QSslEllipticCurve> &curves)
+{
+ const QMutexLocker locker(&globalData()->mutex);
+ globalData()->config.detach();
+ globalData()->config->ellipticCurves = curves;
+}
+
+/*!
+ \internal
+*/
+void QSslSocketPrivate::setDefaultSupportedEllipticCurves(const QVector<QSslEllipticCurve> &curves)
+{
+ const QMutexLocker locker(&globalData()->mutex);
+ globalData()->config.detach();
+ globalData()->supportedEllipticCurves = curves;
+}
+
+/*!
+ \internal
+*/
QList<QSslCertificate> QSslSocketPrivate::defaultCaCertificates()
{
QSslSocketPrivate::ensureInitialized();
@@ -2128,10 +2284,8 @@ void QSslConfigurationPrivate::deepCopyDefaultConfiguration(QSslConfigurationPri
QMutexLocker locker(&globalData()->mutex);
const QSslConfigurationPrivate *global = globalData()->config.constData();
- if (!global) {
- ptr = 0;
+ if (!global)
return;
- }
ptr->ref.store(1);
ptr->peerCertificate = global->peerCertificate;
@@ -2146,6 +2300,7 @@ void QSslConfigurationPrivate::deepCopyDefaultConfiguration(QSslConfigurationPri
ptr->peerVerifyMode = global->peerVerifyMode;
ptr->peerVerifyDepth = global->peerVerifyDepth;
ptr->sslOptions = global->sslOptions;
+ ptr->ellipticCurves = global->ellipticCurves;
}
/*!
diff --git a/src/network/ssl/qsslsocket.h b/src/network/ssl/qsslsocket.h
index 1fe12e5989..f5ab1527dc 100644
--- a/src/network/ssl/qsslsocket.h
+++ b/src/network/ssl/qsslsocket.h
@@ -51,6 +51,7 @@ class QDir;
class QSslCipher;
class QSslCertificate;
class QSslConfiguration;
+class QSslEllipticCurve;
class QSslSocketPrivate;
class Q_NETWORK_EXPORT QSslSocket : public QTcpSocket
@@ -72,20 +73,20 @@ public:
explicit QSslSocket(QObject *parent = 0);
~QSslSocket();
- void resume(); // to continue after proxy authentication required, SSL errors etc.
+ void resume() Q_DECL_OVERRIDE; // to continue after proxy authentication required, SSL errors etc.
// Autostarting the SSL client handshake.
void connectToHostEncrypted(const QString &hostName, quint16 port, OpenMode mode = ReadWrite, NetworkLayerProtocol protocol = AnyIPProtocol);
void connectToHostEncrypted(const QString &hostName, quint16 port, const QString &sslPeerName, OpenMode mode = ReadWrite, NetworkLayerProtocol protocol = AnyIPProtocol);
bool setSocketDescriptor(qintptr socketDescriptor, SocketState state = ConnectedState,
- OpenMode openMode = ReadWrite);
+ OpenMode openMode = ReadWrite) Q_DECL_OVERRIDE;
using QAbstractSocket::connectToHost;
- void connectToHost(const QString &hostName, quint16 port, OpenMode openMode = ReadWrite, NetworkLayerProtocol protocol = AnyIPProtocol);
- void disconnectFromHost();
+ void connectToHost(const QString &hostName, quint16 port, OpenMode openMode = ReadWrite, NetworkLayerProtocol protocol = AnyIPProtocol) Q_DECL_OVERRIDE;
+ void disconnectFromHost() Q_DECL_OVERRIDE;
- virtual void setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value);
- virtual QVariant socketOption(QAbstractSocket::SocketOption option);
+ virtual void setSocketOption(QAbstractSocket::SocketOption option, const QVariant &value) Q_DECL_OVERRIDE;
+ virtual QVariant socketOption(QAbstractSocket::SocketOption option) Q_DECL_OVERRIDE;
SslMode mode() const;
bool isEncrypted() const;
@@ -103,16 +104,16 @@ public:
void setPeerVerifyName(const QString &hostName);
// From QIODevice
- qint64 bytesAvailable() const;
- qint64 bytesToWrite() const;
- bool canReadLine() const;
- void close();
- bool atEnd() const;
+ qint64 bytesAvailable() const Q_DECL_OVERRIDE;
+ qint64 bytesToWrite() const Q_DECL_OVERRIDE;
+ bool canReadLine() const Q_DECL_OVERRIDE;
+ void close() Q_DECL_OVERRIDE;
+ bool atEnd() const Q_DECL_OVERRIDE;
bool flush();
void abort();
// From QAbstractSocket:
- void setReadBufferSize(qint64 size);
+ void setReadBufferSize(qint64 size) Q_DECL_OVERRIDE;
// Similar to QIODevice's:
qint64 encryptedBytesAvailable() const;
@@ -149,6 +150,13 @@ public:
static QList<QSslCipher> defaultCiphers();
static QList<QSslCipher> supportedCiphers();
+ // EC settings.
+ QVector<QSslEllipticCurve> ellipticCurves() const;
+ void setEllipticCurves(const QVector<QSslEllipticCurve> &curves);
+ static void setDefaultEllipticCurves(const QVector<QSslEllipticCurve> &curves);
+ static QVector<QSslEllipticCurve> defaultEllipticCurves();
+ static QVector<QSslEllipticCurve> supportedEllipticCurves();
+
// CA settings.
bool addCaCertificates(const QString &path, QSsl::EncodingFormat format = QSsl::Pem,
QRegExp::PatternSyntax syntax = QRegExp::FixedString);
@@ -164,11 +172,11 @@ public:
static QList<QSslCertificate> defaultCaCertificates();
static QList<QSslCertificate> systemCaCertificates();
- bool waitForConnected(int msecs = 30000);
+ bool waitForConnected(int msecs = 30000) Q_DECL_OVERRIDE;
bool waitForEncrypted(int msecs = 30000);
- bool waitForReadyRead(int msecs = 30000);
- bool waitForBytesWritten(int msecs = 30000);
- bool waitForDisconnected(int msecs = 30000);
+ bool waitForReadyRead(int msecs = 30000) Q_DECL_OVERRIDE;
+ bool waitForBytesWritten(int msecs = 30000) Q_DECL_OVERRIDE;
+ bool waitForDisconnected(int msecs = 30000) Q_DECL_OVERRIDE;
QList<QSslError> sslErrors() const;
@@ -193,8 +201,8 @@ Q_SIGNALS:
void encryptedBytesWritten(qint64 totalBytes);
protected:
- qint64 readData(char *data, qint64 maxlen);
- qint64 writeData(const char *data, qint64 len);
+ qint64 readData(char *data, qint64 maxlen) Q_DECL_OVERRIDE;
+ qint64 writeData(const char *data, qint64 len) Q_DECL_OVERRIDE;
private:
Q_DECLARE_PRIVATE(QSslSocket)
diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp
index 8833e3fdd8..bf348f6f9f 100644
--- a/src/network/ssl/qsslsocket_openssl.cpp
+++ b/src/network/ssl/qsslsocket_openssl.cpp
@@ -1,6 +1,7 @@
/****************************************************************************
**
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2014 Governikus GmbH & Co. KG
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtNetwork module of the Qt Toolkit.
@@ -56,6 +57,7 @@
#include "qsslcertificate_p.h"
#include "qsslcipher_p.h"
#include "qsslkey_p.h"
+#include "qsslellipticcurve.h"
#include <QtCore/qdatetime.h>
#include <QtCore/qdebug.h>
@@ -480,6 +482,7 @@ void QSslSocketPrivate::ensureCiphersAndCertsLoaded()
s_loadedCiphersAndCerts = true;
resetDefaultCiphers();
+ resetDefaultEllipticCurves();
#ifndef QT_NO_LIBRARY
//load symbols needed to receive certificates from system store
@@ -628,6 +631,31 @@ void QSslSocketPrivate::resetDefaultCiphers()
setDefaultCiphers(defaultCiphers);
}
+void QSslSocketPrivate::resetDefaultEllipticCurves()
+{
+ QVector<QSslEllipticCurve> curves;
+
+#ifndef OPENSSL_NO_EC
+ const size_t curveCount = q_EC_get_builtin_curves(NULL, 0);
+
+ QVarLengthArray<EC_builtin_curve> builtinCurves(static_cast<int>(curveCount));
+
+ if (q_EC_get_builtin_curves(builtinCurves.data(), curveCount) == curveCount) {
+ for (size_t i = 0; i < curveCount; ++i) {
+ QSslEllipticCurve curve;
+ curve.id = builtinCurves[i].nid;
+ curves.append(curve);
+ }
+ }
+#endif // OPENSSL_NO_EC
+
+ // set the list of supported ECs, but not the list
+ // of *default* ECs. OpenSSL doesn't like forcing an EC for the wrong
+ // ciphersuite, so don't try it -- leave the empty list to mean
+ // "the implementation will choose the most suitable one".
+ setDefaultSupportedEllipticCurves(curves);
+}
+
QList<QSslCertificate> QSslSocketPrivate::systemCaCertificates()
{
ensureInitialized();
diff --git a/src/network/ssl/qsslsocket_openssl_p.h b/src/network/ssl/qsslsocket_openssl_p.h
index 29907e9ae7..69634ceab5 100644
--- a/src/network/ssl/qsslsocket_openssl_p.h
+++ b/src/network/ssl/qsslsocket_openssl_p.h
@@ -116,15 +116,15 @@ public:
QList<QPair<int, int> > errorList;
// Platform specific functions
- void startClientEncryption();
- void startServerEncryption();
- void transmit();
+ void startClientEncryption() Q_DECL_OVERRIDE;
+ void startServerEncryption() Q_DECL_OVERRIDE;
+ void transmit() Q_DECL_OVERRIDE;
bool startHandshake();
- void disconnectFromHost();
- void disconnected();
- QSslCipher sessionCipher() const;
- QSsl::SslProtocol sessionProtocol() const;
- void continueHandshake();
+ void disconnectFromHost() Q_DECL_OVERRIDE;
+ void disconnected() Q_DECL_OVERRIDE;
+ QSslCipher sessionCipher() const Q_DECL_OVERRIDE;
+ QSsl::SslProtocol sessionProtocol() const Q_DECL_OVERRIDE;
+ void continueHandshake() Q_DECL_OVERRIDE;
bool checkSslErrors();
#ifdef Q_OS_WIN
void fetchCaRootForCert(const QSslCertificate &cert);
diff --git a/src/network/ssl/qsslsocket_openssl_symbols.cpp b/src/network/ssl/qsslsocket_openssl_symbols.cpp
index ea6e84adef..ef87e77a3e 100644
--- a/src/network/ssl/qsslsocket_openssl_symbols.cpp
+++ b/src/network/ssl/qsslsocket_openssl_symbols.cpp
@@ -142,6 +142,10 @@ DEFINEFUNC3(int, BIO_read, BIO *a, a, void *b, b, int c, c, return -1, return)
DEFINEFUNC(BIO_METHOD *, BIO_s_mem, void, DUMMYARG, return 0, return)
DEFINEFUNC3(int, BIO_write, BIO *a, a, const void *b, b, int c, c, return -1, return)
DEFINEFUNC(int, BN_num_bits, const BIGNUM *a, a, return 0, return)
+#ifndef OPENSSL_NO_EC
+DEFINEFUNC(const EC_GROUP*, EC_KEY_get0_group, const EC_KEY* k, k, return 0, return)
+DEFINEFUNC(int, EC_GROUP_get_degree, const EC_GROUP* g, g, return 0, return)
+#endif
DEFINEFUNC(int, CRYPTO_num_locks, DUMMYARG, DUMMYARG, return 0, return)
DEFINEFUNC(void, CRYPTO_set_locking_callback, void (*a)(int, int, const char *, int), a, return, DUMMYARG)
DEFINEFUNC(void, CRYPTO_set_id_callback, unsigned long (*a)(), a, return, DUMMYARG)
@@ -160,14 +164,21 @@ DEFINEFUNC(const EVP_CIPHER *, EVP_des_ede3_cbc, DUMMYARG, DUMMYARG, return 0, r
DEFINEFUNC3(int, EVP_PKEY_assign, EVP_PKEY *a, a, int b, b, char *c, c, return -1, return)
DEFINEFUNC2(int, EVP_PKEY_set1_RSA, EVP_PKEY *a, a, RSA *b, b, return -1, return)
DEFINEFUNC2(int, EVP_PKEY_set1_DSA, EVP_PKEY *a, a, DSA *b, b, return -1, return)
+#ifndef OPENSSL_NO_EC
+DEFINEFUNC2(int, EVP_PKEY_set1_EC_KEY, EVP_PKEY *a, a, EC_KEY *b, b, return -1, return)
+#endif
DEFINEFUNC(void, EVP_PKEY_free, EVP_PKEY *a, a, return, DUMMYARG)
DEFINEFUNC(DSA *, EVP_PKEY_get1_DSA, EVP_PKEY *a, a, return 0, return)
DEFINEFUNC(RSA *, EVP_PKEY_get1_RSA, EVP_PKEY *a, a, return 0, return)
+#ifndef OPENSSL_NO_EC
+DEFINEFUNC(EC_KEY *, EVP_PKEY_get1_EC_KEY, EVP_PKEY *a, a, return 0, return)
+#endif
DEFINEFUNC(EVP_PKEY *, EVP_PKEY_new, DUMMYARG, DUMMYARG, return 0, return)
DEFINEFUNC(int, EVP_PKEY_type, int a, a, return NID_undef, return)
DEFINEFUNC2(int, i2d_X509, X509 *a, a, unsigned char **b, b, return -1, return)
DEFINEFUNC(const char *, OBJ_nid2sn, int a, a, return 0, return)
DEFINEFUNC(const char *, OBJ_nid2ln, int a, a, return 0, return)
+DEFINEFUNC(int, OBJ_sn2nid, const char *s, s, return 0, return)
DEFINEFUNC3(int, i2t_ASN1_OBJECT, char *a, a, int b, b, ASN1_OBJECT *c, c, return -1, return)
DEFINEFUNC4(int, OBJ_obj2txt, char *a, a, int b, b, ASN1_OBJECT *c, c, int d, d, return -1, return)
@@ -178,13 +189,25 @@ DEFINEFUNC6(void *, PEM_ASN1_write_bio, d2i_of_void *a, a, const char *b, b, BIO
#else
DEFINEFUNC4(DSA *, PEM_read_bio_DSAPrivateKey, BIO *a, a, DSA **b, b, pem_password_cb *c, c, void *d, d, return 0, return)
DEFINEFUNC4(RSA *, PEM_read_bio_RSAPrivateKey, BIO *a, a, RSA **b, b, pem_password_cb *c, c, void *d, d, return 0, return)
+#ifndef OPENSSL_NO_EC
+DEFINEFUNC4(EC_KEY *, PEM_read_bio_ECPrivateKey, BIO *a, a, EC_KEY **b, b, pem_password_cb *c, c, void *d, d, return 0, return)
+#endif
DEFINEFUNC7(int, PEM_write_bio_DSAPrivateKey, BIO *a, a, DSA *b, b, const EVP_CIPHER *c, c, unsigned char *d, d, int e, e, pem_password_cb *f, f, void *g, g, return 0, return)
DEFINEFUNC7(int, PEM_write_bio_RSAPrivateKey, BIO *a, a, RSA *b, b, const EVP_CIPHER *c, c, unsigned char *d, d, int e, e, pem_password_cb *f, f, void *g, g, return 0, return)
+#ifndef OPENSSL_NO_EC
+DEFINEFUNC7(int, PEM_write_bio_ECPrivateKey, BIO *a, a, EC_KEY *b, b, const EVP_CIPHER *c, c, unsigned char *d, d, int e, e, pem_password_cb *f, f, void *g, g, return 0, return)
+#endif
#endif
DEFINEFUNC4(DSA *, PEM_read_bio_DSA_PUBKEY, BIO *a, a, DSA **b, b, pem_password_cb *c, c, void *d, d, return 0, return)
DEFINEFUNC4(RSA *, PEM_read_bio_RSA_PUBKEY, BIO *a, a, RSA **b, b, pem_password_cb *c, c, void *d, d, return 0, return)
+#ifndef OPENSSL_NO_EC
+DEFINEFUNC4(EC_KEY *, PEM_read_bio_EC_PUBKEY, BIO *a, a, EC_KEY **b, b, pem_password_cb *c, c, void *d, d, return 0, return)
+#endif
DEFINEFUNC2(int, PEM_write_bio_DSA_PUBKEY, BIO *a, a, DSA *b, b, return 0, return)
DEFINEFUNC2(int, PEM_write_bio_RSA_PUBKEY, BIO *a, a, RSA *b, b, return 0, return)
+#ifndef OPENSSL_NO_EC
+DEFINEFUNC2(int, PEM_write_bio_EC_PUBKEY, BIO *a, a, EC_KEY *b, b, return 0, return)
+#endif
DEFINEFUNC2(void, RAND_seed, const void *a, a, int b, b, return, DUMMYARG)
DEFINEFUNC(int, RAND_status, void, DUMMYARG, return -1, return)
DEFINEFUNC(RSA *, RSA_new, DUMMYARG, DUMMYARG, return 0, return)
@@ -342,8 +365,14 @@ DEFINEFUNC(X509_STORE_CTX *, X509_STORE_CTX_new, DUMMYARG, DUMMYARG, return 0, r
#ifdef SSLEAY_MACROS
DEFINEFUNC2(int, i2d_DSAPrivateKey, const DSA *a, a, unsigned char **b, b, return -1, return)
DEFINEFUNC2(int, i2d_RSAPrivateKey, const RSA *a, a, unsigned char **b, b, return -1, return)
+#ifndef OPENSSL_NO_EC
+DEFINEFUNC2(int, i2d_ECPrivateKey, const EC_KEY *a, a, unsigned char **b, b, return -1, return)
+#endif
DEFINEFUNC3(RSA *, d2i_RSAPrivateKey, RSA **a, a, unsigned char **b, b, long c, c, return 0, return)
DEFINEFUNC3(DSA *, d2i_DSAPrivateKey, DSA **a, a, unsigned char **b, b, long c, c, return 0, return)
+#ifndef OPENSSL_NO_EC
+DEFINEFUNC3(EC_KEY *, d2i_ECPrivateKey, EC_KEY **a, a, unsigned char **b, b, long c, c, return 0, return)
+#endif
#endif
DEFINEFUNC(void, OPENSSL_add_all_algorithms_noconf, void, DUMMYARG, return, DUMMYARG)
DEFINEFUNC(void, OPENSSL_add_all_algorithms_conf, void, DUMMYARG, return, DUMMYARG)
@@ -370,8 +399,13 @@ DEFINEFUNC(DH *, DH_new, DUMMYARG, DUMMYARG, return 0, return)
DEFINEFUNC(void, DH_free, DH *dh, dh, return, DUMMYARG)
DEFINEFUNC3(BIGNUM *, BN_bin2bn, const unsigned char *s, s, int len, len, BIGNUM *ret, ret, return 0, return)
#ifndef OPENSSL_NO_EC
+DEFINEFUNC(EC_KEY *, EC_KEY_dup, const EC_KEY *ec, ec, return 0, return)
DEFINEFUNC(EC_KEY *, EC_KEY_new_by_curve_name, int nid, nid, return 0, return)
DEFINEFUNC(void, EC_KEY_free, EC_KEY *ecdh, ecdh, return, DUMMYARG)
+DEFINEFUNC2(size_t, EC_get_builtin_curves, EC_builtin_curve * r, r, size_t nitems, nitems, return 0, return)
+#if OPENSSL_VERSION_NUMBER >= 0x10002000L
+DEFINEFUNC(int, EC_curve_nist2nid, const char *name, name, return 0, return)
+#endif // OPENSSL_VERSION_NUMBER >= 0x10002000L
#endif // OPENSSL_NO_EC
DEFINEFUNC5(int, PKCS12_parse, PKCS12 *p12, p12, const char *pass, pass, EVP_PKEY **pkey, pkey, \
@@ -708,6 +742,10 @@ bool q_resolveOpenSslSymbols()
RESOLVEFUNC(BIO_read)
RESOLVEFUNC(BIO_s_mem)
RESOLVEFUNC(BIO_write)
+#ifndef OPENSSL_NO_EC
+ RESOLVEFUNC(EC_KEY_get0_group)
+ RESOLVEFUNC(EC_GROUP_get_degree)
+#endif
RESOLVEFUNC(BN_num_bits)
RESOLVEFUNC(CRYPTO_free)
RESOLVEFUNC(CRYPTO_num_locks)
@@ -722,13 +760,20 @@ bool q_resolveOpenSslSymbols()
RESOLVEFUNC(EVP_PKEY_assign)
RESOLVEFUNC(EVP_PKEY_set1_RSA)
RESOLVEFUNC(EVP_PKEY_set1_DSA)
+#ifndef OPENSSL_NO_EC
+ RESOLVEFUNC(EVP_PKEY_set1_EC_KEY)
+#endif
RESOLVEFUNC(EVP_PKEY_free)
RESOLVEFUNC(EVP_PKEY_get1_DSA)
RESOLVEFUNC(EVP_PKEY_get1_RSA)
+#ifndef OPENSSL_NO_EC
+ RESOLVEFUNC(EVP_PKEY_get1_EC_KEY)
+#endif
RESOLVEFUNC(EVP_PKEY_new)
RESOLVEFUNC(EVP_PKEY_type)
RESOLVEFUNC(OBJ_nid2sn)
RESOLVEFUNC(OBJ_nid2ln)
+ RESOLVEFUNC(OBJ_sn2nid)
RESOLVEFUNC(i2t_ASN1_OBJECT)
RESOLVEFUNC(OBJ_obj2txt)
RESOLVEFUNC(OBJ_obj2nid)
@@ -737,13 +782,25 @@ bool q_resolveOpenSslSymbols()
#else
RESOLVEFUNC(PEM_read_bio_DSAPrivateKey)
RESOLVEFUNC(PEM_read_bio_RSAPrivateKey)
+#ifndef OPENSSL_NO_EC
+ RESOLVEFUNC(PEM_read_bio_ECPrivateKey)
+#endif
RESOLVEFUNC(PEM_write_bio_DSAPrivateKey)
RESOLVEFUNC(PEM_write_bio_RSAPrivateKey)
+#ifndef OPENSSL_NO_EC
+ RESOLVEFUNC(PEM_write_bio_ECPrivateKey)
+#endif
#endif
RESOLVEFUNC(PEM_read_bio_DSA_PUBKEY)
RESOLVEFUNC(PEM_read_bio_RSA_PUBKEY)
+#ifndef OPENSSL_NO_EC
+ RESOLVEFUNC(PEM_read_bio_EC_PUBKEY)
+#endif
RESOLVEFUNC(PEM_write_bio_DSA_PUBKEY)
RESOLVEFUNC(PEM_write_bio_RSA_PUBKEY)
+#ifndef OPENSSL_NO_EC
+ RESOLVEFUNC(PEM_write_bio_EC_PUBKEY)
+#endif
RESOLVEFUNC(RAND_seed)
RESOLVEFUNC(RAND_status)
RESOLVEFUNC(RSA_new)
@@ -877,8 +934,14 @@ bool q_resolveOpenSslSymbols()
RESOLVEFUNC(DH_free)
RESOLVEFUNC(BN_bin2bn)
#ifndef OPENSSL_NO_EC
+ RESOLVEFUNC(EC_KEY_dup)
RESOLVEFUNC(EC_KEY_new_by_curve_name)
RESOLVEFUNC(EC_KEY_free)
+ RESOLVEFUNC(EC_get_builtin_curves)
+#if OPENSSL_VERSION_NUMBER >= 0x10002000L
+ if (q_SSLeay() >= 0x10002000L)
+ RESOLVEFUNC(EC_curve_nist2nid)
+#endif // OPENSSL_VERSION_NUMBER >= 0x10002000L
#endif // OPENSSL_NO_EC
RESOLVEFUNC(PKCS12_parse)
RESOLVEFUNC(d2i_PKCS12_bio)
diff --git a/src/network/ssl/qsslsocket_openssl_symbols_p.h b/src/network/ssl/qsslsocket_openssl_symbols_p.h
index e2e09e4feb..04cfd83de5 100644
--- a/src/network/ssl/qsslsocket_openssl_symbols_p.h
+++ b/src/network/ssl/qsslsocket_openssl_symbols_p.h
@@ -221,6 +221,10 @@ int q_BIO_read(BIO *a, void *b, int c);
BIO_METHOD *q_BIO_s_mem();
int q_BIO_write(BIO *a, const void *b, int c);
int q_BN_num_bits(const BIGNUM *a);
+#ifndef OPENSSL_NO_EC
+const EC_GROUP* q_EC_KEY_get0_group(const EC_KEY* k);
+int q_EC_GROUP_get_degree(const EC_GROUP* g);
+#endif
int q_CRYPTO_num_locks();
void q_CRYPTO_set_locking_callback(void (*a)(int, int, const char *, int));
void q_CRYPTO_set_id_callback(unsigned long (*a)());
@@ -240,14 +244,21 @@ const EVP_CIPHER *q_EVP_des_ede3_cbc();
int q_EVP_PKEY_assign(EVP_PKEY *a, int b, char *c);
Q_AUTOTEST_EXPORT int q_EVP_PKEY_set1_RSA(EVP_PKEY *a, RSA *b);
int q_EVP_PKEY_set1_DSA(EVP_PKEY *a, DSA *b);
+#ifndef OPENSSL_NO_EC
+int q_EVP_PKEY_set1_EC_KEY(EVP_PKEY *a, EC_KEY *b);
+#endif
void q_EVP_PKEY_free(EVP_PKEY *a);
RSA *q_EVP_PKEY_get1_RSA(EVP_PKEY *a);
DSA *q_EVP_PKEY_get1_DSA(EVP_PKEY *a);
+#ifndef OPENSSL_NO_EC
+EC_KEY *q_EVP_PKEY_get1_EC_KEY(EVP_PKEY *a);
+#endif
int q_EVP_PKEY_type(int a);
Q_AUTOTEST_EXPORT EVP_PKEY *q_EVP_PKEY_new();
int q_i2d_X509(X509 *a, unsigned char **b);
const char *q_OBJ_nid2sn(int a);
const char *q_OBJ_nid2ln(int a);
+int q_OBJ_sn2nid(const char *s);
int q_i2t_ASN1_OBJECT(char *buf, int buf_len, ASN1_OBJECT *obj);
int q_OBJ_obj2txt(char *buf, int buf_len, ASN1_OBJECT *obj, int no_name);
int q_OBJ_obj2nid(const ASN1_OBJECT *a);
@@ -259,15 +270,28 @@ void *q_PEM_ASN1_read_bio(d2i_of_void *a, const char *b, BIO *c, void **d, pem_p
#else
DSA *q_PEM_read_bio_DSAPrivateKey(BIO *a, DSA **b, pem_password_cb *c, void *d);
RSA *q_PEM_read_bio_RSAPrivateKey(BIO *a, RSA **b, pem_password_cb *c, void *d);
+#ifndef OPENSSL_NO_EC
+EC_KEY *q_PEM_read_bio_ECPrivateKey(BIO *a, EC_KEY **b, pem_password_cb *c, void *d);
+#endif
int q_PEM_write_bio_DSAPrivateKey(BIO *a, DSA *b, const EVP_CIPHER *c, unsigned char *d,
int e, pem_password_cb *f, void *g);
int q_PEM_write_bio_RSAPrivateKey(BIO *a, RSA *b, const EVP_CIPHER *c, unsigned char *d,
int e, pem_password_cb *f, void *g);
+#ifndef OPENSSL_NO_EC
+int q_PEM_write_bio_ECPrivateKey(BIO *a, EC_KEY *b, const EVP_CIPHER *c, unsigned char *d,
+ int e, pem_password_cb *f, void *g);
+#endif
#endif
DSA *q_PEM_read_bio_DSA_PUBKEY(BIO *a, DSA **b, pem_password_cb *c, void *d);
RSA *q_PEM_read_bio_RSA_PUBKEY(BIO *a, RSA **b, pem_password_cb *c, void *d);
+#ifndef OPENSSL_NO_EC
+EC_KEY *q_PEM_read_bio_EC_PUBKEY(BIO *a, EC_KEY **b, pem_password_cb *c, void *d);
+#endif
int q_PEM_write_bio_DSA_PUBKEY(BIO *a, DSA *b);
int q_PEM_write_bio_RSA_PUBKEY(BIO *a, RSA *b);
+#ifndef OPENSSL_NO_EC
+int q_PEM_write_bio_EC_PUBKEY(BIO *a, EC_KEY *b);
+#endif
void q_RAND_seed(const void *a, int b);
int q_RAND_status();
RSA *q_RSA_new();
@@ -432,9 +456,16 @@ BIGNUM *q_BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret);
#ifndef OPENSSL_NO_EC
// EC Diffie-Hellman support
+EC_KEY *q_EC_KEY_dup(const EC_KEY *src);
EC_KEY *q_EC_KEY_new_by_curve_name(int nid);
void q_EC_KEY_free(EC_KEY *ecdh);
#define q_SSL_CTX_set_tmp_ecdh(ctx, ecdh) q_SSL_CTX_ctrl((ctx), SSL_CTRL_SET_TMP_ECDH, 0, (char *)ecdh)
+
+// EC curves management
+size_t q_EC_get_builtin_curves(EC_builtin_curve *r, size_t nitems);
+#if OPENSSL_VERSION_NUMBER >= 0x10002000L
+int q_EC_curve_nist2nid(const char *name);
+#endif // OPENSSL_VERSION_NUMBER >= 0x10002000L
#endif // OPENSSL_NO_EC
// PKCS#12 support
diff --git a/src/network/ssl/qsslsocket_p.h b/src/network/ssl/qsslsocket_p.h
index 6e7a2c5520..3262b41bbd 100644
--- a/src/network/ssl/qsslsocket_p.h
+++ b/src/network/ssl/qsslsocket_p.h
@@ -135,6 +135,12 @@ public:
static void setDefaultSupportedCiphers(const QList<QSslCipher> &ciphers);
static void resetDefaultCiphers();
+ static QVector<QSslEllipticCurve> defaultEllipticCurves();
+ static QVector<QSslEllipticCurve> supportedEllipticCurves();
+ static void setDefaultEllipticCurves(const QVector<QSslEllipticCurve> &curves);
+ static void setDefaultSupportedEllipticCurves(const QVector<QSslEllipticCurve> &curves);
+ static void resetDefaultEllipticCurves();
+
static QList<QSslCertificate> defaultCaCertificates();
static QList<QSslCertificate> systemCaCertificates();
static void setDefaultCaCertificates(const QList<QSslCertificate> &certs);
@@ -180,8 +186,8 @@ public:
static QList<QByteArray> unixRootCertDirectories(); // used also by QSslContext
- virtual qint64 peek(char *data, qint64 maxSize);
- virtual QByteArray peek(qint64 maxSize);
+ virtual qint64 peek(char *data, qint64 maxSize) Q_DECL_OVERRIDE;
+ virtual QByteArray peek(qint64 maxSize) Q_DECL_OVERRIDE;
// Platform specific functions
virtual void startClientEncryption() = 0;
diff --git a/src/network/ssl/ssl.pri b/src/network/ssl/ssl.pri
index d0ba93b53f..961e29c062 100644
--- a/src/network/ssl/ssl.pri
+++ b/src/network/ssl/ssl.pri
@@ -9,6 +9,7 @@ contains(QT_CONFIG, ssl) | contains(QT_CONFIG, openssl) | contains(QT_CONFIG, op
ssl/qsslconfiguration_p.h \
ssl/qsslcipher.h \
ssl/qsslcipher_p.h \
+ ssl/qsslellipticcurve.h \
ssl/qsslerror.h \
ssl/qsslkey.h \
ssl/qsslkey_p.h \
@@ -21,6 +22,7 @@ contains(QT_CONFIG, ssl) | contains(QT_CONFIG, openssl) | contains(QT_CONFIG, op
ssl/qsslcertificate.cpp \
ssl/qsslconfiguration.cpp \
ssl/qsslcipher.cpp \
+ ssl/qsslellipticcurve.cpp \
ssl/qsslkey_p.cpp \
ssl/qsslerror.cpp \
ssl/qsslsocket.cpp \
@@ -32,7 +34,8 @@ contains(QT_CONFIG, ssl) | contains(QT_CONFIG, openssl) | contains(QT_CONFIG, op
ssl/qsslcertificate_winrt.cpp \
ssl/qsslkey_qt.cpp \
ssl/qsslkey_winrt.cpp \
- ssl/qsslsocket_winrt.cpp
+ ssl/qsslsocket_winrt.cpp \
+ ssl/qsslellipticcurve_dummy.cpp
}
}
@@ -42,6 +45,7 @@ contains(QT_CONFIG, openssl) | contains(QT_CONFIG, openssl-linked) {
ssl/qsslsocket_openssl_symbols_p.h
SOURCES += ssl/qsslcertificate_openssl.cpp \
ssl/qsslcontext_openssl.cpp \
+ ssl/qsslellipticcurve_openssl.cpp \
ssl/qsslkey_openssl.cpp \
ssl/qsslsocket_openssl.cpp \
ssl/qsslsocket_openssl_symbols.cpp
diff --git a/src/opengl/gl2paintengineex/qglengineshadermanager.cpp b/src/opengl/gl2paintengineex/qglengineshadermanager.cpp
index cc7c839abd..eba5dff8d4 100644
--- a/src/opengl/gl2paintengineex/qglengineshadermanager.cpp
+++ b/src/opengl/gl2paintengineex/qglengineshadermanager.cpp
@@ -60,13 +60,13 @@ public:
delete m_shaders;
}
- void invalidateResource()
+ void invalidateResource() Q_DECL_OVERRIDE
{
delete m_shaders;
m_shaders = 0;
}
- void freeResource(QOpenGLContext *)
+ void freeResource(QOpenGLContext *) Q_DECL_OVERRIDE
{
}
diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
index 1fa5723d85..a12b5ee98d 100644
--- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
+++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2.cpp
@@ -1583,10 +1583,8 @@ void QGL2PaintEngineEx::drawTextItem(const QPointF &p, const QTextItem &textItem
{
QStaticTextItem staticTextItem;
- staticTextItem.chars = const_cast<QChar *>(ti.chars);
staticTextItem.setFontEngine(ti.fontEngine);
staticTextItem.glyphs = glyphs.data();
- staticTextItem.numChars = ti.num_chars;
staticTextItem.numGlyphs = glyphs.size();
staticTextItem.glyphPositions = positions.data();
diff --git a/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h b/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h
index ac1d63df17..162b6a6bd9 100644
--- a/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h
+++ b/src/opengl/gl2paintengineex/qpaintengineex_opengl2_p.h
@@ -102,37 +102,37 @@ public:
QGL2PaintEngineEx();
~QGL2PaintEngineEx();
- bool begin(QPaintDevice *device);
+ bool begin(QPaintDevice *device) Q_DECL_OVERRIDE;
void ensureActive();
- bool end();
-
- virtual void clipEnabledChanged();
- virtual void penChanged();
- virtual void brushChanged();
- virtual void brushOriginChanged();
- virtual void opacityChanged();
- virtual void compositionModeChanged();
- virtual void renderHintsChanged();
- virtual void transformChanged();
-
- virtual void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr);
+ bool end() Q_DECL_OVERRIDE;
+
+ virtual void clipEnabledChanged() Q_DECL_OVERRIDE;
+ virtual void penChanged() Q_DECL_OVERRIDE;
+ virtual void brushChanged() Q_DECL_OVERRIDE;
+ virtual void brushOriginChanged() Q_DECL_OVERRIDE;
+ virtual void opacityChanged() Q_DECL_OVERRIDE;
+ virtual void compositionModeChanged() Q_DECL_OVERRIDE;
+ virtual void renderHintsChanged() Q_DECL_OVERRIDE;
+ virtual void transformChanged() Q_DECL_OVERRIDE;
+
+ virtual void drawPixmap(const QRectF &r, const QPixmap &pm, const QRectF &sr) Q_DECL_OVERRIDE;
virtual void drawPixmapFragments(const QPainter::PixmapFragment *fragments, int fragmentCount, const QPixmap &pixmap,
- QPainter::PixmapFragmentHints hints);
+ QPainter::PixmapFragmentHints hints) Q_DECL_OVERRIDE;
virtual void drawImage(const QRectF &r, const QImage &pm, const QRectF &sr,
- Qt::ImageConversionFlags flags = Qt::AutoColor);
- virtual void drawTextItem(const QPointF &p, const QTextItem &textItem);
- virtual void fill(const QVectorPath &path, const QBrush &brush);
- virtual void stroke(const QVectorPath &path, const QPen &pen);
- virtual void clip(const QVectorPath &path, Qt::ClipOperation op);
+ Qt::ImageConversionFlags flags = Qt::AutoColor) Q_DECL_OVERRIDE;
+ virtual void drawTextItem(const QPointF &p, const QTextItem &textItem) Q_DECL_OVERRIDE;
+ virtual void fill(const QVectorPath &path, const QBrush &brush) Q_DECL_OVERRIDE;
+ virtual void stroke(const QVectorPath &path, const QPen &pen) Q_DECL_OVERRIDE;
+ virtual void clip(const QVectorPath &path, Qt::ClipOperation op) Q_DECL_OVERRIDE;
- virtual void drawStaticTextItem(QStaticTextItem *textItem);
+ virtual void drawStaticTextItem(QStaticTextItem *textItem) Q_DECL_OVERRIDE;
bool drawTexture(const QRectF &r, GLuint textureId, const QSize &size, const QRectF &sr);
- Type type() const { return OpenGL2; }
+ Type type() const Q_DECL_OVERRIDE { return OpenGL2; }
- virtual void setState(QPainterState *s);
- virtual QPainterState *createState(QPainterState *orig) const;
+ virtual void setState(QPainterState *s) Q_DECL_OVERRIDE;
+ virtual QPainterState *createState(QPainterState *orig) const Q_DECL_OVERRIDE;
inline QGL2PaintEngineState *state() {
return static_cast<QGL2PaintEngineState *>(QPaintEngineEx::state());
}
@@ -140,16 +140,16 @@ public:
return static_cast<const QGL2PaintEngineState *>(QPaintEngineEx::state());
}
- void beginNativePainting();
- void endNativePainting();
+ void beginNativePainting() Q_DECL_OVERRIDE;
+ void endNativePainting() Q_DECL_OVERRIDE;
void invalidateState();
void setRenderTextActive(bool);
bool isNativePaintingActive() const;
- bool requiresPretransformedGlyphPositions(QFontEngine *, const QTransform &) const { return false; }
- bool shouldDrawCachedGlyphs(QFontEngine *, const QTransform &) const;
+ bool requiresPretransformedGlyphPositions(QFontEngine *, const QTransform &) const Q_DECL_OVERRIDE { return false; }
+ bool shouldDrawCachedGlyphs(QFontEngine *, const QTransform &) const Q_DECL_OVERRIDE;
void setTranslateZ(GLfloat z);
@@ -238,7 +238,7 @@ public:
void updateClipScissorTest();
void setScissor(const QRect &rect);
void regenerateClip();
- void systemStateChanged();
+ void systemStateChanged() Q_DECL_OVERRIDE;
static QGLEngineShaderManager* shaderManagerForEngine(QGL2PaintEngineEx *engine) { return engine->d_func()->shaderManager; }
diff --git a/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h b/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h
index fe6f777af5..652cea8151 100644
--- a/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h
+++ b/src/opengl/gl2paintengineex/qtextureglyphcache_gl_p.h
@@ -73,7 +73,7 @@ struct QGLGlyphTexture : public QOpenGLSharedResource
#endif
}
- void freeResource(QOpenGLContext *context)
+ void freeResource(QOpenGLContext *context) Q_DECL_OVERRIDE
{
const QGLContext *ctx = QGLContext::fromOpenGLContext(context);
#ifdef QT_GL_TEXTURE_GLYPH_CACHE_DEBUG
@@ -87,7 +87,7 @@ struct QGLGlyphTexture : public QOpenGLSharedResource
ctx->contextHandle()->functions()->glDeleteTextures(1, &m_texture);
}
- void invalidateResource()
+ void invalidateResource() Q_DECL_OVERRIDE
{
m_texture = 0;
m_fbo = 0;
@@ -107,12 +107,12 @@ public:
QGLTextureGlyphCache(QFontEngine::GlyphFormat format, const QTransform &matrix);
~QGLTextureGlyphCache();
- virtual void createTextureData(int width, int height);
- virtual void resizeTextureData(int width, int height);
- virtual void fillTexture(const Coord &c, glyph_t glyph, QFixed subPixelPosition);
- virtual int glyphPadding() const;
- virtual int maxTextureWidth() const;
- virtual int maxTextureHeight() const;
+ virtual void createTextureData(int width, int height) Q_DECL_OVERRIDE;
+ virtual void resizeTextureData(int width, int height) Q_DECL_OVERRIDE;
+ virtual void fillTexture(const Coord &c, glyph_t glyph, QFixed subPixelPosition) Q_DECL_OVERRIDE;
+ virtual int glyphPadding() const Q_DECL_OVERRIDE;
+ virtual int maxTextureWidth() const Q_DECL_OVERRIDE;
+ virtual int maxTextureHeight() const Q_DECL_OVERRIDE;
inline GLuint texture() const {
QGLTextureGlyphCache *that = const_cast<QGLTextureGlyphCache *>(this);
diff --git a/src/opengl/qgl.h b/src/opengl/qgl.h
index 482c215b51..cf35dc7e20 100644
--- a/src/opengl/qgl.h
+++ b/src/opengl/qgl.h
@@ -398,7 +398,7 @@ public:
const QFont & fnt = QFont());
void renderText(double x, double y, double z, const QString & str,
const QFont & fnt = QFont());
- QPaintEngine *paintEngine() const;
+ QPaintEngine *paintEngine() const Q_DECL_OVERRIDE;
GLuint bindTexture(const QImage &image, GLenum target, GLint format,
QGLContext::BindOptions options);
@@ -422,7 +422,7 @@ public Q_SLOTS:
virtual void updateOverlayGL();
protected:
- bool event(QEvent *);
+ bool event(QEvent *) Q_DECL_OVERRIDE;
virtual void initializeGL();
virtual void resizeGL(int w, int h);
virtual void paintGL();
@@ -434,8 +434,8 @@ protected:
void setAutoBufferSwap(bool on);
bool autoBufferSwap() const;
- void paintEvent(QPaintEvent*);
- void resizeEvent(QResizeEvent*);
+ void paintEvent(QPaintEvent*) Q_DECL_OVERRIDE;
+ void resizeEvent(QResizeEvent*) Q_DECL_OVERRIDE;
virtual void glInit();
virtual void glDraw();
diff --git a/src/opengl/qgl_p.h b/src/opengl/qgl_p.h
index 4cf656fd86..20b17fb4ae 100644
--- a/src/opengl/qgl_p.h
+++ b/src/opengl/qgl_p.h
@@ -134,7 +134,7 @@ public:
void initContext(QGLContext *context, const QGLWidget* shareWidget);
bool renderCxPm(QPixmap *pixmap);
void cleanupColormaps();
- void aboutToDestroy() {
+ void aboutToDestroy() Q_DECL_OVERRIDE {
if (glcx && !parent_changing)
glcx->reset();
}
@@ -482,12 +482,12 @@ public:
}
protected:
- void invalidateResource()
+ void invalidateResource() Q_DECL_OVERRIDE
{
m_id = 0;
}
- void freeResource(QOpenGLContext *context)
+ void freeResource(QOpenGLContext *context) Q_DECL_OVERRIDE
{
if (m_id) {
freeResource(QGLContext::fromOpenGLContext(context), m_id);
@@ -511,7 +511,7 @@ public:
}
protected:
- void freeResource(QGLContext *ctx, GLuint id)
+ void freeResource(QGLContext *ctx, GLuint id) Q_DECL_OVERRIDE
{
m_func(ctx, id);
}
diff --git a/src/opengl/qglframebufferobject.h b/src/opengl/qglframebufferobject.h
index 2382145da1..009254c903 100644
--- a/src/opengl/qglframebufferobject.h
+++ b/src/opengl/qglframebufferobject.h
@@ -78,7 +78,7 @@ public:
QImage toImage() const;
Attachment attachment() const;
- QPaintEngine *paintEngine() const;
+ QPaintEngine *paintEngine() const Q_DECL_OVERRIDE;
GLuint handle() const;
static bool bindDefault();
@@ -95,8 +95,8 @@ public:
GLenum filter = GL_NEAREST);
protected:
- int metric(PaintDeviceMetric metric) const;
- int devType() const { return QInternal::FramebufferObject; }
+ int metric(PaintDeviceMetric metric) const Q_DECL_OVERRIDE;
+ int devType() const Q_DECL_OVERRIDE { return QInternal::FramebufferObject; }
private:
Q_DISABLE_COPY(QGLFramebufferObject)
diff --git a/src/opengl/qglframebufferobject_p.h b/src/opengl/qglframebufferobject_p.h
index 95a64a1665..bf4bfef0b2 100644
--- a/src/opengl/qglframebufferobject_p.h
+++ b/src/opengl/qglframebufferobject_p.h
@@ -100,11 +100,11 @@ public:
class QGLFBOGLPaintDevice : public QGLPaintDevice
{
public:
- virtual QPaintEngine* paintEngine() const {return fbo->paintEngine();}
- virtual QSize size() const {return fbo->size();}
- virtual QGLContext* context() const;
- virtual QGLFormat format() const {return fboFormat;}
- virtual bool alphaRequested() const { return reqAlpha; }
+ virtual QPaintEngine* paintEngine() const Q_DECL_OVERRIDE {return fbo->paintEngine();}
+ virtual QSize size() const Q_DECL_OVERRIDE {return fbo->size();}
+ virtual QGLContext* context() const Q_DECL_OVERRIDE;
+ virtual QGLFormat format() const Q_DECL_OVERRIDE {return fboFormat;}
+ virtual bool alphaRequested() const Q_DECL_OVERRIDE { return reqAlpha; }
void setFBO(QGLFramebufferObject* f,
QGLFramebufferObject::Attachment attachment);
diff --git a/src/opengl/qglfunctions.cpp b/src/opengl/qglfunctions.cpp
index a397adbb60..8024d7e422 100644
--- a/src/opengl/qglfunctions.cpp
+++ b/src/opengl/qglfunctions.cpp
@@ -153,12 +153,12 @@ struct QGLFunctionsPrivateEx : public QGLFunctionsPrivate, public QOpenGLSharedR
delete funcs;
}
- void invalidateResource()
+ void invalidateResource() Q_DECL_OVERRIDE
{
m_features = -1;
}
- void freeResource(QOpenGLContext *)
+ void freeResource(QOpenGLContext *) Q_DECL_OVERRIDE
{
// no gl resources to free
}
diff --git a/src/opengl/qglpaintdevice_p.h b/src/opengl/qglpaintdevice_p.h
index f0855317ea..624cfacd89 100644
--- a/src/opengl/qglpaintdevice_p.h
+++ b/src/opengl/qglpaintdevice_p.h
@@ -58,7 +58,7 @@ public:
QGLPaintDevice();
virtual ~QGLPaintDevice();
- int devType() const {return QInternal::OpenGL;}
+ int devType() const Q_DECL_OVERRIDE {return QInternal::OpenGL;}
virtual void beginPaint();
virtual void ensureActiveTarget();
@@ -74,7 +74,7 @@ public:
static QGLPaintDevice* getDevice(QPaintDevice*);
protected:
- int metric(QPaintDevice::PaintDeviceMetric metric) const;
+ int metric(QPaintDevice::PaintDeviceMetric metric) const Q_DECL_OVERRIDE;
GLuint m_previousFBO;
GLuint m_thisFBO;
};
@@ -87,13 +87,13 @@ class Q_OPENGL_EXPORT QGLWidgetGLPaintDevice : public QGLPaintDevice
public:
QGLWidgetGLPaintDevice();
- virtual QPaintEngine* paintEngine() const;
+ virtual QPaintEngine* paintEngine() const Q_DECL_OVERRIDE;
// QGLWidgets need to do swapBufers in endPaint:
- virtual void beginPaint();
- virtual void endPaint();
- virtual QSize size() const;
- virtual QGLContext* context() const;
+ virtual void beginPaint() Q_DECL_OVERRIDE;
+ virtual void endPaint() Q_DECL_OVERRIDE;
+ virtual QSize size() const Q_DECL_OVERRIDE;
+ virtual QGLContext* context() const Q_DECL_OVERRIDE;
void setWidget(QGLWidget*);
diff --git a/src/opengl/qglpixelbuffer.h b/src/opengl/qglpixelbuffer.h
index d4b88598af..975fe4706e 100644
--- a/src/opengl/qglpixelbuffer.h
+++ b/src/opengl/qglpixelbuffer.h
@@ -75,14 +75,14 @@ public:
Qt::HANDLE handle() const;
QImage toImage() const;
- QPaintEngine *paintEngine() const;
+ QPaintEngine *paintEngine() const Q_DECL_OVERRIDE;
QGLFormat format() const;
static bool hasOpenGLPbuffers();
protected:
- int metric(PaintDeviceMetric metric) const;
- int devType() const { return QInternal::Pbuffer; }
+ int metric(PaintDeviceMetric metric) const Q_DECL_OVERRIDE;
+ int devType() const Q_DECL_OVERRIDE { return QInternal::Pbuffer; }
private:
Q_DISABLE_COPY(QGLPixelBuffer)
diff --git a/src/opengl/qgraphicsshadereffect.cpp b/src/opengl/qgraphicsshadereffect.cpp
index 928504ac73..07ae10bd30 100644
--- a/src/opengl/qgraphicsshadereffect.cpp
+++ b/src/opengl/qgraphicsshadereffect.cpp
@@ -139,7 +139,7 @@ public:
setSource(source);
}
- void setUniforms(QGLShaderProgram *program);
+ void setUniforms(QGLShaderProgram *program) Q_DECL_OVERRIDE;
QGraphicsShaderEffect *effect;
};
diff --git a/src/opengl/qgraphicsshadereffect_p.h b/src/opengl/qgraphicsshadereffect_p.h
index 794a9177fd..de00e28dc4 100644
--- a/src/opengl/qgraphicsshadereffect_p.h
+++ b/src/opengl/qgraphicsshadereffect_p.h
@@ -69,7 +69,7 @@ public:
void setPixelShaderFragment(const QByteArray& code);
protected:
- void draw(QPainter *painter);
+ void draw(QPainter *painter) Q_DECL_OVERRIDE;
void setUniformsDirty();
virtual void setUniforms(QGLShaderProgram *program);
diff --git a/src/platformheaders/doc/snippets/qwindowswindowfunctions/main.cpp b/src/platformheaders/doc/snippets/qwindowswindowfunctions/main.cpp
new file mode 100644
index 0000000000..c5f2f37f11
--- /dev/null
+++ b/src/platformheaders/doc/snippets/qwindowswindowfunctions/main.cpp
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:BSD$
+** You may use this file under the terms of the BSD license as follows:
+**
+** "Redistribution and use in source and binary forms, with or without
+** modification, are permitted provided that the following conditions are
+** met:
+** * Redistributions of source code must retain the above copyright
+** notice, this list of conditions and the following disclaimer.
+** * Redistributions in binary form must reproduce the above copyright
+** notice, this list of conditions and the following disclaimer in
+** the documentation and/or other materials provided with the
+** distribution.
+** * Neither the name of Digia Plc and its Subsidiary(-ies) nor the names
+** of its contributors may be used to endorse or promote products derived
+** from this software without specific prior written permission.
+**
+**
+** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtWidgets>
+#include <QtPlatformHeaders/qwindowswindowfunctions.h>
+
+//! [0]
+int main(int argc, char **argv)
+{
+ QApplication app(argc, argv);
+
+ QPushButton topLevelWidget("Hello World!");
+ topLevelWidget.winId(); //have to create the QWindow
+
+ QWindow *tlwWindow = topLevelWidget.windowHandle();
+
+ QWindowsWindowFunctions::setTouchWindowTouchType(tlwWindow, QWindowsWindowFunctions::WantPalmTouch);
+
+ topLevelWidget.show();
+
+ return app.exec();
+}
+//! [0]
+
diff --git a/src/platformheaders/doc/src/qtplatformheaders.qdoc b/src/platformheaders/doc/src/qtplatformheaders.qdoc
index 94059e5508..9df9f996bc 100644
--- a/src/platformheaders/doc/src/qtplatformheaders.qdoc
+++ b/src/platformheaders/doc/src/qtplatformheaders.qdoc
@@ -78,7 +78,7 @@
classes is only guaranteed to work with the Qt version it was developed
against. Unlike QPA however, source compatibility is guaranteed.
- \sa QXcbWindowFunctions
+ \sa QXcbWindowFunctions QWindowsWindowFunctions
\section1 API Reference
\list
diff --git a/src/platformheaders/platformheaders.pro b/src/platformheaders/platformheaders.pro
index a3132ecf23..5e875f7d2d 100644
--- a/src/platformheaders/platformheaders.pro
+++ b/src/platformheaders/platformheaders.pro
@@ -6,6 +6,7 @@ MODULE_INCNAME = QtPlatformHeaders
include(nativecontexts/nativecontexts.pri)
include(xcbfunctions/xcbfunctions.pri)
include(eglfsfunctions/eglfsfunctions.pri)
+include(windowsfunctions/windowsfunctions.pri)
QMAKE_DOCS = $$PWD/doc/qtplatformheaders.qdocconf
diff --git a/src/platformheaders/windowsfunctions/qwindowswindowfunctions.h b/src/platformheaders/windowsfunctions/qwindowswindowfunctions.h
new file mode 100644
index 0000000000..6e585b9dfe
--- /dev/null
+++ b/src/platformheaders/windowsfunctions/qwindowswindowfunctions.h
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QWINDOWSWINDOWFUNCTIONS_H
+#define QWINDOWSWINDOWFUNCTIONS_H
+
+#include <QtCore/QByteArray>
+#include <QtGui/QGuiApplication>
+
+QT_BEGIN_NAMESPACE
+
+class QWindow;
+
+class QWindowsWindowFunctions {
+public:
+ enum TouchWindowTouchType {
+ NormalTouch = 0x00000000,
+ FineTouch = 0x00000001,
+ WantPalmTouch = 0x00000002
+ };
+
+ Q_DECLARE_FLAGS(TouchWindowTouchTypes, TouchWindowTouchType)
+
+ typedef void (*SetTouchWindowTouchType)(QWindow *window, QWindowsWindowFunctions::TouchWindowTouchTypes touchType);
+ static const QByteArray setTouchWindowTouchTypeIdentifier() { return QByteArrayLiteral("WindowsSetTouchWindowTouchType"); }
+
+ static void setTouchWindowTouchType(QWindow *window, TouchWindowTouchTypes type)
+ {
+ SetTouchWindowTouchType func = reinterpret_cast<SetTouchWindowTouchType>(QGuiApplication::platformFunction(setTouchWindowTouchTypeIdentifier()));
+ if (func)
+ func(window, type);
+ }
+};
+
+Q_DECLARE_OPERATORS_FOR_FLAGS(QWindowsWindowFunctions::TouchWindowTouchTypes)
+
+QT_END_NAMESPACE
+
+#endif // QWINDOWSWINDOWFUNCTIONS_H
diff --git a/src/platformheaders/windowsfunctions/qwindowswindowfunctions.qdoc b/src/platformheaders/windowsfunctions/qwindowswindowfunctions.qdoc
new file mode 100644
index 0000000000..494a106575
--- /dev/null
+++ b/src/platformheaders/windowsfunctions/qwindowswindowfunctions.qdoc
@@ -0,0 +1,71 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:FDL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Free Documentation License Usage
+** Alternatively, this file may be used under the terms of the GNU Free
+** Documentation License version 1.3 as published by the Free Software
+** Foundation and appearing in the file included in the packaging of
+** this file. Please review the following information to ensure
+** the GNU Free Documentation License version 1.3 requirements
+** will be met: http://www.gnu.org/copyleft/fdl.html.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*!
+ \class QWindowsWindowFunctions
+ \inmodule QtPlatformHeaders
+ \since 5.5
+ \brief The QWindowsWindowFunctions class is an inline class containing
+ miscellaneous functionality for Windows window specific functionality.
+
+ A common usage pattern is as follows:
+ \snippet qwindowswindowfunctions/main.cpp 0
+
+ \note There is no binary compatibility guarantee for this class,
+ meaning that an application using it is only guaranteed to work with the Qt
+ version it was developed against.
+*/
+
+/*!
+ \enum QWindowsWindowFunctions::TouchWindowTouchType
+
+ This enum represents the supported TouchWindow touch flags for RegisterTouchWindow().
+
+ \value NormalTouch
+ \value FineTouch
+ \value WantPalmTouch
+*/
+
+/*!
+ \typedef QWindowsWindowFunctions::SetTouchWindowTouchType
+
+ This is the typedef for the function returned by QGuiApplication::platformFunction when passed setTouchWindowTouchTypeIdentifier.
+*/
+
+/*!
+ \fn QByteArray QWindowsWindowFunctions::setTouchWindowTouchTypeIdentifier()
+
+ This function returns the bytearray that can be used to query
+ QGuiApplication::platformFunction to retrieve the SetTouchWindowTouchType function.
+*/
+
+/*!
+ \fn void QWindowsWindowFunctions::setTouchWindowTouchType(QWindow *window, TouchWindowTouchTypes type)
+
+ This is a convenience function that can be used directly instead of resolving the function pointer.
+ \a window and \a type will be relayed to the function retrieved by QGuiApplication
+*/
diff --git a/src/platformheaders/windowsfunctions/windowsfunctions.pri b/src/platformheaders/windowsfunctions/windowsfunctions.pri
new file mode 100644
index 0000000000..479245db80
--- /dev/null
+++ b/src/platformheaders/windowsfunctions/windowsfunctions.pri
@@ -0,0 +1 @@
+HEADERS += $$PWD/qwindowswindowfunctions.h
diff --git a/src/platformsupport/accessibility/qaccessiblebridgeutils_p.h b/src/platformsupport/accessibility/qaccessiblebridgeutils_p.h
index bce2f90a09..e615e8a336 100644
--- a/src/platformsupport/accessibility/qaccessiblebridgeutils_p.h
+++ b/src/platformsupport/accessibility/qaccessiblebridgeutils_p.h
@@ -34,11 +34,11 @@
#ifndef QACCESSIBLEBRIDGEUTILS_H
#define QACCESSIBLEBRIDGEUTILS_H
-#ifndef QT_NO_ACCESSIBILITY
-
#include <QtCore/qstringlist.h>
#include <QtGui/qaccessible.h>
+#ifndef QT_NO_ACCESSIBILITY
+
QT_BEGIN_NAMESPACE
namespace QAccessibleBridgeUtils {
diff --git a/src/platformsupport/dbustray/qdbustraytypes.cpp b/src/platformsupport/dbustray/qdbustraytypes.cpp
new file mode 100644
index 0000000000..0ca6669508
--- /dev/null
+++ b/src/platformsupport/dbustray/qdbustraytypes.cpp
@@ -0,0 +1,163 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Marco Martin <notmart@gmail.com>
+** Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qdbustraytypes_p.h"
+
+#include <QDBusConnection>
+#include <QImage>
+#include <QIcon>
+#include <QImage>
+#include <QPixmap>
+#include <QDebug>
+#include <QtEndian>
+
+QXdgDBusImageVector iconToQXdgDBusImageVector(const QIcon &icon)
+{
+ QXdgDBusImageVector ret;
+ foreach (QSize size, icon.availableSizes()) {
+ QXdgDBusImageStruct kim;
+ kim.width = size.width();
+ kim.height = size.height();
+ // Protocol specifies ARGB32 format in network byte order
+ QImage im = icon.pixmap(size).toImage().convertToFormat(QImage::Format_ARGB32);
+ kim.data = QByteArray((char *)(im.bits()), im.byteCount());
+ if (QSysInfo::ByteOrder == QSysInfo::LittleEndian) {
+ for (char *ptr = kim.data.begin(); ptr < kim.data.end(); ptr += 4)
+ qToUnaligned(qToBigEndian<quint32>(*ptr), reinterpret_cast<uchar *>(ptr));
+ }
+ ret << kim;
+ }
+ return ret;
+}
+
+// Marshall the ImageStruct data into a D-Bus argument
+const QDBusArgument &operator<<(QDBusArgument &argument, const QXdgDBusImageStruct &icon)
+{
+ argument.beginStructure();
+ argument << icon.width;
+ argument << icon.height;
+ argument << icon.data;
+ argument.endStructure();
+ return argument;
+}
+
+// Retrieve the ImageStruct data from the D-Bus argument
+const QDBusArgument &operator>>(const QDBusArgument &argument, QXdgDBusImageStruct &icon)
+{
+ qint32 width;
+ qint32 height;
+ QByteArray data;
+
+ argument.beginStructure();
+ argument >> width;
+ argument >> height;
+ argument >> data;
+ argument.endStructure();
+
+ icon.width = width;
+ icon.height = height;
+ icon.data = data;
+
+ return argument;
+}
+
+// Marshall the ImageVector data into a D-Bus argument
+const QDBusArgument &operator<<(QDBusArgument &argument, const QXdgDBusImageVector &iconVector)
+{
+ argument.beginArray(qMetaTypeId<QXdgDBusImageStruct>());
+ for (int i = 0; i < iconVector.size(); ++i) {
+ argument << iconVector[i];
+ }
+ argument.endArray();
+ return argument;
+}
+
+// Retrieve the ImageVector data from the D-Bus argument
+const QDBusArgument &operator>>(const QDBusArgument &argument, QXdgDBusImageVector &iconVector)
+{
+ argument.beginArray();
+ iconVector.clear();
+
+ while (!argument.atEnd()) {
+ QXdgDBusImageStruct element;
+ argument >> element;
+ iconVector.append(element);
+ }
+
+ argument.endArray();
+
+ return argument;
+}
+
+// Marshall the ToolTipStruct data into a D-Bus argument
+const QDBusArgument &operator<<(QDBusArgument &argument, const QXdgDBusToolTipStruct &toolTip)
+{
+ argument.beginStructure();
+ argument << toolTip.icon;
+ argument << toolTip.image;
+ argument << toolTip.title;
+ argument << toolTip.subTitle;
+ argument.endStructure();
+ return argument;
+}
+
+// Retrieve the ToolTipStruct data from the D-Bus argument
+const QDBusArgument &operator>>(const QDBusArgument &argument, QXdgDBusToolTipStruct &toolTip)
+{
+ QString icon;
+ QXdgDBusImageVector image;
+ QString title;
+ QString subTitle;
+
+ argument.beginStructure();
+ argument >> icon;
+ argument >> image;
+ argument >> title;
+ argument >> subTitle;
+ argument.endStructure();
+
+ toolTip.icon = icon;
+ toolTip.image = image;
+ toolTip.title = title;
+ toolTip.subTitle = subTitle;
+
+ return argument;
+}
+
+void registerDBusTrayTypes()
+{
+ qDBusRegisterMetaType<QXdgDBusImageStruct>();
+ qDBusRegisterMetaType<QXdgDBusImageVector>();
+ qDBusRegisterMetaType<QXdgDBusToolTipStruct>();
+}
diff --git a/src/platformsupport/dbustray/qdbustraytypes_p.h b/src/platformsupport/dbustray/qdbustraytypes_p.h
new file mode 100644
index 0000000000..5b275e0d33
--- /dev/null
+++ b/src/platformsupport/dbustray/qdbustraytypes_p.h
@@ -0,0 +1,81 @@
+/****************************************************************************
+**
+** Copyright (C) 2009 Marco Martin <notmart@gmail.com>
+** Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QDBUSTRAYTYPES_P_H
+#define QDBUSTRAYTYPES_P_H
+
+#include <QObject>
+#include <QString>
+#include <QDBusArgument>
+#include <QDBusConnection>
+#include <QDBusObjectPath>
+#include <QPixmap>
+
+// Custom message type to send icons across D-Bus
+struct QXdgDBusImageStruct
+{
+ int width;
+ int height;
+ QByteArray data;
+};
+
+typedef QVector<QXdgDBusImageStruct> QXdgDBusImageVector;
+
+QXdgDBusImageVector iconToQXdgDBusImageVector(const QIcon &icon);
+
+// Custom message type to send tooltips across D-Bus
+struct QXdgDBusToolTipStruct
+{
+ QString icon;
+ QXdgDBusImageVector image;
+ QString title;
+ QString subTitle;
+};
+
+const QDBusArgument &operator<<(QDBusArgument &argument, const QXdgDBusImageStruct &icon);
+const QDBusArgument &operator>>(const QDBusArgument &argument, QXdgDBusImageStruct &icon);
+
+Q_DECLARE_METATYPE(QXdgDBusImageStruct)
+
+const QDBusArgument &operator<<(QDBusArgument &argument, const QXdgDBusImageVector &iconVector);
+const QDBusArgument &operator>>(const QDBusArgument &argument, QXdgDBusImageVector &iconVector);
+
+Q_DECLARE_METATYPE(QXdgDBusImageVector)
+
+const QDBusArgument &operator<<(QDBusArgument &argument, const QXdgDBusToolTipStruct &toolTip);
+const QDBusArgument &operator>>(const QDBusArgument &argument, QXdgDBusToolTipStruct &toolTip);
+
+Q_DECLARE_METATYPE(QXdgDBusToolTipStruct)
+
+#endif // QDBUSTRAYTYPES_P_H
diff --git a/src/platformsupport/eglconvenience/eglconvenience.pri b/src/platformsupport/eglconvenience/eglconvenience.pri
index 8ada53d2c1..d102203d5e 100644
--- a/src/platformsupport/eglconvenience/eglconvenience.pri
+++ b/src/platformsupport/eglconvenience/eglconvenience.pri
@@ -16,16 +16,12 @@ contains(QT_CONFIG,egl) {
$$PWD/qeglplatformcursor_p.h \
$$PWD/qeglplatformwindow_p.h \
$$PWD/qeglplatformscreen_p.h \
- $$PWD/qeglcompositor_p.h \
- $$PWD/qeglplatformbackingstore_p.h \
$$PWD/qeglplatformintegration_p.h
SOURCES += \
$$PWD/qeglplatformcursor.cpp \
$$PWD/qeglplatformwindow.cpp \
$$PWD/qeglplatformscreen.cpp \
- $$PWD/qeglcompositor.cpp \
- $$PWD/qeglplatformbackingstore.cpp \
$$PWD/qeglplatformintegration.cpp
}
}
diff --git a/src/platformsupport/eglconvenience/qeglconvenience.cpp b/src/platformsupport/eglconvenience/qeglconvenience.cpp
index c1a491c80b..f3a135a499 100644
--- a/src/platformsupport/eglconvenience/qeglconvenience.cpp
+++ b/src/platformsupport/eglconvenience/qeglconvenience.cpp
@@ -303,7 +303,7 @@ EGLConfig QEglConfigChooser::chooseConfig()
} while (q_reduceConfigAttributes(&configureAttributes));
if (!cfg)
- qWarning("Cant find EGLConfig, returning null config");
+ qWarning("Cannot find EGLConfig, returning null config");
return cfg;
}
@@ -460,8 +460,8 @@ QSizeF q_physicalScreenSizeFromFb(int framebufferDevice, const QSize &screenSize
if (size.isEmpty()) {
// Note: in millimeters
- int width = qgetenv("QT_QPA_EGLFS_PHYSICAL_WIDTH").toInt();
- int height = qgetenv("QT_QPA_EGLFS_PHYSICAL_HEIGHT").toInt();
+ int width = qEnvironmentVariableIntValue("QT_QPA_EGLFS_PHYSICAL_WIDTH");
+ int height = qEnvironmentVariableIntValue("QT_QPA_EGLFS_PHYSICAL_HEIGHT");
if (width && height) {
size.setWidth(width);
@@ -513,8 +513,8 @@ QSize q_screenSizeFromFb(int framebufferDevice)
static QSize size;
if (size.isEmpty()) {
- int width = qgetenv("QT_QPA_EGLFS_WIDTH").toInt();
- int height = qgetenv("QT_QPA_EGLFS_HEIGHT").toInt();
+ int width = qEnvironmentVariableIntValue("QT_QPA_EGLFS_WIDTH");
+ int height = qEnvironmentVariableIntValue("QT_QPA_EGLFS_HEIGHT");
if (width && height) {
size.setWidth(width);
@@ -553,7 +553,7 @@ int q_screenDepthFromFb(int framebufferDevice)
Q_UNUSED(framebufferDevice)
#endif
const int defaultDepth = 32;
- static int depth = qgetenv("QT_QPA_EGLFS_DEPTH").toInt();
+ static int depth = qEnvironmentVariableIntValue("QT_QPA_EGLFS_DEPTH");
if (depth == 0) {
#ifdef Q_OS_LINUX
diff --git a/src/platformsupport/eglconvenience/qeglpbuffer_p.h b/src/platformsupport/eglconvenience/qeglpbuffer_p.h
index 0995b6d443..4a3682b582 100644
--- a/src/platformsupport/eglconvenience/qeglpbuffer_p.h
+++ b/src/platformsupport/eglconvenience/qeglpbuffer_p.h
@@ -56,8 +56,8 @@ public:
QEGLPbuffer(EGLDisplay display, const QSurfaceFormat &format, QOffscreenSurface *offscreenSurface);
~QEGLPbuffer();
- QSurfaceFormat format() const { return m_format; }
- bool isValid() const { return m_pbuffer != EGL_NO_SURFACE; }
+ QSurfaceFormat format() const Q_DECL_OVERRIDE { return m_format; }
+ bool isValid() const Q_DECL_OVERRIDE { return m_pbuffer != EGL_NO_SURFACE; }
EGLSurface pbuffer() const { return m_pbuffer; }
diff --git a/src/platformsupport/eglconvenience/qeglplatformcontext.cpp b/src/platformsupport/eglconvenience/qeglplatformcontext.cpp
index 7cc330092e..d7c4fd6764 100644
--- a/src/platformsupport/eglconvenience/qeglplatformcontext.cpp
+++ b/src/platformsupport/eglconvenience/qeglplatformcontext.cpp
@@ -177,17 +177,17 @@ void QEGLPlatformContext::init(const QSurfaceFormat &format, QPlatformOpenGLCont
}
if (m_eglContext == EGL_NO_CONTEXT) {
- qWarning("QEGLPlatformContext::init: eglError: %x, this: %p \n", eglGetError(), this);
+ qWarning("QEGLPlatformContext: Failed to create context: %x", eglGetError());
return;
}
- static const bool printConfig = qgetenv("QT_QPA_EGLFS_DEBUG").toInt();
+ static const bool printConfig = qEnvironmentVariableIntValue("QT_QPA_EGLFS_DEBUG");
if (printConfig) {
qDebug() << "Created context for format" << format << "with config:";
q_printEglConfig(m_eglDisplay, m_eglConfig);
}
- updateFormatFromGL();
+ // Cannot just call updateFormatFromGL() since it relies on virtuals. Defer it to initialize().
}
void QEGLPlatformContext::adopt(const QVariant &nativeHandle, QPlatformOpenGLContext *share)
@@ -238,18 +238,13 @@ void QEGLPlatformContext::adopt(const QVariant &nativeHandle, QPlatformOpenGLCon
updateFormatFromGL();
}
-void QEGLPlatformContext::updateFormatFromGL()
+void QEGLPlatformContext::initialize()
{
-#ifndef QT_NO_OPENGL
- // Have to save & restore to prevent QOpenGLContext::currentContext() from becoming
- // inconsistent after QOpenGLContext::create().
- EGLDisplay prevDisplay = eglGetCurrentDisplay();
- if (prevDisplay == EGL_NO_DISPLAY) // when no context is current
- prevDisplay = m_eglDisplay;
- EGLContext prevContext = eglGetCurrentContext();
- EGLSurface prevSurfaceDraw = eglGetCurrentSurface(EGL_DRAW);
- EGLSurface prevSurfaceRead = eglGetCurrentSurface(EGL_READ);
+ updateFormatFromGL();
+}
+EGLSurface QEGLPlatformContext::createTemporaryOffscreenSurface()
+{
// Make the context current to ensure the GL version query works. This needs a surface too.
const EGLint pbufferAttributes[] = {
EGL_WIDTH, 1,
@@ -257,15 +252,34 @@ void QEGLPlatformContext::updateFormatFromGL()
EGL_LARGEST_PBUFFER, EGL_FALSE,
EGL_NONE
};
+
// Cannot just pass m_eglConfig because it may not be suitable for pbuffers. Instead,
// do what QEGLPbuffer would do: request a config with the same attributes but with
// PBUFFER_BIT set.
EGLConfig config = q_configFromGLFormat(m_eglDisplay, m_format, false, EGL_PBUFFER_BIT);
- EGLSurface pbuffer = eglCreatePbufferSurface(m_eglDisplay, config, pbufferAttributes);
- if (pbuffer == EGL_NO_SURFACE)
- return;
- if (eglMakeCurrent(m_eglDisplay, pbuffer, pbuffer, m_eglContext)) {
+ return eglCreatePbufferSurface(m_eglDisplay, config, pbufferAttributes);
+}
+
+void QEGLPlatformContext::destroyTemporaryOffscreenSurface(EGLSurface surface)
+{
+ eglDestroySurface(m_eglDisplay, surface);
+}
+
+void QEGLPlatformContext::updateFormatFromGL()
+{
+#ifndef QT_NO_OPENGL
+ // Have to save & restore to prevent QOpenGLContext::currentContext() from becoming
+ // inconsistent after QOpenGLContext::create().
+ EGLDisplay prevDisplay = eglGetCurrentDisplay();
+ if (prevDisplay == EGL_NO_DISPLAY) // when no context is current
+ prevDisplay = m_eglDisplay;
+ EGLContext prevContext = eglGetCurrentContext();
+ EGLSurface prevSurfaceDraw = eglGetCurrentSurface(EGL_DRAW);
+ EGLSurface prevSurfaceRead = eglGetCurrentSurface(EGL_READ);
+
+ EGLSurface tempSurface = createTemporaryOffscreenSurface();
+ if (eglMakeCurrent(m_eglDisplay, tempSurface, tempSurface, m_eglContext)) {
if (m_format.renderableType() == QSurfaceFormat::OpenGL
|| m_format.renderableType() == QSurfaceFormat::OpenGLES) {
const GLubyte *s = glGetString(GL_VERSION);
@@ -303,7 +317,7 @@ void QEGLPlatformContext::updateFormatFromGL()
}
eglMakeCurrent(prevDisplay, prevSurfaceDraw, prevSurfaceRead, prevContext);
}
- eglDestroySurface(m_eglDisplay, pbuffer);
+ destroyTemporaryOffscreenSurface(tempSurface);
#endif // QT_NO_OPENGL
}
@@ -343,7 +357,7 @@ bool QEGLPlatformContext::makeCurrent(QPlatformSurface *surface)
eglSwapInterval(eglDisplay(), m_swapInterval);
}
} else {
- qWarning("QEGLPlatformContext::makeCurrent: eglError: %x, this: %p \n", eglGetError(), this);
+ qWarning("QEGLPlatformContext: eglMakeCurrent failed: %x", eglGetError());
}
return ok;
@@ -362,7 +376,7 @@ void QEGLPlatformContext::doneCurrent()
eglBindAPI(m_api);
bool ok = eglMakeCurrent(m_eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, EGL_NO_CONTEXT);
if (!ok)
- qWarning("QEGLPlatformContext::doneCurrent(): eglError: %d, this: %p \n", eglGetError(), this);
+ qWarning("QEGLPlatformContext: eglMakeCurrent failed: %x", eglGetError());
}
void QEGLPlatformContext::swapBuffers(QPlatformSurface *surface)
@@ -371,7 +385,7 @@ void QEGLPlatformContext::swapBuffers(QPlatformSurface *surface)
EGLSurface eglSurface = eglSurfaceForPlatformSurface(surface);
bool ok = eglSwapBuffers(m_eglDisplay, eglSurface);
if (!ok)
- qWarning("QEGLPlatformContext::swapBuffers(): eglError: %d, this: %p \n", eglGetError(), this);
+ qWarning("QEGLPlatformContext: eglSwapBuffers failed: %x", eglGetError());
}
void (*QEGLPlatformContext::getProcAddress(const QByteArray &procName)) ()
diff --git a/src/platformsupport/eglconvenience/qeglplatformcontext_p.h b/src/platformsupport/eglconvenience/qeglplatformcontext_p.h
index 7825c7b3d7..c6d2fdec92 100644
--- a/src/platformsupport/eglconvenience/qeglplatformcontext_p.h
+++ b/src/platformsupport/eglconvenience/qeglplatformcontext_p.h
@@ -59,14 +59,15 @@ public:
EGLConfig *config = 0, const QVariant &nativeHandle = QVariant());
~QEGLPlatformContext();
- bool makeCurrent(QPlatformSurface *surface);
- void doneCurrent();
- void swapBuffers(QPlatformSurface *surface);
- void (*getProcAddress(const QByteArray &procName)) ();
+ void initialize() Q_DECL_OVERRIDE;
+ bool makeCurrent(QPlatformSurface *surface) Q_DECL_OVERRIDE;
+ void doneCurrent() Q_DECL_OVERRIDE;
+ void swapBuffers(QPlatformSurface *surface) Q_DECL_OVERRIDE;
+ void (*getProcAddress(const QByteArray &procName)) () Q_DECL_OVERRIDE;
- QSurfaceFormat format() const;
- bool isSharing() const { return m_shareContext != EGL_NO_CONTEXT; }
- bool isValid() const { return m_eglContext != EGL_NO_CONTEXT; }
+ QSurfaceFormat format() const Q_DECL_OVERRIDE;
+ bool isSharing() const Q_DECL_OVERRIDE { return m_shareContext != EGL_NO_CONTEXT; }
+ bool isValid() const Q_DECL_OVERRIDE { return m_eglContext != EGL_NO_CONTEXT; }
EGLContext eglContext() const;
EGLDisplay eglDisplay() const;
@@ -74,6 +75,8 @@ public:
protected:
virtual EGLSurface eglSurfaceForPlatformSurface(QPlatformSurface *surface) = 0;
+ virtual EGLSurface createTemporaryOffscreenSurface();
+ virtual void destroyTemporaryOffscreenSurface(EGLSurface surface);
private:
void init(const QSurfaceFormat &format, QPlatformOpenGLContext *share);
diff --git a/src/platformsupport/eglconvenience/qeglplatformcursor_p.h b/src/platformsupport/eglconvenience/qeglplatformcursor_p.h
index 83204748c1..bf2aeef378 100644
--- a/src/platformsupport/eglconvenience/qeglplatformcursor_p.h
+++ b/src/platformsupport/eglconvenience/qeglplatformcursor_p.h
@@ -92,6 +92,7 @@ private:
class QEGLPlatformCursor : public QPlatformCursor, protected QOpenGLFunctions
{
+ Q_OBJECT
public:
QEGLPlatformCursor(QPlatformScreen *screen);
~QEGLPlatformCursor();
diff --git a/src/platformsupport/eglconvenience/qeglplatformintegration.cpp b/src/platformsupport/eglconvenience/qeglplatformintegration.cpp
index 7d05b54c15..e2a215d35f 100644
--- a/src/platformsupport/eglconvenience/qeglplatformintegration.cpp
+++ b/src/platformsupport/eglconvenience/qeglplatformintegration.cpp
@@ -43,6 +43,7 @@
#include <QtPlatformSupport/private/qgenericunixservices_p.h>
#include <QtPlatformSupport/private/qgenericunixeventdispatcher_p.h>
#include <QtPlatformSupport/private/qfbvthandler_p.h>
+#include <QtPlatformSupport/private/qopenglcompositorbackingstore_p.h>
#if !defined(QT_NO_EVDEV) && (!defined(Q_OS_ANDROID) || defined(Q_OS_ANDROID_NO_SDK))
#include <QtPlatformSupport/private/qevdevmousemanager_p.h>
@@ -50,12 +51,15 @@
#include <QtPlatformSupport/private/qevdevtouch_p.h>
#endif
+#if !defined(QT_NO_TSLIB) && (!defined(Q_OS_ANDROID) || defined(Q_OS_ANDROID_NO_SDK))
+#include <QtPlatformSupport/private/qtslib_p.h>
+#endif
+
#include <QtPlatformHeaders/qeglfsfunctions.h>
#include "qeglplatformintegration_p.h"
#include "qeglplatformcontext_p.h"
#include "qeglplatformwindow_p.h"
-#include "qeglplatformbackingstore_p.h"
#include "qeglplatformscreen_p.h"
#include "qeglplatformcursor_p.h"
@@ -84,8 +88,7 @@ QT_BEGIN_NAMESPACE
*/
QEGLPlatformIntegration::QEGLPlatformIntegration()
- : m_screen(0),
- m_display(EGL_NO_DISPLAY),
+ : m_display(EGL_NO_DISPLAY),
m_inputContext(0),
m_fontDb(new QGenericUnixFontDatabase),
m_services(new QGenericUnixServices),
@@ -95,9 +98,6 @@ QEGLPlatformIntegration::QEGLPlatformIntegration()
QEGLPlatformIntegration::~QEGLPlatformIntegration()
{
- delete m_screen;
- if (m_display != EGL_NO_DISPLAY)
- eglTerminate(m_display);
}
void QEGLPlatformIntegration::initialize()
@@ -110,14 +110,20 @@ void QEGLPlatformIntegration::initialize()
if (!eglInitialize(m_display, &major, &minor))
qFatal("Could not initialize egl display");
- m_screen = createScreen();
- screenAdded(m_screen);
-
m_inputContext = QPlatformInputContextFactory::create();
m_vtHandler.reset(new QFbVtHandler);
}
+void QEGLPlatformIntegration::destroy()
+{
+ foreach (QWindow *w, qGuiApp->topLevelWindows())
+ w->destroy();
+
+ if (m_display != EGL_NO_DISPLAY)
+ eglTerminate(m_display);
+}
+
QAbstractEventDispatcher *QEGLPlatformIntegration::createEventDispatcher() const
{
return createUnixEventDispatcher();
@@ -135,7 +141,11 @@ QPlatformFontDatabase *QEGLPlatformIntegration::fontDatabase() const
QPlatformBackingStore *QEGLPlatformIntegration::createPlatformBackingStore(QWindow *window) const
{
- return new QEGLPlatformBackingStore(window);
+ QOpenGLCompositorBackingStore *bs = new QOpenGLCompositorBackingStore(window);
+ if (!window->handle())
+ window->create();
+ static_cast<QEGLPlatformWindow *>(window->handle())->setBackingStore(bs);
+ return bs;
}
QPlatformWindow *QEGLPlatformIntegration::createPlatformWindow(QWindow *window) const
@@ -150,10 +160,9 @@ QPlatformWindow *QEGLPlatformIntegration::createPlatformWindow(QWindow *window)
QPlatformOpenGLContext *QEGLPlatformIntegration::createPlatformOpenGLContext(QOpenGLContext *context) const
{
- QEGLPlatformScreen *screen = static_cast<QEGLPlatformScreen *>(context->screen()->handle());
// If there is a "root" window into which raster and QOpenGLWidget content is
// composited, all other contexts must share with its context.
- QOpenGLContext *compositingContext = screen ? screen->compositingContext() : 0;
+ QOpenGLContext *compositingContext = QOpenGLCompositor::instance()->context();
QPlatformOpenGLContext *share = compositingContext ? compositingContext->handle() : context->shareHandle();
QVariant nativeHandle = context->nativeHandle();
QPlatformOpenGLContext *platformContext = createContext(context->format(),
@@ -219,7 +228,7 @@ void *QEGLPlatformIntegration::nativeResourceForIntegration(const QByteArray &re
switch (resourceType(resource)) {
case EglDisplay:
- result = m_screen->display();
+ result = display();
break;
case NativeDisplay:
result = reinterpret_cast<void*>(nativeDisplay());
@@ -257,7 +266,7 @@ void *QEGLPlatformIntegration::nativeResourceForWindow(const QByteArray &resourc
if (window && window->handle())
result = static_cast<QEGLPlatformScreen *>(window->handle()->screen())->display();
else
- result = m_screen->display();
+ result = display();
break;
case EglWindow:
if (window && window->handle())
@@ -345,11 +354,17 @@ void QEGLPlatformIntegration::createInputHandlers()
m_kbdMgr = new QEvdevKeyboardManager(QLatin1String("EvdevKeyboard"), QString() /* spec */, this);
QEvdevMouseManager *mouseMgr = new QEvdevMouseManager(QLatin1String("EvdevMouse"), QString() /* spec */, this);
Q_FOREACH (QScreen *screen, QGuiApplication::screens()) {
- QEGLPlatformCursor *cursor = static_cast<QEGLPlatformCursor *>(screen->handle()->cursor());
+ QEGLPlatformCursor *cursor = qobject_cast<QEGLPlatformCursor *>(screen->handle()->cursor());
if (cursor)
cursor->setMouseDeviceDiscovery(mouseMgr->deviceDiscovery());
}
- new QEvdevTouchScreenHandlerThread(QString() /* spec */, this);
+#ifndef QT_NO_TSLIB
+ const bool useTslib = qEnvironmentVariableIntValue("QT_QPA_EGLFS_TSLIB");
+ if (useTslib)
+ new QTsLibMouseHandler(QLatin1String("TsLib"), QString() /* spec */);
+ else
+#endif // QT_NO_TSLIB
+ new QEvdevTouchScreenHandlerThread(QString() /* spec */, this);
#endif
}
diff --git a/src/platformsupport/eglconvenience/qeglplatformintegration_p.h b/src/platformsupport/eglconvenience/qeglplatformintegration_p.h
index 4d7adce309..7f0037db92 100644
--- a/src/platformsupport/eglconvenience/qeglplatformintegration_p.h
+++ b/src/platformsupport/eglconvenience/qeglplatformintegration_p.h
@@ -52,7 +52,6 @@
QT_BEGIN_NAMESPACE
-class QEGLPlatformScreen;
class QEGLPlatformWindow;
class QEGLPlatformContext;
class QFbVtHandler;
@@ -65,8 +64,8 @@ public:
~QEGLPlatformIntegration();
void initialize() Q_DECL_OVERRIDE;
+ void destroy() Q_DECL_OVERRIDE;
- QEGLPlatformScreen *screen() const { return m_screen; }
EGLDisplay display() const { return m_display; }
QAbstractEventDispatcher *createEventDispatcher() const Q_DECL_OVERRIDE;
@@ -92,7 +91,6 @@ public:
QFunctionPointer platformFunction(const QByteArray &function) const Q_DECL_OVERRIDE;
protected:
- virtual QEGLPlatformScreen *createScreen() const = 0;
virtual QEGLPlatformWindow *createWindow(QWindow *window) const = 0;
virtual QEGLPlatformContext *createContext(const QSurfaceFormat &format,
QPlatformOpenGLContext *shareContext,
@@ -109,7 +107,6 @@ protected:
private:
static void loadKeymapStatic(const QString &filename);
- QEGLPlatformScreen *m_screen;
EGLDisplay m_display;
QPlatformInputContext *m_inputContext;
QScopedPointer<QPlatformFontDatabase> m_fontDb;
diff --git a/src/platformsupport/eglconvenience/qeglplatformscreen.cpp b/src/platformsupport/eglconvenience/qeglplatformscreen.cpp
index fd577a48d7..fd9befb575 100644
--- a/src/platformsupport/eglconvenience/qeglplatformscreen.cpp
+++ b/src/platformsupport/eglconvenience/qeglplatformscreen.cpp
@@ -31,8 +31,8 @@
**
****************************************************************************/
-#include "qeglcompositor_p.h"
#include "qeglplatformscreen_p.h"
+#include <QtPlatformSupport/private/qopenglcompositor_p.h>
QT_BEGIN_NAMESPACE
@@ -42,19 +42,6 @@ QT_BEGIN_NAMESPACE
\since 5.2
\internal
\ingroup qpa
-
- This class provides a lightweight base for QPlatformScreen
- implementations. It covers basic window stack management which is
- necessary when compositing multiple raster (widget-based) windows
- together into one single native surface.
-
- Reimplementing the virtuals are essential when using
- QEGLPlatformBackingStore. The context and the window returned from
- these are the ones that are used when compositing the textures
- generated from the raster (widget) based windows.
-
- \note It is up to the QEGLPlatformWindow subclasses to use the
- functions, like addWindow(), removeWindow(), etc., provided here.
*/
QEGLPlatformScreen::QEGLPlatformScreen(EGLDisplay dpy)
@@ -64,39 +51,7 @@ QEGLPlatformScreen::QEGLPlatformScreen(EGLDisplay dpy)
QEGLPlatformScreen::~QEGLPlatformScreen()
{
- QEGLCompositor::destroy();
-}
-
-void QEGLPlatformScreen::addWindow(QEGLPlatformWindow *window)
-{
- if (!m_windows.contains(window)) {
- m_windows.append(window);
- topWindowChanged(window);
- }
-}
-
-void QEGLPlatformScreen::removeWindow(QEGLPlatformWindow *window)
-{
- m_windows.removeOne(window);
- if (!m_windows.isEmpty())
- topWindowChanged(m_windows.last());
-}
-
-void QEGLPlatformScreen::moveToTop(QEGLPlatformWindow *window)
-{
- m_windows.removeOne(window);
- m_windows.append(window);
- topWindowChanged(window);
-}
-
-void QEGLPlatformScreen::changeWindowIndex(QEGLPlatformWindow *window, int newIdx)
-{
- int idx = m_windows.indexOf(window);
- if (idx != -1 && idx != newIdx) {
- m_windows.move(idx, newIdx);
- if (newIdx == m_windows.size() - 1)
- topWindowChanged(m_windows.last());
- }
+ QOpenGLCompositor::destroy();
}
QT_END_NAMESPACE
diff --git a/src/platformsupport/eglconvenience/qeglplatformscreen_p.h b/src/platformsupport/eglconvenience/qeglplatformscreen_p.h
index bb1d26d7d2..e9d3363a66 100644
--- a/src/platformsupport/eglconvenience/qeglplatformscreen_p.h
+++ b/src/platformsupport/eglconvenience/qeglplatformscreen_p.h
@@ -60,22 +60,9 @@ public:
QEGLPlatformScreen(EGLDisplay dpy);
~QEGLPlatformScreen();
- QList<QEGLPlatformWindow *> windows() const { return m_windows; }
-
- void addWindow(QEGLPlatformWindow *window);
- void removeWindow(QEGLPlatformWindow *window);
- void moveToTop(QEGLPlatformWindow *window);
- void changeWindowIndex(QEGLPlatformWindow *window, int newIdx);
-
- virtual void topWindowChanged(QEGLPlatformWindow *window) { Q_UNUSED(window); }
-
EGLDisplay display() const { return m_dpy; }
- virtual QEGLPlatformWindow *compositingWindow() = 0;
- virtual QOpenGLContext *compositingContext() = 0;
-
private:
- QList<QEGLPlatformWindow *> m_windows;
EGLDisplay m_dpy;
};
diff --git a/src/platformsupport/eglconvenience/qeglplatformwindow.cpp b/src/platformsupport/eglconvenience/qeglplatformwindow.cpp
index 39edec4811..5e5c879a22 100644
--- a/src/platformsupport/eglconvenience/qeglplatformwindow.cpp
+++ b/src/platformsupport/eglconvenience/qeglplatformwindow.cpp
@@ -32,9 +32,10 @@
****************************************************************************/
#include <qpa/qwindowsysteminterface.h>
+#include <QtPlatformSupport/private/qopenglcompositor_p.h>
+#include <QtPlatformSupport/private/qopenglcompositorbackingstore_p.h>
#include "qeglplatformwindow_p.h"
-#include "qeglplatformbackingstore_p.h"
#include "qeglplatformscreen_p.h"
QT_BEGIN_NAMESPACE
@@ -47,7 +48,7 @@ QT_BEGIN_NAMESPACE
\ingroup qpa
Lightweight class providing some basic platform window operations
- and interfacing with QEGLPlatformBackingStore.
+ and interfacing with QOpenGLCompositorBackingStore.
Almost no QPlatformWindow functions are implemented here. This is
intentional because different platform plugins may use different
@@ -57,13 +58,15 @@ QT_BEGIN_NAMESPACE
enforce anything for these functions.
\note Subclasses are responsible for invoking this class'
- implementation of create(). When using QEGLPlatformScreen, the
- subclasses of this class are expected to utilize the window stack
- management functions (addWindow() etc.) provided there.
+ implementation of create() and are expected to utilize the window
+ stack management functions (addWindow() etc.) in
+ QOpenGLCompositor.
*/
QEGLPlatformWindow::QEGLPlatformWindow(QWindow *w)
: QPlatformWindow(w),
+ m_backingStore(0),
+ m_raster(false),
m_winId(0)
{
}
@@ -100,6 +103,11 @@ bool QEGLPlatformWindow::isRaster() const
return m_raster || window()->surfaceType() == QSurface::RasterGLSurface;
}
+QWindow *QEGLPlatformWindow::sourceWindow() const
+{
+ return window();
+}
+
const QPlatformTextureList *QEGLPlatformWindow::textures() const
{
if (m_backingStore)
@@ -108,10 +116,10 @@ const QPlatformTextureList *QEGLPlatformWindow::textures() const
return 0;
}
-void QEGLPlatformWindow::composited()
+void QEGLPlatformWindow::endCompositing()
{
if (m_backingStore)
- m_backingStore->composited();
+ m_backingStore->notifyComposited();
}
WId QEGLPlatformWindow::winId() const
@@ -122,7 +130,7 @@ WId QEGLPlatformWindow::winId() const
void QEGLPlatformWindow::setOpacity(qreal)
{
if (!isRaster())
- qWarning("eglfs: Cannot set opacity for non-raster windows");
+ qWarning("QEGLPlatformWindow: Cannot set opacity for non-raster windows");
// Nothing to do here. The opacity is stored in the QWindow.
}
diff --git a/src/platformsupport/eglconvenience/qeglplatformwindow_p.h b/src/platformsupport/eglconvenience/qeglplatformwindow_p.h
index 3a19301e5d..947f02aeb5 100644
--- a/src/platformsupport/eglconvenience/qeglplatformwindow_p.h
+++ b/src/platformsupport/eglconvenience/qeglplatformwindow_p.h
@@ -46,33 +46,36 @@
//
#include <qpa/qplatformwindow.h>
+#include <QtPlatformSupport/private/qopenglcompositor_p.h>
#include <EGL/egl.h>
QT_BEGIN_NAMESPACE
-class QEGLPlatformBackingStore;
+class QOpenGLCompositorBackingStore;
class QPlatformTextureList;
-class QEGLPlatformWindow : public QPlatformWindow
+class QEGLPlatformWindow : public QPlatformWindow, public QOpenGLCompositorWindow
{
public:
QEGLPlatformWindow(QWindow *w);
virtual void create();
- QEGLPlatformBackingStore *backingStore() { return m_backingStore; }
- void setBackingStore(QEGLPlatformBackingStore *backingStore) { m_backingStore = backingStore; }
- const QPlatformTextureList *textures() const;
- void composited();
+ QOpenGLCompositorBackingStore *backingStore() { return m_backingStore; }
+ void setBackingStore(QOpenGLCompositorBackingStore *backingStore) { m_backingStore = backingStore; }
bool isRaster() const;
+ QWindow *sourceWindow() const Q_DECL_OVERRIDE;
+ const QPlatformTextureList *textures() const Q_DECL_OVERRIDE;
+ void endCompositing() Q_DECL_OVERRIDE;
+
WId winId() const Q_DECL_OVERRIDE;
void setOpacity(qreal opacity) Q_DECL_OVERRIDE;
virtual EGLNativeWindowType eglWindow() const = 0;
private:
- QEGLPlatformBackingStore *m_backingStore;
+ QOpenGLCompositorBackingStore *m_backingStore;
bool m_raster;
WId m_winId;
};
diff --git a/src/platformsupport/eglconvenience/qxlibeglintegration.cpp b/src/platformsupport/eglconvenience/qxlibeglintegration.cpp
index eb6e01c585..f697f1ab89 100644
--- a/src/platformsupport/eglconvenience/qxlibeglintegration.cpp
+++ b/src/platformsupport/eglconvenience/qxlibeglintegration.cpp
@@ -31,8 +31,11 @@
**
****************************************************************************/
+#include <QLoggingCategory>
#include "qxlibeglintegration_p.h"
+Q_LOGGING_CATEGORY(lcXlibEglDebug, "qt.egl.xlib.debug")
+
VisualID QXlibEglIntegration::getCompatibleVisualId(Display *display, EGLDisplay eglDisplay, EGLConfig config)
{
VisualID visualId = 0;
@@ -87,31 +90,26 @@ VisualID QXlibEglIntegration::getCompatibleVisualId(Display *display, EGLDisplay
// configs. In such a case we have to fall back to XGetVisualInfo.
if (!visualMatchesConfig) {
visualId = 0;
-#ifdef QT_DEBUG_X11_VISUAL_SELECTION
- qWarning("Warning: EGL suggested using X Visual ID %d (%d %d %d depth %d) for EGL config %d (%d %d %d %d), but this is incompatible",
- (int)visualId, visualRedSize, visualGreenSize, visualBlueSize, chosenVisualInfo->depth,
- configId, configRedSize, configGreenSize, configBlueSize, configAlphaSize);
-#endif
+ qCDebug(lcXlibEglDebug,
+ "EGL suggested using X Visual ID %d (%d %d %d depth %d) for EGL config %d"
+ "(%d %d %d %d), but this is incompatible",
+ (int)visualId, visualRedSize, visualGreenSize, visualBlueSize, chosenVisualInfo->depth,
+ configId, configRedSize, configGreenSize, configBlueSize, configAlphaSize);
}
} else {
- qWarning("Warning: EGL suggested using X Visual ID %d for EGL config %d, but that isn't a valid ID",
- (int)visualId, configId);
+ qCDebug(lcXlibEglDebug, "EGL suggested using X Visual ID %d for EGL config %d, but that isn't a valid ID",
+ (int)visualId, configId);
visualId = 0;
}
XFree(chosenVisualInfo);
}
-#ifdef QT_DEBUG_X11_VISUAL_SELECTION
else
- qDebug("EGL did not suggest a VisualID (EGL_NATIVE_VISUAL_ID was zero) for EGLConfig %d", configId);
-#endif
+ qCDebug(lcXlibEglDebug, "EGL did not suggest a VisualID (EGL_NATIVE_VISUAL_ID was zero) for EGLConfig %d", configId);
if (visualId) {
-#ifdef QT_DEBUG_X11_VISUAL_SELECTION
- if (configAlphaSize > 0)
- qDebug("Using ARGB Visual ID %d provided by EGL for config %d", (int)visualId, configId);
- else
- qDebug("Using Opaque Visual ID %d provided by EGL for config %d", (int)visualId, configId);
-#endif
+ qCDebug(lcXlibEglDebug, configAlphaSize > 0
+ ? "Using ARGB Visual ID %d provided by EGL for config %d"
+ : "Using Opaque Visual ID %d provided by EGL for config %d", (int)visualId, configId);
return visualId;
}
@@ -143,9 +141,7 @@ VisualID QXlibEglIntegration::getCompatibleVisualId(Display *display, EGLDisplay
}
if (visualId) {
-#ifdef QT_DEBUG_X11_VISUAL_SELECTION
- qDebug("Using Visual ID %d provided by XGetVisualInfo for EGL config %d", (int)visualId, configId);
-#endif
+ qCDebug(lcXlibEglDebug, "Using Visual ID %d provided by XGetVisualInfo for EGL config %d", (int)visualId, configId);
return visualId;
}
diff --git a/src/platformsupport/eventdispatchers/qeventdispatcher_glib_p.h b/src/platformsupport/eventdispatchers/qeventdispatcher_glib_p.h
index a9402f920d..e182d949b0 100644
--- a/src/platformsupport/eventdispatchers/qeventdispatcher_glib_p.h
+++ b/src/platformsupport/eventdispatchers/qeventdispatcher_glib_p.h
@@ -61,7 +61,7 @@ public:
explicit QPAEventDispatcherGlib(QObject *parent = 0);
~QPAEventDispatcherGlib();
- bool processEvents(QEventLoop::ProcessEventsFlags flags);
+ bool processEvents(QEventLoop::ProcessEventsFlags flags) Q_DECL_OVERRIDE;
QEventLoop::ProcessEventsFlags m_flags;
};
diff --git a/src/platformsupport/fbconvenience/qfbbackingstore_p.h b/src/platformsupport/fbconvenience/qfbbackingstore_p.h
index 08a4b37eee..cf9e5088ad 100644
--- a/src/platformsupport/fbconvenience/qfbbackingstore_p.h
+++ b/src/platformsupport/fbconvenience/qfbbackingstore_p.h
@@ -59,10 +59,10 @@ public:
QFbBackingStore(QWindow *window);
~QFbBackingStore();
- virtual QPaintDevice *paintDevice() { return &mImage; }
- virtual void flush(QWindow *window, const QRegion &region, const QPoint &offset);
+ virtual QPaintDevice *paintDevice() Q_DECL_OVERRIDE { return &mImage; }
+ virtual void flush(QWindow *window, const QRegion &region, const QPoint &offset) Q_DECL_OVERRIDE;
- virtual void resize(const QSize &size, const QRegion &region);
+ virtual void resize(const QSize &size, const QRegion &region) Q_DECL_OVERRIDE;
const QImage image() { return mImage; }
diff --git a/src/platformsupport/fbconvenience/qfbcursor.cpp b/src/platformsupport/fbconvenience/qfbcursor.cpp
index 49bc88d854..806556b1e4 100644
--- a/src/platformsupport/fbconvenience/qfbcursor.cpp
+++ b/src/platformsupport/fbconvenience/qfbcursor.cpp
@@ -137,4 +137,9 @@ void QFbCursor::setDirty()
}
}
+void QFbCursor::setMouseDeviceDiscovery(QDeviceDiscovery *dd)
+{
+ Q_UNUSED(dd);
+}
+
QT_END_NAMESPACE
diff --git a/src/platformsupport/fbconvenience/qfbcursor_p.h b/src/platformsupport/fbconvenience/qfbcursor_p.h
index 0354989a8b..75501a0ff0 100644
--- a/src/platformsupport/fbconvenience/qfbcursor_p.h
+++ b/src/platformsupport/fbconvenience/qfbcursor_p.h
@@ -50,9 +50,12 @@
QT_BEGIN_NAMESPACE
class QFbScreen;
+class QDeviceDiscovery;
class QFbCursor : public QPlatformCursor
{
+ Q_OBJECT
+
public:
QFbCursor(QFbScreen *screen);
@@ -61,9 +64,9 @@ public:
virtual QRect drawCursor(QPainter &painter);
// input methods
- virtual void pointerEvent(const QMouseEvent &event);
+ virtual void pointerEvent(const QMouseEvent &event) Q_DECL_OVERRIDE;
#ifndef QT_NO_CURSOR
- virtual void changeCursor(QCursor *widgetCursor, QWindow *window);
+ virtual void changeCursor(QCursor *widgetCursor, QWindow *window) Q_DECL_OVERRIDE;
#endif
virtual void setDirty();
@@ -71,6 +74,8 @@ public:
virtual bool isOnScreen() const { return mOnScreen; }
virtual QRect lastPainted() const { return mPrevRect; }
+ void setMouseDeviceDiscovery(QDeviceDiscovery *dd);
+
private:
void setCursor(const uchar *data, const uchar *mask, int width, int height, int hotX, int hotY);
void setCursor(Qt::CursorShape shape);
diff --git a/src/platformsupport/fbconvenience/qfbvthandler.cpp b/src/platformsupport/fbconvenience/qfbvthandler.cpp
index 511f723dd9..d6c3944cb0 100644
--- a/src/platformsupport/fbconvenience/qfbvthandler.cpp
+++ b/src/platformsupport/fbconvenience/qfbvthandler.cpp
@@ -68,7 +68,7 @@ QFbVtHandler::QFbVtHandler(QObject *parent)
m_tty = 0;
::ioctl(m_tty, KDGKBMODE, &m_oldKbdMode);
- if (!qgetenv("QT_QPA_ENABLE_TERMINAL_KEYBOARD").toInt()) {
+ if (!qEnvironmentVariableIntValue("QT_QPA_ENABLE_TERMINAL_KEYBOARD")) {
::ioctl(m_tty, KDSKBMODE, KBD_OFF_MODE);
QGuiApplicationPrivate *appd = QGuiApplicationPrivate::instance();
Q_ASSERT(appd);
diff --git a/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp b/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp
index 52505c570b..f831f3b908 100644
--- a/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp
+++ b/src/platformsupport/fontdatabases/basic/qbasicfontdatabase.cpp
@@ -281,41 +281,26 @@ QStringList QBasicFontDatabase::addTTFile(const QByteArray &fontData, const QByt
if (supportedWritingSystems)
*supportedWritingSystems = writingSystems;
- if (os2->usWeightClass == 0)
- ;
- else if (os2->usWeightClass < 150)
- weight = qt_thinFontWeight;
- else if (os2->usWeightClass < 250)
- weight = qt_extralightFontWeight;
- else if (os2->usWeightClass < 350)
- weight = QFont::Light;
- else if (os2->usWeightClass < 450)
- weight = QFont::Normal;
- else if (os2->usWeightClass < 550)
- weight = qt_mediumFontWeight;
- else if (os2->usWeightClass < 650)
- weight = QFont::DemiBold;
- else if (os2->usWeightClass < 750)
- weight = QFont::Bold;
- else if (os2->usWeightClass < 1000)
- weight = QFont::Black;
-
- if (os2->panose[2] >= 2) {
+ if (os2->usWeightClass) {
+ weight = QPlatformFontDatabase::weightFromInteger(os2->usWeightClass);
+ } else if (os2->panose[2]) {
int w = os2->panose[2];
if (w <= 1)
- weight = qt_thinFontWeight;
+ weight = QFont::Thin;
else if (w <= 2)
- weight = qt_extralightFontWeight;
+ weight = QFont::ExtraLight;
else if (w <= 3)
weight = QFont::Light;
else if (w <= 5)
weight = QFont::Normal;
else if (w <= 6)
- weight = qt_mediumFontWeight;
+ weight = QFont::Medium;
else if (w <= 7)
weight = QFont::DemiBold;
else if (w <= 8)
weight = QFont::Bold;
+ else if (w <= 9)
+ weight = QFont::ExtraBold;
else if (w <= 10)
weight = QFont::Black;
}
diff --git a/src/platformsupport/fontdatabases/basic/qbasicfontdatabase_p.h b/src/platformsupport/fontdatabases/basic/qbasicfontdatabase_p.h
index a37bfb9f5c..5593577389 100644
--- a/src/platformsupport/fontdatabases/basic/qbasicfontdatabase_p.h
+++ b/src/platformsupport/fontdatabases/basic/qbasicfontdatabase_p.h
@@ -60,12 +60,12 @@ struct FontFile
class QBasicFontDatabase : public QPlatformFontDatabase
{
public:
- void populateFontDatabase();
- QFontEngine *fontEngine(const QFontDef &fontDef, void *handle);
- QFontEngine *fontEngine(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference);
- QStringList fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const;
- QStringList addApplicationFont(const QByteArray &fontData, const QString &fileName);
- void releaseHandle(void *handle);
+ void populateFontDatabase() Q_DECL_OVERRIDE;
+ QFontEngine *fontEngine(const QFontDef &fontDef, void *handle) Q_DECL_OVERRIDE;
+ QFontEngine *fontEngine(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference) Q_DECL_OVERRIDE;
+ QStringList fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const Q_DECL_OVERRIDE;
+ QStringList addApplicationFont(const QByteArray &fontData, const QString &fileName) Q_DECL_OVERRIDE;
+ void releaseHandle(void *handle) Q_DECL_OVERRIDE;
static QStringList addTTFile(const QByteArray &fontData, const QByteArray &file, QSupportedWritingSystems *supportedWritingSystems = 0);
static QString fontNameFromTTFile(const QString &filename);
diff --git a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
index 27ff33be86..f2e2ded3f5 100644
--- a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
+++ b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase.cpp
@@ -54,6 +54,13 @@
QT_BEGIN_NAMESPACE
+static const int maxWeight = 99;
+
+static inline int mapToQtWeightForRange(int fcweight, int fcLower, int fcUpper, int qtLower, int qtUpper)
+{
+ return qtLower + ((fcweight - fcLower) * (qtUpper - qtLower)) / (fcUpper - fcLower);
+}
+
static inline bool requiresOpenType(int writingSystem)
{
return ((writingSystem >= QFontDatabase::Syriac && writingSystem <= QFontDatabase::Sinhala)
@@ -68,26 +75,28 @@ static inline int weightFromFcWeight(int fcweight)
// mapping. This ensures that where there is a corresponding enum on both sides (for example
// FC_WEIGHT_DEMIBOLD and QFont::DemiBold) we map one to the other but other values map
// to intermediate Qt weights.
- const int maxWeight = 99;
- int qtweight;
- if (fcweight < 0)
- qtweight = 0;
- else if (fcweight <= FC_WEIGHT_LIGHT)
- qtweight = (fcweight * QFont::Light) / FC_WEIGHT_LIGHT;
- else if (fcweight <= FC_WEIGHT_NORMAL)
- qtweight = QFont::Light + ((fcweight - FC_WEIGHT_LIGHT) * (QFont::Normal - QFont::Light)) / (FC_WEIGHT_NORMAL - FC_WEIGHT_LIGHT);
- else if (fcweight <= FC_WEIGHT_DEMIBOLD)
- qtweight = QFont::Normal + ((fcweight - FC_WEIGHT_NORMAL) * (QFont::DemiBold - QFont::Normal)) / (FC_WEIGHT_DEMIBOLD - FC_WEIGHT_NORMAL);
- else if (fcweight <= FC_WEIGHT_BOLD)
- qtweight = QFont::DemiBold + ((fcweight - FC_WEIGHT_DEMIBOLD) * (QFont::Bold - QFont::DemiBold)) / (FC_WEIGHT_BOLD - FC_WEIGHT_DEMIBOLD);
- else if (fcweight <= FC_WEIGHT_BLACK)
- qtweight = QFont::Bold + ((fcweight - FC_WEIGHT_BOLD) * (QFont::Black - QFont::Bold)) / (FC_WEIGHT_BLACK - FC_WEIGHT_BOLD);
- else if (fcweight <= FC_WEIGHT_ULTRABLACK)
- qtweight = QFont::Black + ((fcweight - FC_WEIGHT_BLACK) * (maxWeight - QFont::Black)) / (FC_WEIGHT_ULTRABLACK - FC_WEIGHT_BLACK);
- else
- qtweight = maxWeight;
- return qtweight;
+ if (fcweight <= FC_WEIGHT_THIN)
+ return QFont::Thin;
+ if (fcweight <= FC_WEIGHT_ULTRALIGHT)
+ return mapToQtWeightForRange(fcweight, FC_WEIGHT_THIN, FC_WEIGHT_ULTRALIGHT, QFont::Thin, QFont::ExtraLight);
+ if (fcweight <= FC_WEIGHT_LIGHT)
+ return mapToQtWeightForRange(fcweight, FC_WEIGHT_ULTRALIGHT, FC_WEIGHT_LIGHT, QFont::ExtraLight, QFont::Light);
+ if (fcweight <= FC_WEIGHT_NORMAL)
+ return mapToQtWeightForRange(fcweight, FC_WEIGHT_LIGHT, FC_WEIGHT_NORMAL, QFont::Light, QFont::Normal);
+ if (fcweight <= FC_WEIGHT_MEDIUM)
+ return mapToQtWeightForRange(fcweight, FC_WEIGHT_NORMAL, FC_WEIGHT_MEDIUM, QFont::Normal, QFont::Medium);
+ if (fcweight <= FC_WEIGHT_DEMIBOLD)
+ return mapToQtWeightForRange(fcweight, FC_WEIGHT_MEDIUM, FC_WEIGHT_DEMIBOLD, QFont::Medium, QFont::DemiBold);
+ if (fcweight <= FC_WEIGHT_BOLD)
+ return mapToQtWeightForRange(fcweight, FC_WEIGHT_DEMIBOLD, FC_WEIGHT_BOLD, QFont::DemiBold, QFont::Bold);
+ if (fcweight <= FC_WEIGHT_ULTRABOLD)
+ return mapToQtWeightForRange(fcweight, FC_WEIGHT_BOLD, FC_WEIGHT_ULTRABOLD, QFont::Bold, QFont::ExtraBold);
+ if (fcweight <= FC_WEIGHT_BLACK)
+ return mapToQtWeightForRange(fcweight, FC_WEIGHT_ULTRABOLD, FC_WEIGHT_BLACK, QFont::ExtraBold, QFont::Black);
+ if (fcweight <= FC_WEIGHT_ULTRABLACK)
+ return mapToQtWeightForRange(fcweight, FC_WEIGHT_BLACK, FC_WEIGHT_ULTRABLACK, QFont::Black, maxWeight);
+ return maxWeight;
}
static inline int stretchFromFcWidth(int fcwidth)
diff --git a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h
index 745d12b825..f67db6a527 100644
--- a/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h
+++ b/src/platformsupport/fontdatabases/fontconfig/qfontconfigdatabase_p.h
@@ -55,14 +55,14 @@ class QFontEngineFT;
class QFontconfigDatabase : public QBasicFontDatabase
{
public:
- void populateFontDatabase();
- QFontEngineMulti *fontEngineMulti(QFontEngine *fontEngine, QChar::Script script);
- QFontEngine *fontEngine(const QFontDef &fontDef, void *handle);
- QFontEngine *fontEngine(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference);
- QStringList fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const;
- QStringList addApplicationFont(const QByteArray &fontData, const QString &fileName);
- QString resolveFontFamilyAlias(const QString &family) const;
- QFont defaultFont() const;
+ void populateFontDatabase() Q_DECL_OVERRIDE;
+ QFontEngineMulti *fontEngineMulti(QFontEngine *fontEngine, QChar::Script script) Q_DECL_OVERRIDE;
+ QFontEngine *fontEngine(const QFontDef &fontDef, void *handle) Q_DECL_OVERRIDE;
+ QFontEngine *fontEngine(const QByteArray &fontData, qreal pixelSize, QFont::HintingPreference hintingPreference) Q_DECL_OVERRIDE;
+ QStringList fallbacksForFamily(const QString &family, QFont::Style style, QFont::StyleHint styleHint, QChar::Script script) const Q_DECL_OVERRIDE;
+ QStringList addApplicationFont(const QByteArray &fontData, const QString &fileName) Q_DECL_OVERRIDE;
+ QString resolveFontFamilyAlias(const QString &family) const Q_DECL_OVERRIDE;
+ QFont defaultFont() const Q_DECL_OVERRIDE;
private:
void setupFontEngine(QFontEngineFT *engine, const QFontDef &fontDef) const;
diff --git a/src/platformsupport/fontdatabases/fontconfig/qfontenginemultifontconfig.cpp b/src/platformsupport/fontdatabases/fontconfig/qfontenginemultifontconfig.cpp
index 956cf68290..b0460814ca 100644
--- a/src/platformsupport/fontdatabases/fontconfig/qfontenginemultifontconfig.cpp
+++ b/src/platformsupport/fontdatabases/fontconfig/qfontenginemultifontconfig.cpp
@@ -38,7 +38,7 @@
QT_BEGIN_NAMESPACE
QFontEngineMultiFontConfig::QFontEngineMultiFontConfig(QFontEngine *fe, int script)
- : QFontEngineMultiBasicImpl(fe, script)
+ : QFontEngineMulti(fe, script)
{
}
@@ -67,8 +67,8 @@ bool QFontEngineMultiFontConfig::shouldLoadFontEngineForCharacter(int at, uint u
FcPattern * QFontEngineMultiFontConfig::getMatchPatternForFallback(int fallBackIndex) const
{
Q_ASSERT(fallBackIndex < fallbackFamilyCount());
- if (engines.size() - 1 > cachedMatchPatterns.size())
- cachedMatchPatterns.resize(engines.size() - 1);
+ if (fallbackFamilyCount() > cachedMatchPatterns.size())
+ cachedMatchPatterns.resize(fallbackFamilyCount());
FcPattern *ret = cachedMatchPatterns.at(fallBackIndex);
if (ret)
return ret;
diff --git a/src/platformsupport/fontdatabases/fontconfig/qfontenginemultifontconfig_p.h b/src/platformsupport/fontdatabases/fontconfig/qfontenginemultifontconfig_p.h
index 115f8e6c16..e748e81cf6 100644
--- a/src/platformsupport/fontdatabases/fontconfig/qfontenginemultifontconfig_p.h
+++ b/src/platformsupport/fontdatabases/fontconfig/qfontenginemultifontconfig_p.h
@@ -50,14 +50,14 @@
QT_BEGIN_NAMESPACE
-class QFontEngineMultiFontConfig : public QFontEngineMultiBasicImpl
+class QFontEngineMultiFontConfig : public QFontEngineMulti
{
public:
explicit QFontEngineMultiFontConfig(QFontEngine *fe, int script);
~QFontEngineMultiFontConfig();
- bool shouldLoadFontEngineForCharacter(int at, uint ucs4) const;
+ bool shouldLoadFontEngineForCharacter(int at, uint ucs4) const Q_DECL_OVERRIDE;
private:
FcPattern* getMatchPatternForFallback(int at) const;
diff --git a/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm b/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm
index 5a6c5de0b4..4244719b34 100644
--- a/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm
+++ b/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase.mm
@@ -288,25 +288,9 @@ static void getFontDescription(CTFontDescriptorRef font, FontDescription *fd)
if (styles) {
if (CFNumberRef weightValue = (CFNumberRef) CFDictionaryGetValue(styles, kCTFontWeightTrait)) {
- double normalizedWeight;
- if (CFNumberGetValue(weightValue, kCFNumberDoubleType, &normalizedWeight)) {
- if (normalizedWeight >= 0.62)
- fd->weight = QFont::Black;
- else if (normalizedWeight >= 0.4)
- fd->weight = QFont::Bold;
- else if (normalizedWeight >= 0.3)
- fd->weight = QFont::DemiBold;
- else if (normalizedWeight >= 0.2)
- fd->weight = qt_mediumFontWeight;
- else if (normalizedWeight == 0.0)
- fd->weight = QFont::Normal;
- else if (normalizedWeight <= -0.4)
- fd->weight = QFont::Light;
- else if (normalizedWeight <= -0.6)
- fd->weight = qt_extralightFontWeight;
- else if (normalizedWeight <= -0.8)
- fd->weight = qt_thinFontWeight;
- }
+ float normalizedWeight;
+ if (CFNumberGetValue(weightValue, kCFNumberFloatType, &normalizedWeight))
+ fd->weight = QCoreTextFontEngine::qtWeightFromCFWeight(normalizedWeight);
}
if (CFNumberRef italic = (CFNumberRef) CFDictionaryGetValue(styles, kCTFontSlantTrait)) {
double d;
@@ -848,6 +832,11 @@ QFont QCoreTextFontDatabase::defaultFont() const
return QFont(defaultFontName);
}
+bool QCoreTextFontDatabase::fontsAlwaysScalable() const
+{
+ return true;
+}
+
QList<int> QCoreTextFontDatabase::standardSizes() const
{
QList<int> ret;
diff --git a/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h b/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h
index 044db2b03d..b95a145c1a 100644
--- a/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h
+++ b/src/platformsupport/fontdatabases/mac/qcoretextfontdatabase_p.h
@@ -87,6 +87,7 @@ public:
void releaseHandle(void *handle);
bool isPrivateFontFamily(const QString &family) const;
QFont defaultFont() const;
+ bool fontsAlwaysScalable() const Q_DECL_OVERRIDE;
QList<int> standardSizes() const;
// For iOS and OS X platform themes
diff --git a/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm b/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm
index 23fe48b493..e111a138b8 100644
--- a/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm
+++ b/src/platformsupport/fontdatabases/mac/qfontengine_coretext.mm
@@ -41,6 +41,7 @@
#include "qfontengine_coretext_p.h"
+#include <qpa/qplatformfontdatabase.h>
#include <QtCore/qendian.h>
#include <QtCore/qsettings.h>
@@ -66,6 +67,29 @@ bool QCoreTextFontEngine::ct_getSfntTable(void *user_data, uint tag, uchar *buff
return true;
}
+QFont::Weight QCoreTextFontEngine::qtWeightFromCFWeight(float value)
+{
+ if (value >= 0.62)
+ return QFont::Black;
+ if (value >= 0.5)
+ return QFont::ExtraBold;
+ if (value >= 0.4)
+ return QFont::Bold;
+ if (value >= 0.3)
+ return QFont::DemiBold;
+ if (value >= 0.2)
+ return QFont::Medium;
+ if (value == 0.0)
+ return QFont::Normal;
+ if (value <= -0.4)
+ return QFont::Light;
+ if (value <= -0.6)
+ return QFont::ExtraLight;
+ if (value <= -0.8)
+ return QFont::Thin;
+ return QFont::Normal;
+}
+
static void loadAdvancesForGlyphs(CTFontRef ctfont,
QVarLengthArray<CGGlyph> &cgGlyphs,
QGlyphLayout *glyphs, int len,
@@ -88,6 +112,16 @@ static void loadAdvancesForGlyphs(CTFontRef ctfont,
}
}
+static float getTraitValue(CFDictionaryRef allTraits, CFStringRef trait)
+{
+ if (CFDictionaryContainsKey(allTraits, trait)) {
+ CFNumberRef traitNum = (CFNumberRef) CFDictionaryGetValue(allTraits, trait);
+ float v = 0;
+ CFNumberGetValue(traitNum, kCFNumberFloatType, &v);
+ return v;
+ }
+ return 0;
+}
int QCoreTextFontEngine::antialiasingThreshold = 0;
QFontEngine::GlyphFormat QCoreTextFontEngine::defaultGlyphFormat = QFontEngine::Format_A32;
@@ -129,34 +163,6 @@ QCoreTextFontEngine::~QCoreTextFontEngine()
CFRelease(ctfont);
}
-static QFont::Weight weightFromInteger(int weight)
-{
- if (weight < 400)
- return QFont::Light;
- else if (weight < 600)
- return QFont::Normal;
- else if (weight < 700)
- return QFont::DemiBold;
- else if (weight < 800)
- return QFont::Bold;
- else
- return QFont::Black;
-}
-
-int getTraitValue(CFDictionaryRef allTraits, CFStringRef trait)
-{
- if (CFDictionaryContainsKey(allTraits, trait)) {
- CFNumberRef traitNum = (CFNumberRef) CFDictionaryGetValue(allTraits, trait);
- float v = 0;
- CFNumberGetValue(traitNum, kCFNumberFloatType, &v);
- // the value we get from CFNumberRef is from -1.0 to 1.0
- int value = v * 500 + 500;
- return value;
- }
-
- return 0;
-}
-
void QCoreTextFontEngine::init()
{
Q_ASSERT(ctfont != NULL);
@@ -182,8 +188,8 @@ void QCoreTextFontEngine::init()
fontDef.style = QFont::StyleItalic;
CFDictionaryRef allTraits = CTFontCopyTraits(ctfont);
- fontDef.weight = weightFromInteger(getTraitValue(allTraits, kCTFontWeightTrait));
- int slant = getTraitValue(allTraits, kCTFontSlantTrait);
+ fontDef.weight = QCoreTextFontEngine::qtWeightFromCFWeight(getTraitValue(allTraits, kCTFontWeightTrait));
+ int slant = static_cast<int>(getTraitValue(allTraits, kCTFontSlantTrait) * 500 + 500);
if (slant > 500 && !(traits & kCTFontItalicTrait))
fontDef.style = QFont::StyleOblique;
CFRelease(allTraits);
@@ -646,15 +652,11 @@ QImage QCoreTextFontEngine::alphaMapForGlyph(glyph_t glyph, QFixed subPixelPosit
QImage im = imageForGlyph(glyph, subPixelPosition, false, x);
- QImage indexed(im.width(), im.height(), QImage::Format_Indexed8);
- QVector<QRgb> colors(256);
- for (int i=0; i<256; ++i)
- colors[i] = qRgba(0, 0, 0, i);
- indexed.setColorTable(colors);
+ QImage alphaMap(im.width(), im.height(), QImage::Format_Alpha8);
for (int y=0; y<im.height(); ++y) {
uint *src = (uint*) im.scanLine(y);
- uchar *dst = indexed.scanLine(y);
+ uchar *dst = alphaMap.scanLine(y);
for (int x=0; x<im.width(); ++x) {
*dst = qGray(*src);
++dst;
@@ -662,7 +664,7 @@ QImage QCoreTextFontEngine::alphaMapForGlyph(glyph_t glyph, QFixed subPixelPosit
}
}
- return indexed;
+ return alphaMap;
}
QImage QCoreTextFontEngine::alphaRGBMapForGlyph(glyph_t glyph, QFixed subPixelPosition, const QTransform &x)
@@ -700,7 +702,13 @@ void QCoreTextFontEngine::recalcAdvances(QGlyphLayout *glyphs, QFontEngine::Shap
QFontEngine::FaceId QCoreTextFontEngine::faceId() const
{
- return QFontEngine::FaceId();
+ FaceId result;
+ result.index = 0;
+
+ QCFString name = CTFontCopyName(ctfont, kCTFontUniqueNameKey);
+ result.filename = QCFString::toQString(name).toUtf8();
+
+ return result;
}
bool QCoreTextFontEngine::canRender(const QChar *string, int len) const
@@ -714,9 +722,26 @@ bool QCoreTextFontEngine::getSfntTableData(uint tag, uchar *buffer, uint *length
return ct_getSfntTable((void *)&ctfont, tag, buffer, length);
}
-void QCoreTextFontEngine::getUnscaledGlyph(glyph_t, QPainterPath *, glyph_metrics_t *)
+void QCoreTextFontEngine::getUnscaledGlyph(glyph_t glyph, QPainterPath *path, glyph_metrics_t *metric)
{
- // ###
+ CGAffineTransform cgMatrix = CGAffineTransformIdentity;
+
+ qreal emSquare = CTFontGetUnitsPerEm(ctfont);
+ qreal scale = emSquare / CTFontGetSize(ctfont);
+ cgMatrix = CGAffineTransformScale(cgMatrix, scale, -scale);
+
+ QCFType<CGPathRef> cgpath = CTFontCreatePathForGlyph(ctfont, (CGGlyph) glyph, &cgMatrix);
+ ConvertPathInfo info(path, QPointF(0,0));
+ CGPathApply(cgpath, &info, convertCGPathToQPainterPath);
+
+ *metric = boundingBox(glyph);
+ // scale the metrics too
+ metric->width = QFixed::fromReal(metric->width.toReal() * scale);
+ metric->height = QFixed::fromReal(metric->height.toReal() * scale);
+ metric->x = QFixed::fromReal(metric->x.toReal() * scale);
+ metric->y = QFixed::fromReal(metric->y.toReal() * scale);
+ metric->xoff = QFixed::fromReal(metric->xoff.toReal() * scale);
+ metric->yoff = QFixed::fromReal(metric->yoff.toReal() * scale);
}
QFixed QCoreTextFontEngine::emSquareSize() const
@@ -744,4 +769,43 @@ bool QCoreTextFontEngine::supportsTransformation(const QTransform &transform) co
return false;
}
+QFontEngine::Properties QCoreTextFontEngine::properties() const
+{
+ Properties result;
+
+ QCFString psName, copyright;
+ psName = CTFontCopyPostScriptName(ctfont);
+ copyright = CTFontCopyName(ctfont, kCTFontCopyrightNameKey);
+ result.postscriptName = QCFString::toQString(psName).toUtf8();
+ result.copyright = QCFString::toQString(copyright).toUtf8();
+
+ qreal emSquare = CTFontGetUnitsPerEm(ctfont);
+ qreal scale = emSquare / CTFontGetSize(ctfont);
+
+ CGRect cgRect = CTFontGetBoundingBox(ctfont);
+ result.boundingBox = QRectF(cgRect.origin.x * scale,
+ -CTFontGetAscent(ctfont) * scale,
+ cgRect.size.width * scale,
+ cgRect.size.height * scale);
+
+ result.emSquare = emSquareSize();
+ result.ascent = QFixed::fromReal(CTFontGetAscent(ctfont) * scale);
+ result.descent = QFixed::fromReal(CTFontGetDescent(ctfont) * scale);
+ result.leading = QFixed::fromReal(CTFontGetLeading(ctfont) * scale);
+ result.italicAngle = QFixed::fromReal(CTFontGetSlantAngle(ctfont));
+ result.capHeight = QFixed::fromReal(CTFontGetCapHeight(ctfont) * scale);
+ result.lineWidth = QFixed::fromReal(CTFontGetUnderlineThickness(ctfont) * scale);
+
+ if (fontDef.styleStrategy & QFont::ForceIntegerMetrics) {
+ result.ascent = result.ascent.round();
+ result.descent = result.descent.round();
+ result.leading = result.leading.round();
+ result.italicAngle = result.italicAngle.round();
+ result.capHeight = result.capHeight.round();
+ result.lineWidth = result.lineWidth.round();
+ }
+
+ return result;
+}
+
QT_END_NAMESPACE
diff --git a/src/platformsupport/fontdatabases/mac/qfontengine_coretext_p.h b/src/platformsupport/fontdatabases/mac/qfontengine_coretext_p.h
index 998a6abb18..c70528ba8b 100644
--- a/src/platformsupport/fontdatabases/mac/qfontengine_coretext_p.h
+++ b/src/platformsupport/fontdatabases/mac/qfontengine_coretext_p.h
@@ -57,7 +57,6 @@
QT_BEGIN_NAMESPACE
-class QRawFontPrivate;
class QCoreTextFontEngine : public QFontEngine
{
public:
@@ -106,6 +105,8 @@ public:
virtual QFontEngine *cloneWithSize(qreal pixelSize) const;
virtual int glyphMargin(QFontEngine::GlyphFormat format) { Q_UNUSED(format); return 0; }
+ virtual QFontEngine::Properties properties() const;
+
static bool supportsColorGlyphs()
{
#if defined(Q_OS_IOS)
@@ -122,13 +123,11 @@ public:
}
static bool ct_getSfntTable(void *user_data, uint tag, uchar *buffer, uint *length);
+ static QFont::Weight qtWeightFromCFWeight(float value);
static int antialiasingThreshold;
static QFontEngine::GlyphFormat defaultGlyphFormat;
-
private:
- friend class QRawFontPrivate;
-
void init();
QImage imageForGlyph(glyph_t glyph, QFixed subPixelPosition, bool colorful, const QTransform &m);
CTFontRef ctfont;
diff --git a/src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler.cpp b/src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler.cpp
index 27d15dfafa..9ce97cf373 100644
--- a/src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler.cpp
+++ b/src/platformsupport/input/evdevkeyboard/qevdevkeyboardhandler.cpp
@@ -37,20 +37,18 @@
#include <QSocketNotifier>
#include <QStringList>
-#include <qpa/qwindowsysteminterface.h>
#include <QCoreApplication>
+#include <QLoggingCategory>
+#include <qpa/qwindowsysteminterface.h>
#include <private/qcore_unix_p.h>
#include <linux/input.h>
-//#define QT_QPA_KEYMAP_DEBUG
-
-#ifdef QT_QPA_KEYMAP_DEBUG
-#include <qdebug.h>
-#endif
-
QT_BEGIN_NAMESPACE
+Q_LOGGING_CATEGORY(qLcEvdevKey, "qt.qpa.input")
+Q_LOGGING_CATEGORY(qLcEvdevKeyMap, "qt.qpa.input.keymap")
+
// simple builtin US keymap
#include "qevdevkeyboard_defaultmap_p.h"
@@ -60,9 +58,7 @@ QEvdevKeyboardHandler::QEvdevKeyboardHandler(const QString &device, int fd, bool
m_no_zap(disableZap), m_do_compose(enableCompose),
m_keymap(0), m_keymap_size(0), m_keycompose(0), m_keycompose_size(0)
{
-#ifdef QT_QPA_KEYMAP_DEBUG
- qWarning() << "Create keyboard handler with for device" << device;
-#endif
+ qCDebug(qLcEvdevKey) << "Create keyboard handler with for device" << device;
setObjectName(QLatin1String("LinuxInput Keyboard Handler"));
@@ -89,9 +85,7 @@ QEvdevKeyboardHandler *QEvdevKeyboardHandler::create(const QString &device,
const QString &specification,
const QString &defaultKeymapFile)
{
-#ifdef QT_QPA_KEYMAP_DEBUG
- qWarning() << "Try to create keyboard handler for" << device << specification;
-#endif
+ qCDebug(qLcEvdevKey) << "Try to create keyboard handler for" << device << specification;
QString keymapFile = defaultKeymapFile;
int repeatDelay = 400;
@@ -116,9 +110,7 @@ QEvdevKeyboardHandler *QEvdevKeyboardHandler::create(const QString &device,
grab = arg.mid(5).toInt();
}
-#ifdef QT_QPA_KEYMAP_DEBUG
- qWarning() << "Opening keyboard at" << device;
-#endif
+ qCDebug(qLcEvdevKey) << "Opening keyboard at" << device;
int fd;
fd = qt_safe_open(device.toLocal8Bit().constData(), O_RDONLY | O_NDELAY, 0);
@@ -138,9 +130,7 @@ QEvdevKeyboardHandler *QEvdevKeyboardHandler::create(const QString &device,
void QEvdevKeyboardHandler::switchLed(int led, bool state)
{
-#ifdef QT_QPA_KEYMAP_DEBUG
- qWarning() << "switchLed" << led << state;
-#endif
+ qCDebug(qLcEvdevKey) << "switchLed" << led << state;
struct ::input_event led_ie;
::gettimeofday(&led_ie.time, 0);
@@ -153,10 +143,6 @@ void QEvdevKeyboardHandler::switchLed(int led, bool state)
void QEvdevKeyboardHandler::readKeycode()
{
-#ifdef QT_QPA_KEYMAP_DEBUG
- qWarning() << "Read new keycode on" << m_device;
-#endif
-
struct ::input_event buffer[32];
int n = 0;
@@ -164,11 +150,11 @@ void QEvdevKeyboardHandler::readKeycode()
int result = qt_safe_read(m_fd, reinterpret_cast<char *>(buffer) + n, sizeof(buffer) - n);
if (result == 0) {
- qWarning("Got EOF from the input device.");
+ qWarning("evdevkeyboard: Got EOF from the input device");
return;
} else if (result < 0) {
if (errno != EINTR && errno != EAGAIN) {
- qWarning("Could not read from input device: %s", strerror(errno));
+ qErrnoWarning(errno, "evdevkeyboard: Could not read from input device");
return;
}
} else {
@@ -249,21 +235,17 @@ QEvdevKeyboardHandler::KeycodeAction QEvdevKeyboardHandler::processKeycode(quint
if (m_locks[0] /*CapsLock*/ && map_withmod && (map_withmod->flags & QEvdevKeyboardMap::IsLetter))
modifiers ^= QEvdevKeyboardMap::ModShift;
-#ifdef QT_QPA_KEYMAP_DEBUG
- qWarning("Processing key event: keycode=%3d, modifiers=%02x pressed=%d, autorepeat=%d | plain=%d, withmod=%d, size=%d", \
- keycode, modifiers, pressed ? 1 : 0, autorepeat ? 1 : 0, \
- map_plain ? map_plain - m_keymap : -1, \
- map_withmod ? map_withmod - m_keymap : -1, \
- m_keymap_size);
-#endif
+ qCDebug(qLcEvdevKeyMap, "Processing key event: keycode=%3d, modifiers=%02x pressed=%d, autorepeat=%d | plain=%d, withmod=%d, size=%d",
+ keycode, modifiers, pressed ? 1 : 0, autorepeat ? 1 : 0,
+ int(map_plain ? map_plain - m_keymap : -1),
+ int(map_withmod ? map_withmod - m_keymap : -1),
+ m_keymap_size);
const QEvdevKeyboardMap::Mapping *it = map_withmod ? map_withmod : map_plain;
if (!it) {
-#ifdef QT_QPA_KEYMAP_DEBUG
// we couldn't even find a plain mapping
- qWarning("Could not find a suitable mapping for keycode: %3d, modifiers: %02x", keycode, modifiers);
-#endif
+ qCDebug(qLcEvdevKeyMap, "Could not find a suitable mapping for keycode: %3d, modifiers: %02x", keycode, modifiers);
return result;
}
@@ -397,9 +379,7 @@ QEvdevKeyboardHandler::KeycodeAction QEvdevKeyboardHandler::processKeycode(quint
}
if (!skip) {
-#ifdef QT_QPA_KEYMAP_DEBUG
- qWarning("Processing: uni=%04x, qt=%08x, qtmod=%08x", unicode, qtcode & ~modmask, (qtcode & modmask));
-#endif
+ qCDebug(qLcEvdevKeyMap, "Processing: uni=%04x, qt=%08x, qtmod=%08x", unicode, qtcode & ~modmask, (qtcode & modmask));
//If NumLockOff and keypad key pressed remap event sent
if (!m_locks[1] &&
(qtcode & Qt::KeypadModifier) &&
@@ -457,9 +437,7 @@ QEvdevKeyboardHandler::KeycodeAction QEvdevKeyboardHandler::processKeycode(quint
void QEvdevKeyboardHandler::unloadKeymap()
{
-#ifdef QT_QPA_KEYMAP_DEBUG
- qWarning() << "Unload current keymap and restore built-in";
-#endif
+ qCDebug(qLcEvdevKey) << "Unload current keymap and restore built-in";
if (m_keymap && m_keymap != s_keymap_default)
delete [] m_keymap;
@@ -481,7 +459,7 @@ void QEvdevKeyboardHandler::unloadKeymap()
quint16 ledbits[1];
memset(ledbits, 0, sizeof(ledbits));
if (::ioctl(m_fd, EVIOCGLED(sizeof(ledbits)), ledbits) < 0) {
- qWarning("Failed to query led states. Settings numlock & capslock off");
+ qWarning("evdevkeyboard: Failed to query led states");
switchLed(LED_NUML,false);
switchLed(LED_CAPSL, false);
switchLed(LED_SCROLLL,false);
@@ -495,17 +473,13 @@ void QEvdevKeyboardHandler::unloadKeymap()
//Scrollock
if ((ledbits[0]&0x04) > 0)
m_locks[2] = 1;
-#ifdef QT_QPA_KEYMAP_DEBUG
- qWarning("numlock=%d , capslock=%d, scrolllock=%d",m_locks[1],m_locks[0],m_locks[2]);
-#endif
+ qCDebug(qLcEvdevKey, "numlock=%d , capslock=%d, scrolllock=%d", m_locks[1], m_locks[0], m_locks[2]);
}
}
bool QEvdevKeyboardHandler::loadKeymap(const QString &file)
{
-#ifdef QT_QPA_KEYMAP_DEBUG
- qWarning() << "Load keymap" << file;
-#endif
+ qCDebug(qLcEvdevKey) << "Loading keymap" << file;
QFile f(file);
@@ -529,7 +503,7 @@ bool QEvdevKeyboardHandler::loadKeymap(const QString &file)
ds >> qmap_magic >> qmap_version >> qmap_keymap_size >> qmap_keycompose_size;
if (ds.status() != QDataStream::Ok || qmap_magic != QEvdevKeyboardMap::FileMagic || qmap_version != 1 || qmap_keymap_size == 0) {
- qWarning("'%s' is ot a valid.qmap keymap file.", qPrintable(file));
+ qWarning("'%s' is not a valid .qmap keymap file", qPrintable(file));
return false;
}
diff --git a/src/platformsupport/input/evdevkeyboard/qevdevkeyboardmanager.cpp b/src/platformsupport/input/evdevkeyboard/qevdevkeyboardmanager.cpp
index 3f8eb1bcd5..4614fbd499 100644
--- a/src/platformsupport/input/evdevkeyboard/qevdevkeyboardmanager.cpp
+++ b/src/platformsupport/input/evdevkeyboard/qevdevkeyboardmanager.cpp
@@ -35,15 +35,12 @@
#include <QStringList>
#include <QCoreApplication>
-
-//#define QT_QPA_KEYMAP_DEBUG
-
-#ifdef QT_QPA_KEYMAP_DEBUG
-#include <QDebug>
-#endif
+#include <QLoggingCategory>
QT_BEGIN_NAMESPACE
+Q_DECLARE_LOGGING_CATEGORY(qLcEvdevKey)
+
QEvdevKeyboardManager::QEvdevKeyboardManager(const QString &key, const QString &specification, QObject *parent)
: QObject(parent)
{
@@ -74,10 +71,7 @@ QEvdevKeyboardManager::QEvdevKeyboardManager(const QString &key, const QString &
addKeyboard(device);
if (devices.isEmpty()) {
-#ifdef QT_QPA_KEYMAP_DEBUG
- qWarning() << "Use device discovery";
-#endif
-
+ qCDebug(qLcEvdevKey) << "evdevkeyboard: Using device discovery";
m_deviceDiscovery = QDeviceDiscovery::create(QDeviceDiscovery::Device_Keyboard, this);
if (m_deviceDiscovery) {
// scan and add already connected keyboards
@@ -100,24 +94,19 @@ QEvdevKeyboardManager::~QEvdevKeyboardManager()
void QEvdevKeyboardManager::addKeyboard(const QString &deviceNode)
{
-#ifdef QT_QPA_KEYMAP_DEBUG
- qWarning() << "Adding keyboard at" << deviceNode;
-#endif
-
+ qCDebug(qLcEvdevKey) << "Adding keyboard at" << deviceNode;
QEvdevKeyboardHandler *keyboard;
keyboard = QEvdevKeyboardHandler::create(deviceNode, m_spec, m_defaultKeymapFile);
if (keyboard)
m_keyboards.insert(deviceNode, keyboard);
else
- qWarning("Failed to open keyboard");
+ qWarning("Failed to open keyboard device %s", qPrintable(deviceNode));
}
void QEvdevKeyboardManager::removeKeyboard(const QString &deviceNode)
{
if (m_keyboards.contains(deviceNode)) {
-#ifdef QT_QPA_KEYMAP_DEBUG
- qWarning() << "Removing keyboard at" << deviceNode;
-#endif
+ qCDebug(qLcEvdevKey) << "Removing keyboard at" << deviceNode;
QEvdevKeyboardHandler *keyboard = m_keyboards.value(deviceNode);
m_keyboards.remove(deviceNode);
delete keyboard;
diff --git a/src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp b/src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp
index 11db06680a..eddf180e4a 100644
--- a/src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp
+++ b/src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp
@@ -38,6 +38,7 @@
#include <QPoint>
#include <QGuiApplication>
#include <QScreen>
+#include <QLoggingCategory>
#include <qpa/qwindowsysteminterface.h>
#include <qplatformdefs.h>
@@ -48,19 +49,15 @@
#include <linux/kd.h>
#include <linux/input.h>
-#include <qdebug.h>
-
-//#define QT_QPA_MOUSE_HANDLER_DEBUG
-
#define TEST_BIT(array, bit) (array[bit/8] & (1<<(bit%8)))
QT_BEGIN_NAMESPACE
+Q_LOGGING_CATEGORY(qLcEvdevMouse, "qt.qpa.input")
+
QEvdevMouseHandler *QEvdevMouseHandler::create(const QString &device, const QString &specification)
{
-#ifdef QT_QPA_MOUSE_HANDLER_DEBUG
- qWarning() << "Try to create mouse handler for" << device << specification;
-#endif
+ qCDebug(qLcEvdevMouse) << "create mouse handler for" << device << specification;
bool compression = true;
int jitterLimit = 0;
@@ -85,7 +82,7 @@ QEvdevMouseHandler *QEvdevMouseHandler::create(const QString &device, const QStr
::ioctl(fd, EVIOCGRAB, grab);
return new QEvdevMouseHandler(device, fd, abs, compression, jitterLimit);
} else {
- qWarning("Cannot open mouse input device '%s': %s", qPrintable(device), strerror(errno));
+ qErrnoWarning(errno, "Cannot open mouse input device %s", qPrintable(device));
return 0;
}
}
@@ -148,12 +145,10 @@ bool QEvdevMouseHandler::getHardwareMaximum()
m_hardwareScalerX = static_cast<qreal>(m_hardwareWidth) / (g.right() - g.left());
m_hardwareScalerY = static_cast<qreal>(m_hardwareHeight) / (g.bottom() - g.top());
-#ifdef QT_QPA_MOUSE_HANDLER_DEBUG
- qDebug() << "Absolute pointing device";
- qDebug() << "hardware max x" << m_hardwareWidth;
- qDebug() << "hardware max y" << m_hardwareHeight;
- qDebug() << "hardware scalers x" << m_hardwareScalerX << "y" << m_hardwareScalerY;
-#endif
+ qCDebug(qLcEvdevMouse) << "Absolute pointing device"
+ << "hardware max x" << m_hardwareWidth
+ << "hardware max y" << m_hardwareHeight
+ << "hardware scalers x" << m_hardwareScalerX << "y" << m_hardwareScalerY;
return true;
}
@@ -194,11 +189,11 @@ void QEvdevMouseHandler::readMouseData()
int result = QT_READ(m_fd, reinterpret_cast<char *>(buffer) + n, sizeof(buffer) - n);
if (result == 0) {
- qWarning("Got EOF from the input device.");
+ qWarning("evdevmouse: Got EOF from the input device");
return;
} else if (result < 0) {
if (errno != EINTR && errno != EAGAIN) {
- qWarning("Could not read from input device: %s", strerror(errno));
+ qErrnoWarning(errno, "evdevmouse: Could not read from input device");
return;
}
} else {
@@ -212,7 +207,6 @@ void QEvdevMouseHandler::readMouseData()
for (int i = 0; i < n; ++i) {
struct ::input_event *data = &buffer[i];
- //qDebug() << ">>" << hex << data->type << data->code << dec << data->value;
if (data->type == EV_ABS) {
// Touchpads: store the absolute position for now, will calculate a relative one later.
if (data->code == ABS_X && m_x != data->value) {
diff --git a/src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp b/src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp
index 2b52c4e995..a0c9c9f34d 100644
--- a/src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp
+++ b/src/platformsupport/input/evdevmouse/qevdevmousemanager.cpp
@@ -36,16 +36,13 @@
#include <QStringList>
#include <QGuiApplication>
#include <QScreen>
+#include <QLoggingCategory>
#include <qpa/qwindowsysteminterface.h>
-//#define QT_QPA_MOUSEMANAGER_DEBUG
-
-#ifdef QT_QPA_MOUSEMANAGER_DEBUG
-#include <QDebug>
-#endif
-
QT_BEGIN_NAMESPACE
+Q_DECLARE_LOGGING_CATEGORY(qLcEvdevMouse)
+
QEvdevMouseManager::QEvdevMouseManager(const QString &key, const QString &specification, QObject *parent)
: QObject(parent), m_x(0), m_y(0), m_xoffset(0), m_yoffset(0)
{
@@ -79,10 +76,7 @@ QEvdevMouseManager::QEvdevMouseManager(const QString &key, const QString &specif
addMouse(device);
if (devices.isEmpty()) {
-#ifdef QT_QPA_MOUSEMANAGER_DEBUG
- qWarning() << "Use device discovery";
-#endif
-
+ qCDebug(qLcEvdevMouse) << "evdevmouse: Using device discovery";
m_deviceDiscovery = QDeviceDiscovery::create(QDeviceDiscovery::Device_Mouse | QDeviceDiscovery::Device_Touchpad, this);
if (m_deviceDiscovery) {
// scan and add already connected keyboards
@@ -130,28 +124,17 @@ void QEvdevMouseManager::handleMouseEvent(int x, int y, bool abs, Qt::MouseButto
// Cannot track the keyboard modifiers ourselves here. Instead, report the
// modifiers from the last key event that has been seen by QGuiApplication.
QWindowSystemInterface::handleMouseEvent(0, pos, pos, buttons, QGuiApplication::keyboardModifiers());
-
-#ifdef QT_QPA_MOUSEMANAGER_DEBUG
- qDebug("mouse event %d %d %d", pos.x(), pos.y(), int(buttons));
-#endif
}
void QEvdevMouseManager::handleWheelEvent(int delta, Qt::Orientation orientation)
{
QPoint pos(m_x + m_xoffset, m_y + m_yoffset);
QWindowSystemInterface::handleWheelEvent(0, pos, pos, delta, orientation, QGuiApplication::keyboardModifiers());
-
-#ifdef QT_QPA_MOUSEMANAGER_DEBUG
- qDebug("mouse wheel event %dx%d %d %d", pos.x(), pos.y(), delta, int(orientation));
-#endif
}
void QEvdevMouseManager::addMouse(const QString &deviceNode)
{
-#ifdef QT_QPA_MOUSEMANAGER_DEBUG
- qWarning() << "Adding mouse at" << deviceNode;
-#endif
-
+ qCDebug(qLcEvdevMouse) << "Adding mouse at" << deviceNode;
QEvdevMouseHandler *handler;
handler = QEvdevMouseHandler::create(deviceNode, m_spec);
if (handler) {
@@ -159,16 +142,14 @@ void QEvdevMouseManager::addMouse(const QString &deviceNode)
connect(handler, SIGNAL(handleWheelEvent(int,Qt::Orientation)), this, SLOT(handleWheelEvent(int,Qt::Orientation)));
m_mice.insert(deviceNode, handler);
} else {
- qWarning("Failed to open mouse");
+ qWarning("evdevmouse: Failed to open mouse device %s", qPrintable(deviceNode));
}
}
void QEvdevMouseManager::removeMouse(const QString &deviceNode)
{
if (m_mice.contains(deviceNode)) {
-#ifdef QT_QPA_MOUSEMANAGER_DEBUG
- qWarning() << "Removing mouse at" << deviceNode;
-#endif
+ qCDebug(qLcEvdevMouse) << "Removing mouse at" << deviceNode;
QEvdevMouseHandler *handler = m_mice.value(deviceNode);
m_mice.remove(deviceNode);
delete handler;
diff --git a/src/platformsupport/input/evdevtablet/qevdevtablet.cpp b/src/platformsupport/input/evdevtablet/qevdevtablet.cpp
index 8d91c49488..8dbf5832d9 100644
--- a/src/platformsupport/input/evdevtablet/qevdevtablet.cpp
+++ b/src/platformsupport/input/evdevtablet/qevdevtablet.cpp
@@ -36,13 +36,15 @@
#include <QStringList>
#include <QSocketNotifier>
#include <QGuiApplication>
-#include <QDebug>
+#include <QLoggingCategory>
#include <QtCore/private/qcore_unix_p.h>
#include <QtPlatformSupport/private/qdevicediscovery_p.h>
#include <linux/input.h>
QT_BEGIN_NAMESPACE
+Q_LOGGING_CATEGORY(qLcEvdevTablet, "qt.qpa.input")
+
class QEvdevTabletData
{
public:
@@ -87,28 +89,28 @@ bool QEvdevTabletData::queryLimits()
if (ok) {
minValues.x = absInfo.minimum;
maxValues.x = absInfo.maximum;
- qDebug("evdevtablet: min X: %d max X: %d", minValues.x, maxValues.x);
+ qCDebug(qLcEvdevTablet, "evdevtablet: min X: %d max X: %d", minValues.x, maxValues.x);
}
ok &= ioctl(fd, EVIOCGABS(ABS_Y), &absInfo) >= 0;
if (ok) {
minValues.y = absInfo.minimum;
maxValues.y = absInfo.maximum;
- qDebug("evdevtablet: min Y: %d max Y: %d", minValues.y, maxValues.y);
+ qCDebug(qLcEvdevTablet, "evdevtablet: min Y: %d max Y: %d", minValues.y, maxValues.y);
}
if (ioctl(fd, EVIOCGABS(ABS_PRESSURE), &absInfo) >= 0) {
minValues.p = absInfo.minimum;
maxValues.p = absInfo.maximum;
- qDebug("evdevtablet: min pressure: %d max pressure: %d", minValues.p, maxValues.p);
+ qCDebug(qLcEvdevTablet, "evdevtablet: min pressure: %d max pressure: %d", minValues.p, maxValues.p);
}
if (ioctl(fd, EVIOCGABS(ABS_DISTANCE), &absInfo) >= 0) {
minValues.d = absInfo.minimum;
maxValues.d = absInfo.maximum;
- qDebug("evdevtablet: min distance: %d max distance: %d", minValues.d, maxValues.d);
+ qCDebug(qLcEvdevTablet, "evdevtablet: min distance: %d max distance: %d", minValues.d, maxValues.d);
}
char name[128];
if (ioctl(fd, EVIOCGNAME(sizeof(name) - 1), name) >= 0) {
devName = QString::fromLocal8Bit(name);
- qDebug("evdevtablet: device name: %s", name);
+ qCDebug(qLcEvdevTablet, "evdevtablet: device name: %s", name);
}
return ok;
}
@@ -232,7 +234,7 @@ QEvdevTabletHandler::QEvdevTabletHandler(const QString &spec, QObject *parent)
}
}
if (!dev.isEmpty()) {
- qDebug("evdevtablet: using %s", qPrintable(dev));
+ qCDebug(qLcEvdevTablet, "evdevtablet: using %s", qPrintable(dev));
d->fd = QT_OPEN(dev.toLocal8Bit().constData(), O_RDONLY | O_NDELAY, 0);
if (d->fd >= 0) {
d->testGrab();
diff --git a/src/platformsupport/input/evdevtablet/qevdevtablet_p.h b/src/platformsupport/input/evdevtablet/qevdevtablet_p.h
index c20ddec787..4778c85d21 100644
--- a/src/platformsupport/input/evdevtablet/qevdevtablet_p.h
+++ b/src/platformsupport/input/evdevtablet/qevdevtablet_p.h
@@ -73,7 +73,7 @@ class QEvdevTabletHandlerThread : public QThread
public:
explicit QEvdevTabletHandlerThread(const QString &spec, QObject *parent = 0);
~QEvdevTabletHandlerThread();
- void run();
+ void run() Q_DECL_OVERRIDE;
QEvdevTabletHandler *handler() { return m_handler; }
private:
diff --git a/src/platformsupport/input/evdevtouch/qevdevtouch.cpp b/src/platformsupport/input/evdevtouch/qevdevtouch.cpp
index d0d8b783a4..dd831c9e82 100644
--- a/src/platformsupport/input/evdevtouch/qevdevtouch.cpp
+++ b/src/platformsupport/input/evdevtouch/qevdevtouch.cpp
@@ -36,7 +36,7 @@
#include <QHash>
#include <QSocketNotifier>
#include <QGuiApplication>
-#include <QDebug>
+#include <QLoggingCategory>
#include <QtCore/private/qcore_unix_p.h>
#include <QtPlatformSupport/private/qdevicediscovery_p.h>
#include <linux/input.h>
@@ -49,6 +49,8 @@ extern "C" {
QT_BEGIN_NAMESPACE
+Q_LOGGING_CATEGORY(qLcEvdevTouch, "qt.qpa.input")
+
/* android (and perhaps some other linux-derived stuff) don't define everything
* in linux/input.h, so we'll need to do that ourselves.
*/
@@ -164,7 +166,8 @@ QEvdevTouchScreenHandler::QEvdevTouchScreenHandler(const QString &specification,
{
setObjectName(QLatin1String("Evdev Touch Handler"));
- bool printDeviceInfo = qgetenv("QT_QPA_EVDEV_DEBUG").toInt();
+ if (qEnvironmentVariableIsSet("QT_QPA_EVDEV_DEBUG"))
+ ((QLoggingCategory &) qLcEvdevTouch()).setEnabled(QtDebugMsg, true);
// only the first device argument is used for now
QString spec = QString::fromLocal8Bit(qgetenv("QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS"));
@@ -215,13 +218,11 @@ QEvdevTouchScreenHandler::QEvdevTouchScreenHandler(const QString &specification,
}
if (dev.isEmpty()) {
- if (printDeviceInfo)
- qDebug("evdevtouch: No touch devices found");
+ qCDebug(qLcEvdevTouch, "evdevtouch: No touch devices found");
return;
}
- if (printDeviceInfo)
- qDebug("evdevtouch: Using device %s", qPrintable(dev));
+ qCDebug(qLcEvdevTouch, "evdevtouch: Using device %s", qPrintable(dev));
m_fd = QT_OPEN(dev.toLocal8Bit().constData(), O_RDONLY | O_NDELAY, 0);
@@ -257,25 +258,22 @@ QEvdevTouchScreenHandler::QEvdevTouchScreenHandler(const QString &specification,
}
#endif
- if (printDeviceInfo)
- qDebug("evdevtouch: Protocol type %c %s (%s)", d->m_typeB ? 'B' : 'A',
- mtdevStr, d->m_singleTouch ? "single" : "multi");
+ qCDebug(qLcEvdevTouch, "evdevtouch: Protocol type %c %s (%s)", d->m_typeB ? 'B' : 'A',
+ mtdevStr, d->m_singleTouch ? "single" : "multi");
input_absinfo absInfo;
memset(&absInfo, 0, sizeof(input_absinfo));
bool has_x_range = false, has_y_range = false;
if (ioctl(m_fd, EVIOCGABS((d->m_singleTouch ? ABS_X : ABS_MT_POSITION_X)), &absInfo) >= 0) {
- if (printDeviceInfo)
- qDebug("evdevtouch: min X: %d max X: %d", absInfo.minimum, absInfo.maximum);
+ qCDebug(qLcEvdevTouch, "evdevtouch: min X: %d max X: %d", absInfo.minimum, absInfo.maximum);
d->hw_range_x_min = absInfo.minimum;
d->hw_range_x_max = absInfo.maximum;
has_x_range = true;
}
if (ioctl(m_fd, EVIOCGABS((d->m_singleTouch ? ABS_Y : ABS_MT_POSITION_Y)), &absInfo) >= 0) {
- if (printDeviceInfo)
- qDebug("evdevtouch: min Y: %d max Y: %d", absInfo.minimum, absInfo.maximum);
+ qCDebug(qLcEvdevTouch, "evdevtouch: min Y: %d max Y: %d", absInfo.minimum, absInfo.maximum);
d->hw_range_y_min = absInfo.minimum;
d->hw_range_y_max = absInfo.maximum;
has_y_range = true;
@@ -285,8 +283,7 @@ QEvdevTouchScreenHandler::QEvdevTouchScreenHandler(const QString &specification,
qWarning("evdevtouch: Invalid ABS limits, behavior unspecified");
if (ioctl(m_fd, EVIOCGABS(ABS_PRESSURE), &absInfo) >= 0) {
- if (printDeviceInfo)
- qDebug("evdevtouch: min pressure: %d max pressure: %d", absInfo.minimum, absInfo.maximum);
+ qCDebug(qLcEvdevTouch, "evdevtouch: min pressure: %d max pressure: %d", absInfo.minimum, absInfo.maximum);
if (absInfo.maximum > absInfo.minimum) {
d->hw_pressure_min = absInfo.minimum;
d->hw_pressure_max = absInfo.maximum;
@@ -296,8 +293,7 @@ QEvdevTouchScreenHandler::QEvdevTouchScreenHandler(const QString &specification,
char name[1024];
if (ioctl(m_fd, EVIOCGNAME(sizeof(name) - 1), name) >= 0) {
d->hw_name = QString::fromLocal8Bit(name);
- if (printDeviceInfo)
- qDebug("evdevtouch: device name: %s", name);
+ qCDebug(qLcEvdevTouch, "evdevtouch: device name: %s", name);
}
// Fix up the coordinate ranges for am335x in case the kernel driver does not have them fixed.
@@ -310,9 +306,8 @@ QEvdevTouchScreenHandler::QEvdevTouchScreenHandler(const QString &specification,
d->hw_range_y_min = 220;
d->hw_range_y_max = 3907;
}
- if (printDeviceInfo)
- qDebug("evdevtouch: found ti-tsc, overriding: min X: %d max X: %d min Y: %d max Y: %d",
- d->hw_range_x_min, d->hw_range_x_max, d->hw_range_y_min, d->hw_range_y_max);
+ qCDebug(qLcEvdevTouch, "evdevtouch: found ti-tsc, overriding: min X: %d max X: %d min Y: %d max Y: %d",
+ d->hw_range_x_min, d->hw_range_x_max, d->hw_range_y_min, d->hw_range_y_max);
}
bool grabSuccess = !ioctl(m_fd, EVIOCGRAB, (void *) 1);
diff --git a/src/platformsupport/input/evdevtouch/qevdevtouch_p.h b/src/platformsupport/input/evdevtouch/qevdevtouch_p.h
index 31b2d86834..e7861f0360 100644
--- a/src/platformsupport/input/evdevtouch/qevdevtouch_p.h
+++ b/src/platformsupport/input/evdevtouch/qevdevtouch_p.h
@@ -85,7 +85,7 @@ class QEvdevTouchScreenHandlerThread : public QThread
public:
explicit QEvdevTouchScreenHandlerThread(const QString &spec, QObject *parent = 0);
~QEvdevTouchScreenHandlerThread();
- void run();
+ void run() Q_DECL_OVERRIDE;
QEvdevTouchScreenHandler *handler() { return m_handler; }
private:
diff --git a/src/platformsupport/input/input.pri b/src/platformsupport/input/input.pri
index 1524eb454e..3b9593eb31 100644
--- a/src/platformsupport/input/input.pri
+++ b/src/platformsupport/input/input.pri
@@ -4,3 +4,11 @@ contains(QT_CONFIG, evdev) {
include($$PWD/evdevtouch/evdevtouch.pri)
include($$PWD/evdevtablet/evdevtablet.pri)
}
+
+contains(QT_CONFIG, tslib) {
+ include($$PWD/tslib/tslib.pri)
+}
+
+contains(QT_CONFIG, libinput) {
+ include($$PWD/libinput/libinput.pri)
+}
diff --git a/src/platformsupport/input/libinput/libinput.pri b/src/platformsupport/input/libinput/libinput.pri
new file mode 100644
index 0000000000..bed9e79738
--- /dev/null
+++ b/src/platformsupport/input/libinput/libinput.pri
@@ -0,0 +1,21 @@
+HEADERS += \
+ $$PWD/qlibinputhandler_p.h \
+ $$PWD/qlibinputpointer_p.h \
+ $$PWD/qlibinputkeyboard_p.h \
+ $$PWD/qlibinputtouch_p.h
+
+SOURCES += \
+ $$PWD/qlibinputhandler.cpp \
+ $$PWD/qlibinputpointer.cpp \
+ $$PWD/qlibinputkeyboard.cpp \
+ $$PWD/qlibinputtouch.cpp
+
+INCLUDEPATH += $$QMAKE_INCDIR_LIBUDEV $$QMAKE_INCDIR_LIBINPUT
+LIBS_PRIVATE += $$QMAKE_LIBS_LIBUDEV $$QMAKE_LIBS_LIBINPUT
+
+contains(QT_CONFIG, xkbcommon-evdev) {
+ INCLUDEPATH += $$QMAKE_INCDIR_XKBCOMMON_EVDEV
+ LIBS_PRIVATE += $$QMAKE_LIBS_XKBCOMMON_EVDEV
+} else {
+ DEFINES += QT_NO_XKBCOMMON_EVDEV
+}
diff --git a/src/platformsupport/input/libinput/qlibinputhandler.cpp b/src/platformsupport/input/libinput/qlibinputhandler.cpp
new file mode 100644
index 0000000000..cab4527d0a
--- /dev/null
+++ b/src/platformsupport/input/libinput/qlibinputhandler.cpp
@@ -0,0 +1,194 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qlibinputhandler_p.h"
+#include "qlibinputpointer_p.h"
+#include "qlibinputkeyboard_p.h"
+#include "qlibinputtouch_p.h"
+
+#include <libudev.h>
+#include <libinput.h>
+#include <QtCore/QLoggingCategory>
+#include <QtCore/QSocketNotifier>
+#include <QtCore/private/qcore_unix_p.h>
+
+QT_BEGIN_NAMESPACE
+
+Q_LOGGING_CATEGORY(qLcInput, "qt.qpa.input")
+
+static int liOpen(const char *path, int flags, void *user_data)
+{
+ Q_UNUSED(user_data);
+ return qt_safe_open(path, flags);
+}
+
+static void liClose(int fd, void *user_data)
+{
+ Q_UNUSED(user_data);
+ qt_safe_close(fd);
+}
+
+static const struct libinput_interface liInterface = {
+ liOpen,
+ liClose
+};
+
+static void liLogHandler(libinput *libinput, libinput_log_priority priority, const char *format, va_list args)
+{
+ Q_UNUSED(libinput);
+ Q_UNUSED(priority);
+
+ char buf[512];
+ int n = vsnprintf(buf, sizeof(buf), format, args);
+ if (n > 0) {
+ if (buf[n - 1] == '\n')
+ buf[n - 1] = '\0';
+ qCDebug(qLcInput, "libinput: %s", buf);
+ }
+}
+
+QLibInputHandler::QLibInputHandler(const QString &key, const QString &spec)
+{
+ Q_UNUSED(key);
+ Q_UNUSED(spec);
+
+ m_udev = udev_new();
+ if (!m_udev)
+ qFatal("Failed to get udev context for libinput");
+
+ m_li = libinput_udev_create_context(&liInterface, Q_NULLPTR, m_udev);
+ if (!m_li)
+ qFatal("Failed to get libinput context");
+
+ libinput_log_set_handler(m_li, liLogHandler);
+ if (qLcInput().isDebugEnabled())
+ libinput_log_set_priority(m_li, LIBINPUT_LOG_PRIORITY_DEBUG);
+
+ if (libinput_udev_assign_seat(m_li, "seat0"))
+ qFatal("Failed to assign seat");
+
+ m_liFd = libinput_get_fd(m_li);
+ m_notifier.reset(new QSocketNotifier(m_liFd, QSocketNotifier::Read));
+ connect(m_notifier.data(), SIGNAL(activated(int)), SLOT(onReadyRead()));
+
+ m_pointer.reset(new QLibInputPointer);
+ m_keyboard.reset(new QLibInputKeyboard);
+ m_touch.reset(new QLibInputTouch);
+
+ // Process the initial burst of DEVICE_ADDED events.
+ onReadyRead();
+}
+
+QLibInputHandler::~QLibInputHandler()
+{
+ if (m_li)
+ libinput_unref(m_li);
+
+ if (m_udev)
+ udev_unref(m_udev);
+}
+
+void QLibInputHandler::onReadyRead()
+{
+ if (libinput_dispatch(m_li)) {
+ qWarning("libinput_dispatch failed");
+ return;
+ }
+
+ libinput_event *ev;
+ while ((ev = libinput_get_event(m_li)) != Q_NULLPTR) {
+ processEvent(ev);
+ libinput_event_destroy(ev);
+ }
+}
+
+void QLibInputHandler::processEvent(libinput_event *ev)
+{
+ libinput_event_type type = libinput_event_get_type(ev);
+ libinput_device *dev = libinput_event_get_device(ev);
+
+ switch (type) {
+ case LIBINPUT_EVENT_DEVICE_ADDED:
+ {
+ // This is not just for hotplugging, it is also called for each input
+ // device libinput reads from on startup. Hence it is suitable for doing
+ // touch device registration.
+ const char *sysname = libinput_device_get_sysname(dev); // node name without path
+ const char *name = libinput_device_get_name(dev);
+ emit deviceAdded(QString::fromUtf8(sysname), QString::fromUtf8(name));
+ if (libinput_device_has_capability(dev, LIBINPUT_DEVICE_CAP_TOUCH))
+ m_touch->registerDevice(dev);
+ break;
+ }
+ case LIBINPUT_EVENT_DEVICE_REMOVED:
+ {
+ const char *sysname = libinput_device_get_sysname(dev);
+ const char *name = libinput_device_get_name(dev);
+ emit deviceRemoved(QString::fromUtf8(sysname), QString::fromUtf8(name));
+ if (libinput_device_has_capability(dev, LIBINPUT_DEVICE_CAP_TOUCH))
+ m_touch->unregisterDevice(dev);
+ break;
+ }
+ case LIBINPUT_EVENT_POINTER_BUTTON:
+ m_pointer->processButton(libinput_event_get_pointer_event(ev));
+ break;
+ case LIBINPUT_EVENT_POINTER_MOTION:
+ m_pointer->processMotion(libinput_event_get_pointer_event(ev));
+ break;
+ case LIBINPUT_EVENT_POINTER_AXIS:
+ m_pointer->processAxis(libinput_event_get_pointer_event(ev));
+ break;
+ case LIBINPUT_EVENT_KEYBOARD_KEY:
+ m_keyboard->processKey(libinput_event_get_keyboard_event(ev));
+ break;
+ case LIBINPUT_EVENT_TOUCH_DOWN:
+ m_touch->processTouchDown(libinput_event_get_touch_event(ev));
+ break;
+ case LIBINPUT_EVENT_TOUCH_MOTION:
+ m_touch->processTouchMotion(libinput_event_get_touch_event(ev));
+ break;
+ case LIBINPUT_EVENT_TOUCH_UP:
+ m_touch->processTouchUp(libinput_event_get_touch_event(ev));
+ break;
+ case LIBINPUT_EVENT_TOUCH_CANCEL:
+ m_touch->processTouchCancel(libinput_event_get_touch_event(ev));
+ break;
+ case LIBINPUT_EVENT_TOUCH_FRAME:
+ m_touch->processTouchFrame(libinput_event_get_touch_event(ev));
+ break;
+ default:
+ break;
+ }
+}
+
+QT_END_NAMESPACE
diff --git a/src/platformsupport/input/libinput/qlibinputhandler_p.h b/src/platformsupport/input/libinput/qlibinputhandler_p.h
new file mode 100644
index 0000000000..a1cfaca3ce
--- /dev/null
+++ b/src/platformsupport/input/libinput/qlibinputhandler_p.h
@@ -0,0 +1,91 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QLIBINPUTHANDLER_P_H
+#define QLIBINPUTHANDLER_P_H
+
+#include <QtCore/QObject>
+#include <QtCore/QScopedPointer>
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+struct udev;
+struct libinput;
+struct libinput_event;
+
+QT_BEGIN_NAMESPACE
+
+class QSocketNotifier;
+class QLibInputPointer;
+class QLibInputKeyboard;
+class QLibInputTouch;
+
+class QLibInputHandler : public QObject
+{
+ Q_OBJECT
+
+public:
+ QLibInputHandler(const QString &key, const QString &spec);
+ ~QLibInputHandler();
+
+signals:
+ void deviceAdded(const QString &sysname, const QString &name);
+ void deviceRemoved(const QString &sysname, const QString &name);
+
+private slots:
+ void onReadyRead();
+
+private:
+ void processEvent(libinput_event *ev);
+
+ udev *m_udev;
+ libinput *m_li;
+ int m_liFd;
+ QScopedPointer<QSocketNotifier> m_notifier;
+ QScopedPointer<QLibInputPointer> m_pointer;
+ QScopedPointer<QLibInputKeyboard> m_keyboard;
+ QScopedPointer<QLibInputTouch> m_touch;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/platformsupport/input/libinput/qlibinputkeyboard.cpp b/src/platformsupport/input/libinput/qlibinputkeyboard.cpp
new file mode 100644
index 0000000000..41c849e8a5
--- /dev/null
+++ b/src/platformsupport/input/libinput/qlibinputkeyboard.cpp
@@ -0,0 +1,279 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qlibinputkeyboard_p.h"
+#include <QtCore/QTextCodec>
+#include <qpa/qwindowsysteminterface.h>
+#include <libinput.h>
+#ifndef QT_NO_XKBCOMMON_EVDEV
+#include <xkbcommon/xkbcommon-keysyms.h>
+#include <xkbcommon/xkbcommon-names.h>
+#endif
+
+QT_BEGIN_NAMESPACE
+
+const int REPEAT_DELAY = 500;
+const int REPEAT_RATE = 100;
+
+#ifndef QT_NO_XKBCOMMON_EVDEV
+struct KeyTabEntry {
+ int xkbkey;
+ int qtkey;
+};
+
+static inline bool operator==(const KeyTabEntry &a, const KeyTabEntry &b)
+{
+ return a.xkbkey == b.xkbkey;
+}
+
+static const KeyTabEntry keyTab[] = {
+ { XKB_KEY_Escape, Qt::Key_Escape },
+ { XKB_KEY_Tab, Qt::Key_Tab },
+ { XKB_KEY_ISO_Left_Tab, Qt::Key_Backtab },
+ { XKB_KEY_BackSpace, Qt::Key_Backspace },
+ { XKB_KEY_Return, Qt::Key_Return },
+ { XKB_KEY_Insert, Qt::Key_Insert },
+ { XKB_KEY_Delete, Qt::Key_Delete },
+ { XKB_KEY_Clear, Qt::Key_Delete },
+ { XKB_KEY_Pause, Qt::Key_Pause },
+ { XKB_KEY_Print, Qt::Key_Print },
+
+ { XKB_KEY_Home, Qt::Key_Home },
+ { XKB_KEY_End, Qt::Key_End },
+ { XKB_KEY_Left, Qt::Key_Left },
+ { XKB_KEY_Up, Qt::Key_Up },
+ { XKB_KEY_Right, Qt::Key_Right },
+ { XKB_KEY_Down, Qt::Key_Down },
+ { XKB_KEY_Prior, Qt::Key_PageUp },
+ { XKB_KEY_Next, Qt::Key_PageDown },
+
+ { XKB_KEY_Shift_L, Qt::Key_Shift },
+ { XKB_KEY_Shift_R, Qt::Key_Shift },
+ { XKB_KEY_Shift_Lock, Qt::Key_Shift },
+ { XKB_KEY_Control_L, Qt::Key_Control },
+ { XKB_KEY_Control_R, Qt::Key_Control },
+ { XKB_KEY_Meta_L, Qt::Key_Meta },
+ { XKB_KEY_Meta_R, Qt::Key_Meta },
+ { XKB_KEY_Alt_L, Qt::Key_Alt },
+ { XKB_KEY_Alt_R, Qt::Key_Alt },
+ { XKB_KEY_Caps_Lock, Qt::Key_CapsLock },
+ { XKB_KEY_Num_Lock, Qt::Key_NumLock },
+ { XKB_KEY_Scroll_Lock, Qt::Key_ScrollLock },
+ { XKB_KEY_Super_L, Qt::Key_Super_L },
+ { XKB_KEY_Super_R, Qt::Key_Super_R },
+ { XKB_KEY_Menu, Qt::Key_Menu },
+ { XKB_KEY_Hyper_L, Qt::Key_Hyper_L },
+ { XKB_KEY_Hyper_R, Qt::Key_Hyper_R },
+ { XKB_KEY_Help, Qt::Key_Help },
+
+ { XKB_KEY_KP_Space, Qt::Key_Space },
+ { XKB_KEY_KP_Tab, Qt::Key_Tab },
+ { XKB_KEY_KP_Enter, Qt::Key_Enter },
+ { XKB_KEY_KP_Home, Qt::Key_Home },
+ { XKB_KEY_KP_Left, Qt::Key_Left },
+ { XKB_KEY_KP_Up, Qt::Key_Up },
+ { XKB_KEY_KP_Right, Qt::Key_Right },
+ { XKB_KEY_KP_Down, Qt::Key_Down },
+ { XKB_KEY_KP_Prior, Qt::Key_PageUp },
+ { XKB_KEY_KP_Next, Qt::Key_PageDown },
+ { XKB_KEY_KP_End, Qt::Key_End },
+ { XKB_KEY_KP_Begin, Qt::Key_Clear },
+ { XKB_KEY_KP_Insert, Qt::Key_Insert },
+ { XKB_KEY_KP_Delete, Qt::Key_Delete },
+ { XKB_KEY_KP_Equal, Qt::Key_Equal },
+ { XKB_KEY_KP_Multiply, Qt::Key_Asterisk },
+ { XKB_KEY_KP_Add, Qt::Key_Plus },
+ { XKB_KEY_KP_Separator, Qt::Key_Comma },
+ { XKB_KEY_KP_Subtract, Qt::Key_Minus },
+ { XKB_KEY_KP_Decimal, Qt::Key_Period },
+ { XKB_KEY_KP_Divide, Qt::Key_Slash },
+};
+#endif
+
+QLibInputKeyboard::QLibInputKeyboard()
+#ifndef QT_NO_XKBCOMMON_EVDEV
+ : m_ctx(0),
+ m_keymap(0),
+ m_state(0)
+#endif
+{
+#ifndef QT_NO_XKBCOMMON_EVDEV
+ m_ctx = xkb_context_new(XKB_CONTEXT_NO_FLAGS);
+ if (!m_ctx) {
+ qWarning("Failed to create xkb context");
+ return;
+ }
+ m_keymap = xkb_keymap_new_from_names(m_ctx, Q_NULLPTR, XKB_KEYMAP_COMPILE_NO_FLAGS);
+ if (!m_keymap) {
+ qWarning("Failed to compile keymap");
+ return;
+ }
+ m_state = xkb_state_new(m_keymap);
+ if (!m_state) {
+ qWarning("Failed to create xkb state");
+ return;
+ }
+ m_modindex[0] = xkb_keymap_mod_get_index(m_keymap, XKB_MOD_NAME_CTRL);
+ m_modindex[1] = xkb_keymap_mod_get_index(m_keymap, XKB_MOD_NAME_ALT);
+ m_modindex[2] = xkb_keymap_mod_get_index(m_keymap, XKB_MOD_NAME_SHIFT);
+ m_modindex[3] = xkb_keymap_mod_get_index(m_keymap, XKB_MOD_NAME_LOGO);
+
+ m_repeatTimer.setSingleShot(true);
+ connect(&m_repeatTimer, &QTimer::timeout, this, &QLibInputKeyboard::handleRepeat);
+#endif
+}
+
+QLibInputKeyboard::~QLibInputKeyboard()
+{
+#ifndef QT_NO_XKBCOMMON_EVDEV
+ if (m_state)
+ xkb_state_unref(m_state);
+ if (m_keymap)
+ xkb_keymap_unref(m_keymap);
+ if (m_ctx)
+ xkb_context_unref(m_ctx);
+#endif
+}
+
+void QLibInputKeyboard::processKey(libinput_event_keyboard *e)
+{
+#ifndef QT_NO_XKBCOMMON_EVDEV
+ if (!m_ctx || !m_keymap || !m_state)
+ return;
+
+ const uint32_t k = libinput_event_keyboard_get_key(e) + 8;
+ const bool pressed = libinput_event_keyboard_get_key_state(e) == LIBINPUT_KEY_STATE_PRESSED;
+
+ QByteArray chars;
+ chars.resize(1 + xkb_state_key_get_utf8(m_state, k, Q_NULLPTR, 0));
+ xkb_state_key_get_utf8(m_state, k, chars.data(), chars.size());
+ const QString text = QString::fromUtf8(chars);
+
+ const xkb_keysym_t sym = xkb_state_key_get_one_sym(m_state, k);
+
+ Qt::KeyboardModifiers mods = Qt::NoModifier;
+ const int qtkey = keysymToQtKey(sym, &mods, text);
+
+ xkb_state_component modtype = xkb_state_component(XKB_STATE_MODS_DEPRESSED | XKB_STATE_MODS_LATCHED);
+ if (xkb_state_mod_index_is_active(m_state, m_modindex[0], modtype) && (qtkey != Qt::Key_Control || !pressed))
+ mods |= Qt::ControlModifier;
+ if (xkb_state_mod_index_is_active(m_state, m_modindex[1], modtype) && (qtkey != Qt::Key_Alt || !pressed))
+ mods |= Qt::AltModifier;
+ if (xkb_state_mod_index_is_active(m_state, m_modindex[2], modtype) && (qtkey != Qt::Key_Shift || !pressed))
+ mods |= Qt::ShiftModifier;
+ if (xkb_state_mod_index_is_active(m_state, m_modindex[3], modtype) && (qtkey != Qt::Key_Meta || !pressed))
+ mods |= Qt::MetaModifier;
+
+ xkb_state_update_key(m_state, k, pressed ? XKB_KEY_DOWN : XKB_KEY_UP);
+
+ QWindowSystemInterface::handleExtendedKeyEvent(Q_NULLPTR,
+ pressed ? QEvent::KeyPress : QEvent::KeyRelease,
+ qtkey, mods, k, sym, mods, text);
+
+ if (pressed && xkb_keymap_key_repeats(m_keymap, k)) {
+ m_repeatData.qtkey = qtkey;
+ m_repeatData.mods = mods;
+ m_repeatData.nativeScanCode = k;
+ m_repeatData.virtualKey = sym;
+ m_repeatData.nativeMods = mods;
+ m_repeatData.unicodeText = text;
+ m_repeatData.repeatCount = 1;
+ m_repeatTimer.setInterval(REPEAT_DELAY);
+ m_repeatTimer.start();
+ } else if (m_repeatTimer.isActive()) {
+ m_repeatTimer.stop();
+ }
+
+#else
+ Q_UNUSED(e);
+#endif
+}
+
+#ifndef QT_NO_XKBCOMMON_EVDEV
+void QLibInputKeyboard::handleRepeat()
+{
+ QWindowSystemInterface::handleExtendedKeyEvent(Q_NULLPTR, QEvent::KeyPress,
+ m_repeatData.qtkey, m_repeatData.mods,
+ m_repeatData.nativeScanCode, m_repeatData.virtualKey, m_repeatData.nativeMods,
+ m_repeatData.unicodeText, true, m_repeatData.repeatCount);
+ m_repeatData.repeatCount += 1;
+ m_repeatTimer.setInterval(REPEAT_RATE);
+ m_repeatTimer.start();
+}
+
+int QLibInputKeyboard::keysymToQtKey(xkb_keysym_t key) const
+{
+ const size_t elemCount = sizeof(keyTab) / sizeof(KeyTabEntry);
+ KeyTabEntry e;
+ e.xkbkey = key;
+ const KeyTabEntry *result = std::find(keyTab, keyTab + elemCount, e);
+ return result != keyTab + elemCount ? result->qtkey : 0;
+}
+
+int QLibInputKeyboard::keysymToQtKey(xkb_keysym_t keysym, Qt::KeyboardModifiers *modifiers, const QString &text) const
+{
+ int code = 0;
+#ifndef QT_NO_TEXTCODEC
+ QTextCodec *systemCodec = QTextCodec::codecForLocale();
+#endif
+ if (keysym < 128 || (keysym < 256
+#ifndef QT_NO_TEXTCODEC
+ && systemCodec->mibEnum() == 4
+#endif
+ )) {
+ // upper-case key, if known
+ code = isprint((int)keysym) ? toupper((int)keysym) : 0;
+ } else if (keysym >= XKB_KEY_F1 && keysym <= XKB_KEY_F35) {
+ // function keys
+ code = Qt::Key_F1 + ((int)keysym - XKB_KEY_F1);
+ } else if (keysym >= XKB_KEY_KP_Space && keysym <= XKB_KEY_KP_9) {
+ if (keysym >= XKB_KEY_KP_0) {
+ // numeric keypad keys
+ code = Qt::Key_0 + ((int)keysym - XKB_KEY_KP_0);
+ } else {
+ code = keysymToQtKey(keysym);
+ }
+ *modifiers |= Qt::KeypadModifier;
+ } else if (text.length() == 1 && text.unicode()->unicode() > 0x1f
+ && text.unicode()->unicode() != 0x7f
+ && !(keysym >= XKB_KEY_dead_grave && keysym <= XKB_KEY_dead_currency)) {
+ code = text.unicode()->toUpper().unicode();
+ } else {
+ // any other keys
+ code = keysymToQtKey(keysym);
+ }
+ return code;
+}
+#endif
+
+QT_END_NAMESPACE
diff --git a/src/platformsupport/input/libinput/qlibinputkeyboard_p.h b/src/platformsupport/input/libinput/qlibinputkeyboard_p.h
new file mode 100644
index 0000000000..bcd4d23d98
--- /dev/null
+++ b/src/platformsupport/input/libinput/qlibinputkeyboard_p.h
@@ -0,0 +1,98 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QLIBINPUTKEYBOARD_P_H
+#define QLIBINPUTKEYBOARD_P_H
+
+#include <QtCore/QPoint>
+#include <QtCore/QTimer>
+
+#ifndef QT_NO_XKBCOMMON_EVDEV
+#include <xkbcommon/xkbcommon.h>
+#endif
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+struct libinput_event_keyboard;
+
+QT_BEGIN_NAMESPACE
+
+class QLibInputKeyboard : public QObject
+{
+ Q_OBJECT
+
+public:
+ QLibInputKeyboard();
+ ~QLibInputKeyboard();
+
+ void processKey(libinput_event_keyboard *e);
+
+#ifndef QT_NO_XKBCOMMON_EVDEV
+private slots:
+ void handleRepeat();
+
+private:
+ int keysymToQtKey(xkb_keysym_t key) const;
+ int keysymToQtKey(xkb_keysym_t keysym, Qt::KeyboardModifiers *modifiers, const QString &text) const;
+
+ xkb_context *m_ctx;
+ xkb_keymap *m_keymap;
+ xkb_state *m_state;
+ xkb_mod_index_t m_modindex[4];
+
+ QTimer m_repeatTimer;
+
+ struct {
+ int qtkey;
+ Qt::KeyboardModifiers mods;
+ int nativeScanCode;
+ int virtualKey;
+ int nativeMods;
+ QString unicodeText;
+ int repeatCount;
+ } m_repeatData;
+#endif
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/platformsupport/input/libinput/qlibinputpointer.cpp b/src/platformsupport/input/libinput/qlibinputpointer.cpp
new file mode 100644
index 0000000000..28e5529b3c
--- /dev/null
+++ b/src/platformsupport/input/libinput/qlibinputpointer.cpp
@@ -0,0 +1,101 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qlibinputpointer_p.h"
+#include <libinput.h>
+#include <QtGui/QGuiApplication>
+#include <QtGui/QScreen>
+#include <qpa/qwindowsysteminterface.h>
+
+QT_BEGIN_NAMESPACE
+
+QLibInputPointer::QLibInputPointer()
+ : m_buttons(Qt::NoButton)
+{
+}
+
+void QLibInputPointer::processButton(libinput_event_pointer *e)
+{
+ const uint32_t b = libinput_event_pointer_get_button(e);
+ const bool pressed = libinput_event_pointer_get_button_state(e) == LIBINPUT_BUTTON_STATE_PRESSED;
+
+ Qt::MouseButton button = Qt::NoButton;
+ switch (b) {
+ case 0x110: button = Qt::LeftButton; break; // BTN_LEFT
+ case 0x111: button = Qt::RightButton; break;
+ case 0x112: button = Qt::MiddleButton; break;
+ case 0x113: button = Qt::ExtraButton1; break; // AKA Qt::BackButton
+ case 0x114: button = Qt::ExtraButton2; break; // AKA Qt::ForwardButton
+ case 0x115: button = Qt::ExtraButton3; break; // AKA Qt::TaskButton
+ case 0x116: button = Qt::ExtraButton4; break;
+ case 0x117: button = Qt::ExtraButton5; break;
+ case 0x118: button = Qt::ExtraButton6; break;
+ case 0x119: button = Qt::ExtraButton7; break;
+ case 0x11a: button = Qt::ExtraButton8; break;
+ case 0x11b: button = Qt::ExtraButton9; break;
+ case 0x11c: button = Qt::ExtraButton10; break;
+ case 0x11d: button = Qt::ExtraButton11; break;
+ case 0x11e: button = Qt::ExtraButton12; break;
+ case 0x11f: button = Qt::ExtraButton13; break;
+ }
+
+ if (pressed)
+ m_buttons |= button;
+ else
+ m_buttons &= ~button;
+
+ QWindowSystemInterface::handleMouseEvent(Q_NULLPTR, m_pos, m_pos, m_buttons, QGuiApplication::keyboardModifiers());
+}
+
+void QLibInputPointer::processMotion(libinput_event_pointer *e)
+{
+ const double dx = libinput_event_pointer_get_dx(e);
+ const double dy = libinput_event_pointer_get_dy(e);
+ const QRect g = QGuiApplication::primaryScreen()->virtualGeometry();
+
+ m_pos.setX(qBound(g.left(), qRound(m_pos.x() + dx), g.right()));
+ m_pos.setY(qBound(g.top(), qRound(m_pos.y() + dy), g.bottom()));
+
+ QWindowSystemInterface::handleMouseEvent(Q_NULLPTR, m_pos, m_pos, m_buttons, QGuiApplication::keyboardModifiers());
+}
+
+void QLibInputPointer::processAxis(libinput_event_pointer *e)
+{
+ const double v = libinput_event_pointer_get_axis_value(e) * 120;
+ const Qt::Orientation ori = libinput_event_pointer_get_axis(e) == LIBINPUT_POINTER_AXIS_SCROLL_VERTICAL
+ ? Qt::Vertical : Qt::Horizontal;
+
+ QWindowSystemInterface::handleWheelEvent(Q_NULLPTR, m_pos, m_pos, qRound(-v), ori, QGuiApplication::keyboardModifiers());
+}
+
+QT_END_NAMESPACE
diff --git a/src/platformsupport/eglconvenience/qeglcompositor_p.h b/src/platformsupport/input/libinput/qlibinputpointer_p.h
index 1401fbdd55..efc19ab4fd 100644
--- a/src/platformsupport/eglconvenience/qeglcompositor_p.h
+++ b/src/platformsupport/input/libinput/qlibinputpointer_p.h
@@ -3,7 +3,7 @@
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
-** This file is part of the plugins of the Qt Toolkit.
+** This file is part of the plugins module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL21$
** Commercial License Usage
@@ -31,8 +31,10 @@
**
****************************************************************************/
-#ifndef QEGLCOMPOSITOR_H
-#define QEGLCOMPOSITOR_H
+#ifndef QLIBINPUTPOINTER_P_H
+#define QLIBINPUTPOINTER_P_H
+
+#include <QtCore/QPoint>
//
// W A R N I N G
@@ -45,39 +47,24 @@
// We mean it.
//
-#include <QtCore/QTimer>
+struct libinput_event_pointer;
QT_BEGIN_NAMESPACE
-class QOpenGLContext;
-class QOpenGLTextureBlitter;
-class QEGLPlatformWindow;
-
-class QEGLCompositor : public QObject
+class QLibInputPointer
{
- Q_OBJECT
-
public:
- void schedule(QOpenGLContext *context, QEGLPlatformWindow *window);
+ QLibInputPointer();
- static QEGLCompositor *instance();
- static void destroy();
-
-private slots:
- void renderAll();
+ void processButton(libinput_event_pointer *e);
+ void processMotion(libinput_event_pointer *e);
+ void processAxis(libinput_event_pointer *e);
private:
- QEGLCompositor();
- ~QEGLCompositor();
-
- void render(QEGLPlatformWindow *window);
-
- QOpenGLContext *m_context;
- QEGLPlatformWindow *m_window;
- QTimer m_updateTimer;
- QOpenGLTextureBlitter *m_blitter;
+ QPoint m_pos;
+ Qt::MouseButtons m_buttons;
};
QT_END_NAMESPACE
-#endif // QEGLCOMPOSITOR_H
+#endif
diff --git a/src/platformsupport/input/libinput/qlibinputtouch.cpp b/src/platformsupport/input/libinput/qlibinputtouch.cpp
new file mode 100644
index 0000000000..ed453a6a9a
--- /dev/null
+++ b/src/platformsupport/input/libinput/qlibinputtouch.cpp
@@ -0,0 +1,165 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qlibinputtouch_p.h"
+#include <libinput.h>
+#include <QtGui/QGuiApplication>
+#include <QtGui/QScreen>
+
+QT_BEGIN_NAMESPACE
+
+QWindowSystemInterface::TouchPoint *QLibInputTouch::DeviceState::point(int32_t slot)
+{
+ const int id = qMax(0, slot);
+
+ for (int i = 0; i < m_points.count(); ++i)
+ if (m_points.at(i).id == id)
+ return &m_points[i];
+
+ return Q_NULLPTR;
+}
+
+QLibInputTouch::DeviceState *QLibInputTouch::deviceState(libinput_event_touch *e)
+{
+ libinput_device *dev = libinput_event_get_device(libinput_event_touch_get_base_event(e));
+ return &m_devState[dev];
+}
+
+static inline QPointF getPos(libinput_event_touch *e)
+{
+ const QSize screenSize = QGuiApplication::primaryScreen()->geometry().size();
+ const double x = libinput_event_touch_get_x_transformed(e, screenSize.width());
+ const double y = libinput_event_touch_get_y_transformed(e, screenSize.height());
+ return QPointF(x, y);
+}
+
+void QLibInputTouch::registerDevice(libinput_device *dev)
+{
+ QTouchDevice *&td = m_devState[dev].m_touchDevice;
+ td = new QTouchDevice;
+ td->setName(QString::fromUtf8(libinput_device_get_name(dev)));
+ td->setType(QTouchDevice::TouchScreen);
+ td->setCapabilities(QTouchDevice::Position | QTouchDevice::Area);
+ QWindowSystemInterface::registerTouchDevice(td);
+}
+
+void QLibInputTouch::unregisterDevice(libinput_device *dev)
+{
+ Q_UNUSED(dev);
+ // There is no way to remove a QTouchDevice.
+}
+
+void QLibInputTouch::processTouchDown(libinput_event_touch *e)
+{
+ int slot = libinput_event_touch_get_slot(e);
+ DeviceState *state = deviceState(e);
+ QWindowSystemInterface::TouchPoint *tp = state->point(slot);
+ if (tp) {
+ qWarning("Incorrect touch state");
+ } else {
+ QWindowSystemInterface::TouchPoint newTp;
+ newTp.id = qMax(0, slot);
+ newTp.state = Qt::TouchPointPressed;
+ newTp.area = QRect(0, 0, 8, 8);
+ newTp.area.moveCenter(getPos(e));
+ state->m_points.append(newTp);
+ }
+}
+
+void QLibInputTouch::processTouchMotion(libinput_event_touch *e)
+{
+ int slot = libinput_event_touch_get_slot(e);
+ DeviceState *state = deviceState(e);
+ QWindowSystemInterface::TouchPoint *tp = state->point(slot);
+ if (tp) {
+ const QPointF p = getPos(e);
+ if (tp->area.center() != p) {
+ tp->area.moveCenter(p);
+ // 'down' may be followed by 'motion' within the same "frame".
+ // Handle this by compressing and keeping the Pressed state until the 'frame'.
+ if (tp->state != Qt::TouchPointPressed)
+ tp->state = Qt::TouchPointMoved;
+ } else {
+ tp->state = Qt::TouchPointStationary;
+ }
+ } else {
+ qWarning("Inconsistent touch state (got 'motion' without 'down')");
+ }
+}
+
+void QLibInputTouch::processTouchUp(libinput_event_touch *e)
+{
+ int slot = libinput_event_touch_get_slot(e);
+ DeviceState *state = deviceState(e);
+ QWindowSystemInterface::TouchPoint *tp = state->point(slot);
+ if (tp) {
+ tp->state = Qt::TouchPointReleased;
+ // There may not be a Frame event after the last Up. Work this around.
+ Qt::TouchPointStates s = 0;
+ for (int i = 0; i < state->m_points.count(); ++i)
+ s |= state->m_points.at(i).state;
+ if (s == Qt::TouchPointReleased)
+ processTouchFrame(e);
+ } else {
+ qWarning("Inconsistent touch state (got 'up' without 'down')");
+ }
+}
+
+void QLibInputTouch::processTouchCancel(libinput_event_touch *e)
+{
+ DeviceState *state = deviceState(e);
+ if (state->m_touchDevice)
+ QWindowSystemInterface::handleTouchCancelEvent(Q_NULLPTR, state->m_touchDevice, QGuiApplication::keyboardModifiers());
+ else
+ qWarning("TouchCancel without registered device");
+}
+
+void QLibInputTouch::processTouchFrame(libinput_event_touch *e)
+{
+ DeviceState *state = deviceState(e);
+ if (state->m_touchDevice && !state->m_points.isEmpty()) {
+ QWindowSystemInterface::handleTouchEvent(Q_NULLPTR, state->m_touchDevice, state->m_points,
+ QGuiApplication::keyboardModifiers());
+ for (int i = 0; i < state->m_points.count(); ++i) {
+ QWindowSystemInterface::TouchPoint &tp(state->m_points[i]);
+ if (tp.state == Qt::TouchPointReleased)
+ state->m_points.removeAt(i--);
+ else if (tp.state == Qt::TouchPointPressed)
+ tp.state = Qt::TouchPointStationary;
+ }
+ } else {
+ qWarning("TouchFrame without registered device");
+ }
+}
+
+QT_END_NAMESPACE
diff --git a/src/platformsupport/input/libinput/qlibinputtouch_p.h b/src/platformsupport/input/libinput/qlibinputtouch_p.h
new file mode 100644
index 0000000000..dceea5600c
--- /dev/null
+++ b/src/platformsupport/input/libinput/qlibinputtouch_p.h
@@ -0,0 +1,83 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QLIBINPUTTOUCH_P_H
+#define QLIBINPUTTOUCH_P_H
+
+#include <QtCore/QHash>
+#include <QtCore/QList>
+#include <qpa/qwindowsysteminterface.h>
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+struct libinput_event_touch;
+struct libinput_device;
+
+QT_BEGIN_NAMESPACE
+
+class QLibInputTouch
+{
+public:
+ void registerDevice(libinput_device *dev);
+ void unregisterDevice(libinput_device *dev);
+ void processTouchDown(libinput_event_touch *e);
+ void processTouchMotion(libinput_event_touch *e);
+ void processTouchUp(libinput_event_touch *e);
+ void processTouchCancel(libinput_event_touch *e);
+ void processTouchFrame(libinput_event_touch *e);
+
+private:
+ struct DeviceState {
+ DeviceState() : m_touchDevice(0) { }
+ QWindowSystemInterface::TouchPoint *point(int32_t slot);
+ QList<QWindowSystemInterface::TouchPoint> m_points;
+ QTouchDevice *m_touchDevice;
+ };
+
+ DeviceState *deviceState(libinput_event_touch *e);
+
+ QHash<libinput_device *, DeviceState> m_devState;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/generic/tslib/qtslib.cpp b/src/platformsupport/input/tslib/qtslib.cpp
index a8f60b69ff..e75fd9e691 100644
--- a/src/plugins/generic/tslib/qtslib.cpp
+++ b/src/platformsupport/input/tslib/qtslib.cpp
@@ -3,7 +3,7 @@
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
-** This file is part of the QtGui module of the Qt Toolkit.
+** This file is part of the plugins module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL21$
** Commercial License Usage
@@ -31,32 +31,34 @@
**
****************************************************************************/
-
-#include "qtslib.h"
-
+#include "qtslib_p.h"
#include <QSocketNotifier>
#include <QStringList>
#include <QPoint>
+#include <QLoggingCategory>
+
#include <qpa/qwindowsysteminterface.h>
#include <errno.h>
#include <tslib.h>
-#include <qdebug.h>
-
QT_BEGIN_NAMESPACE
+Q_LOGGING_CATEGORY(qLcTsLib, "qt.qpa.input")
+
QTsLibMouseHandler::QTsLibMouseHandler(const QString &key,
- const QString &specification)
- : m_notify(0), m_x(0), m_y(0), m_pressed(0), m_rawMode(false)
+ const QString &specification,
+ QObject *parent)
+ : QObject(parent),
+ m_notify(0), m_x(0), m_y(0), m_pressed(0), m_rawMode(false)
{
- qDebug() << "QTsLibMouseHandler" << key << specification;
+ qCDebug(qLcTsLib) << "Initializing tslib plugin" << key << specification;
setObjectName(QLatin1String("TSLib Mouse Handler"));
QByteArray device = qgetenv("TSLIB_TSDEVICE");
- if (specification.startsWith("/dev/"))
+ if (specification.startsWith(QStringLiteral("/dev/")))
device = specification.toLocal8Bit();
if (device.isEmpty())
@@ -69,27 +71,26 @@ QTsLibMouseHandler::QTsLibMouseHandler(const QString &key,
}
if (ts_config(m_dev))
- perror("Error configuring\n");
+ qErrnoWarning(errno, "ts_config() failed");
- m_rawMode = !key.compare(QLatin1String("TslibRaw"), Qt::CaseInsensitive);
+ m_rawMode = !key.compare(QLatin1String("TslibRaw"), Qt::CaseInsensitive);
int fd = ts_fd(m_dev);
if (fd >= 0) {
+ qCDebug(qLcTsLib) << "tslib device is" << device;
m_notify = new QSocketNotifier(fd, QSocketNotifier::Read, this);
connect(m_notify, SIGNAL(activated(int)), this, SLOT(readMouseData()));
} else {
- qWarning("Cannot open mouse input device '%s': %s", device.constData(), strerror(errno));
+ qErrnoWarning(errno, "tslib: Cannot open input device %s", device.constData());
}
}
-
QTsLibMouseHandler::~QTsLibMouseHandler()
{
if (m_dev)
ts_close(m_dev);
}
-
static bool get_sample(struct tsdev *dev, struct ts_sample *sample, bool rawMode)
{
if (rawMode)
@@ -98,7 +99,6 @@ static bool get_sample(struct tsdev *dev, struct ts_sample *sample, bool rawMode
return (ts_read(dev, sample, 1) == 1);
}
-
void QTsLibMouseHandler::readMouseData()
{
ts_sample sample;
@@ -123,8 +123,6 @@ void QTsLibMouseHandler::readMouseData()
}
QPoint pos(x, y);
- //printf("handleMouseEvent %d %d %d %ld\n", m_x, m_y, pressed, sample.tv.tv_usec);
-
QWindowSystemInterface::handleMouseEvent(0, pos, pos, pressed ? Qt::LeftButton : Qt::NoButton);
m_x = x;
diff --git a/src/plugins/generic/tslib/qtslib.h b/src/platformsupport/input/tslib/qtslib_p.h
index cd11ca5e2f..4bcefb6cb9 100644
--- a/src/plugins/generic/tslib/qtslib.h
+++ b/src/platformsupport/input/tslib/qtslib_p.h
@@ -3,7 +3,7 @@
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
-** This file is part of the QtGui module of the Qt Toolkit.
+** This file is part of the plugins module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL21$
** Commercial License Usage
@@ -34,19 +34,20 @@
#ifndef QTSLIB_H
#define QTSLIB_H
-#include <qobject.h>
-//#include <Qt>
+#include <QObject>
+
+struct tsdev;
QT_BEGIN_NAMESPACE
class QSocketNotifier;
-struct tsdev;
class QTsLibMouseHandler : public QObject
{
Q_OBJECT
+
public:
- QTsLibMouseHandler(const QString &key, const QString &specification);
+ QTsLibMouseHandler(const QString &key, const QString &specification, QObject *parent = 0);
~QTsLibMouseHandler();
private slots:
diff --git a/src/platformsupport/input/tslib/tslib.pri b/src/platformsupport/input/tslib/tslib.pri
new file mode 100644
index 0000000000..c9fef1ca8f
--- /dev/null
+++ b/src/platformsupport/input/tslib/tslib.pri
@@ -0,0 +1,7 @@
+HEADERS += \
+ $$PWD/qtslib_p.h
+
+SOURCES += \
+ $$PWD/qtslib.cpp
+
+LIBS += -lts
diff --git a/src/platformsupport/linuxaccessibility/application.cpp b/src/platformsupport/linuxaccessibility/application.cpp
index 2ee6b0a203..3e7fd45a09 100644
--- a/src/platformsupport/linuxaccessibility/application.cpp
+++ b/src/platformsupport/linuxaccessibility/application.cpp
@@ -38,6 +38,7 @@
#include <QtDBus/qdbuspendingreply.h>
#include <qdebug.h>
+#ifndef QT_NO_ACCESSIBILITY
#include "deviceeventcontroller_adaptor.h"
#include "atspi/atspi-constants.h"
@@ -229,3 +230,5 @@ void QSpiApplicationAdaptor::notifyKeyboardListenerError(const QDBusError& error
}
QT_END_NAMESPACE
+
+#endif //QT_NO_ACCESSIBILITY
diff --git a/src/platformsupport/linuxaccessibility/application_p.h b/src/platformsupport/linuxaccessibility/application_p.h
index d42f6e3ab0..b3e5ebbfde 100644
--- a/src/platformsupport/linuxaccessibility/application_p.h
+++ b/src/platformsupport/linuxaccessibility/application_p.h
@@ -50,6 +50,8 @@
#include <QtDBus/QDBusConnection>
#include <QtGui/QAccessibleInterface>
+#ifndef QT_NO_ACCESSIBILITY
+
QT_BEGIN_NAMESPACE
/*
@@ -86,4 +88,6 @@ private:
QT_END_NAMESPACE
+#endif //QT_NO_ACCESSIBILITY
+
#endif
diff --git a/src/platformsupport/linuxaccessibility/atspiadaptor.cpp b/src/platformsupport/linuxaccessibility/atspiadaptor.cpp
index c3573489e9..7cbda0c745 100644
--- a/src/platformsupport/linuxaccessibility/atspiadaptor.cpp
+++ b/src/platformsupport/linuxaccessibility/atspiadaptor.cpp
@@ -41,6 +41,7 @@
#include <qdebug.h>
+#ifndef QT_NO_ACCESSIBILITY
#include "socket_interface.h"
#include "constant_mappings_p.h"
#include "../accessibility/qaccessiblebridgeutils_p.h"
@@ -2356,3 +2357,4 @@ bool AtSpiAdaptor::tableInterface(QAccessibleInterface *interface, const QString
}
QT_END_NAMESPACE
+#endif //QT_NO_ACCESSIBILITY
diff --git a/src/platformsupport/linuxaccessibility/atspiadaptor_p.h b/src/platformsupport/linuxaccessibility/atspiadaptor_p.h
index fa3f616c91..342d8ba531 100644
--- a/src/platformsupport/linuxaccessibility/atspiadaptor_p.h
+++ b/src/platformsupport/linuxaccessibility/atspiadaptor_p.h
@@ -55,6 +55,7 @@
#include "dbusconnection_p.h"
#include "struct_marshallers_p.h"
+#ifndef QT_NO_ACCESSIBILITY
QT_BEGIN_NAMESPACE
class QAccessibleInterface;
@@ -215,5 +216,6 @@ private:
};
QT_END_NAMESPACE
+#endif //QT_NO_ACCESSIBILITY
#endif
diff --git a/src/platformsupport/linuxaccessibility/bridge.cpp b/src/platformsupport/linuxaccessibility/bridge.cpp
index 6211aa6e5a..4123181da3 100644
--- a/src/platformsupport/linuxaccessibility/bridge.cpp
+++ b/src/platformsupport/linuxaccessibility/bridge.cpp
@@ -44,6 +44,7 @@
#include "dbusconnection_p.h"
#include "struct_marshallers_p.h"
+#ifndef QT_NO_ACCESSIBILITY
#include "deviceeventcontroller_adaptor.h"
QT_BEGIN_NAMESPACE
@@ -264,3 +265,4 @@ void QSpiAccessibleBridge::initializeConstantMappings()
}
QT_END_NAMESPACE
+#endif //QT_NO_ACCESSIBILITY
diff --git a/src/platformsupport/linuxaccessibility/bridge_p.h b/src/platformsupport/linuxaccessibility/bridge_p.h
index 1daaaf92d2..c4bf26b507 100644
--- a/src/platformsupport/linuxaccessibility/bridge_p.h
+++ b/src/platformsupport/linuxaccessibility/bridge_p.h
@@ -51,6 +51,7 @@
class DeviceEventControllerAdaptor;
+#ifndef QT_NO_ACCESSIBILITY
QT_BEGIN_NAMESPACE
class DBusConnection;
@@ -65,7 +66,7 @@ public:
virtual ~QSpiAccessibleBridge();
- virtual void notifyAccessibilityUpdate(QAccessibleEvent *event);
+ virtual void notifyAccessibilityUpdate(QAccessibleEvent *event) Q_DECL_OVERRIDE;
QDBusConnection dBusConnection() const;
public Q_SLOTS:
@@ -82,5 +83,6 @@ private:
};
QT_END_NAMESPACE
+#endif //QT_NO_ACCESSIBILITY
#endif
diff --git a/src/platformsupport/linuxaccessibility/cache.cpp b/src/platformsupport/linuxaccessibility/cache.cpp
index 296858c391..de3d91f0d2 100644
--- a/src/platformsupport/linuxaccessibility/cache.cpp
+++ b/src/platformsupport/linuxaccessibility/cache.cpp
@@ -33,10 +33,11 @@
#include "cache_p.h"
-#include "cache_adaptor.h"
-
#include "bridge_p.h"
+#ifndef QT_NO_ACCESSIBILITY
+#include "cache_adaptor.h"
+
#define QSPI_OBJECT_PATH_CACHE "/org/a11y/atspi/cache"
QT_BEGIN_NAMESPACE
@@ -82,3 +83,4 @@ QSpiAccessibleCacheArray QSpiDBusCache::GetItems()
}
QT_END_NAMESPACE
+#endif //QT_NO_ACCESSIBILITY
diff --git a/src/platformsupport/linuxaccessibility/cache_p.h b/src/platformsupport/linuxaccessibility/cache_p.h
index 300084c493..6fdb813ebf 100644
--- a/src/platformsupport/linuxaccessibility/cache_p.h
+++ b/src/platformsupport/linuxaccessibility/cache_p.h
@@ -49,6 +49,7 @@
#include <QtCore/QObject>
#include "struct_marshallers_p.h"
+#ifndef QT_NO_ACCESSIBILITY
QT_BEGIN_NAMESPACE
class QSpiDBusCache : public QObject
@@ -69,5 +70,6 @@ public Q_SLOTS:
};
QT_END_NAMESPACE
+#endif //QT_NO_ACCESSIBILITY
#endif /* Q_SPI_CACHE_H */
diff --git a/src/platformsupport/linuxaccessibility/constant_mappings.cpp b/src/platformsupport/linuxaccessibility/constant_mappings.cpp
index 78f18124e5..8cfa8086d8 100644
--- a/src/platformsupport/linuxaccessibility/constant_mappings.cpp
+++ b/src/platformsupport/linuxaccessibility/constant_mappings.cpp
@@ -45,6 +45,7 @@
// "ruler" "autocomplete" "edit bar" "embedded component" "entry" "caption"
// "heading" "page" "section" "redundant object" "form" "input method window" "menu"
+#ifndef QT_NO_ACCESSIBILITY
QT_BEGIN_NAMESPACE
QHash <QAccessible::Role, RoleNames> qSpiRoleMapping;
@@ -142,3 +143,4 @@ AtspiRelationType qAccessibleRelationToAtSpiRelation(QAccessible::Relation relat
}
QT_END_NAMESPACE
+#endif //QT_NO_ACCESSIBILITY
diff --git a/src/platformsupport/linuxaccessibility/constant_mappings_p.h b/src/platformsupport/linuxaccessibility/constant_mappings_p.h
index f616b56c3a..da1ebee060 100644
--- a/src/platformsupport/linuxaccessibility/constant_mappings_p.h
+++ b/src/platformsupport/linuxaccessibility/constant_mappings_p.h
@@ -55,6 +55,7 @@
#include <QtGui/QAccessible>
#include <atspi/atspi-constants.h>
+#ifndef QT_NO_ACCESSIBILITY
// interface names from at-spi2-core/atspi/atspi-misc-private.h
#define ATSPI_DBUS_NAME_REGISTRY "org.a11y.atspi.Registry"
@@ -134,5 +135,6 @@ QSpiUIntList spiStateSetFromSpiStates(quint64 states);
AtspiRelationType qAccessibleRelationToAtSpiRelation(QAccessible::Relation relation);
QT_END_NAMESPACE
+#endif //QT_NO_ACCESSIBILITY
#endif /* Q_SPI_CONSTANT_MAPPINGS_H */
diff --git a/src/platformsupport/linuxaccessibility/struct_marshallers.cpp b/src/platformsupport/linuxaccessibility/struct_marshallers.cpp
index 4b3bee8bdb..66fa564a43 100644
--- a/src/platformsupport/linuxaccessibility/struct_marshallers.cpp
+++ b/src/platformsupport/linuxaccessibility/struct_marshallers.cpp
@@ -40,6 +40,7 @@
#include "bridge_p.h"
+#ifndef QT_NO_ACCESSIBILITY
QT_BEGIN_NAMESPACE
QSpiObjectReference::QSpiObjectReference()
@@ -227,3 +228,4 @@ void qSpiInitializeStructTypes()
}
QT_END_NAMESPACE
+#endif //QT_NO_ACCESSIBILITY
diff --git a/src/platformsupport/linuxaccessibility/struct_marshallers_p.h b/src/platformsupport/linuxaccessibility/struct_marshallers_p.h
index 21e2fdefa5..53a3e723b1 100644
--- a/src/platformsupport/linuxaccessibility/struct_marshallers_p.h
+++ b/src/platformsupport/linuxaccessibility/struct_marshallers_p.h
@@ -52,6 +52,7 @@
#include <QtDBus/QDBusConnection>
#include <QtDBus/QDBusObjectPath>
+#ifndef QT_NO_ACCESSIBILITY
QT_BEGIN_NAMESPACE
typedef QList <int> QSpiIntList;
@@ -175,4 +176,5 @@ Q_DECLARE_METATYPE(QSpiAttributeSet)
Q_DECLARE_METATYPE(QSpiAppUpdate)
Q_DECLARE_METATYPE(QSpiDeviceEvent)
+#endif //QT_NO_ACCESSIBILITY
#endif /* Q_SPI_STRUCT_MARSHALLERS_H */
diff --git a/src/platformsupport/platformcompositor/platformcompositor.pri b/src/platformsupport/platformcompositor/platformcompositor.pri
new file mode 100644
index 0000000000..923d7225da
--- /dev/null
+++ b/src/platformsupport/platformcompositor/platformcompositor.pri
@@ -0,0 +1,7 @@
+contains(QT_CONFIG, opengl) {
+ SOURCES += $$PWD/qopenglcompositor.cpp \
+ $$PWD/qopenglcompositorbackingstore.cpp
+
+ HEADERS += $$PWD/qopenglcompositor_p.h \
+ $$PWD/qopenglcompositorbackingstore_p.h
+}
diff --git a/src/platformsupport/eglconvenience/qeglcompositor.cpp b/src/platformsupport/platformcompositor/qopenglcompositor.cpp
index a46e5698de..bcb3f21922 100644
--- a/src/platformsupport/eglconvenience/qeglcompositor.cpp
+++ b/src/platformsupport/platformcompositor/qopenglcompositor.cpp
@@ -32,23 +32,46 @@
****************************************************************************/
#include <QtGui/QOpenGLContext>
-#include <QtGui/QOpenGLShaderProgram>
-#include <QtGui/QOpenGLFramebufferObject>
-#include <QtGui/private/qopengltextureblitter_p.h>
+#include <QtGui/QWindow>
+#include <QtGui/QMatrix4x4>
#include <qpa/qplatformbackingstore.h>
-#include "qeglcompositor_p.h"
-#include "qeglplatformwindow_p.h"
-#include "qeglplatformscreen_p.h"
+#include "qopenglcompositor_p.h"
QT_BEGIN_NAMESPACE
-static QEGLCompositor *compositor = 0;
+/*!
+ \class QOpenGLCompositor
+ \brief A generic OpenGL-based compositor
+ \since 5.4
+ \internal
+ \ingroup qpa
-QEGLCompositor::QEGLCompositor()
+ This class provides a lightweight compositor that maintains the
+ basic stacking order of windows and composites them by drawing
+ textured quads via OpenGL.
+
+ It it meant to be used by platform plugins that run without a
+ windowing system.
+
+ It is up to the platform plugin to manage the lifetime of the
+ compositor (instance(), destroy()), set the correct destination
+ context and window as early as possible (setTargetWindow()),
+ register the composited windows as they are shown, activated,
+ raised and lowered (addWindow(), moveToTop(), etc.), and to
+ schedule repaints (update()).
+
+ \note To get support for QWidget-based windows, just use
+ QOpenGLCompositorBackingStore. It will automatically create
+ textures from the raster-rendered content and trigger the
+ necessary repaints.
+ */
+
+static QOpenGLCompositor *compositor = 0;
+
+QOpenGLCompositor::QOpenGLCompositor()
: m_context(0),
- m_window(0),
- m_blitter(0)
+ m_targetWindow(0)
{
Q_ASSERT(!compositor);
m_updateTimer.setSingleShot(true);
@@ -56,45 +79,51 @@ QEGLCompositor::QEGLCompositor()
connect(&m_updateTimer, SIGNAL(timeout()), SLOT(renderAll()));
}
-QEGLCompositor::~QEGLCompositor()
+QOpenGLCompositor::~QOpenGLCompositor()
{
Q_ASSERT(compositor == this);
- if (m_blitter) {
- m_blitter->destroy();
- delete m_blitter;
- }
+ m_blitter.destroy();
compositor = 0;
}
-void QEGLCompositor::schedule(QOpenGLContext *context, QEGLPlatformWindow *window)
+void QOpenGLCompositor::setTarget(QOpenGLContext *context, QWindow *targetWindow)
{
m_context = context;
- m_window = window;
+ m_targetWindow = targetWindow;
+}
+
+void QOpenGLCompositor::update()
+{
if (!m_updateTimer.isActive())
m_updateTimer.start();
}
-void QEGLCompositor::renderAll()
+void QOpenGLCompositor::renderAll()
{
- Q_ASSERT(m_context && m_window);
- m_context->makeCurrent(m_window->window());
+ Q_ASSERT(m_context && m_targetWindow);
+ m_context->makeCurrent(m_targetWindow);
- if (!m_blitter) {
- m_blitter = new QOpenGLTextureBlitter;
- m_blitter->create();
- }
- m_blitter->bind();
+ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
+
+ const QRect targetWindowRect(QPoint(0, 0), m_targetWindow->geometry().size());
+ glViewport(0, 0, targetWindowRect.width(), targetWindowRect.height());
- QEGLPlatformScreen *screen = static_cast<QEGLPlatformScreen *>(m_window->screen());
- QList<QEGLPlatformWindow *> windows = screen->windows();
- for (int i = 0; i < windows.size(); ++i)
- render(windows.at(i));
+ if (!m_blitter.isCreated())
+ m_blitter.create();
- m_blitter->release();
- m_context->swapBuffers(m_window->window());
+ m_blitter.bind();
- for (int i = 0; i < windows.size(); ++i)
- windows.at(i)->composited();
+ for (int i = 0; i < m_windows.size(); ++i)
+ m_windows.at(i)->beginCompositing();
+
+ for (int i = 0; i < m_windows.size(); ++i)
+ render(m_windows.at(i));
+
+ m_blitter.release();
+ m_context->swapBuffers(m_targetWindow);
+
+ for (int i = 0; i < m_windows.size(); ++i)
+ m_windows.at(i)->endCompositing();
}
struct BlendStateBinder
@@ -120,41 +149,38 @@ struct BlendStateBinder
bool m_blend;
};
-void QEGLCompositor::render(QEGLPlatformWindow *window)
+void QOpenGLCompositor::render(QOpenGLCompositorWindow *window)
{
const QPlatformTextureList *textures = window->textures();
if (!textures)
return;
- const QRect targetWindowRect(QPoint(0, 0), window->screen()->geometry().size());
- glViewport(0, 0, targetWindowRect.width(), targetWindowRect.height());
-
+ const QRect targetWindowRect(QPoint(0, 0), m_targetWindow->geometry().size());
float currentOpacity = 1.0f;
BlendStateBinder blend;
for (int i = 0; i < textures->count(); ++i) {
uint textureId = textures->textureId(i);
- QMatrix4x4 target = QOpenGLTextureBlitter::targetTransform(textures->geometry(i),
- targetWindowRect);
- const float opacity = window->window()->opacity();
+ QMatrix4x4 target = QOpenGLTextureBlitter::targetTransform(textures->geometry(i), targetWindowRect);
+ const float opacity = window->sourceWindow()->opacity();
if (opacity != currentOpacity) {
currentOpacity = opacity;
- m_blitter->setOpacity(currentOpacity);
+ m_blitter.setOpacity(currentOpacity);
}
if (textures->count() > 1 && i == textures->count() - 1) {
// Backingstore for a widget with QOpenGLWidget subwidgets
blend.set(true);
- m_blitter->blit(textureId, target, QOpenGLTextureBlitter::OriginTopLeft);
+ m_blitter.blit(textureId, target, QOpenGLTextureBlitter::OriginTopLeft);
} else if (textures->count() == 1) {
// A regular QWidget window
- const bool translucent = window->window()->requestedFormat().alphaBufferSize() > 0;
+ const bool translucent = window->sourceWindow()->requestedFormat().alphaBufferSize() > 0;
blend.set(translucent);
- m_blitter->blit(textureId, target, QOpenGLTextureBlitter::OriginTopLeft);
+ m_blitter.blit(textureId, target, QOpenGLTextureBlitter::OriginTopLeft);
} else if (!textures->flags(i).testFlag(QPlatformTextureList::StacksOnTop)) {
// Texture from an FBO belonging to a QOpenGLWidget
blend.set(false);
- m_blitter->blit(textureId, target, QOpenGLTextureBlitter::OriginBottomLeft);
+ m_blitter.blit(textureId, target, QOpenGLTextureBlitter::OriginBottomLeft);
}
}
@@ -162,24 +188,56 @@ void QEGLCompositor::render(QEGLPlatformWindow *window)
if (textures->flags(i).testFlag(QPlatformTextureList::StacksOnTop)) {
QMatrix4x4 target = QOpenGLTextureBlitter::targetTransform(textures->geometry(i), targetWindowRect);
blend.set(true);
- m_blitter->blit(textures->textureId(i), target, QOpenGLTextureBlitter::OriginBottomLeft);
+ m_blitter.blit(textures->textureId(i), target, QOpenGLTextureBlitter::OriginBottomLeft);
}
}
- m_blitter->setOpacity(1.0f);
+ m_blitter.setOpacity(1.0f);
}
-QEGLCompositor *QEGLCompositor::instance()
+QOpenGLCompositor *QOpenGLCompositor::instance()
{
if (!compositor)
- compositor = new QEGLCompositor;
+ compositor = new QOpenGLCompositor;
return compositor;
}
-void QEGLCompositor::destroy()
+void QOpenGLCompositor::destroy()
{
delete compositor;
compositor = 0;
}
+void QOpenGLCompositor::addWindow(QOpenGLCompositorWindow *window)
+{
+ if (!m_windows.contains(window)) {
+ m_windows.append(window);
+ emit topWindowChanged(window);
+ }
+}
+
+void QOpenGLCompositor::removeWindow(QOpenGLCompositorWindow *window)
+{
+ m_windows.removeOne(window);
+ if (!m_windows.isEmpty())
+ emit topWindowChanged(m_windows.last());
+}
+
+void QOpenGLCompositor::moveToTop(QOpenGLCompositorWindow *window)
+{
+ m_windows.removeOne(window);
+ m_windows.append(window);
+ emit topWindowChanged(window);
+}
+
+void QOpenGLCompositor::changeWindowIndex(QOpenGLCompositorWindow *window, int newIdx)
+{
+ int idx = m_windows.indexOf(window);
+ if (idx != -1 && idx != newIdx) {
+ m_windows.move(idx, newIdx);
+ if (newIdx == m_windows.size() - 1)
+ emit topWindowChanged(m_windows.last());
+ }
+}
+
QT_END_NAMESPACE
diff --git a/src/platformsupport/platformcompositor/qopenglcompositor_p.h b/src/platformsupport/platformcompositor/qopenglcompositor_p.h
new file mode 100644
index 0000000000..9c876f5af1
--- /dev/null
+++ b/src/platformsupport/platformcompositor/qopenglcompositor_p.h
@@ -0,0 +1,107 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QOPENGLCOMPOSITOR_H
+#define QOPENGLCOMPOSITOR_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <QtCore/QTimer>
+#include <QtGui/private/qopengltextureblitter_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QOpenGLContext;
+class QWindow;
+class QPlatformTextureList;
+
+class QOpenGLCompositorWindow
+{
+public:
+ virtual QWindow *sourceWindow() const = 0;
+ virtual const QPlatformTextureList *textures() const = 0;
+ virtual void beginCompositing() { }
+ virtual void endCompositing() { }
+};
+
+class QOpenGLCompositor : public QObject
+{
+ Q_OBJECT
+
+public:
+ static QOpenGLCompositor *instance();
+ static void destroy();
+
+ void setTarget(QOpenGLContext *context, QWindow *window);
+ QOpenGLContext *context() const { return m_context; }
+ QWindow *targetWindow() const { return m_targetWindow; }
+
+ void update();
+
+ QList<QOpenGLCompositorWindow *> windows() const { return m_windows; }
+ void addWindow(QOpenGLCompositorWindow *window);
+ void removeWindow(QOpenGLCompositorWindow *window);
+ void moveToTop(QOpenGLCompositorWindow *window);
+ void changeWindowIndex(QOpenGLCompositorWindow *window, int newIdx);
+
+signals:
+ void topWindowChanged(QOpenGLCompositorWindow *window);
+
+private slots:
+ void renderAll();
+
+private:
+ QOpenGLCompositor();
+ ~QOpenGLCompositor();
+
+ void render(QOpenGLCompositorWindow *window);
+
+ QOpenGLContext *m_context;
+ QWindow *m_targetWindow;
+ QTimer m_updateTimer;
+ QOpenGLTextureBlitter m_blitter;
+ QList<QOpenGLCompositorWindow *> m_windows;
+};
+
+QT_END_NAMESPACE
+
+#endif // QOPENGLCOMPOSITOR_H
diff --git a/src/platformsupport/eglconvenience/qeglplatformbackingstore.cpp b/src/platformsupport/platformcompositor/qopenglcompositorbackingstore.cpp
index d7d95ea97d..774743c674 100644
--- a/src/platformsupport/eglconvenience/qeglplatformbackingstore.cpp
+++ b/src/platformsupport/platformcompositor/qopenglcompositorbackingstore.cpp
@@ -31,62 +31,58 @@
**
****************************************************************************/
-#include <QtGui/QOpenGLShaderProgram>
#include <QtGui/QOpenGLContext>
+#include <QtGui/QWindow>
#include <QtGui/QPainter>
+#include <qpa/qplatformbackingstore.h>
-#include "qeglplatformbackingstore_p.h"
-#include "qeglcompositor_p.h"
-#include "qeglplatformwindow_p.h"
-#include "qeglplatformscreen_p.h"
+#include "qopenglcompositorbackingstore_p.h"
+#include "qopenglcompositor_p.h"
QT_BEGIN_NAMESPACE
/*!
- \class QEGLPlatformBackingStore
- \brief A backing store implementation for EGL and GLES.
- \since 5.2
+ \class QOpenGLCompositorBackingStore
+ \brief A backing store implementation for OpenGL
+ \since 5.4
\internal
\ingroup qpa
This implementation uploads raster-rendered widget windows into
- textures and composites them onto a single native window using
- QEGLCompositor. This means that multiple top-level widgets are
- supported without creating actual native windows for each of them.
-
- The class is ready to be used as-is, the default
- QEGLPlatformIntegration::createPlatformBackingStore()
- implementation creates an instance which is ready to be used
- without further customization.
-
- If QEGLCompositor is not suitable, this backing store
- implementation can also be used without it. In this case a
- subclass must reimplement composite() and schedule an update in
- its custom compositor when this function is called. The textures
- are accessible via QEGLPlatformWindow::texture().
+ textures. It is meant to be used with QOpenGLCompositor that
+ composites the textures onto a single native window using OpenGL.
+ This means that multiple top-level widgets are supported without
+ creating actual native windows for each of them.
+
+ \note It is important to call notifyComposited() from the
+ corresponding platform window's endCompositing() callback
+ (inherited from QOpenGLCompositorWindow).
+
+ \note When implementing QOpenGLCompositorWindow::textures() for
+ windows of type RasterSurface or RasterGLSurface, simply return
+ the list provided by this class' textures().
*/
-QEGLPlatformBackingStore::QEGLPlatformBackingStore(QWindow *window)
+QOpenGLCompositorBackingStore::QOpenGLCompositorBackingStore(QWindow *window)
: QPlatformBackingStore(window),
- m_window(static_cast<QEGLPlatformWindow *>(window->handle())),
+ m_window(window),
m_bsTexture(0),
m_textures(new QPlatformTextureList),
m_lockedWidgetTextures(0)
{
- m_window->setBackingStore(this);
}
-QEGLPlatformBackingStore::~QEGLPlatformBackingStore()
+QOpenGLCompositorBackingStore::~QOpenGLCompositorBackingStore()
{
delete m_textures;
}
-QPaintDevice *QEGLPlatformBackingStore::paintDevice()
+QPaintDevice *QOpenGLCompositorBackingStore::paintDevice()
{
return &m_image;
}
-void QEGLPlatformBackingStore::updateTexture()
+void QOpenGLCompositorBackingStore::updateTexture()
{
if (!m_bsTexture) {
glGenTextures(1, &m_bsTexture);
@@ -134,7 +130,7 @@ void QEGLPlatformBackingStore::updateTexture()
}
}
-void QEGLPlatformBackingStore::flush(QWindow *window, const QRegion &region, const QPoint &offset)
+void QOpenGLCompositorBackingStore::flush(QWindow *window, const QRegion &region, const QPoint &offset)
{
// Called for ordinary raster windows. This is rare since RasterGLSurface
// support is claimed which leads to having all QWidget windows marked as
@@ -144,35 +140,38 @@ void QEGLPlatformBackingStore::flush(QWindow *window, const QRegion &region, con
Q_UNUSED(region);
Q_UNUSED(offset);
- QEGLPlatformScreen *screen = static_cast<QEGLPlatformScreen *>(m_window->screen());
- QEGLPlatformWindow *dstWin = screen->compositingWindow();
- if (!dstWin || !dstWin->isRaster())
+ QOpenGLCompositor *compositor = QOpenGLCompositor::instance();
+ QOpenGLContext *dstCtx = compositor->context();
+ QWindow *dstWin = compositor->targetWindow();
+ if (!dstWin)
return;
- screen->compositingContext()->makeCurrent(dstWin->window());
+ dstCtx->makeCurrent(dstWin);
updateTexture();
m_textures->clear();
m_textures->appendTexture(Q_NULLPTR, m_bsTexture, window->geometry());
- composite(screen->compositingContext(), dstWin);
+
+ compositor->update();
}
-void QEGLPlatformBackingStore::composeAndFlush(QWindow *window, const QRegion &region, const QPoint &offset,
+void QOpenGLCompositorBackingStore::composeAndFlush(QWindow *window, const QRegion &region, const QPoint &offset,
QPlatformTextureList *textures, QOpenGLContext *context,
bool translucentBackground)
{
- // QOpenGLWidget content provided as textures. The raster content should go on top.
+ // QOpenGLWidget/QQuickWidget content provided as textures. The raster content should go on top.
Q_UNUSED(region);
Q_UNUSED(offset);
Q_UNUSED(context);
Q_UNUSED(translucentBackground);
- QEGLPlatformScreen *screen = static_cast<QEGLPlatformScreen *>(m_window->screen());
- QEGLPlatformWindow *dstWin = screen->compositingWindow();
- if (!dstWin || !dstWin->isRaster())
+ QOpenGLCompositor *compositor = QOpenGLCompositor::instance();
+ QOpenGLContext *dstCtx = compositor->context();
+ QWindow *dstWin = compositor->targetWindow();
+ if (!dstWin)
return;
- screen->compositingContext()->makeCurrent(dstWin->window());
+ dstCtx->makeCurrent(dstWin);
m_textures->clear();
for (int i = 0; i < textures->count(); ++i)
@@ -184,15 +183,10 @@ void QEGLPlatformBackingStore::composeAndFlush(QWindow *window, const QRegion &r
textures->lock(true);
m_lockedWidgetTextures = textures;
- composite(screen->compositingContext(), dstWin);
-}
-
-void QEGLPlatformBackingStore::composite(QOpenGLContext *context, QEGLPlatformWindow *window)
-{
- QEGLCompositor::instance()->schedule(context, window);
+ compositor->update();
}
-void QEGLPlatformBackingStore::composited()
+void QOpenGLCompositorBackingStore::notifyComposited()
{
if (m_lockedWidgetTextures) {
QPlatformTextureList *textureList = m_lockedWidgetTextures;
@@ -201,7 +195,7 @@ void QEGLPlatformBackingStore::composited()
}
}
-void QEGLPlatformBackingStore::beginPaint(const QRegion &region)
+void QOpenGLCompositorBackingStore::beginPaint(const QRegion &region)
{
m_dirty |= region;
@@ -213,27 +207,28 @@ void QEGLPlatformBackingStore::beginPaint(const QRegion &region)
}
}
-void QEGLPlatformBackingStore::resize(const QSize &size, const QRegion &staticContents)
+void QOpenGLCompositorBackingStore::resize(const QSize &size, const QRegion &staticContents)
{
Q_UNUSED(staticContents);
- QEGLPlatformScreen *screen = static_cast<QEGLPlatformScreen *>(m_window->screen());
- QEGLPlatformWindow *dstWin = screen->compositingWindow();
- if (!dstWin || (!dstWin->isRaster() && dstWin->window()->surfaceType() != QSurface::RasterGLSurface))
+ QOpenGLCompositor *compositor = QOpenGLCompositor::instance();
+ QOpenGLContext *dstCtx = compositor->context();
+ QWindow *dstWin = compositor->targetWindow();
+ if (!dstWin)
return;
m_image = QImage(size, QImage::Format_RGBA8888);
m_window->create();
- screen->compositingContext()->makeCurrent(dstWin->window());
+ dstCtx->makeCurrent(dstWin);
if (m_bsTexture) {
glDeleteTextures(1, &m_bsTexture);
m_bsTexture = 0;
}
}
-QImage QEGLPlatformBackingStore::toImage() const
+QImage QOpenGLCompositorBackingStore::toImage() const
{
return m_image;
}
diff --git a/src/platformsupport/eglconvenience/qeglplatformbackingstore_p.h b/src/platformsupport/platformcompositor/qopenglcompositorbackingstore_p.h
index 502ca5a639..0501cd868c 100644
--- a/src/platformsupport/eglconvenience/qeglplatformbackingstore_p.h
+++ b/src/platformsupport/platformcompositor/qopenglcompositorbackingstore_p.h
@@ -31,8 +31,8 @@
**
****************************************************************************/
-#ifndef QEGLPLATFORMBACKINGSTORE_H
-#define QEGLPLATFORMBACKINGSTORE_H
+#ifndef QOPENGLCOMPOSITORBACKINGSTORE_H
+#define QOPENGLCOMPOSITORBACKINGSTORE_H
//
// W A R N I N G
@@ -46,7 +46,6 @@
//
#include <qpa/qplatformbackingstore.h>
-
#include <QImage>
#include <QRegion>
@@ -54,13 +53,12 @@ QT_BEGIN_NAMESPACE
class QOpenGLContext;
class QPlatformTextureList;
-class QEGLPlatformWindow;
-class QEGLPlatformBackingStore : public QPlatformBackingStore
+class QOpenGLCompositorBackingStore : public QPlatformBackingStore
{
public:
- QEGLPlatformBackingStore(QWindow *window);
- ~QEGLPlatformBackingStore();
+ QOpenGLCompositorBackingStore(QWindow *window);
+ ~QOpenGLCompositorBackingStore();
QPaintDevice *paintDevice() Q_DECL_OVERRIDE;
@@ -76,14 +74,12 @@ public:
const QPlatformTextureList *textures() const { return m_textures; }
- virtual void composite(QOpenGLContext *context, QEGLPlatformWindow *window);
-
- void composited();
+ void notifyComposited();
private:
void updateTexture();
- QEGLPlatformWindow *m_window;
+ QWindow *m_window;
QImage m_image;
QRegion m_dirty;
uint m_bsTexture;
@@ -93,4 +89,4 @@ private:
QT_END_NAMESPACE
-#endif // QEGLPLATFORMBACKINGSTORE_H
+#endif // QOPENGLCOMPOSITORBACKINGSTORE_H
diff --git a/src/platformsupport/platformsupport.pro b/src/platformsupport/platformsupport.pro
index 32ce2e3887..39cbd9d181 100644
--- a/src/platformsupport/platformsupport.pro
+++ b/src/platformsupport/platformsupport.pro
@@ -21,5 +21,6 @@ include(themes/themes.pri)
include(accessibility/accessibility.pri)
include(linuxaccessibility/linuxaccessibility.pri)
include(clipboard/clipboard.pri)
+include(platformcompositor/platformcompositor.pri)
load(qt_module)
diff --git a/src/platformsupport/services/genericunix/qgenericunixservices_p.h b/src/platformsupport/services/genericunix/qgenericunixservices_p.h
index f24912278b..17eb7b456e 100644
--- a/src/platformsupport/services/genericunix/qgenericunixservices_p.h
+++ b/src/platformsupport/services/genericunix/qgenericunixservices_p.h
@@ -55,10 +55,10 @@ class QGenericUnixServices : public QPlatformServices
public:
QGenericUnixServices() {}
- QByteArray desktopEnvironment() const;
+ QByteArray desktopEnvironment() const Q_DECL_OVERRIDE;
- virtual bool openUrl(const QUrl &url);
- virtual bool openDocument(const QUrl &url);
+ virtual bool openUrl(const QUrl &url) Q_DECL_OVERRIDE;
+ virtual bool openDocument(const QUrl &url) Q_DECL_OVERRIDE;
private:
QString m_webBrowser;
diff --git a/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp b/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp
index e66fdeb7c3..1060ff283b 100644
--- a/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp
+++ b/src/platformsupport/themes/genericunix/qgenericunixthemes.cpp
@@ -135,6 +135,11 @@ QStringList QGenericUnixTheme::xdgIconThemePaths()
if (xdgIconsDir.isDir())
paths.append(xdgIconsDir.absoluteFilePath());
}
+
+ const QFileInfo pixmapsIconsDir(QStringLiteral("/usr/share/pixmaps"));
+ if (pixmapsIconsDir.isDir())
+ paths.append(pixmapsIconsDir.absoluteFilePath());
+
return paths;
}
@@ -170,6 +175,7 @@ public:
, toolButtonStyle(Qt::ToolButtonTextBesideIcon)
, toolBarIconSize(0)
, singleClick(true)
+ , wheelScrollLines(3)
{ }
static QString kdeGlobals(const QString &kdeDir)
@@ -193,6 +199,7 @@ public:
int toolButtonStyle;
int toolBarIconSize;
bool singleClick;
+ int wheelScrollLines;
};
void QKdeThemePrivate::refresh()
@@ -242,6 +249,10 @@ void QKdeThemePrivate::refresh()
toolButtonStyle = Qt::ToolButtonTextUnderIcon;
}
+ const QVariant wheelScrollLinesValue = readKdeSetting(QStringLiteral("KDE/WheelScrollLines"), kdeDirs, kdeSettings);
+ if (wheelScrollLinesValue.isValid())
+ wheelScrollLines = wheelScrollLinesValue.toInt();
+
// Read system font, ignore 'smallestReadableFont'
if (QFont *systemFont = kdeFont(readKdeSetting(QStringLiteral("font"), kdeDirs, kdeSettings)))
resources.fonts[QPlatformTheme::SystemFont] = systemFont;
@@ -428,6 +439,8 @@ QVariant QKdeTheme::themeHint(QPlatformTheme::ThemeHint hint) const
return QVariant(int(KdeKeyboardScheme));
case QPlatformTheme::ItemViewActivateItemOnSingleClick:
return QVariant(d->singleClick);
+ case QPlatformTheme::WheelScrollLines:
+ return QVariant(d->wheelScrollLines);
default:
break;
}
@@ -624,20 +637,25 @@ QStringList QGenericUnixTheme::themeNames()
QStringList result;
if (QGuiApplication::desktopSettingsAware()) {
const QByteArray desktopEnvironment = QGuiApplicationPrivate::platformIntegration()->services()->desktopEnvironment();
- if (desktopEnvironment == "KDE") {
+ QList<QByteArray> gtkBasedEnvironments;
+ gtkBasedEnvironments << "GNOME"
+ << "X-CINNAMON"
+ << "UNITY"
+ << "MATE"
+ << "XFCE"
+ << "LXDE";
+ QList<QByteArray> desktopNames = desktopEnvironment.split(':');
+ Q_FOREACH (const QByteArray &desktopName, desktopNames) {
+ if (desktopEnvironment == "KDE") {
#ifndef QT_NO_SETTINGS
- result.push_back(QLatin1String(QKdeTheme::name));
+ result.push_back(QLatin1String(QKdeTheme::name));
#endif
- } else if (desktopEnvironment == "GNOME" ||
- desktopEnvironment == "X-CINNAMON" ||
- desktopEnvironment == "UNITY" ||
- desktopEnvironment == "MATE" ||
- desktopEnvironment == "XFCE" ||
- desktopEnvironment == "LXDE") { // Gtk-based desktops
- // prefer the GTK2 theme implementation with native dialogs etc.
- result.push_back(QStringLiteral("gtk2"));
- // fallback to the generic Gnome theme if loading the GTK2 theme fails
- result.push_back(QLatin1String(QGnomeTheme::name));
+ } else if (gtkBasedEnvironments.contains(desktopName)) {
+ // prefer the GTK2 theme implementation with native dialogs etc.
+ result.push_back(QStringLiteral("gtk2"));
+ // fallback to the generic Gnome theme if loading the GTK2 theme fails
+ result.push_back(QLatin1String(QGnomeTheme::name));
+ }
}
const QString session = QString::fromLocal8Bit(qgetenv("DESKTOP_SESSION"));
if (!session.isEmpty() && session != QLatin1String("default") && !result.contains(session))
diff --git a/src/platformsupport/themes/genericunix/qgenericunixthemes_p.h b/src/platformsupport/themes/genericunix/qgenericunixthemes_p.h
index 87df37dfd7..2a689c6872 100644
--- a/src/platformsupport/themes/genericunix/qgenericunixthemes_p.h
+++ b/src/platformsupport/themes/genericunix/qgenericunixthemes_p.h
@@ -75,8 +75,8 @@ public:
static QPlatformTheme *createUnixTheme(const QString &name);
static QStringList themeNames();
- virtual const QFont *font(Font type) const;
- virtual QVariant themeHint(ThemeHint hint) const;
+ virtual const QFont *font(Font type) const Q_DECL_OVERRIDE;
+ virtual QVariant themeHint(ThemeHint hint) const Q_DECL_OVERRIDE;
static QStringList xdgIconThemePaths();
@@ -93,11 +93,11 @@ public:
QKdeTheme(const QStringList& kdeDirs, int kdeVersion);
static QPlatformTheme *createKdeTheme();
- virtual QVariant themeHint(ThemeHint hint) const;
+ virtual QVariant themeHint(ThemeHint hint) const Q_DECL_OVERRIDE;
- virtual const QPalette *palette(Palette type = SystemPalette) const;
+ virtual const QPalette *palette(Palette type = SystemPalette) const Q_DECL_OVERRIDE;
- virtual const QFont *font(Font type) const;
+ virtual const QFont *font(Font type) const Q_DECL_OVERRIDE;
static const char *name;
};
@@ -110,8 +110,8 @@ class QGnomeTheme : public QPlatformTheme
Q_DECLARE_PRIVATE(QGnomeTheme)
public:
QGnomeTheme();
- virtual QVariant themeHint(ThemeHint hint) const;
- virtual const QFont *font(Font type) const;
+ virtual QVariant themeHint(ThemeHint hint) const Q_DECL_OVERRIDE;
+ virtual const QFont *font(Font type) const Q_DECL_OVERRIDE;
QString standardButtonText(int button) const Q_DECL_OVERRIDE;
virtual QString gtkFontName() const;
diff --git a/src/plugins/bearer/generic/main.cpp b/src/plugins/bearer/generic/main.cpp
index e825cd494b..57c5589e1b 100644
--- a/src/plugins/bearer/generic/main.cpp
+++ b/src/plugins/bearer/generic/main.cpp
@@ -50,7 +50,7 @@ public:
QGenericEnginePlugin();
~QGenericEnginePlugin();
- QBearerEngine *create(const QString &key) const;
+ QBearerEngine *create(const QString &key) const Q_DECL_OVERRIDE;
};
QGenericEnginePlugin::QGenericEnginePlugin()
diff --git a/src/plugins/bearer/generic/qgenericengine.h b/src/plugins/bearer/generic/qgenericengine.h
index f688cae3d0..b56ce9ae29 100644
--- a/src/plugins/bearer/generic/qgenericengine.h
+++ b/src/plugins/bearer/generic/qgenericengine.h
@@ -54,24 +54,24 @@ public:
QGenericEngine(QObject *parent = 0);
~QGenericEngine();
- QString getInterfaceFromId(const QString &id);
- bool hasIdentifier(const QString &id);
+ QString getInterfaceFromId(const QString &id) Q_DECL_OVERRIDE;
+ bool hasIdentifier(const QString &id) Q_DECL_OVERRIDE;
- void connectToId(const QString &id);
- void disconnectFromId(const QString &id);
+ void connectToId(const QString &id) Q_DECL_OVERRIDE;
+ void disconnectFromId(const QString &id) Q_DECL_OVERRIDE;
Q_INVOKABLE void initialize();
Q_INVOKABLE void requestUpdate();
- QNetworkSession::State sessionStateForId(const QString &id);
+ QNetworkSession::State sessionStateForId(const QString &id) Q_DECL_OVERRIDE;
- QNetworkConfigurationManager::Capabilities capabilities() const;
+ QNetworkConfigurationManager::Capabilities capabilities() const Q_DECL_OVERRIDE;
- QNetworkSessionPrivate *createSessionBackend();
+ QNetworkSessionPrivate *createSessionBackend() Q_DECL_OVERRIDE;
- QNetworkConfigurationPrivatePointer defaultConfiguration();
+ QNetworkConfigurationPrivatePointer defaultConfiguration() Q_DECL_OVERRIDE;
- bool requiresPolling() const;
+ bool requiresPolling() const Q_DECL_OVERRIDE;
private Q_SLOTS:
void doRequestUpdate();
diff --git a/src/plugins/bearer/linux_common/qofonoservice_linux.cpp b/src/plugins/bearer/linux_common/qofonoservice_linux.cpp
index abbfd445a5..f4460c1be0 100644
--- a/src/plugins/bearer/linux_common/qofonoservice_linux.cpp
+++ b/src/plugins/bearer/linux_common/qofonoservice_linux.cpp
@@ -295,14 +295,10 @@ QString QOfonoDataConnectionManagerInterface::bearer()
QVariant QOfonoDataConnectionManagerInterface::getProperty(const QString &property)
{
- QVariant var;
- QVariantMap map = getProperties();
- if (map.contains(property))
- var = map.value(property);
- return var;
+ return getProperties().value(property);
}
-QVariantMap QOfonoDataConnectionManagerInterface::getProperties()
+QVariantMap &QOfonoDataConnectionManagerInterface::getProperties()
{
if (propertiesMap.isEmpty()) {
QList<QVariant> argumentList;
diff --git a/src/plugins/bearer/linux_common/qofonoservice_linux_p.h b/src/plugins/bearer/linux_common/qofonoservice_linux_p.h
index 3b97e06dd3..8adb8db19c 100644
--- a/src/plugins/bearer/linux_common/qofonoservice_linux_p.h
+++ b/src/plugins/bearer/linux_common/qofonoservice_linux_p.h
@@ -160,11 +160,11 @@ public:
Q_SIGNALS:
void roamingAllowedChanged(bool);
private:
- QVariantMap getProperties();
+ QVariantMap &getProperties();
QVariantMap propertiesMap;
QStringList contextList;
PathPropertiesList contextListProperties;
-private slots:
+private Q_SLOTS:
void propertyChanged(const QString &, const QDBusVariant &value);
};
diff --git a/src/plugins/bearer/qnetworksession_impl.h b/src/plugins/bearer/qnetworksession_impl.h
index f5c9ab393f..3570166b11 100644
--- a/src/plugins/bearer/qnetworksession_impl.h
+++ b/src/plugins/bearer/qnetworksession_impl.h
@@ -71,31 +71,31 @@ public:
//that the state is immediately updated (w/o actually opening
//a session). Also this function should take care of
//notification hooks to discover future state changes.
- void syncStateWithInterface();
+ void syncStateWithInterface() Q_DECL_OVERRIDE;
#ifndef QT_NO_NETWORKINTERFACE
- QNetworkInterface currentInterface() const;
+ QNetworkInterface currentInterface() const Q_DECL_OVERRIDE;
#endif
- QVariant sessionProperty(const QString& key) const;
- void setSessionProperty(const QString& key, const QVariant& value);
-
- void open();
- void close();
- void stop();
- void migrate();
- void accept();
- void ignore();
- void reject();
-
- QString errorString() const; //must return translated string
- QNetworkSession::SessionError error() const;
-
- quint64 bytesWritten() const;
- quint64 bytesReceived() const;
- quint64 activeTime() const;
-
- QNetworkSession::UsagePolicies usagePolicies() const;
- void setUsagePolicies(QNetworkSession::UsagePolicies);
+ QVariant sessionProperty(const QString& key) const Q_DECL_OVERRIDE;
+ void setSessionProperty(const QString& key, const QVariant& value) Q_DECL_OVERRIDE;
+
+ void open() Q_DECL_OVERRIDE;
+ void close() Q_DECL_OVERRIDE;
+ void stop() Q_DECL_OVERRIDE;
+ void migrate() Q_DECL_OVERRIDE;
+ void accept() Q_DECL_OVERRIDE;
+ void ignore() Q_DECL_OVERRIDE;
+ void reject() Q_DECL_OVERRIDE;
+
+ QString errorString() const Q_DECL_OVERRIDE; //must return translated string
+ QNetworkSession::SessionError error() const Q_DECL_OVERRIDE;
+
+ quint64 bytesWritten() const Q_DECL_OVERRIDE;
+ quint64 bytesReceived() const Q_DECL_OVERRIDE;
+ quint64 activeTime() const Q_DECL_OVERRIDE;
+
+ QNetworkSession::UsagePolicies usagePolicies() const Q_DECL_OVERRIDE;
+ void setUsagePolicies(QNetworkSession::UsagePolicies) Q_DECL_OVERRIDE;
private Q_SLOTS:
void networkConfigurationsChanged();
diff --git a/src/plugins/generic/evdevkeyboard/main.cpp b/src/plugins/generic/evdevkeyboard/main.cpp
index c913aff787..92ef063450 100644
--- a/src/plugins/generic/evdevkeyboard/main.cpp
+++ b/src/plugins/generic/evdevkeyboard/main.cpp
@@ -44,7 +44,7 @@ class QEvdevKeyboardPlugin : public QGenericPlugin
public:
QEvdevKeyboardPlugin();
- QObject* create(const QString &key, const QString &specification);
+ QObject* create(const QString &key, const QString &specification) Q_DECL_OVERRIDE;
};
QEvdevKeyboardPlugin::QEvdevKeyboardPlugin()
diff --git a/src/plugins/generic/evdevmouse/main.cpp b/src/plugins/generic/evdevmouse/main.cpp
index b460502c9c..54ff554c6f 100644
--- a/src/plugins/generic/evdevmouse/main.cpp
+++ b/src/plugins/generic/evdevmouse/main.cpp
@@ -44,7 +44,7 @@ class QEvdevMousePlugin : public QGenericPlugin
public:
QEvdevMousePlugin();
- QObject* create(const QString &key, const QString &specification);
+ QObject* create(const QString &key, const QString &specification) Q_DECL_OVERRIDE;
};
QEvdevMousePlugin::QEvdevMousePlugin()
diff --git a/src/plugins/generic/evdevtablet/main.cpp b/src/plugins/generic/evdevtablet/main.cpp
index b3a73de4f7..a19efba660 100644
--- a/src/plugins/generic/evdevtablet/main.cpp
+++ b/src/plugins/generic/evdevtablet/main.cpp
@@ -45,7 +45,7 @@ public:
QEvdevTabletPlugin();
QStringList keys() const;
- QObject* create(const QString &key, const QString &specification);
+ QObject* create(const QString &key, const QString &specification) Q_DECL_OVERRIDE;
};
QEvdevTabletPlugin::QEvdevTabletPlugin()
diff --git a/src/plugins/generic/evdevtouch/main.cpp b/src/plugins/generic/evdevtouch/main.cpp
index 1c6d0fba0d..a79c9b43c4 100644
--- a/src/plugins/generic/evdevtouch/main.cpp
+++ b/src/plugins/generic/evdevtouch/main.cpp
@@ -44,7 +44,7 @@ class QEvdevTouchScreenPlugin : public QGenericPlugin
public:
QEvdevTouchScreenPlugin();
- QObject* create(const QString &key, const QString &specification);
+ QObject* create(const QString &key, const QString &specification) Q_DECL_OVERRIDE;
};
QEvdevTouchScreenPlugin::QEvdevTouchScreenPlugin()
diff --git a/src/plugins/generic/generic.pro b/src/plugins/generic/generic.pro
index 767b9a55c1..82a4ad4ce8 100644
--- a/src/plugins/generic/generic.pro
+++ b/src/plugins/generic/generic.pro
@@ -7,3 +7,9 @@ contains(QT_CONFIG, evdev) {
contains(QT_CONFIG, tslib) {
SUBDIRS += tslib
}
+
+SUBDIRS += tuiotouch
+
+contains(QT_CONFIG, libinput) {
+ SUBDIRS += libinput
+}
diff --git a/src/plugins/generic/libinput/README b/src/plugins/generic/libinput/README
new file mode 100644
index 0000000000..4312ccbf3a
--- /dev/null
+++ b/src/plugins/generic/libinput/README
@@ -0,0 +1,18 @@
+This is a generic plug-in for libinput 0.6.0
+(http://www.freedesktop.org/wiki/Software/libinput)
+
+Supports relative pointer, axis, keyboard and touch events. udev is
+required. xkbcommon is used to perform keyboard mapping. The dependency on
+xkbcommon is optional. However, no key events will be generated without it.
+
+The plugin is integrated with configure and is built automatically when the
+necessary dependencies are present.
+
+To use this plugin with eglfs, set QT_QPA_EGLFS_DISABLE_INPUT=1 before launching
+the application and pass -plugin libinput.
+
+To get info and debug messages from libinput, enable the logging category
+qt.qpa.input.
+
+For the time being xkbcommon's default keymap is used always. Support for
+changing it will be added in the future.
diff --git a/src/plugins/generic/libinput/libinput.json b/src/plugins/generic/libinput/libinput.json
new file mode 100644
index 0000000000..4a93f271f3
--- /dev/null
+++ b/src/plugins/generic/libinput/libinput.json
@@ -0,0 +1,3 @@
+{
+ "Keys": [ "libinput" ]
+}
diff --git a/src/plugins/generic/libinput/libinput.pro b/src/plugins/generic/libinput/libinput.pro
new file mode 100644
index 0000000000..17dbb23ef0
--- /dev/null
+++ b/src/plugins/generic/libinput/libinput.pro
@@ -0,0 +1,12 @@
+TARGET = qlibinputplugin
+
+PLUGIN_TYPE = generic
+PLUGIN_EXTENDS = -
+PLUGIN_CLASS_NAME = QLibInputPlugin
+load(qt_plugin)
+
+QT += core-private platformsupport-private gui-private
+
+SOURCES = main.cpp
+
+OTHER_FILES = libinput.json
diff --git a/src/plugins/generic/libinput/main.cpp b/src/plugins/generic/libinput/main.cpp
new file mode 100644
index 0000000000..16c391cc22
--- /dev/null
+++ b/src/plugins/generic/libinput/main.cpp
@@ -0,0 +1,58 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtGui module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui/qgenericplugin.h>
+#include <QtPlatformSupport/private/qlibinputhandler_p.h>
+
+QT_BEGIN_NAMESPACE
+
+class QLibInputPlugin : public QGenericPlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QGenericPluginFactoryInterface" FILE "libinput.json")
+
+public:
+ QObject *create(const QString &key, const QString &specification);
+};
+
+QObject *QLibInputPlugin::create(const QString &key, const QString &specification)
+{
+ if (!key.compare(QLatin1String("libinput"), Qt::CaseInsensitive))
+ return new QLibInputHandler(key, specification);
+
+ return 0;
+}
+
+QT_END_NAMESPACE
+
+#include "main.moc"
diff --git a/src/plugins/generic/tslib/main.cpp b/src/plugins/generic/tslib/main.cpp
index 737b175941..1fbe440bb5 100644
--- a/src/plugins/generic/tslib/main.cpp
+++ b/src/plugins/generic/tslib/main.cpp
@@ -32,7 +32,7 @@
****************************************************************************/
#include <QtGui/qgenericplugin.h>
-#include "qtslib.h"
+#include <QtPlatformSupport/private/qtslib_p.h>
QT_BEGIN_NAMESPACE
@@ -42,21 +42,16 @@ class QTsLibPlugin : public QGenericPlugin
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QGenericPluginFactoryInterface" FILE "tslib.json")
public:
- QTsLibPlugin();
-
QObject* create(const QString &key, const QString &specification);
};
-QTsLibPlugin::QTsLibPlugin()
- : QGenericPlugin()
-{
-}
-
QObject* QTsLibPlugin::create(const QString &key,
- const QString &specification)
+ const QString &specification)
{
- if (!key.compare(QLatin1String("Tslib"), Qt::CaseInsensitive) || !key.compare(QLatin1String("TslibRaw"), Qt::CaseInsensitive))
+ if (!key.compare(QLatin1String("Tslib"), Qt::CaseInsensitive)
+ || !key.compare(QLatin1String("TslibRaw"), Qt::CaseInsensitive))
return new QTsLibMouseHandler(key, specification);
+
return 0;
}
diff --git a/src/plugins/generic/tslib/tslib.pro b/src/plugins/generic/tslib/tslib.pro
index bc05efcc32..be6fc4fbea 100644
--- a/src/plugins/generic/tslib/tslib.pro
+++ b/src/plugins/generic/tslib/tslib.pro
@@ -5,12 +5,9 @@ PLUGIN_EXTENDS = -
PLUGIN_CLASS_NAME = QTsLibPlugin
load(qt_plugin)
-HEADERS = qtslib.h
+SOURCES = main.cpp
-SOURCES = main.cpp \
- qtslib.cpp
-
-QT += gui-private
+QT += gui-private platformsupport-private
LIBS += -lts
diff --git a/src/plugins/generic/tuiotouch/README.md b/src/plugins/generic/tuiotouch/README.md
new file mode 100644
index 0000000000..2675803896
--- /dev/null
+++ b/src/plugins/generic/tuiotouch/README.md
@@ -0,0 +1,54 @@
+# TuioTouch plugin for Qt 5
+
+## Introduction
+
+This is a QPA-using plugin (meaning, it uses Qt internals) that provides touch
+events from TUIO-based sources (such as [TUIOPad](https://code.google.com/p/tuiopad/)).
+
+[TUIO](http://www.tuio.org/) is a framework for providing touch events over the
+network (implemented here using a UDP transport).
+
+This repository also includes a simple [OSC](http://opensoundcontrol.org/spec-1_0)
+parser. OSC is the binary format that TUIO uses for over-the-wire communication.
+
+## Use
+
+Run your application with -plugin TuioTouch, e.g.
+
+`qmlscene foo.qml -plugin TuioTouch`
+
+Or make sure the plugin is loaded using the QT_QPA_GENERIC_PLUGINS environment
+variable.
+
+By default, you must direct TUIO packets to the IP of the machine the application
+is running on, protocol UDP, port 3333. If you want to customize the port, you
+may provide a port number like this:
+
+`qmlscene foo.qml -plugin TuioTouch:udp=3333`
+
+At present, UDP is the only supported transport mechanism.
+
+## Advanced use
+
+If you have the need to invert the X/Y axis, you can do so, by adding an
+additional option when loading the plugin.
+
+For example:
+
+`qmlscene foo.qml -plugin TuioTouch:udp=4000:invertx:inverty`
+
+Would invert the X and Y coordinates of all input coming in on port 4000.
+
+You can also rotate the coordinates directly, using the rotate option:
+
+`qmlscene foo.qml -plugin TuioTouch:udp=4000:rotate=180`
+
+Supported rotations are 90, 180, and 270.
+
+## Further work
+
+* Support other profiles (we implement 2Dcur, we want 2Dobj, 2Dblb?)
+* Support multiple simultaneous sources, generating distinct QTouchEvents
+ * We'd need to somehow not rely on FSEQ for removing touchpoints, else our
+ currently minor memory exhaustion problem could become a real issue
+* Support TCP transports?
diff --git a/src/plugins/generic/tuiotouch/main.cpp b/src/plugins/generic/tuiotouch/main.cpp
new file mode 100644
index 0000000000..c750a4f9a0
--- /dev/null
+++ b/src/plugins/generic/tuiotouch/main.cpp
@@ -0,0 +1,68 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Robin Burchell <robin.burchell@viroteck.net>
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtGui/qgenericplugin.h>
+#include <QCoreApplication>
+
+#include "qtuiohandler_p.h"
+
+QT_BEGIN_NAMESPACE
+
+class QTuioTouchPlugin : public QGenericPlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QGenericPluginFactoryInterface" FILE "tuiotouch.json")
+
+public:
+ QTuioTouchPlugin();
+
+ QObject* create(const QString &key, const QString &specification);
+};
+
+QTuioTouchPlugin::QTuioTouchPlugin()
+{
+}
+
+QObject* QTuioTouchPlugin::create(const QString &key,
+ const QString &spec)
+{
+ if (!key.compare(QLatin1String("TuioTouch"), Qt::CaseInsensitive))
+ return new QTuioHandler(spec);
+
+ return 0;
+}
+
+QT_END_NAMESPACE
+
+#include "main.moc"
diff --git a/src/plugins/generic/tuiotouch/qoscbundle.cpp b/src/plugins/generic/tuiotouch/qoscbundle.cpp
new file mode 100644
index 0000000000..39e1bdcd81
--- /dev/null
+++ b/src/plugins/generic/tuiotouch/qoscbundle.cpp
@@ -0,0 +1,186 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Robin Burchell <robin.burchell@viroteck.net>
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QtEndian>
+#include <QDebug>
+#include <QLoggingCategory>
+
+#include "qoscbundle_p.h"
+#include "qtuio_p.h"
+
+QT_BEGIN_NAMESPACE
+
+Q_LOGGING_CATEGORY(lcTuioBundle, "qt.qpa.tuio.bundle")
+
+// TUIO packets are transmitted using the OSC protocol, located at:
+// http://opensoundcontrol.org/specification
+// Snippets of this specification have been pasted into the source as a means of
+// easily communicating requirements.
+
+QOscBundle::QOscBundle(const QByteArray &data)
+ : m_isValid(false)
+ , m_immediate(false)
+ , m_timeEpoch(0)
+ , m_timePico(0)
+{
+ // 8 16 24 32 40 48 56 64
+ // # b u n d l e \0
+ // 23 62 75 6e 64 6c 65 00 // OSC string bundle identifier
+ // 00 00 00 00 00 00 00 01 // osc time-tag, "immediately"
+ // 00 00 00 30 // element length
+ // => message or bundle(s), preceded by length each time
+ qCDebug(lcTuioBundle) << data.toHex();
+ quint32 parsedBytes = 0;
+
+ // "An OSC Bundle consists of the OSC-string "#bundle""
+ QByteArray identifier;
+ if (!qt_readOscString(data, identifier, parsedBytes) || identifier != "#bundle")
+ return;
+
+ // "followed by an OSC Time
+ // Tag, followed by zero or more OSC Bundle Elements. The OSC-timetag is a
+ // 64-bit fixed point time tag whose semantics are described below."
+ if (parsedBytes > (quint32)data.size() || data.size() - parsedBytes < sizeof(quint64))
+ return;
+
+ // "Time tags are represented by a 64 bit fixed point number. The first 32
+ // bits specify the number of seconds since midnight on January 1, 1900,
+ // and the last 32 bits specify fractional parts of a second to a precision
+ // of about 200 picoseconds. This is the representation used by Internet NTP
+ // timestamps."
+ //
+ // (editor's note: one may wonder how a 64bit big-endian number can also be
+ // two 32bit numbers, without specifying in which order they occur or
+ // anything, and one may indeed continue to wonder.)
+ quint32 oscTimeEpoch = qFromBigEndian<quint32>((const uchar*)data.constData() + parsedBytes);
+ parsedBytes += sizeof(quint32);
+ quint32 oscTimePico = qFromBigEndian<quint32>((const uchar*)data.constData() + parsedBytes);
+ parsedBytes += sizeof(quint32);
+
+ bool isImmediate = false;
+
+ if (oscTimeEpoch == 0 && oscTimePico == 1) {
+ // "The time tag value consisting of 63 zero bits followed by a
+ // one in the least signifigant bit is a special case meaning
+ // "immediately.""
+ isImmediate = true;
+ }
+
+ while (parsedBytes < (quint32)data.size()) {
+ // "An OSC Bundle Element consists of its size and its contents. The size is an
+ // int32 representing the number of 8-bit bytes in the contents, and will
+ // always be a multiple of 4."
+ //
+ // in practice, a bundle can contain multiple bundles or messages,
+ // though, and each is prefixed by a size.
+ if (data.size() - parsedBytes < sizeof(quint32))
+ return;
+
+ quint32 size = qFromBigEndian<quint32>((const uchar*)data.constData() + parsedBytes);
+ parsedBytes += sizeof(quint32);
+
+ if (data.size() - parsedBytes < size)
+ return;
+
+ if (size == 0) {
+ // empty bundle; these are valid, but should they be allowed? the
+ // spec is unclear on this...
+ qWarning() << "Empty bundle?";
+ m_isValid = true;
+ m_immediate = isImmediate;
+ m_timeEpoch = oscTimeEpoch;
+ m_timePico = oscTimePico;
+ return;
+ }
+
+ // "The contents are either an OSC Message or an OSC Bundle.
+ // Note this recursive definition: bundle may contain bundles."
+ QByteArray subdata = data.mid(parsedBytes, size);
+ parsedBytes += size;
+
+ // "The contents of an OSC packet must be either an OSC Message or an OSC Bundle.
+ // The first byte of the packet's contents unambiguously distinguishes between
+ // these two alternatives."
+ //
+ // we're not dealing with a packet here, but the same trick works just
+ // the same.
+ QByteArray bundleIdentifier = QByteArray("#bundle\0", 8);
+ if (subdata.startsWith('/')) {
+ // starts with / => address pattern => start of a message
+ QOscMessage subMessage(subdata);
+ if (subMessage.isValid()) {
+ m_isValid = true;
+ m_immediate = isImmediate;
+ m_timeEpoch = oscTimeEpoch;
+ m_timePico = oscTimePico;
+ m_messages.append(subMessage);
+ } else {
+ qWarning() << "Invalid sub-message";
+ return;
+ }
+ } else if (subdata.startsWith(bundleIdentifier)) {
+ // bundle identifier start => bundle
+ QOscBundle subBundle(subdata);
+ if (subBundle.isValid()) {
+ m_isValid = true;
+ m_immediate = isImmediate;
+ m_timeEpoch = oscTimeEpoch;
+ m_timePico = oscTimePico;
+ m_bundles.append(subBundle);
+ }
+ } else {
+ qWarning() << "Malformed sub-data!";
+ return;
+ }
+ }
+}
+
+
+bool QOscBundle::isValid() const
+{
+ return m_isValid;
+}
+
+QList<QOscBundle> QOscBundle::bundles() const
+{
+ return m_bundles;
+}
+
+QList<QOscMessage> QOscBundle::messages() const
+{
+ return m_messages;
+}
+
+QT_END_NAMESPACE
+
diff --git a/src/plugins/generic/tuiotouch/qoscbundle_p.h b/src/plugins/generic/tuiotouch/qoscbundle_p.h
new file mode 100644
index 0000000000..b97cd1e761
--- /dev/null
+++ b/src/plugins/generic/tuiotouch/qoscbundle_p.h
@@ -0,0 +1,62 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Robin Burchell <robin.burchell@viroteck.net>
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QOSCBUNDLE_P_H
+#define QOSCBUNDLE_P_H
+
+#include "qoscmessage_p.h"
+
+QT_BEGIN_NAMESPACE
+
+class QOscBundle
+{
+public:
+ QOscBundle(const QByteArray &data);
+
+ bool isValid() const;
+ QList<QOscBundle> bundles() const;
+ QList<QOscMessage> messages() const;
+
+private:
+ bool m_isValid;
+ bool m_immediate;
+ quint32 m_timeEpoch;
+ quint32 m_timePico;
+ QList<QOscBundle> m_bundles;
+ QList<QOscMessage> m_messages;
+};
+
+QT_END_NAMESPACE
+
+#endif // QOSCBUNDLE_P_H
diff --git a/src/plugins/generic/tuiotouch/qoscmessage.cpp b/src/plugins/generic/tuiotouch/qoscmessage.cpp
new file mode 100644
index 0000000000..1ebc4ee434
--- /dev/null
+++ b/src/plugins/generic/tuiotouch/qoscmessage.cpp
@@ -0,0 +1,138 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Robin Burchell <robin.burchell@viroteck.net>
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QByteArray>
+#include <QDebug>
+#include <QtEndian>
+#include <QVariant>
+#include <QLoggingCategory>
+
+#include "qoscmessage_p.h"
+#include "qtuio_p.h"
+
+QT_BEGIN_NAMESPACE
+
+Q_LOGGING_CATEGORY(lcTuioMessage, "qt.qpa.tuio.message")
+
+// TUIO packets are transmitted using the OSC protocol, located at:
+// http://opensoundcontrol.org/specification
+// Snippets of this specification have been pasted into the source as a means of
+// easily communicating requirements.
+
+QOscMessage::QOscMessage(const QByteArray &data)
+ : m_isValid(false)
+{
+ qCDebug(lcTuioMessage) << data.toHex();
+ quint32 parsedBytes = 0;
+
+ // "An OSC message consists of an OSC Address Pattern"
+ QByteArray addressPattern;
+ if (!qt_readOscString(data, addressPattern, parsedBytes) || addressPattern.size() == 0)
+ return;
+
+ // "followed by an OSC Type Tag String"
+ QByteArray typeTagString;
+ if (!qt_readOscString(data, typeTagString, parsedBytes))
+ return;
+
+ // "Note: some older implementations of OSC may omit the OSC Type Tag string.
+ // Until all such implementations are updated, OSC implementations should be
+ // robust in the case of a missing OSC Type Tag String."
+ //
+ // (although, the editor notes one may question how exactly the hell one is
+ // supposed to be robust when the behavior is unspecified.)
+ if (typeTagString.size() == 0 || typeTagString.at(0) != ',')
+ return;
+
+ QList<QVariant> arguments;
+
+ // "followed by zero or more OSC Arguments."
+ for (int i = 1; i < typeTagString.size(); ++i) {
+ char typeTag = typeTagString.at(i);
+ if (typeTag == 's') { // osc-string
+ QByteArray aString;
+ if (!qt_readOscString(data, aString, parsedBytes))
+ return;
+ arguments.append(aString);
+ } else if (typeTag == 'i') { // int32
+ if (parsedBytes > (quint32)data.size() || data.size() - parsedBytes < sizeof(quint32))
+ return;
+
+ quint32 anInt = qFromBigEndian<quint32>((const uchar*)data.constData() + parsedBytes);
+ parsedBytes += sizeof(quint32);
+
+ // TODO: is int32 in OSC signed, or unsigned?
+ arguments.append((int)anInt);
+ } else if (typeTag == 'f') { // float32
+ if (parsedBytes > (quint32)data.size() || data.size() - parsedBytes < sizeof(quint32))
+ return;
+
+ Q_STATIC_ASSERT(sizeof(float) == sizeof(quint32));
+ union {
+ quint32 u;
+ float f;
+ } value;
+ value.u = qFromBigEndian<quint32>((const uchar*)data.constData() + parsedBytes);
+ parsedBytes += sizeof(quint32);
+ arguments.append(value.f);
+ } else {
+ qWarning() << "Reading argument of unknown type " << typeTag;
+ return;
+ }
+ }
+
+ m_isValid = true;
+ m_addressPattern = addressPattern;
+ m_arguments = arguments;
+
+ qCDebug(lcTuioMessage) << "Message with address pattern: " << addressPattern << " arguments: " << arguments;
+}
+
+bool QOscMessage::isValid() const
+{
+ return m_isValid;
+}
+
+QByteArray QOscMessage::addressPattern() const
+{
+ return m_addressPattern;
+}
+
+QList<QVariant> QOscMessage::arguments() const
+{
+ return m_arguments;
+}
+
+QT_END_NAMESPACE
+
diff --git a/src/plugins/generic/tuiotouch/qoscmessage_p.h b/src/plugins/generic/tuiotouch/qoscmessage_p.h
new file mode 100644
index 0000000000..4282dce9d4
--- /dev/null
+++ b/src/plugins/generic/tuiotouch/qoscmessage_p.h
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Robin Burchell <robin.burchell@viroteck.net>
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QOSCMESSAGE_P_H
+#define QOSCMESSAGE_P_H
+
+QT_BEGIN_NAMESPACE
+
+class QOscMessage
+{
+public:
+ QOscMessage(const QByteArray &data);
+ bool isValid() const;
+
+ QByteArray addressPattern() const;
+ QList<QVariant> arguments() const;
+
+private:
+ bool m_isValid;
+ QByteArray m_addressPattern;
+ QList<QVariant> m_arguments;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/generic/tuiotouch/qtuio_p.h b/src/plugins/generic/tuiotouch/qtuio_p.h
new file mode 100644
index 0000000000..ac8e5a128c
--- /dev/null
+++ b/src/plugins/generic/tuiotouch/qtuio_p.h
@@ -0,0 +1,62 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Robin Burchell <robin.burchell@viroteck.net>
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QTUIO_P_H
+#define QTUIO_P_H
+
+QT_BEGIN_NAMESPACE
+
+inline bool qt_readOscString(const QByteArray &source, QByteArray &dest, quint32 &pos)
+{
+ int end = source.indexOf('\0', pos);
+ if (end < 0) {
+ pos = source.size();
+ dest = QByteArray();
+ return false;
+ }
+
+ dest = source.mid(pos, end - pos);
+
+ // Skip additional NULL bytes at the end of the string to make sure the
+ // total number of bits a multiple of 32 bits ("OSC-string" in the
+ // specification).
+ end += 4 - ((end - pos) % 4);
+
+ pos = end;
+ return true;
+}
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/generic/tuiotouch/qtuiocursor_p.h b/src/plugins/generic/tuiotouch/qtuiocursor_p.h
new file mode 100644
index 0000000000..b58ab0fbae
--- /dev/null
+++ b/src/plugins/generic/tuiotouch/qtuiocursor_p.h
@@ -0,0 +1,102 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Robin Burchell <robin.burchell@viroteck.net>
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QTUIOCURSOR_P_H
+#define QTUIOCURSOR_P_H
+
+#include <Qt>
+
+QT_BEGIN_NAMESPACE
+
+class QTuioCursor
+{
+public:
+ QTuioCursor(int id = -1)
+ : m_id(id)
+ , m_x(0)
+ , m_y(0)
+ , m_vx(0)
+ , m_vy(0)
+ , m_acceleration(0)
+ , m_state(Qt::TouchPointPressed)
+ {
+ }
+
+ int id() const { return m_id; }
+
+ void setX(float x)
+ {
+ if (state() == Qt::TouchPointStationary &&
+ !qFuzzyCompare(m_x + 2.0, x + 2.0)) { // +2 because 1 is a valid value, and qFuzzyCompare can't cope with 0.0
+ setState(Qt::TouchPointMoved);
+ }
+ m_x = x;
+ }
+ float x() const { return m_x; }
+
+ void setY(float y)
+ {
+ if (state() == Qt::TouchPointStationary &&
+ !qFuzzyCompare(m_y + 2.0, y + 2.0)) { // +2 because 1 is a valid value, and qFuzzyCompare can't cope with 0.0
+ setState(Qt::TouchPointMoved);
+ }
+ m_y = y;
+ }
+ float y() const { return m_y; }
+
+ void setVX(float vx) { m_vx = vx; }
+ float vx() const { return m_vx; }
+
+ void setVY(float vy) { m_vy = vy; }
+ float vy() const { return m_vy; }
+
+ void setAcceleration(float acceleration) { m_acceleration = acceleration; }
+ float acceleration() const { return m_acceleration; }
+
+ void setState(const Qt::TouchPointState &state) { m_state = state; }
+ Qt::TouchPointState state() const { return m_state; }
+
+private:
+ int m_id;
+ float m_x;
+ float m_y;
+ float m_vx;
+ float m_vy;
+ float m_acceleration;
+ Qt::TouchPointState m_state;
+};
+
+QT_END_NAMESPACE
+
+#endif // QTUIOCURSOR_P_H
diff --git a/src/plugins/generic/tuiotouch/qtuiohandler.cpp b/src/plugins/generic/tuiotouch/qtuiohandler.cpp
new file mode 100644
index 0000000000..cf588afebc
--- /dev/null
+++ b/src/plugins/generic/tuiotouch/qtuiohandler.cpp
@@ -0,0 +1,337 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Robin Burchell <robin.burchell@viroteck.net>
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include <QLoggingCategory>
+#include <QRect>
+#include <QWindow>
+#include <QGuiApplication>
+
+#include <qpa/qwindowsysteminterface.h>
+
+#include "qtuiocursor_p.h"
+#include "qtuiohandler_p.h"
+#include "qoscbundle_p.h"
+
+QT_BEGIN_NAMESPACE
+
+Q_LOGGING_CATEGORY(lcTuioSource, "qt.qpa.tuio.source")
+Q_LOGGING_CATEGORY(lcTuioSet, "qt.qpa.tuio.set")
+
+QTuioHandler::QTuioHandler(const QString &specification)
+ : m_device(new QTouchDevice) // not leaked, QTouchDevice cleans up registered devices itself
+{
+ QStringList args = specification.split(':');
+ int portNumber = 3333;
+ int rotationAngle = 0;
+ bool invertx = false;
+ bool inverty = false;
+
+ for (int i = 0; i < args.count(); ++i) {
+ if (args.at(i).startsWith("udp=")) {
+ QString portString = args.at(i).section('=', 1, 1);
+ portNumber = portString.toInt();
+ } else if (args.at(i).startsWith("tcp=")) {
+ QString portString = args.at(i).section('=', 1, 1);
+ portNumber = portString.toInt();
+ qWarning() << "TCP is not yet supported. Falling back to UDP on " << portNumber;
+ } else if (args.at(i) == "invertx") {
+ invertx = true;
+ } else if (args.at(i) == "inverty") {
+ inverty = true;
+ } else if (args.at(i).startsWith("rotate=")) {
+ QString rotateArg = args.at(i).section('=', 1, 1);
+ int argValue = rotateArg.toInt();
+ switch (argValue) {
+ case 90:
+ case 180:
+ case 270:
+ rotationAngle = argValue;
+ default:
+ break;
+ }
+ }
+ }
+
+ if (rotationAngle)
+ m_transform = QTransform::fromTranslate(0.5, 0.5).rotate(rotationAngle).translate(-0.5, -0.5);
+
+ if (invertx)
+ m_transform *= QTransform::fromTranslate(0.5, 0.5).scale(-1.0, 1.0).translate(-0.5, -0.5);
+
+ if (inverty)
+ m_transform *= QTransform::fromTranslate(0.5, 0.5).scale(1.0, -1.0).translate(-0.5, -0.5);
+
+ m_device->setName("TUIO"); // TODO: multiple based on SOURCE?
+ m_device->setType(QTouchDevice::TouchScreen);
+ m_device->setCapabilities(QTouchDevice::Position |
+ QTouchDevice::Area |
+ QTouchDevice::Velocity |
+ QTouchDevice::NormalizedPosition);
+ QWindowSystemInterface::registerTouchDevice(m_device);
+
+ if (!m_socket.bind(QHostAddress::Any, portNumber)) {
+ qWarning() << "Failed to bind TUIO socket: " << m_socket.errorString();
+ return;
+ }
+
+ connect(&m_socket, &QUdpSocket::readyRead, this, &QTuioHandler::processPackets);
+}
+
+QTuioHandler::~QTuioHandler()
+{
+}
+
+void QTuioHandler::processPackets()
+{
+ while (m_socket.hasPendingDatagrams()) {
+ QByteArray datagram;
+ datagram.resize(m_socket.pendingDatagramSize());
+ QHostAddress sender;
+ quint16 senderPort;
+
+ qint64 size = m_socket.readDatagram(datagram.data(), datagram.size(),
+ &sender, &senderPort);
+
+ if (size == -1)
+ continue;
+
+ if (size != datagram.size())
+ datagram.resize(size);
+
+ QOscBundle bundle(datagram);
+ if (!bundle.isValid())
+ continue;
+
+ // "A typical TUIO bundle will contain an initial ALIVE message,
+ // followed by an arbitrary number of SET messages that can fit into the
+ // actual bundle capacity and a concluding FSEQ message. A minimal TUIO
+ // bundle needs to contain at least the compulsory ALIVE and FSEQ
+ // messages. The FSEQ frame ID is incremented for each delivered bundle,
+ // while redundant bundles can be marked using the frame sequence ID
+ // -1."
+ QList<QOscMessage> messages = bundle.messages();
+
+ foreach (const QOscMessage &message, messages) {
+ if (message.addressPattern() != "/tuio/2Dcur") {
+ qWarning() << "Ignoring unknown address pattern " << message.addressPattern();
+ continue;
+ }
+
+ QList<QVariant> arguments = message.arguments();
+ if (arguments.count() == 0) {
+ qWarning() << "Ignoring TUIO message with no arguments";
+ continue;
+ }
+
+ QByteArray messageType = arguments.at(0).toByteArray();
+ if (messageType == "source") {
+ process2DCurSource(message);
+ } else if (messageType == "alive") {
+ process2DCurAlive(message);
+ } else if (messageType == "set") {
+ process2DCurSet(message);
+ } else if (messageType == "fseq") {
+ process2DCurFseq(message);
+ } else {
+ qWarning() << "Ignoring unknown TUIO message type: " << messageType;
+ continue;
+ }
+ }
+ }
+}
+
+void QTuioHandler::process2DCurSource(const QOscMessage &message)
+{
+ QList<QVariant> arguments = message.arguments();
+ if (arguments.count() != 2) {
+ qWarning() << "Ignoring malformed TUIO source message: " << arguments.count();
+ return;
+ }
+
+ if (QMetaType::Type(arguments.at(1).type()) != QMetaType::QByteArray) {
+ qWarning() << "Ignoring malformed TUIO source message (bad argument type)";
+ return;
+ }
+
+ qCDebug(lcTuioSource) << "Got TUIO source message from: " << arguments.at(1).toByteArray();
+}
+
+void QTuioHandler::process2DCurAlive(const QOscMessage &message)
+{
+ QList<QVariant> arguments = message.arguments();
+
+ // delta the notified cursors that are active, against the ones we already
+ // know of.
+ //
+ // TBD: right now we're assuming one 2Dcur alive message corresponds to a
+ // new data source from the input. is this correct, or do we need to store
+ // changes and only process the deltas on fseq?
+ QMap<int, QTuioCursor> oldActiveCursors = m_activeCursors;
+ QMap<int, QTuioCursor> newActiveCursors;
+
+ for (int i = 1; i < arguments.count(); ++i) {
+ if (QMetaType::Type(arguments.at(i).type()) != QMetaType::Int) {
+ qWarning() << "Ignoring malformed TUIO alive message (bad argument on position" << i << arguments << ")";
+ return;
+ }
+
+ int cursorId = arguments.at(i).toInt();
+ if (!oldActiveCursors.contains(cursorId)) {
+ // newly active
+ QTuioCursor cursor(cursorId);
+ cursor.setState(Qt::TouchPointPressed);
+ newActiveCursors.insert(cursorId, cursor);
+ } else {
+ // we already know about it, remove it so it isn't marked as released
+ QTuioCursor cursor = oldActiveCursors.value(cursorId);
+ cursor.setState(Qt::TouchPointStationary); // position change in SET will update if needed
+ newActiveCursors.insert(cursorId, cursor);
+ oldActiveCursors.remove(cursorId);
+ }
+ }
+
+ // anything left is dead now
+ QMap<int, QTuioCursor>::ConstIterator it = oldActiveCursors.constBegin();
+
+ // deadCursors should be cleared from the last FSEQ now
+ m_deadCursors.reserve(oldActiveCursors.size());
+
+ // TODO: there could be an issue of resource exhaustion here if FSEQ isn't
+ // sent in a timely fashion. we should probably track message counts and
+ // force-flush if we get too many built up.
+ while (it != oldActiveCursors.constEnd()) {
+ m_deadCursors.append(it.value());
+ ++it;
+ }
+
+ m_activeCursors = newActiveCursors;
+}
+
+void QTuioHandler::process2DCurSet(const QOscMessage &message)
+{
+ QList<QVariant> arguments = message.arguments();
+ if (arguments.count() < 7) {
+ qWarning() << "Ignoring malformed TUIO set message with too few arguments: " << arguments.count();
+ return;
+ }
+
+ if (QMetaType::Type(arguments.at(1).type()) != QMetaType::Int ||
+ QMetaType::Type(arguments.at(2).type()) != QMetaType::Float ||
+ QMetaType::Type(arguments.at(3).type()) != QMetaType::Float ||
+ QMetaType::Type(arguments.at(4).type()) != QMetaType::Float ||
+ QMetaType::Type(arguments.at(5).type()) != QMetaType::Float ||
+ QMetaType::Type(arguments.at(6).type()) != QMetaType::Float
+ ) {
+ qWarning() << "Ignoring malformed TUIO set message with bad types: " << arguments;
+ return;
+ }
+
+ int cursorId = arguments.at(1).toInt();
+ float x = arguments.at(2).toFloat();
+ float y = arguments.at(3).toFloat();
+ float vx = arguments.at(4).toFloat();
+ float vy = arguments.at(5).toFloat();
+ float acceleration = arguments.at(6).toFloat();
+
+ QMap<int, QTuioCursor>::Iterator it = m_activeCursors.find(cursorId);
+ if (it == m_activeCursors.end()) {
+ qWarning() << "Ignoring malformed TUIO set for nonexistent cursor " << cursorId;
+ return;
+ }
+
+ qCDebug(lcTuioSet) << "Processing SET for " << cursorId << " x: " << x << y << vx << vy << acceleration;
+ QTuioCursor &cur = *it;
+ cur.setX(x);
+ cur.setY(y);
+ cur.setVX(vx);
+ cur.setVY(vy);
+ cur.setAcceleration(acceleration);
+}
+
+QWindowSystemInterface::TouchPoint QTuioHandler::cursorToTouchPoint(const QTuioCursor &tc, QWindow *win)
+{
+ QWindowSystemInterface::TouchPoint tp;
+ tp.id = tc.id();
+ tp.pressure = 1.0f;
+
+ tp.normalPosition = QPointF(tc.x(), tc.y());
+
+ if (!m_transform.isIdentity())
+ tp.normalPosition = m_transform.map(tp.normalPosition);
+
+ tp.state = tc.state();
+ tp.area = QRectF(0, 0, 1, 1);
+
+ // we map the touch to the size of the window. we do this, because frankly,
+ // trying to figure out which part of the screen to hit in order to press an
+ // element on the UI is pretty tricky when one is not using an overlay-style
+ // TUIO device.
+ //
+ // in the future, it might make sense to make this choice optional,
+ // dependent on the spec.
+ QPointF relPos = QPointF(win->size().width() * tp.normalPosition.x(), win->size().height() * tp.normalPosition.y());
+ QPointF delta = relPos - relPos.toPoint();
+ tp.area.moveCenter(win->mapToGlobal(relPos.toPoint()) + delta);
+ tp.velocity = QVector2D(win->size().width() * tc.vx(), win->size().height() * tc.vy());
+ return tp;
+}
+
+
+void QTuioHandler::process2DCurFseq(const QOscMessage &message)
+{
+ Q_UNUSED(message); // TODO: do we need to do anything with the frame id?
+
+ QWindow *win = QGuiApplication::focusWindow();
+ if (!win)
+ return;
+
+ QList<QWindowSystemInterface::TouchPoint> tpl;
+
+ foreach (const QTuioCursor &tc, m_activeCursors) {
+ QWindowSystemInterface::TouchPoint tp = cursorToTouchPoint(tc, win);
+ tpl.append(tp);
+ }
+
+ foreach (const QTuioCursor &tc, m_deadCursors) {
+ QWindowSystemInterface::TouchPoint tp = cursorToTouchPoint(tc, win);
+ tp.state = Qt::TouchPointReleased;
+ tpl.append(tp);
+ }
+ QWindowSystemInterface::handleTouchEvent(win, m_device, tpl);
+
+ m_deadCursors.clear();
+}
+
+QT_END_NAMESPACE
+
diff --git a/src/plugins/generic/tuiotouch/qtuiohandler_p.h b/src/plugins/generic/tuiotouch/qtuiohandler_p.h
new file mode 100644
index 0000000000..99111fec8b
--- /dev/null
+++ b/src/plugins/generic/tuiotouch/qtuiohandler_p.h
@@ -0,0 +1,79 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Robin Burchell <robin.burchell@viroteck.net>
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtCore module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QTUIOHANDLER_P_H
+#define QTUIOHANDLER_P_H
+
+#include <QObject>
+#include <QMap>
+#include <QUdpSocket>
+#include <QVector>
+#include <QTransform>
+
+#include <qpa/qwindowsysteminterface.h>
+
+QT_BEGIN_NAMESPACE
+
+class QTouchDevice;
+class QOscMessage;
+class QTuioCursor;
+
+class QTuioHandler : public QObject
+{
+ Q_OBJECT
+
+public:
+ explicit QTuioHandler(const QString &specification);
+ virtual ~QTuioHandler();
+
+private slots:
+ void processPackets();
+ void process2DCurSource(const QOscMessage &message);
+ void process2DCurAlive(const QOscMessage &message);
+ void process2DCurSet(const QOscMessage &message);
+ void process2DCurFseq(const QOscMessage &message);
+
+private:
+ QWindowSystemInterface::TouchPoint cursorToTouchPoint(const QTuioCursor &tc, QWindow *win);
+
+ QTouchDevice *m_device;
+ QUdpSocket m_socket;
+ QMap<int, QTuioCursor> m_activeCursors;
+ QVector<QTuioCursor> m_deadCursors;
+ QTransform m_transform;
+};
+
+QT_END_NAMESPACE
+
+#endif // QTUIOHANDLER_P_H
diff --git a/src/plugins/generic/tuiotouch/tuiotouch.json b/src/plugins/generic/tuiotouch/tuiotouch.json
new file mode 100644
index 0000000000..bdbbcd203a
--- /dev/null
+++ b/src/plugins/generic/tuiotouch/tuiotouch.json
@@ -0,0 +1,3 @@
+{
+ "Keys": [ "TuioTouch" ]
+}
diff --git a/src/plugins/generic/tuiotouch/tuiotouch.pro b/src/plugins/generic/tuiotouch/tuiotouch.pro
new file mode 100644
index 0000000000..5e53403f5b
--- /dev/null
+++ b/src/plugins/generic/tuiotouch/tuiotouch.pro
@@ -0,0 +1,26 @@
+TARGET = qtuiotouchplugin
+
+PLUGIN_TYPE = generic
+PLUGIN_EXTENDS = -
+PLUGIN_CLASS_NAME = QTuioTouchPlugin
+load(qt_plugin)
+
+QT += \
+ core-private \
+ gui-private \
+ network
+
+SOURCES += \
+ main.cpp \
+ qoscbundle.cpp \
+ qoscmessage.cpp \
+ qtuiohandler.cpp
+
+HEADERS += \
+ qoscbundle_p.h \
+ qoscmessage_p.h \
+ qtuiohandler_p.h \
+ qtuiocursor_p.h
+
+OTHER_FILES += \
+ tuiotouch.json
diff --git a/src/plugins/imageformats/gif/main.h b/src/plugins/imageformats/gif/main.h
index 733fad95cd..ac91fb79f6 100644
--- a/src/plugins/imageformats/gif/main.h
+++ b/src/plugins/imageformats/gif/main.h
@@ -51,8 +51,8 @@ public:
QGifPlugin();
~QGifPlugin();
- Capabilities capabilities(QIODevice *device, const QByteArray &format) const;
- QImageIOHandler *create(QIODevice *device, const QByteArray &format = QByteArray()) const;
+ Capabilities capabilities(QIODevice *device, const QByteArray &format) const Q_DECL_OVERRIDE;
+ QImageIOHandler *create(QIODevice *device, const QByteArray &format = QByteArray()) const Q_DECL_OVERRIDE;
};
QT_END_NAMESPACE
diff --git a/src/plugins/imageformats/ico/main.h b/src/plugins/imageformats/ico/main.h
index 30534cc681..dadceb4445 100644
--- a/src/plugins/imageformats/ico/main.h
+++ b/src/plugins/imageformats/ico/main.h
@@ -48,8 +48,8 @@ class QICOPlugin : public QImageIOPlugin
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QImageIOHandlerFactoryInterface" FILE "ico.json")
public:
- Capabilities capabilities(QIODevice *device, const QByteArray &format) const;
- QImageIOHandler *create(QIODevice *device, const QByteArray &format = QByteArray()) const;
+ Capabilities capabilities(QIODevice *device, const QByteArray &format) const Q_DECL_OVERRIDE;
+ QImageIOHandler *create(QIODevice *device, const QByteArray &format = QByteArray()) const Q_DECL_OVERRIDE;
};
QT_END_NAMESPACE
diff --git a/src/plugins/imageformats/ico/qicohandler.h b/src/plugins/imageformats/ico/qicohandler.h
index a470e12b5e..dbec0d3ce8 100644
--- a/src/plugins/imageformats/ico/qicohandler.h
+++ b/src/plugins/imageformats/ico/qicohandler.h
@@ -44,20 +44,20 @@ public:
QtIcoHandler(QIODevice *device);
virtual ~QtIcoHandler();
- bool canRead() const;
- bool read(QImage *image);
- bool write(const QImage &image);
+ bool canRead() const Q_DECL_OVERRIDE;
+ bool read(QImage *image) Q_DECL_OVERRIDE;
+ bool write(const QImage &image) Q_DECL_OVERRIDE;
- QByteArray name() const;
+ QByteArray name() const Q_DECL_OVERRIDE;
- int imageCount() const;
- bool jumpToImage(int imageNumber);
- bool jumpToNextImage();
+ int imageCount() const Q_DECL_OVERRIDE;
+ bool jumpToImage(int imageNumber) Q_DECL_OVERRIDE;
+ bool jumpToNextImage() Q_DECL_OVERRIDE;
static bool canRead(QIODevice *device);
- bool supportsOption(ImageOption option) const;
- QVariant option(ImageOption option) const;
+ bool supportsOption(ImageOption option) const Q_DECL_OVERRIDE;
+ QVariant option(ImageOption option) const Q_DECL_OVERRIDE;
private:
int m_currentIconIndex;
diff --git a/src/plugins/imageformats/jpeg/main.h b/src/plugins/imageformats/jpeg/main.h
index 2226241747..a6d9e95371 100644
--- a/src/plugins/imageformats/jpeg/main.h
+++ b/src/plugins/imageformats/jpeg/main.h
@@ -47,8 +47,8 @@ class QJpegPlugin : public QImageIOPlugin
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QImageIOHandlerFactoryInterface" FILE "jpeg.json")
public:
- Capabilities capabilities(QIODevice *device, const QByteArray &format) const;
- QImageIOHandler *create(QIODevice *device, const QByteArray &format = QByteArray()) const;
+ Capabilities capabilities(QIODevice *device, const QByteArray &format) const Q_DECL_OVERRIDE;
+ QImageIOHandler *create(QIODevice *device, const QByteArray &format = QByteArray()) const Q_DECL_OVERRIDE;
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforminputcontexts/compose/main.cpp b/src/plugins/platforminputcontexts/compose/main.cpp
index ee0a147dd4..2fdc3b37ef 100644
--- a/src/plugins/platforminputcontexts/compose/main.cpp
+++ b/src/plugins/platforminputcontexts/compose/main.cpp
@@ -45,7 +45,7 @@ class QComposePlatformInputContextPlugin : public QPlatformInputContextPlugin
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QPlatformInputContextFactoryInterface" FILE "compose.json")
public:
- QComposeInputContext *create(const QString &, const QStringList &);
+ QComposeInputContext *create(const QString &, const QStringList &) Q_DECL_OVERRIDE;
};
QComposeInputContext *QComposePlatformInputContextPlugin::create(const QString &system, const QStringList &paramList)
diff --git a/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontext.h b/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontext.h
index 897b164b3b..d2e80bebc2 100644
--- a/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontext.h
+++ b/src/plugins/platforminputcontexts/compose/qcomposeplatforminputcontext.h
@@ -52,11 +52,11 @@ public:
QComposeInputContext();
~QComposeInputContext();
- bool isValid() const;
- void setFocusObject(QObject *object);
- void reset();
- void update(Qt::InputMethodQueries);
- bool filterEvent(const QEvent *event);
+ bool isValid() const Q_DECL_OVERRIDE;
+ void setFocusObject(QObject *object) Q_DECL_OVERRIDE;
+ void reset() Q_DECL_OVERRIDE;
+ void update(Qt::InputMethodQueries) Q_DECL_OVERRIDE;
+ bool filterEvent(const QEvent *event) Q_DECL_OVERRIDE;
protected:
void clearComposeBuffer();
diff --git a/src/plugins/platforminputcontexts/ibus/main.cpp b/src/plugins/platforminputcontexts/ibus/main.cpp
index 8460b62a4f..7b62e2ea94 100644
--- a/src/plugins/platforminputcontexts/ibus/main.cpp
+++ b/src/plugins/platforminputcontexts/ibus/main.cpp
@@ -45,7 +45,7 @@ class QIbusPlatformInputContextPlugin : public QPlatformInputContextPlugin
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QPlatformInputContextFactoryInterface" FILE "ibus.json")
public:
- QIBusPlatformInputContext *create(const QString&, const QStringList&);
+ QIBusPlatformInputContext *create(const QString&, const QStringList&) Q_DECL_OVERRIDE;
};
QIBusPlatformInputContext *QIbusPlatformInputContextPlugin::create(const QString& system, const QStringList& paramList)
diff --git a/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.h b/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.h
index dda24aca08..8ed69eb980 100644
--- a/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.h
+++ b/src/plugins/platforminputcontexts/ibus/qibusplatforminputcontext.h
@@ -47,13 +47,13 @@ public:
QIBusPlatformInputContext();
~QIBusPlatformInputContext();
- bool isValid() const;
- void setFocusObject(QObject *object);
+ bool isValid() const Q_DECL_OVERRIDE;
+ void setFocusObject(QObject *object) Q_DECL_OVERRIDE;
- void invokeAction(QInputMethod::Action a, int x);
- void reset();
- void commit();
- void update(Qt::InputMethodQueries);
+ void invokeAction(QInputMethod::Action a, int x) Q_DECL_OVERRIDE;
+ void reset() Q_DECL_OVERRIDE;
+ void commit() Q_DECL_OVERRIDE;
+ void update(Qt::InputMethodQueries) Q_DECL_OVERRIDE;
Q_INVOKABLE bool x11FilterEvent(uint keyval, uint keycode, uint state, bool press);
diff --git a/src/plugins/platforms/android/androidjniinput.cpp b/src/plugins/platforms/android/androidjniinput.cpp
index 3a80f9437a..59125ac0d2 100644
--- a/src/plugins/platforms/android/androidjniinput.cpp
+++ b/src/plugins/platforms/android/androidjniinput.cpp
@@ -155,7 +155,7 @@ namespace QtAndroidInput
static void longPress(JNIEnv */*env*/, jobject /*thiz*/, jint /*winId*/, jint x, jint y)
{
//### TODO: add proper API for Qt 5.2
- static bool rightMouseFromLongPress = qgetenv("QT_NECESSITAS_COMPATIBILITY_LONG_PRESS").toInt();
+ static bool rightMouseFromLongPress = qEnvironmentVariableIntValue("QT_NECESSITAS_COMPATIBILITY_LONG_PRESS");
if (!rightMouseFromLongPress)
return;
m_ignoreMouseEvents = true;
diff --git a/src/plugins/platforms/android/androidjnimain.cpp b/src/plugins/platforms/android/androidjnimain.cpp
index 1c157c79c3..ab653860f3 100644
--- a/src/plugins/platforms/android/androidjnimain.cpp
+++ b/src/plugins/platforms/android/androidjnimain.cpp
@@ -410,7 +410,7 @@ namespace QtAndroid
bool blockEventLoopsWhenSuspended()
{
- static bool block = qgetenv("QT_BLOCK_EVENT_LOOPS_WHEN_SUSPENDED").toInt();
+ static bool block = qEnvironmentVariableIntValue("QT_BLOCK_EVENT_LOOPS_WHEN_SUSPENDED");
return block;
}
diff --git a/src/plugins/platforms/android/androidjnimenu.cpp b/src/plugins/platforms/android/androidjnimenu.cpp
index 23182c6e57..36c349f6b4 100644
--- a/src/plugins/platforms/android/androidjnimenu.cpp
+++ b/src/plugins/platforms/android/androidjnimenu.cpp
@@ -199,7 +199,7 @@ namespace QtAndroidMenu
env->DeleteLocalRef(env->CallObjectMethod(menuItem, setEnabledMenuItemMethodID, enabled));
if (!icon.isNull()) { // isNull() only checks the d pointer, not the actual image data.
- int sz = qMax(36, qgetenv("QT_ANDROID_APP_ICON_SIZE").toInt());
+ int sz = qMax(36, qEnvironmentVariableIntValue("QT_ANDROID_APP_ICON_SIZE"));
QImage img = icon.pixmap(QSize(sz,sz),
enabled
? QIcon::Normal
diff --git a/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp b/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp
index 06303cdd10..2010c19bd4 100644
--- a/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp
+++ b/src/plugins/platforms/android/qandroidassetsfileenginehandler.cpp
@@ -254,7 +254,7 @@ private:
AndroidAssetsFileEngineHandler::AndroidAssetsFileEngineHandler()
- : m_assetsCache(std::max(5, qgetenv("QT_ANDROID_MAX_ASSETS_CACHE_SIZE").toInt()))
+ : m_assetsCache(std::max(5, qEnvironmentVariableIntValue("QT_ANDROID_MAX_ASSETS_CACHE_SIZE")))
, m_hasPrepopulatedCache(false)
, m_hasTriedPrepopulatingCache(false)
{
diff --git a/src/plugins/platforms/android/qandroidplatformscreen.cpp b/src/plugins/platforms/android/qandroidplatformscreen.cpp
index 092ade2e4a..a4e82a29ef 100644
--- a/src/plugins/platforms/android/qandroidplatformscreen.cpp
+++ b/src/plugins/platforms/android/qandroidplatformscreen.cpp
@@ -85,7 +85,7 @@ QAndroidPlatformScreen::QAndroidPlatformScreen():QObject(),QPlatformScreen()
m_size = QSize(QAndroidPlatformIntegration::m_defaultScreenWidth, QAndroidPlatformIntegration::m_defaultScreenHeight);
// Raster only apps should set QT_ANDROID_RASTER_IMAGE_DEPTH to 16
// is way much faster than 32
- if (qgetenv("QT_ANDROID_RASTER_IMAGE_DEPTH").toInt() == 16) {
+ if (qEnvironmentVariableIntValue("QT_ANDROID_RASTER_IMAGE_DEPTH") == 16) {
m_format = QImage::Format_RGB16;
m_depth = 16;
} else {
diff --git a/src/plugins/platforms/android/qandroidplatformtheme.cpp b/src/plugins/platforms/android/qandroidplatformtheme.cpp
index 35eb282994..f1ddcefef6 100644
--- a/src/plugins/platforms/android/qandroidplatformtheme.cpp
+++ b/src/plugins/platforms/android/qandroidplatformtheme.cpp
@@ -450,7 +450,7 @@ QVariant QAndroidPlatformTheme::themeHint(ThemeHint hint) const
{
switch (hint) {
case StyleNames:
- if (qgetenv("QT_USE_ANDROID_NATIVE_STYLE").toInt()
+ if (qEnvironmentVariableIntValue("QT_USE_ANDROID_NATIVE_STYLE")
&& m_androidStyleData) {
return QStringList("android");
}
@@ -458,7 +458,7 @@ QVariant QAndroidPlatformTheme::themeHint(ThemeHint hint) const
case MouseDoubleClickDistance:
{
- int minimumDistance = qgetenv("QT_ANDROID_MINIMUM_MOUSE_DOUBLE_CLICK_DISTANCE").toInt();
+ int minimumDistance = qEnvironmentVariableIntValue("QT_ANDROID_MINIMUM_MOUSE_DOUBLE_CLICK_DISTANCE");
int ret = minimumDistance;
QAndroidPlatformIntegration *platformIntegration
@@ -502,7 +502,7 @@ QString QAndroidPlatformTheme::standardButtonText(int button) const
bool QAndroidPlatformTheme::usePlatformNativeDialog(QPlatformTheme::DialogType type) const
{
if (type == MessageDialog)
- return qgetenv("QT_USE_ANDROID_NATIVE_DIALOGS").toInt() == 1;
+ return qEnvironmentVariableIntValue("QT_USE_ANDROID_NATIVE_DIALOGS") == 1;
return false;
}
diff --git a/src/plugins/platforms/cocoa/qcocoaintegration.mm b/src/plugins/platforms/cocoa/qcocoaintegration.mm
index 72bd09625a..180cb23669 100644
--- a/src/plugins/platforms/cocoa/qcocoaintegration.mm
+++ b/src/plugins/platforms/cocoa/qcocoaintegration.mm
@@ -337,7 +337,7 @@ QCocoaIntegration::~QCocoaIntegration()
// Delete screens in reverse order to avoid crash in case of multiple screens
while (!mScreens.isEmpty()) {
- delete mScreens.takeLast();
+ destroyScreen(mScreens.takeLast());
}
clearToolbars();
@@ -397,7 +397,7 @@ void QCocoaIntegration::updateScreens()
// Now the leftovers in remainingScreens are no longer current, so we can delete them.
foreach (QCocoaScreen* screen, remainingScreens) {
mScreens.removeOne(screen);
- delete screen;
+ destroyScreen(screen);
}
// All screens in mScreens are siblings, because we ignored the mirrors.
foreach (QCocoaScreen* screen, mScreens)
diff --git a/src/plugins/platforms/cocoa/qcocoasystemtrayicon.h b/src/plugins/platforms/cocoa/qcocoasystemtrayicon.h
index c527c478ff..c426cacc35 100755
--- a/src/plugins/platforms/cocoa/qcocoasystemtrayicon.h
+++ b/src/plugins/platforms/cocoa/qcocoasystemtrayicon.h
@@ -57,7 +57,7 @@ public:
virtual void updateToolTip(const QString &toolTip);
virtual void updateMenu(QPlatformMenu *menu);
virtual QRect geometry() const;
- virtual void showMessage(const QString &msg, const QString &title,
+ virtual void showMessage(const QString &title, const QString &msg,
const QIcon& icon, MessageIcon iconType, int secs);
virtual bool isSystemTrayAvailable() const;
diff --git a/src/plugins/platforms/cocoa/qnsview.h b/src/plugins/platforms/cocoa/qnsview.h
index fa71ab4086..c36634db74 100644
--- a/src/plugins/platforms/cocoa/qnsview.h
+++ b/src/plugins/platforms/cocoa/qnsview.h
@@ -74,6 +74,7 @@ Q_FORWARD_DECLARE_OBJC_CLASS(QT_MANGLE_NAMESPACE(QNSViewMouseMoveHelper));
NSString *m_inputSource;
QT_MANGLE_NAMESPACE(QNSViewMouseMoveHelper) *m_mouseMoveHelper;
bool m_resendKeyEvent;
+ bool m_scrolling;
}
- (id)init;
diff --git a/src/plugins/platforms/cocoa/qnsview.mm b/src/plugins/platforms/cocoa/qnsview.mm
index 771b464805..9c24851115 100644
--- a/src/plugins/platforms/cocoa/qnsview.mm
+++ b/src/plugins/platforms/cocoa/qnsview.mm
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the plugins of the Qt Toolkit.
@@ -160,6 +160,7 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil;
m_inputSource = 0;
m_mouseMoveHelper = [[QT_MANGLE_NAMESPACE(QNSViewMouseMoveHelper) alloc] initWithView:self];
m_resendKeyEvent = false;
+ m_scrolling = false;
if (!touchDevice) {
touchDevice = new QTouchDevice;
@@ -415,8 +416,8 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil;
&& [notificationName isEqualToString:_q_NSWindowDidChangeOcclusionStateNotification]) {
#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_9
// ### HACK Remove the enum declaration, the warning disabling and the cast further down once 10.8 is unsupported
-#pragma clang diagnostic push
-#pragma clang diagnostic ignored "-Wobjc-method-access"
+QT_WARNING_PUSH
+QT_WARNING_DISABLE_CLANG("-Wobjc-method-access")
enum { NSWindowOcclusionStateVisible = 1UL << 1 };
#endif
if ((NSUInteger)[self.window occlusionState] & NSWindowOcclusionStateVisible) {
@@ -431,7 +432,7 @@ static NSString *_q_NSWindowDidChangeOcclusionStateNotification = nil;
m_platformWindow->obscureWindow();
}
#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_9
-#pragma clang diagnostic pop
+QT_WARNING_POP
#endif
} else if (notificationName == NSWindowDidChangeScreenNotification) {
if (m_window) {
@@ -1265,12 +1266,10 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent)
{
if (m_window->flags() & Qt::WindowTransparentForInput)
return [super scrollWheel:theEvent];
- const EventRef carbonEvent = (EventRef)[theEvent eventRef];
- const UInt32 carbonEventKind = carbonEvent ? ::GetEventKind(carbonEvent) : 0;
- const bool scrollEvent = carbonEventKind == kEventMouseScroll;
QPoint angleDelta;
- if (scrollEvent) {
+ Qt::MouseEventSource source = Qt::MouseEventNotSynthesized;
+ if ([theEvent hasPreciseScrollingDeltas]) {
// The mouse device contains pixel scroll wheel support (Mighty Mouse, Trackpad).
// Since deviceDelta is delivered as pixels rather than degrees, we need to
// convert from pixels to degrees in a sensible manner.
@@ -1279,8 +1278,8 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent)
const int pixelsToDegrees = 2; // 8 * 1/4
angleDelta.setX([theEvent scrollingDeltaX] * pixelsToDegrees);
angleDelta.setY([theEvent scrollingDeltaY] * pixelsToDegrees);
+ source = Qt::MouseEventSynthesizedBySystem;
} else {
- // carbonEventKind == kEventMouseWheelMoved
// Remove acceleration, and use either -120 or 120 as delta:
angleDelta.setX(qBound(-120, int([theEvent deltaX] * 10000), 120));
angleDelta.setY(qBound(-120, int([theEvent deltaY] * 10000), 120));
@@ -1321,19 +1320,23 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent)
#if MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_X_VERSION_10_8
if (QSysInfo::QSysInfo::MacintoshVersion >= QSysInfo::MV_10_8) {
// On 10.8 and above, MayBegin is likely to happen. We treat it the same as an actual begin.
- if (phase == NSEventPhaseMayBegin)
+ if (phase == NSEventPhaseMayBegin) {
+ m_scrolling = true;
ph = Qt::ScrollBegin;
- } else
+ }
+ }
#endif
- if (phase == NSEventPhaseBegan) {
- // On 10.7, MayBegin will not happen, so Began is the actual beginning.
+ if (phase == NSEventPhaseBegan) {
+ // If MayBegin did not happen, Began is the actual beginning.
+ if (!m_scrolling)
ph = Qt::ScrollBegin;
- }
- if (phase == NSEventPhaseEnded || phase == NSEventPhaseCancelled) {
+ m_scrolling = true;
+ } else if (phase == NSEventPhaseEnded || phase == NSEventPhaseCancelled) {
ph = Qt::ScrollEnd;
+ m_scrolling = false;
}
- QWindowSystemInterface::handleWheelEvent(m_window, qt_timestamp, qt_windowPoint, qt_screenPoint, pixelDelta, angleDelta, currentWheelModifiers, ph);
+ QWindowSystemInterface::handleWheelEvent(m_window, qt_timestamp, qt_windowPoint, qt_screenPoint, pixelDelta, angleDelta, currentWheelModifiers, ph, source);
}
#endif //QT_NO_WHEELEVENT
@@ -1419,7 +1422,7 @@ static QTabletEvent::TabletDevice wacomTabletDevice(NSEvent *theEvent)
if (m_sendKeyEvent && m_composingText.isEmpty())
QWindowSystemInterface::handleExtendedKeyEvent(focusWindow, timestamp, QEvent::Type(eventType), keyCode, modifiers,
- nativeScanCode, nativeVirtualKey, nativeModifiers, text, [nsevent isARepeat]);
+ nativeScanCode, nativeVirtualKey, nativeModifiers, text, [nsevent isARepeat], false);
m_sendKeyEvent = false;
m_resendKeyEvent = false;
diff --git a/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp b/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp
index a86bb0ee04..8c70f70edd 100644
--- a/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp
+++ b/src/plugins/platforms/direct2d/qwindowsdirect2dpaintengine.cpp
@@ -923,7 +923,11 @@ public:
static const char keyC[] = "HKEY_LOCAL_MACHINE\\Software\\Microsoft\\Windows NT\\CurrentVersion\\FontSubstitutes";
const QString familyName = QString::fromWCharArray(lf.lfFaceName);
const QString nameSubstitute = QSettings(QLatin1String(keyC), QSettings::NativeFormat).value(familyName, familyName).toString();
- memcpy(lf.lfFaceName, nameSubstitute.utf16(), sizeof(wchar_t) * qMin(nameSubstitute.length() + 1, LF_FACESIZE));
+ if (nameSubstitute != familyName) {
+ const int nameSubstituteLength = qMin(nameSubstitute.length(), LF_FACESIZE - 1);
+ memcpy(lf.lfFaceName, nameSubstitute.utf16(), nameSubstituteLength * sizeof(wchar_t));
+ lf.lfFaceName[nameSubstituteLength] = 0;
+ }
ComPtr<IDWriteFont> dwriteFont;
HRESULT hr = QWindowsDirect2DContext::instance()->dwriteGdiInterop()->CreateFontFromLOGFONT(&lf, &dwriteFont);
diff --git a/src/plugins/platforms/eglfs/deviceintegration/deviceintegration.pro b/src/plugins/platforms/eglfs/deviceintegration/deviceintegration.pro
new file mode 100644
index 0000000000..d8ce385636
--- /dev/null
+++ b/src/plugins/platforms/eglfs/deviceintegration/deviceintegration.pro
@@ -0,0 +1,4 @@
+TEMPLATE = subdirs
+
+contains(QT_CONFIG, egl_x11): SUBDIRS += eglfs_x11
+contains(QT_CONFIG, kms): SUBDIRS += eglfs_kms
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/eglfs_kms.json b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/eglfs_kms.json
new file mode 100644
index 0000000000..70fec1cacf
--- /dev/null
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/eglfs_kms.json
@@ -0,0 +1,3 @@
+{
+ "Keys": [ "eglfs_kms" ]
+}
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/eglfs_kms.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/eglfs_kms.pro
new file mode 100644
index 0000000000..f79653127e
--- /dev/null
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/eglfs_kms.pro
@@ -0,0 +1,32 @@
+TARGET = qeglfs-kms-integration
+
+PLUGIN_CLASS_NAME=QEglFSKmsIntegrationPlugin
+PLUGIN_TYPE=egldeviceintegrations
+
+load(qt_plugin)
+
+QT += core-private gui-private platformsupport-private eglfs_device_lib-private
+
+INCLUDEPATH += $$PWD/../..
+
+# Avoid X11 header collision
+DEFINES += MESA_EGL_NO_X11_HEADERS
+
+CONFIG += link_pkgconfig
+PKGCONFIG += libdrm gbm
+
+CONFIG += egl
+QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF
+
+SOURCES += $$PWD/qeglfskmsmain.cpp \
+ $$PWD/qeglfskmsintegration.cpp \
+ $$PWD/qeglfskmsdevice.cpp \
+ $$PWD/qeglfskmsscreen.cpp \
+ $$PWD/qeglfskmscursor.cpp
+
+HEADERS += $$PWD/qeglfskmsintegration.h \
+ $$PWD/qeglfskmsdevice.h \
+ $$PWD/qeglfskmsscreen.h \
+ $$PWD/qeglfskmscursor.h
+
+OTHER_FILES += $$PWD/eglfs_kms.json
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmscursor.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmscursor.cpp
new file mode 100644
index 0000000000..e337e832e2
--- /dev/null
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmscursor.cpp
@@ -0,0 +1,218 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qeglfskmscursor.h"
+#include "qeglfskmsscreen.h"
+#include "qeglfskmsdevice.h"
+
+#include <QtCore/QJsonDocument>
+#include <QtCore/QJsonObject>
+#include <QtCore/QJsonArray>
+#include <QtCore/QLoggingCategory>
+#include <QtGui/QPainter>
+
+#include <xf86drm.h>
+#include <xf86drmMode.h>
+
+#ifndef DRM_CAP_CURSOR_WIDTH
+#define DRM_CAP_CURSOR_WIDTH 0x8
+#endif
+
+#ifndef DRM_CAP_CURSOR_HEIGHT
+#define DRM_CAP_CURSOR_HEIGHT 0x9
+#endif
+
+QT_BEGIN_NAMESPACE
+
+Q_DECLARE_LOGGING_CATEGORY(qLcEglfsKmsDebug)
+
+QEglFSKmsCursor::QEglFSKmsCursor(QEglFSKmsScreen *screen)
+ : m_screen(screen)
+ , m_cursorSize(64, 64) // 64x64 is the old standard size, we now try to query the real size below
+ , m_bo(Q_NULLPTR)
+ , m_cursorImage(0, 0, 0, 0, 0, 0)
+ , m_visible(true)
+{
+ uint64_t width, height;
+ if ((drmGetCap(m_screen->device()->fd(), DRM_CAP_CURSOR_WIDTH, &width) == 0)
+ && (drmGetCap(m_screen->device()->fd(), DRM_CAP_CURSOR_HEIGHT, &height) == 0)) {
+ m_cursorSize.setWidth(width);
+ m_cursorSize.setHeight(height);
+ }
+
+ m_bo = gbm_bo_create(m_screen->device()->device(), m_cursorSize.width(), m_cursorSize.height(),
+ GBM_FORMAT_ARGB8888, GBM_BO_USE_CURSOR_64X64 | GBM_BO_USE_WRITE);
+ if (!m_bo) {
+ qWarning("Could not create buffer for cursor!");
+ } else {
+ initCursorAtlas();
+ }
+
+#ifndef QT_NO_CURSOR
+ QCursor cursor(Qt::ArrowCursor);
+ changeCursor(&cursor, 0);
+#endif
+ setPos(QPoint(0, 0));
+}
+
+QEglFSKmsCursor::~QEglFSKmsCursor()
+{
+ drmModeSetCursor(m_screen->device()->fd(), m_screen->output().crtc_id, 0, 0, 0);
+ drmModeMoveCursor(m_screen->device()->fd(), m_screen->output().crtc_id, 0, 0);
+
+ gbm_bo_destroy(m_bo);
+ m_bo = Q_NULLPTR;
+}
+
+void QEglFSKmsCursor::pointerEvent(const QMouseEvent &event)
+{
+ setPos(event.screenPos().toPoint());
+}
+
+#ifndef QT_NO_CURSOR
+void QEglFSKmsCursor::changeCursor(QCursor *windowCursor, QWindow *window)
+{
+ Q_UNUSED(window);
+
+ if (!m_visible)
+ return;
+
+ const Qt::CursorShape newShape = windowCursor ? windowCursor->shape() : Qt::ArrowCursor;
+ if (newShape == Qt::BitmapCursor) {
+ m_cursorImage.set(windowCursor->pixmap().toImage(),
+ windowCursor->hotSpot().x(),
+ windowCursor->hotSpot().y());
+ } else {
+ // Standard cursor, look up in atlas
+ const int width = m_cursorAtlas.cursorWidth;
+ const int height = m_cursorAtlas.cursorHeight;
+ const qreal ws = (qreal)m_cursorAtlas.cursorWidth / m_cursorAtlas.width;
+ const qreal hs = (qreal)m_cursorAtlas.cursorHeight / m_cursorAtlas.height;
+
+ QRect textureRect(ws * (newShape % m_cursorAtlas.cursorsPerRow) * m_cursorAtlas.width,
+ hs * (newShape / m_cursorAtlas.cursorsPerRow) * m_cursorAtlas.height,
+ width,
+ height);
+ QPoint hotSpot = m_cursorAtlas.hotSpots[newShape];
+ m_cursorImage.set(m_cursorAtlas.image.copy(textureRect),
+ hotSpot.x(),
+ hotSpot.y());
+ }
+
+ if (m_cursorImage.image()->width() > m_cursorSize.width() || m_cursorImage.image()->height() > m_cursorSize.height())
+ qWarning("Cursor larger than %dx%d, cursor will be clipped.", m_cursorSize.width(), m_cursorSize.height());
+
+ QImage cursorImage(m_cursorSize, QImage::Format_ARGB32);
+ cursorImage.fill(Qt::transparent);
+
+ QPainter painter;
+ painter.begin(&cursorImage);
+ painter.drawImage(0, 0, *m_cursorImage.image());
+ painter.end();
+
+ gbm_bo_write(m_bo, cursorImage.constBits(), cursorImage.byteCount());
+
+ uint32_t handle = gbm_bo_get_handle(m_bo).u32;
+ int status = drmModeSetCursor(m_screen->device()->fd(), m_screen->output().crtc_id, handle,
+ m_cursorSize.width(), m_cursorSize.height());
+ if (status != 0)
+ qWarning("Could not set cursor: %d", status);
+}
+#endif // QT_NO_CURSOR
+
+QPoint QEglFSKmsCursor::pos() const
+{
+ return m_pos;
+}
+
+void QEglFSKmsCursor::setPos(const QPoint &pos)
+{
+ QPoint adjustedPos = pos - m_cursorImage.hotspot();
+ int ret = drmModeMoveCursor(m_screen->device()->fd(), m_screen->output().crtc_id, adjustedPos.x(), adjustedPos.y());
+ if (ret == 0) {
+ m_pos = pos;
+ } else {
+ qWarning("Failed to move cursor: %d", ret);
+ }
+}
+
+void QEglFSKmsCursor::initCursorAtlas()
+{
+ static QByteArray json = qgetenv("QT_QPA_EGLFS_CURSOR");
+ if (json.isEmpty())
+ json = ":/cursor.json";
+
+ qCDebug(qLcEglfsKmsDebug) << "Initializing cursor atlas from" << json;
+
+ QFile file(QString::fromUtf8(json));
+ if (!file.open(QFile::ReadOnly)) {
+ drmModeSetCursor(m_screen->device()->fd(), m_screen->output().crtc_id, 0, 0, 0);
+ drmModeMoveCursor(m_screen->device()->fd(), m_screen->output().crtc_id, 0, 0);
+ m_visible = false;
+ return;
+ }
+
+ QJsonDocument doc = QJsonDocument::fromJson(file.readAll());
+ QJsonObject object = doc.object();
+
+ QString atlas = object.value(QLatin1String("image")).toString();
+ Q_ASSERT(!atlas.isEmpty());
+
+ const int cursorsPerRow = object.value(QLatin1String("cursorsPerRow")).toDouble();
+ Q_ASSERT(cursorsPerRow);
+ m_cursorAtlas.cursorsPerRow = cursorsPerRow;
+
+ const QJsonArray hotSpots = object.value(QLatin1String("hotSpots")).toArray();
+ Q_ASSERT(hotSpots.count() == Qt::LastCursor + 1);
+ for (int i = 0; i < hotSpots.count(); i++) {
+ QPoint hotSpot(hotSpots[i].toArray()[0].toDouble(), hotSpots[i].toArray()[1].toDouble());
+ m_cursorAtlas.hotSpots << hotSpot;
+ }
+
+ QImage image = QImage(atlas).convertToFormat(QImage::Format_ARGB32);
+ m_cursorAtlas.cursorWidth = image.width() / m_cursorAtlas.cursorsPerRow;
+ m_cursorAtlas.cursorHeight = image.height() / ((Qt::LastCursor + cursorsPerRow) / cursorsPerRow);
+ m_cursorAtlas.width = image.width();
+ m_cursorAtlas.height = image.height();
+ m_cursorAtlas.image = image;
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmscursor.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmscursor.h
new file mode 100644
index 0000000000..4b07000c35
--- /dev/null
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmscursor.h
@@ -0,0 +1,94 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QEGLFSKMSCURSOR_H
+#define QEGLFSKMSCURSOR_H
+
+#include <qpa/qplatformcursor.h>
+#include <QtCore/QList>
+#include <QtGui/QImage>
+
+#include <gbm.h>
+
+QT_BEGIN_NAMESPACE
+
+class QEglFSKmsScreen;
+
+class QEglFSKmsCursor : public QPlatformCursor
+{
+ Q_OBJECT
+
+public:
+ QEglFSKmsCursor(QEglFSKmsScreen *screen);
+ ~QEglFSKmsCursor();
+
+ // input methods
+ void pointerEvent(const QMouseEvent & event) Q_DECL_OVERRIDE;
+#ifndef QT_NO_CURSOR
+ void changeCursor(QCursor * windowCursor, QWindow * window) Q_DECL_OVERRIDE;
+#endif
+ QPoint pos() const Q_DECL_OVERRIDE;
+ void setPos(const QPoint &pos) Q_DECL_OVERRIDE;
+
+private:
+ void initCursorAtlas();
+
+ QEglFSKmsScreen *m_screen;
+ QSize m_cursorSize;
+ gbm_bo *m_bo;
+ QPoint m_pos;
+ QPlatformCursorImage m_cursorImage;
+ bool m_visible;
+
+ // cursor atlas information
+ struct CursorAtlas {
+ CursorAtlas() : cursorsPerRow(0), cursorWidth(0), cursorHeight(0) { }
+ int cursorsPerRow;
+ int width, height; // width and height of the atlas
+ int cursorWidth, cursorHeight; // width and height of cursors inside the atlas
+ QList<QPoint> hotSpots;
+ QImage image;
+ } m_cursorAtlas;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsdevice.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsdevice.cpp
new file mode 100644
index 0000000000..d8f0f01aff
--- /dev/null
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsdevice.cpp
@@ -0,0 +1,408 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qeglfskmsdevice.h"
+#include "qeglfskmsscreen.h"
+
+#include "qeglfsintegration.h"
+
+#include <QtCore/QLoggingCategory>
+#include <QtCore/private/qcore_unix_p.h>
+#include <QtGui/private/qguiapplication_p.h>
+
+#define ARRAY_LENGTH(a) (sizeof (a) / sizeof (a)[0])
+
+QT_BEGIN_NAMESPACE
+
+Q_DECLARE_LOGGING_CATEGORY(qLcEglfsKmsDebug)
+
+enum OutputConfiguration {
+ OutputConfigOff,
+ OutputConfigPreferred,
+ OutputConfigCurrent,
+ OutputConfigMode,
+ OutputConfigModeline
+};
+
+int QEglFSKmsDevice::crtcForConnector(drmModeResPtr resources, drmModeConnectorPtr connector)
+{
+ for (int i = 0; i < connector->count_encoders; i++) {
+ drmModeEncoderPtr encoder = drmModeGetEncoder(m_dri_fd, connector->encoders[i]);
+ if (!encoder) {
+ qWarning("Failed to get encoder");
+ continue;
+ }
+
+ quint32 possibleCrtcs = encoder->possible_crtcs;
+ drmModeFreeEncoder(encoder);
+
+ for (int j = 0; j < resources->count_crtcs; j++) {
+ bool isPossible = possibleCrtcs & (1 << j);
+ bool isAvailable = !(m_crtc_allocator & 1 << resources->crtcs[j]);
+
+ if (isPossible && isAvailable)
+ return j;
+ }
+ }
+
+ return -1;
+}
+
+static const char * const connector_type_names[] = {
+ "None",
+ "VGA",
+ "DVI",
+ "DVI",
+ "DVI",
+ "Composite",
+ "TV",
+ "LVDS",
+ "CTV",
+ "DIN",
+ "DP",
+ "HDMI",
+ "HDMI",
+ "TV",
+ "eDP",
+};
+
+static QString nameForConnector(const drmModeConnectorPtr connector)
+{
+ QString connectorName = "UNKNOWN";
+
+ if (connector->connector_type < ARRAY_LENGTH(connector_type_names))
+ connectorName = connector_type_names[connector->connector_type];
+
+ connectorName += QString::number(connector->connector_type_id);
+
+ return connectorName;
+}
+
+static bool parseModeline(const QString &s, drmModeModeInfoPtr mode)
+{
+ char hsync[16];
+ char vsync[16];
+ float fclock;
+
+ mode->type = DRM_MODE_TYPE_USERDEF;
+ mode->hskew = 0;
+ mode->vscan = 0;
+ mode->vrefresh = 0;
+ mode->flags = 0;
+
+ if (sscanf(qPrintable(s), "%f %hd %hd %hd %hd %hd %hd %hd %hd %15s %15s",
+ &fclock,
+ &mode->hdisplay,
+ &mode->hsync_start,
+ &mode->hsync_end,
+ &mode->htotal,
+ &mode->vdisplay,
+ &mode->vsync_start,
+ &mode->vsync_end,
+ &mode->vtotal, hsync, vsync) != 11)
+ return false;
+
+ mode->clock = fclock * 1000;
+
+ if (strcmp(hsync, "+hsync") == 0)
+ mode->flags |= DRM_MODE_FLAG_PHSYNC;
+ else if (strcmp(hsync, "-hsync") == 0)
+ mode->flags |= DRM_MODE_FLAG_NHSYNC;
+ else
+ return false;
+
+ if (strcmp(vsync, "+vsync") == 0)
+ mode->flags |= DRM_MODE_FLAG_PVSYNC;
+ else if (strcmp(vsync, "-vsync") == 0)
+ mode->flags |= DRM_MODE_FLAG_NVSYNC;
+ else
+ return false;
+
+ return true;
+}
+
+QEglFSKmsScreen *QEglFSKmsDevice::screenForConnector(drmModeResPtr resources, drmModeConnectorPtr connector, QPoint pos)
+{
+ const QString connectorName = nameForConnector(connector);
+
+ const int crtc = crtcForConnector(resources, connector);
+ if (crtc < 0) {
+ qWarning() << "No usable crtc/encoder pair for connector" << connectorName;
+ return Q_NULLPTR;
+ }
+
+ OutputConfiguration configuration;
+ QSize configurationSize;
+ drmModeModeInfo configurationModeline;
+
+ const QString mode = m_integration->outputSettings().value(connectorName).value("mode", "preferred").toString().toLower();
+ if (mode == "off") {
+ configuration = OutputConfigOff;
+ } else if (mode == "preferred") {
+ configuration = OutputConfigPreferred;
+ } else if (mode == "current") {
+ configuration = OutputConfigCurrent;
+ } else if (sscanf(qPrintable(mode), "%dx%d", &configurationSize.rwidth(), &configurationSize.rheight()) == 2) {
+ configuration = OutputConfigMode;
+ } else if (parseModeline(mode, &configurationModeline)) {
+ configuration = OutputConfigModeline;
+ } else {
+ qWarning("Invalid mode \"%s\" for output %s", qPrintable(mode), qPrintable(connectorName));
+ configuration = OutputConfigPreferred;
+ }
+
+ const uint32_t crtc_id = resources->crtcs[crtc];
+
+ if (configuration == OutputConfigOff) {
+ qCDebug(qLcEglfsKmsDebug) << "Turning off output" << connectorName;
+ drmModeSetCrtc(m_dri_fd, crtc_id, 0, 0, 0, 0, 0, Q_NULLPTR);
+ return Q_NULLPTR;
+ }
+
+ // Get the current mode on the current crtc
+ drmModeModeInfo crtc_mode;
+ memset(&crtc_mode, 0, sizeof crtc_mode);
+ if (drmModeEncoderPtr encoder = drmModeGetEncoder(m_dri_fd, connector->connector_id)) {
+ drmModeCrtcPtr crtc = drmModeGetCrtc(m_dri_fd, encoder->crtc_id);
+ drmModeFreeEncoder(encoder);
+
+ if (!crtc)
+ return Q_NULLPTR;
+
+ if (crtc->mode_valid)
+ crtc_mode = crtc->mode;
+
+ drmModeFreeCrtc(crtc);
+ }
+
+ QList<drmModeModeInfo> modes;
+ qCDebug(qLcEglfsKmsDebug) << connectorName << "mode count:" << connector->count_modes;
+ for (int i = 0; i < connector->count_modes; i++) {
+ const drmModeModeInfo &mode = connector->modes[i];
+ qCDebug(qLcEglfsKmsDebug) << "mode" << i << mode.hdisplay << "x" << mode.vdisplay
+ << "@" << mode.vrefresh << "hz";
+ modes << connector->modes[i];
+ }
+
+ int preferred = -1;
+ int current = -1;
+ int configured = -1;
+ int best = -1;
+
+ for (int i = modes.size() - 1; i >= 0; i--) {
+ const drmModeModeInfo &m = modes.at(i);
+
+ if (configuration == OutputConfigMode &&
+ m.hdisplay == configurationSize.width() &&
+ m.vdisplay == configurationSize.height()) {
+ configured = i;
+ }
+
+ if (!memcmp(&crtc_mode, &m, sizeof m))
+ current = i;
+
+ if (m.type & DRM_MODE_TYPE_PREFERRED)
+ preferred = i;
+
+ best = i;
+ }
+
+ if (configuration == OutputConfigModeline) {
+ modes << configurationModeline;
+ configured = modes.size() - 1;
+ }
+
+ if (current < 0 && crtc_mode.clock != 0) {
+ modes << crtc_mode;
+ current = mode.size() - 1;
+ }
+
+ if (configuration == OutputConfigCurrent)
+ configured = current;
+
+ int selected_mode = -1;
+
+ if (configured >= 0)
+ selected_mode = configured;
+ else if (preferred >= 0)
+ selected_mode = preferred;
+ else if (current >= 0)
+ selected_mode = current;
+ else if (best >= 0)
+ selected_mode = best;
+
+ if (selected_mode < 0) {
+ qWarning() << "No modes available for output" << connectorName;
+ return Q_NULLPTR;
+ } else {
+ int width = modes[selected_mode].hdisplay;
+ int height = modes[selected_mode].vdisplay;
+ int refresh = modes[selected_mode].vrefresh;
+ qCDebug(qLcEglfsKmsDebug) << "Selected mode" << selected_mode << ":" << width << "x" << height
+ << "@" << refresh << "hz for output" << connectorName;
+ }
+
+ QEglFSKmsOutput output = {
+ connectorName,
+ connector->connector_id,
+ crtc_id,
+ QSizeF(connector->mmWidth, connector->mmHeight),
+ selected_mode,
+ false,
+ drmModeGetCrtc(m_dri_fd, crtc_id),
+ modes
+ };
+
+ m_crtc_allocator |= (1 << output.crtc_id);
+ m_connector_allocator |= (1 << output.connector_id);
+
+ return new QEglFSKmsScreen(m_integration, this, output, pos);
+}
+
+void QEglFSKmsDevice::pageFlipHandler(int fd, unsigned int sequence, unsigned int tv_sec, unsigned int tv_usec, void *user_data)
+{
+ Q_UNUSED(fd);
+ Q_UNUSED(sequence);
+ Q_UNUSED(tv_sec);
+ Q_UNUSED(tv_usec);
+
+ QEglFSKmsScreen *screen = static_cast<QEglFSKmsScreen *>(user_data);
+ screen->flipFinished();
+}
+
+QEglFSKmsDevice::QEglFSKmsDevice(QEglFSKmsIntegration *integration, const QString &path)
+ : m_integration(integration)
+ , m_path(path)
+ , m_dri_fd(-1)
+ , m_gbm_device(Q_NULLPTR)
+ , m_crtc_allocator(0)
+ , m_connector_allocator(0)
+{
+}
+
+bool QEglFSKmsDevice::open()
+{
+ Q_ASSERT(m_dri_fd == -1);
+ Q_ASSERT(m_gbm_device == Q_NULLPTR);
+
+ qCDebug(qLcEglfsKmsDebug) << "Opening device" << m_path;
+ m_dri_fd = qt_safe_open(m_path.toLocal8Bit().constData(), O_RDWR | O_CLOEXEC);
+ if (m_dri_fd == -1) {
+ qErrnoWarning("Could not open DRM device %s", qPrintable(m_path));
+ return false;
+ }
+
+ qCDebug(qLcEglfsKmsDebug) << "Creating GBM device for file descriptor" << m_dri_fd
+ << "obtained from" << m_path;
+ m_gbm_device = gbm_create_device(m_dri_fd);
+ if (!m_gbm_device) {
+ qErrnoWarning("Could not create GBM device");
+ qt_safe_close(m_dri_fd);
+ m_dri_fd = -1;
+ return false;
+ }
+
+ return true;
+}
+
+void QEglFSKmsDevice::close()
+{
+ if (m_gbm_device) {
+ gbm_device_destroy(m_gbm_device);
+ m_gbm_device = Q_NULLPTR;
+ }
+
+ if (m_dri_fd != -1) {
+ qt_safe_close(m_dri_fd);
+ m_dri_fd = -1;
+ }
+}
+
+void QEglFSKmsDevice::createScreens()
+{
+ drmModeResPtr resources = drmModeGetResources(m_dri_fd);
+ if (!resources) {
+ qWarning("drmModeGetResources failed");
+ return;
+ }
+
+ QPoint pos(0, 0);
+ QEglFSIntegration *integration = static_cast<QEglFSIntegration *>(QGuiApplicationPrivate::platformIntegration());
+
+ for (int i = 0; i < resources->count_connectors; i++) {
+ drmModeConnectorPtr connector = drmModeGetConnector(m_dri_fd, resources->connectors[i]);
+ if (!connector)
+ continue;
+
+ QEglFSKmsScreen *screen = screenForConnector(resources, connector, pos);
+ if (screen) {
+ integration->addScreen(screen);
+ pos.rx() += screen->geometry().width();
+ }
+
+ drmModeFreeConnector(connector);
+ }
+
+ drmModeFreeResources(resources);
+}
+
+gbm_device *QEglFSKmsDevice::device() const
+{
+ return m_gbm_device;
+}
+
+int QEglFSKmsDevice::fd() const
+{
+ return m_dri_fd;
+}
+
+void QEglFSKmsDevice::handleDrmEvent()
+{
+ drmEventContext drmEvent = {
+ DRM_EVENT_CONTEXT_VERSION,
+ Q_NULLPTR, // vblank handler
+ pageFlipHandler // page flip handler
+ };
+
+ drmHandleEvent(m_dri_fd, &drmEvent);
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsdevice.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsdevice.h
new file mode 100644
index 0000000000..ebe6f62f5b
--- /dev/null
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsdevice.h
@@ -0,0 +1,93 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QEGLFSKMSDEVICE_H
+#define QEGLFSKMSDEVICE_H
+
+#include "qeglfskmsintegration.h"
+
+#include <xf86drm.h>
+#include <xf86drmMode.h>
+#include <gbm.h>
+
+QT_BEGIN_NAMESPACE
+
+class QEglFSKmsScreen;
+
+class QEglFSKmsDevice
+{
+public:
+ QEglFSKmsDevice(QEglFSKmsIntegration *integration, const QString &path);
+
+ bool open();
+ void close();
+
+ void createScreens();
+
+ gbm_device *device() const;
+ int fd() const;
+
+ void handleDrmEvent();
+
+private:
+ Q_DISABLE_COPY(QEglFSKmsDevice)
+
+ QEglFSKmsIntegration *m_integration;
+ QString m_path;
+ int m_dri_fd;
+ gbm_device *m_gbm_device;
+
+ quint32 m_crtc_allocator;
+ quint32 m_connector_allocator;
+
+ int crtcForConnector(drmModeResPtr resources, drmModeConnectorPtr connector);
+ QEglFSKmsScreen *screenForConnector(drmModeResPtr resources, drmModeConnectorPtr connector, QPoint pos);
+
+ static void pageFlipHandler(int fd,
+ unsigned int sequence,
+ unsigned int tv_sec,
+ unsigned int tv_usec,
+ void *user_data);
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsintegration.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsintegration.cpp
new file mode 100644
index 0000000000..f5aba0742a
--- /dev/null
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsintegration.cpp
@@ -0,0 +1,268 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qeglfskmsintegration.h"
+#include "qeglfskmsdevice.h"
+#include "qeglfskmsscreen.h"
+#include "qeglfskmscursor.h"
+
+#include <QtPlatformSupport/private/qeglplatformcursor_p.h>
+#include <QtPlatformSupport/private/qdevicediscovery_p.h>
+#include <QtCore/QLoggingCategory>
+#include <QtCore/QJsonDocument>
+#include <QtCore/QJsonObject>
+#include <QtCore/QJsonArray>
+#include <QtGui/qpa/qplatformwindow.h>
+#include <QtGui/qpa/qplatformcursor.h>
+#include <QtGui/QScreen>
+
+#include <xf86drm.h>
+#include <xf86drmMode.h>
+#include <gbm.h>
+
+QT_BEGIN_NAMESPACE
+
+Q_LOGGING_CATEGORY(qLcEglfsKmsDebug, "qt.qpa.eglfs.kms")
+
+QMutex QEglFSKmsScreen::m_waitForFlipMutex;
+
+QEglFSKmsIntegration::QEglFSKmsIntegration()
+ : m_device(Q_NULLPTR)
+ , m_hwCursor(true)
+ , m_pbuffers(false)
+{}
+
+void QEglFSKmsIntegration::platformInit()
+{
+ loadConfig();
+
+ if (!m_devicePath.isEmpty()) {
+ qCDebug(qLcEglfsKmsDebug) << "Using DRM device" << m_devicePath << "specified in config file";
+ } else {
+
+ QDeviceDiscovery *d = QDeviceDiscovery::create(QDeviceDiscovery::Device_VideoMask);
+ QStringList devices = d->scanConnectedDevices();
+ qCDebug(qLcEglfsKmsDebug) << "Found the following video devices:" << devices;
+ d->deleteLater();
+
+ if (devices.isEmpty())
+ qFatal("Could not find DRM device!");
+
+ m_devicePath = devices.first();
+ qCDebug(qLcEglfsKmsDebug) << "Using" << m_devicePath;
+ }
+
+ m_device = new QEglFSKmsDevice(this, m_devicePath);
+ if (!m_device->open())
+ qFatal("Could not open device %s - aborting!", qPrintable(m_devicePath));
+}
+
+void QEglFSKmsIntegration::platformDestroy()
+{
+ m_device->close();
+ delete m_device;
+ m_device = Q_NULLPTR;
+}
+
+EGLNativeDisplayType QEglFSKmsIntegration::platformDisplay() const
+{
+ Q_ASSERT(m_device);
+ return reinterpret_cast<EGLNativeDisplayType>(m_device->device());
+}
+
+bool QEglFSKmsIntegration::usesDefaultScreen()
+{
+ return false;
+}
+
+void QEglFSKmsIntegration::screenInit()
+{
+ m_device->createScreens();
+}
+
+QSurfaceFormat QEglFSKmsIntegration::surfaceFormatFor(const QSurfaceFormat &inputFormat) const
+{
+ QSurfaceFormat format(inputFormat);
+ format.setRenderableType(QSurfaceFormat::OpenGLES);
+ format.setSwapBehavior(QSurfaceFormat::DoubleBuffer);
+ format.setRedBufferSize(8);
+ format.setGreenBufferSize(8);
+ format.setBlueBufferSize(8);
+ return format;
+}
+
+EGLNativeWindowType QEglFSKmsIntegration::createNativeWindow(QPlatformWindow *platformWindow,
+ const QSize &size,
+ const QSurfaceFormat &format)
+{
+ Q_UNUSED(size);
+ Q_UNUSED(format);
+
+ QEglFSKmsScreen *screen = static_cast<QEglFSKmsScreen *>(platformWindow->screen());
+ if (screen->surface()) {
+ qWarning("Only single window per screen supported!");
+ return 0;
+ }
+
+ return reinterpret_cast<EGLNativeWindowType>(screen->createSurface());
+}
+
+EGLNativeWindowType QEglFSKmsIntegration::createNativeOffscreenWindow(const QSurfaceFormat &format)
+{
+ Q_UNUSED(format);
+ Q_ASSERT(m_device);
+
+ qCDebug(qLcEglfsKmsDebug) << "Creating native off screen window";
+ gbm_surface *surface = gbm_surface_create(m_device->device(),
+ 1, 1,
+ GBM_FORMAT_XRGB8888,
+ GBM_BO_USE_RENDERING);
+
+ return reinterpret_cast<EGLNativeWindowType>(surface);
+}
+
+void QEglFSKmsIntegration::destroyNativeWindow(EGLNativeWindowType window)
+{
+ gbm_surface *surface = reinterpret_cast<gbm_surface *>(window);
+ gbm_surface_destroy(surface);
+}
+
+bool QEglFSKmsIntegration::hasCapability(QPlatformIntegration::Capability cap) const
+{
+ switch (cap) {
+ case QPlatformIntegration::ThreadedPixmaps:
+ case QPlatformIntegration::OpenGL:
+ case QPlatformIntegration::ThreadedOpenGL:
+ return true;
+ default:
+ return false;
+ }
+}
+
+QPlatformCursor *QEglFSKmsIntegration::createCursor(QPlatformScreen *screen) const
+{
+ if (m_hwCursor)
+ return Q_NULLPTR;
+ else
+ return new QEGLPlatformCursor(screen);
+}
+
+void QEglFSKmsIntegration::waitForVSync(QPlatformSurface *surface) const
+{
+ QWindow *window = static_cast<QWindow *>(surface->surface());
+ QEglFSKmsScreen *screen = static_cast<QEglFSKmsScreen *>(window->screen()->handle());
+
+ screen->waitForFlip();
+}
+
+void QEglFSKmsIntegration::presentBuffer(QPlatformSurface *surface)
+{
+ QWindow *window = static_cast<QWindow *>(surface->surface());
+ QEglFSKmsScreen *screen = static_cast<QEglFSKmsScreen *>(window->screen()->handle());
+
+ screen->flip();
+}
+
+bool QEglFSKmsIntegration::supportsPBuffers() const
+{
+ return m_pbuffers;
+}
+
+bool QEglFSKmsIntegration::hwCursor() const
+{
+ return m_hwCursor;
+}
+
+QMap<QString, QVariantMap> QEglFSKmsIntegration::outputSettings() const
+{
+ return m_outputSettings;
+}
+
+void QEglFSKmsIntegration::loadConfig()
+{
+ static QByteArray json = qgetenv("QT_QPA_EGLFS_KMS_CONFIG");
+ if (json.isEmpty())
+ return;
+
+ qCDebug(qLcEglfsKmsDebug) << "Loading KMS setup from" << json;
+
+ QFile file(QString::fromUtf8(json));
+ if (!file.open(QFile::ReadOnly)) {
+ qCDebug(qLcEglfsKmsDebug) << "Could not open config file"
+ << json << "for reading";
+ return;
+ }
+
+ QJsonDocument doc = QJsonDocument::fromJson(file.readAll());
+ if (!doc.isObject()) {
+ qCDebug(qLcEglfsKmsDebug) << "Invalid config file" << json
+ << "- no top-level JSON object";
+ return;
+ }
+
+ QJsonObject object = doc.object();
+
+ m_hwCursor = object.value("hwcursor").toBool(m_hwCursor);
+ m_pbuffers = object.value("pbuffers").toBool(m_pbuffers);
+ m_devicePath = object.value("device").toString();
+
+ QJsonArray outputs = object.value("outputs").toArray();
+ for (int i = 0; i < outputs.size(); i++) {
+ QVariantMap outputSettings = outputs.at(i).toObject().toVariantMap();
+
+ if (outputSettings.contains("name")) {
+ QString name = outputSettings.value("name").toString();
+
+ if (m_outputSettings.contains(name)) {
+ qCDebug(qLcEglfsKmsDebug) << "Output" << name << "configured multiple times!";
+ }
+
+ m_outputSettings.insert(name, outputSettings);
+ }
+ }
+
+ qCDebug(qLcEglfsKmsDebug) << "Configuration:\n"
+ << "\thwcursor:" << m_hwCursor << "\n"
+ << "\tpbuffers:" << m_pbuffers << "\n"
+ << "\toutputs:" << m_outputSettings;
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsintegration.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsintegration.h
new file mode 100644
index 0000000000..434f337176
--- /dev/null
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsintegration.h
@@ -0,0 +1,90 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QEGLFSKMSINTEGRATION_H
+#define QEGLFSKMSINTEGRATION_H
+
+#include "qeglfsdeviceintegration.h"
+#include <QtCore/QMap>
+#include <QtCore/QVariant>
+
+QT_BEGIN_NAMESPACE
+
+class QEglFSKmsDevice;
+
+class QEglFSKmsIntegration : public QEGLDeviceIntegration
+{
+public:
+ QEglFSKmsIntegration();
+
+ void platformInit() Q_DECL_OVERRIDE;
+ void platformDestroy() Q_DECL_OVERRIDE;
+ EGLNativeDisplayType platformDisplay() const Q_DECL_OVERRIDE;
+ bool usesDefaultScreen() Q_DECL_OVERRIDE;
+ void screenInit() Q_DECL_OVERRIDE;
+ QSurfaceFormat surfaceFormatFor(const QSurfaceFormat &inputFormat) const Q_DECL_OVERRIDE;
+ EGLNativeWindowType createNativeWindow(QPlatformWindow *platformWindow,
+ const QSize &size,
+ const QSurfaceFormat &format) Q_DECL_OVERRIDE;
+ EGLNativeWindowType createNativeOffscreenWindow(const QSurfaceFormat &format) Q_DECL_OVERRIDE;
+ void destroyNativeWindow(EGLNativeWindowType window) Q_DECL_OVERRIDE;
+ bool hasCapability(QPlatformIntegration::Capability cap) const Q_DECL_OVERRIDE;
+ QPlatformCursor *createCursor(QPlatformScreen *screen) const Q_DECL_OVERRIDE;
+ void waitForVSync(QPlatformSurface *surface) const Q_DECL_OVERRIDE;
+ void presentBuffer(QPlatformSurface *surface) Q_DECL_OVERRIDE;
+ bool supportsPBuffers() const Q_DECL_OVERRIDE;
+
+ bool hwCursor() const;
+ QMap<QString, QVariantMap> outputSettings() const;
+
+private:
+ void loadConfig();
+
+ QEglFSKmsDevice *m_device;
+ bool m_hwCursor;
+ bool m_pbuffers;
+ QString m_devicePath;
+ QMap<QString, QVariantMap> m_outputSettings;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsmain.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsmain.cpp
new file mode 100644
index 0000000000..8d75ff797e
--- /dev/null
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsmain.cpp
@@ -0,0 +1,58 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the qmake spec of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qeglfsdeviceintegration.h"
+#include "qeglfskmsintegration.h"
+
+QT_BEGIN_NAMESPACE
+
+class QEglFSKmsIntegrationPlugin : public QEGLDeviceIntegrationPlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID QEGLDeviceIntegrationFactoryInterface_iid FILE "eglfs_kms.json")
+
+public:
+ QEGLDeviceIntegration *create() Q_DECL_OVERRIDE { return new QEglFSKmsIntegration; }
+};
+
+QT_END_NAMESPACE
+
+#include "qeglfskmsmain.moc"
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsscreen.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsscreen.cpp
new file mode 100644
index 0000000000..0a4d5fe2bc
--- /dev/null
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsscreen.cpp
@@ -0,0 +1,286 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qeglfskmsscreen.h"
+#include "qeglfskmsdevice.h"
+#include "qeglfskmscursor.h"
+
+#include <QtCore/QLoggingCategory>
+
+QT_BEGIN_NAMESPACE
+
+Q_DECLARE_LOGGING_CATEGORY(qLcEglfsKmsDebug)
+
+void QEglFSKmsScreen::bufferDestroyedHandler(gbm_bo *bo, void *data)
+{
+ FrameBuffer *fb = static_cast<FrameBuffer *>(data);
+
+ if (fb->fb) {
+ gbm_device *device = gbm_bo_get_device(bo);
+ drmModeRmFB(gbm_device_get_fd(device), fb->fb);
+ }
+
+ delete fb;
+}
+
+QEglFSKmsScreen::FrameBuffer *QEglFSKmsScreen::framebufferForBufferObject(gbm_bo *bo)
+{
+ {
+ FrameBuffer *fb = static_cast<FrameBuffer *>(gbm_bo_get_user_data(bo));
+ if (fb)
+ return fb;
+ }
+
+ uint32_t width = gbm_bo_get_width(bo);
+ uint32_t height = gbm_bo_get_height(bo);
+ uint32_t stride = gbm_bo_get_stride(bo);
+ uint32_t handle = gbm_bo_get_handle(bo).u32;
+
+ QScopedPointer<FrameBuffer> fb(new FrameBuffer);
+
+ int ret = drmModeAddFB(m_device->fd(), width, height, 24, 32,
+ stride, handle, &fb->fb);
+
+ if (ret) {
+ qWarning("Failed to create KMS FB!");
+ return Q_NULLPTR;
+ }
+
+ gbm_bo_set_user_data(bo, fb.data(), bufferDestroyedHandler);
+ return fb.take();
+}
+
+QEglFSKmsScreen::QEglFSKmsScreen(QEglFSKmsIntegration *integration,
+ QEglFSKmsDevice *device,
+ QEglFSKmsOutput output,
+ QPoint position)
+ : QEglFSScreen(eglGetDisplay(reinterpret_cast<EGLNativeDisplayType>(device->device())))
+ , m_integration(integration)
+ , m_device(device)
+ , m_gbm_surface(Q_NULLPTR)
+ , m_gbm_bo_current(Q_NULLPTR)
+ , m_gbm_bo_next(Q_NULLPTR)
+ , m_output(output)
+ , m_pos(position)
+ , m_cursor(Q_NULLPTR)
+{
+}
+
+QEglFSKmsScreen::~QEglFSKmsScreen()
+{
+ restoreMode();
+}
+
+QRect QEglFSKmsScreen::geometry() const
+{
+ const int mode = m_output.mode;
+ return QRect(m_pos.x(), m_pos.y(),
+ m_output.modes[mode].hdisplay,
+ m_output.modes[mode].vdisplay);
+}
+
+int QEglFSKmsScreen::depth() const
+{
+ return 32;
+}
+
+QImage::Format QEglFSKmsScreen::format() const
+{
+ return QImage::Format_RGB32;
+}
+
+QSizeF QEglFSKmsScreen::physicalSize() const
+{
+ return m_output.physical_size;
+}
+
+QDpi QEglFSKmsScreen::logicalDpi() const
+{
+ QSizeF ps = physicalSize();
+ QSize s = geometry().size();
+
+ if (ps.isValid() && s.isValid())
+ return QDpi(25.4 * s.width() / ps.width(),
+ 25.4 * s.height() / ps.height());
+ else
+ return QDpi(100, 100);
+}
+
+Qt::ScreenOrientation QEglFSKmsScreen::nativeOrientation() const
+{
+ return Qt::PrimaryOrientation;
+}
+
+Qt::ScreenOrientation QEglFSKmsScreen::orientation() const
+{
+ return Qt::PrimaryOrientation;
+}
+
+QString QEglFSKmsScreen::name() const
+{
+ return m_output.name;
+}
+
+QPlatformCursor *QEglFSKmsScreen::cursor() const
+{
+ if (m_integration->hwCursor()) {
+ if (m_cursor.isNull()) {
+ QEglFSKmsScreen *that = const_cast<QEglFSKmsScreen *>(this);
+ that->m_cursor.reset(new QEglFSKmsCursor(that));
+ }
+
+ return m_cursor.data();
+ } else {
+ return QEglFSScreen::cursor();
+ }
+}
+
+gbm_surface *QEglFSKmsScreen::createSurface()
+{
+ if (!m_gbm_surface) {
+ qCDebug(qLcEglfsKmsDebug) << "Creating window for screen" << name();
+ m_gbm_surface = gbm_surface_create(m_device->device(),
+ geometry().width(),
+ geometry().height(),
+ GBM_FORMAT_XRGB8888,
+ GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING);
+ }
+ return m_gbm_surface;
+}
+
+void QEglFSKmsScreen::destroySurface()
+{
+ if (m_gbm_bo_current) {
+ gbm_bo_destroy(m_gbm_bo_current);
+ m_gbm_bo_current = Q_NULLPTR;
+ }
+
+ if (m_gbm_bo_next) {
+ gbm_bo_destroy(m_gbm_bo_next);
+ m_gbm_bo_next = Q_NULLPTR;
+ }
+
+ if (m_gbm_surface) {
+ gbm_surface_destroy(m_gbm_surface);
+ m_gbm_surface = Q_NULLPTR;
+ }
+}
+
+void QEglFSKmsScreen::waitForFlip()
+{
+ // Don't lock the mutex unless we actually need to
+ if (!m_gbm_bo_next)
+ return;
+
+ QMutexLocker lock(&m_waitForFlipMutex);
+ while (m_gbm_bo_next)
+ m_device->handleDrmEvent();
+}
+
+void QEglFSKmsScreen::flip()
+{
+ if (!m_gbm_surface) {
+ qWarning("Cannot sync before platform init!");
+ return;
+ }
+
+ m_gbm_bo_next = gbm_surface_lock_front_buffer(m_gbm_surface);
+ if (!m_gbm_bo_next) {
+ qWarning("Could not lock GBM surface front buffer!");
+ return;
+ }
+
+ FrameBuffer *fb = framebufferForBufferObject(m_gbm_bo_next);
+
+ if (!m_output.mode_set) {
+ int ret = drmModeSetCrtc(m_device->fd(),
+ m_output.crtc_id,
+ fb->fb,
+ 0, 0,
+ &m_output.connector_id, 1,
+ &m_output.modes[m_output.mode]);
+
+ if (ret)
+ qErrnoWarning("Could not set DRM mode!");
+ else
+ m_output.mode_set = true;
+ }
+
+ int ret = drmModePageFlip(m_device->fd(),
+ m_output.crtc_id,
+ fb->fb,
+ DRM_MODE_PAGE_FLIP_EVENT,
+ this);
+ if (ret) {
+ qErrnoWarning("Could not queue DRM page flip!");
+ gbm_surface_release_buffer(m_gbm_surface, m_gbm_bo_next);
+ m_gbm_bo_next = Q_NULLPTR;
+ }
+}
+
+void QEglFSKmsScreen::flipFinished()
+{
+ if (m_gbm_bo_current)
+ gbm_surface_release_buffer(m_gbm_surface,
+ m_gbm_bo_current);
+
+ m_gbm_bo_current = m_gbm_bo_next;
+ m_gbm_bo_next = Q_NULLPTR;
+}
+
+void QEglFSKmsScreen::restoreMode()
+{
+ if (m_output.mode_set && m_output.saved_crtc) {
+ drmModeSetCrtc(m_device->fd(),
+ m_output.saved_crtc->crtc_id,
+ m_output.saved_crtc->buffer_id,
+ 0, 0,
+ &m_output.connector_id, 1,
+ &m_output.saved_crtc->mode);
+
+ drmModeFreeCrtc(m_output.saved_crtc);
+ m_output.saved_crtc = Q_NULLPTR;
+
+ m_output.mode_set = false;
+ }
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsscreen.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsscreen.h
new file mode 100644
index 0000000000..e4d5ee9e0a
--- /dev/null
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms/qeglfskmsscreen.h
@@ -0,0 +1,130 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QEGLFSKMSSCREEN_H
+#define QEGLFSKMSSCREEN_H
+
+#include "qeglfskmsintegration.h"
+#include "qeglfsscreen.h"
+#include <QtCore/QList>
+#include <QtCore/QMutex>
+
+#include <xf86drm.h>
+#include <xf86drmMode.h>
+#include <gbm.h>
+
+QT_BEGIN_NAMESPACE
+
+class QEglFSKmsDevice;
+class QEglFSKmsCursor;
+
+struct QEglFSKmsOutput
+{
+ QString name;
+ uint32_t connector_id;
+ uint32_t crtc_id;
+ QSizeF physical_size;
+ int mode; // index of selected mode in list below
+ bool mode_set;
+ drmModeCrtcPtr saved_crtc;
+ QList<drmModeModeInfo> modes;
+};
+
+class QEglFSKmsScreen : public QEglFSScreen
+{
+public:
+ QEglFSKmsScreen(QEglFSKmsIntegration *integration,
+ QEglFSKmsDevice *device,
+ QEglFSKmsOutput output,
+ QPoint position);
+ ~QEglFSKmsScreen();
+
+ QRect geometry() const Q_DECL_OVERRIDE;
+ int depth() const Q_DECL_OVERRIDE;
+ QImage::Format format() const Q_DECL_OVERRIDE;
+
+ QSizeF physicalSize() const Q_DECL_OVERRIDE;
+ QDpi logicalDpi() const Q_DECL_OVERRIDE;
+ Qt::ScreenOrientation nativeOrientation() const Q_DECL_OVERRIDE;
+ Qt::ScreenOrientation orientation() const Q_DECL_OVERRIDE;
+
+ QString name() const Q_DECL_OVERRIDE;
+
+ QPlatformCursor *cursor() const Q_DECL_OVERRIDE;
+
+ QEglFSKmsDevice *device() const { return m_device; }
+
+ gbm_surface *surface() const { return m_gbm_surface; }
+ gbm_surface *createSurface();
+ void destroySurface();
+
+ void waitForFlip();
+ void flip();
+ void flipFinished();
+
+ QEglFSKmsOutput &output() { return m_output; }
+ void restoreMode();
+
+private:
+ QEglFSKmsIntegration *m_integration;
+ QEglFSKmsDevice *m_device;
+ gbm_surface *m_gbm_surface;
+
+ gbm_bo *m_gbm_bo_current;
+ gbm_bo *m_gbm_bo_next;
+
+ QEglFSKmsOutput m_output;
+ QPoint m_pos;
+ QScopedPointer<QEglFSKmsCursor> m_cursor;
+
+ struct FrameBuffer {
+ FrameBuffer() : fb(0) {}
+ uint32_t fb;
+ };
+ static void bufferDestroyedHandler(gbm_bo *bo, void *data);
+ FrameBuffer *framebufferForBufferObject(gbm_bo *bo);
+
+ static QMutex m_waitForFlipMutex;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/eglfs_x11.json b/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/eglfs_x11.json
new file mode 100644
index 0000000000..846252789a
--- /dev/null
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/eglfs_x11.json
@@ -0,0 +1,3 @@
+{
+ "Keys": [ "eglfs_x11" ]
+}
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/eglfs_x11.pro b/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/eglfs_x11.pro
new file mode 100644
index 0000000000..a1d08248ff
--- /dev/null
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/eglfs_x11.pro
@@ -0,0 +1,24 @@
+TARGET = qeglfs-x11-integration
+
+PLUGIN_CLASS_NAME=QEglFSX11IntegrationPlugin
+PLUGIN_TYPE=egldeviceintegrations
+
+load(qt_plugin)
+
+QT += core-private gui-private platformsupport-private eglfs_device_lib-private
+
+# Avoid X11 header collision
+DEFINES += MESA_EGL_NO_X11_HEADERS
+
+INCLUDEPATH += $$PWD/../..
+
+CONFIG += egl
+LIBS += -lX11 -lX11-xcb -lxcb
+QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF
+
+SOURCES += $$PWD/qeglfsx11main.cpp \
+ $$PWD/qeglfsx11integration.cpp
+
+HEADERS += $$PWD/qeglfsx11integration.h
+
+OTHER_FILES += $$PWD/eglfs_x11.json
diff --git a/src/plugins/platforms/eglfs/qeglfshooks_x11.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/qeglfsx11integration.cpp
index b16857297c..e41c007df9 100644
--- a/src/plugins/platforms/eglfs/qeglfshooks_x11.cpp
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/qeglfsx11integration.cpp
@@ -3,7 +3,7 @@
** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
-** This file is part of the qmake spec of the Qt Toolkit.
+** This file is part of the plugins of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL21$
** Commercial License Usage
@@ -31,75 +31,28 @@
**
****************************************************************************/
-#include "qeglfshooks.h"
-
-#include <qpa/qwindowsysteminterface.h>
-#include <qpa/qplatformwindow.h>
+#include "qeglfsx11integration.h"
#include <QThread>
#include <X11/Xlib.h>
#include <X11/Xlib-xcb.h>
-#include <xcb/xcb.h>
-QT_BEGIN_NAMESPACE
+/* Make no mistake: This is not a replacement for the xcb platform plugin.
+ This here is barely an extremely useful tool for developing eglfs itself because
+ it allows to do so without any requirements for devices or drivers. */
-class QEglFSX11Hooks;
+QT_BEGIN_NAMESPACE
class EventReader : public QThread
{
public:
- EventReader(QEglFSX11Hooks *hooks)
- : m_hooks(hooks) { }
+ EventReader(QEglFSX11Integration *integration)
+ : m_integration(integration) { }
void run();
private:
- QEglFSX11Hooks *m_hooks;
-};
-
-namespace Atoms {
- enum {
- _NET_WM_NAME = 0,
- UTF8_STRING,
- WM_PROTOCOLS,
- WM_DELETE_WINDOW,
- _NET_WM_STATE,
- _NET_WM_STATE_FULLSCREEN,
-
- N_ATOMS
- };
-}
-
-class QEglFSX11Hooks : public QEglFSHooks
-{
-public:
- QEglFSX11Hooks() : m_connection(0), m_window(0), m_eventReader(0) {}
-
- virtual void platformInit();
- virtual void platformDestroy();
- virtual EGLNativeDisplayType platformDisplay() const;
- virtual QSize screenSize() const;
- virtual EGLNativeWindowType createNativeWindow(QPlatformWindow *window,
- const QSize &size,
- const QSurfaceFormat &format);
- virtual void destroyNativeWindow(EGLNativeWindowType window);
- virtual bool hasCapability(QPlatformIntegration::Capability cap) const;
-
- xcb_connection_t *connection() { return m_connection; }
- const xcb_atom_t *atoms() const { return m_atoms; }
- QPlatformWindow *platformWindow() { return m_platformWindow; }
-
-private:
- void sendConnectionEvent(xcb_atom_t a);
-
- Display *m_display;
- xcb_connection_t *m_connection;
- xcb_atom_t m_atoms[Atoms::N_ATOMS];
- xcb_window_t m_window;
- EventReader *m_eventReader;
- xcb_window_t m_connectionEventListener;
- QPlatformWindow *m_platformWindow;
- mutable QSize m_screenSize;
+ QEglFSX11Integration *m_integration;
};
QAtomicInt running;
@@ -156,7 +109,7 @@ void EventReader::run()
Qt::MouseButtons buttons;
xcb_generic_event_t *event;
- while (running.load() && (event = xcb_wait_for_event(m_hooks->connection()))) {
+ while (running.load() && (event = xcb_wait_for_event(m_integration->connection()))) {
uint response_type = event->response_type & ~0x80;
switch (response_type) {
case XCB_BUTTON_PRESS: {
@@ -183,11 +136,11 @@ void EventReader::run()
}
case XCB_CLIENT_MESSAGE: {
xcb_client_message_event_t *client = (xcb_client_message_event_t *) event;
- const xcb_atom_t *atoms = m_hooks->atoms();
+ const xcb_atom_t *atoms = m_integration->atoms();
if (client->format == 32
&& client->type == atoms[Atoms::WM_PROTOCOLS]
&& client->data.data32[0] == atoms[Atoms::WM_DELETE_WINDOW]) {
- QWindow *window = m_hooks->platformWindow() ? m_hooks->platformWindow()->window() : 0;
+ QWindow *window = m_integration->platformWindow() ? m_integration->platformWindow()->window() : 0;
if (window)
QWindowSystemInterface::handleCloseEvent(window);
}
@@ -199,7 +152,7 @@ void EventReader::run()
}
}
-void QEglFSX11Hooks::sendConnectionEvent(xcb_atom_t a)
+void QEglFSX11Integration::sendConnectionEvent(xcb_atom_t a)
{
xcb_client_message_event_t event;
memset(&event, 0, sizeof(event));
@@ -214,14 +167,16 @@ void QEglFSX11Hooks::sendConnectionEvent(xcb_atom_t a)
xcb_flush(m_connection);
}
-void QEglFSX11Hooks::platformInit()
+#define DISPLAY ((Display *) m_display)
+
+void QEglFSX11Integration::platformInit()
{
m_display = XOpenDisplay(0);
if (!m_display)
qFatal("Could not open display");
- XSetEventQueueOwner(m_display, XCBOwnsEventQueue);
- m_connection = XGetXCBConnection(m_display);
+ XSetEventQueueOwner(DISPLAY, XCBOwnsEventQueue);
+ m_connection = XGetXCBConnection(DISPLAY);
running.ref();
@@ -237,7 +192,7 @@ void QEglFSX11Hooks::platformInit()
m_eventReader->start();
}
-void QEglFSX11Hooks::platformDestroy()
+void QEglFSX11Integration::platformDestroy()
{
running.deref();
@@ -247,31 +202,32 @@ void QEglFSX11Hooks::platformDestroy()
delete m_eventReader;
m_eventReader = 0;
- XCloseDisplay(m_display);
+ XCloseDisplay(DISPLAY);
m_display = 0;
m_connection = 0;
}
-EGLNativeDisplayType QEglFSX11Hooks::platformDisplay() const
+EGLNativeDisplayType QEglFSX11Integration::platformDisplay() const
{
- return m_display;
+ return DISPLAY;
}
-QSize QEglFSX11Hooks::screenSize() const
+QSize QEglFSX11Integration::screenSize() const
{
if (m_screenSize.isEmpty()) {
QList<QByteArray> env = qgetenv("EGLFS_X11_SIZE").split('x');
if (env.length() == 2) {
m_screenSize = QSize(env.at(0).toInt(), env.at(1).toInt());
} else {
- m_screenSize = QSize(640, 480);
- qDebug("EGLFS_X11_SIZE not set, falling back to 640x480");
+ XWindowAttributes a;
+ if (XGetWindowAttributes(DISPLAY, DefaultRootWindow(DISPLAY), &a))
+ m_screenSize = QSize(a.width, a.height);
}
}
return m_screenSize;
}
-EGLNativeWindowType QEglFSX11Hooks::createNativeWindow(QPlatformWindow *platformWindow,
+EGLNativeWindowType QEglFSX11Integration::createNativeWindow(QPlatformWindow *platformWindow,
const QSize &size,
const QSurfaceFormat &format)
{
@@ -286,8 +242,6 @@ EGLNativeWindowType QEglFSX11Hooks::createNativeWindow(QPlatformWindow *platform
XCB_WINDOW_CLASS_INPUT_OUTPUT, it.data->root_visual,
0, 0);
- xcb_map_window(m_connection, m_window);
-
xcb_intern_atom_cookie_t cookies[Atoms::N_ATOMS];
static const char *atomNames[Atoms::N_ATOMS] = {
"_NET_WM_NAME",
@@ -313,30 +267,26 @@ EGLNativeWindowType QEglFSX11Hooks::createNativeWindow(QPlatformWindow *platform
xcb_change_property(m_connection, XCB_PROP_MODE_REPLACE, m_window,
m_atoms[Atoms::WM_PROTOCOLS], XCB_ATOM_ATOM, 32, 1, &m_atoms[Atoms::WM_DELETE_WINDOW]);
- if (qgetenv("EGLFS_X11_FULLSCREEN").toInt()) {
- // Go fullscreen. The QScreen and QWindow size is controlled by EGLFS_X11_SIZE regardless,
- // this is just the native window.
- xcb_change_property(m_connection, XCB_PROP_MODE_REPLACE, m_window,
- m_atoms[Atoms::_NET_WM_STATE], XCB_ATOM_ATOM, 32, 1, &m_atoms[Atoms::_NET_WM_STATE_FULLSCREEN]);
- }
+ // Go fullscreen.
+ xcb_change_property(m_connection, XCB_PROP_MODE_REPLACE, m_window,
+ m_atoms[Atoms::_NET_WM_STATE], XCB_ATOM_ATOM, 32, 1, &m_atoms[Atoms::_NET_WM_STATE_FULLSCREEN]);
+
+ xcb_map_window(m_connection, m_window);
xcb_flush(m_connection);
return m_window;
}
-void QEglFSX11Hooks::destroyNativeWindow(EGLNativeWindowType window)
+void QEglFSX11Integration::destroyNativeWindow(EGLNativeWindowType window)
{
xcb_destroy_window(m_connection, window);
}
-bool QEglFSX11Hooks::hasCapability(QPlatformIntegration::Capability cap) const
+bool QEglFSX11Integration::hasCapability(QPlatformIntegration::Capability cap) const
{
Q_UNUSED(cap);
return false;
}
-static QEglFSX11Hooks eglFSX11Hooks;
-QEglFSHooks *platformHooks = &eglFSX11Hooks;
-
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/qeglfsx11integration.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/qeglfsx11integration.h
new file mode 100644
index 0000000000..78db504f3b
--- /dev/null
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/qeglfsx11integration.h
@@ -0,0 +1,95 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QEGLFSX11INTEGRATION_H
+#define QEGLFSX11INTEGRATION_H
+
+#include "qeglfsdeviceintegration.h"
+
+#include <qpa/qwindowsysteminterface.h>
+#include <qpa/qplatformwindow.h>
+
+#include <xcb/xcb.h>
+
+QT_BEGIN_NAMESPACE
+
+namespace Atoms {
+ enum {
+ _NET_WM_NAME = 0,
+ UTF8_STRING,
+ WM_PROTOCOLS,
+ WM_DELETE_WINDOW,
+ _NET_WM_STATE,
+ _NET_WM_STATE_FULLSCREEN,
+
+ N_ATOMS
+ };
+}
+
+class EventReader;
+
+class QEglFSX11Integration : public QEGLDeviceIntegration
+{
+public:
+ QEglFSX11Integration() : m_connection(0), m_window(0), m_eventReader(0) {}
+
+ void platformInit() Q_DECL_OVERRIDE;
+ void platformDestroy() Q_DECL_OVERRIDE;
+ EGLNativeDisplayType platformDisplay() const Q_DECL_OVERRIDE;
+ QSize screenSize() const Q_DECL_OVERRIDE;
+ EGLNativeWindowType createNativeWindow(QPlatformWindow *window,
+ const QSize &size,
+ const QSurfaceFormat &format) Q_DECL_OVERRIDE;
+ void destroyNativeWindow(EGLNativeWindowType window) Q_DECL_OVERRIDE;
+ bool hasCapability(QPlatformIntegration::Capability cap) const Q_DECL_OVERRIDE;
+
+ xcb_connection_t *connection() { return m_connection; }
+ const xcb_atom_t *atoms() const { return m_atoms; }
+ QPlatformWindow *platformWindow() { return m_platformWindow; }
+
+private:
+ void sendConnectionEvent(xcb_atom_t a);
+
+ void *m_display;
+ xcb_connection_t *m_connection;
+ xcb_atom_t m_atoms[Atoms::N_ATOMS];
+ xcb_window_t m_window;
+ EventReader *m_eventReader;
+ xcb_window_t m_connectionEventListener;
+ QPlatformWindow *m_platformWindow;
+ mutable QSize m_screenSize;
+};
+
+QT_END_NAMESPACE
+
+#endif
diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/qeglfsx11main.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/qeglfsx11main.cpp
new file mode 100644
index 0000000000..2eee03f595
--- /dev/null
+++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_x11/qeglfsx11main.cpp
@@ -0,0 +1,58 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the qmake spec of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qeglfsdeviceintegration.h"
+#include "qeglfsx11integration.h"
+
+QT_BEGIN_NAMESPACE
+
+class QEglFSX11IntegrationPlugin : public QEGLDeviceIntegrationPlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID QEGLDeviceIntegrationFactoryInterface_iid FILE "eglfs_x11.json")
+
+public:
+ QEGLDeviceIntegration *create() Q_DECL_OVERRIDE { return new QEglFSX11Integration; }
+};
+
+QT_END_NAMESPACE
+
+#include "qeglfsx11main.moc"
diff --git a/src/plugins/platforms/eglfs/eglfs-plugin.pro b/src/plugins/platforms/eglfs/eglfs-plugin.pro
new file mode 100644
index 0000000000..0f493fdc01
--- /dev/null
+++ b/src/plugins/platforms/eglfs/eglfs-plugin.pro
@@ -0,0 +1,12 @@
+TARGET = qeglfs
+
+PLUGIN_TYPE = platforms
+PLUGIN_CLASS_NAME = QEglFSIntegrationPlugin
+!equals(TARGET, $$QT_DEFAULT_QPA_PLUGIN): PLUGIN_EXTENDS = -
+load(qt_plugin)
+
+QT += platformsupport-private eglfs_device_lib-private
+
+SOURCES += $$PWD/qeglfsmain.cpp
+
+OTHER_FILES += $$PWD/eglfs.json
diff --git a/src/plugins/platforms/eglfs/eglfs.pri b/src/plugins/platforms/eglfs/eglfs.pri
deleted file mode 100644
index 6f463ba7d9..0000000000
--- a/src/plugins/platforms/eglfs/eglfs.pri
+++ /dev/null
@@ -1,44 +0,0 @@
-QT += core-private gui-private platformsupport-private
-
-# Avoid X11 header collision
-DEFINES += MESA_EGL_NO_X11_HEADERS
-
-# Uncomment these to enable the X hooks, allowing to test the platform
-# plugin in a regular X11 environment (as long as EGL is available).
-# EGLFS_PLATFORM_HOOKS_SOURCES += qeglfshooks_x11.cpp
-# LIBS += -lX11 -lX11-xcb -lxcb
-
-# Uncomment these to enable the KMS hooks.
-# EGLFS_PLATFORM_HOOKS_SOURCES += qeglfshooks_kms.cpp
-# CONFIG += link_pkgconfig
-# PKGCONFIG += libdrm gbm
-
-SOURCES += $$PWD/qeglfsintegration.cpp \
- $$PWD/qeglfswindow.cpp \
- $$PWD/qeglfsscreen.cpp \
- $$PWD/qeglfshooks_stub.cpp \
- $$PWD/qeglfscontext.cpp
-
-HEADERS += $$PWD/qeglfsintegration.h \
- $$PWD/qeglfswindow.h \
- $$PWD/qeglfsscreen.h \
- $$PWD/qeglfshooks.h \
- $$PWD/qeglfscontext.h
-
-QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF
-
-INCLUDEPATH += $$PWD
-
-!isEmpty(EGLFS_PLATFORM_HOOKS_SOURCES) {
- HEADERS += $$EGLFS_PLATFORM_HOOKS_HEADERS
- SOURCES += $$EGLFS_PLATFORM_HOOKS_SOURCES
- LIBS += $$EGLFS_PLATFORM_HOOKS_LIBS
- DEFINES += EGLFS_PLATFORM_HOOKS
-}
-
-CONFIG += egl qpa/genericunixfontdatabase
-
-RESOURCES += $$PWD/cursor.qrc
-
-OTHER_FILES += \
- $$PWD/eglfs.json
diff --git a/src/plugins/platforms/eglfs/eglfs.pro b/src/plugins/platforms/eglfs/eglfs.pro
index 3ebe05b35e..03c96ca1d9 100644
--- a/src/plugins/platforms/eglfs/eglfs.pro
+++ b/src/plugins/platforms/eglfs/eglfs.pro
@@ -1,10 +1,6 @@
-TARGET = qeglfs
+TEMPLATE = subdirs
+CONFIG += ordered
-PLUGIN_TYPE = platforms
-PLUGIN_CLASS_NAME = QEglFSIntegrationPlugin
-!equals(TARGET, $$QT_DEFAULT_QPA_PLUGIN): PLUGIN_EXTENDS = -
-load(qt_plugin)
-
-SOURCES += $$PWD/main.cpp
-
-include(eglfs.pri)
+SUBDIRS += eglfs_device_lib.pro
+SUBDIRS += eglfs-plugin.pro
+SUBDIRS += deviceintegration
diff --git a/src/plugins/platforms/eglfs/eglfs_device_lib.pro b/src/plugins/platforms/eglfs/eglfs_device_lib.pro
new file mode 100644
index 0000000000..d8ce421a69
--- /dev/null
+++ b/src/plugins/platforms/eglfs/eglfs_device_lib.pro
@@ -0,0 +1,59 @@
+# The device integration plugin base class has to live in a shared library,
+# placing it into a static lib like platformsupport is not sufficient since we
+# have to keep the QObject magic like qobject_cast working.
+# Hence this header-less, private-only module.
+
+TARGET = QtEglDeviceIntegration
+CONFIG += no_module_headers internal_module
+
+MODULE_INCLUDES = \
+ \$\$QT_MODULE_INCLUDE_BASE \
+ \$\$QT_MODULE_INCLUDE_BASE/QtQGui
+MODULE_PRIVATE_INCLUDES = \
+ \$\$QT_MODULE_INCLUDE_BASE/QtGui/$$QT.gui.VERSION \
+ \$\$QT_MODULE_INCLUDE_BASE/QtGui/$$QT.gui.VERSION/QtGui
+
+load(qt_module)
+
+QT += core-private gui-private platformsupport-private
+LIBS += $$QMAKE_LIBS_DYNLOAD
+
+# Avoid X11 header collision
+DEFINES += MESA_EGL_NO_X11_HEADERS
+
+DEFINES += QT_BUILD_EGL_DEVICE_LIB
+
+SOURCES += $$PWD/qeglfsintegration.cpp \
+ $$PWD/qeglfswindow.cpp \
+ $$PWD/qeglfsscreen.cpp \
+ $$PWD/qeglfshooks.cpp \
+ $$PWD/qeglfscontext.cpp \
+ $$PWD/qeglfsoffscreenwindow.cpp \
+ $$PWD/qeglfsdeviceintegration.cpp
+
+HEADERS += $$PWD/qeglfsintegration.h \
+ $$PWD/qeglfswindow.h \
+ $$PWD/qeglfsscreen.h \
+ $$PWD/qeglfshooks.h \
+ $$PWD/qeglfscontext.h \
+ $$PWD/qeglfsoffscreenwindow.h \
+ $$PWD/qeglfsdeviceintegration.h
+
+QMAKE_LFLAGS += $$QMAKE_LFLAGS_NOUNDEF
+
+INCLUDEPATH += $$PWD
+
+!isEmpty(EGLFS_PLATFORM_HOOKS_SOURCES) {
+ HEADERS += $$EGLFS_PLATFORM_HOOKS_HEADERS
+ SOURCES += $$EGLFS_PLATFORM_HOOKS_SOURCES
+ LIBS += $$EGLFS_PLATFORM_HOOKS_LIBS
+ DEFINES += EGLFS_PLATFORM_HOOKS
+}
+
+!isEmpty(EGLFS_DEVICE_INTEGRATION) {
+ DEFINES += EGLFS_PREFERRED_PLUGIN=$$EGLFS_DEVICE_INTEGRATION
+}
+
+CONFIG += egl qpa/genericunixfontdatabase
+
+RESOURCES += $$PWD/cursor.qrc
diff --git a/src/plugins/platforms/eglfs/qeglfscontext.cpp b/src/plugins/platforms/eglfs/qeglfscontext.cpp
index 6216fa8575..7054c90521 100644
--- a/src/plugins/platforms/eglfs/qeglfscontext.cpp
+++ b/src/plugins/platforms/eglfs/qeglfscontext.cpp
@@ -45,7 +45,8 @@ QT_BEGIN_NAMESPACE
QEglFSContext::QEglFSContext(const QSurfaceFormat &format, QPlatformOpenGLContext *share, EGLDisplay display,
EGLConfig *config, const QVariant &nativeHandle)
- : QEGLPlatformContext(format, share, display, config, nativeHandle)
+ : QEGLPlatformContext(format, share, display, config, nativeHandle),
+ m_tempWindow(0)
{
}
@@ -57,17 +58,45 @@ EGLSurface QEglFSContext::eglSurfaceForPlatformSurface(QPlatformSurface *surface
return static_cast<QEGLPbuffer *>(surface)->pbuffer();
}
+EGLSurface QEglFSContext::createTemporaryOffscreenSurface()
+{
+ if (qt_egl_device_integration()->supportsPBuffers())
+ return QEGLPlatformContext::createTemporaryOffscreenSurface();
+
+ if (!m_tempWindow) {
+ m_tempWindow = qt_egl_device_integration()->createNativeOffscreenWindow(format());
+ if (!m_tempWindow) {
+ qWarning("QEglFSContext: Failed to create temporary native window");
+ return EGL_NO_SURFACE;
+ }
+ }
+ EGLConfig config = q_configFromGLFormat(eglDisplay(), format());
+ return eglCreateWindowSurface(eglDisplay(), config, m_tempWindow, 0);
+}
+
+void QEglFSContext::destroyTemporaryOffscreenSurface(EGLSurface surface)
+{
+ if (qt_egl_device_integration()->supportsPBuffers()) {
+ QEGLPlatformContext::destroyTemporaryOffscreenSurface(surface);
+ } else {
+ eglDestroySurface(eglDisplay(), surface);
+ qt_egl_device_integration()->destroyNativeWindow(m_tempWindow);
+ m_tempWindow = 0;
+ }
+}
+
void QEglFSContext::swapBuffers(QPlatformSurface *surface)
{
// draw the cursor
if (surface->surface()->surfaceClass() == QSurface::Window) {
QPlatformWindow *window = static_cast<QPlatformWindow *>(surface);
- if (QEGLPlatformCursor *cursor = static_cast<QEGLPlatformCursor *>(window->screen()->cursor()))
+ if (QEGLPlatformCursor *cursor = qobject_cast<QEGLPlatformCursor *>(window->screen()->cursor()))
cursor->paintOnScreen();
}
- QEglFSHooks::hooks()->waitForVSync();
+ qt_egl_device_integration()->waitForVSync(surface);
QEGLPlatformContext::swapBuffers(surface);
+ qt_egl_device_integration()->presentBuffer(surface);
}
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/qeglfscontext.h b/src/plugins/platforms/eglfs/qeglfscontext.h
index fcdad5ed22..245f690822 100644
--- a/src/plugins/platforms/eglfs/qeglfscontext.h
+++ b/src/plugins/platforms/eglfs/qeglfscontext.h
@@ -36,16 +36,22 @@
#include <QtPlatformSupport/private/qeglplatformcontext_p.h>
#include <QtCore/QVariant>
+#include "qeglfsglobal.h"
QT_BEGIN_NAMESPACE
-class QEglFSContext : public QEGLPlatformContext
+class Q_EGLFS_EXPORT QEglFSContext : public QEGLPlatformContext
{
public:
QEglFSContext(const QSurfaceFormat &format, QPlatformOpenGLContext *share, EGLDisplay display,
EGLConfig *config, const QVariant &nativeHandle);
EGLSurface eglSurfaceForPlatformSurface(QPlatformSurface *surface) Q_DECL_OVERRIDE;
+ EGLSurface createTemporaryOffscreenSurface() Q_DECL_OVERRIDE;
+ void destroyTemporaryOffscreenSurface(EGLSurface surface) Q_DECL_OVERRIDE;
void swapBuffers(QPlatformSurface *surface) Q_DECL_OVERRIDE;
+
+private:
+ EGLNativeWindowType m_tempWindow;
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/qeglfsdeviceintegration.cpp b/src/plugins/platforms/eglfs/qeglfsdeviceintegration.cpp
new file mode 100644
index 0000000000..69a5f67ea9
--- /dev/null
+++ b/src/plugins/platforms/eglfs/qeglfsdeviceintegration.cpp
@@ -0,0 +1,311 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qeglfsdeviceintegration.h"
+#include "qeglfsintegration.h"
+#include <QtPlatformSupport/private/qeglconvenience_p.h>
+#include <QtPlatformSupport/private/qeglplatformcursor_p.h>
+#include <QGuiApplication>
+#include <private/qguiapplication_p.h>
+#include <QScreen>
+#include <QDir>
+#include <QRegularExpression>
+#include <QLoggingCategory>
+
+#if defined(Q_OS_LINUX)
+#include <fcntl.h>
+#include <unistd.h>
+#include <linux/fb.h>
+#include <sys/ioctl.h>
+#endif
+
+#include <private/qfactoryloader_p.h>
+#include <private/qcore_unix_p.h>
+
+QT_BEGIN_NAMESPACE
+
+Q_LOGGING_CATEGORY(qLcEglDevDebug, "qt.qpa.egldeviceintegration")
+
+#ifndef QT_NO_LIBRARY
+
+Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader,
+ (QEGLDeviceIntegrationFactoryInterface_iid, QLatin1String("/egldeviceintegrations"), Qt::CaseInsensitive))
+
+Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, directLoader,
+ (QEGLDeviceIntegrationFactoryInterface_iid, QLatin1String(""), Qt::CaseInsensitive))
+
+static inline QEGLDeviceIntegration *loadIntegration(QFactoryLoader *loader, const QString &key)
+{
+ const int index = loader->indexOf(key);
+ if (index != -1) {
+ QObject *plugin = loader->instance(index);
+ if (QEGLDeviceIntegrationPlugin *factory = qobject_cast<QEGLDeviceIntegrationPlugin *>(plugin)) {
+ if (QEGLDeviceIntegration *result = factory->create())
+ return result;
+ }
+ }
+ return Q_NULLPTR;
+}
+
+#endif // QT_NO_LIBRARY
+
+QStringList QEGLDeviceIntegrationFactory::keys(const QString &pluginPath)
+{
+#ifndef QT_NO_LIBRARY
+ QStringList list;
+ if (!pluginPath.isEmpty()) {
+ QCoreApplication::addLibraryPath(pluginPath);
+ list = directLoader()->keyMap().values();
+ if (!list.isEmpty()) {
+ const QString postFix = QStringLiteral(" (from ")
+ + QDir::toNativeSeparators(pluginPath)
+ + QLatin1Char(')');
+ const QStringList::iterator end = list.end();
+ for (QStringList::iterator it = list.begin(); it != end; ++it)
+ (*it).append(postFix);
+ }
+ }
+ list.append(loader()->keyMap().values());
+ qCDebug(qLcEglDevDebug) << "EGL device integration plugin keys:" << list;
+ return list;
+#else
+ return QStringList();
+#endif
+}
+
+QEGLDeviceIntegration *QEGLDeviceIntegrationFactory::create(const QString &key, const QString &pluginPath)
+{
+ QEGLDeviceIntegration *integration = Q_NULLPTR;
+#ifndef QT_NO_LIBRARY
+ if (!pluginPath.isEmpty()) {
+ QCoreApplication::addLibraryPath(pluginPath);
+ integration = loadIntegration(directLoader(), key);
+ }
+ if (!integration)
+ integration = loadIntegration(loader(), key);
+ if (integration)
+ qCDebug(qLcEglDevDebug) << "Using EGL device integration" << key;
+ else
+ qCWarning(qLcEglDevDebug) << "Failed to load EGL device integration" << key;
+#endif
+ return integration;
+}
+
+static int framebuffer = -1;
+
+QByteArray QEGLDeviceIntegration::fbDeviceName() const
+{
+ QByteArray fbDev = qgetenv("QT_QPA_EGLFS_FB");
+ if (fbDev.isEmpty())
+ fbDev = QByteArrayLiteral("/dev/fb0");
+
+ return fbDev;
+}
+
+int QEGLDeviceIntegration::framebufferIndex() const
+{
+ int fbIndex = 0;
+#ifndef QT_NO_REGULAREXPRESSION
+ QRegularExpression fbIndexRx(QLatin1String("fb(\\d+)"));
+ QRegularExpressionMatch match = fbIndexRx.match(QString::fromLocal8Bit(fbDeviceName()));
+ if (match.hasMatch())
+ fbIndex = match.captured(1).toInt();
+#endif
+ return fbIndex;
+}
+
+void QEGLDeviceIntegration::platformInit()
+{
+ QByteArray fbDev = fbDeviceName();
+
+ framebuffer = qt_safe_open(fbDev, O_RDONLY);
+
+ if (framebuffer == -1) {
+ qWarning("EGLFS: Failed to open %s", fbDev.constData());
+ qFatal("EGLFS: Can't continue without a display");
+ }
+}
+
+void QEGLDeviceIntegration::platformDestroy()
+{
+ if (framebuffer != -1)
+ close(framebuffer);
+}
+
+EGLNativeDisplayType QEGLDeviceIntegration::platformDisplay() const
+{
+ return EGL_DEFAULT_DISPLAY;
+}
+
+bool QEGLDeviceIntegration::usesDefaultScreen()
+{
+ return true;
+}
+
+void QEGLDeviceIntegration::screenInit()
+{
+ // Nothing to do here. Called only when usesDefaultScreen is false.
+}
+
+void QEGLDeviceIntegration::screenDestroy()
+{
+ QGuiApplication *app = qGuiApp;
+ QEglFSIntegration *platformIntegration = static_cast<QEglFSIntegration *>(
+ QGuiApplicationPrivate::platformIntegration());
+ while (!app->screens().isEmpty())
+ platformIntegration->removeScreen(app->screens().last()->handle());
+}
+
+QSizeF QEGLDeviceIntegration::physicalScreenSize() const
+{
+ return q_physicalScreenSizeFromFb(framebuffer, screenSize());
+}
+
+QSize QEGLDeviceIntegration::screenSize() const
+{
+ return q_screenSizeFromFb(framebuffer);
+}
+
+QDpi QEGLDeviceIntegration::logicalDpi() const
+{
+ QSizeF ps = physicalScreenSize();
+ QSize s = screenSize();
+
+ return QDpi(25.4 * s.width() / ps.width(),
+ 25.4 * s.height() / ps.height());
+}
+
+Qt::ScreenOrientation QEGLDeviceIntegration::nativeOrientation() const
+{
+ return Qt::PrimaryOrientation;
+}
+
+Qt::ScreenOrientation QEGLDeviceIntegration::orientation() const
+{
+ return Qt::PrimaryOrientation;
+}
+
+int QEGLDeviceIntegration::screenDepth() const
+{
+ return q_screenDepthFromFb(framebuffer);
+}
+
+QImage::Format QEGLDeviceIntegration::screenFormat() const
+{
+ return screenDepth() == 16 ? QImage::Format_RGB16 : QImage::Format_RGB32;
+}
+
+QSurfaceFormat QEGLDeviceIntegration::surfaceFormatFor(const QSurfaceFormat &inputFormat) const
+{
+ QSurfaceFormat format = inputFormat;
+
+ static const bool force888 = qEnvironmentVariableIntValue("QT_QPA_EGLFS_FORCE888");
+ if (force888) {
+ format.setRedBufferSize(8);
+ format.setGreenBufferSize(8);
+ format.setBlueBufferSize(8);
+ }
+
+ return format;
+}
+
+bool QEGLDeviceIntegration::filterConfig(EGLDisplay, EGLConfig) const
+{
+ return true;
+}
+
+EGLNativeWindowType QEGLDeviceIntegration::createNativeWindow(QPlatformWindow *platformWindow,
+ const QSize &size,
+ const QSurfaceFormat &format)
+{
+ Q_UNUSED(platformWindow);
+ Q_UNUSED(size);
+ Q_UNUSED(format);
+ return 0;
+}
+
+EGLNativeWindowType QEGLDeviceIntegration::createNativeOffscreenWindow(const QSurfaceFormat &format)
+{
+ Q_UNUSED(format);
+ return 0;
+}
+
+void QEGLDeviceIntegration::destroyNativeWindow(EGLNativeWindowType window)
+{
+ Q_UNUSED(window);
+}
+
+bool QEGLDeviceIntegration::hasCapability(QPlatformIntegration::Capability cap) const
+{
+ Q_UNUSED(cap);
+ return false;
+}
+
+QPlatformCursor *QEGLDeviceIntegration::createCursor(QPlatformScreen *screen) const
+{
+ return new QEGLPlatformCursor(screen);
+}
+
+void QEGLDeviceIntegration::waitForVSync(QPlatformSurface *surface) const
+{
+ Q_UNUSED(surface);
+
+#if defined(FBIO_WAITFORVSYNC)
+ static const bool forceSync = qEnvironmentVariableIntValue("QT_QPA_EGLFS_FORCEVSYNC");
+ if (forceSync && framebuffer != -1) {
+ int arg = 0;
+ if (ioctl(framebuffer, FBIO_WAITFORVSYNC, &arg) == -1)
+ qWarning("Could not wait for vsync.");
+ }
+#endif
+}
+
+void QEGLDeviceIntegration::presentBuffer(QPlatformSurface *surface)
+{
+ Q_UNUSED(surface);
+}
+
+bool QEGLDeviceIntegration::supportsPBuffers() const
+{
+ return true;
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/qeglfsdeviceintegration.h b/src/plugins/platforms/eglfs/qeglfsdeviceintegration.h
new file mode 100644
index 0000000000..42abc23c31
--- /dev/null
+++ b/src/plugins/platforms/eglfs/qeglfsdeviceintegration.h
@@ -0,0 +1,113 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QEGLFSDEVICEINTEGRATION_H
+#define QEGLFSDEVICEINTEGRATION_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists purely as an
+// implementation detail. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include <qpa/qplatformintegration.h>
+#include <qpa/qplatformscreen.h>
+#include <QtCore/QString>
+#include <QtGui/QSurfaceFormat>
+#include <QtGui/QImage>
+#include <EGL/egl.h>
+#include "qeglfsglobal.h"
+
+QT_BEGIN_NAMESPACE
+
+class QPlatformSurface;
+
+#define QEGLDeviceIntegrationFactoryInterface_iid "org.qt-project.qt.qpa.egl.QEGLDeviceIntegrationFactoryInterface.5.5"
+
+class Q_EGLFS_EXPORT QEGLDeviceIntegration
+{
+public:
+ virtual ~QEGLDeviceIntegration() { }
+
+ virtual void platformInit();
+ virtual void platformDestroy();
+ virtual EGLNativeDisplayType platformDisplay() const;
+ virtual bool usesDefaultScreen();
+ virtual void screenInit();
+ virtual void screenDestroy();
+ virtual QSizeF physicalScreenSize() const;
+ virtual QSize screenSize() const;
+ virtual QDpi logicalDpi() const;
+ virtual Qt::ScreenOrientation nativeOrientation() const;
+ virtual Qt::ScreenOrientation orientation() const;
+ virtual int screenDepth() const;
+ virtual QImage::Format screenFormat() const;
+ virtual QSurfaceFormat surfaceFormatFor(const QSurfaceFormat &inputFormat) const;
+ virtual EGLNativeWindowType createNativeWindow(QPlatformWindow *platformWindow,
+ const QSize &size,
+ const QSurfaceFormat &format);
+ virtual EGLNativeWindowType createNativeOffscreenWindow(const QSurfaceFormat &format);
+ virtual void destroyNativeWindow(EGLNativeWindowType window);
+ virtual bool hasCapability(QPlatformIntegration::Capability cap) const;
+ virtual QPlatformCursor *createCursor(QPlatformScreen *screen) const;
+ virtual bool filterConfig(EGLDisplay display, EGLConfig config) const;
+ virtual void waitForVSync(QPlatformSurface *surface) const;
+ virtual void presentBuffer(QPlatformSurface *surface);
+ virtual QByteArray fbDeviceName() const;
+ virtual int framebufferIndex() const;
+ virtual bool supportsPBuffers() const;
+};
+
+class Q_EGLFS_EXPORT QEGLDeviceIntegrationPlugin : public QObject
+{
+ Q_OBJECT
+
+public:
+ virtual QEGLDeviceIntegration *create() = 0;
+};
+
+class Q_EGLFS_EXPORT QEGLDeviceIntegrationFactory
+{
+public:
+ static QStringList keys(const QString &pluginPath = QString());
+ static QEGLDeviceIntegration *create(const QString &name, const QString &platformPluginPath = QString());
+};
+
+QT_END_NAMESPACE
+
+#endif // QEGLDEVICEINTEGRATION_H
diff --git a/src/plugins/platforms/eglfs/qeglfsglobal.h b/src/plugins/platforms/eglfs/qeglfsglobal.h
new file mode 100644
index 0000000000..db9a76f899
--- /dev/null
+++ b/src/plugins/platforms/eglfs/qeglfsglobal.h
@@ -0,0 +1,45 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QEGLFSGLOBAL_H
+#define QEGLFSGLOBAL_H
+
+#include <qglobal.h>
+
+#ifdef QT_BUILD_EGL_DEVICE_LIB
+#define Q_EGLFS_EXPORT Q_DECL_EXPORT
+#else
+#define Q_EGLFS_EXPORT Q_DECL_IMPORT
+#endif
+
+#endif
diff --git a/src/plugins/platforms/eglfs/qeglfshooks.cpp b/src/plugins/platforms/eglfs/qeglfshooks.cpp
new file mode 100644
index 0000000000..2f12c61f99
--- /dev/null
+++ b/src/plugins/platforms/eglfs/qeglfshooks.cpp
@@ -0,0 +1,130 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the qmake spec of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qeglfshooks.h"
+#include <QLoggingCategory>
+
+QT_BEGIN_NAMESPACE
+
+Q_DECLARE_LOGGING_CATEGORY(qLcEglDevDebug)
+
+#ifdef EGLFS_PLATFORM_HOOKS
+
+QEGLDeviceIntegration *qt_egl_device_integration()
+{
+ extern QEglFSHooks *platformHooks;
+ return platformHooks;
+}
+
+#else
+
+class DeviceIntegration
+{
+public:
+ DeviceIntegration();
+ ~DeviceIntegration() { delete m_integration; }
+ QEGLDeviceIntegration *integration() { return m_integration; }
+private:
+ QEGLDeviceIntegration *m_integration;
+};
+
+Q_GLOBAL_STATIC(DeviceIntegration, deviceIntegration)
+
+DeviceIntegration::DeviceIntegration()
+{
+ QStringList pluginKeys = QEGLDeviceIntegrationFactory::keys();
+ if (!pluginKeys.isEmpty()) {
+ // Some built-in logic: Prioritize either X11 or KMS/DRM.
+ if (qEnvironmentVariableIsSet("DISPLAY")) {
+ const QString x11key = QStringLiteral("eglfs_x11");
+ if (pluginKeys.contains(x11key)) {
+ pluginKeys.removeOne(x11key);
+ pluginKeys.prepend(x11key);
+ }
+ } else {
+ const QString kmskey = QStringLiteral("eglfs_kms");
+ if (pluginKeys.contains(kmskey)) {
+ pluginKeys.removeOne(kmskey);
+ pluginKeys.prepend(kmskey);
+ }
+ }
+
+ QByteArray requested;
+
+ // The environment variable can override everything.
+ if (qEnvironmentVariableIsSet("QT_QPA_EGLFS_INTEGRATION")) {
+ requested = qgetenv("QT_QPA_EGLFS_INTEGRATION");
+ } else {
+ // Device-specific makespecs may define a preferred plugin.
+#ifdef EGLFS_PREFERRED_PLUGIN
+#define DEFAULT_PLUGIN EGLFS_PREFERRED_PLUGIN
+#define STR(s) #s
+#define STRQ(s) STR(s)
+ requested = STRQ(DEFAULT_PLUGIN);
+#endif
+ }
+
+ // Treat "none" as special. There has to be a way to indicate
+ // that plugins must be ignored when the device is known to be
+ // functional with the default, non-specialized integration.
+ if (requested != QByteArrayLiteral("none")) {
+ if (!requested.isEmpty()) {
+ QString reqStr = QString::fromLocal8Bit(requested);
+ pluginKeys.removeOne(reqStr);
+ pluginKeys.prepend(reqStr);
+ }
+ qCDebug(qLcEglDevDebug) << "EGL device integration plugin keys (sorted):" << pluginKeys;
+ while (!m_integration && !pluginKeys.isEmpty()) {
+ QString key = pluginKeys.takeFirst();
+ qCDebug(qLcEglDevDebug) << "Trying to load device EGL integration" << key;
+ m_integration = QEGLDeviceIntegrationFactory::create(key);
+ }
+ }
+ }
+
+ if (!m_integration) {
+ // Use a default, non-specialized device integration when no plugin is available.
+ // For some systems this is sufficient.
+ qCDebug(qLcEglDevDebug) << "Using base device integration";
+ m_integration = new QEGLDeviceIntegration;
+ }
+}
+
+QEGLDeviceIntegration *qt_egl_device_integration()
+{
+ return deviceIntegration()->integration();
+}
+
+#endif // EGLFS_PLATFORM_HOOKS
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/qeglfshooks.h b/src/plugins/platforms/eglfs/qeglfshooks.h
index c51af17a56..1fcfc5bd08 100644
--- a/src/plugins/platforms/eglfs/qeglfshooks.h
+++ b/src/plugins/platforms/eglfs/qeglfshooks.h
@@ -34,56 +34,17 @@
#ifndef QEGLFSHOOKS_H
#define QEGLFSHOOKS_H
-#include <qpa/qplatformintegration.h>
-#include <qpa/qplatformscreen.h>
-#include <QtGui/QSurfaceFormat>
-#include <QtGui/QImage>
-#include <EGL/egl.h>
+#include "qeglfsdeviceintegration.h"
+#include "qeglfsglobal.h"
QT_BEGIN_NAMESPACE
-class QEGLPlatformCursor;
-class QEglFSScreen;
-
-class QEglFSHooks
+class QEglFSHooks : public QEGLDeviceIntegration
{
-public:
- virtual ~QEglFSHooks() {}
- virtual void platformInit();
- virtual void platformDestroy();
- virtual EGLNativeDisplayType platformDisplay() const;
- virtual QSizeF physicalScreenSize() const;
- virtual QSize screenSize() const;
- virtual QDpi logicalDpi() const;
- virtual Qt::ScreenOrientation nativeOrientation() const;
- virtual Qt::ScreenOrientation orientation() const;
- virtual int screenDepth() const;
- virtual QImage::Format screenFormat() const;
- virtual QSurfaceFormat surfaceFormatFor(const QSurfaceFormat &inputFormat) const;
- virtual EGLNativeWindowType createNativeWindow(QPlatformWindow *platformWindow,
- const QSize &size,
- const QSurfaceFormat &format);
- virtual void destroyNativeWindow(EGLNativeWindowType window);
- virtual bool hasCapability(QPlatformIntegration::Capability cap) const;
- virtual QEGLPlatformCursor *createCursor(QPlatformScreen *screen) const;
- virtual bool filterConfig(EGLDisplay display, EGLConfig config) const;
- virtual void waitForVSync() const;
-
- virtual QByteArray fbDeviceName() const;
- virtual int framebufferIndex() const;
-
- static QEglFSHooks *hooks()
- {
-#ifdef EGLFS_PLATFORM_HOOKS
- extern QEglFSHooks *platformHooks;
- return platformHooks;
-#else
- extern QEglFSHooks stubHooks;
- return &stubHooks;
-#endif
- }
};
+Q_EGLFS_EXPORT QEGLDeviceIntegration *qt_egl_device_integration();
+
QT_END_NAMESPACE
#endif // QEGLFSHOOKS_H
diff --git a/src/plugins/platforms/eglfs/qeglfshooks_kms.cpp b/src/plugins/platforms/eglfs/qeglfshooks_kms.cpp
deleted file mode 100644
index 9e5d624d87..0000000000
--- a/src/plugins/platforms/eglfs/qeglfshooks_kms.cpp
+++ /dev/null
@@ -1,422 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the qmake spec of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia. For licensing terms and
-** conditions see http://qt.digia.com/licensing. For further information
-** use the contact form at http://qt.digia.com/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 2.1 requirements
-** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 3.0 as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU General Public License version 3.0 requirements will be
-** met: http://www.gnu.org/copyleft/gpl.html.
-**
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qeglfshooks.h"
-#include <QtPlatformSupport/private/qdevicediscovery_p.h>
-#include <QtCore/private/qcore_unix_p.h>
-#include <QtCore/QScopedPointer>
-#include <QtGui/qpa/qplatformwindow.h>
-
-#include <xf86drm.h>
-#include <xf86drmMode.h>
-#include <gbm.h>
-
-QT_USE_NAMESPACE
-
-class QEglKmsHooks : public QEglFSHooks
-{
-public:
- QEglKmsHooks();
-
- void platformInit() Q_DECL_OVERRIDE;
- void platformDestroy() Q_DECL_OVERRIDE;
- EGLNativeDisplayType platformDisplay() const Q_DECL_OVERRIDE;
- QSizeF physicalScreenSize() const Q_DECL_OVERRIDE;
- QSize screenSize() const Q_DECL_OVERRIDE;
- int screenDepth() const Q_DECL_OVERRIDE;
- QSurfaceFormat surfaceFormatFor(const QSurfaceFormat &inputFormat) const Q_DECL_OVERRIDE;
- EGLNativeWindowType createNativeWindow(QPlatformWindow *platformWindow,
- const QSize &size,
- const QSurfaceFormat &format) Q_DECL_OVERRIDE;
- void destroyNativeWindow(EGLNativeWindowType window) Q_DECL_OVERRIDE;
- bool hasCapability(QPlatformIntegration::Capability cap) const Q_DECL_OVERRIDE;
- void waitForVSync() const Q_DECL_OVERRIDE;
-
- void waitForVSyncImpl();
- bool setup_kms();
-
- struct FrameBuffer {
- FrameBuffer() : fb(0) {}
- uint32_t fb;
- };
- FrameBuffer *framebufferForBufferObject(gbm_bo *bo);
-
-private:
- // device bits
- QByteArray m_device;
- int m_dri_fd;
- gbm_device *m_gbm_device;
-
- // KMS bits
- drmModeConnector *m_drm_connector;
- drmModeEncoder *m_drm_encoder;
- drmModeModeInfo m_drm_mode;
- quint32 m_drm_crtc;
-
- // Drawing bits
- gbm_surface *m_gbm_surface;
-};
-
-static QEglKmsHooks kms_hooks;
-QEglFSHooks *platformHooks = &kms_hooks;
-
-QEglKmsHooks::QEglKmsHooks()
- : m_dri_fd(-1)
- , m_gbm_device(Q_NULLPTR)
- , m_drm_connector(Q_NULLPTR)
- , m_drm_encoder(Q_NULLPTR)
- , m_drm_crtc(0)
- , m_gbm_surface(Q_NULLPTR)
-{
-
-}
-
-void QEglKmsHooks::platformInit()
-{
- QDeviceDiscovery *d = QDeviceDiscovery::create(QDeviceDiscovery::Device_VideoMask);
- QStringList devices = d->scanConnectedDevices();
- d->deleteLater();
-
- if (devices.isEmpty())
- qFatal("Could not find DRM device!");
-
- m_device = devices.first().toLocal8Bit();
- m_dri_fd = qt_safe_open(m_device.constData(), O_RDWR | O_CLOEXEC);
- if (m_dri_fd == -1) {
- qErrnoWarning("Could not open DRM device %s", m_device.constData());
- qFatal("DRM device required, aborting.");
- }
-
- if (!setup_kms())
- qFatal("Could not set up KMS on device %s!", m_device.constData());
-
- m_gbm_device = gbm_create_device(m_dri_fd);
- if (!m_gbm_device)
- qFatal("Could not initialize gbm on device %s!", m_device.constData());
-}
-
-void QEglKmsHooks::platformDestroy()
-{
- gbm_device_destroy(m_gbm_device);
- m_gbm_device = Q_NULLPTR;
-
- if (qt_safe_close(m_dri_fd) == -1)
- qErrnoWarning("Could not close DRM device %s", m_device.constData());
-
- m_dri_fd = -1;
-}
-
-EGLNativeDisplayType QEglKmsHooks::platformDisplay() const
-{
- return static_cast<EGLNativeDisplayType>(m_gbm_device);
-}
-
-QSizeF QEglKmsHooks::physicalScreenSize() const
-{
- return QSizeF(m_drm_connector->mmWidth,
- m_drm_connector->mmHeight);
-}
-
-QSize QEglKmsHooks::screenSize() const
-{
- return QSize(m_drm_mode.hdisplay,
- m_drm_mode.vdisplay);
-}
-
-int QEglKmsHooks::screenDepth() const
-{
- return 32;
-}
-
-QSurfaceFormat QEglKmsHooks::surfaceFormatFor(const QSurfaceFormat &inputFormat) const
-{
- QSurfaceFormat format(inputFormat);
- format.setRenderableType(QSurfaceFormat::OpenGLES);
- format.setSwapBehavior(QSurfaceFormat::DoubleBuffer);
- format.setRedBufferSize(8);
- format.setGreenBufferSize(8);
- format.setBlueBufferSize(8);
- return format;
-}
-
-EGLNativeWindowType QEglKmsHooks::createNativeWindow(QPlatformWindow *platformWindow,
- const QSize &size,
- const QSurfaceFormat &format)
-{
- Q_UNUSED(platformWindow);
- Q_UNUSED(size);
- Q_UNUSED(format);
-
- if (m_gbm_surface) {
- qWarning("Only single window apps supported!");
- return 0;
- }
-
- m_gbm_surface = gbm_surface_create(m_gbm_device,
- screenSize().width(),
- screenSize().height(),
- GBM_FORMAT_XRGB8888,
- GBM_BO_USE_SCANOUT | GBM_BO_USE_RENDERING);
- if (!m_gbm_surface)
- qFatal("Could not initialize GBM surface");
-
- return reinterpret_cast<EGLNativeWindowType>(m_gbm_surface);
-}
-
-void QEglKmsHooks::destroyNativeWindow(EGLNativeWindowType window)
-{
- gbm_surface *surface = reinterpret_cast<gbm_surface *>(window);
- if (surface == m_gbm_surface)
- m_gbm_surface = Q_NULLPTR;
- gbm_surface_destroy(surface);
-}
-
-bool QEglKmsHooks::hasCapability(QPlatformIntegration::Capability cap) const
-{
- switch (cap) {
- case QPlatformIntegration::ThreadedPixmaps:
- case QPlatformIntegration::OpenGL:
- case QPlatformIntegration::ThreadedOpenGL:
- case QPlatformIntegration::BufferQueueingOpenGL:
- return true;
- default:
- return false;
- }
-}
-
-static void gbm_bo_destroyed_callback(gbm_bo *bo, void *data)
-{
- QEglKmsHooks::FrameBuffer *fb = static_cast<QEglKmsHooks::FrameBuffer *>(data);
-
- if (fb->fb) {
- gbm_device *device = gbm_bo_get_device(bo);
- drmModeRmFB(gbm_device_get_fd(device), fb->fb);
- }
-
- delete fb;
-}
-
-QEglKmsHooks::FrameBuffer *QEglKmsHooks::framebufferForBufferObject(gbm_bo *bo)
-{
- {
- FrameBuffer *fb = static_cast<FrameBuffer *>(gbm_bo_get_user_data(bo));
- if (fb)
- return fb;
- }
-
- uint32_t width = gbm_bo_get_width(bo);
- uint32_t height = gbm_bo_get_height(bo);
- uint32_t stride = gbm_bo_get_stride(bo);
- uint32_t handle = gbm_bo_get_handle(bo).u32;
-
- QScopedPointer<FrameBuffer> fb(new FrameBuffer);
-
- int ret = drmModeAddFB(m_dri_fd, width, height, 24, 32,
- stride, handle, &fb->fb);
-
- if (ret) {
- qWarning("Failed to create KMS FB!");
- return Q_NULLPTR;
- }
-
- gbm_bo_set_user_data(bo, fb.data(), gbm_bo_destroyed_callback);
- return fb.take();
-}
-
-static void page_flip_handler(int fd,
- unsigned int sequence,
- unsigned int tv_sec,
- unsigned int tv_usec,
- void *user_data)
-{
- Q_UNUSED(fd);
- Q_UNUSED(sequence);
- Q_UNUSED(tv_sec);
- Q_UNUSED(tv_usec);
-
- // We are no longer flipping
- *static_cast<bool *>(user_data) = false;
-}
-
-void QEglKmsHooks::waitForVSync() const
-{
- const_cast<QEglKmsHooks*>(this)->waitForVSyncImpl();
-}
-
-void QEglKmsHooks::waitForVSyncImpl()
-{
- if (!m_gbm_surface) {
- qWarning("Cannot sync before platform init!");
- return;
- }
-
- if (!gbm_surface_has_free_buffers(m_gbm_surface)) {
- qWarning("Out of free GBM buffers!");
- return;
- }
-
- gbm_bo *front_buffer = gbm_surface_lock_front_buffer(m_gbm_surface);
- if (!front_buffer) {
- qWarning("Could not lock GBM surface front buffer!");
- return;
- }
-
- QEglKmsHooks::FrameBuffer *fb = framebufferForBufferObject(front_buffer);
-
- int ret = drmModeSetCrtc(m_dri_fd,
- m_drm_crtc,
- fb->fb,
- 0, 0,
- &m_drm_connector->connector_id, 1,
- &m_drm_mode);
- if (ret) {
- qErrnoWarning("Could not set DRM mode!");
- return;
- }
-
- bool flipping = true;
- ret = drmModePageFlip(m_dri_fd,
- m_drm_encoder->crtc_id,
- fb->fb,
- DRM_MODE_PAGE_FLIP_EVENT,
- &flipping);
- if (ret) {
- qErrnoWarning("Could not queue DRM page flip!");
- return;
- }
-
- drmEventContext drmEvent = {
- DRM_EVENT_CONTEXT_VERSION,
- Q_NULLPTR, // vblank handler
- page_flip_handler // page flip handler
- };
-
- fd_set fds;
- FD_ZERO(&fds);
- FD_SET(m_dri_fd, &fds);
-
- time_t start, cur;
- time(&start);
-
- while (flipping && (time(&cur) < start + 1)) {
- timespec v;
- memset(&v, 0, sizeof(v));
- v.tv_sec = start + 1 - cur;
-
- ret = qt_safe_select(m_dri_fd + 1, &fds, Q_NULLPTR, Q_NULLPTR, &v);
-
- if (ret == 0) {
- // timeout
- break;
- } else if (ret == -1) {
- qErrnoWarning("Error while selecting on DRM fd");
- break;
- } else if (drmHandleEvent(m_dri_fd, &drmEvent)) {
- qWarning("Could not handle DRM event!");
- }
- }
-
- gbm_surface_release_buffer(m_gbm_surface, front_buffer);
-}
-
-bool QEglKmsHooks::setup_kms()
-{
- drmModeRes *resources;
- drmModeConnector *connector;
- drmModeEncoder *encoder;
- quint32 crtc = 0;
- int i;
-
- resources = drmModeGetResources(m_dri_fd);
- if (!resources) {
- qWarning("drmModeGetResources failed");
- return false;
- }
-
- for (i = 0; i < resources->count_connectors; i++) {
- connector = drmModeGetConnector(m_dri_fd, resources->connectors[i]);
- if (connector == NULL)
- continue;
-
- if (connector->connection == DRM_MODE_CONNECTED &&
- connector->count_modes > 0) {
- break;
- }
-
- drmModeFreeConnector(connector);
- }
-
- if (i == resources->count_connectors) {
- qWarning("No currently active connector found.");
- return false;
- }
-
- for (i = 0; i < resources->count_encoders; i++) {
- encoder = drmModeGetEncoder(m_dri_fd, resources->encoders[i]);
-
- if (encoder == NULL)
- continue;
-
- if (encoder->encoder_id == connector->encoder_id)
- break;
-
- drmModeFreeEncoder(encoder);
- }
-
- for (int j = 0; j < resources->count_crtcs; j++) {
- if ((encoder->possible_crtcs & (1 << j))) {
- crtc = resources->crtcs[j];
- break;
- }
- }
-
- if (crtc == 0)
- qFatal("No suitable CRTC available");
-
- m_drm_connector = connector;
- m_drm_encoder = encoder;
- m_drm_mode = connector->modes[0];
- m_drm_crtc = crtc;
-
- drmModeFreeResources(resources);
-
- return true;
-}
diff --git a/src/plugins/platforms/eglfs/qeglfshooks_stub.cpp b/src/plugins/platforms/eglfs/qeglfshooks_stub.cpp
deleted file mode 100644
index 26d77a2abb..0000000000
--- a/src/plugins/platforms/eglfs/qeglfshooks_stub.cpp
+++ /dev/null
@@ -1,199 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
-** Contact: http://www.qt-project.org/legal
-**
-** This file is part of the qmake spec of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL21$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and Digia. For licensing terms and
-** conditions see http://qt.digia.com/licensing. For further information
-** use the contact form at http://qt.digia.com/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 2.1 or version 3 as published by the Free
-** Software Foundation and appearing in the file LICENSE.LGPLv21 and
-** LICENSE.LGPLv3 included in the packaging of this file. Please review the
-** following information to ensure the GNU Lesser General Public License
-** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
-** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
-**
-** In addition, as a special exception, Digia gives you certain additional
-** rights. These rights are described in the Digia Qt LGPL Exception
-** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qeglfshooks.h"
-#include <QtPlatformSupport/private/qeglplatformcursor_p.h>
-#include <QtPlatformSupport/private/qeglconvenience_p.h>
-#include <QtCore/QRegularExpression>
-
-#if defined(Q_OS_LINUX)
-#include <fcntl.h>
-#include <unistd.h>
-#include <linux/fb.h>
-#include <sys/ioctl.h>
-#endif
-
-#include <private/qcore_unix_p.h>
-
-QT_BEGIN_NAMESPACE
-
-// file descriptor for the frame buffer
-// this is a global static to keep the QEglFSHooks interface as clean as possible
-static int framebuffer = -1;
-
-QByteArray QEglFSHooks::fbDeviceName() const
-{
- QByteArray fbDev = qgetenv("QT_QPA_EGLFS_FB");
- if (fbDev.isEmpty())
- fbDev = QByteArrayLiteral("/dev/fb0");
-
- return fbDev;
-}
-
-int QEglFSHooks::framebufferIndex() const
-{
- int fbIndex = 0;
-#ifndef QT_NO_REGULAREXPRESSION
- QRegularExpression fbIndexRx(QLatin1String("fb(\\d+)"));
- QRegularExpressionMatch match = fbIndexRx.match(fbDeviceName());
- if (match.hasMatch())
- fbIndex = match.captured(1).toInt();
-
-#endif
- return fbIndex;
-}
-
-void QEglFSHooks::platformInit()
-{
- QByteArray fbDev = fbDeviceName();
-
- framebuffer = qt_safe_open(fbDev, O_RDONLY);
-
- if (framebuffer == -1) {
- qWarning("EGLFS: Failed to open %s", qPrintable(fbDev));
- qFatal("EGLFS: Can't continue without a display");
- }
-}
-
-void QEglFSHooks::platformDestroy()
-{
- if (framebuffer != -1)
- close(framebuffer);
-}
-
-EGLNativeDisplayType QEglFSHooks::platformDisplay() const
-{
- return EGL_DEFAULT_DISPLAY;
-}
-
-QSizeF QEglFSHooks::physicalScreenSize() const
-{
- return q_physicalScreenSizeFromFb(framebuffer, screenSize());
-}
-
-QSize QEglFSHooks::screenSize() const
-{
- return q_screenSizeFromFb(framebuffer);
-}
-
-QDpi QEglFSHooks::logicalDpi() const
-{
- QSizeF ps = physicalScreenSize();
- QSize s = screenSize();
-
- return QDpi(25.4 * s.width() / ps.width(),
- 25.4 * s.height() / ps.height());
-}
-
-Qt::ScreenOrientation QEglFSHooks::nativeOrientation() const
-{
- return Qt::PrimaryOrientation;
-}
-
-Qt::ScreenOrientation QEglFSHooks::orientation() const
-{
- return Qt::PrimaryOrientation;
-}
-
-int QEglFSHooks::screenDepth() const
-{
- return q_screenDepthFromFb(framebuffer);
-}
-
-QImage::Format QEglFSHooks::screenFormat() const
-{
- return screenDepth() == 16 ? QImage::Format_RGB16 : QImage::Format_RGB32;
-}
-
-QSurfaceFormat QEglFSHooks::surfaceFormatFor(const QSurfaceFormat &inputFormat) const
-{
- QSurfaceFormat format = inputFormat;
-
- static const bool force888 = qgetenv("QT_QPA_EGLFS_FORCE888").toInt();
- if (force888) {
- format.setRedBufferSize(8);
- format.setGreenBufferSize(8);
- format.setBlueBufferSize(8);
- }
-
- return format;
-}
-
-bool QEglFSHooks::filterConfig(EGLDisplay, EGLConfig) const
-{
- return true;
-}
-
-EGLNativeWindowType QEglFSHooks::createNativeWindow(QPlatformWindow *platformWindow,
- const QSize &size,
- const QSurfaceFormat &format)
-{
- Q_UNUSED(platformWindow);
- Q_UNUSED(size);
- Q_UNUSED(format);
- return 0;
-}
-
-void QEglFSHooks::destroyNativeWindow(EGLNativeWindowType window)
-{
- Q_UNUSED(window);
-}
-
-bool QEglFSHooks::hasCapability(QPlatformIntegration::Capability cap) const
-{
- Q_UNUSED(cap);
- return false;
-}
-
-QEGLPlatformCursor *QEglFSHooks::createCursor(QPlatformScreen *screen) const
-{
- return new QEGLPlatformCursor(screen);
-}
-
-void QEglFSHooks::waitForVSync() const
-{
-#if defined(FBIO_WAITFORVSYNC)
- static const bool forceSync = qgetenv("QT_QPA_EGLFS_FORCEVSYNC").toInt();
- if (forceSync && framebuffer != -1) {
- int arg = 0;
- if (ioctl(framebuffer, FBIO_WAITFORVSYNC, &arg) == -1)
- qWarning("Could not wait for vsync.");
- }
-#endif
-}
-
-#ifndef EGLFS_PLATFORM_HOOKS
-QEglFSHooks stubHooks;
-#endif
-
-QT_END_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/qeglfsintegration.cpp b/src/plugins/platforms/eglfs/qeglfsintegration.cpp
index 2a4eae3fe2..80a029c27f 100644
--- a/src/plugins/platforms/eglfs/qeglfsintegration.cpp
+++ b/src/plugins/platforms/eglfs/qeglfsintegration.cpp
@@ -36,6 +36,7 @@
#include "qeglfswindow.h"
#include "qeglfshooks.h"
#include "qeglfscontext.h"
+#include "qeglfsoffscreenwindow.h"
#include <QtGui/private/qguiapplication_p.h>
@@ -62,43 +63,55 @@ QT_BEGIN_NAMESPACE
QEglFSIntegration::QEglFSIntegration()
{
- mDisableInputHandlers = qgetenv("QT_QPA_EGLFS_DISABLE_INPUT").toInt();
+ mDisableInputHandlers = qEnvironmentVariableIntValue("QT_QPA_EGLFS_DISABLE_INPUT");
initResources();
}
-QEglFSIntegration::~QEglFSIntegration()
-{
- QEglFSHooks::hooks()->platformDestroy();
-}
-
bool QEglFSIntegration::hasCapability(QPlatformIntegration::Capability cap) const
{
// We assume that devices will have more and not less capabilities
- if (QEglFSHooks::hooks() && QEglFSHooks::hooks()->hasCapability(cap))
+ if (qt_egl_device_integration()->hasCapability(cap))
return true;
return QEGLPlatformIntegration::hasCapability(cap);
}
+void QEglFSIntegration::addScreen(QPlatformScreen *screen)
+{
+ screenAdded(screen);
+}
+
+void QEglFSIntegration::removeScreen(QPlatformScreen *screen)
+{
+ destroyScreen(screen);
+}
+
void QEglFSIntegration::initialize()
{
- QEglFSHooks::hooks()->platformInit();
+ qt_egl_device_integration()->platformInit();
QEGLPlatformIntegration::initialize();
if (!mDisableInputHandlers)
createInputHandlers();
+
+ if (qt_egl_device_integration()->usesDefaultScreen())
+ addScreen(new QEglFSScreen(display()));
+ else
+ qt_egl_device_integration()->screenInit();
}
-EGLNativeDisplayType QEglFSIntegration::nativeDisplay() const
+void QEglFSIntegration::destroy()
{
- return QEglFSHooks::hooks()->platformDisplay();
+ qt_egl_device_integration()->screenDestroy();
+ QEGLPlatformIntegration::destroy();
+ qt_egl_device_integration()->platformDestroy();
}
-QEGLPlatformScreen *QEglFSIntegration::createScreen() const
+EGLNativeDisplayType QEglFSIntegration::nativeDisplay() const
{
- return new QEglFSScreen(display());
+ return qt_egl_device_integration()->platformDisplay();
}
QEGLPlatformWindow *QEglFSIntegration::createWindow(QWindow *window) const
@@ -112,12 +125,12 @@ QEGLPlatformContext *QEglFSIntegration::createContext(const QSurfaceFormat &form
QVariant *nativeHandle) const
{
QEglFSContext *ctx;
- QSurfaceFormat adjustedFormat = QEglFSHooks::hooks()->surfaceFormatFor(format);
+ QSurfaceFormat adjustedFormat = qt_egl_device_integration()->surfaceFormatFor(format);
if (!nativeHandle || nativeHandle->isNull()) {
EGLConfig config = QEglFSIntegration::chooseConfig(display, adjustedFormat);
- ctx = new QEglFSContext(adjustedFormat, shareContext, display, &config, QVariant());
+ ctx = new QEglFSContext(adjustedFormat, shareContext, display, &config, QVariant());
} else {
- ctx = new QEglFSContext(adjustedFormat, shareContext, display, 0, *nativeHandle);
+ ctx = new QEglFSContext(adjustedFormat, shareContext, display, 0, *nativeHandle);
}
*nativeHandle = QVariant::fromValue<QEGLNativeContext>(QEGLNativeContext(ctx->eglContext(), display));
return ctx;
@@ -127,41 +140,28 @@ QPlatformOffscreenSurface *QEglFSIntegration::createOffscreenSurface(EGLDisplay
const QSurfaceFormat &format,
QOffscreenSurface *surface) const
{
- return new QEGLPbuffer(display, QEglFSHooks::hooks()->surfaceFormatFor(format), surface);
-}
+ QSurfaceFormat fmt = qt_egl_device_integration()->surfaceFormatFor(format);
+ if (qt_egl_device_integration()->supportsPBuffers())
+ return new QEGLPbuffer(display, fmt, surface);
+ else
+ return new QEglFSOffscreenWindow(display, fmt, surface);
-QVariant QEglFSIntegration::styleHint(QPlatformIntegration::StyleHint hint) const
-{
- switch (hint)
- {
- case QPlatformIntegration::ShowIsFullScreen:
- return screen()->compositingWindow() == 0;
- default:
- return QPlatformIntegration::styleHint(hint);
- }
+ // Never return null. Multiple QWindows are not supported by this plugin.
}
EGLConfig QEglFSIntegration::chooseConfig(EGLDisplay display, const QSurfaceFormat &format)
{
class Chooser : public QEglConfigChooser {
public:
- Chooser(EGLDisplay display, QEglFSHooks *hooks)
- : QEglConfigChooser(display)
- , m_hooks(hooks)
- {
- }
-
- protected:
- bool filterConfig(EGLConfig config) const
- {
- return m_hooks->filterConfig(display(), config) && QEglConfigChooser::filterConfig(config);
+ Chooser(EGLDisplay display)
+ : QEglConfigChooser(display) { }
+ bool filterConfig(EGLConfig config) const Q_DECL_OVERRIDE {
+ return qt_egl_device_integration()->filterConfig(display(), config)
+ && QEglConfigChooser::filterConfig(config);
}
-
- private:
- QEglFSHooks *m_hooks;
};
- Chooser chooser(display, QEglFSHooks::hooks());
+ Chooser chooser(display);
chooser.setSurfaceFormat(format);
return chooser.chooseConfig();
}
diff --git a/src/plugins/platforms/eglfs/qeglfsintegration.h b/src/plugins/platforms/eglfs/qeglfsintegration.h
index d612a270f2..2074d80e56 100644
--- a/src/plugins/platforms/eglfs/qeglfsintegration.h
+++ b/src/plugins/platforms/eglfs/qeglfsintegration.h
@@ -37,24 +37,26 @@
#include <QtPlatformSupport/private/qeglplatformintegration_p.h>
#include <qpa/qplatformscreen.h>
#include <EGL/egl.h>
+#include "qeglfsglobal.h"
QT_BEGIN_NAMESPACE
-class QEglFSIntegration : public QEGLPlatformIntegration
+class Q_EGLFS_EXPORT QEglFSIntegration : public QEGLPlatformIntegration
{
public:
QEglFSIntegration();
- ~QEglFSIntegration();
+
+ void addScreen(QPlatformScreen *screen);
+ void removeScreen(QPlatformScreen *screen);
void initialize() Q_DECL_OVERRIDE;
+ void destroy() Q_DECL_OVERRIDE;
bool hasCapability(QPlatformIntegration::Capability cap) const Q_DECL_OVERRIDE;
- QVariant styleHint(QPlatformIntegration::StyleHint hint) const Q_DECL_OVERRIDE;
static EGLConfig chooseConfig(EGLDisplay display, const QSurfaceFormat &format);
protected:
- QEGLPlatformScreen *createScreen() const Q_DECL_OVERRIDE;
QEGLPlatformWindow *createWindow(QWindow *window) const Q_DECL_OVERRIDE;
QEGLPlatformContext *createContext(const QSurfaceFormat &format,
QPlatformOpenGLContext *shareContext,
diff --git a/src/plugins/platforms/eglfs/main.cpp b/src/plugins/platforms/eglfs/qeglfsmain.cpp
index be91fbf3c3..2c5e79534d 100644
--- a/src/plugins/platforms/eglfs/main.cpp
+++ b/src/plugins/platforms/eglfs/qeglfsmain.cpp
@@ -41,7 +41,7 @@ class QEglFSIntegrationPlugin : public QPlatformIntegrationPlugin
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.2" FILE "eglfs.json")
public:
- QPlatformIntegration *create(const QString&, const QStringList&);
+ QPlatformIntegration *create(const QString&, const QStringList&) Q_DECL_OVERRIDE;
};
QPlatformIntegration* QEglFSIntegrationPlugin::create(const QString& system, const QStringList& paramList)
@@ -55,4 +55,4 @@ QPlatformIntegration* QEglFSIntegrationPlugin::create(const QString& system, con
QT_END_NAMESPACE
-#include "main.moc"
+#include "qeglfsmain.moc"
diff --git a/src/plugins/platforms/eglfs/qeglfsoffscreenwindow.cpp b/src/plugins/platforms/eglfs/qeglfsoffscreenwindow.cpp
new file mode 100644
index 0000000000..7bf53ef351
--- /dev/null
+++ b/src/plugins/platforms/eglfs/qeglfsoffscreenwindow.cpp
@@ -0,0 +1,85 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qeglfsoffscreenwindow.h"
+#include "qeglfshooks.h"
+#include <QtGui/QOffscreenSurface>
+#include <QtPlatformSupport/private/qeglconvenience_p.h>
+
+QT_BEGIN_NAMESPACE
+
+/*
+ In some cases pbuffers are not available. Triggering QtGui's built-in
+ fallback for a hidden QWindow is not suitable for eglfs since this would be
+ treated as an attempt to create multiple top-level, native windows.
+
+ Therefore this class is provided as an alternative to QEGLPbuffer.
+
+ This class requires the hooks to implement createNativeOffscreenWindow().
+*/
+
+QEglFSOffscreenWindow::QEglFSOffscreenWindow(EGLDisplay display, const QSurfaceFormat &format, QOffscreenSurface *offscreenSurface)
+ : QPlatformOffscreenSurface(offscreenSurface)
+ , m_format(format)
+ , m_display(display)
+ , m_surface(EGL_NO_SURFACE)
+ , m_window(0)
+{
+ m_window = qt_egl_device_integration()->createNativeOffscreenWindow(format);
+ if (!m_window) {
+ qWarning("QEglFSOffscreenWindow: Failed to create native window");
+ return;
+ }
+ EGLConfig config = q_configFromGLFormat(m_display, m_format);
+ m_surface = eglCreateWindowSurface(m_display, config, m_window, 0);
+ if (m_surface != EGL_NO_SURFACE)
+ m_format = q_glFormatFromConfig(m_display, config);
+}
+
+QEglFSOffscreenWindow::~QEglFSOffscreenWindow()
+{
+ if (m_surface != EGL_NO_SURFACE)
+ eglDestroySurface(m_display, m_surface);
+ if (m_window)
+ qt_egl_device_integration()->destroyNativeWindow(m_window);
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/qeglfsoffscreenwindow.h b/src/plugins/platforms/eglfs/qeglfsoffscreenwindow.h
new file mode 100644
index 0000000000..128ff56968
--- /dev/null
+++ b/src/plugins/platforms/eglfs/qeglfsoffscreenwindow.h
@@ -0,0 +1,69 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QEGLFSOFFSCREENWINDOW_H
+#define QEGLFSOFFSCREENWINDOW_H
+
+#include <EGL/egl.h>
+#include <qpa/qplatformoffscreensurface.h>
+#include "qeglfsglobal.h"
+
+QT_BEGIN_NAMESPACE
+
+class Q_EGLFS_EXPORT QEglFSOffscreenWindow : public QPlatformOffscreenSurface
+{
+public:
+ QEglFSOffscreenWindow(EGLDisplay display, const QSurfaceFormat &format, QOffscreenSurface *offscreenSurface);
+ ~QEglFSOffscreenWindow();
+
+ QSurfaceFormat format() const Q_DECL_OVERRIDE { return m_format; }
+ bool isValid() const Q_DECL_OVERRIDE { return m_surface != EGL_NO_SURFACE; }
+
+private:
+ QSurfaceFormat m_format;
+ EGLDisplay m_display;
+ EGLSurface m_surface;
+ EGLNativeWindowType m_window;
+};
+
+QT_END_NAMESPACE
+
+#endif // QEGLFSOFFSCREENWINDOW_H
diff --git a/src/plugins/platforms/eglfs/qeglfsscreen.cpp b/src/plugins/platforms/eglfs/qeglfsscreen.cpp
index cd68540581..84ea1c6483 100644
--- a/src/plugins/platforms/eglfs/qeglfsscreen.cpp
+++ b/src/plugins/platforms/eglfs/qeglfsscreen.cpp
@@ -34,18 +34,16 @@
#include "qeglfsscreen.h"
#include "qeglfswindow.h"
#include "qeglfshooks.h"
-#include <QtPlatformSupport/private/qeglplatformcursor_p.h>
+#include <QtGui/qpa/qplatformcursor.h>
QT_BEGIN_NAMESPACE
QEglFSScreen::QEglFSScreen(EGLDisplay dpy)
: QEGLPlatformScreen(dpy),
m_surface(EGL_NO_SURFACE),
- m_cursor(0),
- m_rootWindow(0),
- m_rootContext(0)
+ m_cursor(0)
{
- m_cursor = QEglFSHooks::hooks()->createCursor(this);
+ m_cursor = qt_egl_device_integration()->createCursor(this);
}
QEglFSScreen::~QEglFSScreen()
@@ -55,37 +53,37 @@ QEglFSScreen::~QEglFSScreen()
QRect QEglFSScreen::geometry() const
{
- return QRect(QPoint(0, 0), QEglFSHooks::hooks()->screenSize());
+ return QRect(QPoint(0, 0), qt_egl_device_integration()->screenSize());
}
int QEglFSScreen::depth() const
{
- return QEglFSHooks::hooks()->screenDepth();
+ return qt_egl_device_integration()->screenDepth();
}
QImage::Format QEglFSScreen::format() const
{
- return QEglFSHooks::hooks()->screenFormat();
+ return qt_egl_device_integration()->screenFormat();
}
QSizeF QEglFSScreen::physicalSize() const
{
- return QEglFSHooks::hooks()->physicalScreenSize();
+ return qt_egl_device_integration()->physicalScreenSize();
}
QDpi QEglFSScreen::logicalDpi() const
{
- return QEglFSHooks::hooks()->logicalDpi();
+ return qt_egl_device_integration()->logicalDpi();
}
Qt::ScreenOrientation QEglFSScreen::nativeOrientation() const
{
- return QEglFSHooks::hooks()->nativeOrientation();
+ return qt_egl_device_integration()->nativeOrientation();
}
Qt::ScreenOrientation QEglFSScreen::orientation() const
{
- return QEglFSHooks::hooks()->orientation();
+ return qt_egl_device_integration()->orientation();
}
QPlatformCursor *QEglFSScreen::cursor() const
diff --git a/src/plugins/platforms/eglfs/qeglfsscreen.h b/src/plugins/platforms/eglfs/qeglfsscreen.h
index 132646d7a6..59f55d33fb 100644
--- a/src/plugins/platforms/eglfs/qeglfsscreen.h
+++ b/src/plugins/platforms/eglfs/qeglfsscreen.h
@@ -34,19 +34,16 @@
#ifndef QEGLFSSCREEN_H
#define QEGLFSSCREEN_H
+#include "qeglfsglobal.h"
#include <QtPlatformSupport/private/qeglplatformscreen_p.h>
-
-#include <QtCore/QTextStream>
-
#include <EGL/egl.h>
QT_BEGIN_NAMESPACE
-class QEGLPlatformCursor;
class QEglFSWindow;
class QOpenGLContext;
-class QEglFSScreen : public QEGLPlatformScreen
+class Q_EGLFS_EXPORT QEglFSScreen : public QEGLPlatformScreen
{
public:
QEglFSScreen(EGLDisplay display);
@@ -65,12 +62,6 @@ public:
EGLSurface primarySurface() const { return m_surface; }
- QEGLPlatformWindow *compositingWindow() Q_DECL_OVERRIDE { return m_rootWindow; }
- QOpenGLContext *compositingContext() Q_DECL_OVERRIDE { return m_rootContext; }
-
- void setRootWindow(QEGLPlatformWindow *window) { m_rootWindow = window; }
- void setRootContext(QOpenGLContext *context) { m_rootContext = context; }
-
protected:
void setPrimarySurface(EGLSurface surface);
@@ -78,9 +69,7 @@ private:
friend class QEglFSWindow;
EGLSurface m_surface;
- QEGLPlatformCursor *m_cursor;
- QEGLPlatformWindow *m_rootWindow;
- QOpenGLContext *m_rootContext;
+ QPlatformCursor *m_cursor;
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/eglfs/qeglfswindow.cpp b/src/plugins/platforms/eglfs/qeglfswindow.cpp
index f5839e086d..d568d50e59 100644
--- a/src/plugins/platforms/eglfs/qeglfswindow.cpp
+++ b/src/plugins/platforms/eglfs/qeglfswindow.cpp
@@ -39,7 +39,6 @@
#include <QtGui/QOpenGLContext>
#include <QtPlatformSupport/private/qeglplatformcursor_p.h>
#include <QtPlatformSupport/private/qeglconvenience_p.h>
-
#include <QtDebug>
QT_BEGIN_NAMESPACE
@@ -73,9 +72,10 @@ void QEglFSWindow::create()
// raster windows will not have their own native window, surface and context. Instead,
// they will be composited onto the root window's surface.
QEglFSScreen *screen = this->screen();
+ QOpenGLCompositor *compositor = QOpenGLCompositor::instance();
if (screen->primarySurface() != EGL_NO_SURFACE) {
- if (isRaster() && screen->compositingWindow()) {
- m_format = screen->compositingWindow()->format();
+ if (isRaster() && compositor->targetWindow()) {
+ m_format = compositor->targetWindow()->format();
return;
}
@@ -93,7 +93,7 @@ void QEglFSWindow::create()
QWindowSystemInterface::handleExposeEvent(window(), QRect(QPoint(0, 0), geometry().size()));
EGLDisplay display = static_cast<QEglFSScreen *>(screen)->display();
- QSurfaceFormat platformFormat = QEglFSHooks::hooks()->surfaceFormatFor(window()->requestedFormat());
+ QSurfaceFormat platformFormat = qt_egl_device_integration()->surfaceFormatFor(window()->requestedFormat());
m_config = QEglFSIntegration::chooseConfig(display, platformFormat);
m_format = q_glFormatFromConfig(display, m_config, platformFormat);
@@ -107,8 +107,7 @@ void QEglFSWindow::create()
context->setScreen(window()->screen());
if (!context->create())
qFatal("EGLFS: Failed to create compositing context");
- screen->setRootContext(context);
- screen->setRootWindow(this);
+ compositor->setTarget(context, window());
}
}
@@ -116,7 +115,7 @@ void QEglFSWindow::destroy()
{
QEglFSScreen *screen = this->screen();
if (m_flags.testFlag(HasNativeWindow)) {
- QEGLPlatformCursor *cursor = static_cast<QEGLPlatformCursor *>(screen->cursor());
+ QEGLPlatformCursor *cursor = qobject_cast<QEGLPlatformCursor *>(screen->cursor());
if (cursor)
cursor->resetResources();
@@ -127,7 +126,7 @@ void QEglFSWindow::destroy()
}
m_flags = 0;
- screen->removeWindow(this);
+ QOpenGLCompositor::instance()->removeWindow(this);
}
// The virtual functions resetSurface and invalidateSurface may get overridden
@@ -141,14 +140,15 @@ void QEglFSWindow::invalidateSurface()
eglDestroySurface(display, m_surface);
m_surface = EGL_NO_SURFACE;
}
- QEglFSHooks::hooks()->destroyNativeWindow(m_window);
+ qt_egl_device_integration()->destroyNativeWindow(m_window);
m_window = 0;
}
void QEglFSWindow::resetSurface()
{
- EGLDisplay display = static_cast<QEglFSScreen *>(screen())->display();
- m_window = QEglFSHooks::hooks()->createNativeWindow(this, QEglFSHooks::hooks()->screenSize(), m_format);
+ QEglFSScreen *nativeScreen = static_cast<QEglFSScreen *>(screen());
+ EGLDisplay display = nativeScreen->display();
+ m_window = qt_egl_device_integration()->createNativeWindow(this, nativeScreen->geometry().size(), m_format);
m_surface = eglCreateWindowSurface(display, m_config, m_window, NULL);
if (m_surface == EGL_NO_SURFACE) {
EGLint error = eglGetError();
@@ -159,17 +159,18 @@ void QEglFSWindow::resetSurface()
void QEglFSWindow::setVisible(bool visible)
{
- QList<QEGLPlatformWindow *> windows = screen()->windows();
+ QOpenGLCompositor *compositor = QOpenGLCompositor::instance();
+ QList<QOpenGLCompositorWindow *> windows = compositor->windows();
QWindow *wnd = window();
if (wnd->type() != Qt::Desktop) {
if (visible) {
- screen()->addWindow(this);
+ compositor->addWindow(this);
} else {
- screen()->removeWindow(this);
- windows = screen()->windows();
+ compositor->removeWindow(this);
+ windows = compositor->windows();
if (windows.size())
- windows.last()->requestActivateWindow();
+ windows.last()->sourceWindow()->requestActivate();
}
}
@@ -209,7 +210,7 @@ QRect QEglFSWindow::geometry() const
void QEglFSWindow::requestActivateWindow()
{
if (window()->type() != Qt::Desktop)
- screen()->moveToTop(this);
+ QOpenGLCompositor::instance()->moveToTop(this);
QWindow *wnd = window();
QWindowSystemInterface::handleWindowActivated(wnd);
@@ -220,20 +221,21 @@ void QEglFSWindow::raise()
{
QWindow *wnd = window();
if (wnd->type() != Qt::Desktop) {
- screen()->moveToTop(this);
+ QOpenGLCompositor::instance()->moveToTop(this);
QWindowSystemInterface::handleExposeEvent(wnd, QRect(QPoint(0, 0), wnd->geometry().size()));
}
}
void QEglFSWindow::lower()
{
- QList<QEGLPlatformWindow *> windows = screen()->windows();
+ QOpenGLCompositor *compositor = QOpenGLCompositor::instance();
+ QList<QOpenGLCompositorWindow *> windows = compositor->windows();
if (window()->type() != Qt::Desktop && windows.count() > 1) {
int idx = windows.indexOf(this);
if (idx > 0) {
- screen()->changeWindowIndex(this, idx - 1);
- QWindowSystemInterface::handleExposeEvent(windows.last()->window(),
- QRect(QPoint(0, 0), windows.last()->geometry().size()));
+ compositor->changeWindowIndex(this, idx - 1);
+ QWindowSystemInterface::handleExposeEvent(windows.last()->sourceWindow(),
+ QRect(QPoint(0, 0), windows.last()->sourceWindow()->geometry().size()));
}
}
}
diff --git a/src/plugins/platforms/eglfs/qeglfswindow.h b/src/plugins/platforms/eglfs/qeglfswindow.h
index 5dfa35197f..a3e3722b5a 100644
--- a/src/plugins/platforms/eglfs/qeglfswindow.h
+++ b/src/plugins/platforms/eglfs/qeglfswindow.h
@@ -36,12 +36,12 @@
#include "qeglfsintegration.h"
#include "qeglfsscreen.h"
-
+#include "qeglfsglobal.h"
#include <QtPlatformSupport/private/qeglplatformwindow_p.h>
QT_BEGIN_NAMESPACE
-class QEglFSWindow : public QEGLPlatformWindow
+class Q_EGLFS_EXPORT QEglFSWindow : public QEGLPlatformWindow
{
public:
QEglFSWindow(QWindow *w);
@@ -70,7 +70,7 @@ public:
bool hasNativeWindow() const { return m_flags.testFlag(HasNativeWindow); }
- virtual void invalidateSurface();
+ virtual void invalidateSurface() Q_DECL_OVERRIDE;
virtual void resetSurface();
protected:
diff --git a/src/plugins/platforms/ios/qiosintegration.mm b/src/plugins/platforms/ios/qiosintegration.mm
index 461f160892..ff4b753cc1 100644
--- a/src/plugins/platforms/ios/qiosintegration.mm
+++ b/src/plugins/platforms/ios/qiosintegration.mm
@@ -120,7 +120,7 @@ QIOSIntegration::~QIOSIntegration()
m_inputContext = 0;
foreach (QScreen *screen, QGuiApplication::screens())
- delete screen->handle();
+ destroyScreen(screen->handle());
delete m_platformServices;
m_platformServices = 0;
diff --git a/src/plugins/platforms/ios/quiaccessibilityelement.mm b/src/plugins/platforms/ios/quiaccessibilityelement.mm
index 63b6827ad3..3dff271d00 100644
--- a/src/plugins/platforms/ios/quiaccessibilityelement.mm
+++ b/src/plugins/platforms/ios/quiaccessibilityelement.mm
@@ -193,4 +193,33 @@
action->doAction(QAccessibleActionInterface::decreaseAction());
}
+- (BOOL) accessibilityScroll : (UIAccessibilityScrollDirection) direction
+{
+ QAccessibleInterface *iface = QAccessible::accessibleInterface(self.axid);
+ QAccessibleActionInterface *action = iface->actionInterface();
+ if (!action)
+ return NO;
+ switch (direction) {
+ case UIAccessibilityScrollDirectionRight:
+ action->doAction(QAccessibleActionInterface::scrollRightAction());
+ return YES;
+ case UIAccessibilityScrollDirectionLeft:
+ action->doAction(QAccessibleActionInterface::scrollLeftAction());
+ return YES;
+ case UIAccessibilityScrollDirectionUp:
+ action->doAction(QAccessibleActionInterface::scrollUpAction());
+ return YES;
+ case UIAccessibilityScrollDirectionDown:
+ action->doAction(QAccessibleActionInterface::scrollDownAction());
+ return YES;
+ case UIAccessibilityScrollDirectionNext:
+ action->doAction(QAccessibleActionInterface::nextPageAction());
+ return YES;
+ case UIAccessibilityScrollDirectionPrevious:
+ action->doAction(QAccessibleActionInterface::previousPageAction());
+ return YES;
+ }
+ return NO;
+}
+
@end
diff --git a/src/plugins/platforms/kms/main.cpp b/src/plugins/platforms/kms/main.cpp
index 39ca77bd56..9e9e2c7344 100644
--- a/src/plugins/platforms/kms/main.cpp
+++ b/src/plugins/platforms/kms/main.cpp
@@ -41,7 +41,7 @@ class QKmsIntegrationPlugin : public QPlatformIntegrationPlugin
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.2" FILE "kms.json")
public:
- QPlatformIntegration *create(const QString&, const QStringList&);
+ QPlatformIntegration *create(const QString&, const QStringList&) Q_DECL_OVERRIDE;
};
QPlatformIntegration *QKmsIntegrationPlugin::create(const QString& system, const QStringList& paramList)
diff --git a/src/plugins/platforms/kms/qkmsbackingstore.h b/src/plugins/platforms/kms/qkmsbackingstore.h
index 56d57313e8..a8f2dddd03 100644
--- a/src/plugins/platforms/kms/qkmsbackingstore.h
+++ b/src/plugins/platforms/kms/qkmsbackingstore.h
@@ -49,12 +49,12 @@ public:
QKmsBackingStore(QWindow *window);
~QKmsBackingStore();
- QPaintDevice *paintDevice();
+ QPaintDevice *paintDevice() Q_DECL_OVERRIDE;
- void beginPaint(const QRegion &);
+ void beginPaint(const QRegion &) Q_DECL_OVERRIDE;
- void flush(QWindow *window, const QRegion &region, const QPoint &offset);
- void resize(const QSize &size, const QRegion &staticContents);
+ void flush(QWindow *window, const QRegion &region, const QPoint &offset) Q_DECL_OVERRIDE;
+ void resize(const QSize &size, const QRegion &staticContents) Q_DECL_OVERRIDE;
QImage toImage() const Q_DECL_OVERRIDE { return m_image; }
diff --git a/src/plugins/platforms/kms/qkmscontext.h b/src/plugins/platforms/kms/qkmscontext.h
index b388dba7d5..fabe3c2524 100644
--- a/src/plugins/platforms/kms/qkmscontext.h
+++ b/src/plugins/platforms/kms/qkmscontext.h
@@ -48,14 +48,14 @@ class QKmsContext : public QPlatformOpenGLContext
public:
QKmsContext(QOpenGLContext *context, QKmsDevice *device);
- bool makeCurrent(QPlatformSurface *surface);
- void doneCurrent();
- void swapBuffers(QPlatformSurface *surface);
- void (*getProcAddress(const QByteArray &procName)) ();
+ bool makeCurrent(QPlatformSurface *surface) Q_DECL_OVERRIDE;
+ void doneCurrent() Q_DECL_OVERRIDE;
+ void swapBuffers(QPlatformSurface *surface) Q_DECL_OVERRIDE;
+ void (*getProcAddress(const QByteArray &procName)) () Q_DECL_OVERRIDE;
- bool isValid() const;
+ bool isValid() const Q_DECL_OVERRIDE;
- QSurfaceFormat format() const;
+ QSurfaceFormat format() const Q_DECL_OVERRIDE;
EGLContext eglContext() const;
diff --git a/src/plugins/platforms/kms/qkmscursor.h b/src/plugins/platforms/kms/qkmscursor.h
index 3eef4e599c..35d9814224 100644
--- a/src/plugins/platforms/kms/qkmscursor.h
+++ b/src/plugins/platforms/kms/qkmscursor.h
@@ -49,8 +49,8 @@ public:
QKmsCursor(QKmsScreen *screen);
~QKmsCursor();
- void pointerEvent(const QMouseEvent &event);
- void changeCursor(QCursor *windowCursor, QWindow *window);
+ void pointerEvent(const QMouseEvent &event) Q_DECL_OVERRIDE;
+ void changeCursor(QCursor *windowCursor, QWindow *window) Q_DECL_OVERRIDE;
private:
QKmsScreen *m_screen;
diff --git a/src/plugins/platforms/kms/qkmsintegration.cpp b/src/plugins/platforms/kms/qkmsintegration.cpp
index d94d7d9aaa..5ad58ba54f 100644
--- a/src/plugins/platforms/kms/qkmsintegration.cpp
+++ b/src/plugins/platforms/kms/qkmsintegration.cpp
@@ -74,7 +74,7 @@ QKmsIntegration::~QKmsIntegration()
delete device;
}
foreach (QPlatformScreen *screen, m_screens) {
- delete screen;
+ destroyScreen(screen);
}
delete m_fontDatabase;
delete m_vtHandler;
diff --git a/src/plugins/platforms/kms/qkmsnativeinterface.cpp b/src/plugins/platforms/kms/qkmsnativeinterface.cpp
index 3ed1643fdb..c133b48086 100644
--- a/src/plugins/platforms/kms/qkmsnativeinterface.cpp
+++ b/src/plugins/platforms/kms/qkmsnativeinterface.cpp
@@ -52,6 +52,21 @@ public:
Q_GLOBAL_STATIC(QKmsResourceMap, qKmsResourceMap)
+void *QKmsNativeInterface::nativeResourceForIntegration(const QByteArray &resourceString)
+{
+ QByteArray lowerCaseResource = resourceString.toLower();
+ ResourceType resource = qKmsResourceMap()->value(lowerCaseResource);
+ void *result = 0;
+ switch (resource) {
+ case EglDisplay:
+ result = eglDisplay();
+ break;
+ default:
+ result = 0;
+ }
+ return result;
+
+}
void *QKmsNativeInterface::nativeResourceForWindow(const QByteArray &resourceString, QWindow *window)
{
QByteArray lowerCaseResource = resourceString.toLower();
@@ -79,7 +94,14 @@ QPlatformNativeInterface::NativeResourceForContextFunction QKmsNativeInterface::
return 0;
}
-
+void *QKmsNativeInterface::eglDisplay()
+{
+ //QKmsIntegration *integration = static_cast<QKmsIntegration *>(QGuiApplicationPrivate::platformIntegration());
+ QKmsScreen *screen = static_cast<QKmsScreen *>(QGuiApplication::primaryScreen()->handle());
+ if (!screen || !screen->device())
+ return 0;
+ return screen->device()->eglDisplay();
+}
void *QKmsNativeInterface::eglDisplayForWindow(QWindow *window)
{
diff --git a/src/plugins/platforms/kms/qkmsnativeinterface.h b/src/plugins/platforms/kms/qkmsnativeinterface.h
index b9ef914045..402c8b7f6f 100644
--- a/src/plugins/platforms/kms/qkmsnativeinterface.h
+++ b/src/plugins/platforms/kms/qkmsnativeinterface.h
@@ -46,10 +46,12 @@ public:
EglContext
};
- void *nativeResourceForWindow(const QByteArray &resourceString, QWindow *window);
+ void *nativeResourceForIntegration(const QByteArray &resource) Q_DECL_OVERRIDE;
+ void *nativeResourceForWindow(const QByteArray &resourceString, QWindow *window) Q_DECL_OVERRIDE;
- NativeResourceForContextFunction nativeResourceFunctionForContext(const QByteArray &resource);
+ NativeResourceForContextFunction nativeResourceFunctionForContext(const QByteArray &resource) Q_DECL_OVERRIDE;
+ void *eglDisplay();
void *eglDisplayForWindow(QWindow *window);
void *eglContextForWindow(QWindow *window);
static void *eglContextForContext(QOpenGLContext *context);
diff --git a/src/plugins/platforms/kms/qkmsscreen.cpp b/src/plugins/platforms/kms/qkmsscreen.cpp
index ddcdd10928..84c1eba448 100644
--- a/src/plugins/platforms/kms/qkmsscreen.cpp
+++ b/src/plugins/platforms/kms/qkmsscreen.cpp
@@ -216,7 +216,7 @@ void QKmsScreen::performPageFlip()
// Initialize cursor
- static int hideCursor = qgetenv("QT_QPA_KMS_HIDECURSOR").toInt();
+ static int hideCursor = qEnvironmentVariableIntValue("QT_QPA_KMS_HIDECURSOR");
if (!hideCursor) {
QCursor cursor(Qt::ArrowCursor);
m_cursor->changeCursor(&cursor, 0);
diff --git a/src/plugins/platforms/kms/qkmsscreen.h b/src/plugins/platforms/kms/qkmsscreen.h
index 552541503c..8557e12a03 100644
--- a/src/plugins/platforms/kms/qkmsscreen.h
+++ b/src/plugins/platforms/kms/qkmsscreen.h
@@ -67,11 +67,11 @@ public:
QKmsScreen(QKmsDevice *device, const drmModeRes *resources, const drmModeConnector *connector);
~QKmsScreen();
- QRect geometry() const;
- int depth() const;
- QImage::Format format() const;
- QSizeF physicalSize() const;
- QPlatformCursor *cursor() const;
+ QRect geometry() const Q_DECL_OVERRIDE;
+ int depth() const Q_DECL_OVERRIDE;
+ QImage::Format format() const Q_DECL_OVERRIDE;
+ QSizeF physicalSize() const Q_DECL_OVERRIDE;
+ QPlatformCursor *cursor() const Q_DECL_OVERRIDE;
quint32 crtcId() const { return m_crtcId; }
QKmsDevice *device() const;
diff --git a/src/plugins/platforms/linuxfb/main.cpp b/src/plugins/platforms/linuxfb/main.cpp
index 14cd3611d9..1fcf3fa0a8 100644
--- a/src/plugins/platforms/linuxfb/main.cpp
+++ b/src/plugins/platforms/linuxfb/main.cpp
@@ -41,7 +41,7 @@ class QLinuxFbIntegrationPlugin : public QPlatformIntegrationPlugin
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.2" FILE "linuxfb.json")
public:
- QPlatformIntegration *create(const QString&, const QStringList&);
+ QPlatformIntegration *create(const QString&, const QStringList&) Q_DECL_OVERRIDE;
};
QPlatformIntegration* QLinuxFbIntegrationPlugin::create(const QString& system, const QStringList& paramList)
diff --git a/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp b/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp
index cb870847f2..1600ee3f2b 100644
--- a/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp
+++ b/src/plugins/platforms/linuxfb/qlinuxfbintegration.cpp
@@ -46,6 +46,16 @@
#include <QtGui/private/qguiapplication_p.h>
#include <qpa/qplatforminputcontextfactory_p.h>
+#if !defined(QT_NO_EVDEV) && (!defined(Q_OS_ANDROID) || defined(Q_OS_ANDROID_NO_SDK))
+#include <QtPlatformSupport/private/qevdevmousemanager_p.h>
+#include <QtPlatformSupport/private/qevdevkeyboardmanager_p.h>
+#include <QtPlatformSupport/private/qevdevtouch_p.h>
+#endif
+
+#if !defined(QT_NO_TSLIB) && (!defined(Q_OS_ANDROID) || defined(Q_OS_ANDROID_NO_SDK))
+#include <QtPlatformSupport/private/qtslib_p.h>
+#endif
+
QT_BEGIN_NAMESPACE
QLinuxFbIntegration::QLinuxFbIntegration(const QStringList &paramList)
@@ -57,7 +67,7 @@ QLinuxFbIntegration::QLinuxFbIntegration(const QStringList &paramList)
QLinuxFbIntegration::~QLinuxFbIntegration()
{
- delete m_primaryScreen;
+ destroyScreen(m_primaryScreen);
}
void QLinuxFbIntegration::initialize()
@@ -70,6 +80,9 @@ void QLinuxFbIntegration::initialize()
m_inputContext = QPlatformInputContextFactory::create();
m_vtHandler.reset(new QFbVtHandler);
+
+ if (!qEnvironmentVariableIntValue("QT_QPA_FB_DISABLE_INPUT"))
+ createInputHandlers();
}
bool QLinuxFbIntegration::hasCapability(QPlatformIntegration::Capability cap) const
@@ -113,4 +126,24 @@ QPlatformServices *QLinuxFbIntegration::services() const
return m_services.data();
}
+void QLinuxFbIntegration::createInputHandlers()
+{
+#if !defined(QT_NO_EVDEV) && (!defined(Q_OS_ANDROID) || defined(Q_OS_ANDROID_NO_SDK))
+ new QEvdevKeyboardManager(QLatin1String("EvdevKeyboard"), QString(), this);
+ QEvdevMouseManager *mouseMgr = new QEvdevMouseManager(QLatin1String("EvdevMouse"), QString(), this);
+ Q_FOREACH (QScreen *screen, QGuiApplication::screens()) {
+ QFbCursor *cursor = qobject_cast<QFbCursor *>(screen->handle()->cursor());
+ if (cursor)
+ cursor->setMouseDeviceDiscovery(mouseMgr->deviceDiscovery());
+ }
+#ifndef QT_NO_TSLIB
+ const bool useTslib = qEnvironmentVariableIntValue("QT_QPA_FB_TSLIB");
+ if (useTslib)
+ new QTsLibMouseHandler(QLatin1String("TsLib"), QString());
+ else
+#endif // QT_NO_TSLIB
+ new QEvdevTouchScreenHandlerThread(QString(), this);
+#endif
+}
+
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/linuxfb/qlinuxfbintegration.h b/src/plugins/platforms/linuxfb/qlinuxfbintegration.h
index cabd943921..3e7e1c57f4 100644
--- a/src/plugins/platforms/linuxfb/qlinuxfbintegration.h
+++ b/src/plugins/platforms/linuxfb/qlinuxfbintegration.h
@@ -35,6 +35,7 @@
#define QLINUXFBINTEGRATION_H
#include <qpa/qplatformintegration.h>
+#include <qpa/qplatformnativeinterface.h>
QT_BEGIN_NAMESPACE
@@ -42,7 +43,7 @@ class QAbstractEventDispatcher;
class QLinuxFbScreen;
class QFbVtHandler;
-class QLinuxFbIntegration : public QPlatformIntegration
+class QLinuxFbIntegration : public QPlatformIntegration, public QPlatformNativeInterface
{
public:
QLinuxFbIntegration(const QStringList &paramList);
@@ -63,6 +64,8 @@ public:
QList<QPlatformScreen *> screens() const;
private:
+ void createInputHandlers();
+
QLinuxFbScreen *m_primaryScreen;
QPlatformInputContext *m_inputContext;
QScopedPointer<QPlatformFontDatabase> m_fontDb;
diff --git a/src/plugins/platforms/linuxfb/qlinuxfbscreen.h b/src/plugins/platforms/linuxfb/qlinuxfbscreen.h
index 1997d46ad1..32b8c3f4ab 100644
--- a/src/plugins/platforms/linuxfb/qlinuxfbscreen.h
+++ b/src/plugins/platforms/linuxfb/qlinuxfbscreen.h
@@ -51,7 +51,7 @@ public:
bool initialize();
public slots:
- QRegion doRedraw();
+ QRegion doRedraw() Q_DECL_OVERRIDE;
private:
QStringList mArgs;
diff --git a/src/plugins/platforms/minimal/main.cpp b/src/plugins/platforms/minimal/main.cpp
index 191de630b2..d4db29016d 100644
--- a/src/plugins/platforms/minimal/main.cpp
+++ b/src/plugins/platforms/minimal/main.cpp
@@ -42,7 +42,7 @@ class QMinimalIntegrationPlugin : public QPlatformIntegrationPlugin
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.2" FILE "minimal.json")
public:
- QPlatformIntegration *create(const QString&, const QStringList&);
+ QPlatformIntegration *create(const QString&, const QStringList&) Q_DECL_OVERRIDE;
};
QPlatformIntegration *QMinimalIntegrationPlugin::create(const QString& system, const QStringList& paramList)
diff --git a/src/plugins/platforms/minimal/qminimalbackingstore.h b/src/plugins/platforms/minimal/qminimalbackingstore.h
index d356153b62..e373d99783 100644
--- a/src/plugins/platforms/minimal/qminimalbackingstore.h
+++ b/src/plugins/platforms/minimal/qminimalbackingstore.h
@@ -46,9 +46,9 @@ public:
QMinimalBackingStore(QWindow *window);
~QMinimalBackingStore();
- QPaintDevice *paintDevice();
- void flush(QWindow *window, const QRegion &region, const QPoint &offset);
- void resize(const QSize &size, const QRegion &staticContents);
+ QPaintDevice *paintDevice() Q_DECL_OVERRIDE;
+ void flush(QWindow *window, const QRegion &region, const QPoint &offset) Q_DECL_OVERRIDE;
+ void resize(const QSize &size, const QRegion &staticContents) Q_DECL_OVERRIDE;
private:
QImage mImage;
diff --git a/src/plugins/platforms/minimal/qminimalintegration.cpp b/src/plugins/platforms/minimal/qminimalintegration.cpp
index 252f842df4..8a2bf79116 100644
--- a/src/plugins/platforms/minimal/qminimalintegration.cpp
+++ b/src/plugins/platforms/minimal/qminimalintegration.cpp
@@ -66,7 +66,7 @@ QMinimalIntegration::QMinimalIntegration(const QStringList &parameters)
, m_options(parseOptions(parameters))
{
if (qEnvironmentVariableIsSet(debugBackingStoreEnvironmentVariable)
- && qgetenv(debugBackingStoreEnvironmentVariable).toInt() > 0) {
+ && qEnvironmentVariableIntValue(debugBackingStoreEnvironmentVariable) > 0) {
m_options |= DebugBackingStore | EnableFonts;
}
@@ -99,7 +99,7 @@ bool QMinimalIntegration::hasCapability(QPlatformIntegration::Capability cap) co
class DummyFontDatabase : public QPlatformFontDatabase
{
public:
- virtual void populateFontDatabase() {}
+ virtual void populateFontDatabase() Q_DECL_OVERRIDE {}
};
QPlatformFontDatabase *QMinimalIntegration::fontDatabase() const
diff --git a/src/plugins/platforms/minimal/qminimalintegration.h b/src/plugins/platforms/minimal/qminimalintegration.h
index d9392df510..d1ab02c0dc 100644
--- a/src/plugins/platforms/minimal/qminimalintegration.h
+++ b/src/plugins/platforms/minimal/qminimalintegration.h
@@ -45,9 +45,9 @@ public:
QMinimalScreen()
: mDepth(32), mFormat(QImage::Format_ARGB32_Premultiplied) {}
- QRect geometry() const { return mGeometry; }
- int depth() const { return mDepth; }
- QImage::Format format() const { return mFormat; }
+ QRect geometry() const Q_DECL_OVERRIDE { return mGeometry; }
+ int depth() const Q_DECL_OVERRIDE { return mDepth; }
+ QImage::Format format() const Q_DECL_OVERRIDE { return mFormat; }
public:
QRect mGeometry;
@@ -67,12 +67,12 @@ public:
explicit QMinimalIntegration(const QStringList &parameters);
~QMinimalIntegration();
- bool hasCapability(QPlatformIntegration::Capability cap) const;
- QPlatformFontDatabase *fontDatabase() const;
+ bool hasCapability(QPlatformIntegration::Capability cap) const Q_DECL_OVERRIDE;
+ QPlatformFontDatabase *fontDatabase() const Q_DECL_OVERRIDE;
- QPlatformWindow *createPlatformWindow(QWindow *window) const;
- QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const;
- QAbstractEventDispatcher *createEventDispatcher() const;
+ QPlatformWindow *createPlatformWindow(QWindow *window) const Q_DECL_OVERRIDE;
+ QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const Q_DECL_OVERRIDE;
+ QAbstractEventDispatcher *createEventDispatcher() const Q_DECL_OVERRIDE;
unsigned options() const { return m_options; }
diff --git a/src/plugins/platforms/minimalegl/main.cpp b/src/plugins/platforms/minimalegl/main.cpp
index de130ae2ff..f66c8008d0 100644
--- a/src/plugins/platforms/minimalegl/main.cpp
+++ b/src/plugins/platforms/minimalegl/main.cpp
@@ -41,7 +41,7 @@ class QMinimalEglIntegrationPlugin : public QPlatformIntegrationPlugin
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.2" FILE "minimalegl.json")
public:
- QPlatformIntegration *create(const QString&, const QStringList&);
+ QPlatformIntegration *create(const QString&, const QStringList&) Q_DECL_OVERRIDE;
};
QPlatformIntegration* QMinimalEglIntegrationPlugin::create(const QString& system, const QStringList& paramList)
diff --git a/src/plugins/platforms/minimalegl/qminimaleglbackingstore.h b/src/plugins/platforms/minimalegl/qminimaleglbackingstore.h
index 617ab9a1b9..483c5fc789 100644
--- a/src/plugins/platforms/minimalegl/qminimaleglbackingstore.h
+++ b/src/plugins/platforms/minimalegl/qminimaleglbackingstore.h
@@ -47,13 +47,13 @@ public:
QMinimalEglBackingStore(QWindow *window);
~QMinimalEglBackingStore();
- QPaintDevice *paintDevice();
+ QPaintDevice *paintDevice() Q_DECL_OVERRIDE;
- void beginPaint(const QRegion &);
- void endPaint();
+ void beginPaint(const QRegion &) Q_DECL_OVERRIDE;
+ void endPaint() Q_DECL_OVERRIDE;
- void flush(QWindow *window, const QRegion &region, const QPoint &offset);
- void resize(const QSize &size, const QRegion &staticContents);
+ void flush(QWindow *window, const QRegion &region, const QPoint &offset) Q_DECL_OVERRIDE;
+ void resize(const QSize &size, const QRegion &staticContents) Q_DECL_OVERRIDE;
private:
QOpenGLContext *m_context;
diff --git a/src/plugins/platforms/minimalegl/qminimaleglintegration.cpp b/src/plugins/platforms/minimalegl/qminimaleglintegration.cpp
index 0b12e62cc1..3fbed1ec26 100644
--- a/src/plugins/platforms/minimalegl/qminimaleglintegration.cpp
+++ b/src/plugins/platforms/minimalegl/qminimaleglintegration.cpp
@@ -60,7 +60,7 @@ QMinimalEglIntegration::QMinimalEglIntegration()
QMinimalEglIntegration::~QMinimalEglIntegration()
{
- delete mScreen;
+ destroyScreen(mScreen);
}
bool QMinimalEglIntegration::hasCapability(QPlatformIntegration::Capability cap) const
diff --git a/src/plugins/platforms/minimalegl/qminimaleglintegration.h b/src/plugins/platforms/minimalegl/qminimaleglintegration.h
index 5c42184926..452185bcdb 100644
--- a/src/plugins/platforms/minimalegl/qminimaleglintegration.h
+++ b/src/plugins/platforms/minimalegl/qminimaleglintegration.h
@@ -47,17 +47,17 @@ public:
QMinimalEglIntegration();
~QMinimalEglIntegration();
- bool hasCapability(QPlatformIntegration::Capability cap) const;
+ bool hasCapability(QPlatformIntegration::Capability cap) const Q_DECL_OVERRIDE;
- QPlatformWindow *createPlatformWindow(QWindow *window) const;
- QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const;
- QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const;
+ QPlatformWindow *createPlatformWindow(QWindow *window) const Q_DECL_OVERRIDE;
+ QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const Q_DECL_OVERRIDE;
+ QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const Q_DECL_OVERRIDE;
- QPlatformFontDatabase *fontDatabase() const;
+ QPlatformFontDatabase *fontDatabase() const Q_DECL_OVERRIDE;
- QAbstractEventDispatcher *createEventDispatcher() const;
+ QAbstractEventDispatcher *createEventDispatcher() const Q_DECL_OVERRIDE;
- QVariant styleHint(QPlatformIntegration::StyleHint hint) const;
+ QVariant styleHint(QPlatformIntegration::StyleHint hint) const Q_DECL_OVERRIDE;
private:
QPlatformFontDatabase *mFontDb;
diff --git a/src/plugins/platforms/minimalegl/qminimaleglscreen.cpp b/src/plugins/platforms/minimalegl/qminimaleglscreen.cpp
index a0ebffa806..af99a8c664 100644
--- a/src/plugins/platforms/minimalegl/qminimaleglscreen.cpp
+++ b/src/plugins/platforms/minimalegl/qminimaleglscreen.cpp
@@ -54,7 +54,7 @@ public:
{
}
- EGLSurface eglSurfaceForPlatformSurface(QPlatformSurface *surface)
+ EGLSurface eglSurfaceForPlatformSurface(QPlatformSurface *surface) Q_DECL_OVERRIDE
{
QMinimalEglWindow *window = static_cast<QMinimalEglWindow *>(surface);
QMinimalEglScreen *screen = static_cast<QMinimalEglScreen *>(window->screen());
diff --git a/src/plugins/platforms/minimalegl/qminimaleglscreen.h b/src/plugins/platforms/minimalegl/qminimaleglscreen.h
index 9e5dc90971..e70d52f1aa 100644
--- a/src/plugins/platforms/minimalegl/qminimaleglscreen.h
+++ b/src/plugins/platforms/minimalegl/qminimaleglscreen.h
@@ -50,9 +50,9 @@ public:
QMinimalEglScreen(EGLNativeDisplayType display);
~QMinimalEglScreen();
- QRect geometry() const;
- int depth() const;
- QImage::Format format() const;
+ QRect geometry() const Q_DECL_OVERRIDE;
+ int depth() const Q_DECL_OVERRIDE;
+ QImage::Format format() const Q_DECL_OVERRIDE;
QPlatformOpenGLContext *platformContext() const;
diff --git a/src/plugins/platforms/minimalegl/qminimaleglwindow.h b/src/plugins/platforms/minimalegl/qminimaleglwindow.h
index 5c3006663f..536cae6f46 100644
--- a/src/plugins/platforms/minimalegl/qminimaleglwindow.h
+++ b/src/plugins/platforms/minimalegl/qminimaleglwindow.h
@@ -46,8 +46,8 @@ class QMinimalEglWindow : public QPlatformWindow
public:
QMinimalEglWindow(QWindow *w);
- void setGeometry(const QRect &);
- WId winId() const;
+ void setGeometry(const QRect &) Q_DECL_OVERRIDE;
+ WId winId() const Q_DECL_OVERRIDE;
private:
WId m_winid;
diff --git a/src/plugins/platforms/offscreen/main.cpp b/src/plugins/platforms/offscreen/main.cpp
index 98b8e2ba95..102b349b7a 100644
--- a/src/plugins/platforms/offscreen/main.cpp
+++ b/src/plugins/platforms/offscreen/main.cpp
@@ -42,7 +42,7 @@ class QOffscreenIntegrationPlugin : public QPlatformIntegrationPlugin
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.2" FILE "offscreen.json")
public:
- QPlatformIntegration *create(const QString&, const QStringList&);
+ QPlatformIntegration *create(const QString&, const QStringList&) Q_DECL_OVERRIDE;
};
QPlatformIntegration *QOffscreenIntegrationPlugin::create(const QString& system, const QStringList& paramList)
diff --git a/src/plugins/platforms/offscreen/qoffscreencommon.cpp b/src/plugins/platforms/offscreen/qoffscreencommon.cpp
index 50c9a85fcf..5acb245be0 100644
--- a/src/plugins/platforms/offscreen/qoffscreencommon.cpp
+++ b/src/plugins/platforms/offscreen/qoffscreencommon.cpp
@@ -49,8 +49,8 @@ class QOffscreenCursor : public QPlatformCursor
public:
QOffscreenCursor() : m_pos(10, 10) {}
- QPoint pos() const { return m_pos; }
- void setPos(const QPoint &pos)
+ QPoint pos() const Q_DECL_OVERRIDE { return m_pos; }
+ void setPos(const QPoint &pos) Q_DECL_OVERRIDE
{
m_pos = pos;
QWindowList wl = QGuiApplication::topLevelWindows();
@@ -76,7 +76,7 @@ public:
QOffscreenScreen::windowContainingCursor = containing ? containing->handle() : 0;
}
- void changeCursor(QCursor *windowCursor, QWindow *window)
+ void changeCursor(QCursor *windowCursor, QWindow *window) Q_DECL_OVERRIDE
{
Q_UNUSED(windowCursor);
Q_UNUSED(window);
diff --git a/src/plugins/platforms/offscreen/qoffscreencommon.h b/src/plugins/platforms/offscreen/qoffscreencommon.h
index 88615d2da4..394d20bce5 100644
--- a/src/plugins/platforms/offscreen/qoffscreencommon.h
+++ b/src/plugins/platforms/offscreen/qoffscreencommon.h
@@ -51,12 +51,12 @@ class QOffscreenScreen : public QPlatformScreen
public:
QOffscreenScreen();
- QRect geometry() const { return m_geometry; }
- int depth() const { return 32; }
- QImage::Format format() const { return QImage::Format_RGB32; }
- QPlatformCursor *cursor() const { return m_cursor.data(); }
+ QRect geometry() const Q_DECL_OVERRIDE { return m_geometry; }
+ int depth() const Q_DECL_OVERRIDE { return 32; }
+ QImage::Format format() const Q_DECL_OVERRIDE { return QImage::Format_RGB32; }
+ QPlatformCursor *cursor() const Q_DECL_OVERRIDE { return m_cursor.data(); }
- QPixmap grabWindow(WId window, int x, int y, int width, int height) const;
+ QPixmap grabWindow(WId window, int x, int y, int width, int height) const Q_DECL_OVERRIDE;
static QPlatformWindow *windowContainingCursor;
@@ -69,8 +69,8 @@ public:
class QOffscreenDrag : public QPlatformDrag
{
public:
- QMimeData *platformDropData() { return 0; }
- Qt::DropAction drag(QDrag *) { return Qt::IgnoreAction; }
+ QMimeData *platformDropData() Q_DECL_OVERRIDE { return 0; }
+ Qt::DropAction drag(QDrag *) Q_DECL_OVERRIDE { return Qt::IgnoreAction; }
};
#endif
@@ -80,10 +80,10 @@ public:
QOffscreenBackingStore(QWindow *window);
~QOffscreenBackingStore();
- QPaintDevice *paintDevice();
- void flush(QWindow *window, const QRegion &region, const QPoint &offset);
- void resize(const QSize &size, const QRegion &staticContents);
- bool scroll(const QRegion &area, int dx, int dy);
+ QPaintDevice *paintDevice() Q_DECL_OVERRIDE;
+ void flush(QWindow *window, const QRegion &region, const QPoint &offset) Q_DECL_OVERRIDE;
+ void resize(const QSize &size, const QRegion &staticContents) Q_DECL_OVERRIDE;
+ bool scroll(const QRegion &area, int dx, int dy) Q_DECL_OVERRIDE;
QPixmap grabWindow(WId window, const QRect &rect) const;
diff --git a/src/plugins/platforms/offscreen/qoffscreenintegration.h b/src/plugins/platforms/offscreen/qoffscreenintegration.h
index 714c5eb081..4572269d27 100644
--- a/src/plugins/platforms/offscreen/qoffscreenintegration.h
+++ b/src/plugins/platforms/offscreen/qoffscreenintegration.h
@@ -48,17 +48,17 @@ public:
QOffscreenIntegration();
~QOffscreenIntegration();
- bool hasCapability(QPlatformIntegration::Capability cap) const;
+ bool hasCapability(QPlatformIntegration::Capability cap) const Q_DECL_OVERRIDE;
- QPlatformWindow *createPlatformWindow(QWindow *window) const;
- QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const;
+ QPlatformWindow *createPlatformWindow(QWindow *window) const Q_DECL_OVERRIDE;
+ QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const Q_DECL_OVERRIDE;
#ifndef QT_NO_DRAGANDDROP
- QPlatformDrag *drag() const;
+ QPlatformDrag *drag() const Q_DECL_OVERRIDE;
#endif
- QPlatformServices *services() const;
+ QPlatformServices *services() const Q_DECL_OVERRIDE;
- QPlatformFontDatabase *fontDatabase() const;
- QAbstractEventDispatcher *createEventDispatcher() const;
+ QPlatformFontDatabase *fontDatabase() const Q_DECL_OVERRIDE;
+ QAbstractEventDispatcher *createEventDispatcher() const Q_DECL_OVERRIDE;
static QOffscreenIntegration *createOffscreenIntegration();
diff --git a/src/plugins/platforms/offscreen/qoffscreenintegration_x11.h b/src/plugins/platforms/offscreen/qoffscreenintegration_x11.h
index c50e812777..59e62c3c20 100644
--- a/src/plugins/platforms/offscreen/qoffscreenintegration_x11.h
+++ b/src/plugins/platforms/offscreen/qoffscreenintegration_x11.h
@@ -49,9 +49,9 @@ class QOffscreenX11Info;
class QOffscreenX11Integration : public QOffscreenIntegration
{
public:
- bool hasCapability(QPlatformIntegration::Capability cap) const;
+ bool hasCapability(QPlatformIntegration::Capability cap) const Q_DECL_OVERRIDE;
- QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const;
+ QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const Q_DECL_OVERRIDE;
private:
mutable QScopedPointer<QOffscreenX11Connection> m_connection;
@@ -82,14 +82,14 @@ public:
QOffscreenX11GLXContext(QOffscreenX11Info *x11, QOpenGLContext *context);
~QOffscreenX11GLXContext();
- bool makeCurrent(QPlatformSurface *surface);
- void doneCurrent();
- void swapBuffers(QPlatformSurface *surface);
- void (*getProcAddress(const QByteArray &procName)) ();
+ bool makeCurrent(QPlatformSurface *surface) Q_DECL_OVERRIDE;
+ void doneCurrent() Q_DECL_OVERRIDE;
+ void swapBuffers(QPlatformSurface *surface) Q_DECL_OVERRIDE;
+ void (*getProcAddress(const QByteArray &procName)) () Q_DECL_OVERRIDE;
- QSurfaceFormat format() const;
- bool isSharing() const;
- bool isValid() const;
+ QSurfaceFormat format() const Q_DECL_OVERRIDE;
+ bool isSharing() const Q_DECL_OVERRIDE;
+ bool isValid() const Q_DECL_OVERRIDE;
private:
QScopedPointer<QOffscreenX11GLXContextData> d;
diff --git a/src/plugins/platforms/offscreen/qoffscreenwindow.h b/src/plugins/platforms/offscreen/qoffscreenwindow.h
index d168d28ee8..e50a5a08ff 100644
--- a/src/plugins/platforms/offscreen/qoffscreenwindow.h
+++ b/src/plugins/platforms/offscreen/qoffscreenwindow.h
@@ -47,15 +47,15 @@ public:
QOffscreenWindow(QWindow *window);
~QOffscreenWindow();
- void setGeometry(const QRect &rect);
- void setWindowState(Qt::WindowState state);
+ void setGeometry(const QRect &rect) Q_DECL_OVERRIDE;
+ void setWindowState(Qt::WindowState state) Q_DECL_OVERRIDE;
- QMargins frameMargins() const;
+ QMargins frameMargins() const Q_DECL_OVERRIDE;
- void setVisible(bool visible);
- void requestActivateWindow();
+ void setVisible(bool visible) Q_DECL_OVERRIDE;
+ void requestActivateWindow() Q_DECL_OVERRIDE;
- WId winId() const;
+ WId winId() const Q_DECL_OVERRIDE;
static QOffscreenWindow *windowForWinId(WId id);
diff --git a/src/plugins/platforms/openwfd/qopenwfdintegration.cpp b/src/plugins/platforms/openwfd/qopenwfdintegration.cpp
index 1e29fcc9b1..26bdd14327 100644
--- a/src/plugins/platforms/openwfd/qopenwfdintegration.cpp
+++ b/src/plugins/platforms/openwfd/qopenwfdintegration.cpp
@@ -133,3 +133,8 @@ void QOpenWFDIntegration::addScreen(QOpenWFDScreen *screen)
{
screenAdded(screen);
}
+
+void QOpenWFDIntegration::destroyScreen(QOpenWFDScreen *screen)
+{
+ QPlatformIntegration::destroyScreen(screen);
+}
diff --git a/src/plugins/platforms/openwfd/qopenwfdintegration.h b/src/plugins/platforms/openwfd/qopenwfdintegration.h
index 6c086b73be..9243205caa 100644
--- a/src/plugins/platforms/openwfd/qopenwfdintegration.h
+++ b/src/plugins/platforms/openwfd/qopenwfdintegration.h
@@ -63,6 +63,7 @@ public:
QPlatformPrinterSupport *printerSupport() const;
void addScreen(QOpenWFDScreen *screen);
+ void destroyScreen(QOpenWFDScreen *screen);
private:
QList<QPlatformScreen *> mScreens;
QList<QOpenWFDDevice *>mDevices;
diff --git a/src/plugins/platforms/openwfd/qopenwfdport.cpp b/src/plugins/platforms/openwfd/qopenwfdport.cpp
index 0bdc6b2d4b..b643644800 100644
--- a/src/plugins/platforms/openwfd/qopenwfdport.cpp
+++ b/src/plugins/platforms/openwfd/qopenwfdport.cpp
@@ -140,7 +140,7 @@ void QOpenWFDPort::detach()
mAttached = false;
mOn = false;
- delete mScreen;
+ mDevice->integration()->destroyScreen(mScreen);
wfdDestroyPipeline(mDevice->handle(),mPipeline);
mPipelineId = WFD_INVALID_PIPELINE_ID;
diff --git a/src/plugins/platforms/platforms.pro b/src/plugins/platforms/platforms.pro
index 69f6f308b5..4e1b7e3026 100644
--- a/src/plugins/platforms/platforms.pro
+++ b/src/plugins/platforms/platforms.pro
@@ -35,8 +35,4 @@ contains(QT_CONFIG, directfb) {
SUBDIRS += directfb
}
-contains(QT_CONFIG, kms):contains(QT_CONFIG, opengl) {
- SUBDIRS += kms
-}
-
contains(QT_CONFIG, linuxfb): SUBDIRS += linuxfb
diff --git a/src/plugins/platforms/qnx/qqnxglcontext.cpp b/src/plugins/platforms/qnx/qqnxglcontext.cpp
index 09736304e1..7133d01e87 100644
--- a/src/plugins/platforms/qnx/qqnxglcontext.cpp
+++ b/src/plugins/platforms/qnx/qqnxglcontext.cpp
@@ -164,7 +164,7 @@ EGLenum QQnxGLContext::checkEGLError(const char *msg)
return error;
}
-void QQnxGLContext::initialize()
+void QQnxGLContext::initializeContext()
{
qGLContextDebug() << Q_FUNC_INFO;
@@ -182,7 +182,7 @@ void QQnxGLContext::initialize()
}
}
-void QQnxGLContext::shutdown()
+void QQnxGLContext::shutdownContext()
{
qGLContextDebug() << Q_FUNC_INFO;
diff --git a/src/plugins/platforms/qnx/qqnxglcontext.h b/src/plugins/platforms/qnx/qqnxglcontext.h
index 090c7ed49d..a91a89901f 100644
--- a/src/plugins/platforms/qnx/qqnxglcontext.h
+++ b/src/plugins/platforms/qnx/qqnxglcontext.h
@@ -53,8 +53,8 @@ public:
static EGLenum checkEGLError(const char *msg);
- static void initialize();
- static void shutdown();
+ static void initializeContext();
+ static void shutdownContext();
void requestSurfaceChange();
diff --git a/src/plugins/platforms/qnx/qqnxintegration.cpp b/src/plugins/platforms/qnx/qqnxintegration.cpp
index 34b79b61da..dba4ba67a8 100644
--- a/src/plugins/platforms/qnx/qqnxintegration.cpp
+++ b/src/plugins/platforms/qnx/qqnxintegration.cpp
@@ -182,7 +182,7 @@ QQnxIntegration::QQnxIntegration(const QStringList &paramList)
#if !defined(QT_NO_OPENGL)
// Initialize global OpenGL resources
- QQnxGLContext::initialize();
+ QQnxGLContext::initializeContext();
#endif
// Create/start event thread
@@ -306,7 +306,7 @@ QQnxIntegration::~QQnxIntegration()
#if !defined(QT_NO_OPENGL)
// Cleanup global OpenGL resources
- QQnxGLContext::shutdown();
+ QQnxGLContext::shutdownContext();
#endif
#if defined(QQNX_PPS)
@@ -554,7 +554,7 @@ void QQnxIntegration::removeDisplay(QQnxScreen *screen)
Q_CHECK_PTR(screen);
Q_ASSERT(m_screens.contains(screen));
m_screens.removeAll(screen);
- screen->deleteLater();
+ destroyScreen(screen);
}
void QQnxIntegration::destroyDisplays()
diff --git a/src/plugins/platforms/qnx/qqnxscreen.cpp b/src/plugins/platforms/qnx/qqnxscreen.cpp
index d42babb8ab..d4407842f5 100644
--- a/src/plugins/platforms/qnx/qqnxscreen.cpp
+++ b/src/plugins/platforms/qnx/qqnxscreen.cpp
@@ -305,7 +305,7 @@ static int defaultDepth()
if (defaultDepth == 0) {
// check if display depth was specified in environment variable;
// use default value if no valid value found
- defaultDepth = qgetenv("QQNX_DISPLAY_DEPTH").toInt();
+ defaultDepth = qEnvironmentVariableIntValue("QQNX_DISPLAY_DEPTH");
if (defaultDepth != 16 && defaultDepth != 32)
defaultDepth = 32;
}
@@ -680,7 +680,7 @@ void QQnxScreen::adjustOrientation()
return;
bool ok = false;
- const int rotation = qgetenv("ORIENTATION").toInt(&ok);
+ const int rotation = qEnvironmentVariableIntValue("ORIENTATION", &ok);
if (ok)
setRotation(rotation);
@@ -859,7 +859,7 @@ void QQnxScreen::setRootWindow(QQnxWindow *window)
{
// Optionally disable the screen power save
bool ok = false;
- const int disablePowerSave = qgetenv("QQNX_DISABLE_POWER_SAVE").toInt(&ok);
+ const int disablePowerSave = qEnvironmentVariableIntValue("QQNX_DISABLE_POWER_SAVE", &ok);
if (ok && disablePowerSave) {
const int mode = SCREEN_IDLE_MODE_KEEP_AWAKE;
int result = screen_set_window_property_iv(window->nativeHandle(), SCREEN_PROPERTY_IDLE_MODE, &mode);
diff --git a/src/plugins/platforms/windows/accessible/iaccessible2.cpp b/src/plugins/platforms/windows/accessible/iaccessible2.cpp
index 7f60be0d50..3d6a6ced6e 100644
--- a/src/plugins/platforms/windows/accessible/iaccessible2.cpp
+++ b/src/plugins/platforms/windows/accessible/iaccessible2.cpp
@@ -121,7 +121,7 @@ AccessibleRelation::AccessibleRelation(const QList<QAccessibleInterface *> &targ
HRESULT STDMETHODCALLTYPE AccessibleRelation::QueryInterface(REFIID id, LPVOID *iface)
{
*iface = 0;
- if (id == IID_IUnknown)
+ if (id == IID_IUnknown || id == IID_IAccessibleRelation)
*iface = (IUnknown*)this;
if (*iface) {
diff --git a/src/plugins/platforms/windows/accessible/iaccessible2.h b/src/plugins/platforms/windows/accessible/iaccessible2.h
index 351bf2555c..f7f5e022c3 100644
--- a/src/plugins/platforms/windows/accessible/iaccessible2.h
+++ b/src/plugins/platforms/windows/accessible/iaccessible2.h
@@ -39,24 +39,7 @@
#include "qwindowsmsaaaccessible.h"
#include "comutils.h"
-#include "Accessible2.h"
-#include "AccessibleAction.h"
-#include "AccessibleApplication.h"
-#include "AccessibleComponent.h"
-#include "AccessibleEditableText.h"
-#include "AccessibleHyperlink.h"
-#include "AccessibleHypertext.h"
-#include "AccessibleImage.h"
-#include "AccessibleRelation.h"
-#include "AccessibleTable.h"
-#include "AccessibleTable2.h"
-#include "AccessibleTableCell.h"
-#include "AccessibleText.h"
-#include "AccessibleValue.h"
-
-#include "AccessibleEventID.h"
-#include "AccessibleRole.h"
-#include "AccessibleStates.h"
+#include "ia2_api_all.h"
#include <servprov.h>
diff --git a/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.h b/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.h
index a78d821b1d..c522cf281e 100644
--- a/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.h
+++ b/src/plugins/platforms/windows/accessible/qwindowsmsaaaccessible.h
@@ -42,7 +42,7 @@
#include <QtGui/qaccessible.h>
#ifndef Q_CC_MINGW
# include <oleacc.h>
-# include "Accessible2.h" // IAccessible2 inherits from IAccessible
+# include "ia2_api_all.h" // IAccessible2 inherits from IAccessible
#else
// MinGW
# include <basetyps.h>
diff --git a/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp b/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp
index f1f472b3e2..3a0c3b9fe9 100644
--- a/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp
+++ b/src/plugins/platforms/windows/qwindowsdialoghelpers.cpp
@@ -1580,14 +1580,14 @@ QWindowsNativeDialogBase *QWindowsFileDialogHelper::createNativeDialog()
QWindowsNativeFileDialogBase *result = QWindowsNativeFileDialogBase::create(options()->acceptMode(), m_data);
if (!result)
return 0;
- QObject::connect(result, SIGNAL(accepted()), this, SIGNAL(accept()));
- QObject::connect(result, SIGNAL(rejected()), this, SIGNAL(reject()));
- QObject::connect(result, SIGNAL(directoryEntered(QUrl)),
- this, SIGNAL(directoryEntered(QUrl)));
- QObject::connect(result, SIGNAL(currentChanged(QUrl)),
- this, SIGNAL(currentChanged(QUrl)));
- QObject::connect(result, SIGNAL(filterSelected(QString)),
- this, SIGNAL(filterSelected(QString)));
+ QObject::connect(result, &QWindowsNativeDialogBase::accepted, this, &QPlatformDialogHelper::accept);
+ QObject::connect(result, &QWindowsNativeDialogBase::rejected, this, &QPlatformDialogHelper::reject);
+ QObject::connect(result, &QWindowsNativeFileDialogBase::directoryEntered,
+ this, &QPlatformFileDialogHelper::directoryEntered);
+ QObject::connect(result, &QWindowsNativeFileDialogBase::currentChanged,
+ this, &QPlatformFileDialogHelper::currentChanged);
+ QObject::connect(result, &QWindowsNativeFileDialogBase::filterSelected,
+ this, &QPlatformFileDialogHelper::filterSelected);
// Apply settings.
const QSharedPointer<QFileDialogOptions> &opts = options();
@@ -1961,8 +1961,8 @@ QWindowsNativeDialogBase *QWindowsXpFileDialogHelper::createNativeDialog()
{
m_data.fromOptions(options());
if (QWindowsXpNativeFileDialog *result = QWindowsXpNativeFileDialog::create(options(), m_data)) {
- QObject::connect(result, SIGNAL(accepted()), this, SIGNAL(accept()));
- QObject::connect(result, SIGNAL(rejected()), this, SIGNAL(reject()));
+ QObject::connect(result, &QWindowsNativeDialogBase::accepted, this, &QPlatformDialogHelper::accept);
+ QObject::connect(result, &QWindowsNativeDialogBase::rejected, this, &QPlatformDialogHelper::reject);
return result;
}
return 0;
@@ -2117,8 +2117,8 @@ QWindowsNativeDialogBase *QWindowsColorDialogHelper::createNativeDialog()
{
QWindowsNativeColorDialog *nativeDialog = new QWindowsNativeColorDialog(m_currentColor);
nativeDialog->setWindowTitle(options()->windowTitle());
- connect(nativeDialog, SIGNAL(accepted()), this, SIGNAL(accept()));
- connect(nativeDialog, SIGNAL(rejected()), this, SIGNAL(reject()));
+ connect(nativeDialog, &QWindowsNativeDialogBase::accepted, this, &QPlatformDialogHelper::accept);
+ connect(nativeDialog, &QWindowsNativeDialogBase::rejected, this, &QPlatformDialogHelper::reject);
return nativeDialog;
}
#endif // USE_NATIVE_COLOR_DIALOG
diff --git a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp b/src/plugins/platforms/windows/qwindowsfontdatabase.cpp
index f15783490e..46b05de4ae 100644
--- a/src/plugins/platforms/windows/qwindowsfontdatabase.cpp
+++ b/src/plugins/platforms/windows/qwindowsfontdatabase.cpp
@@ -618,20 +618,6 @@ QDebug operator<<(QDebug d, const QFontDef &def)
return d;
}
-// convert 0 ~ 1000 integer to QFont::Weight
-static inline QFont::Weight weightFromInteger(long weight)
-{
- if (weight < 400)
- return QFont::Light;
- if (weight < 600)
- return QFont::Normal;
- if (weight < 700)
- return QFont::DemiBold;
- if (weight < 800)
- return QFont::Bold;
- return QFont::Black;
-}
-
static inline QFontDatabase::WritingSystem writingSystemFromCharSet(uchar charSet)
{
switch (charSet) {
@@ -808,7 +794,7 @@ QString getEnglishName(const QString &familyName)
HDC hdc = GetDC( 0 );
LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT));
- memcpy(lf.lfFaceName, familyName.utf16(), qMin(LF_FACESIZE, familyName.length()) * sizeof(wchar_t));
+ memcpy(lf.lfFaceName, familyName.utf16(), qMin(familyName.length(), LF_FACESIZE - 1) * sizeof(wchar_t));
lf.lfCharSet = DEFAULT_CHARSET;
HFONT hfont = CreateFontIndirect(&lf);
@@ -865,7 +851,7 @@ static bool addFontToDatabase(const QString &familyName, uchar charSet,
const int size = scalable ? SMOOTH_SCALABLE : tm->tmHeight;
const QFont::Style style = tm->tmItalic ? QFont::StyleItalic : QFont::StyleNormal;
const bool antialias = false;
- const QFont::Weight weight = weightFromInteger(tm->tmWeight);
+ const QFont::Weight weight = QPlatformFontDatabase::weightFromInteger(tm->tmWeight);
const QFont::Stretch stretch = QFont::Unstretched;
#ifndef QT_NO_DEBUG_OUTPUT
@@ -972,14 +958,9 @@ static int QT_WIN_CALLBACK storeFontSub(ENUMLOGFONTEX* f, NEWTEXTMETRICEX *textm
HDC dummy = GetDC(0);
LOGFONT lf;
+ memset(&lf, 0, sizeof(LOGFONT));
lf.lfCharSet = DEFAULT_CHARSET;
- if (wcslen(f->elfLogFont.lfFaceName) >= LF_FACESIZE) {
- qWarning("%s: Unable to enumerate family '%s'.",
- __FUNCTION__, qPrintable(QString::fromWCharArray(f->elfLogFont.lfFaceName)));
- return 1;
- }
- wmemcpy(lf.lfFaceName, f->elfLogFont.lfFaceName,
- wcslen(f->elfLogFont.lfFaceName) + 1);
+ memcpy(lf.lfFaceName, f->elfLogFont.lfFaceName, LF_FACESIZE * sizeof(wchar_t));
lf.lfPitchAndFamily = 0;
EnumFontFamiliesEx(dummy, &lf, (FONTENUMPROC)storeFont,
(LPARAM)namesSetIn, 0);
@@ -1015,20 +996,21 @@ void QWindowsFontDatabase::populate(const QString &family)
HDC dummy = GetDC(0);
LOGFONT lf;
+ memset(&lf, 0, sizeof(LOGFONT));
lf.lfCharSet = DEFAULT_CHARSET;
if (family.size() >= LF_FACESIZE) {
qWarning("%s: Unable to enumerate family '%s'.",
__FUNCTION__, qPrintable(family));
return;
}
- wmemcpy(lf.lfFaceName, reinterpret_cast<const wchar_t*>(family.utf16()),
- family.size() + 1);
+
lf.lfPitchAndFamily = 0;
if (family.isEmpty()) {
EnumFontFamiliesEx(dummy, &lf, (FONTENUMPROC)storeFontSub,
(LPARAM)&m_families, 0);
} else {
+ memcpy(lf.lfFaceName, family.utf16(), family.size() * sizeof(wchar_t));
EnumFontFamiliesEx(dummy, &lf, (FONTENUMPROC)storeFont,
(LPARAM)&m_families, 0);
}
@@ -1093,7 +1075,7 @@ QFontEngineMulti *QWindowsFontDatabase::fontEngineMulti(QFontEngine *fontEngine,
if (script == QChar::Script_Common)
return new QWindowsMultiFontEngine(fontEngine, script);
// ### as long as fallbacksForFamily() does not take script parameter into account,
- // prefer QFontEngineMultiBasicImpl's loadEngine() implementation for complex scripts
+ // prefer QFontEngineMulti's loadEngine() implementation for complex scripts
return QPlatformFontDatabase::fontEngineMulti(fontEngine, script);
}
@@ -1253,7 +1235,7 @@ QFontEngine *QWindowsFontDatabase::fontEngine(const QByteArray &fontData, qreal
else
fontEngine->fontDef.style = QFont::StyleNormal;
- fontEngine->fontDef.weight = weightFromInteger(qFromBigEndian<quint16>(os2Table->weightClass));
+ fontEngine->fontDef.weight = QPlatformFontDatabase::weightFromInteger(qFromBigEndian<quint16>(os2Table->weightClass));
}
}
@@ -1364,7 +1346,7 @@ QStringList QWindowsFontDatabase::addApplicationFont(const QByteArray &fontData,
HDC hdc = GetDC(0);
LOGFONT lf;
memset(&lf, 0, sizeof(LOGFONT));
- memcpy(lf.lfFaceName, familyName.utf16(), sizeof(wchar_t) * qMin(LF_FACESIZE, familyName.size()));
+ memcpy(lf.lfFaceName, familyName.utf16(), sizeof(wchar_t) * qMin(LF_FACESIZE - 1, familyName.size()));
lf.lfCharSet = DEFAULT_CHARSET;
HFONT hfont = CreateFontIndirect(&lf);
HGDIOBJ oldobj = SelectObject(hdc, hfont);
@@ -1589,6 +1571,10 @@ LOGFONT QWindowsFontDatabase::fontDefToLOGFONT(const QFontDef &request)
lf.lfPitchAndFamily = DEFAULT_PITCH | hint;
QString fam = request.family;
+ if (fam.size() >= LF_FACESIZE) {
+ qCritical("%s: Family name '%s' is too long.", __FUNCTION__, qPrintable(fam));
+ fam.truncate(LF_FACESIZE - 1);
+ }
if (fam.isEmpty())
fam = QStringLiteral("MS Sans Serif");
@@ -1600,7 +1586,7 @@ LOGFONT QWindowsFontDatabase::fontDefToLOGFONT(const QFontDef &request)
if (fam == QLatin1String("Courier") && !(request.styleStrategy & QFont::PreferBitmap))
fam = QStringLiteral("Courier New");
- memcpy(lf.lfFaceName, fam.utf16(), sizeof(wchar_t) * qMin(fam.length() + 1, 32)); // 32 = Windows hard-coded
+ memcpy(lf.lfFaceName, fam.utf16(), fam.size() * sizeof(wchar_t));
return lf;
}
@@ -1781,9 +1767,13 @@ QFontEngine *QWindowsFontDatabase::createEngine(const QFontDef &request,
// turns out okay)
useDirectWrite = false;
if (initDirectWrite(data.data())) {
- const QString nameSubstitute = QWindowsFontEngineDirectWrite::fontNameSubstitute(QString::fromWCharArray(lf.lfFaceName));
- memcpy(lf.lfFaceName, nameSubstitute.utf16(),
- sizeof(wchar_t) * qMin(nameSubstitute.length() + 1, LF_FACESIZE));
+ const QString fam = QString::fromWCharArray(lf.lfFaceName);
+ const QString nameSubstitute = QWindowsFontEngineDirectWrite::fontNameSubstitute(fam);
+ if (nameSubstitute != fam) {
+ const int nameSubstituteLength = qMin(nameSubstitute.length(), LF_FACESIZE - 1);
+ memcpy(lf.lfFaceName, nameSubstitute.utf16(), nameSubstituteLength * sizeof(wchar_t));
+ lf.lfFaceName[nameSubstituteLength] = 0;
+ }
HRESULT hr = data->directWriteGdiInterop->CreateFontFromLOGFONT(
&lf,
@@ -1854,7 +1844,7 @@ QFont QWindowsFontDatabase::LOGFONT_to_QFont(const LOGFONT& logFont, int vertica
QFont qFont(QString::fromWCharArray(logFont.lfFaceName));
qFont.setItalic(logFont.lfItalic);
if (logFont.lfWeight != FW_DONTCARE)
- qFont.setWeight(weightFromInteger(logFont.lfWeight));
+ qFont.setWeight(QPlatformFontDatabase::weightFromInteger(logFont.lfWeight));
const qreal logFontHeight = qAbs(logFont.lfHeight);
qFont.setPointSizeF(logFontHeight * 72.0 / qreal(verticalDPI_In));
qFont.setUnderline(logFont.lfUnderline);
diff --git a/src/plugins/platforms/windows/qwindowsfontdatabase_ft.cpp b/src/plugins/platforms/windows/qwindowsfontdatabase_ft.cpp
index 42e5a8c6ad..a2d9c3e75b 100644
--- a/src/plugins/platforms/windows/qwindowsfontdatabase_ft.cpp
+++ b/src/plugins/platforms/windows/qwindowsfontdatabase_ft.cpp
@@ -52,20 +52,6 @@
QT_BEGIN_NAMESPACE
-// convert 0 ~ 1000 integer to QFont::Weight
-static inline QFont::Weight weightFromInteger(long weight)
-{
- if (weight < 400)
- return QFont::Light;
- if (weight < 600)
- return QFont::Normal;
- if (weight < 700)
- return QFont::DemiBold;
- if (weight < 800)
- return QFont::Bold;
- return QFont::Black;
-}
-
static inline QFontDatabase::WritingSystem writingSystemFromCharSet(uchar charSet)
{
switch (charSet) {
@@ -139,7 +125,7 @@ static bool addFontToDatabase(const QString &familyName, uchar charSet,
const int size = scalable ? SMOOTH_SCALABLE : tm->tmHeight;
const QFont::Style style = tm->tmItalic ? QFont::StyleItalic : QFont::StyleNormal;
const bool antialias = false;
- const QFont::Weight weight = weightFromInteger(tm->tmWeight);
+ const QFont::Weight weight = QPlatformFontDatabase::weightFromInteger(tm->tmWeight);
const QFont::Stretch stretch = QFont::Unstretched;
#ifndef QT_NO_DEBUG_OUTPUT
@@ -383,14 +369,9 @@ static int QT_WIN_CALLBACK storeFontSub(ENUMLOGFONTEX* f, NEWTEXTMETRICEX *textm
HDC dummy = GetDC(0);
LOGFONT lf;
+ memset(&lf, 0, sizeof(LOGFONT));
lf.lfCharSet = DEFAULT_CHARSET;
- if (wcslen(f->elfLogFont.lfFaceName) >= LF_FACESIZE) {
- qWarning("%s: Unable to enumerate family '%s'.",
- __FUNCTION__, qPrintable(QString::fromWCharArray(f->elfLogFont.lfFaceName)));
- return 1;
- }
- wmemcpy(lf.lfFaceName, f->elfLogFont.lfFaceName,
- wcslen(f->elfLogFont.lfFaceName) + 1);
+ memcpy(lf.lfFaceName, f->elfLogFont.lfFaceName, LF_FACESIZE * sizeof(wchar_t));
lf.lfPitchAndFamily = 0;
EnumFontFamiliesEx(dummy, &lf, (FONTENUMPROC)storeFont,
(LPARAM)namesSetIn, 0);
@@ -425,20 +406,21 @@ void QWindowsFontDatabaseFT::populate(const QString &family)
HDC dummy = GetDC(0);
LOGFONT lf;
+ memset(&lf, 0, sizeof(LOGFONT));
lf.lfCharSet = DEFAULT_CHARSET;
if (family.size() >= LF_FACESIZE) {
qWarning("%s: Unable to enumerate family '%s'.",
__FUNCTION__, qPrintable(family));
return;
}
- wmemcpy(lf.lfFaceName, reinterpret_cast<const wchar_t*>(family.utf16()),
- family.size() + 1);
+
lf.lfPitchAndFamily = 0;
if (family.isEmpty()) {
EnumFontFamiliesEx(dummy, &lf, (FONTENUMPROC)storeFontSub,
(LPARAM)&m_families, 0);
} else {
+ memcpy(lf.lfFaceName, family.utf16(), family.size() * sizeof(wchar_t));
EnumFontFamiliesEx(dummy, &lf, (FONTENUMPROC)storeFont,
(LPARAM)&m_families, 0);
}
diff --git a/src/plugins/platforms/windows/qwindowsfontengine.cpp b/src/plugins/platforms/windows/qwindowsfontengine.cpp
index e45ff5d744..5790360d34 100644
--- a/src/plugins/platforms/windows/qwindowsfontengine.cpp
+++ b/src/plugins/platforms/windows/qwindowsfontengine.cpp
@@ -1182,19 +1182,13 @@ QImage QWindowsFontEngine::alphaMapForGlyph(glyph_t glyph, const QTransform &xfo
return QImage();
}
- QImage indexed(mask->width(), mask->height(), QImage::Format_Indexed8);
+ QImage alphaMap(mask->width(), mask->height(), QImage::Format_Alpha8);
- // ### This part is kinda pointless, but we'll crash later if we don't because some
- // code paths expects there to be colortables for index8-bit...
- QVector<QRgb> colors(256);
- for (int i=0; i<256; ++i)
- colors[i] = qRgba(0, 0, 0, i);
- indexed.setColorTable(colors);
// Copy data... Cannot use QPainter here as GDI has messed up the
// Alpha channel of the ni.image pixels...
for (int y=0; y<mask->height(); ++y) {
- uchar *dest = indexed.scanLine(y);
+ uchar *dest = alphaMap.scanLine(y);
if (mask->image().format() == QImage::Format_RGB16) {
const qint16 *src = (qint16 *) ((const QImage &) mask->image()).scanLine(y);
for (int x=0; x<mask->width(); ++x)
@@ -1216,7 +1210,7 @@ QImage QWindowsFontEngine::alphaMapForGlyph(glyph_t glyph, const QTransform &xfo
DeleteObject(font);
}
- return indexed;
+ return alphaMap;
}
#define SPI_GETFONTSMOOTHINGCONTRAST 0x200C
@@ -1309,17 +1303,13 @@ void QWindowsFontEngine::initFontInfo(const QFontDef &request,
Will probably be superseded by a common Free Type font engine in Qt 5.X.
*/
QWindowsMultiFontEngine::QWindowsMultiFontEngine(QFontEngine *fe, int script)
- : QFontEngineMultiBasicImpl(fe, script)
+ : QFontEngineMulti(fe, script)
{
}
-void QWindowsMultiFontEngine::loadEngine(int at)
+QFontEngine *QWindowsMultiFontEngine::loadEngine(int at)
{
- ensureFallbackFamiliesQueried();
- Q_ASSERT(at < engines.size());
- Q_ASSERT(engines.at(at) == 0);
-
- QFontEngine *fontEngine = engines.at(0);
+ QFontEngine *fontEngine = engine(0);
QSharedPointer<QWindowsFontEngineData> data;
LOGFONT lf;
@@ -1339,36 +1329,36 @@ void QWindowsMultiFontEngine::loadEngine(int at)
}
const QString fam = fallbackFamilyAt(at - 1);
- memcpy(lf.lfFaceName, fam.utf16(), sizeof(wchar_t) * qMin(fam.length() + 1, 32)); // 32 = Windows hard-coded
+ const int faceNameLength = qMin(fam.length(), LF_FACESIZE - 1);
+ memcpy(lf.lfFaceName, fam.utf16(), faceNameLength * sizeof(wchar_t));
+ lf.lfFaceName[faceNameLength] = 0;
#ifndef QT_NO_DIRECTWRITE
if (fontEngine->type() == QFontEngine::DirectWrite) {
- const QString nameSubstitute = QWindowsFontEngineDirectWrite::fontNameSubstitute(QString::fromWCharArray(lf.lfFaceName));
- memcpy(lf.lfFaceName, nameSubstitute.utf16(),
- sizeof(wchar_t) * qMin(nameSubstitute.length() + 1, LF_FACESIZE));
+ const QString nameSubstitute = QWindowsFontEngineDirectWrite::fontNameSubstitute(fam);
+ if (nameSubstitute != fam) {
+ const int nameSubstituteLength = qMin(nameSubstitute.length(), LF_FACESIZE - 1);
+ memcpy(lf.lfFaceName, nameSubstitute.utf16(), nameSubstituteLength * sizeof(wchar_t));
+ lf.lfFaceName[nameSubstituteLength] = 0;
+ }
IDWriteFont *directWriteFont = 0;
HRESULT hr = data->directWriteGdiInterop->CreateFontFromLOGFONT(&lf, &directWriteFont);
if (FAILED(hr)) {
qErrnoWarning("%s: CreateFontFromLOGFONT failed", __FUNCTION__);
} else {
+ Q_ASSERT(directWriteFont);
IDWriteFontFace *directWriteFontFace = NULL;
HRESULT hr = directWriteFont->CreateFontFace(&directWriteFontFace);
if (SUCCEEDED(hr)) {
+ Q_ASSERT(directWriteFontFace);
QWindowsFontEngineDirectWrite *fedw = new QWindowsFontEngineDirectWrite(directWriteFontFace,
fontEngine->fontDef.pixelSize,
data);
- fedw->fontDef = fontDef;
- fedw->fontDef.family = fam;
- fedw->ref.ref();
- engines[at] = fedw;
-
- qCDebug(lcQpaFonts) << __FUNCTION__ << at << fam;
- return;
+ return fedw;
} else {
qErrnoWarning("%s: CreateFontFace failed", __FUNCTION__);
}
-
}
}
#endif
@@ -1382,13 +1372,8 @@ void QWindowsMultiFontEngine::loadEngine(int at)
hfont = (HFONT)GetStockObject(ANSI_VAR_FONT);
stockFont = true;
}
- engines[at] = new QWindowsFontEngine(fam, hfont, stockFont, lf, data);
- engines[at]->ref.ref();
- engines[at]->fontDef = fontDef;
- engines[at]->fontDef.family = fam;
- qCDebug(lcQpaFonts) << __FUNCTION__ << at << fam;
- // TODO: increase cost in QFontCache for the font engine loaded here
+ return new QWindowsFontEngine(fam, hfont, stockFont, lf, data);
}
bool QWindowsFontEngine::supportsTransformation(const QTransform &transform) const
diff --git a/src/plugins/platforms/windows/qwindowsfontengine.h b/src/plugins/platforms/windows/qwindowsfontengine.h
index 02bc4008d1..fdcb74d67d 100644
--- a/src/plugins/platforms/windows/qwindowsfontengine.h
+++ b/src/plugins/platforms/windows/qwindowsfontengine.h
@@ -163,13 +163,12 @@ private:
mutable int designAdvancesSize;
};
-
-class QWindowsMultiFontEngine : public QFontEngineMultiBasicImpl
+class QWindowsMultiFontEngine : public QFontEngineMulti
{
public:
explicit QWindowsMultiFontEngine(QFontEngine *fe, int script);
- void loadEngine(int at);
+ QFontEngine *loadEngine(int at) Q_DECL_OVERRIDE;
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp b/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp
index ed512f78ca..5c241b1fc8 100644
--- a/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp
+++ b/src/plugins/platforms/windows/qwindowsfontenginedirectwrite.cpp
@@ -485,15 +485,11 @@ QImage QWindowsFontEngineDirectWrite::alphaMapForGlyph(glyph_t glyph, QFixed sub
{
QImage im = imageForGlyph(glyph, subPixelPosition, 0, QTransform());
- QImage indexed(im.width(), im.height(), QImage::Format_Indexed8);
- QVector<QRgb> colors(256);
- for (int i=0; i<256; ++i)
- colors[i] = qRgba(0, 0, 0, i);
- indexed.setColorTable(colors);
+ QImage alphaMap(im.width(), im.height(), QImage::Format_Alpha8);
for (int y=0; y<im.height(); ++y) {
uint *src = (uint*) im.scanLine(y);
- uchar *dst = indexed.scanLine(y);
+ uchar *dst = alphaMap.scanLine(y);
for (int x=0; x<im.width(); ++x) {
*dst = 255 - (m_fontEngineData->pow_gamma[qGray(0xffffffff - *src)] * 255. / 2047.);
++dst;
@@ -501,7 +497,7 @@ QImage QWindowsFontEngineDirectWrite::alphaMapForGlyph(glyph_t glyph, QFixed sub
}
}
- return indexed;
+ return alphaMap;
}
bool QWindowsFontEngineDirectWrite::supportsSubPixelPositions() const
diff --git a/src/plugins/platforms/windows/qwindowsinputcontext.cpp b/src/plugins/platforms/windows/qwindowsinputcontext.cpp
index 94a27d146f..d8e4900780 100644
--- a/src/plugins/platforms/windows/qwindowsinputcontext.cpp
+++ b/src/plugins/platforms/windows/qwindowsinputcontext.cpp
@@ -156,8 +156,8 @@ QWindowsInputContext::QWindowsInputContext() :
m_WM_MSIME_MOUSE(RegisterWindowMessage(L"MSIMEMouseOperation")),
m_endCompositionRecursionGuard(false)
{
- connect(QGuiApplication::inputMethod(), SIGNAL(cursorRectangleChanged()),
- this, SLOT(cursorRectChanged()));
+ connect(QGuiApplication::inputMethod(), &QInputMethod::cursorRectangleChanged,
+ this, &QWindowsInputContext::cursorRectChanged);
}
QWindowsInputContext::~QWindowsInputContext()
diff --git a/src/plugins/platforms/windows/qwindowsintegration.h b/src/plugins/platforms/windows/qwindowsintegration.h
index d1617eaa3c..7fb37bc1f1 100644
--- a/src/plugins/platforms/windows/qwindowsintegration.h
+++ b/src/plugins/platforms/windows/qwindowsintegration.h
@@ -94,6 +94,7 @@ public:
static QWindowsIntegration *instance();
inline void emitScreenAdded(QPlatformScreen *s) { screenAdded(s); }
+ inline void emitDestroyScreen(QPlatformScreen *s) { destroyScreen(s); }
unsigned options() const;
diff --git a/src/plugins/platforms/windows/qwindowskeymapper.cpp b/src/plugins/platforms/windows/qwindowskeymapper.cpp
index d781cdbe9c..25d6937d8f 100644
--- a/src/plugins/platforms/windows/qwindowskeymapper.cpp
+++ b/src/plugins/platforms/windows/qwindowskeymapper.cpp
@@ -1192,6 +1192,8 @@ Qt::KeyboardModifiers QWindowsKeyMapper::queryKeyboardModifiers()
modifiers |= Qt::ControlModifier;
if (GetKeyState(VK_MENU) < 0)
modifiers |= Qt::AltModifier;
+ if (GetKeyState(VK_LWIN) < 0 || GetKeyState(VK_RWIN) < 0)
+ modifiers |= Qt::MetaModifier;
return modifiers;
}
diff --git a/src/plugins/platforms/windows/qwindowsmime.cpp b/src/plugins/platforms/windows/qwindowsmime.cpp
index bc8e9347dc..42f4e66d6c 100644
--- a/src/plugins/platforms/windows/qwindowsmime.cpp
+++ b/src/plugins/platforms/windows/qwindowsmime.cpp
@@ -343,10 +343,11 @@ static bool setData(const QByteArray &data, STGMEDIUM *pmedium)
return true;
}
-static QByteArray getData(int cf, IDataObject *pDataObj)
+static QByteArray getData(int cf, IDataObject *pDataObj, int lindex = -1)
{
QByteArray data;
FORMATETC formatetc = setCf(cf);
+ formatetc.lindex = lindex;
STGMEDIUM s;
if (pDataObj->GetData(&formatetc, &s) == S_OK) {
DWORD * val = (DWORD*)GlobalLock(s.hGlobal);
@@ -791,7 +792,6 @@ QVariant QWindowsMimeURI::convertToMime(const QString &mimeType, LPDATAOBJECT pD
{
if (mimeType == QLatin1String("text/uri-list")) {
if (canGetData(CF_HDROP, pDataObj)) {
- QByteArray texturi;
QList<QVariant> urls;
QByteArray data = getData(CF_HDROP, pDataObj);
@@ -1340,21 +1340,34 @@ static bool isCustomMimeType(const QString &mimeType)
return mimeType.startsWith(QLatin1String(x_qt_windows_mime), Qt::CaseInsensitive);
}
-static QString customMimeType(const QString &mimeType)
+static QString customMimeType(const QString &mimeType, int *lindex = 0)
{
int len = sizeof(x_qt_windows_mime) - 1;
- int n = mimeType.lastIndexOf(QLatin1Char('\"'))-len;
- return mimeType.mid(len, n);
+ int n = mimeType.lastIndexOf(QLatin1Char('\"')) - len;
+ QString ret = mimeType.mid(len, n);
+
+ const int beginPos = mimeType.indexOf(QLatin1String(";index="));
+ if (beginPos > -1) {
+ const int endPos = mimeType.indexOf(QLatin1Char(';'), beginPos + 1);
+ const int indexStartPos = beginPos + 7;
+ if (lindex)
+ *lindex = mimeType.midRef(indexStartPos, endPos == -1 ? endPos : endPos - indexStartPos).toInt();
+ } else {
+ if (lindex)
+ *lindex = -1;
+ }
+ return ret;
}
bool QLastResortMimes::canConvertToMime(const QString &mimeType, IDataObject *pDataObj) const
{
if (isCustomMimeType(mimeType)) {
+ // MSDN documentation for QueryGetData says only -1 is supported, so ignore lindex here.
QString clipFormat = customMimeType(mimeType);
int cf = RegisterClipboardFormat(reinterpret_cast<const wchar_t *> (clipFormat.utf16()));
return canGetData(cf, pDataObj);
} else if (formats.keys(mimeType).isEmpty()) {
- // if it is not in there then register it an see if we can get it
+ // if it is not in there then register it and see if we can get it
int cf = QWindowsMime::registerMimeType(mimeType);
return canGetData(cf, pDataObj);
} else {
@@ -1370,9 +1383,10 @@ QVariant QLastResortMimes::convertToMime(const QString &mimeType, IDataObject *p
if (canConvertToMime(mimeType, pDataObj)) {
QByteArray data;
if (isCustomMimeType(mimeType)) {
- QString clipFormat = customMimeType(mimeType);
+ int lindex;
+ QString clipFormat = customMimeType(mimeType, &lindex);
int cf = RegisterClipboardFormat(reinterpret_cast<const wchar_t *> (clipFormat.utf16()));
- data = getData(cf, pDataObj);
+ data = getData(cf, pDataObj, lindex);
} else if (formats.keys(mimeType).isEmpty()) {
int cf = QWindowsMime::registerMimeType(mimeType);
data = getData(cf, pDataObj);
@@ -1452,6 +1466,7 @@ QWindowsMime * QWindowsMimeConverter::converterToMime(const QString &mimeType, I
QStringList QWindowsMimeConverter::allMimesForFormats(IDataObject *pDataObj) const
{
+ qCDebug(lcQpaMime) << "QWindowsMime::allMimesForFormats()";
ensureInitialized();
QStringList formats;
LPENUMFORMATETC FAR fmtenum;
@@ -1461,10 +1476,9 @@ QStringList QWindowsMimeConverter::allMimesForFormats(IDataObject *pDataObj) con
FORMATETC fmtetc;
while (S_OK == fmtenum->Next(1, &fmtetc, 0)) {
#if defined(QMIME_DEBUG)
- qDebug("QWindowsMime::allMimesForFormats()");
wchar_t buf[256] = {0};
GetClipboardFormatName(fmtetc.cfFormat, buf, 255);
- qDebug("CF = %d : %s", fmtetc.cfFormat, QString::fromWCharArray(buf));
+ qDebug("CF = %d : %s", fmtetc.cfFormat, qPrintable(QString::fromWCharArray(buf)));
#endif
for (int i= m_mimes.size() - 1; i >= 0; --i) {
QString format = m_mimes.at(i)->mimeForFormat(fmtetc);
@@ -1478,7 +1492,7 @@ QStringList QWindowsMimeConverter::allMimesForFormats(IDataObject *pDataObj) con
}
fmtenum->Release();
}
- qCDebug(lcQpaMime) << __FUNCTION__ << pDataObj << formats;
+ qCDebug(lcQpaMime) << pDataObj << formats;
return formats;
}
diff --git a/src/plugins/platforms/windows/qwindowsnativeinterface.cpp b/src/plugins/platforms/windows/qwindowsnativeinterface.cpp
index 002f4ae92c..bd5022505f 100644
--- a/src/plugins/platforms/windows/qwindowsnativeinterface.cpp
+++ b/src/plugins/platforms/windows/qwindowsnativeinterface.cpp
@@ -216,4 +216,11 @@ int QWindowsNativeInterface::registerMimeType(const QString &mimeType)
return QWindowsMime::registerMimeType(mimeType);
}
+QFunctionPointer QWindowsNativeInterface::platformFunction(const QByteArray &function) const
+{
+ if (function == QWindowsWindowFunctions::setTouchWindowTouchTypeIdentifier())
+ return QFunctionPointer(QWindowsWindow::setTouchWindowTouchTypeStatic);
+ return Q_NULLPTR;
+}
+
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/windows/qwindowsnativeinterface.h b/src/plugins/platforms/windows/qwindowsnativeinterface.h
index 3d47dbe721..9b2ac00986 100644
--- a/src/plugins/platforms/windows/qwindowsnativeinterface.h
+++ b/src/plugins/platforms/windows/qwindowsnativeinterface.h
@@ -85,6 +85,8 @@ public:
QVariant windowProperty(QPlatformWindow *window, const QString &name) const Q_DECL_OVERRIDE;
QVariant windowProperty(QPlatformWindow *window, const QString &name, const QVariant &defaultValue) const Q_DECL_OVERRIDE;
void setWindowProperty(QPlatformWindow *window, const QString &name, const QVariant &value) Q_DECL_OVERRIDE;
+
+ QFunctionPointer platformFunction(const QByteArray &function) const Q_DECL_OVERRIDE;
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/windows/qwindowsscreen.cpp b/src/plugins/platforms/windows/qwindowsscreen.cpp
index fd57d9ee61..79219e361a 100644
--- a/src/plugins/platforms/windows/qwindowsscreen.cpp
+++ b/src/plugins/platforms/windows/qwindowsscreen.cpp
@@ -462,7 +462,7 @@ void QWindowsScreenManager::removeScreen(int index)
if (movedWindowCount)
QWindowSystemInterface::flushWindowSystemEvents();
}
- delete m_screens.takeAt(index);
+ QWindowsIntegration::instance()->emitDestroyScreen(m_screens.takeAt(index));
}
/*!
@@ -497,4 +497,11 @@ bool QWindowsScreenManager::handleScreenChanges()
return true;
}
+void QWindowsScreenManager::clearScreens()
+{
+ // Delete screens in reverse order to avoid crash in case of multiple screens
+ while (!m_screens.isEmpty())
+ QWindowsIntegration::instance()->emitDestroyScreen(m_screens.takeLast());
+}
+
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/windows/qwindowsscreen.h b/src/plugins/platforms/windows/qwindowsscreen.h
index aa1408358b..924912dbc2 100644
--- a/src/plugins/platforms/windows/qwindowsscreen.h
+++ b/src/plugins/platforms/windows/qwindowsscreen.h
@@ -127,11 +127,7 @@ public:
QWindowsScreenManager();
- inline void clearScreens() {
- // Delete screens in reverse order to avoid crash in case of multiple screens
- while (!m_screens.isEmpty())
- delete m_screens.takeLast();
- }
+ void clearScreens();
bool handleScreenChanges();
bool handleDisplayChange(WPARAM wParam, LPARAM lParam);
diff --git a/src/plugins/platforms/windows/qwindowswindow.cpp b/src/plugins/platforms/windows/qwindowswindow.cpp
index e7061dbfde..5d94ec3c38 100644
--- a/src/plugins/platforms/windows/qwindowswindow.cpp
+++ b/src/plugins/platforms/windows/qwindowswindow.cpp
@@ -889,16 +889,7 @@ QWindowsWindow::QWindowsWindow(QWindow *aWindow, const QWindowsWindowData &data)
#endif // QT_NO_OPENGL
updateDropSite();
-#ifndef Q_OS_WINCE
- if ((QWindowsContext::instance()->systemInfo() & QWindowsContext::SI_SupportsTouch)
- && aWindow->type() != Qt::ForeignWindow) {
- if (QWindowsContext::user32dll.registerTouchWindow(m_data.hwnd, 0)) {
- setFlag(TouchRegistered);
- } else {
- qErrnoWarning("RegisterTouchWindow() failed for window '%s'.", qPrintable(aWindow->objectName()));
- }
- }
-#endif // !Q_OS_WINCE
+ registerTouchWindow();
setWindowState(aWindow->windowState());
const qreal opacity = qt_window_private(aWindow)->opacity;
if (!qFuzzyCompare(opacity, qreal(1.0)))
@@ -2303,4 +2294,24 @@ void *QWindowsWindow::surface(void *nativeConfig)
#endif
}
+void QWindowsWindow::setTouchWindowTouchTypeStatic(QWindow *window, QWindowsWindowFunctions::TouchWindowTouchTypes touchTypes)
+{
+ if (!window->handle())
+ return;
+ static_cast<QWindowsWindow *>(window->handle())->registerTouchWindow(touchTypes);
+}
+
+void QWindowsWindow::registerTouchWindow(QWindowsWindowFunctions::TouchWindowTouchTypes touchTypes)
+{
+#ifndef Q_OS_WINCE
+ if ((QWindowsContext::instance()->systemInfo() & QWindowsContext::SI_SupportsTouch)
+ && window()->type() != Qt::ForeignWindow) {
+ if (QWindowsContext::user32dll.registerTouchWindow(m_data.hwnd, (ULONG)touchTypes))
+ setFlag(TouchRegistered);
+ else
+ qErrnoWarning("RegisterTouchWindow() failed for window '%s'.", qPrintable(window()->objectName()));
+ }
+#endif // !Q_OS_WINCE
+}
+
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/windows/qwindowswindow.h b/src/plugins/platforms/windows/qwindowswindow.h
index 9822ebce45..66102511e0 100644
--- a/src/plugins/platforms/windows/qwindowswindow.h
+++ b/src/plugins/platforms/windows/qwindowswindow.h
@@ -43,6 +43,7 @@
#include "qwindowsopenglcontext.h"
#include <qpa/qplatformwindow.h>
+#include <QtPlatformHeaders/qwindowswindowfunctions.h>
QT_BEGIN_NAMESPACE
@@ -261,6 +262,9 @@ public:
void stopAlertWindow();
#endif
+ static void setTouchWindowTouchTypeStatic(QWindow *window, QWindowsWindowFunctions::TouchWindowTouchTypes touchTypes);
+ void registerTouchWindow(QWindowsWindowFunctions::TouchWindowTouchTypes touchTypes = QWindowsWindowFunctions::NormalTouch);
+
private:
inline void show_sys() const;
inline void hide_sys() const;
diff --git a/src/plugins/platforms/winrt/qwinrtfontdatabase.cpp b/src/plugins/platforms/winrt/qwinrtfontdatabase.cpp
index a41e5f8f38..41bd2e108d 100644
--- a/src/plugins/platforms/winrt/qwinrtfontdatabase.cpp
+++ b/src/plugins/platforms/winrt/qwinrtfontdatabase.cpp
@@ -80,6 +80,11 @@ QFont QWinRTFontDatabase::defaultFont() const
return QFont(QStringLiteral("Segoe UI"));
}
+bool QWinRTFontDatabase::fontsAlwaysScalable() const
+{
+ return true;
+}
+
void QWinRTFontDatabase::populateFontDatabase()
{
ComPtr<IDWriteFactory1> factory;
@@ -204,31 +209,7 @@ void QWinRTFontDatabase::populateFamily(const QString &familyName)
}
}
- QFont::Weight weight;
- switch (font->GetWeight()) {
- case DWRITE_FONT_WEIGHT_THIN:
- case DWRITE_FONT_WEIGHT_EXTRA_LIGHT:
- case DWRITE_FONT_WEIGHT_LIGHT:
- case DWRITE_FONT_WEIGHT_SEMI_LIGHT:
- weight = QFont::Light;
- break;
- default:
- case DWRITE_FONT_WEIGHT_NORMAL:
- case DWRITE_FONT_WEIGHT_MEDIUM:
- weight = QFont::Normal;
- break;
- case DWRITE_FONT_WEIGHT_DEMI_BOLD:
- weight = QFont::DemiBold;
- break;
- case DWRITE_FONT_WEIGHT_BOLD:
- case DWRITE_FONT_WEIGHT_EXTRA_BOLD:
- weight = QFont::Bold;
- break;
- case DWRITE_FONT_WEIGHT_BLACK:
- case DWRITE_FONT_WEIGHT_EXTRA_BLACK:
- weight = QFont::Black;
- break;
- }
+ QFont::Weight weight = QPlatformFontDatabase::weightFromInteger(font->GetWeight());
QFont::Style style;
switch (font->GetStyle()) {
diff --git a/src/plugins/platforms/winrt/qwinrtfontdatabase.h b/src/plugins/platforms/winrt/qwinrtfontdatabase.h
index f0c4714911..cf8ed3b06a 100644
--- a/src/plugins/platforms/winrt/qwinrtfontdatabase.h
+++ b/src/plugins/platforms/winrt/qwinrtfontdatabase.h
@@ -53,9 +53,10 @@ class QWinRTFontDatabase : public QBasicFontDatabase
{
public:
QString fontDir() const;
- QFont defaultFont() const Q_DECL_OVERRIDE;
#ifdef QT_WINRT_USE_DWRITE
~QWinRTFontDatabase();
+ QFont defaultFont() const Q_DECL_OVERRIDE;
+ bool fontsAlwaysScalable() const Q_DECL_OVERRIDE;
void populateFontDatabase() Q_DECL_OVERRIDE;
void populateFamily(const QString &familyName) Q_DECL_OVERRIDE;
QFontEngine *fontEngine(const QFontDef &fontDef, void *handle) Q_DECL_OVERRIDE;
diff --git a/src/plugins/platforms/winrt/qwinrttheme.cpp b/src/plugins/platforms/winrt/qwinrttheme.cpp
index f64b47960a..339a658c3e 100644
--- a/src/plugins/platforms/winrt/qwinrttheme.cpp
+++ b/src/plugins/platforms/winrt/qwinrttheme.cpp
@@ -170,7 +170,7 @@ QWinRTTheme::QWinRTTheme()
bool QWinRTTheme::usePlatformNativeDialog(DialogType type) const
{
static bool useNativeDialogs = qEnvironmentVariableIsSet("QT_USE_WINRT_NATIVE_DIALOGS")
- ? qgetenv("QT_USE_WINRT_NATIVE_DIALOGS").toInt() : true;
+ ? qEnvironmentVariableIntValue("QT_USE_WINRT_NATIVE_DIALOGS") : true;
if (type == FileDialog || type == MessageDialog)
return useNativeDialogs;
diff --git a/src/plugins/platforms/xcb/gl_integrations/gl_integrations.pri b/src/plugins/platforms/xcb/gl_integrations/gl_integrations.pri
new file mode 100644
index 0000000000..56bc126652
--- /dev/null
+++ b/src/plugins/platforms/xcb/gl_integrations/gl_integrations.pri
@@ -0,0 +1,13 @@
+INCLUDEPATH += $$PWD
+
+HEADERS += \
+ $$PWD/qxcbglintegration.h \
+ $$PWD/qxcbglintegrationfactory.h \
+ $$PWD/qxcbglintegrationplugin.h \
+ $$PWD/qxcbnativeinterfacehandler.h
+
+SOURCES += \
+ $$PWD/qxcbglintegrationfactory.cpp \
+ $$PWD/qxcbglintegration.cpp \
+ $$PWD/qxcbnativeinterfacehandler.cpp
+
diff --git a/src/plugins/platforms/xcb/gl_integrations/gl_integrations.pro b/src/plugins/platforms/xcb/gl_integrations/gl_integrations.pro
new file mode 100644
index 0000000000..29fddeabd4
--- /dev/null
+++ b/src/plugins/platforms/xcb/gl_integrations/gl_integrations.pro
@@ -0,0 +1,9 @@
+TEMPLATE = subdirs
+
+contains(QT_CONFIG, egl):contains(QT_CONFIG, egl_x11) {
+ SUBDIRS += xcb_egl
+}
+
+contains(QT_CONFIG, xcb-xlib):!contains(QT_CONFIG, opengles2) {
+ SUBDIRS += xcb_glx
+}
diff --git a/src/plugins/platforms/xcb/gl_integrations/gl_integrations_plugin_base.pri b/src/plugins/platforms/xcb/gl_integrations/gl_integrations_plugin_base.pri
new file mode 100644
index 0000000000..8c60268e0d
--- /dev/null
+++ b/src/plugins/platforms/xcb/gl_integrations/gl_integrations_plugin_base.pri
@@ -0,0 +1,38 @@
+QT += core-private gui-private platformsupport-private xcb_qpa_lib-private
+
+INCLUDEPATH += $$PWD
+INCLUDEPATH += $$PWD/../
+
+# needed by Xcursor ...
+contains(QT_CONFIG, xcb-xlib) {
+ DEFINES += XCB_USE_XLIB
+ contains(QT_CONFIG, xinput2) {
+ DEFINES += XCB_USE_XINPUT2
+ }
+}
+
+# to support custom cursors with depth > 1
+contains(QT_CONFIG, xcb-render) {
+ DEFINES += XCB_USE_RENDER
+}
+
+# build with session management support
+contains(QT_CONFIG, xcb-sm) {
+ DEFINES += XCB_USE_SM
+}
+
+DEFINES += $$QMAKE_DEFINES_XCB
+LIBS += $$QMAKE_LIBS_XCB
+QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_XCB
+
+CONFIG += qpa/genericunixfontdatabase
+
+contains(QT_CONFIG, xcb-qt) {
+ DEFINES += XCB_USE_RENDER
+ XCB_DIR = ../../../3rdparty/xcb
+ INCLUDEPATH += $$XCB_DIR/include $$XCB_DIR/sysinclude
+ LIBS += -lxcb -L$$OUT_PWD/xcb-static -lxcb-static
+} else {
+ LIBS += -lxcb -lxcb-image -lxcb-icccm -lxcb-sync -lxcb-xfixes -lxcb-shm -lxcb-randr -lxcb-shape -lxcb-keysyms
+ !contains(DEFINES, QT_NO_XKB):LIBS += -lxcb-xkb
+}
diff --git a/src/plugins/platforms/xcb/gl_integrations/qxcbglintegration.cpp b/src/plugins/platforms/xcb/gl_integrations/qxcbglintegration.cpp
new file mode 100644
index 0000000000..d864ee1198
--- /dev/null
+++ b/src/plugins/platforms/xcb/gl_integrations/qxcbglintegration.cpp
@@ -0,0 +1,62 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qxcbglintegration.h"
+
+QT_BEGIN_NAMESPACE
+
+Q_LOGGING_CATEGORY(QT_XCB_GLINTEGRATION, "qt.xcb.glintegration")
+
+QXcbGlIntegration::QXcbGlIntegration()
+{
+}
+QXcbGlIntegration::~QXcbGlIntegration()
+{
+}
+
+bool QXcbGlIntegration::handleXcbEvent(xcb_generic_event_t *event, uint responseType)
+{
+ Q_UNUSED(event);
+ Q_UNUSED(responseType);
+ return false;
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/xcb/gl_integrations/qxcbglintegration.h b/src/plugins/platforms/xcb/gl_integrations/qxcbglintegration.h
new file mode 100644
index 0000000000..947ef15162
--- /dev/null
+++ b/src/plugins/platforms/xcb/gl_integrations/qxcbglintegration.h
@@ -0,0 +1,76 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QXCBGLINTEGRATION_H
+
+#include "qxcbexport.h"
+#include "qxcbwindow.h"
+
+#include <QtCore/QLoggingCategory>
+
+QT_BEGIN_NAMESPACE
+
+class QPlatformOffscreenSurface;
+class QOffscreenSurface;
+class QXcbNativeInterfaceHandler;
+
+Q_XCB_EXPORT Q_DECLARE_LOGGING_CATEGORY(QT_XCB_GLINTEGRATION)
+
+class Q_XCB_EXPORT QXcbGlIntegration
+{
+public:
+ QXcbGlIntegration();
+ virtual ~QXcbGlIntegration();
+ virtual bool initialize(QXcbConnection *connection) = 0;
+
+ virtual bool supportsThreadedOpenGL() const { return false; }
+ virtual bool handleXcbEvent(xcb_generic_event_t *event, uint responseType);
+
+ virtual QXcbWindow *createWindow(QWindow *window) const = 0;
+ virtual QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const = 0;
+ virtual QPlatformOffscreenSurface *createPlatformOffscreenSurface(QOffscreenSurface *surface) const = 0;
+
+ virtual QXcbNativeInterfaceHandler *nativeInterfaceHandler() const { return Q_NULLPTR; }
+};
+
+QT_END_NAMESPACE
+
+#endif //QXCBGLINTEGRATION_H
diff --git a/src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationfactory.cpp b/src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationfactory.cpp
new file mode 100644
index 0000000000..c4546b990a
--- /dev/null
+++ b/src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationfactory.cpp
@@ -0,0 +1,108 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qxcbglintegrationfactory.h"
+#include "qxcbglintegrationplugin.h"
+
+#include "qxcbglintegrationplugin.h"
+#include "private/qfactoryloader_p.h"
+#include "qguiapplication.h"
+#include "qdir.h"
+
+QT_BEGIN_NAMESPACE
+
+#ifndef QT_NO_LIBRARY
+Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader,
+ (QXcbGlIntegrationFactoryInterface_iid, QLatin1String("/xcbglintegrations"), Qt::CaseInsensitive))
+Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, directLoader,
+ (QXcbGlIntegrationFactoryInterface_iid, QLatin1String(""), Qt::CaseInsensitive))
+
+static inline QXcbGlIntegration *loadIntegration(QFactoryLoader *loader, const QString &key)
+{
+ const int index = loader->indexOf(key);
+ if (index != -1) {
+ if (QXcbGlIntegrationPlugin *factory = qobject_cast<QXcbGlIntegrationPlugin *>(loader->instance(index)))
+ if (QXcbGlIntegration *result = factory->create())
+ return result;
+ }
+ return Q_NULLPTR;
+}
+#endif // !QT_NO_LIBRARY
+
+QStringList QXcbGlIntegrationFactory::keys(const QString &pluginPath)
+{
+#ifndef QT_NO_LIBRARY
+ QStringList list;
+ if (!pluginPath.isEmpty()) {
+ QCoreApplication::addLibraryPath(pluginPath);
+ list = directLoader()->keyMap().values();
+ if (!list.isEmpty()) {
+ const QString postFix = QStringLiteral(" (from ")
+ + QDir::toNativeSeparators(pluginPath)
+ + QLatin1Char(')');
+ const QStringList::iterator end = list.end();
+ for (QStringList::iterator it = list.begin(); it != end; ++it)
+ (*it).append(postFix);
+ }
+ }
+ list.append(loader()->keyMap().values());
+ return list;
+#else
+ return QStringList();
+#endif
+}
+
+QXcbGlIntegration *QXcbGlIntegrationFactory::create(const QString &platform, const QString &pluginPath)
+{
+#ifndef QT_NO_LIBRARY
+ // Try loading the plugin from platformPluginPath first:
+ if (!pluginPath.isEmpty()) {
+ QCoreApplication::addLibraryPath(pluginPath);
+ if (QXcbGlIntegration *ret = loadIntegration(directLoader(), platform))
+ return ret;
+ }
+ if (QXcbGlIntegration *ret = loadIntegration(loader(), platform))
+ return ret;
+#endif
+ return Q_NULLPTR;
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationfactory.h b/src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationfactory.h
new file mode 100644
index 0000000000..d1fb91dee8
--- /dev/null
+++ b/src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationfactory.h
@@ -0,0 +1,61 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QXCBGLINTEGRATIONFACTORY_H
+#define QXCBGLINTEGRATIONFACTORY_H
+
+#include <QtCore/qstringlist.h>
+
+QT_BEGIN_NAMESPACE
+
+class QXcbGlIntegration;
+
+class QXcbGlIntegrationFactory
+{
+public:
+ static QStringList keys(const QString &pluginPath = QString());
+ static QXcbGlIntegration *create(const QString &name, const QString &platformPluginPath = QString());
+};
+
+QT_END_NAMESPACE
+
+#endif //QXCBGLINTEGRATIONFACTORY_H
+
diff --git a/src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationplugin.h b/src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationplugin.h
new file mode 100644
index 0000000000..ef630a4fbe
--- /dev/null
+++ b/src/plugins/platforms/xcb/gl_integrations/qxcbglintegrationplugin.h
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QXCBGLINTEGRATIONPLUGIN_H
+#define QXCBGLINTEGRATIONPLUGIN_H
+
+#include "qxcbexport.h"
+#include <QtCore/qplugin.h>
+#include <QtCore/qfactoryinterface.h>
+
+QT_BEGIN_NAMESPACE
+
+#define QXcbGlIntegrationFactoryInterface_iid "org.qt-project.Qt.QPA.Xcb.QXcbGlIntegrationFactoryInterface.5.5"
+
+class QXcbGlIntegration;
+
+class Q_XCB_EXPORT QXcbGlIntegrationPlugin : public QObject
+{
+ Q_OBJECT
+public:
+ explicit QXcbGlIntegrationPlugin(QObject *parent = 0)
+ : QObject(parent)
+ { }
+
+ virtual QXcbGlIntegration *create() = 0;
+};
+QT_END_NAMESPACE
+
+#endif //QXCBGLINTEGRATIONPLUGIN_H
diff --git a/src/plugins/platforms/xcb/gl_integrations/qxcbnativeinterfacehandler.cpp b/src/plugins/platforms/xcb/gl_integrations/qxcbnativeinterfacehandler.cpp
new file mode 100644
index 0000000000..78c6fe0ccb
--- /dev/null
+++ b/src/plugins/platforms/xcb/gl_integrations/qxcbnativeinterfacehandler.cpp
@@ -0,0 +1,93 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qxcbnativeinterfacehandler.h"
+
+#include "qxcbnativeinterface.h"
+
+QT_BEGIN_NAMESPACE
+
+QXcbNativeInterfaceHandler::QXcbNativeInterfaceHandler(QXcbNativeInterface *nativeInterface)
+{
+ nativeInterface->addHandler(this);
+}
+QXcbNativeInterfaceHandler::~QXcbNativeInterfaceHandler()
+{
+ m_native_interface->removeHandler(this);
+}
+
+QPlatformNativeInterface::NativeResourceForIntegrationFunction QXcbNativeInterfaceHandler::nativeResourceFunctionForIntegration(const QByteArray &resource) const
+{
+ Q_UNUSED(resource);
+ return Q_NULLPTR;
+}
+
+QPlatformNativeInterface::NativeResourceForContextFunction QXcbNativeInterfaceHandler::nativeResourceFunctionForContext(const QByteArray &resource) const
+{
+ Q_UNUSED(resource);
+ return Q_NULLPTR;
+}
+
+QPlatformNativeInterface::NativeResourceForScreenFunction QXcbNativeInterfaceHandler::nativeResourceFunctionForScreen(const QByteArray &resource) const
+{
+ Q_UNUSED(resource);
+ return Q_NULLPTR;
+}
+
+QPlatformNativeInterface::NativeResourceForWindowFunction QXcbNativeInterfaceHandler::nativeResourceFunctionForWindow(const QByteArray &resource) const
+{
+ Q_UNUSED(resource);
+ return Q_NULLPTR;
+}
+
+QPlatformNativeInterface::NativeResourceForBackingStoreFunction QXcbNativeInterfaceHandler::nativeResourceFunctionForBackingStore(const QByteArray &resource) const
+{
+ Q_UNUSED(resource);
+ return Q_NULLPTR;
+}
+
+QFunctionPointer QXcbNativeInterfaceHandler::platformFunction(const QByteArray &function) const
+{
+ Q_UNUSED(function);
+ return Q_NULLPTR;
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/xcb/gl_integrations/qxcbnativeinterfacehandler.h b/src/plugins/platforms/xcb/gl_integrations/qxcbnativeinterfacehandler.h
new file mode 100644
index 0000000000..3c239c443d
--- /dev/null
+++ b/src/plugins/platforms/xcb/gl_integrations/qxcbnativeinterfacehandler.h
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QXCBNATIVEINTERFACEHANDLER_H
+#define QXCBNATIVEINTERFACEHANDLER_H
+
+#include <QtCore/QByteArray>
+#include <QtGui/qpa/qplatformnativeinterface.h>
+
+#include "qxcbexport.h"
+
+QT_BEGIN_NAMESPACE
+
+class QXcbNativeInterface;
+class Q_XCB_EXPORT QXcbNativeInterfaceHandler
+{
+public:
+ QXcbNativeInterfaceHandler(QXcbNativeInterface *nativeInterface);
+ virtual ~QXcbNativeInterfaceHandler();
+
+ virtual QPlatformNativeInterface::NativeResourceForIntegrationFunction nativeResourceFunctionForIntegration(const QByteArray &resource) const;
+ virtual QPlatformNativeInterface::NativeResourceForContextFunction nativeResourceFunctionForContext(const QByteArray &resource) const;
+ virtual QPlatformNativeInterface::NativeResourceForScreenFunction nativeResourceFunctionForScreen(const QByteArray &resource) const;
+ virtual QPlatformNativeInterface::NativeResourceForWindowFunction nativeResourceFunctionForWindow(const QByteArray &resource) const;
+ virtual QPlatformNativeInterface::NativeResourceForBackingStoreFunction nativeResourceFunctionForBackingStore(const QByteArray &resource) const;
+
+ virtual QFunctionPointer platformFunction(const QByteArray &function) const;
+protected:
+ QXcbNativeInterface *m_native_interface;
+};
+
+QT_END_NAMESPACE
+
+#endif //QXCBNATIVEINTERFACEHANDLER_H
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglcontext.h b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglcontext.h
new file mode 100644
index 0000000000..0dce728019
--- /dev/null
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglcontext.h
@@ -0,0 +1,104 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QXCBEGLCONTEXT_H
+#define QXCBEGLCONTEXT_H
+
+#include "qxcbeglwindow.h"
+#include <QtPlatformSupport/private/qeglplatformcontext_p.h>
+#include <QtPlatformSupport/private/qeglpbuffer_p.h>
+#include <QtPlatformHeaders/QEGLNativeContext>
+
+QT_BEGIN_NAMESPACE
+
+//####todo remove the noops (looks like their where there in the initial commit)
+class QXcbEglContext : public QEGLPlatformContext
+{
+public:
+ QXcbEglContext(const QSurfaceFormat &glFormat, QPlatformOpenGLContext *share,
+ EGLDisplay display, QXcbConnection *c, const QVariant &nativeHandle)
+ : QEGLPlatformContext(glFormat, share, display, 0, nativeHandle)
+ , m_connection(c)
+ {
+ Q_XCB_NOOP(m_connection);
+ }
+
+ void swapBuffers(QPlatformSurface *surface)
+ {
+ Q_XCB_NOOP(m_connection);
+ QEGLPlatformContext::swapBuffers(surface);
+ Q_XCB_NOOP(m_connection);
+ }
+
+ bool makeCurrent(QPlatformSurface *surface)
+ {
+ Q_XCB_NOOP(m_connection);
+ bool ret = QEGLPlatformContext::makeCurrent(surface);
+ Q_XCB_NOOP(m_connection);
+ return ret;
+ }
+
+ void doneCurrent()
+ {
+ Q_XCB_NOOP(m_connection);
+ QEGLPlatformContext::doneCurrent();
+ Q_XCB_NOOP(m_connection);
+ }
+
+ EGLSurface eglSurfaceForPlatformSurface(QPlatformSurface *surface)
+ {
+ if (surface->surface()->surfaceClass() == QSurface::Window)
+ return static_cast<QXcbEglWindow *>(surface)->eglSurface();
+ else
+ return static_cast<QEGLPbuffer *>(surface)->pbuffer();
+ }
+
+ QVariant nativeHandle() const {
+ return QVariant::fromValue<QEGLNativeContext>(QEGLNativeContext(eglContext(), eglDisplay()));
+ }
+
+private:
+ QXcbConnection *m_connection;
+};
+
+QT_END_NAMESPACE
+#endif //QXCBEGLCONTEXT_H
+
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglinclude.h b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglinclude.h
new file mode 100644
index 0000000000..bcde872423
--- /dev/null
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglinclude.h
@@ -0,0 +1,57 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QXCBINCLUDE_H
+#define QXCBINCLUDE_H
+
+#include <QtGui/QPalette>
+#include <QtCore/QTextStream>
+#include <QtGui/private/qmath_p.h>
+#include <QtGui/private/qcssparser_p.h>
+#include <QtGui/private/qtextengine_p.h>
+
+#include <EGL/egl.h>
+
+QT_BEGIN_NAMESPACE
+
+QT_END_NAMESPACE
+
+#endif //QXCBINCLUDE_H
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.cpp
new file mode 100644
index 0000000000..75b35f4fb8
--- /dev/null
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.cpp
@@ -0,0 +1,112 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qxcbeglintegration.h"
+
+#include "qxcbeglcontext.h"
+
+#include <QtGui/QOffscreenSurface>
+
+#include "qxcbeglnativeinterfacehandler.h"
+
+QT_BEGIN_NAMESPACE
+
+QXcbEglIntegration::QXcbEglIntegration()
+ : m_connection(Q_NULLPTR)
+ , m_egl_display(EGL_NO_DISPLAY)
+{
+ qCDebug(QT_XCB_GLINTEGRATION) << "Xcb EGL gl-integration created";
+}
+
+QXcbEglIntegration::~QXcbEglIntegration()
+{
+ if (m_egl_display != EGL_NO_DISPLAY)
+ eglTerminate(m_egl_display);
+}
+
+bool QXcbEglIntegration::initialize(QXcbConnection *connection)
+{
+ m_connection = connection;
+
+#ifdef USE_XCB_XLIB
+ Display *dpy = (Display *)m_connection->xlib_display();
+#else
+ EGLNativeDisplayType dpy = EGL_DEFAULT_DISPLAY;
+#endif
+ m_egl_display = eglGetDisplay(dpy);
+
+ EGLint major, minor;
+ bool success = eglInitialize(m_egl_display, &major, &minor);
+ if (!success) {
+ m_egl_display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
+ qCDebug(QT_XCB_GLINTEGRATION) << "Xcb EGL gl-integration retrying with display" << m_egl_display;
+ success = eglInitialize(m_egl_display, &major, &minor);
+ }
+
+ m_native_interface_handler.reset(new QXcbEglNativeInterfaceHandler(connection->nativeInterface()));
+
+ qCDebug(QT_XCB_GLINTEGRATION) << "Xcb EGL gl-integration successfully initialized";
+ return success;
+}
+
+QXcbWindow *QXcbEglIntegration::createWindow(QWindow *window) const
+{
+ return new QXcbEglWindow(window, const_cast<QXcbEglIntegration *>(this));
+}
+
+QPlatformOpenGLContext *QXcbEglIntegration::createPlatformOpenGLContext(QOpenGLContext *context) const
+{
+ QXcbScreen *screen = static_cast<QXcbScreen *>(context->screen()->handle());
+ QXcbEglContext *platformContext = new QXcbEglContext(context->format(),
+ context->shareHandle(),
+ eglDisplay(),
+ screen->connection(),
+ context->nativeHandle());
+ context->setNativeHandle(platformContext->nativeHandle());
+ return platformContext;
+}
+
+QPlatformOffscreenSurface *QXcbEglIntegration::createPlatformOffscreenSurface(QOffscreenSurface *surface) const
+{
+ return new QEGLPbuffer(eglDisplay(), surface->requestedFormat(), surface);
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.h b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.h
new file mode 100644
index 0000000000..2a49cd0ca9
--- /dev/null
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglintegration.h
@@ -0,0 +1,85 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QXCBEGLINTEGRATION_H
+#define QXCBEGLINTEGRATION_H
+
+#include "qxcbglintegration.h"
+
+#include "qxcbeglwindow.h"
+
+#include <QtGui/QOpenGLContext>
+#include <QtGui/qpa/qplatformscreen.h>
+#include <QtGui/QScreen>
+
+#include "qxcbscreen.h"
+
+#include "qxcbeglinclude.h"
+
+QT_BEGIN_NAMESPACE
+
+class QXcbEglNativeInterfaceHandler;
+
+class QXcbEglIntegration : public QXcbGlIntegration
+{
+public:
+ QXcbEglIntegration();
+ ~QXcbEglIntegration();
+
+ bool initialize(QXcbConnection *connection) Q_DECL_OVERRIDE;
+
+ QXcbWindow *createWindow(QWindow *window) const Q_DECL_OVERRIDE;
+ QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const Q_DECL_OVERRIDE;
+ QPlatformOffscreenSurface *createPlatformOffscreenSurface(QOffscreenSurface *surface) const Q_DECL_OVERRIDE;
+
+ bool supportsThreadedOpenGL() const Q_DECL_OVERRIDE { return true; }
+
+ EGLDisplay eglDisplay() const { return m_egl_display; }
+ void *xlib_display() const { return m_connection->xlib_display(); }
+private:
+ QXcbConnection *m_connection;
+ EGLDisplay m_egl_display;
+
+ QScopedPointer<QXcbEglNativeInterfaceHandler> m_native_interface_handler;
+};
+
+QT_END_NAMESPACE
+#endif //QXCBEGLINTEGRATION_H
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglmain.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglmain.cpp
new file mode 100644
index 0000000000..9feb8f31ca
--- /dev/null
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglmain.cpp
@@ -0,0 +1,62 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qxcbglintegrationplugin.h"
+
+#include "qxcbeglintegration.h"
+
+QT_BEGIN_NAMESPACE
+
+class QXcbEglIntegrationPlugin : public QXcbGlIntegrationPlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID QXcbGlIntegrationFactoryInterface_iid FILE "xcb_egl.json")
+public:
+ QXcbGlIntegration *create()
+ {
+ return new QXcbEglIntegration();
+ }
+
+};
+
+QT_END_NAMESPACE
+
+#include "qxcbeglmain.moc"
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.cpp
new file mode 100644
index 0000000000..9d06502158
--- /dev/null
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.cpp
@@ -0,0 +1,140 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qxcbeglnativeinterfacehandler.h"
+
+#include <QtGui/private/qguiapplication_p.h>
+#include "qxcbeglwindow.h"
+#include "qxcbintegration.h"
+#include "qxcbeglintegration.h"
+#include "qxcbeglcontext.h"
+
+QT_BEGIN_NAMESPACE
+
+static int resourceType(const QByteArray &key)
+{
+ static const QByteArray names[] = { // match QXcbEglNativeInterfaceHandler::ResourceType
+ QByteArrayLiteral("egldisplay"),
+ QByteArrayLiteral("eglcontext"),
+ QByteArrayLiteral("eglconfig")
+ };
+ for (size_t i = 0; i < sizeof(names) / sizeof(names[0]); i++) {
+ if (key == names[i])
+ return i;
+ }
+
+ if (key == QByteArrayLiteral("get_egl_context"))
+ return QXcbEglNativeInterfaceHandler::EglContext;
+
+ return sizeof(names) / sizeof(names[0]);
+}
+
+QXcbEglNativeInterfaceHandler::QXcbEglNativeInterfaceHandler(QXcbNativeInterface *nativeInterface)
+ : QXcbNativeInterfaceHandler(nativeInterface)
+{
+}
+
+QPlatformNativeInterface::NativeResourceForIntegrationFunction QXcbEglNativeInterfaceHandler::nativeResourceFunctionForIntegration(const QByteArray &resource) const{
+ switch (resourceType(resource)) {
+ case EglDisplay:
+ return eglDisplay;
+ default:
+ break;
+ }
+ return Q_NULLPTR;
+}
+
+QPlatformNativeInterface::NativeResourceForContextFunction QXcbEglNativeInterfaceHandler::nativeResourceFunctionForContext(const QByteArray &resource) const
+{
+ switch (resourceType(resource)) {
+ case EglContext:
+ return eglContextForContext;
+ case EglConfig:
+ return eglConfigForContext;
+ default:
+ break;
+ }
+ return Q_NULLPTR;
+}
+
+QPlatformNativeInterface::NativeResourceForWindowFunction QXcbEglNativeInterfaceHandler::nativeResourceFunctionForWindow(const QByteArray &resource) const
+{
+ switch (resourceType(resource)) {
+ case EglDisplay:
+ return eglDisplayForWindow;
+ default:
+ break;
+ }
+ return Q_NULLPTR;
+}
+
+void *QXcbEglNativeInterfaceHandler::eglDisplay()
+{
+ QXcbIntegration *integration = static_cast<QXcbIntegration *>(QGuiApplicationPrivate::platformIntegration());
+ QXcbEglIntegration *eglIntegration = static_cast<QXcbEglIntegration *>(integration->defaultConnection()->glIntegration());
+ return eglIntegration->eglDisplay();
+}
+
+void *QXcbEglNativeInterfaceHandler::eglDisplayForWindow(QWindow *window)
+{
+ Q_ASSERT(window);
+ if (window->supportsOpenGL() && window->handle() == Q_NULLPTR)
+ return eglDisplay();
+ else if (window->supportsOpenGL())
+ return static_cast<QXcbEglWindow *>(window->handle())->glIntegration()->eglDisplay();
+ return Q_NULLPTR;
+}
+
+void *QXcbEglNativeInterfaceHandler::eglContextForContext(QOpenGLContext *context)
+{
+ Q_ASSERT(context);
+ Q_ASSERT(context->handle());
+ return static_cast<QXcbEglContext *>(context->handle())->eglContext();
+}
+
+void *QXcbEglNativeInterfaceHandler::eglConfigForContext(QOpenGLContext *context)
+{
+ Q_ASSERT(context);
+ Q_ASSERT(context->handle());
+ return static_cast<QXcbEglContext *>(context->handle())->eglConfig();
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.h b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.h
new file mode 100644
index 0000000000..7734bcd048
--- /dev/null
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglnativeinterfacehandler.h
@@ -0,0 +1,72 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QXCBEGLNATIVEINTERFACEHANDLER_H
+#define QXCBEGLNATIVEINTERFACEHANDLER_H
+
+#include "qxcbnativeinterfacehandler.h"
+
+QT_BEGIN_NAMESPACE
+
+class QXcbEglNativeInterfaceHandler : public QXcbNativeInterfaceHandler
+{
+public:
+ enum ResourceType {
+ EglDisplay,
+ EglContext,
+ EglConfig
+ };
+
+ QXcbEglNativeInterfaceHandler(QXcbNativeInterface *nativeInterface);
+
+ QPlatformNativeInterface::NativeResourceForIntegrationFunction nativeResourceFunctionForIntegration(const QByteArray &resource) const Q_DECL_OVERRIDE;
+ QPlatformNativeInterface::NativeResourceForContextFunction nativeResourceFunctionForContext(const QByteArray &resource) const Q_DECL_OVERRIDE;
+ QPlatformNativeInterface::NativeResourceForWindowFunction nativeResourceFunctionForWindow(const QByteArray &resource) const Q_DECL_OVERRIDE;
+private:
+ static void *eglDisplay();
+ static void *eglDisplayForWindow(QWindow *window);
+ static void *eglContextForContext(QOpenGLContext *context);
+ static void *eglConfigForContext(QOpenGLContext *context);
+};
+
+QT_END_NAMESPACE
+
+#endif //QXCBEGLNATIVEINTERFACEHANDLER_H
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.cpp
new file mode 100644
index 0000000000..61dd8d5069
--- /dev/null
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.cpp
@@ -0,0 +1,92 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qxcbeglwindow.h"
+
+#include "qxcbeglintegration.h"
+
+#include <QtPlatformSupport/private/qeglconvenience_p.h>
+#include <QtPlatformSupport/private/qxlibeglintegration_p.h>
+
+QT_BEGIN_NAMESPACE
+
+QXcbEglWindow::QXcbEglWindow(QWindow *window, QXcbEglIntegration *glIntegration)
+ : QXcbWindow(window)
+ , m_glIntegration(glIntegration)
+ , m_config(Q_NULLPTR)
+ , m_surface(EGL_NO_SURFACE)
+{
+}
+
+QXcbEglWindow::~QXcbEglWindow()
+{
+ eglDestroySurface(m_glIntegration->eglDisplay(), m_surface);
+}
+
+void QXcbEglWindow::resolveFormat()
+{
+ m_config = q_configFromGLFormat(m_glIntegration->eglDisplay(), window()->requestedFormat(), true);
+ m_format = q_glFormatFromConfig(m_glIntegration->eglDisplay(), m_config, m_format);
+}
+
+void *QXcbEglWindow::createVisual()
+{
+ Display *xdpy = static_cast<Display *>(m_glIntegration->xlib_display());
+ VisualID id = QXlibEglIntegration::getCompatibleVisualId(xdpy, m_glIntegration->eglDisplay(), m_config);
+
+ XVisualInfo visualInfoTemplate;
+ memset(&visualInfoTemplate, 0, sizeof(XVisualInfo));
+ visualInfoTemplate.visualid = id;
+
+ XVisualInfo *visualInfo;
+ int matchingCount = 0;
+ visualInfo = XGetVisualInfo(xdpy, VisualIDMask, &visualInfoTemplate, &matchingCount);
+ return visualInfo;
+}
+
+void QXcbEglWindow::create()
+{
+ QXcbWindow::create();
+
+ m_surface = eglCreateWindowSurface(m_glIntegration->eglDisplay(), m_config, m_window, 0);
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.h b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.h
new file mode 100644
index 0000000000..7d1a4c8e37
--- /dev/null
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/qxcbeglwindow.h
@@ -0,0 +1,75 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QXCBEGLWINDOW_H
+#define QXCBEGLWINDOW_H
+
+#include "qxcbwindow.h"
+
+#include "qxcbeglinclude.h"
+
+QT_BEGIN_NAMESPACE
+
+class QXcbEglIntegration;
+
+class QXcbEglWindow : public QXcbWindow
+{
+public:
+ QXcbEglWindow(QWindow *window, QXcbEglIntegration *glIntegration);
+ ~QXcbEglWindow();
+
+ EGLSurface eglSurface() const { return m_surface; }
+
+ QXcbEglIntegration *glIntegration() const { return m_glIntegration; }
+
+protected:
+ void create() Q_DECL_OVERRIDE;
+ void resolveFormat() Q_DECL_OVERRIDE;
+ void *createVisual() Q_DECL_OVERRIDE;
+
+private:
+ QXcbEglIntegration *m_glIntegration;
+ EGLConfig m_config;
+ EGLSurface m_surface;
+};
+
+QT_END_NAMESPACE
+#endif //QXCBEGLWINDOW_H
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/xcb_egl.json b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/xcb_egl.json
new file mode 100644
index 0000000000..6d6785691d
--- /dev/null
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/xcb_egl.json
@@ -0,0 +1,3 @@
+{
+ "Keys": [ "xcb_egl" ]
+}
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_egl/xcb_egl.pro b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/xcb_egl.pro
new file mode 100644
index 0000000000..082c22821a
--- /dev/null
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_egl/xcb_egl.pro
@@ -0,0 +1,27 @@
+TARGET = qxcb-egl-integration
+
+PLUGIN_CLASS_NAME = QXcbEglIntegrationPlugin
+PLUGIN_TYPE = xcbglintegrations
+
+load(qt_plugin)
+
+include(../gl_integrations_plugin_base.pri)
+
+CONFIG += egl
+
+DEFINES += SUPPORT_X11
+#should be removed from sources
+DEFINES += XCB_USE_EGL XCB_USE_XLIB
+
+
+HEADERS += \
+ qxcbeglcontext.h \
+ qxcbeglintegration.h \
+ qxcbeglwindow.h \
+ qxcbeglnativeinterfacehandler.h
+
+SOURCES += \
+ qxcbeglintegration.cpp \
+ qxcbeglwindow.cpp \
+ qxcbeglmain.cpp \
+ qxcbeglnativeinterfacehandler.cpp
diff --git a/src/plugins/platforms/xcb/qglxintegration.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp
index c0be836bce..c0be836bce 100644
--- a/src/plugins/platforms/xcb/qglxintegration.cpp
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.cpp
diff --git a/src/plugins/platforms/xcb/qglxintegration.h b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.h
index 5777980093..73a17d69b4 100644
--- a/src/plugins/platforms/xcb/qglxintegration.h
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qglxintegration.h
@@ -54,14 +54,14 @@ public:
const QVariant &nativeHandle);
~QGLXContext();
- bool makeCurrent(QPlatformSurface *surface);
- void doneCurrent();
- void swapBuffers(QPlatformSurface *surface);
- void (*getProcAddress(const QByteArray &procName)) ();
+ bool makeCurrent(QPlatformSurface *surface) Q_DECL_OVERRIDE;
+ void doneCurrent() Q_DECL_OVERRIDE;
+ void swapBuffers(QPlatformSurface *surface) Q_DECL_OVERRIDE;
+ void (*getProcAddress(const QByteArray &procName)) () Q_DECL_OVERRIDE;
- QSurfaceFormat format() const;
- bool isSharing() const;
- bool isValid() const;
+ QSurfaceFormat format() const Q_DECL_OVERRIDE;
+ bool isSharing() const Q_DECL_OVERRIDE;
+ bool isValid() const Q_DECL_OVERRIDE;
GLXContext glxContext() const { return m_context; }
GLXFBConfig glxConfig() const { return m_config; }
@@ -94,8 +94,8 @@ public:
explicit QGLXPbuffer(QOffscreenSurface *offscreenSurface);
~QGLXPbuffer();
- QSurfaceFormat format() const { return m_format; }
- bool isValid() const { return m_pbuffer != 0; }
+ QSurfaceFormat format() const Q_DECL_OVERRIDE { return m_format; }
+ bool isValid() const Q_DECL_OVERRIDE { return m_pbuffer != 0; }
GLXPbuffer pbuffer() const { return m_pbuffer; }
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.cpp
new file mode 100644
index 0000000000..c8ea2053e3
--- /dev/null
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.cpp
@@ -0,0 +1,223 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qxcbglxintegration.h"
+
+#if defined(XCB_HAS_XCB_GLX)
+#include <xcb/glx.h>
+#endif
+
+#include "qxcbnativeinterface.h"
+#include "qxcbglxwindow.h"
+#include "qxcbscreen.h"
+#include "qglxintegration.h"
+
+#include <QtGui/QOpenGLContext>
+
+#include "qxcbglxnativeinterfacehandler.h"
+
+#include <X11/Xlibint.h>
+
+QT_BEGIN_NAMESPACE
+
+#if defined(XCB_HAS_XCB_GLX) && XCB_GLX_MAJOR_VERSION == 1 && XCB_GLX_MINOR_VERSION < 4
+
+#define XCB_GLX_BUFFER_SWAP_COMPLETE 1
+
+typedef struct xcb_glx_buffer_swap_complete_event_t {
+ uint8_t response_type;
+ uint8_t pad0;
+ uint16_t sequence;
+ uint16_t event_type;
+ uint8_t pad1[2];
+ xcb_glx_drawable_t drawable;
+ uint32_t ust_hi;
+ uint32_t ust_lo;
+ uint32_t msc_hi;
+ uint32_t msc_lo;
+ uint32_t sbc;
+} xcb_glx_buffer_swap_complete_event_t;
+#endif
+
+#if defined(XCB_USE_XLIB) && defined(XCB_USE_GLX)
+typedef struct {
+ int type;
+ unsigned long serial; /* # of last request processed by server */
+ Bool send_event; /* true if this came from a SendEvent request */
+ Display *display; /* Display the event was read from */
+ Drawable drawable; /* drawable on which event was requested in event mask */
+ int event_type;
+ int64_t ust;
+ int64_t msc;
+ int64_t sbc;
+} QGLXBufferSwapComplete;
+#endif
+
+QXcbGlxIntegration::QXcbGlxIntegration()
+ : m_connection(Q_NULLPTR)
+ , m_glx_first_event(0)
+{
+ qCDebug(QT_XCB_GLINTEGRATION) << "Xcb GLX gl-integration created";
+}
+
+QXcbGlxIntegration::~QXcbGlxIntegration()
+{
+}
+
+bool QXcbGlxIntegration::initialize(QXcbConnection *connection)
+{
+ m_connection = connection;
+#ifdef XCB_HAS_XCB_GLX
+
+ const xcb_query_extension_reply_t *reply = xcb_get_extension_data(m_connection->xcb_connection(), &xcb_glx_id);
+ if (!reply || !reply->present)
+ return false;
+
+ m_glx_first_event = reply->first_event;
+
+ xcb_generic_error_t *error = 0;
+ xcb_glx_query_version_cookie_t xglx_query_cookie = xcb_glx_query_version(m_connection->xcb_connection(),
+ XCB_GLX_MAJOR_VERSION,
+ XCB_GLX_MINOR_VERSION);
+ xcb_glx_query_version_reply_t *xglx_query = xcb_glx_query_version_reply(m_connection->xcb_connection(),
+ xglx_query_cookie, &error);
+ if (!xglx_query || error) {
+ qCWarning(QT_XCB_GLINTEGRATION) << "QXcbConnection: Failed to initialize GLX";
+ free(error);
+ return false;
+ }
+ free(xglx_query);
+#endif
+
+ m_native_interface_handler.reset(new QXcbGlxNativeInterfaceHandler(connection->nativeInterface()));
+
+ qCDebug(QT_XCB_GLINTEGRATION) << "Xcb GLX gl-integration successfully initialized";
+ return true;
+}
+
+bool QXcbGlxIntegration::handleXcbEvent(xcb_generic_event_t *event, uint responseType)
+{
+ bool handled = false;
+ // Check if a custom XEvent constructor was registered in xlib for this event type, and call it discarding the constructed XEvent if any.
+ // XESetWireToEvent might be used by libraries to intercept messages from the X server e.g. the OpenGL lib waiting for DRI2 events.
+ Display *xdisplay = static_cast<Display *>(m_connection->xlib_display());
+ XLockDisplay(xdisplay);
+ bool locked = true;
+ Bool (*proc)(Display*, XEvent*, xEvent*) = XESetWireToEvent(xdisplay, responseType, 0);
+ if (proc) {
+ XESetWireToEvent(xdisplay, responseType, proc);
+ XEvent dummy;
+ event->sequence = LastKnownRequestProcessed(xdisplay);
+ if (proc(xdisplay, &dummy, (xEvent*)event)) {
+#ifdef XCB_HAS_XCB_GLX
+ // DRI2 clients don't receive GLXBufferSwapComplete events on the wire.
+ // Instead the GLX event is synthesized from the DRI2BufferSwapComplete event
+ // by DRI2WireToEvent(). For an application to be able to see the event
+ // we have to convert it to an xcb_glx_buffer_swap_complete_event_t and
+ // pass it to the native event filter.
+ const uint swap_complete = m_glx_first_event + XCB_GLX_BUFFER_SWAP_COMPLETE;
+ QAbstractEventDispatcher* dispatcher = QAbstractEventDispatcher::instance();
+ if (dispatcher && uint(dummy.type) == swap_complete && responseType != swap_complete) {
+ QGLXBufferSwapComplete *xev = reinterpret_cast<QGLXBufferSwapComplete *>(&dummy);
+ xcb_glx_buffer_swap_complete_event_t ev;
+ memset(&ev, 0, sizeof(xcb_glx_buffer_swap_complete_event_t));
+ ev.response_type = xev->type;
+ ev.sequence = xev->serial;
+ ev.event_type = xev->event_type;
+ ev.drawable = xev->drawable;
+ ev.ust_hi = xev->ust >> 32;
+ ev.ust_lo = xev->ust & 0xffffffff;
+ ev.msc_hi = xev->msc >> 32;
+ ev.msc_lo = xev->msc & 0xffffffff;
+ ev.sbc = xev->sbc & 0xffffffff;
+ // Unlock the display before calling the native event filter
+ XUnlockDisplay(xdisplay);
+ locked = false;
+ QByteArray genericEventFilterType = m_connection->nativeInterface()->genericEventFilterType();
+ long result = 0;
+ handled = dispatcher->filterNativeEvent(genericEventFilterType, &ev, &result);
+ }
+#endif
+ }
+ }
+ if (locked)
+ XUnlockDisplay(xdisplay);
+ return handled;
+}
+
+QXcbWindow *QXcbGlxIntegration::createWindow(QWindow *window) const
+{
+ return new QXcbGlxWindow(window);
+}
+
+QPlatformOpenGLContext *QXcbGlxIntegration::createPlatformOpenGLContext(QOpenGLContext *context) const
+{
+ QXcbScreen *screen = static_cast<QXcbScreen *>(context->screen()->handle());
+ QGLXContext *platformContext = new QGLXContext(screen, context->format(),
+ context->shareHandle(), context->nativeHandle());
+ context->setNativeHandle(platformContext->nativeHandle());
+ return platformContext;
+}
+
+QPlatformOffscreenSurface *QXcbGlxIntegration::createPlatformOffscreenSurface(QOffscreenSurface *surface) const
+{
+ static bool vendorChecked = false;
+ static bool glxPbufferUsable = true;
+ if (!vendorChecked) {
+ vendorChecked = true;
+ const char *glxvendor = glXGetClientString(glXGetCurrentDisplay(), GLX_VENDOR);
+ if (glxvendor && !strcmp(glxvendor, "ATI"))
+ glxPbufferUsable = false;
+ }
+ if (glxPbufferUsable)
+ return new QGLXPbuffer(surface);
+ else
+ return 0; // trigger fallback to hidden QWindow
+
+}
+
+bool QXcbGlxIntegration::supportsThreadedOpenGL() const
+{
+ return QGLXContext::supportsThreading();
+}
+
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.h b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.h
new file mode 100644
index 0000000000..2869fc20a4
--- /dev/null
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxintegration.h
@@ -0,0 +1,75 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QXCBGLXINTEGRATION_H
+#define QXCBGLXINTEGRATION_H
+
+#include "qxcbglintegration.h"
+
+QT_BEGIN_NAMESPACE
+
+class QXcbNativeInterfaceHandler;
+
+class QXcbGlxIntegration : public QXcbGlIntegration
+{
+public:
+ QXcbGlxIntegration();
+ ~QXcbGlxIntegration();
+
+ bool initialize(QXcbConnection *connection) Q_DECL_OVERRIDE;
+ bool handleXcbEvent(xcb_generic_event_t *event, uint responseType) Q_DECL_OVERRIDE;
+
+ QXcbWindow *createWindow(QWindow *window) const Q_DECL_OVERRIDE;
+ QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const Q_DECL_OVERRIDE;
+ QPlatformOffscreenSurface *createPlatformOffscreenSurface(QOffscreenSurface *surface) const Q_DECL_OVERRIDE;
+
+ virtual bool supportsThreadedOpenGL() const Q_DECL_OVERRIDE;
+
+private:
+ QXcbConnection *m_connection;
+ uint32_t m_glx_first_event;
+
+ QScopedPointer<QXcbNativeInterfaceHandler> m_native_interface_handler;
+};
+
+QT_END_NAMESPACE
+
+#endif //QXCBGLXINTEGRATION_H
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxmain.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxmain.cpp
new file mode 100644
index 0000000000..93bb76f92f
--- /dev/null
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxmain.cpp
@@ -0,0 +1,62 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qxcbglintegrationplugin.h"
+
+#include "qxcbglxintegration.h"
+
+QT_BEGIN_NAMESPACE
+
+class QXcbGlxIntegrationPlugin : public QXcbGlIntegrationPlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID QXcbGlIntegrationFactoryInterface_iid FILE "xcb_glx.json")
+public:
+ QXcbGlIntegration *create()
+ {
+ return new QXcbGlxIntegration();
+ }
+
+};
+
+QT_END_NAMESPACE
+
+#include "qxcbglxmain.moc"
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxnativeinterfacehandler.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxnativeinterfacehandler.cpp
new file mode 100644
index 0000000000..6cdd4101e0
--- /dev/null
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxnativeinterfacehandler.cpp
@@ -0,0 +1,95 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qxcbglxnativeinterfacehandler.h"
+
+#include "qglxintegration.h"
+#include <QtGui/QOpenGLContext>
+QT_BEGIN_NAMESPACE
+
+static int resourceType(const QByteArray &key)
+{
+ static const QByteArray names[] = { // match QXcbGlxNativeInterfaceHandler::ResourceType
+ QByteArrayLiteral("glxconfig"),
+ QByteArrayLiteral("glxcontext"),
+ };
+ for (size_t i = 0; i < sizeof(names) / sizeof(names[0]); i++) {
+ if (key == names[i])
+ return i;
+ }
+
+ return sizeof(names) / sizeof(names[0]);
+}
+
+QXcbGlxNativeInterfaceHandler::QXcbGlxNativeInterfaceHandler(QXcbNativeInterface *nativeInterface)
+ : QXcbNativeInterfaceHandler(nativeInterface)
+{
+}
+
+QPlatformNativeInterface::NativeResourceForContextFunction QXcbGlxNativeInterfaceHandler::nativeResourceFunctionForContext(const QByteArray &resource) const
+{
+ switch (resourceType(resource)) {
+ case GLXConfig:
+ return glxConfigForContext;
+ case GLXContext:
+ return glxContextForContext;
+ default:
+ break;
+ }
+ return Q_NULLPTR;
+}
+
+void *QXcbGlxNativeInterfaceHandler::glxContextForContext(QOpenGLContext *context)
+{
+ Q_ASSERT(context);
+ QGLXContext *glxPlatformContext = static_cast<QGLXContext *>(context->handle());
+ return glxPlatformContext->glxContext();
+}
+
+void *QXcbGlxNativeInterfaceHandler::glxConfigForContext(QOpenGLContext *context)
+{
+ Q_ASSERT(context);
+ QGLXContext *glxPlatformContext = static_cast<QGLXContext *>(context->handle());
+ return glxPlatformContext->glxConfig();
+
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxnativeinterfacehandler.h b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxnativeinterfacehandler.h
new file mode 100644
index 0000000000..e9df28ea39
--- /dev/null
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxnativeinterfacehandler.h
@@ -0,0 +1,67 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QXCBGLXNATIVEINTERFACEHANDLER_H
+#define QXCBGLXNATIVEINTERFACEHANDLER_H
+
+#include "qxcbnativeinterfacehandler.h"
+
+QT_BEGIN_NAMESPACE
+
+class QXcbGlxNativeInterfaceHandler : public QXcbNativeInterfaceHandler
+{
+public:
+ enum ResourceType {
+ GLXConfig,
+ GLXContext,
+ };
+
+ QXcbGlxNativeInterfaceHandler(QXcbNativeInterface *nativeInterface);
+ QPlatformNativeInterface::NativeResourceForContextFunction nativeResourceFunctionForContext(const QByteArray &resource) const Q_DECL_OVERRIDE;
+
+private:
+ static void *glxContextForContext(QOpenGLContext *context);
+ static void *glxConfigForContext(QOpenGLContext *context);
+};
+
+QT_END_NAMESPACE
+
+#endif //QXCBGLXNATIVEINTERFACEHANDLER_H
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp
new file mode 100644
index 0000000000..8aabde8129
--- /dev/null
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.cpp
@@ -0,0 +1,68 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qxcbglxwindow.h"
+
+#include "qxcbscreen.h"
+#include <QtPlatformSupport/private/qglxconvenience_p.h>
+
+QT_BEGIN_NAMESPACE
+
+QXcbGlxWindow::QXcbGlxWindow(QWindow *window)
+ : QXcbWindow(window)
+{
+}
+
+QXcbGlxWindow::~QXcbGlxWindow()
+{
+}
+
+void QXcbGlxWindow::resolveFormat()
+{
+ m_format = window()->requestedFormat(); //qglx_findVisualInfo sets the resovled format
+}
+
+void *QXcbGlxWindow::createVisual()
+{
+ return qglx_findVisualInfo(DISPLAY_FROM_XCB(m_screen), m_screen->screenNumber(), &m_format);
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.h b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.h
new file mode 100644
index 0000000000..bb7cd7bef2
--- /dev/null
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/qxcbglxwindow.h
@@ -0,0 +1,63 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QXCBGLXWINDOW_H
+#define QXCBGLXWINDOW_H
+
+#include "qxcbglxintegration.h"
+#include "qxcbwindow.h"
+
+QT_BEGIN_NAMESPACE
+
+class QXcbGlxWindow : public QXcbWindow
+{
+public:
+ QXcbGlxWindow(QWindow *window);
+ ~QXcbGlxWindow();
+
+protected:
+ void resolveFormat() Q_DECL_OVERRIDE;
+ void *createVisual() Q_DECL_OVERRIDE;
+};
+
+QT_END_NAMESPACE
+
+#endif //QXCBGLXWINDOW_H
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/xcb_glx.json b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/xcb_glx.json
new file mode 100644
index 0000000000..1e2641ae7c
--- /dev/null
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/xcb_glx.json
@@ -0,0 +1,3 @@
+{
+ "Keys": [ "xcb_glx" ]
+}
diff --git a/src/plugins/platforms/xcb/gl_integrations/xcb_glx/xcb_glx.pro b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/xcb_glx.pro
new file mode 100644
index 0000000000..57cd81ec3b
--- /dev/null
+++ b/src/plugins/platforms/xcb/gl_integrations/xcb_glx/xcb_glx.pro
@@ -0,0 +1,31 @@
+TARGET = qxcb-glx-integration
+
+PLUGIN_CLASS_NAME = QXcbGlxIntegrationPlugin
+PLUGIN_TYPE = xcbglintegrations
+
+load(qt_plugin)
+
+include(../gl_integrations_plugin_base.pri)
+
+#should be removed from the sources
+DEFINES += XCB_USE_GLX XCB_USE_XLIB
+
+LIBS += -lxcb
+
+contains(QT_CONFIG, xcb-glx) {
+ DEFINES += XCB_HAS_XCB_GLX
+ LIBS += -lxcb-glx
+}
+
+HEADERS += \
+ qxcbglxintegration.h \
+ qxcbglxwindow.h \
+ qglxintegration.h \
+ qxcbglxnativeinterfacehandler.h
+
+SOURCES += \
+ qxcbglxmain.cpp \
+ qxcbglxintegration.cpp \
+ qxcbglxwindow.cpp \
+ qglxintegration.cpp \
+ qxcbglxnativeinterfacehandler.cpp
diff --git a/src/plugins/platforms/xcb/qxcbbackingstore.cpp b/src/plugins/platforms/xcb/qxcbbackingstore.cpp
index f4382c7b50..bbde948090 100644
--- a/src/plugins/platforms/xcb/qxcbbackingstore.cpp
+++ b/src/plugins/platforms/xcb/qxcbbackingstore.cpp
@@ -49,6 +49,7 @@
#include <qdebug.h>
#include <qpainter.h>
#include <qscreen.h>
+#include <qpa/qplatformgraphicsbuffer.h>
#include <algorithm>
QT_BEGIN_NAMESPACE
@@ -60,6 +61,8 @@ public:
~QXcbShmImage() { destroy(); }
QImage *image() { return &m_qimage; }
+ QPlatformGraphicsBuffer *graphicsBuffer() { return m_graphics_buffer; }
+
QSize size() const { return m_qimage.size(); }
void put(xcb_window_t window, const QPoint &dst, const QRect &source);
@@ -73,6 +76,7 @@ private:
xcb_image_t *m_xcb_image;
QImage m_qimage;
+ QPlatformGraphicsBuffer *m_graphics_buffer;
xcb_gcontext_t m_gc;
xcb_window_t m_gc_window;
@@ -80,8 +84,39 @@ private:
QRegion m_dirty;
};
+class QXcbShmGraphicsBuffer : public QPlatformGraphicsBuffer
+{
+public:
+ QXcbShmGraphicsBuffer(QImage *image)
+ : QPlatformGraphicsBuffer(image->size(), QImage::toPixelFormat(image->format()))
+ , m_access_lock(QPlatformGraphicsBuffer::None)
+ , m_image(image)
+ { }
+
+ bool doLock(AccessTypes access, const QRect &rect) Q_DECL_OVERRIDE
+ {
+ Q_UNUSED(rect);
+ if (access & ~(QPlatformGraphicsBuffer::SWReadAccess | QPlatformGraphicsBuffer::SWWriteAccess))
+ return false;
+
+ m_access_lock |= access;
+ return true;
+ }
+ void doUnlock() Q_DECL_OVERRIDE { m_access_lock = None; }
+
+ const uchar *data() const Q_DECL_OVERRIDE { return m_image->bits(); }
+ uchar *data() Q_DECL_OVERRIDE { return m_image->bits(); }
+ int bytesPerLine() const Q_DECL_OVERRIDE { return m_image->bytesPerLine(); }
+
+ Origin origin() const Q_DECL_OVERRIDE { return QPlatformGraphicsBuffer::OriginTopLeft; }
+private:
+ AccessTypes m_access_lock;
+ QImage *m_image;
+};
+
QXcbShmImage::QXcbShmImage(QXcbScreen *screen, const QSize &size, uint depth, QImage::Format format)
: QXcbObject(screen->connection())
+ , m_graphics_buffer(Q_NULLPTR)
, m_gc(0)
, m_gc_window(0)
{
@@ -137,6 +172,7 @@ QXcbShmImage::QXcbShmImage(QXcbScreen *screen, const QSize &size, uint depth, QI
}
m_qimage = QImage( (uchar*) m_xcb_image->data, m_xcb_image->width, m_xcb_image->height, m_xcb_image->stride, format);
+ m_graphics_buffer = new QXcbShmGraphicsBuffer(&m_qimage);
}
void QXcbShmImage::destroy()
@@ -158,6 +194,8 @@ void QXcbShmImage::destroy()
if (m_gc)
Q_XCB_CALL(xcb_free_gc(xcb_connection(), m_gc));
+ delete m_graphics_buffer;
+ m_graphics_buffer = Q_NULLPTR;
}
void QXcbShmImage::put(xcb_window_t window, const QPoint &target, const QRect &source)
@@ -287,10 +325,17 @@ void QXcbBackingStore::beginPaint(const QRegion &region)
}
}
+#ifndef QT_NO_OPENGL
QImage QXcbBackingStore::toImage() const
{
return m_image && m_image->image() ? *m_image->image() : QImage();
}
+#endif
+
+QPlatformGraphicsBuffer *QXcbBackingStore::graphicsBuffer() const
+{
+ return m_image ? m_image->graphicsBuffer() : Q_NULLPTR;
+}
void QXcbBackingStore::flush(QWindow *window, const QRegion &region, const QPoint &offset)
{
diff --git a/src/plugins/platforms/xcb/qxcbbackingstore.h b/src/plugins/platforms/xcb/qxcbbackingstore.h
index 38fb5a7ae4..aa2c953983 100644
--- a/src/plugins/platforms/xcb/qxcbbackingstore.h
+++ b/src/plugins/platforms/xcb/qxcbbackingstore.h
@@ -50,18 +50,21 @@ public:
QXcbBackingStore(QWindow *widget);
~QXcbBackingStore();
- QPaintDevice *paintDevice();
- void flush(QWindow *window, const QRegion &region, const QPoint &offset);
+ QPaintDevice *paintDevice() Q_DECL_OVERRIDE;
+ void flush(QWindow *window, const QRegion &region, const QPoint &offset) Q_DECL_OVERRIDE;
#ifndef QT_NO_OPENGL
void composeAndFlush(QWindow *window, const QRegion &region, const QPoint &offset,
QPlatformTextureList *textures, QOpenGLContext *context,
- bool translucentBackground);
+ bool translucentBackground) Q_DECL_OVERRIDE;
+ QImage toImage() const Q_DECL_OVERRIDE;
#endif
- QImage toImage() const;
- void resize(const QSize &size, const QRegion &staticContents);
- bool scroll(const QRegion &area, int dx, int dy);
- void beginPaint(const QRegion &);
+ QPlatformGraphicsBuffer *graphicsBuffer() const Q_DECL_OVERRIDE;
+
+ void resize(const QSize &size, const QRegion &staticContents) Q_DECL_OVERRIDE;
+ bool scroll(const QRegion &area, int dx, int dy) Q_DECL_OVERRIDE;
+
+ void beginPaint(const QRegion &) Q_DECL_OVERRIDE;
private:
QXcbShmImage *m_image;
diff --git a/src/plugins/platforms/xcb/qxcbclipboard.cpp b/src/plugins/platforms/xcb/qxcbclipboard.cpp
index f56a29d985..61e9860802 100644
--- a/src/plugins/platforms/xcb/qxcbclipboard.cpp
+++ b/src/plugins/platforms/xcb/qxcbclipboard.cpp
@@ -84,7 +84,7 @@ public:
}
protected:
- QStringList formats_sys() const
+ QStringList formats_sys() const Q_DECL_OVERRIDE
{
if (isEmpty())
return QStringList();
@@ -114,13 +114,13 @@ protected:
return formatList;
}
- bool hasFormat_sys(const QString &format) const
+ bool hasFormat_sys(const QString &format) const Q_DECL_OVERRIDE
{
QStringList list = formats();
return list.contains(format);
}
- QVariant retrieveData_sys(const QString &fmt, QVariant::Type requestedType) const
+ QVariant retrieveData_sys(const QString &fmt, QVariant::Type requestedType) const Q_DECL_OVERRIDE
{
if (fmt.isEmpty() || isEmpty())
return QByteArray();
@@ -232,7 +232,7 @@ public:
}
protected:
- void timerEvent(QTimerEvent *ev)
+ void timerEvent(QTimerEvent *ev) Q_DECL_OVERRIDE
{
if (ev->timerId() == abort_timer) {
// this can happen when the X client we are sending data
diff --git a/src/plugins/platforms/xcb/qxcbclipboard.h b/src/plugins/platforms/xcb/qxcbclipboard.h
index e76d502691..5993eea326 100644
--- a/src/plugins/platforms/xcb/qxcbclipboard.h
+++ b/src/plugins/platforms/xcb/qxcbclipboard.h
@@ -53,11 +53,11 @@ public:
QXcbClipboard(QXcbConnection *connection);
~QXcbClipboard();
- QMimeData *mimeData(QClipboard::Mode mode);
- void setMimeData(QMimeData *data, QClipboard::Mode mode);
+ QMimeData *mimeData(QClipboard::Mode mode) Q_DECL_OVERRIDE;
+ void setMimeData(QMimeData *data, QClipboard::Mode mode) Q_DECL_OVERRIDE;
- bool supportsMode(QClipboard::Mode mode) const;
- bool ownsMode(QClipboard::Mode mode) const;
+ bool supportsMode(QClipboard::Mode mode) const Q_DECL_OVERRIDE;
+ bool ownsMode(QClipboard::Mode mode) const Q_DECL_OVERRIDE;
QXcbScreen *screen() const { return m_screen; }
diff --git a/src/plugins/platforms/xcb/qxcbconnection.cpp b/src/plugins/platforms/xcb/qxcbconnection.cpp
index 5510c3b1b4..56b4a9abda 100644
--- a/src/plugins/platforms/xcb/qxcbconnection.cpp
+++ b/src/plugins/platforms/xcb/qxcbconnection.cpp
@@ -44,6 +44,8 @@
#include "qxcbnativeinterface.h"
#include "qxcbintegration.h"
#include "qxcbsystemtraytracker.h"
+#include "qxcbglintegrationfactory.h"
+#include "qxcbglintegration.h"
#include <QSocketNotifier>
#include <QAbstractEventDispatcher>
@@ -74,14 +76,6 @@
#include <xcb/render.h>
#endif
-#if defined(XCB_HAS_XCB_GLX)
-#include <xcb/glx.h>
-#endif
-
-#ifdef XCB_USE_EGL //don't pull in eglext prototypes
-#include <EGL/egl.h>
-#endif
-
QT_BEGIN_NAMESPACE
Q_LOGGING_CATEGORY(lcQpaXInput, "qt.qpa.input")
@@ -121,39 +115,6 @@ static int ioErrorHandler(Display *dpy)
}
#endif
-#if defined(XCB_HAS_XCB_GLX) && XCB_GLX_MAJOR_VERSION == 1 && XCB_GLX_MINOR_VERSION < 4
-
-#define XCB_GLX_BUFFER_SWAP_COMPLETE 1
-
-typedef struct xcb_glx_buffer_swap_complete_event_t {
- uint8_t response_type;
- uint8_t pad0;
- uint16_t sequence;
- uint16_t event_type;
- uint8_t pad1[2];
- xcb_glx_drawable_t drawable;
- uint32_t ust_hi;
- uint32_t ust_lo;
- uint32_t msc_hi;
- uint32_t msc_lo;
- uint32_t sbc;
-} xcb_glx_buffer_swap_complete_event_t;
-#endif
-
-#if defined(XCB_USE_XLIB) && defined(XCB_USE_GLX)
-typedef struct {
- int type;
- unsigned long serial; /* # of last request processed by server */
- Bool send_event; /* true if this came from a SendEvent request */
- Display *display; /* Display the event was read from */
- Drawable drawable; /* drawable on which event was requested in event mask */
- int event_type;
- int64_t ust;
- int64_t msc;
- int64_t sbc;
-} QGLXBufferSwapComplete;
-#endif
-
QXcbScreen* QXcbConnection::findOrCreateScreen(QList<QXcbScreen *>& newScreens,
int screenNumber, xcb_screen_t* xcbScreen, xcb_randr_get_output_info_reply_t *output)
{
@@ -166,7 +127,7 @@ QXcbScreen* QXcbConnection::findOrCreateScreen(QList<QXcbScreen *>& newScreens,
int dotPos = displayName.lastIndexOf('.');
if (dotPos != -1)
displayName.truncate(dotPos);
- name = displayName + QLatin1Char('.') + QString::number(screenNumber);
+ name = QString::fromLocal8Bit(displayName) + QLatin1Char('.') + QString::number(screenNumber);
}
foreach (QXcbScreen* scr, m_screens)
if (scr->name() == name && scr->root() == xcbScreen->root)
@@ -279,11 +240,12 @@ void QXcbConnection::updateScreens()
++xcbScreenNumber;
} // for each xcb screen
+ QXcbIntegration *integration = static_cast<QXcbIntegration *>(QGuiApplicationPrivate::platformIntegration());
// Now activeScreens is the complete set of screens which are active at this time.
// Delete any existing screens which are not in activeScreens
for (int i = m_screens.count() - 1; i >= 0; --i) {
if (!activeScreens.contains(m_screens[i])) {
- delete m_screens[i];
+ integration->destroyScreen(m_screens.at(i));
m_screens.removeAt(i);
}
}
@@ -300,7 +262,7 @@ void QXcbConnection::updateScreens()
// Now that they are in the right order, emit the added signals for new screens only
foreach (QXcbScreen* screen, m_screens)
if (newScreens.contains(screen))
- ((QXcbIntegration*)QGuiApplicationPrivate::platformIntegration())->screenAdded(screen);
+ integration->screenAdded(screen);
}
QXcbConnection::QXcbConnection(QXcbNativeInterface *nativeInterface, bool canGrabServer, const char *displayName)
@@ -309,11 +271,12 @@ QXcbConnection::QXcbConnection(QXcbNativeInterface *nativeInterface, bool canGra
, m_primaryScreenNumber(0)
, m_displayName(displayName ? QByteArray(displayName) : qgetenv("DISPLAY"))
, m_nativeInterface(nativeInterface)
+#ifdef XCB_USE_XLIB
+ , m_xlib_display(0)
+#endif
, xfixes_first_event(0)
, xrandr_first_event(0)
, xkb_first_event(0)
- , glx_first_event(0)
- , has_glx_extension(false)
, has_shape_extension(false)
, has_randr_extension(false)
, has_input_shape(false)
@@ -322,14 +285,10 @@ QXcbConnection::QXcbConnection(QXcbNativeInterface *nativeInterface, bool canGra
, m_buttons(0)
, m_focusWindow(0)
, m_systemTrayTracker(0)
+ , m_glIntegration(Q_NULLPTR)
{
-#ifdef XCB_USE_EGL
- EGLNativeDisplayType dpy = EGL_DEFAULT_DISPLAY;
-#elif defined(XCB_USE_XLIB)
- Display *dpy;
-#endif
#ifdef XCB_USE_XLIB
- dpy = XOpenDisplay(m_displayName.constData());
+ Display *dpy = XOpenDisplay(m_displayName.constData());
if (dpy) {
m_primaryScreenNumber = DefaultScreen(dpy);
m_connection = XGetXCBConnection(dpy);
@@ -345,12 +304,6 @@ QXcbConnection::QXcbConnection(QXcbNativeInterface *nativeInterface, bool canGra
if (!m_connection || xcb_connection_has_error(m_connection))
qFatal("QXcbConnection: Could not connect to display %s", m_displayName.constData());
-#ifdef XCB_USE_EGL
- EGLDisplay eglDisplay = eglGetDisplay(dpy);
- m_egl_display = eglDisplay;
- EGLint major, minor;
- m_has_egl = eglInitialize(eglDisplay, &major, &minor);
-#endif //XCB_USE_EGL
m_reader = new QXcbEventReader(this);
m_reader->start();
@@ -363,9 +316,6 @@ QXcbConnection::QXcbConnection(QXcbNativeInterface *nativeInterface, bool canGra
#ifdef XCB_USE_RENDER
&xcb_render_id,
#endif
-#ifdef XCB_HAS_XCB_GLX
- &xcb_glx_id,
-#endif
0
};
@@ -382,7 +332,6 @@ QXcbConnection::QXcbConnection(QXcbNativeInterface *nativeInterface, bool canGra
initializeXRandr();
updateScreens();
- initializeGLX();
initializeXFixes();
initializeXRender();
m_xi2Enabled = false;
@@ -405,6 +354,27 @@ QXcbConnection::QXcbConnection(QXcbNativeInterface *nativeInterface, bool canGra
if (!m_startupId.isNull())
qunsetenv("DESKTOP_STARTUP_ID");
+
+ QStringList glIntegrationNames;
+ glIntegrationNames << QStringLiteral("xcb_glx") << QStringLiteral("xcb_egl");
+ QString glIntegrationName = QString::fromLocal8Bit(qgetenv("QT_XCB_GL_INTEGRATION"));
+ if (glIntegrationName.size()) {
+ glIntegrationNames.removeAll(glIntegrationName);
+ glIntegrationNames.prepend(glIntegrationName);
+ }
+
+ qCDebug(QT_XCB_GLINTEGRATION) << "Choosing xcb gl-integration based on following priority\n" << glIntegrationNames;
+ for (int i = 0; i < glIntegrationNames.size() && !m_glIntegration; i++) {
+ m_glIntegration = QXcbGlIntegrationFactory::create(glIntegrationNames.at(i));
+ if (m_glIntegration && !m_glIntegration->initialize(this)) {
+ qCDebug(QT_XCB_GLINTEGRATION) << "Failed to initialize xcb gl-integration" << glIntegrationNames.at(i);
+ delete m_glIntegration;
+ m_glIntegration = Q_NULLPTR;
+ }
+ }
+ if (!m_glIntegration)
+ qCDebug(QT_XCB_GLINTEGRATION) << "Failed to create xcb gl-integration";
+
sync();
if (qEnvironmentVariableIsEmpty("QT_IM_MODULE"))
@@ -431,14 +401,10 @@ QXcbConnection::~QXcbConnection()
delete m_reader;
+ QXcbIntegration *integration = static_cast<QXcbIntegration *>(QGuiApplicationPrivate::platformIntegration());
// Delete screens in reverse order to avoid crash in case of multiple screens
while (!m_screens.isEmpty())
- delete m_screens.takeLast();
-
-#ifdef XCB_USE_EGL
- if (m_has_egl)
- eglTerminate(m_egl_display);
-#endif //XCB_USE_EGL
+ integration->destroyScreen(m_screens.takeLast());
#ifdef XCB_USE_XLIB
XCloseDisplay((Display *)m_xlib_display);
@@ -990,51 +956,8 @@ void QXcbConnection::handleXcbEvent(xcb_generic_event_t *event)
}
}
-#ifdef XCB_USE_XLIB
- if (!handled) {
- // Check if a custom XEvent constructor was registered in xlib for this event type, and call it discarding the constructed XEvent if any.
- // XESetWireToEvent might be used by libraries to intercept messages from the X server e.g. the OpenGL lib waiting for DRI2 events.
- Display *xdisplay = (Display *)m_xlib_display;
- XLockDisplay(xdisplay);
- bool locked = true;
- Bool (*proc)(Display*, XEvent*, xEvent*) = XESetWireToEvent(xdisplay, response_type, 0);
- if (proc) {
- XESetWireToEvent(xdisplay, response_type, proc);
- XEvent dummy;
- event->sequence = LastKnownRequestProcessed(m_xlib_display);
- if (proc(xdisplay, &dummy, (xEvent*)event)) {
-#if defined(XCB_USE_GLX) && defined(XCB_HAS_XCB_GLX)
- // DRI2 clients don't receive GLXBufferSwapComplete events on the wire.
- // Instead the GLX event is synthesized from the DRI2BufferSwapComplete event
- // by DRI2WireToEvent(). For an application to be able to see the event
- // we have to convert it to an xcb_glx_buffer_swap_complete_event_t and
- // pass it to the native event filter.
- const uint swap_complete = glx_first_event + XCB_GLX_BUFFER_SWAP_COMPLETE;
- if (dispatcher && has_glx_extension && uint(dummy.type) == swap_complete && response_type != swap_complete) {
- QGLXBufferSwapComplete *xev = reinterpret_cast<QGLXBufferSwapComplete *>(&dummy);
- xcb_glx_buffer_swap_complete_event_t ev;
- memset(&ev, 0, sizeof(xcb_glx_buffer_swap_complete_event_t));
- ev.response_type = xev->type;
- ev.sequence = xev->serial;
- ev.event_type = xev->event_type;
- ev.drawable = xev->drawable;
- ev.ust_hi = xev->ust >> 32;
- ev.ust_lo = xev->ust & 0xffffffff;
- ev.msc_hi = xev->msc >> 32;
- ev.msc_lo = xev->msc & 0xffffffff;
- ev.sbc = xev->sbc & 0xffffffff;
- // Unlock the display before calling the native event filter
- XUnlockDisplay(xdisplay);
- locked = false;
- handled = dispatcher->filterNativeEvent(m_nativeInterface->genericEventFilterType(), &ev, &result);
- }
-#endif
- }
- }
- if (locked)
- XUnlockDisplay(xdisplay);
- }
-#endif
+ if (!handled)
+ handled = m_glIntegration->handleXcbEvent(event, response_type);
if (handled)
printXcbEvent("Handled XCB event", event);
@@ -1232,6 +1155,13 @@ xcb_window_t QXcbConnection::rootWindow()
return primaryScreen()->root();
}
+#ifdef XCB_USE_XLIB
+void *QXcbConnection::xlib_display() const
+{
+ return m_xlib_display;
+}
+#endif
+
void QXcbConnection::processXcbEvents()
{
int connection_error = xcb_connection_has_error(xcb_connection());
@@ -1674,34 +1604,6 @@ void QXcbConnection::initializeXRender()
#endif
}
-void QXcbConnection::initializeGLX()
-{
-#ifdef XCB_HAS_XCB_GLX
- const xcb_query_extension_reply_t *reply = xcb_get_extension_data(m_connection, &xcb_glx_id);
- if (!reply || !reply->present)
- return;
-
- has_glx_extension = true;
- glx_first_event = reply->first_event;
-
- xcb_generic_error_t *error = 0;
- xcb_glx_query_version_cookie_t xglx_query_cookie = xcb_glx_query_version(m_connection,
- XCB_GLX_MAJOR_VERSION,
- XCB_GLX_MINOR_VERSION);
- xcb_glx_query_version_reply_t *xglx_query = xcb_glx_query_version_reply(m_connection,
- xglx_query_cookie, &error);
- if (!xglx_query || error) {
- qWarning("QXcbConnection: Failed to initialize GLX");
- free(error);
- has_glx_extension = false;
- }
- free(xglx_query);
-#else
- // no way to check, assume GLX is present
- has_glx_extension = true;
-#endif
-}
-
void QXcbConnection::initializeXRandr()
{
const xcb_query_extension_reply_t *reply = xcb_get_extension_data(m_connection, &xcb_randr_id);
@@ -1811,13 +1713,6 @@ void QXcbConnection::initializeXKB()
#endif
}
-#if defined(XCB_USE_EGL)
-bool QXcbConnection::hasEgl() const
-{
- return m_has_egl;
-}
-#endif // defined(XCB_USE_EGL)
-
#if defined(XCB_USE_XINPUT2)
static int xi2ValuatorOffset(unsigned char *maskPtr, int maskLen, int number)
{
diff --git a/src/plugins/platforms/xcb/qxcbconnection.h b/src/plugins/platforms/xcb/qxcbconnection.h
index 7286b6b89b..18fc8113e1 100644
--- a/src/plugins/platforms/xcb/qxcbconnection.h
+++ b/src/plugins/platforms/xcb/qxcbconnection.h
@@ -36,6 +36,7 @@
#include <xcb/xcb.h>
+#include "qxcbexport.h"
#include <QHash>
#include <QList>
#include <QMutex>
@@ -85,6 +86,7 @@ class QXcbClipboard;
class QXcbWMSupport;
class QXcbNativeInterface;
class QXcbSystemTrayTracker;
+class QXcbGlIntegration;
namespace QXcbAtom {
enum Atom {
@@ -295,7 +297,7 @@ class QXcbEventReader : public QThread
public:
QXcbEventReader(QXcbConnection *connection);
- void run();
+ void run() Q_DECL_OVERRIDE;
QXcbEventArray *lock();
void unlock();
@@ -360,7 +362,7 @@ private:
};
class QAbstractEventDispatcher;
-class QXcbConnection : public QObject
+class Q_XCB_EXPORT QXcbConnection : public QObject
{
Q_OBJECT
public:
@@ -395,15 +397,9 @@ public:
QXcbWMSupport *wmSupport() const { return m_wmSupport.data(); }
xcb_window_t rootWindow();
#ifdef XCB_USE_XLIB
- void *xlib_display() const { return m_xlib_display; }
+ void *xlib_display() const;
#endif
-#ifdef XCB_USE_EGL
- bool hasEgl() const;
-#endif
-#if defined(XCB_USE_EGL)
- void *egl_display() const { return m_egl_display; }
-#endif
#if defined(XCB_USE_XINPUT2)
void xi2Select(xcb_window_t window);
#endif
@@ -437,7 +433,6 @@ public:
inline xcb_timestamp_t netWmUserTime() const { return m_netWmUserTime; }
inline void setNetWmUserTime(xcb_timestamp_t t) { if (t > m_netWmUserTime) m_netWmUserTime = t; }
- bool hasGLX() const { return has_glx_extension; }
bool hasXFixes() const { return xfixes_first_event > 0; }
bool hasXShape() const { return has_shape_extension; }
bool hasXRandr() const { return has_randr_extension; }
@@ -446,6 +441,7 @@ public:
bool hasXKB() const { return has_xkb; }
bool supportsThreadedRendering() const { return m_reader->isRunning(); }
+ bool threadedEventHandling() const { return m_reader->isRunning(); }
xcb_timestamp_t getTimestamp();
@@ -472,6 +468,8 @@ public:
QXcbEventReader *eventReader() const { return m_reader; }
bool canGrab() const { return m_canGrabServer; }
+
+ QXcbGlIntegration *glIntegration() const { return m_glIntegration; }
protected:
bool event(QEvent *e) Q_DECL_OVERRIDE;
@@ -484,7 +482,6 @@ private slots:
private:
void initializeAllAtoms();
void sendConnectionEvent(QXcbAtom::Atom atom, uint id = 0);
- void initializeGLX();
void initializeXFixes();
void initializeXRender();
void initializeXRandr();
@@ -580,10 +577,6 @@ private:
QHash<int, QWindowSystemInterface::TouchPoint> m_touchPoints;
QHash<int, XInput2TouchDeviceData*> m_touchDevices;
#endif
-#if defined(XCB_USE_EGL)
- void *m_egl_display;
- bool m_has_egl;
-#endif
#ifdef Q_XCB_DEBUG
struct CallInfo {
int sequence;
@@ -604,9 +597,7 @@ private:
uint32_t xfixes_first_event;
uint32_t xrandr_first_event;
uint32_t xkb_first_event;
- uint32_t glx_first_event;
- bool has_glx_extension;
bool has_shape_extension;
bool has_randr_extension;
bool has_input_shape;
@@ -619,6 +610,7 @@ private:
QByteArray m_startupId;
QXcbSystemTrayTracker *m_systemTrayTracker;
+ QXcbGlIntegration *m_glIntegration;
friend class QXcbEventReader;
};
@@ -668,11 +660,6 @@ cookie_t q_xcb_call_template(const cookie_t &cookie, QXcbConnection *connection,
#define Q_XCB_NOOP(c)
#endif
-
-#if defined(XCB_USE_EGL)
-#define EGL_DISPLAY_FROM_XCB(object) ((EGLDisplay)(object->connection()->egl_display()))
-#endif
-
QT_END_NAMESPACE
#endif
diff --git a/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp b/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp
index 90d323ed34..07303f4e22 100644
--- a/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp
+++ b/src/plugins/platforms/xcb/qxcbconnection_xi2.cpp
@@ -420,7 +420,7 @@ XInput2TouchDeviceData *QXcbConnection::touchDeviceForId(int id)
}
if (type >= QTouchDevice::TouchScreen && type <= QTouchDevice::TouchPad) {
dev->qtTouchDevice = new QTouchDevice;
- dev->qtTouchDevice->setName(dev->xiDeviceInfo->name);
+ dev->qtTouchDevice->setName(QString::fromUtf8(dev->xiDeviceInfo->name));
dev->qtTouchDevice->setType((QTouchDevice::DeviceType)type);
dev->qtTouchDevice->setCapabilities(caps);
dev->qtTouchDevice->setMaximumTouchPoints(maxTouchPoints);
diff --git a/src/plugins/platforms/xcb/qxcbcursor.h b/src/plugins/platforms/xcb/qxcbcursor.h
index 8ed23154ed..8f03f01747 100644
--- a/src/plugins/platforms/xcb/qxcbcursor.h
+++ b/src/plugins/platforms/xcb/qxcbcursor.h
@@ -70,10 +70,10 @@ public:
QXcbCursor(QXcbConnection *conn, QXcbScreen *screen);
~QXcbCursor();
#ifndef QT_NO_CURSOR
- void changeCursor(QCursor *cursor, QWindow *widget);
+ void changeCursor(QCursor *cursor, QWindow *widget) Q_DECL_OVERRIDE;
#endif
- QPoint pos() const;
- void setPos(const QPoint &pos);
+ QPoint pos() const Q_DECL_OVERRIDE;
+ void setPos(const QPoint &pos) Q_DECL_OVERRIDE;
static void queryPointer(QXcbConnection *c, xcb_window_t *rootWin, QPoint *pos, int *keybMask = 0);
diff --git a/src/plugins/platforms/xcb/qxcbdrag.cpp b/src/plugins/platforms/xcb/qxcbdrag.cpp
index 7037e102e2..5de5b6bb55 100644
--- a/src/plugins/platforms/xcb/qxcbdrag.cpp
+++ b/src/plugins/platforms/xcb/qxcbdrag.cpp
@@ -117,9 +117,9 @@ public:
~QXcbDropData();
protected:
- bool hasFormat_sys(const QString &mimeType) const;
- QStringList formats_sys() const;
- QVariant retrieveData_sys(const QString &mimeType, QVariant::Type type) const;
+ bool hasFormat_sys(const QString &mimeType) const Q_DECL_OVERRIDE;
+ QStringList formats_sys() const Q_DECL_OVERRIDE;
+ QVariant retrieveData_sys(const QString &mimeType, QVariant::Type type) const Q_DECL_OVERRIDE;
QVariant xdndObtainData(const QByteArray &format, QVariant::Type requestedType) const;
diff --git a/src/plugins/platforms/xcb/qxcbdrag.h b/src/plugins/platforms/xcb/qxcbdrag.h
index e273492837..1bca9a036f 100644
--- a/src/plugins/platforms/xcb/qxcbdrag.h
+++ b/src/plugins/platforms/xcb/qxcbdrag.h
@@ -68,14 +68,14 @@ public:
QXcbDrag(QXcbConnection *c);
~QXcbDrag();
- virtual QMimeData *platformDropData();
+ virtual QMimeData *platformDropData() Q_DECL_OVERRIDE;
- void startDrag();
- void cancel();
- void move(const QMouseEvent *me);
- void drop(const QMouseEvent *me);
- void endDrag();
+ void startDrag() Q_DECL_OVERRIDE;
+ void cancel() Q_DECL_OVERRIDE;
+ void move(const QMouseEvent *me) Q_DECL_OVERRIDE;
+ void drop(const QMouseEvent *me) Q_DECL_OVERRIDE;
+ void endDrag() Q_DECL_OVERRIDE;
void handleEnter(QWindow *window, const xcb_client_message_event_t *event);
void handlePosition(QWindow *w, const xcb_client_message_event_t *event);
@@ -92,7 +92,7 @@ public:
xcb_timestamp_t targetTime() { return target_time; }
protected:
- void timerEvent(QTimerEvent* e);
+ void timerEvent(QTimerEvent* e) Q_DECL_OVERRIDE;
private:
friend class QXcbDropData;
diff --git a/src/plugins/platforms/xcb/qxcbeglsurface.h b/src/plugins/platforms/xcb/qxcbexport.h
index b03a029094..caf5124133 100644
--- a/src/plugins/platforms/xcb/qxcbeglsurface.h
+++ b/src/plugins/platforms/xcb/qxcbexport.h
@@ -31,34 +31,19 @@
**
****************************************************************************/
-#ifndef QXCBEGLSURFACE_H
-#define QXCBEGLSURFACE_H
+#ifndef QXCBEXPORT_H
+#define QXCBEXPORT_H
-#include <EGL/egl.h>
+#include <QtCore/qglobal.h>
QT_BEGIN_NAMESPACE
-class QXcbEGLSurface
-{
-public:
- QXcbEGLSurface(EGLDisplay display, EGLSurface surface)
- : m_display(display)
- , m_surface(surface)
- {
- }
-
- ~QXcbEGLSurface()
- {
- eglDestroySurface(m_display, m_surface);
- }
-
- EGLSurface surface() const { return m_surface; }
-
-private:
- EGLDisplay m_display;
- EGLSurface m_surface;
-};
+# if defined(QT_BUILD_XCB_PLUGIN)
+# define Q_XCB_EXPORT Q_DECL_EXPORT
+# else
+# define Q_XCB_EXPORT Q_DECL_IMPORT
+# endif
QT_END_NAMESPACE
+#endif //QXCBEXPORT_H
-#endif
diff --git a/src/plugins/platforms/xcb/qxcbintegration.cpp b/src/plugins/platforms/xcb/qxcbintegration.cpp
index f0c4a7f691..352d3255e4 100644
--- a/src/plugins/platforms/xcb/qxcbintegration.cpp
+++ b/src/plugins/platforms/xcb/qxcbintegration.cpp
@@ -41,6 +41,7 @@
#include "qxcbnativeinterface.h"
#include "qxcbclipboard.h"
#include "qxcbdrag.h"
+#include "qxcbglintegration.h"
#ifndef QT_NO_SESSIONMANAGER
#include "qxcbsessionmanager.h"
@@ -69,15 +70,6 @@
#include <private/qgenericunixthemes_p.h>
#include <qpa/qplatforminputcontext.h>
-#if defined(XCB_USE_GLX)
-#include "qglxintegration.h"
-#elif defined(XCB_USE_EGL)
-#include "qxcbeglsurface.h"
-#include <QtPlatformSupport/private/qeglplatformcontext_p.h>
-#include <QtPlatformSupport/private/qeglpbuffer_p.h>
-#include <QtPlatformHeaders/QEGLNativeContext>
-#endif
-
#include <QtGui/QOpenGLContext>
#include <QtGui/QScreen>
#include <QtGui/QOffscreenSurface>
@@ -177,7 +169,7 @@ QXcbIntegration::QXcbIntegration(const QStringList &parameters, int &argc, char
#ifdef Q_XCB_DEBUG
qDebug() << "QXcbIntegration: Connecting to additional display: " << parameters.at(i) << parameters.at(i+1);
#endif
- QString display = parameters.at(i) + ':' + parameters.at(i+1);
+ QString display = parameters.at(i) + QLatin1Char(':') + parameters.at(i+1);
m_connections << new QXcbConnection(m_nativeInterface.data(), display.toLatin1().constData());
}
@@ -191,82 +183,32 @@ QXcbIntegration::~QXcbIntegration()
QPlatformWindow *QXcbIntegration::createPlatformWindow(QWindow *window) const
{
- return new QXcbWindow(window);
-}
-
-#if defined(XCB_USE_EGL)
-class QEGLXcbPlatformContext : public QEGLPlatformContext
-{
-public:
- QEGLXcbPlatformContext(const QSurfaceFormat &glFormat, QPlatformOpenGLContext *share,
- EGLDisplay display, QXcbConnection *c, const QVariant &nativeHandle)
- : QEGLPlatformContext(glFormat, share, display, 0, nativeHandle)
- , m_connection(c)
- {
- Q_XCB_NOOP(m_connection);
- }
-
- void swapBuffers(QPlatformSurface *surface)
- {
- Q_XCB_NOOP(m_connection);
- QEGLPlatformContext::swapBuffers(surface);
- Q_XCB_NOOP(m_connection);
- }
-
- bool makeCurrent(QPlatformSurface *surface)
- {
- Q_XCB_NOOP(m_connection);
- bool ret = QEGLPlatformContext::makeCurrent(surface);
- Q_XCB_NOOP(m_connection);
- return ret;
- }
-
- void doneCurrent()
- {
- Q_XCB_NOOP(m_connection);
- QEGLPlatformContext::doneCurrent();
- Q_XCB_NOOP(m_connection);
- }
-
- EGLSurface eglSurfaceForPlatformSurface(QPlatformSurface *surface)
- {
- if (surface->surface()->surfaceClass() == QSurface::Window)
- return static_cast<QXcbWindow *>(surface)->eglSurface()->surface();
- else
- return static_cast<QEGLPbuffer *>(surface)->pbuffer();
- }
-
- QVariant nativeHandle() const {
- return QVariant::fromValue<QEGLNativeContext>(QEGLNativeContext(eglContext(), eglDisplay()));
+ if (window->type() != Qt::Desktop) {
+ QXcbScreen *screen = static_cast<QXcbScreen *>(window->screen()->handle());
+ QXcbGlIntegration *glIntegration = screen->connection()->glIntegration();
+ if (glIntegration) {
+ QXcbWindow *xcbWindow = glIntegration->createWindow(window);
+ xcbWindow->create();
+ return xcbWindow;
+ }
}
-private:
- QXcbConnection *m_connection;
-};
-#endif
+ Q_ASSERT(window->type() == Qt::Desktop || !window->supportsOpenGL());
+ QXcbWindow *xcbWindow = new QXcbWindow(window);
+ xcbWindow->create();
+ return xcbWindow;
+}
#ifndef QT_NO_OPENGL
QPlatformOpenGLContext *QXcbIntegration::createPlatformOpenGLContext(QOpenGLContext *context) const
{
QXcbScreen *screen = static_cast<QXcbScreen *>(context->screen()->handle());
-#if defined(XCB_USE_GLX)
- QGLXContext *platformContext = new QGLXContext(screen, context->format(),
- context->shareHandle(), context->nativeHandle());
- context->setNativeHandle(platformContext->nativeHandle());
- return platformContext;
-#elif defined(XCB_USE_EGL)
- QEGLXcbPlatformContext *platformContext = new QEGLXcbPlatformContext(context->format(),
- context->shareHandle(),
- screen->connection()->egl_display(),
- screen->connection(),
- context->nativeHandle());
- context->setNativeHandle(platformContext->nativeHandle());
- return platformContext;
-#else
- Q_UNUSED(screen);
- qWarning("QXcbIntegration: Cannot create platform OpenGL context, neither GLX nor EGL are enabled");
- return 0;
-#endif
+ QXcbGlIntegration *glIntegration = screen->connection()->glIntegration();
+ if (!glIntegration) {
+ qWarning("QXcbIntegration: Cannot create platform OpenGL context, neither GLX nor EGL are enabled");
+ return Q_NULLPTR;
+ }
+ return glIntegration->createPlatformOpenGLContext(context);
}
#endif
@@ -277,45 +219,23 @@ QPlatformBackingStore *QXcbIntegration::createPlatformBackingStore(QWindow *wind
QPlatformOffscreenSurface *QXcbIntegration::createPlatformOffscreenSurface(QOffscreenSurface *surface) const
{
-#if defined(XCB_USE_GLX)
- static bool vendorChecked = false;
- static bool glxPbufferUsable = true;
- if (!vendorChecked) {
- vendorChecked = true;
- const char *glxvendor = glXGetClientString(glXGetCurrentDisplay(), GLX_VENDOR);
- if (glxvendor && !strcmp(glxvendor, "ATI"))
- glxPbufferUsable = false;
- }
- if (glxPbufferUsable)
- return new QGLXPbuffer(surface);
- else
- return 0; // trigger fallback to hidden QWindow
-#elif defined(XCB_USE_EGL)
QXcbScreen *screen = static_cast<QXcbScreen *>(surface->screen()->handle());
- return new QEGLPbuffer(screen->connection()->egl_display(), surface->requestedFormat(), surface);
-#else
- Q_UNUSED(surface);
- qWarning("QXcbIntegration: Cannot create platform offscreen surface, neither GLX nor EGL are enabled");
- return 0;
-#endif
+ QXcbGlIntegration *glIntegration = screen->connection()->glIntegration();
+ if (!glIntegration) {
+ qWarning("QXcbIntegration: Cannot create platform offscreen surface, neither GLX nor EGL are enabled");
+ return Q_NULLPTR;
+ }
+ return glIntegration->createPlatformOffscreenSurface(surface);
}
bool QXcbIntegration::hasCapability(QPlatformIntegration::Capability cap) const
{
switch (cap) {
case ThreadedPixmaps: return true;
-#if defined(XCB_USE_GLX)
- case OpenGL: return m_connections.at(0)->hasGLX();
-#elif defined(XCB_USE_EGL)
- case OpenGL: return true;
-#else
- case OpenGL: return false;
-#endif
-#if defined(XCB_USE_GLX)
- case ThreadedOpenGL: return m_connections.at(0)->supportsThreadedRendering() && QGLXContext::supportsThreading();
-#else
- case ThreadedOpenGL: return m_connections.at(0)->supportsThreadedRendering();
-#endif
+ case OpenGL: return m_connections.first()->glIntegration();
+ case ThreadedOpenGL: return m_connections.at(0)->threadedEventHandling()
+ && m_connections.at(0)->glIntegration()
+ && m_connections.at(0)->glIntegration()->supportsThreadedOpenGL();
case WindowMasks: return true;
case MultipleWindows: return true;
case ForeignWindows: return true;
diff --git a/src/plugins/platforms/xcb/qxcbintegration.h b/src/plugins/platforms/xcb/qxcbintegration.h
index db6ad541ea..150e3d57cb 100644
--- a/src/plugins/platforms/xcb/qxcbintegration.h
+++ b/src/plugins/platforms/xcb/qxcbintegration.h
@@ -37,6 +37,8 @@
#include <qpa/qplatformintegration.h>
#include <qpa/qplatformscreen.h>
+#include "qxcbexport.h"
+
QT_BEGIN_NAMESPACE
class QXcbConnection;
@@ -44,51 +46,51 @@ class QAbstractEventDispatcher;
class QXcbNativeInterface;
class QXcbScreen;
-class QXcbIntegration : public QPlatformIntegration
+class Q_XCB_EXPORT QXcbIntegration : public QPlatformIntegration
{
public:
QXcbIntegration(const QStringList &parameters, int &argc, char **argv);
~QXcbIntegration();
- QPlatformWindow *createPlatformWindow(QWindow *window) const;
+ QPlatformWindow *createPlatformWindow(QWindow *window) const Q_DECL_OVERRIDE;
#ifndef QT_NO_OPENGL
- QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const;
+ QPlatformOpenGLContext *createPlatformOpenGLContext(QOpenGLContext *context) const Q_DECL_OVERRIDE;
#endif
- QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const;
+ QPlatformBackingStore *createPlatformBackingStore(QWindow *window) const Q_DECL_OVERRIDE;
- QPlatformOffscreenSurface *createPlatformOffscreenSurface(QOffscreenSurface *surface) const;
+ QPlatformOffscreenSurface *createPlatformOffscreenSurface(QOffscreenSurface *surface) const Q_DECL_OVERRIDE;
- bool hasCapability(Capability cap) const;
- QAbstractEventDispatcher *createEventDispatcher() const;
- void initialize();
+ bool hasCapability(Capability cap) const Q_DECL_OVERRIDE;
+ QAbstractEventDispatcher *createEventDispatcher() const Q_DECL_OVERRIDE;
+ void initialize() Q_DECL_OVERRIDE;
void moveToScreen(QWindow *window, int screen);
- QPlatformFontDatabase *fontDatabase() const;
+ QPlatformFontDatabase *fontDatabase() const Q_DECL_OVERRIDE;
- QPlatformNativeInterface *nativeInterface()const;
+ QPlatformNativeInterface *nativeInterface()const Q_DECL_OVERRIDE;
#ifndef QT_NO_CLIPBOARD
- QPlatformClipboard *clipboard() const;
+ QPlatformClipboard *clipboard() const Q_DECL_OVERRIDE;
#endif
#ifndef QT_NO_DRAGANDDROP
- QPlatformDrag *drag() const;
+ QPlatformDrag *drag() const Q_DECL_OVERRIDE;
#endif
- QPlatformInputContext *inputContext() const;
+ QPlatformInputContext *inputContext() const Q_DECL_OVERRIDE;
#ifndef QT_NO_ACCESSIBILITY
- QPlatformAccessibility *accessibility() const;
+ QPlatformAccessibility *accessibility() const Q_DECL_OVERRIDE;
#endif
- QPlatformServices *services() const;
+ QPlatformServices *services() const Q_DECL_OVERRIDE;
- Qt::KeyboardModifiers queryKeyboardModifiers() const;
- QList<int> possibleKeys(const QKeyEvent *e) const;
+ Qt::KeyboardModifiers queryKeyboardModifiers() const Q_DECL_OVERRIDE;
+ QList<int> possibleKeys(const QKeyEvent *e) const Q_DECL_OVERRIDE;
- QStringList themeNames() const;
- QPlatformTheme *createPlatformTheme(const QString &name) const;
- QVariant styleHint(StyleHint hint) const;
+ QStringList themeNames() const Q_DECL_OVERRIDE;
+ QPlatformTheme *createPlatformTheme(const QString &name) const Q_DECL_OVERRIDE;
+ QVariant styleHint(StyleHint hint) const Q_DECL_OVERRIDE;
QXcbConnection *defaultConnection() const { return m_connections.first(); }
@@ -98,7 +100,7 @@ public:
QPlatformSessionManager *createPlatformSessionManager(const QString &id, const QString &key) const Q_DECL_OVERRIDE;
#endif
- void sync();
+ void sync() Q_DECL_OVERRIDE;
private:
QList<QXcbConnection *> m_connections;
diff --git a/src/plugins/platforms/xcb/qxcbmain.cpp b/src/plugins/platforms/xcb/qxcbmain.cpp
index 80de5ba6f1..921c71711e 100644
--- a/src/plugins/platforms/xcb/qxcbmain.cpp
+++ b/src/plugins/platforms/xcb/qxcbmain.cpp
@@ -41,7 +41,7 @@ class QXcbIntegrationPlugin : public QPlatformIntegrationPlugin
Q_OBJECT
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QPA.QPlatformIntegrationFactoryInterface.5.2" FILE "xcb.json")
public:
- QPlatformIntegration *create(const QString&, const QStringList&, int &, char **);
+ QPlatformIntegration *create(const QString&, const QStringList&, int &, char **) Q_DECL_OVERRIDE;
};
QPlatformIntegration* QXcbIntegrationPlugin::create(const QString& system, const QStringList& parameters, int &argc, char **argv)
diff --git a/src/plugins/platforms/xcb/qxcbnativeinterface.cpp b/src/plugins/platforms/xcb/qxcbnativeinterface.cpp
index 31dedd40a2..05035a5b1e 100644
--- a/src/plugins/platforms/xcb/qxcbnativeinterface.cpp
+++ b/src/plugins/platforms/xcb/qxcbnativeinterface.cpp
@@ -46,12 +46,6 @@
#include <QtGui/qopenglcontext.h>
#include <QtGui/qscreen.h>
-#if defined(XCB_USE_EGL)
-#include "QtPlatformSupport/private/qeglplatformcontext_p.h"
-#elif defined (XCB_USE_GLX)
-#include "qglxintegration.h"
-#endif
-
#include <QtPlatformHeaders/qxcbwindowfunctions.h>
#ifdef XCB_USE_XLIB
@@ -62,18 +56,17 @@
#include <algorithm>
+#include "qxcbnativeinterfacehandler.h"
+
QT_BEGIN_NAMESPACE
// return QXcbNativeInterface::ResourceType for the key.
static int resourceType(const QByteArray &key)
{
static const QByteArray names[] = { // match QXcbNativeInterface::ResourceType
- QByteArrayLiteral("display"), QByteArrayLiteral("egldisplay"),
+ QByteArrayLiteral("display"),
QByteArrayLiteral("connection"), QByteArrayLiteral("screen"),
- QByteArrayLiteral("eglcontext"),
- QByteArrayLiteral("eglconfig"),
- QByteArrayLiteral("glxconfig"),
- QByteArrayLiteral("glxcontext"), QByteArrayLiteral("apptime"),
+ QByteArrayLiteral("apptime"),
QByteArrayLiteral("appusertime"), QByteArrayLiteral("hintstyle"),
QByteArrayLiteral("startupid"), QByteArrayLiteral("traywindow"),
QByteArrayLiteral("gettimestamp"), QByteArrayLiteral("x11screen"),
@@ -83,8 +76,6 @@ static int resourceType(const QByteArray &key)
};
const QByteArray *end = names + sizeof(names) / sizeof(names[0]);
const QByteArray *result = std::find(names, end, key);
- if (result == end)
- result = std::find(names, end, key.toLower());
return int(result - names);
}
@@ -209,10 +200,26 @@ void QXcbNativeInterface::clearRegion(const QWindow *qwindow, const QRect& rect)
}
}
+void QXcbNativeInterface::setParentRelativeBackPixmap(const QWindow *qwindow)
+{
+ if (const QPlatformWindow *platformWindow = qwindow->handle()) {
+ const QXcbWindow *qxwindow = static_cast<const QXcbWindow *>(platformWindow);
+ xcb_connection_t *xcb_conn = qxwindow->xcb_connection();
+
+ const quint32 mask = XCB_CW_BACK_PIXMAP;
+ const quint32 values[] = { XCB_BACK_PIXMAP_PARENT_RELATIVE };
+ Q_XCB_CALL(xcb_change_window_attributes(xcb_conn, qxwindow->xcb_window(), mask, values));
+ }
+}
+
void *QXcbNativeInterface::nativeResourceForIntegration(const QByteArray &resourceString)
{
- void *result = 0;
- switch (resourceType(resourceString)) {
+ QByteArray lowerCaseResource = resourceString.toLower();
+ void *result = handlerNativeResourceForIntegration(lowerCaseResource);
+ if (result)
+ return result;
+
+ switch (resourceType(lowerCaseResource)) {
case StartupId:
result = startupId();
break;
@@ -222,6 +229,9 @@ void *QXcbNativeInterface::nativeResourceForIntegration(const QByteArray &resour
case RootWindow:
result = rootWindow();
break;
+ case Display:
+ result = display();
+ break;
default:
break;
}
@@ -231,32 +241,20 @@ void *QXcbNativeInterface::nativeResourceForIntegration(const QByteArray &resour
void *QXcbNativeInterface::nativeResourceForContext(const QByteArray &resourceString, QOpenGLContext *context)
{
- void *result = 0;
- switch (resourceType(resourceString)) {
- case EglContext:
- result = eglContextForContext(context);
- break;
- case EglConfig:
- result = eglConfigForContext(context);
- break;
- case GLXConfig:
- result = glxConfigForContext(context);
- break;
- case GLXContext:
- result = glxContextForContext(context);
- break;
- default:
- break;
- }
-
+ QByteArray lowerCaseResource = resourceString.toLower();
+ void *result = handlerNativeResourceForContext(lowerCaseResource, context);
return result;
}
-void *QXcbNativeInterface::nativeResourceForScreen(const QByteArray &resource, QScreen *screen)
+void *QXcbNativeInterface::nativeResourceForScreen(const QByteArray &resourceString, QScreen *screen)
{
- void *result = 0;
+ QByteArray lowerCaseResource = resourceString.toLower();
+ void *result = handlerNativeResourceForScreen(lowerCaseResource ,screen);
+ if (result)
+ return result;
+
const QXcbScreen *xcbScreen = static_cast<QXcbScreen *>(screen->handle());
- switch (resourceType(resource)) {
+ switch (resourceType(lowerCaseResource)) {
case Display:
#ifdef XCB_USE_XLIB
result = xcbScreen->connection()->xlib_display();
@@ -295,14 +293,15 @@ void *QXcbNativeInterface::nativeResourceForScreen(const QByteArray &resource, Q
void *QXcbNativeInterface::nativeResourceForWindow(const QByteArray &resourceString, QWindow *window)
{
- void *result = 0;
- switch (resourceType(resourceString)) {
+ QByteArray lowerCaseResource = resourceString.toLower();
+ void *result = handlerNativeResourceForWindow(lowerCaseResource, window);
+ if (result)
+ return result;
+
+ switch (resourceType(lowerCaseResource)) {
case Display:
result = displayForWindow(window);
break;
- case EglDisplay:
- result = eglDisplayForWindow(window);
- break;
case Connection:
result = connectionForWindow(window);
break;
@@ -316,17 +315,42 @@ void *QXcbNativeInterface::nativeResourceForWindow(const QByteArray &resourceStr
return result;
}
+void *QXcbNativeInterface::nativeResourceForBackingStore(const QByteArray &resourceString, QBackingStore *backingStore)
+{
+ const QByteArray lowerCaseResource = resourceString.toLower();
+ void *result = handlerNativeResourceForBackingStore(lowerCaseResource,backingStore);
+ return result;
+}
+
+
QPlatformNativeInterface::NativeResourceForIntegrationFunction QXcbNativeInterface::nativeResourceFunctionForIntegration(const QByteArray &resource)
{
- QByteArray lowerCaseResource = resource.toLower();
+ const QByteArray lowerCaseResource = resource.toLower();
+ QPlatformNativeInterface::NativeResourceForIntegrationFunction func = handlerNativeResourceFunctionForIntegration(lowerCaseResource);
+ if (func)
+ return func;
+
if (lowerCaseResource == "setstartupid")
return NativeResourceForIntegrationFunction(setStartupId);
return 0;
}
+QPlatformNativeInterface::NativeResourceForContextFunction QXcbNativeInterface::nativeResourceFunctionForContext(const QByteArray &resource)
+{
+ const QByteArray lowerCaseResource = resource.toLower();
+ QPlatformNativeInterface::NativeResourceForContextFunction func = handlerNativeResourceFunctionForContext(lowerCaseResource);
+ if (func)
+ return func;
+ return Q_NULLPTR;
+}
+
QPlatformNativeInterface::NativeResourceForScreenFunction QXcbNativeInterface::nativeResourceFunctionForScreen(const QByteArray &resource)
{
const QByteArray lowerCaseResource = resource.toLower();
+ NativeResourceForScreenFunction func = handlerNativeResourceFunctionForScreen(lowerCaseResource);
+ if (func)
+ return func;
+
if (lowerCaseResource == "setapptime")
return NativeResourceForScreenFunction(setAppTime);
else if (lowerCaseResource == "setappusertime")
@@ -334,8 +358,28 @@ QPlatformNativeInterface::NativeResourceForScreenFunction QXcbNativeInterface::n
return 0;
}
+QPlatformNativeInterface::NativeResourceForWindowFunction QXcbNativeInterface::nativeResourceFunctionForWindow(const QByteArray &resource)
+{
+ const QByteArray lowerCaseResource = resource.toLower();
+ NativeResourceForWindowFunction func = handlerNativeResourceFunctionForWindow(lowerCaseResource);
+ return func;
+}
+
+QPlatformNativeInterface::NativeResourceForBackingStoreFunction QXcbNativeInterface::nativeResourceFunctionForBackingStore(const QByteArray &resource)
+{
+ const QByteArray lowerCaseResource = resource.toLower();
+ NativeResourceForBackingStoreFunction func = handlerNativeResourceFunctionForBackingStore(resource);
+ return func;
+}
+
QFunctionPointer QXcbNativeInterface::platformFunction(const QByteArray &function) const
{
+ const QByteArray lowerCaseFunction = function.toLower();
+ QFunctionPointer func = handlerPlatformFunction(lowerCaseFunction);
+ if (func)
+ return func;
+
+ //case sensitive
if (function == QXcbWindowFunctions::setWmWindowTypeIdentifier()) {
return QFunctionPointer(QXcbWindow::setWmWindowTypeStatic);
}
@@ -384,6 +428,17 @@ void *QXcbNativeInterface::rootWindow()
return 0;
}
+void *QXcbNativeInterface::display()
+{
+#ifdef XCB_USE_XLIB
+ QXcbIntegration *integration = static_cast<QXcbIntegration *>(QGuiApplicationPrivate::platformIntegration());
+ QXcbConnection *defaultConnection = integration->defaultConnection();
+ return defaultConnection->xlib_display();
+#else
+ return 0;
+#endif
+}
+
void QXcbNativeInterface::setAppTime(QScreen* screen, xcb_timestamp_t time)
{
static_cast<QXcbScreen *>(screen->handle())->connection()->setTime(time);
@@ -403,15 +458,6 @@ void QXcbNativeInterface::setStartupId(const char *data)
defaultConnection->setStartupId(startupId);
}
-QPlatformNativeInterface::NativeResourceForContextFunction QXcbNativeInterface::nativeResourceFunctionForContext(const QByteArray &resource)
-{
- QByteArray lowerCaseResource = resource.toLower();
- if (lowerCaseResource == "get_egl_context") {
- return eglContextForContext;
- }
- return 0;
-}
-
QXcbScreen *QXcbNativeInterface::qPlatformScreenForWindow(QWindow *window)
{
QXcbScreen *screen;
@@ -434,17 +480,6 @@ void *QXcbNativeInterface::displayForWindow(QWindow *window)
#endif
}
-void *QXcbNativeInterface::eglDisplayForWindow(QWindow *window)
-{
-#if defined(XCB_USE_EGL)
- QXcbScreen *screen = qPlatformScreenForWindow(window);
- return screen->connection()->egl_display();
-#else
- Q_UNUSED(window)
- return 0;
-#endif
-}
-
void *QXcbNativeInterface::connectionForWindow(QWindow *window)
{
QXcbScreen *screen = qPlatformScreenForWindow(window);
@@ -457,54 +492,121 @@ void *QXcbNativeInterface::screenForWindow(QWindow *window)
return screen->screen();
}
-void * QXcbNativeInterface::eglContextForContext(QOpenGLContext *context)
+void QXcbNativeInterface::addHandler(QXcbNativeInterfaceHandler *handler)
{
- Q_ASSERT(context);
-#if defined(XCB_USE_EGL)
- QEGLPlatformContext *eglPlatformContext = static_cast<QEGLPlatformContext *>(context->handle());
- return eglPlatformContext->eglContext();
-#else
- Q_UNUSED(context);
- return 0;
-#endif
+ m_handlers.removeAll(handler);
+ m_handlers.prepend(handler);
}
-void * QXcbNativeInterface::eglConfigForContext(QOpenGLContext *context)
+void QXcbNativeInterface::removeHandler(QXcbNativeInterfaceHandler *handler)
{
- Q_ASSERT(context);
-#if defined(XCB_USE_EGL)
- QEGLPlatformContext *eglPlatformContext = static_cast<QEGLPlatformContext *>(context->handle());
- return eglPlatformContext->eglConfig();
-#else
- Q_UNUSED(context);
- return 0;
-#endif
+ m_handlers.removeAll(handler);
}
-void *QXcbNativeInterface::glxContextForContext(QOpenGLContext *context)
+QPlatformNativeInterface::NativeResourceForIntegrationFunction QXcbNativeInterface::handlerNativeResourceFunctionForIntegration(const QByteArray &resource) const
{
- Q_ASSERT(context);
-#if defined(XCB_USE_GLX)
- QGLXContext *glxPlatformContext = static_cast<QGLXContext *>(context->handle());
- return glxPlatformContext->glxContext();
-#else
- Q_UNUSED(context);
- return 0;
-#endif
+ for (int i = 0; i < m_handlers.size(); i++) {
+ QXcbNativeInterfaceHandler *handler = m_handlers.at(i);
+ NativeResourceForIntegrationFunction result = handler->nativeResourceFunctionForIntegration(resource);
+ if (result)
+ return result;
+ }
+ return Q_NULLPTR;
+}
+QPlatformNativeInterface::NativeResourceForContextFunction QXcbNativeInterface::handlerNativeResourceFunctionForContext(const QByteArray &resource) const
+{
+ for (int i = 0; i < m_handlers.size(); i++) {
+ QXcbNativeInterfaceHandler *handler = m_handlers.at(i);
+ NativeResourceForContextFunction result = handler->nativeResourceFunctionForContext(resource);
+ if (result)
+ return result;
+ }
+ return Q_NULLPTR;
}
-void *QXcbNativeInterface::glxConfigForContext(QOpenGLContext *context)
+QPlatformNativeInterface::NativeResourceForScreenFunction QXcbNativeInterface::handlerNativeResourceFunctionForScreen(const QByteArray &resource) const
{
- Q_ASSERT(context);
-#if defined(XCB_USE_GLX)
- QGLXContext *glxPlatformContext = static_cast<QGLXContext *>(context->handle());
- return glxPlatformContext->glxConfig();
-#else
- Q_UNUSED(context);
- return 0;
-#endif
+ for (int i = 0; i < m_handlers.size(); i++) {
+ QXcbNativeInterfaceHandler *handler = m_handlers.at(i);
+ NativeResourceForScreenFunction result = handler->nativeResourceFunctionForScreen(resource);
+ if (result)
+ return result;
+ }
+ return Q_NULLPTR;
+}
+
+QPlatformNativeInterface::NativeResourceForWindowFunction QXcbNativeInterface::handlerNativeResourceFunctionForWindow(const QByteArray &resource) const
+{
+ for (int i = 0; i < m_handlers.size(); i++) {
+ QXcbNativeInterfaceHandler *handler = m_handlers.at(i);
+ NativeResourceForWindowFunction result = handler->nativeResourceFunctionForWindow(resource);
+ if (result)
+ return result;
+ }
+ return Q_NULLPTR;
+}
+
+QPlatformNativeInterface::NativeResourceForBackingStoreFunction QXcbNativeInterface::handlerNativeResourceFunctionForBackingStore(const QByteArray &resource) const
+{
+ for (int i = 0; i < m_handlers.size(); i++) {
+ QXcbNativeInterfaceHandler *handler = m_handlers.at(i);
+ NativeResourceForBackingStoreFunction result = handler->nativeResourceFunctionForBackingStore(resource);
+ if (result)
+ return result;
+ }
+ return Q_NULLPTR;
+}
+QFunctionPointer QXcbNativeInterface::handlerPlatformFunction(const QByteArray &function) const
+{
+ for (int i = 0; i < m_handlers.size(); i++) {
+ QXcbNativeInterfaceHandler *handler = m_handlers.at(i);
+ QFunctionPointer func = handler->platformFunction(function);
+ if (func)
+ return func;
+ }
+ return Q_NULLPTR;
+}
+
+void *QXcbNativeInterface::handlerNativeResourceForIntegration(const QByteArray &resource) const
+{
+ NativeResourceForIntegrationFunction func = handlerNativeResourceFunctionForIntegration(resource);
+ if (func)
+ return func();
+ return Q_NULLPTR;
+}
+
+void *QXcbNativeInterface::handlerNativeResourceForContext(const QByteArray &resource, QOpenGLContext *context) const
+{
+ NativeResourceForContextFunction func = handlerNativeResourceFunctionForContext(resource);
+ if (func)
+ return func(context);
+ return Q_NULLPTR;
+}
+
+void *QXcbNativeInterface::handlerNativeResourceForScreen(const QByteArray &resource, QScreen *screen) const
+{
+ NativeResourceForScreenFunction func = handlerNativeResourceFunctionForScreen(resource);
+ if (func)
+ return func(screen);
+ return Q_NULLPTR;
+}
+
+void *QXcbNativeInterface::handlerNativeResourceForWindow(const QByteArray &resource, QWindow *window) const
+{
+ NativeResourceForWindowFunction func = handlerNativeResourceFunctionForWindow(resource);
+ if (func)
+ return func(window);
+ return Q_NULLPTR;
+}
+
+void *QXcbNativeInterface::handlerNativeResourceForBackingStore(const QByteArray &resource, QBackingStore *backingStore) const
+{
+ NativeResourceForBackingStoreFunction func = handlerNativeResourceFunctionForBackingStore(resource);
+ if (func)
+ return func(backingStore);
+ return Q_NULLPTR;
}
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/xcb/qxcbnativeinterface.h b/src/plugins/platforms/xcb/qxcbnativeinterface.h
index 330dd008c4..1db2d1cf83 100644
--- a/src/plugins/platforms/xcb/qxcbnativeinterface.h
+++ b/src/plugins/platforms/xcb/qxcbnativeinterface.h
@@ -39,25 +39,23 @@
#include <QtCore/QRect>
+#include "qxcbexport.h"
+
QT_BEGIN_NAMESPACE
class QWidget;
class QXcbScreen;
class QXcbConnection;
+class QXcbNativeInterfaceHandler;
-class QXcbNativeInterface : public QPlatformNativeInterface
+class Q_XCB_EXPORT QXcbNativeInterface : public QPlatformNativeInterface
{
Q_OBJECT
public:
enum ResourceType {
Display,
- EglDisplay,
Connection,
Screen,
- EglContext,
- EglConfig,
- GLXConfig,
- GLXContext,
AppTime,
AppUserTime,
ScreenHintStyle,
@@ -77,17 +75,19 @@ public:
void *nativeResourceForContext(const QByteArray &resourceString, QOpenGLContext *context) Q_DECL_OVERRIDE;
void *nativeResourceForScreen(const QByteArray &resource, QScreen *screen) Q_DECL_OVERRIDE;
void *nativeResourceForWindow(const QByteArray &resourceString, QWindow *window) Q_DECL_OVERRIDE;
+ void *nativeResourceForBackingStore(const QByteArray &resource, QBackingStore *backingStore) Q_DECL_OVERRIDE;
NativeResourceForIntegrationFunction nativeResourceFunctionForIntegration(const QByteArray &resource) Q_DECL_OVERRIDE;
NativeResourceForContextFunction nativeResourceFunctionForContext(const QByteArray &resource) Q_DECL_OVERRIDE;
NativeResourceForScreenFunction nativeResourceFunctionForScreen(const QByteArray &resource) Q_DECL_OVERRIDE;
+ NativeResourceForWindowFunction nativeResourceFunctionForWindow(const QByteArray &resource) Q_DECL_OVERRIDE;
+ NativeResourceForBackingStoreFunction nativeResourceFunctionForBackingStore(const QByteArray &resource) Q_DECL_OVERRIDE;
QFunctionPointer platformFunction(const QByteArray &function) const Q_DECL_OVERRIDE;
inline const QByteArray &genericEventFilterType() const { return m_genericEventFilterType; }
void *displayForWindow(QWindow *window);
- void *eglDisplayForWindow(QWindow *window);
void *connectionForWindow(QWindow *window);
void *screenForWindow(QWindow *window);
void *appTime(const QXcbScreen *screen);
@@ -96,21 +96,21 @@ public:
void *startupId();
void *x11Screen();
void *rootWindow();
+ void *display();
static void setStartupId(const char *);
static void setAppTime(QScreen *screen, xcb_timestamp_t time);
static void setAppUserTime(QScreen *screen, xcb_timestamp_t time);
- static void *eglContextForContext(QOpenGLContext *context);
- static void *eglConfigForContext(QOpenGLContext *context);
- static void *glxContextForContext(QOpenGLContext *context);
- static void *glxConfigForContext(QOpenGLContext *context);
Q_INVOKABLE void beep();
Q_INVOKABLE bool systemTrayAvailable(const QScreen *screen) const;
Q_INVOKABLE void clearRegion(const QWindow *qwindow, const QRect& rect);
+ Q_INVOKABLE void setParentRelativeBackPixmap(const QWindow *window);
Q_INVOKABLE bool systrayVisualHasAlphaChannel();
Q_INVOKABLE bool requestSystemTrayWindowDock(const QWindow *window);
Q_INVOKABLE QRect systemTrayWindowGlobalGeometry(const QWindow *window);
+ void addHandler(QXcbNativeInterfaceHandler *handler);
+ void removeHandler(QXcbNativeInterfaceHandler *handler);
signals:
void systemTrayWindowChanged(QScreen *screen);
@@ -123,6 +123,19 @@ private:
xcb_visualid_t m_systrayVisualId;
static QXcbScreen *qPlatformScreenForWindow(QWindow *window);
+
+ QList<QXcbNativeInterfaceHandler *> m_handlers;
+ NativeResourceForIntegrationFunction handlerNativeResourceFunctionForIntegration(const QByteArray &resource) const;
+ NativeResourceForContextFunction handlerNativeResourceFunctionForContext(const QByteArray &resource) const;
+ NativeResourceForScreenFunction handlerNativeResourceFunctionForScreen(const QByteArray &resource) const;
+ NativeResourceForWindowFunction handlerNativeResourceFunctionForWindow(const QByteArray &resource) const;
+ NativeResourceForBackingStoreFunction handlerNativeResourceFunctionForBackingStore(const QByteArray &resource) const;
+ QFunctionPointer handlerPlatformFunction(const QByteArray &function) const;
+ void *handlerNativeResourceForIntegration(const QByteArray &resource) const;
+ void *handlerNativeResourceForContext(const QByteArray &resource, QOpenGLContext *context) const;
+ void *handlerNativeResourceForScreen(const QByteArray &resource, QScreen *screen) const;
+ void *handlerNativeResourceForWindow(const QByteArray &resource, QWindow *window) const;
+ void *handlerNativeResourceForBackingStore(const QByteArray &resource, QBackingStore *backingStore) const;
};
QT_END_NAMESPACE
diff --git a/src/plugins/platforms/xcb/qxcbscreen.cpp b/src/plugins/platforms/xcb/qxcbscreen.cpp
index 7136455754..0f25d10aac 100644
--- a/src/plugins/platforms/xcb/qxcbscreen.cpp
+++ b/src/plugins/platforms/xcb/qxcbscreen.cpp
@@ -337,7 +337,7 @@ QDpi QXcbScreen::logicalDpi() const
qreal QXcbScreen::devicePixelRatio() const
{
- static int override_dpr = qgetenv("QT_DEVICE_PIXEL_RATIO").toInt();
+ static int override_dpr = qEnvironmentVariableIntValue("QT_DEVICE_PIXEL_RATIO");
static bool auto_dpr = qgetenv("QT_DEVICE_PIXEL_RATIO").toLower() == "auto";
if (override_dpr > 0)
return override_dpr;
diff --git a/src/plugins/platforms/xcb/qxcbscreen.h b/src/plugins/platforms/xcb/qxcbscreen.h
index e9ab2edaa0..652d64c105 100644
--- a/src/plugins/platforms/xcb/qxcbscreen.h
+++ b/src/plugins/platforms/xcb/qxcbscreen.h
@@ -41,6 +41,7 @@
#include <xcb/randr.h>
#include "qxcbobject.h"
+#include "qxcbscreen.h"
#include <private/qfontengine_p.h>
@@ -50,29 +51,29 @@ class QXcbConnection;
class QXcbCursor;
class QXcbXSettings;
-class QXcbScreen : public QXcbObject, public QPlatformScreen
+class Q_XCB_EXPORT QXcbScreen : public QXcbObject, public QPlatformScreen
{
public:
QXcbScreen(QXcbConnection *connection, xcb_screen_t *screen,
xcb_randr_get_output_info_reply_t *output, QString outputName, int number);
~QXcbScreen();
- QPixmap grabWindow(WId window, int x, int y, int width, int height) const;
+ QPixmap grabWindow(WId window, int x, int y, int width, int height) const Q_DECL_OVERRIDE;
- QWindow *topLevelAt(const QPoint &point) const;
+ QWindow *topLevelAt(const QPoint &point) const Q_DECL_OVERRIDE;
- QRect geometry() const { return m_geometry; }
+ QRect geometry() const Q_DECL_OVERRIDE { return m_geometry; }
QRect nativeGeometry() const { return m_nativeGeometry; }
- QRect availableGeometry() const {return m_availableGeometry;}
- int depth() const { return m_screen->root_depth; }
- QImage::Format format() const;
- QSizeF physicalSize() const { return m_sizeMillimeters; }
- QDpi logicalDpi() const;
- qreal devicePixelRatio() const;
- QPlatformCursor *cursor() const;
- qreal refreshRate() const { return m_refreshRate; }
- Qt::ScreenOrientation orientation() const { return m_orientation; }
- QList<QPlatformScreen *> virtualSiblings() const { return m_siblings; }
+ QRect availableGeometry() const Q_DECL_OVERRIDE {return m_availableGeometry;}
+ int depth() const Q_DECL_OVERRIDE { return m_screen->root_depth; }
+ QImage::Format format() const Q_DECL_OVERRIDE;
+ QSizeF physicalSize() const Q_DECL_OVERRIDE { return m_sizeMillimeters; }
+ QDpi logicalDpi() const Q_DECL_OVERRIDE;
+ qreal devicePixelRatio() const Q_DECL_OVERRIDE;
+ QPlatformCursor *cursor() const Q_DECL_OVERRIDE;
+ qreal refreshRate() const Q_DECL_OVERRIDE { return m_refreshRate; }
+ Qt::ScreenOrientation orientation() const Q_DECL_OVERRIDE { return m_orientation; }
+ QList<QPlatformScreen *> virtualSiblings() const Q_DECL_OVERRIDE { return m_siblings; }
void setVirtualSiblings(QList<QPlatformScreen *> sl) { m_siblings = sl; }
int screenNumber() const { return m_number; }
@@ -89,7 +90,7 @@ public:
const xcb_visualtype_t *visualForId(xcb_visualid_t) const;
quint8 depthOfVisual(xcb_visualid_t) const;
- QString name() const { return m_outputName; }
+ QString name() const Q_DECL_OVERRIDE { return m_outputName; }
void handleScreenChange(xcb_randr_screen_change_notify_event_t *change_event);
void updateGeometry(xcb_timestamp_t timestamp);
diff --git a/src/plugins/platforms/xcb/qxcbsystemtraytracker.h b/src/plugins/platforms/xcb/qxcbsystemtraytracker.h
index 2e297c4ae5..2f364d3e55 100644
--- a/src/plugins/platforms/xcb/qxcbsystemtraytracker.h
+++ b/src/plugins/platforms/xcb/qxcbsystemtraytracker.h
@@ -55,7 +55,7 @@ public:
void notifyManagerClientMessageEvent(const xcb_client_message_event_t *);
- void handleDestroyNotifyEvent(const xcb_destroy_notify_event_t *);
+ void handleDestroyNotifyEvent(const xcb_destroy_notify_event_t *) Q_DECL_OVERRIDE;
signals:
void systemTrayWindowChanged(QScreen *screen);
diff --git a/src/plugins/platforms/xcb/qxcbwindow.cpp b/src/plugins/platforms/xcb/qxcbwindow.cpp
index 4fd71f1635..4676133777 100644
--- a/src/plugins/platforms/xcb/qxcbwindow.cpp
+++ b/src/plugins/platforms/xcb/qxcbwindow.cpp
@@ -97,15 +97,6 @@
#include <X11/extensions/XInput2.h>
#endif
-#if defined(XCB_USE_GLX)
-#include "qglxintegration.h"
-#include <QtPlatformSupport/private/qglxconvenience_p.h>
-#elif defined(XCB_USE_EGL)
-#include "qxcbeglsurface.h"
-#include <QtPlatformSupport/private/qeglconvenience_p.h>
-#include <QtPlatformSupport/private/qxlibeglintegration_p.h>
-#endif
-
#define XCOORD_MAX 16383
enum {
defaultWindowWidth = 160,
@@ -238,9 +229,6 @@ QXcbWindow::QXcbWindow(QWindow *window)
, m_alertState(false)
, m_netWmUserTimeWindow(XCB_NONE)
, m_dirtyFrameMargins(false)
-#if defined(XCB_USE_EGL)
- , m_eglSurface(0)
-#endif
, m_lastWindowStateEvent(-1)
, m_syncState(NoSyncNeeded)
, m_pendingSyncRequest(0)
@@ -248,11 +236,6 @@ QXcbWindow::QXcbWindow(QWindow *window)
m_screen = static_cast<QXcbScreen *>(window->screen()->handle());
setConnection(m_screen->connection());
-
- if (window->type() != Qt::ForeignWindow)
- create();
- else
- m_window = window->winId();
}
#ifdef Q_COMPILER_CLASS_ENUM
@@ -278,6 +261,11 @@ enum {
void QXcbWindow::create()
{
+ if (window()->type() == Qt::ForeignWindow) {
+ m_window = window()->winId();
+ return;
+ }
+
destroy();
m_deferredExpose = false;
@@ -341,27 +329,12 @@ void QXcbWindow::create()
window()->setFormat(parentFormat);
}
}
- m_format = window()->requestedFormat();
-#if (defined(XCB_USE_GLX) || defined(XCB_USE_EGL)) && defined(XCB_USE_XLIB)
+ resolveFormat();
+
+#ifdef XCB_USE_XLIB
if (QGuiApplicationPrivate::platformIntegration()->hasCapability(QPlatformIntegration::OpenGL)) {
-#if defined(XCB_USE_GLX)
- XVisualInfo *visualInfo = qglx_findVisualInfo(DISPLAY_FROM_XCB(m_screen), m_screen->screenNumber(), &m_format);
-#elif defined(XCB_USE_EGL)
- EGLDisplay eglDisplay = connection()->egl_display();
- EGLConfig eglConfig = q_configFromGLFormat(eglDisplay, m_format, true);
- m_format = q_glFormatFromConfig(eglDisplay, eglConfig, m_format);
-
- VisualID id = QXlibEglIntegration::getCompatibleVisualId(DISPLAY_FROM_XCB(this), eglDisplay, eglConfig);
-
- XVisualInfo visualInfoTemplate;
- memset(&visualInfoTemplate, 0, sizeof(XVisualInfo));
- visualInfoTemplate.visualid = id;
-
- XVisualInfo *visualInfo;
- int matchingCount = 0;
- visualInfo = XGetVisualInfo(DISPLAY_FROM_XCB(this), VisualIDMask, &visualInfoTemplate, &matchingCount);
-#endif //XCB_USE_GLX
+ XVisualInfo *visualInfo = static_cast<XVisualInfo *>(createVisual());
if (!visualInfo && window()->surfaceType() == QSurface::OpenGLSurface)
qFatal("Could not initialize OpenGL");
@@ -369,6 +342,7 @@ void QXcbWindow::create()
qWarning("Could not initialize OpenGL for RasterGLSurface, reverting to RasterSurface.");
window()->setSurfaceType(QSurface::RasterSurface);
}
+
if (visualInfo) {
m_depth = visualInfo->depth;
m_imageFormat = imageFormatForVisual(visualInfo->depth, visualInfo->red_mask, visualInfo->blue_mask);
@@ -390,9 +364,9 @@ void QXcbWindow::create()
XFree(visualInfo);
}
}
+#endif
if (!m_window)
-#endif //defined(XCB_USE_GLX) || defined(XCB_USE_EGL)
{
m_window = xcb_generate_id(xcb_connection());
m_visualId = m_screen->screen()->root_visual;
@@ -453,12 +427,10 @@ void QXcbWindow::create()
properties[propertyCount++] = atom(QXcbAtom::WM_TAKE_FOCUS);
properties[propertyCount++] = atom(QXcbAtom::_NET_WM_PING);
- m_usingSyncProtocol = m_screen->syncRequestSupported();
-#if !defined(XCB_USE_GLX)
- // synced resize only implemented on GLX
- if (window()->supportsOpenGL())
+ if (m_screen->syncRequestSupported())
+ m_usingSyncProtocol = supportsSyncProtocol();
+ else
m_usingSyncProtocol = false;
-#endif
if (m_usingSyncProtocol)
properties[propertyCount++] = atom(QXcbAtom::_NET_WM_SYNC_REQUEST);
@@ -580,11 +552,6 @@ void QXcbWindow::destroy()
}
m_mapped = false;
-#if defined(XCB_USE_EGL)
- delete m_eglSurface;
- m_eglSurface = 0;
-#endif
-
if (m_pendingSyncRequest)
m_pendingSyncRequest->invalidate();
}
@@ -1561,21 +1528,6 @@ QSurfaceFormat QXcbWindow::format() const
return m_format;
}
-#if defined(XCB_USE_EGL)
-QXcbEGLSurface *QXcbWindow::eglSurface() const
-{
- if (!m_eglSurface) {
- EGLDisplay display = connection()->egl_display();
- EGLConfig config = q_configFromGLFormat(display, window()->requestedFormat(), true);
- EGLSurface surface = eglCreateWindowSurface(display, config, (EGLNativeWindowType)m_window, 0);
-
- m_eglSurface = new QXcbEGLSurface(display, surface);
- }
-
- return m_eglSurface;
-}
-#endif
-
void QXcbWindow::setWmWindowTypeStatic(QWindow *window, QXcbWindowFunctions::WmWindowTypes windowTypes)
{
if (window->handle())
diff --git a/src/plugins/platforms/xcb/qxcbwindow.h b/src/plugins/platforms/xcb/qxcbwindow.h
index 254421e57d..b78bf779d0 100644
--- a/src/plugins/platforms/xcb/qxcbwindow.h
+++ b/src/plugins/platforms/xcb/qxcbwindow.h
@@ -48,11 +48,10 @@
QT_BEGIN_NAMESPACE
class QXcbScreen;
-class QXcbEGLSurface;
class QXcbSyncWindowRequest;
class QIcon;
-class QXcbWindow : public QXcbObject, public QXcbWindowEventListener, public QPlatformWindow
+class Q_XCB_EXPORT QXcbWindow : public QXcbObject, public QXcbWindowEventListener, public QPlatformWindow
{
public:
enum NetWmState {
@@ -71,45 +70,45 @@ public:
QXcbWindow(QWindow *window);
~QXcbWindow();
- void setGeometry(const QRect &rect);
+ void setGeometry(const QRect &rect) Q_DECL_OVERRIDE;
- QMargins frameMargins() const;
+ QMargins frameMargins() const Q_DECL_OVERRIDE;
- void setVisible(bool visible);
- void setWindowFlags(Qt::WindowFlags flags);
- void setWindowState(Qt::WindowState state);
- WId winId() const;
- void setParent(const QPlatformWindow *window);
+ void setVisible(bool visible) Q_DECL_OVERRIDE;
+ void setWindowFlags(Qt::WindowFlags flags) Q_DECL_OVERRIDE;
+ void setWindowState(Qt::WindowState state) Q_DECL_OVERRIDE;
+ WId winId() const Q_DECL_OVERRIDE;
+ void setParent(const QPlatformWindow *window) Q_DECL_OVERRIDE;
- bool isExposed() const;
- bool isEmbedded(const QPlatformWindow *parentWindow) const;
- QPoint mapToGlobal(const QPoint &pos) const;
- QPoint mapFromGlobal(const QPoint &pos) const;
+ bool isExposed() const Q_DECL_OVERRIDE;
+ bool isEmbedded(const QPlatformWindow *parentWindow) const Q_DECL_OVERRIDE;
+ QPoint mapToGlobal(const QPoint &pos) const Q_DECL_OVERRIDE;
+ QPoint mapFromGlobal(const QPoint &pos) const Q_DECL_OVERRIDE;
- void setWindowTitle(const QString &title);
- void setWindowIcon(const QIcon &icon);
- void raise();
- void lower();
- void propagateSizeHints();
+ void setWindowTitle(const QString &title) Q_DECL_OVERRIDE;
+ void setWindowIcon(const QIcon &icon) Q_DECL_OVERRIDE;
+ void raise() Q_DECL_OVERRIDE;
+ void lower() Q_DECL_OVERRIDE;
+ void propagateSizeHints() Q_DECL_OVERRIDE;
- void requestActivateWindow();
+ void requestActivateWindow() Q_DECL_OVERRIDE;
- bool setKeyboardGrabEnabled(bool grab);
- bool setMouseGrabEnabled(bool grab);
+ bool setKeyboardGrabEnabled(bool grab) Q_DECL_OVERRIDE;
+ bool setMouseGrabEnabled(bool grab) Q_DECL_OVERRIDE;
void setCursor(xcb_cursor_t cursor);
- QSurfaceFormat format() const;
+ QSurfaceFormat format() const Q_DECL_OVERRIDE;
- void windowEvent(QEvent *event);
+ void windowEvent(QEvent *event) Q_DECL_OVERRIDE;
- bool startSystemResize(const QPoint &pos, Qt::Corner corner);
+ bool startSystemResize(const QPoint &pos, Qt::Corner corner) Q_DECL_OVERRIDE;
- void setOpacity(qreal level);
- void setMask(const QRegion &region);
+ void setOpacity(qreal level) Q_DECL_OVERRIDE;
+ void setMask(const QRegion &region) Q_DECL_OVERRIDE;
- void setAlertState(bool enabled);
- bool isAlertState() const { return m_alertState; }
+ void setAlertState(bool enabled) Q_DECL_OVERRIDE;
+ bool isAlertState() const Q_DECL_OVERRIDE { return m_alertState; }
xcb_window_t xcb_window() const { return m_window; }
uint depth() const { return m_depth; }
@@ -138,10 +137,6 @@ public:
void updateNetWmUserTime(xcb_timestamp_t timestamp);
-#if defined(XCB_USE_EGL)
- QXcbEGLSurface *eglSurface() const;
-#endif
-
static void setWmWindowTypeStatic(QWindow *window, QXcbWindowFunctions::WmWindowTypes windowTypes);
QXcbWindowFunctions::WmWindowTypes wmWindowTypes() const;
@@ -152,14 +147,20 @@ public:
void postSyncWindowRequest();
void clearSyncWindowRequest() { m_pendingSyncRequest = 0; }
- qreal devicePixelRatio() const;
+ qreal devicePixelRatio() const Q_DECL_OVERRIDE;
+ virtual void create();
+ virtual void destroy();
QPlatformScreen *screenForNativeGeometry(const QRect &newGeometry) const;
public Q_SLOTS:
void updateSyncRequestCounter();
-private:
+protected:
+ virtual void resolveFormat() { m_format = window()->requestedFormat(); }
+ virtual void *createVisual() { return Q_NULLPTR; }
+ virtual bool supportsSyncProtocol() { return !window()->supportsOpenGL(); }
+
void changeNetWmState(bool set, xcb_atom_t one, xcb_atom_t two = 0);
NetWmStates netWmStates();
void setNetWmStates(NetWmStates);
@@ -178,9 +179,6 @@ private:
quint32 detail = 0, quint32 data1 = 0, quint32 data2 = 0);
void handleXEmbedMessage(const xcb_client_message_event_t *event);
- void create();
- void destroy();
-
void show();
void hide();
@@ -217,10 +215,6 @@ private:
mutable bool m_dirtyFrameMargins;
mutable QMargins m_frameMargins;
-#if defined(XCB_USE_EGL)
- mutable QXcbEGLSurface *m_eglSurface;
-#endif
-
QRegion m_exposeRegion;
xcb_visualid_t m_visualId;
diff --git a/src/plugins/platforms/xcb/xcb-plugin.pro b/src/plugins/platforms/xcb/xcb-plugin.pro
index 129076c916..09ab1ad77a 100644
--- a/src/plugins/platforms/xcb/xcb-plugin.pro
+++ b/src/plugins/platforms/xcb/xcb-plugin.pro
@@ -5,117 +5,9 @@ PLUGIN_CLASS_NAME = QXcbIntegrationPlugin
!equals(TARGET, $$QT_DEFAULT_QPA_PLUGIN): PLUGIN_EXTENDS = -
load(qt_plugin)
-QT += core-private gui-private platformsupport-private
+QT += core-private gui-private platformsupport-private xcb_qpa_lib-private
SOURCES = \
- qxcbclipboard.cpp \
- qxcbconnection.cpp \
- qxcbintegration.cpp \
- qxcbkeyboard.cpp \
- qxcbmime.cpp \
- qxcbdrag.cpp \
- qxcbscreen.cpp \
- qxcbwindow.cpp \
- qxcbbackingstore.cpp \
- qxcbwmsupport.cpp \
- qxcbmain.cpp \
- qxcbnativeinterface.cpp \
- qxcbcursor.cpp \
- qxcbimage.cpp \
- qxcbxsettings.cpp \
- qxcbsystemtraytracker.cpp
-
-HEADERS = \
- qxcbclipboard.h \
- qxcbconnection.h \
- qxcbintegration.h \
- qxcbkeyboard.h \
- qxcbdrag.h \
- qxcbmime.h \
- qxcbobject.h \
- qxcbscreen.h \
- qxcbwindow.h \
- qxcbbackingstore.h \
- qxcbwmsupport.h \
- qxcbnativeinterface.h \
- qxcbcursor.h \
- qxcbimage.h \
- qxcbxsettings.h \
- qxcbsystemtraytracker.h
-
-LIBS += $$QMAKE_LIBS_DYNLOAD
-
-# needed by GLX, Xcursor ...
-contains(QT_CONFIG, xcb-xlib) {
- DEFINES += XCB_USE_XLIB
- LIBS += -lX11 -lX11-xcb
-
- contains(QT_CONFIG, xinput2) {
- DEFINES += XCB_USE_XINPUT2
- SOURCES += qxcbconnection_xi2.cpp
- LIBS += -lXi
- }
-}
-
-# to support custom cursors with depth > 1
-contains(QT_CONFIG, xcb-render) {
- DEFINES += XCB_USE_RENDER
- LIBS += -lxcb-render -lxcb-render-util
-}
-
-# build with session management support
-contains(QT_CONFIG, xcb-sm) {
- DEFINES += XCB_USE_SM
- LIBS += -lSM -lICE
- SOURCES += qxcbsessionmanager.cpp
- HEADERS += qxcbsessionmanager.h
-}
-
-contains(QT_CONFIG, opengl) {
- contains(QT_CONFIG, xcb-xlib):!contains(QT_CONFIG, opengles2) {
- DEFINES += XCB_USE_GLX
- HEADERS += qglxintegration.h
- SOURCES += qglxintegration.cpp
- LIBS += $$QMAKE_LIBS_DYNLOAD
- contains(QT_CONFIG, xcb-glx) {
- DEFINES += XCB_HAS_XCB_GLX
- LIBS += -lxcb-glx
- }
- } else:contains(QT_CONFIG, egl):contains(QT_CONFIG, egl_x11) {
- DEFINES += XCB_USE_EGL
- CONFIG += egl
- HEADERS += qxcbeglsurface.h
-
- # EGL on MeeGo 1.2 Harmattan needs this macro to map EGLNativeDisplayType
- # and other types to the correct X11 types
- DEFINES += SUPPORT_X11
- }
-}
-
-DEFINES += $$QMAKE_DEFINES_XCB
-LIBS += $$QMAKE_LIBS_XCB
-QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_XCB
-QMAKE_CFLAGS += $$QMAKE_CFLAGS_XCB
-
-CONFIG += qpa/genericunixfontdatabase
-
+ qxcbmain.cpp
OTHER_FILES += xcb.json README
-contains(QT_CONFIG, xcb-qt) {
- DEFINES += XCB_USE_RENDER
- XCB_DIR = ../../../3rdparty/xcb
- INCLUDEPATH += $$XCB_DIR/include $$XCB_DIR/sysinclude
- LIBS += -lxcb -L$$OUT_PWD/xcb-static -lxcb-static
-} else {
- LIBS += -lxcb -lxcb-image -lxcb-icccm -lxcb-sync -lxcb-xfixes -lxcb-shm -lxcb-randr -lxcb-shape -lxcb-keysyms
- !contains(DEFINES, QT_NO_XKB):LIBS += -lxcb-xkb
-}
-
-# libxkbcommon
-contains(QT_CONFIG, xkbcommon-qt): {
- QT_CONFIG += use-xkbcommon-x11support
- include(../../../3rdparty/xkbcommon.pri)
-} else {
- LIBS += $$QMAKE_LIBS_XKBCOMMON
- QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_XKBCOMMON
-}
diff --git a/src/plugins/platforms/xcb/xcb.pro b/src/plugins/platforms/xcb/xcb.pro
index dab0d8cb14..5915a59c0b 100644
--- a/src/plugins/platforms/xcb/xcb.pro
+++ b/src/plugins/platforms/xcb/xcb.pro
@@ -2,4 +2,7 @@ TEMPLATE = subdirs
CONFIG += ordered
contains(QT_CONFIG, xcb-qt):SUBDIRS+=xcb-static
+
+SUBDIRS += xcb_qpa_lib.pro
SUBDIRS += xcb-plugin.pro
+SUBDIRS += gl_integrations
diff --git a/src/plugins/platforms/xcb/xcb_qpa_lib.pro b/src/plugins/platforms/xcb/xcb_qpa_lib.pro
new file mode 100644
index 0000000000..770236acc7
--- /dev/null
+++ b/src/plugins/platforms/xcb/xcb_qpa_lib.pro
@@ -0,0 +1,111 @@
+TARGET = QtXcbQpa
+CONFIG += no_module_headers internal_module
+
+MODULE_INCLUDES = \
+ \$\$QT_MODULE_INCLUDE_BASE \
+ \$\$QT_MODULE_INCLUDE_BASE/QtQGui
+MODULE_PRIVATE_INCLUDES = \
+ \$\$QT_MODULE_INCLUDE_BASE/QtGui/$$QT.gui.VERSION \
+ \$\$QT_MODULE_INCLUDE_BASE/QtGui/$$QT.gui.VERSION/QtGui
+
+load(qt_module)
+
+QT += core-private gui-private platformsupport-private
+
+SOURCES = \
+ qxcbclipboard.cpp \
+ qxcbconnection.cpp \
+ qxcbintegration.cpp \
+ qxcbkeyboard.cpp \
+ qxcbmime.cpp \
+ qxcbdrag.cpp \
+ qxcbscreen.cpp \
+ qxcbwindow.cpp \
+ qxcbbackingstore.cpp \
+ qxcbwmsupport.cpp \
+ qxcbnativeinterface.cpp \
+ qxcbcursor.cpp \
+ qxcbimage.cpp \
+ qxcbxsettings.cpp \
+ qxcbsystemtraytracker.cpp
+
+HEADERS = \
+ qxcbclipboard.h \
+ qxcbconnection.h \
+ qxcbintegration.h \
+ qxcbkeyboard.h \
+ qxcbdrag.h \
+ qxcbmime.h \
+ qxcbobject.h \
+ qxcbscreen.h \
+ qxcbwindow.h \
+ qxcbbackingstore.h \
+ qxcbwmsupport.h \
+ qxcbnativeinterface.h \
+ qxcbcursor.h \
+ qxcbimage.h \
+ qxcbxsettings.h \
+ qxcbsystemtraytracker.h
+
+LIBS += $$QMAKE_LIBS_DYNLOAD
+
+DEFINES += QT_BUILD_XCB_PLUGIN
+# needed by Xcursor ...
+contains(QT_CONFIG, xcb-xlib) {
+ DEFINES += XCB_USE_XLIB
+ LIBS += -lX11 -lX11-xcb
+
+ contains(QT_CONFIG, xinput2) {
+ DEFINES += XCB_USE_XINPUT2
+ SOURCES += qxcbconnection_xi2.cpp
+ LIBS += -lXi
+ }
+}
+
+# to support custom cursors with depth > 1
+contains(QT_CONFIG, xcb-render) {
+ DEFINES += XCB_USE_RENDER
+ LIBS += -lxcb-render -lxcb-render-util
+}
+
+# build with session management support
+contains(QT_CONFIG, xcb-sm) {
+ DEFINES += XCB_USE_SM
+ LIBS += -lSM -lICE
+ SOURCES += qxcbsessionmanager.cpp
+ HEADERS += qxcbsessionmanager.h
+}
+
+include(gl_integrations/gl_integrations.pri)
+
+DEFINES += $$QMAKE_DEFINES_XCB
+LIBS += $$QMAKE_LIBS_XCB
+QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_XCB
+QMAKE_CFLAGS += $$QMAKE_CFLAGS_XCB
+
+CONFIG += qpa/genericunixfontdatabase
+
+contains(QT_CONFIG, dbus) {
+ QT += dbus
+ LIBS += -ldbus-1
+}
+
+contains(QT_CONFIG, xcb-qt) {
+ DEFINES += XCB_USE_RENDER
+ XCB_DIR = ../../../3rdparty/xcb
+ INCLUDEPATH += $$XCB_DIR/include $$XCB_DIR/sysinclude
+ LIBS += -lxcb -L$$OUT_PWD/xcb-static -lxcb-static
+} else {
+ LIBS += -lxcb -lxcb-image -lxcb-icccm -lxcb-sync -lxcb-xfixes -lxcb-shm -lxcb-randr -lxcb-shape -lxcb-keysyms
+ !contains(DEFINES, QT_NO_XKB):LIBS += -lxcb-xkb
+}
+
+# libxkbcommon
+contains(QT_CONFIG, xkbcommon-qt) {
+ QT_CONFIG += use-xkbcommon-x11support
+ include(../../../3rdparty/xkbcommon.pri)
+} else {
+ LIBS += $$QMAKE_LIBS_XKBCOMMON
+ QMAKE_CXXFLAGS += $$QMAKE_CFLAGS_XKBCOMMON
+}
+
diff --git a/src/plugins/platformthemes/gtk2/main.cpp b/src/plugins/platformthemes/gtk2/main.cpp
index 860a1f8b3f..f14621da69 100644
--- a/src/plugins/platformthemes/gtk2/main.cpp
+++ b/src/plugins/platformthemes/gtk2/main.cpp
@@ -42,7 +42,7 @@ class QGtk2ThemePlugin : public QPlatformThemePlugin
Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QPA.QPlatformThemeFactoryInterface.5.1" FILE "gtk2.json")
public:
- QPlatformTheme *create(const QString &key, const QStringList &params);
+ QPlatformTheme *create(const QString &key, const QStringList &params) Q_DECL_OVERRIDE;
};
QPlatformTheme *QGtk2ThemePlugin::create(const QString &key, const QStringList &params)
diff --git a/src/plugins/platformthemes/gtk2/qgtk2dialoghelpers.cpp b/src/plugins/platformthemes/gtk2/qgtk2dialoghelpers.cpp
index d7e73c873d..0c7ff1a717 100644
--- a/src/plugins/platformthemes/gtk2/qgtk2dialoghelpers.cpp
+++ b/src/plugins/platformthemes/gtk2/qgtk2dialoghelpers.cpp
@@ -40,6 +40,7 @@
#include <qfont.h>
#include <private/qguiapplication_p.h>
+#include <qpa/qplatformfontdatabase.h>
#undef signals
#include <gtk/gtk.h>
@@ -511,14 +512,22 @@ static QString qt_fontToString(const QFont &font)
int weight = font.weight();
if (weight >= QFont::Black)
pango_font_description_set_weight(desc, PANGO_WEIGHT_HEAVY);
+ else if (weight >= QFont::ExtraBold)
+ pango_font_description_set_weight(desc, PANGO_WEIGHT_ULTRABOLD);
else if (weight >= QFont::Bold)
pango_font_description_set_weight(desc, PANGO_WEIGHT_BOLD);
else if (weight >= QFont::DemiBold)
pango_font_description_set_weight(desc, PANGO_WEIGHT_SEMIBOLD);
+ else if (weight >= QFont::Medium)
+ pango_font_description_set_weight(desc, PANGO_WEIGHT_MEDIUM);
else if (weight >= QFont::Normal)
pango_font_description_set_weight(desc, PANGO_WEIGHT_NORMAL);
- else
+ else if (weight >= QFont::Light)
pango_font_description_set_weight(desc, PANGO_WEIGHT_LIGHT);
+ else if (weight >= QFont::ExtraLight)
+ pango_font_description_set_weight(desc, PANGO_WEIGHT_ULTRALIGHT);
+ else
+ pango_font_description_set_weight(desc, PANGO_WEIGHT_THIN);
int style = font.style();
if (style == QFont::StyleItalic)
@@ -545,17 +554,8 @@ static QFont qt_fontFromString(const QString &name)
if (!family.isEmpty())
font.setFamily(family);
- int weight = pango_font_description_get_weight(desc);
- if (weight >= PANGO_WEIGHT_HEAVY)
- font.setWeight(QFont::Black);
- else if (weight >= PANGO_WEIGHT_BOLD)
- font.setWeight(QFont::Bold);
- else if (weight >= PANGO_WEIGHT_SEMIBOLD)
- font.setWeight(QFont::DemiBold);
- else if (weight >= PANGO_WEIGHT_NORMAL)
- font.setWeight(QFont::Normal);
- else
- font.setWeight(QFont::Light);
+ const int weight = pango_font_description_get_weight(desc);
+ font.setWeight(QPlatformFontDatabase::weightFromInteger(weight));
PangoStyle style = pango_font_description_get_style(desc);
if (style == PANGO_STYLE_ITALIC)
diff --git a/src/plugins/platformthemes/gtk2/qgtk2dialoghelpers.h b/src/plugins/platformthemes/gtk2/qgtk2dialoghelpers.h
index 9789c6750f..9ae562b1db 100644
--- a/src/plugins/platformthemes/gtk2/qgtk2dialoghelpers.h
+++ b/src/plugins/platformthemes/gtk2/qgtk2dialoghelpers.h
@@ -52,12 +52,12 @@ public:
QGtk2ColorDialogHelper();
~QGtk2ColorDialogHelper();
- bool show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent);
- void exec();
- void hide();
+ bool show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent) Q_DECL_OVERRIDE;
+ void exec() Q_DECL_OVERRIDE;
+ void hide() Q_DECL_OVERRIDE;
- void setCurrentColor(const QColor &color);
- QColor currentColor() const;
+ void setCurrentColor(const QColor &color) Q_DECL_OVERRIDE;
+ QColor currentColor() const Q_DECL_OVERRIDE;
private Q_SLOTS:
void onAccepted();
@@ -77,18 +77,18 @@ public:
QGtk2FileDialogHelper();
~QGtk2FileDialogHelper();
- bool show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent);
- void exec();
- void hide();
+ bool show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent) Q_DECL_OVERRIDE;
+ void exec() Q_DECL_OVERRIDE;
+ void hide() Q_DECL_OVERRIDE;
- bool defaultNameFilterDisables() const;
+ bool defaultNameFilterDisables() const Q_DECL_OVERRIDE;
void setDirectory(const QUrl &directory) Q_DECL_OVERRIDE;
QUrl directory() const Q_DECL_OVERRIDE;
void selectFile(const QUrl &filename) Q_DECL_OVERRIDE;
QList<QUrl> selectedFiles() const Q_DECL_OVERRIDE;
- void setFilter();
- void selectNameFilter(const QString &filter);
- QString selectedNameFilter() const;
+ void setFilter() Q_DECL_OVERRIDE;
+ void selectNameFilter(const QString &filter) Q_DECL_OVERRIDE;
+ QString selectedNameFilter() const Q_DECL_OVERRIDE;
private Q_SLOTS:
void onAccepted();
@@ -114,12 +114,12 @@ public:
QGtk2FontDialogHelper();
~QGtk2FontDialogHelper();
- bool show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent);
- void exec();
- void hide();
+ bool show(Qt::WindowFlags flags, Qt::WindowModality modality, QWindow *parent) Q_DECL_OVERRIDE;
+ void exec() Q_DECL_OVERRIDE;
+ void hide() Q_DECL_OVERRIDE;
- void setCurrentFont(const QFont &font);
- QFont currentFont() const;
+ void setCurrentFont(const QFont &font) Q_DECL_OVERRIDE;
+ QFont currentFont() const Q_DECL_OVERRIDE;
private Q_SLOTS:
void onAccepted();
diff --git a/src/plugins/platformthemes/gtk2/qgtk2theme.h b/src/plugins/platformthemes/gtk2/qgtk2theme.h
index 304d7789f5..fd8e90fe5c 100644
--- a/src/plugins/platformthemes/gtk2/qgtk2theme.h
+++ b/src/plugins/platformthemes/gtk2/qgtk2theme.h
@@ -46,8 +46,8 @@ public:
virtual QVariant themeHint(ThemeHint hint) const Q_DECL_OVERRIDE;
virtual QString gtkFontName() const Q_DECL_OVERRIDE;
- bool usePlatformNativeDialog(DialogType type) const;
- QPlatformDialogHelper *createPlatformDialogHelper(DialogType type) const;
+ bool usePlatformNativeDialog(DialogType type) const Q_DECL_OVERRIDE;
+ QPlatformDialogHelper *createPlatformDialogHelper(DialogType type) const Q_DECL_OVERRIDE;
static const char *name;
};
diff --git a/src/plugins/plugins.pro b/src/plugins/plugins.pro
index d1cbff59c1..587063b100 100644
--- a/src/plugins/plugins.pro
+++ b/src/plugins/plugins.pro
@@ -3,5 +3,6 @@ TEMPLATE = subdirs
SUBDIRS *= sqldrivers
!winrt:qtHaveModule(network): SUBDIRS += bearer
qtHaveModule(gui): SUBDIRS *= imageformats platforms platforminputcontexts platformthemes generic
+qtHaveModule(widgets): SUBDIRS *= styles
!winrt:!wince*:qtHaveModule(widgets):SUBDIRS += printsupport
diff --git a/src/plugins/printsupport/cups/main.cpp b/src/plugins/printsupport/cups/main.cpp
index 5a7b9d7440..d404b3e1c6 100644
--- a/src/plugins/printsupport/cups/main.cpp
+++ b/src/plugins/printsupport/cups/main.cpp
@@ -48,7 +48,7 @@ class QCupsPrinterSupportPlugin : public QPlatformPrinterSupportPlugin
public:
QStringList keys() const;
- QPlatformPrinterSupport *create(const QString &);
+ QPlatformPrinterSupport *create(const QString &) Q_DECL_OVERRIDE;
};
QStringList QCupsPrinterSupportPlugin::keys() const
diff --git a/src/plugins/printsupport/cups/qcupsprintengine_p.h b/src/plugins/printsupport/cups/qcupsprintengine_p.h
index a083b1840a..e11db972aa 100644
--- a/src/plugins/printsupport/cups/qcupsprintengine_p.h
+++ b/src/plugins/printsupport/cups/qcupsprintengine_p.h
@@ -68,8 +68,8 @@ public:
virtual ~QCupsPrintEngine();
// reimplementations QPdfPrintEngine
- void setProperty(PrintEnginePropertyKey key, const QVariant &value);
- QVariant property(PrintEnginePropertyKey key) const;
+ void setProperty(PrintEnginePropertyKey key, const QVariant &value) Q_DECL_OVERRIDE;
+ QVariant property(PrintEnginePropertyKey key) const Q_DECL_OVERRIDE;
// end reimplementations QPdfPrintEngine
private:
@@ -83,8 +83,8 @@ public:
QCupsPrintEnginePrivate(QPrinter::PrinterMode m);
~QCupsPrintEnginePrivate();
- bool openPrintDevice();
- void closePrintDevice();
+ bool openPrintDevice() Q_DECL_OVERRIDE;
+ void closePrintDevice() Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QCupsPrintEnginePrivate)
diff --git a/src/plugins/sqldrivers/mysql/main.cpp b/src/plugins/sqldrivers/mysql/main.cpp
index 9448db59b1..2bc6e45a38 100644
--- a/src/plugins/sqldrivers/mysql/main.cpp
+++ b/src/plugins/sqldrivers/mysql/main.cpp
@@ -45,7 +45,7 @@ class QMYSQLDriverPlugin : public QSqlDriverPlugin
public:
QMYSQLDriverPlugin();
- QSqlDriver* create(const QString &);
+ QSqlDriver* create(const QString &) Q_DECL_OVERRIDE;
};
QMYSQLDriverPlugin::QMYSQLDriverPlugin()
diff --git a/src/plugins/sqldrivers/psql/main.cpp b/src/plugins/sqldrivers/psql/main.cpp
index 49217e8f1e..3bbb0a3a4e 100644
--- a/src/plugins/sqldrivers/psql/main.cpp
+++ b/src/plugins/sqldrivers/psql/main.cpp
@@ -45,7 +45,7 @@ class QPSQLDriverPlugin : public QSqlDriverPlugin
public:
QPSQLDriverPlugin();
- QSqlDriver* create(const QString &);
+ QSqlDriver* create(const QString &) Q_DECL_OVERRIDE;
};
QPSQLDriverPlugin::QPSQLDriverPlugin()
diff --git a/src/plugins/sqldrivers/sqlite/smain.cpp b/src/plugins/sqldrivers/sqlite/smain.cpp
index 3b0ca5aaba..2d040ff5d6 100644
--- a/src/plugins/sqldrivers/sqlite/smain.cpp
+++ b/src/plugins/sqldrivers/sqlite/smain.cpp
@@ -45,7 +45,7 @@ class QSQLiteDriverPlugin : public QSqlDriverPlugin
public:
QSQLiteDriverPlugin();
- QSqlDriver* create(const QString &);
+ QSqlDriver* create(const QString &) Q_DECL_OVERRIDE;
};
QSQLiteDriverPlugin::QSQLiteDriverPlugin()
diff --git a/src/plugins/styles/bb10style/bb10lightstyle.qrc b/src/plugins/styles/bb10style/bb10lightstyle.qrc
new file mode 100644
index 0000000000..0777e009bb
--- /dev/null
+++ b/src/plugins/styles/bb10style/bb10lightstyle.qrc
@@ -0,0 +1,54 @@
+<RCC>
+ <qresource prefix="/">
+ <file>light/button/core_button_disabled.png</file>
+ <file>light/button/core_button_inactive.png</file>
+ <file>light/button/core_button_pressed.png</file>
+ <file>light/checkbox/core_checkbox_checked.png</file>
+ <file>light/checkbox/core_checkbox_disabled.png</file>
+ <file>light/checkbox/core_checkbox_disabledchecked.png</file>
+ <file>light/checkbox/core_checkbox_enabled.png</file>
+ <file>light/checkbox/core_checkbox_pressed.png</file>
+ <file>light/checkbox/core_checkbox_pressedchecked.png</file>
+ <file>light/radiobutton/core_radiobutton_checked.png</file>
+ <file>light/radiobutton/core_radiobutton_disabled.png</file>
+ <file>light/radiobutton/core_radiobutton_disabledchecked.png</file>
+ <file>light/radiobutton/core_radiobutton_enabled.png</file>
+ <file>light/radiobutton/core_radiobutton_pressed.png</file>
+ <file>light/slider/core_slider_active.png</file>
+ <file>light/slider/core_slider_disabled.png</file>
+ <file>light/slider/core_slider_handle.png</file>
+ <file>light/slider/core_slider_handle_disabled.png</file>
+ <file>light/slider/core_slider_handle_pressed.png</file>
+ <file>light/slider/core_slider_inactive.png</file>
+ <file>light/slider/core_slider_vactive.png</file>
+ <file>light/slider/core_slider_vdisabled.png</file>
+ <file>light/slider/core_slider_vinactive.png</file>
+ <file>light/slider/core_slider_black.png</file>
+ <file>light/slider/core_slider_enabled.png</file>
+ <file>light/slider/core_slider_vblack.png</file>
+ <file>light/slider/core_slider_venabled.png</file>
+ <file>light/button/core_button_active.png</file>
+ <file>light/lineedit/core_textinput_bg.png</file>
+ <file>light/lineedit/core_textinput_bg_disabled.png</file>
+ <file>light/lineedit/core_textinput_bg_focused.png</file>
+ <file>light/progressbar/core_progressindicator_bg.png</file>
+ <file>light/progressbar/core_progressindicator_complete.png</file>
+ <file>light/progressbar/core_progressindicator_fill.png</file>
+ <file>light/progressbar/core_progressindicator_vbg.png</file>
+ <file>light/progressbar/core_progressindicator_vcomplete.png</file>
+ <file>light/progressbar/core_progressindicator_vfill.png</file>
+ <file>light/combobox/core_dropdown_button.png</file>
+ <file>light/combobox/core_dropdown_button_arrowdown.png</file>
+ <file>light/combobox/core_dropdown_button_arrowdown_pressed.png</file>
+ <file>light/combobox/core_dropdown_button_arrowup.png</file>
+ <file>light/combobox/core_dropdown_button_disabled.png</file>
+ <file>light/combobox/core_dropdown_button_pressed.png</file>
+ <file>light/combobox/core_dropdown_checkmark.png</file>
+ <file>light/combobox/core_dropdown_divider.png</file>
+ <file>light/combobox/core_dropdown_menu.png</file>
+ <file>light/combobox/core_dropdown_menuup.png</file>
+ <file>light/combobox/core_listitem_active.png</file>
+ <file>light/listitem/core_listitem_active.png</file>
+ <file>light/listitem/core_listitem_divider.png</file>
+ </qresource>
+</RCC>
diff --git a/src/plugins/styles/bb10style/bb10style.pro b/src/plugins/styles/bb10style/bb10style.pro
new file mode 100644
index 0000000000..ad35df6de7
--- /dev/null
+++ b/src/plugins/styles/bb10style/bb10style.pro
@@ -0,0 +1,28 @@
+TARGET = bb10styleplugin
+
+PLUGIN_TYPE = styles
+PLUGIN_CLASS_NAME = BlackBerry10StylePlugin
+load(qt_plugin)
+
+INCLUDEPATH += $$PWD
+
+QT += widgets
+
+HEADERS += \
+ qpixmapstyle.h \
+ qbb10brightstyle.h \
+ qbb10darkstyle.h \
+ qbb10styleplugin.h
+
+SOURCES += \
+ qpixmapstyle.cpp \
+ qbb10brightstyle.cpp \
+ qbb10darkstyle.cpp \
+ qbb10styleplugin.cpp
+
+RESOURCES += \
+ qbb10brightstyle.qrc \
+ qbb10darkstyle.qrc
+
+OTHER_FILES += qbb10styleplugin.json
+
diff --git a/src/plugins/styles/bb10style/bright/button/core_button_disabled.png b/src/plugins/styles/bb10style/bright/button/core_button_disabled.png
new file mode 100644
index 0000000000..578a2383b8
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/button/core_button_disabled.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/button/core_button_disabled_selected.png b/src/plugins/styles/bb10style/bright/button/core_button_disabled_selected.png
new file mode 100644
index 0000000000..7cd998af46
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/button/core_button_disabled_selected.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/button/core_button_enabled_selected.png b/src/plugins/styles/bb10style/bright/button/core_button_enabled_selected.png
new file mode 100644
index 0000000000..ff0850f616
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/button/core_button_enabled_selected.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/button/core_button_inactive.png b/src/plugins/styles/bb10style/bright/button/core_button_inactive.png
new file mode 100755
index 0000000000..7769f15e44
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/button/core_button_inactive.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/button/core_button_pressed.png b/src/plugins/styles/bb10style/bright/button/core_button_pressed.png
new file mode 100755
index 0000000000..59b5bfa7c2
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/button/core_button_pressed.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/checkbox/core_checkbox_checked.png b/src/plugins/styles/bb10style/bright/checkbox/core_checkbox_checked.png
new file mode 100644
index 0000000000..c59f60633c
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/checkbox/core_checkbox_checked.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/checkbox/core_checkbox_disabled.png b/src/plugins/styles/bb10style/bright/checkbox/core_checkbox_disabled.png
new file mode 100644
index 0000000000..49d9cfdf94
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/checkbox/core_checkbox_disabled.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/checkbox/core_checkbox_disabled_checked.png b/src/plugins/styles/bb10style/bright/checkbox/core_checkbox_disabled_checked.png
new file mode 100644
index 0000000000..35751553e1
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/checkbox/core_checkbox_disabled_checked.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/checkbox/core_checkbox_enabled.png b/src/plugins/styles/bb10style/bright/checkbox/core_checkbox_enabled.png
new file mode 100644
index 0000000000..2a0c56b503
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/checkbox/core_checkbox_enabled.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/checkbox/core_checkbox_pressed.png b/src/plugins/styles/bb10style/bright/checkbox/core_checkbox_pressed.png
new file mode 100755
index 0000000000..f1c2ee3bed
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/checkbox/core_checkbox_pressed.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/checkbox/core_checkbox_pressed_checked.png b/src/plugins/styles/bb10style/bright/checkbox/core_checkbox_pressed_checked.png
new file mode 100644
index 0000000000..d58df47cbf
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/checkbox/core_checkbox_pressed_checked.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/combobox/core_dropdown_button.png b/src/plugins/styles/bb10style/bright/combobox/core_dropdown_button.png
new file mode 100644
index 0000000000..1aa844309f
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/combobox/core_dropdown_button.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/combobox/core_dropdown_button_arrowdown.png b/src/plugins/styles/bb10style/bright/combobox/core_dropdown_button_arrowdown.png
new file mode 100644
index 0000000000..9ac049fb3d
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/combobox/core_dropdown_button_arrowdown.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/combobox/core_dropdown_button_arrowdown_pressed.png b/src/plugins/styles/bb10style/bright/combobox/core_dropdown_button_arrowdown_pressed.png
new file mode 100644
index 0000000000..d11af56b71
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/combobox/core_dropdown_button_arrowdown_pressed.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/combobox/core_dropdown_button_arrowup.png b/src/plugins/styles/bb10style/bright/combobox/core_dropdown_button_arrowup.png
new file mode 100644
index 0000000000..d10779d8d7
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/combobox/core_dropdown_button_arrowup.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/combobox/core_dropdown_button_disabled.png b/src/plugins/styles/bb10style/bright/combobox/core_dropdown_button_disabled.png
new file mode 100644
index 0000000000..f9e1c9465b
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/combobox/core_dropdown_button_disabled.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/combobox/core_dropdown_button_pressed.png b/src/plugins/styles/bb10style/bright/combobox/core_dropdown_button_pressed.png
new file mode 100644
index 0000000000..27a321e387
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/combobox/core_dropdown_button_pressed.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/combobox/core_dropdown_checkmark.png b/src/plugins/styles/bb10style/bright/combobox/core_dropdown_checkmark.png
new file mode 100644
index 0000000000..a8270aed56
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/combobox/core_dropdown_checkmark.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/combobox/core_dropdown_divider.png b/src/plugins/styles/bb10style/bright/combobox/core_dropdown_divider.png
new file mode 100644
index 0000000000..0198293ad6
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/combobox/core_dropdown_divider.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/combobox/core_dropdown_menu.png b/src/plugins/styles/bb10style/bright/combobox/core_dropdown_menu.png
new file mode 100644
index 0000000000..47e7b2d4b6
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/combobox/core_dropdown_menu.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/combobox/core_dropdown_menuup.png b/src/plugins/styles/bb10style/bright/combobox/core_dropdown_menuup.png
new file mode 100644
index 0000000000..2bde84e71d
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/combobox/core_dropdown_menuup.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/combobox/core_listitem_active.png b/src/plugins/styles/bb10style/bright/combobox/core_listitem_active.png
new file mode 100644
index 0000000000..4935d13c05
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/combobox/core_listitem_active.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/lineedit/core_textinput_bg.png b/src/plugins/styles/bb10style/bright/lineedit/core_textinput_bg.png
new file mode 100755
index 0000000000..07b8ea21bf
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/lineedit/core_textinput_bg.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/lineedit/core_textinput_bg_disabled.png b/src/plugins/styles/bb10style/bright/lineedit/core_textinput_bg_disabled.png
new file mode 100644
index 0000000000..ab1083e9fa
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/lineedit/core_textinput_bg_disabled.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/lineedit/core_textinput_bg_highlight.png b/src/plugins/styles/bb10style/bright/lineedit/core_textinput_bg_highlight.png
new file mode 100755
index 0000000000..55f8aee066
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/lineedit/core_textinput_bg_highlight.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/listitem/core_listitem_active.png b/src/plugins/styles/bb10style/bright/listitem/core_listitem_active.png
new file mode 100755
index 0000000000..34daccc27e
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/listitem/core_listitem_active.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/listitem/core_listitem_divider.png b/src/plugins/styles/bb10style/bright/listitem/core_listitem_divider.png
new file mode 100755
index 0000000000..7a1e22321d
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/listitem/core_listitem_divider.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/progressbar/core_progressindicator_bg.png b/src/plugins/styles/bb10style/bright/progressbar/core_progressindicator_bg.png
new file mode 100755
index 0000000000..3ff930dea7
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/progressbar/core_progressindicator_bg.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/progressbar/core_progressindicator_complete.png b/src/plugins/styles/bb10style/bright/progressbar/core_progressindicator_complete.png
new file mode 100644
index 0000000000..87974668ff
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/progressbar/core_progressindicator_complete.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/progressbar/core_progressindicator_fill.png b/src/plugins/styles/bb10style/bright/progressbar/core_progressindicator_fill.png
new file mode 100644
index 0000000000..8ff257dad3
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/progressbar/core_progressindicator_fill.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/progressbar/core_progressindicator_vbg.png b/src/plugins/styles/bb10style/bright/progressbar/core_progressindicator_vbg.png
new file mode 100644
index 0000000000..66cf8cac8f
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/progressbar/core_progressindicator_vbg.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/progressbar/core_progressindicator_vcomplete.png b/src/plugins/styles/bb10style/bright/progressbar/core_progressindicator_vcomplete.png
new file mode 100644
index 0000000000..f18e0abafb
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/progressbar/core_progressindicator_vcomplete.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/progressbar/core_progressindicator_vfill.png b/src/plugins/styles/bb10style/bright/progressbar/core_progressindicator_vfill.png
new file mode 100644
index 0000000000..94e388a7aa
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/progressbar/core_progressindicator_vfill.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/radiobutton/core_radiobutton_checked.png b/src/plugins/styles/bb10style/bright/radiobutton/core_radiobutton_checked.png
new file mode 100644
index 0000000000..5dc5e52d88
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/radiobutton/core_radiobutton_checked.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/radiobutton/core_radiobutton_disabled.png b/src/plugins/styles/bb10style/bright/radiobutton/core_radiobutton_disabled.png
new file mode 100644
index 0000000000..077aa79c65
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/radiobutton/core_radiobutton_disabled.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/radiobutton/core_radiobutton_disabled_checked.png b/src/plugins/styles/bb10style/bright/radiobutton/core_radiobutton_disabled_checked.png
new file mode 100644
index 0000000000..439499040a
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/radiobutton/core_radiobutton_disabled_checked.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/radiobutton/core_radiobutton_inactive.png b/src/plugins/styles/bb10style/bright/radiobutton/core_radiobutton_inactive.png
new file mode 100755
index 0000000000..cb4c6a8136
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/radiobutton/core_radiobutton_inactive.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/radiobutton/core_radiobutton_pressed.png b/src/plugins/styles/bb10style/bright/radiobutton/core_radiobutton_pressed.png
new file mode 100755
index 0000000000..88fd1344d2
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/radiobutton/core_radiobutton_pressed.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/scrollbar/core_scrollbar.png b/src/plugins/styles/bb10style/bright/scrollbar/core_scrollbar.png
new file mode 100755
index 0000000000..79154e0568
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/scrollbar/core_scrollbar.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/scrollbar/core_scrollbar_v.png b/src/plugins/styles/bb10style/bright/scrollbar/core_scrollbar_v.png
new file mode 100644
index 0000000000..169a4e1656
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/scrollbar/core_scrollbar_v.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/slider/core_slider_active.png b/src/plugins/styles/bb10style/bright/slider/core_slider_active.png
new file mode 100644
index 0000000000..c23c0ebc26
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/slider/core_slider_active.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/slider/core_slider_cache.png b/src/plugins/styles/bb10style/bright/slider/core_slider_cache.png
new file mode 100644
index 0000000000..6b7224d702
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/slider/core_slider_cache.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/slider/core_slider_disabled.png b/src/plugins/styles/bb10style/bright/slider/core_slider_disabled.png
new file mode 100644
index 0000000000..9de7567e68
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/slider/core_slider_disabled.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/slider/core_slider_enabled.png b/src/plugins/styles/bb10style/bright/slider/core_slider_enabled.png
new file mode 100644
index 0000000000..ad5c35076c
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/slider/core_slider_enabled.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/slider/core_slider_handle.png b/src/plugins/styles/bb10style/bright/slider/core_slider_handle.png
new file mode 100644
index 0000000000..076e272794
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/slider/core_slider_handle.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/slider/core_slider_handle_disabled.png b/src/plugins/styles/bb10style/bright/slider/core_slider_handle_disabled.png
new file mode 100644
index 0000000000..5989fcaaeb
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/slider/core_slider_handle_disabled.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/slider/core_slider_handle_pressed.png b/src/plugins/styles/bb10style/bright/slider/core_slider_handle_pressed.png
new file mode 100755
index 0000000000..8cb79118b9
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/slider/core_slider_handle_pressed.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/slider/core_slider_inactive.png b/src/plugins/styles/bb10style/bright/slider/core_slider_inactive.png
new file mode 100644
index 0000000000..8836534923
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/slider/core_slider_inactive.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/slider/core_slider_vactive.png b/src/plugins/styles/bb10style/bright/slider/core_slider_vactive.png
new file mode 100644
index 0000000000..03062326f2
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/slider/core_slider_vactive.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/slider/core_slider_vcache.png b/src/plugins/styles/bb10style/bright/slider/core_slider_vcache.png
new file mode 100644
index 0000000000..b0d94d7127
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/slider/core_slider_vcache.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/slider/core_slider_vdisabled.png b/src/plugins/styles/bb10style/bright/slider/core_slider_vdisabled.png
new file mode 100644
index 0000000000..ce99b1a3ac
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/slider/core_slider_vdisabled.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/slider/core_slider_venabled.png b/src/plugins/styles/bb10style/bright/slider/core_slider_venabled.png
new file mode 100644
index 0000000000..910b6627d4
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/slider/core_slider_venabled.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/bright/slider/core_slider_vinactive.png b/src/plugins/styles/bb10style/bright/slider/core_slider_vinactive.png
new file mode 100644
index 0000000000..18a9819af8
--- /dev/null
+++ b/src/plugins/styles/bb10style/bright/slider/core_slider_vinactive.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/button/core_button_disabled.png b/src/plugins/styles/bb10style/dark/button/core_button_disabled.png
new file mode 100644
index 0000000000..79245dbf11
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/button/core_button_disabled.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/button/core_button_disabled_selected.png b/src/plugins/styles/bb10style/dark/button/core_button_disabled_selected.png
new file mode 100644
index 0000000000..5eb86b70f3
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/button/core_button_disabled_selected.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/button/core_button_enabled_selected.png b/src/plugins/styles/bb10style/dark/button/core_button_enabled_selected.png
new file mode 100644
index 0000000000..7b1a6ce40b
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/button/core_button_enabled_selected.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/button/core_button_inactive.png b/src/plugins/styles/bb10style/dark/button/core_button_inactive.png
new file mode 100755
index 0000000000..97842e1ac4
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/button/core_button_inactive.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/button/core_button_pressed.png b/src/plugins/styles/bb10style/dark/button/core_button_pressed.png
new file mode 100755
index 0000000000..c149b64a26
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/button/core_button_pressed.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/checkbox/core_checkbox_checked.png b/src/plugins/styles/bb10style/dark/checkbox/core_checkbox_checked.png
new file mode 100644
index 0000000000..5a8af33094
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/checkbox/core_checkbox_checked.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/checkbox/core_checkbox_disabled.png b/src/plugins/styles/bb10style/dark/checkbox/core_checkbox_disabled.png
new file mode 100644
index 0000000000..74a24522fa
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/checkbox/core_checkbox_disabled.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/checkbox/core_checkbox_disabled_checked.png b/src/plugins/styles/bb10style/dark/checkbox/core_checkbox_disabled_checked.png
new file mode 100644
index 0000000000..1e953221b6
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/checkbox/core_checkbox_disabled_checked.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/checkbox/core_checkbox_enabled.png b/src/plugins/styles/bb10style/dark/checkbox/core_checkbox_enabled.png
new file mode 100644
index 0000000000..5e51e7f39b
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/checkbox/core_checkbox_enabled.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/checkbox/core_checkbox_pressed.png b/src/plugins/styles/bb10style/dark/checkbox/core_checkbox_pressed.png
new file mode 100755
index 0000000000..507a77b3ea
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/checkbox/core_checkbox_pressed.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/checkbox/core_checkbox_pressed_checked.png b/src/plugins/styles/bb10style/dark/checkbox/core_checkbox_pressed_checked.png
new file mode 100644
index 0000000000..7fa85428a0
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/checkbox/core_checkbox_pressed_checked.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/combobox/core_dropdown_button.png b/src/plugins/styles/bb10style/dark/combobox/core_dropdown_button.png
new file mode 100644
index 0000000000..a68d93acb5
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/combobox/core_dropdown_button.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/combobox/core_dropdown_button_arrowdown.png b/src/plugins/styles/bb10style/dark/combobox/core_dropdown_button_arrowdown.png
new file mode 100644
index 0000000000..4c1d085360
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/combobox/core_dropdown_button_arrowdown.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/combobox/core_dropdown_button_arrowdown_pressed.png b/src/plugins/styles/bb10style/dark/combobox/core_dropdown_button_arrowdown_pressed.png
new file mode 100644
index 0000000000..1ee578e07c
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/combobox/core_dropdown_button_arrowdown_pressed.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/combobox/core_dropdown_button_arrowup.png b/src/plugins/styles/bb10style/dark/combobox/core_dropdown_button_arrowup.png
new file mode 100644
index 0000000000..3239ef4bd6
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/combobox/core_dropdown_button_arrowup.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/combobox/core_dropdown_button_disabled.png b/src/plugins/styles/bb10style/dark/combobox/core_dropdown_button_disabled.png
new file mode 100644
index 0000000000..af6793b87c
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/combobox/core_dropdown_button_disabled.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/combobox/core_dropdown_button_pressed.png b/src/plugins/styles/bb10style/dark/combobox/core_dropdown_button_pressed.png
new file mode 100644
index 0000000000..df6d402554
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/combobox/core_dropdown_button_pressed.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/combobox/core_dropdown_checkmark.png b/src/plugins/styles/bb10style/dark/combobox/core_dropdown_checkmark.png
new file mode 100644
index 0000000000..578c80aa5f
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/combobox/core_dropdown_checkmark.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/combobox/core_dropdown_divider.png b/src/plugins/styles/bb10style/dark/combobox/core_dropdown_divider.png
new file mode 100644
index 0000000000..43b1025d36
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/combobox/core_dropdown_divider.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/combobox/core_dropdown_menu.png b/src/plugins/styles/bb10style/dark/combobox/core_dropdown_menu.png
new file mode 100644
index 0000000000..1f52362050
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/combobox/core_dropdown_menu.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/combobox/core_dropdown_menuup.png b/src/plugins/styles/bb10style/dark/combobox/core_dropdown_menuup.png
new file mode 100644
index 0000000000..62c7a2e558
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/combobox/core_dropdown_menuup.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/combobox/core_listitem_active.png b/src/plugins/styles/bb10style/dark/combobox/core_listitem_active.png
new file mode 100644
index 0000000000..1df4a7aad9
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/combobox/core_listitem_active.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/lineedit/core_textinput_bg.png b/src/plugins/styles/bb10style/dark/lineedit/core_textinput_bg.png
new file mode 100755
index 0000000000..07b8ea21bf
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/lineedit/core_textinput_bg.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/lineedit/core_textinput_bg_disabled.png b/src/plugins/styles/bb10style/dark/lineedit/core_textinput_bg_disabled.png
new file mode 100644
index 0000000000..6bcaf91f87
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/lineedit/core_textinput_bg_disabled.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/lineedit/core_textinput_bg_highlight.png b/src/plugins/styles/bb10style/dark/lineedit/core_textinput_bg_highlight.png
new file mode 100755
index 0000000000..9b115897e8
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/lineedit/core_textinput_bg_highlight.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/listitem/core_listitem_active.png b/src/plugins/styles/bb10style/dark/listitem/core_listitem_active.png
new file mode 100755
index 0000000000..52aa4e4aa2
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/listitem/core_listitem_active.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/listitem/core_listitem_divider.png b/src/plugins/styles/bb10style/dark/listitem/core_listitem_divider.png
new file mode 100755
index 0000000000..39e3a8a4f5
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/listitem/core_listitem_divider.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/progressbar/core_progressindicator_bg.png b/src/plugins/styles/bb10style/dark/progressbar/core_progressindicator_bg.png
new file mode 100755
index 0000000000..95fcafb437
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/progressbar/core_progressindicator_bg.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/progressbar/core_progressindicator_complete.png b/src/plugins/styles/bb10style/dark/progressbar/core_progressindicator_complete.png
new file mode 100644
index 0000000000..e849c8f179
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/progressbar/core_progressindicator_complete.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/progressbar/core_progressindicator_fill.png b/src/plugins/styles/bb10style/dark/progressbar/core_progressindicator_fill.png
new file mode 100644
index 0000000000..e8fd3b0173
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/progressbar/core_progressindicator_fill.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/progressbar/core_progressindicator_vbg.png b/src/plugins/styles/bb10style/dark/progressbar/core_progressindicator_vbg.png
new file mode 100644
index 0000000000..1433f3ec33
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/progressbar/core_progressindicator_vbg.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/progressbar/core_progressindicator_vcomplete.png b/src/plugins/styles/bb10style/dark/progressbar/core_progressindicator_vcomplete.png
new file mode 100644
index 0000000000..d750e4671c
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/progressbar/core_progressindicator_vcomplete.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/progressbar/core_progressindicator_vfill.png b/src/plugins/styles/bb10style/dark/progressbar/core_progressindicator_vfill.png
new file mode 100644
index 0000000000..2c3c0a5e6c
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/progressbar/core_progressindicator_vfill.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/radiobutton/core_radiobutton_checked.png b/src/plugins/styles/bb10style/dark/radiobutton/core_radiobutton_checked.png
new file mode 100644
index 0000000000..1721586ac5
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/radiobutton/core_radiobutton_checked.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/radiobutton/core_radiobutton_disabled.png b/src/plugins/styles/bb10style/dark/radiobutton/core_radiobutton_disabled.png
new file mode 100644
index 0000000000..e646c9174b
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/radiobutton/core_radiobutton_disabled.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/radiobutton/core_radiobutton_disabled_checked.png b/src/plugins/styles/bb10style/dark/radiobutton/core_radiobutton_disabled_checked.png
new file mode 100644
index 0000000000..93b3118e8d
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/radiobutton/core_radiobutton_disabled_checked.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/radiobutton/core_radiobutton_inactive.png b/src/plugins/styles/bb10style/dark/radiobutton/core_radiobutton_inactive.png
new file mode 100755
index 0000000000..fd61937d65
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/radiobutton/core_radiobutton_inactive.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/radiobutton/core_radiobutton_pressed.png b/src/plugins/styles/bb10style/dark/radiobutton/core_radiobutton_pressed.png
new file mode 100755
index 0000000000..58a1a57b4c
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/radiobutton/core_radiobutton_pressed.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/scrollbar/core_scrollbar.png b/src/plugins/styles/bb10style/dark/scrollbar/core_scrollbar.png
new file mode 100755
index 0000000000..384f60758a
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/scrollbar/core_scrollbar.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/scrollbar/core_scrollbar_v.png b/src/plugins/styles/bb10style/dark/scrollbar/core_scrollbar_v.png
new file mode 100644
index 0000000000..2542f2acaf
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/scrollbar/core_scrollbar_v.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/slider/core_slider_active.png b/src/plugins/styles/bb10style/dark/slider/core_slider_active.png
new file mode 100644
index 0000000000..6bdb413ced
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/slider/core_slider_active.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/slider/core_slider_cache.png b/src/plugins/styles/bb10style/dark/slider/core_slider_cache.png
new file mode 100644
index 0000000000..eea5b3d78e
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/slider/core_slider_cache.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/slider/core_slider_disabled.png b/src/plugins/styles/bb10style/dark/slider/core_slider_disabled.png
new file mode 100644
index 0000000000..6a233315e4
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/slider/core_slider_disabled.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/slider/core_slider_enabled.png b/src/plugins/styles/bb10style/dark/slider/core_slider_enabled.png
new file mode 100644
index 0000000000..2b297e5ca2
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/slider/core_slider_enabled.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/slider/core_slider_handle.png b/src/plugins/styles/bb10style/dark/slider/core_slider_handle.png
new file mode 100644
index 0000000000..fbd37e5584
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/slider/core_slider_handle.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/slider/core_slider_handle_disabled.png b/src/plugins/styles/bb10style/dark/slider/core_slider_handle_disabled.png
new file mode 100644
index 0000000000..49cb6a42a7
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/slider/core_slider_handle_disabled.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/slider/core_slider_handle_pressed.png b/src/plugins/styles/bb10style/dark/slider/core_slider_handle_pressed.png
new file mode 100755
index 0000000000..803c374015
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/slider/core_slider_handle_pressed.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/slider/core_slider_inactive.png b/src/plugins/styles/bb10style/dark/slider/core_slider_inactive.png
new file mode 100644
index 0000000000..08a1aecb6c
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/slider/core_slider_inactive.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/slider/core_slider_vactive.png b/src/plugins/styles/bb10style/dark/slider/core_slider_vactive.png
new file mode 100644
index 0000000000..c8e467d9e6
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/slider/core_slider_vactive.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/slider/core_slider_vcache.png b/src/plugins/styles/bb10style/dark/slider/core_slider_vcache.png
new file mode 100644
index 0000000000..ff160cbb1d
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/slider/core_slider_vcache.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/slider/core_slider_vdisabled.png b/src/plugins/styles/bb10style/dark/slider/core_slider_vdisabled.png
new file mode 100644
index 0000000000..27d348122b
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/slider/core_slider_vdisabled.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/slider/core_slider_venabled.png b/src/plugins/styles/bb10style/dark/slider/core_slider_venabled.png
new file mode 100644
index 0000000000..ff8a74a19f
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/slider/core_slider_venabled.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/dark/slider/core_slider_vinactive.png b/src/plugins/styles/bb10style/dark/slider/core_slider_vinactive.png
new file mode 100644
index 0000000000..b2b19a5460
--- /dev/null
+++ b/src/plugins/styles/bb10style/dark/slider/core_slider_vinactive.png
Binary files differ
diff --git a/src/plugins/styles/bb10style/qbb10brightstyle.cpp b/src/plugins/styles/bb10style/qbb10brightstyle.cpp
new file mode 100644
index 0000000000..8e6da406ea
--- /dev/null
+++ b/src/plugins/styles/bb10style/qbb10brightstyle.cpp
@@ -0,0 +1,352 @@
+/***************************************************************************
+**
+** Copyright (C) 2014 BlackBerry Limited. All rights reserved.
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qbb10brightstyle.h"
+
+#include <QApplication>
+#include <QFont>
+#include <QStyleOption>
+#include <QProgressBar>
+#include <QComboBox>
+#include <QAbstractItemView>
+#include <QPainter>
+
+QT_BEGIN_NAMESPACE
+
+QBB10BrightStyle::QBB10BrightStyle() :
+ QPixmapStyle()
+{
+ addDescriptor(PB_Enabled,
+ QLatin1String("://bright/button/core_button_inactive.png"),
+ QMargins(13, 13, 13, 13),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+ addDescriptor(PB_Checked,
+ QLatin1String("://bright/button/core_button_enabled_selected.png"),
+ QMargins(13, 13, 13, 13),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+ addDescriptor(PB_Pressed,
+ QLatin1String("://bright/button/core_button_pressed.png"),
+ QMargins(13, 13, 13, 13),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+ addDescriptor(PB_Disabled,
+ QLatin1String("://bright/button/core_button_disabled.png"),
+ QMargins(13, 13, 13, 13),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+ addDescriptor(PB_PressedDisabled,
+ QLatin1String("://bright/button/core_button_disabled_selected.png"),
+ QMargins(13, 13, 13, 13),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+
+ addDescriptor(LE_Enabled,
+ QLatin1String("://bright/lineedit/core_textinput_bg.png"),
+ QMargins(8, 8, 8, 8));
+ addDescriptor(LE_Disabled,
+ QLatin1String("://bright/lineedit/core_textinput_bg_disabled.png"),
+ QMargins(8, 8, 8, 8));
+ addDescriptor(LE_Focused,
+ QLatin1String("://bright/lineedit/core_textinput_bg_highlight.png"),
+ QMargins(8, 8, 8, 8));
+
+ copyDescriptor(LE_Enabled, TE_Enabled);
+ copyDescriptor(LE_Disabled, TE_Disabled);
+ copyDescriptor(LE_Focused, TE_Focused);
+
+ addPixmap(CB_Enabled,
+ QLatin1String("://bright/checkbox/core_checkbox_enabled.png"),
+ QMargins(16, 16, 16, 16));
+ addPixmap(CB_Checked,
+ QLatin1String("://bright/checkbox/core_checkbox_checked.png"),
+ QMargins(16, 16, 16, 16));
+ addPixmap(CB_Pressed,
+ QLatin1String("://bright/checkbox/core_checkbox_pressed.png"),
+ QMargins(16, 16, 16, 16));
+ addPixmap(CB_PressedChecked,
+ QLatin1String("://bright/checkbox/core_checkbox_pressed_checked.png"),
+ QMargins(16, 16, 16, 16));
+ addPixmap(CB_Disabled,
+ QLatin1String("://bright/checkbox/core_checkbox_disabled.png"),
+ QMargins(16, 16, 16, 16));
+ addPixmap(CB_DisabledChecked,
+ QLatin1String("://bright/checkbox/core_checkbox_disabled_checked.png"),
+ QMargins(16, 16, 16, 16));
+
+ addPixmap(RB_Enabled,
+ QLatin1String("://bright/radiobutton/core_radiobutton_inactive.png"),
+ QMargins(16, 16, 16, 16));
+ addPixmap(RB_Checked,
+ QLatin1String("://bright/radiobutton/core_radiobutton_checked.png"),
+ QMargins(16, 16, 16, 16));
+ addPixmap(RB_Pressed,
+ QLatin1String("://bright/radiobutton/core_radiobutton_pressed.png"),
+ QMargins(16, 16, 16, 16));
+ addPixmap(RB_Disabled,
+ QLatin1String("://bright/radiobutton/core_radiobutton_disabled.png"),
+ QMargins(16, 16, 16, 16));
+ addPixmap(RB_DisabledChecked,
+ QLatin1String("://bright/radiobutton/core_radiobutton_disabled_checked.png"),
+ QMargins(16, 16, 16, 16));
+
+ addDescriptor(PB_HBackground,
+ QLatin1String("://bright/progressbar/core_progressindicator_bg.png"),
+ QMargins(10, 10, 10, 10),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+ addDescriptor(PB_HContent,
+ QLatin1String("://bright/progressbar/core_progressindicator_fill.png"),
+ QMargins(10, 10, 10, 10),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+ addDescriptor(PB_HComplete,
+ QLatin1String("://bright/progressbar/core_progressindicator_complete.png"),
+ QMargins(10, 10, 10, 10),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+ addDescriptor(PB_VBackground,
+ QLatin1String("://bright/progressbar/core_progressindicator_vbg.png"),
+ QMargins(10, 10, 10, 10),
+ QTileRules(Qt::StretchTile, Qt::RepeatTile));
+ addDescriptor(PB_VContent,
+ QLatin1String("://bright/progressbar/core_progressindicator_vfill.png"),
+ QMargins(10, 10, 10, 10),
+ QTileRules(Qt::StretchTile, Qt::RepeatTile));
+ addDescriptor(PB_VComplete,
+ QLatin1String("://bright/progressbar/core_progressindicator_vcomplete.png"),
+ QMargins(10, 10, 10, 10),
+ QTileRules(Qt::StretchTile, Qt::RepeatTile));
+
+ addDescriptor(SG_HEnabled,
+ QLatin1String("://bright/slider/core_slider_enabled.png"),
+ QMargins(50, 50, 50, 50),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+ addDescriptor(SG_HDisabled,
+ QLatin1String("://bright/slider/core_slider_disabled.png"),
+ QMargins(50, 50, 50, 50),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+ addDescriptor(SG_HActiveEnabled,
+ QLatin1String("://bright/slider/core_slider_inactive.png"),
+ QMargins(50, 50, 50, 50),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+ addDescriptor(SG_HActivePressed,
+ QLatin1String("://bright/slider/core_slider_active.png"),
+ QMargins(50, 50, 50, 50),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+ addDescriptor(SG_HActiveDisabled,
+ QLatin1String("://bright/slider/core_slider_cache.png"),
+ QMargins(50, 50, 50, 50),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+ addDescriptor(SG_VEnabled,
+ QLatin1String("://bright/slider/core_slider_venabled.png"),
+ QMargins(50, 50, 50, 50),
+ QTileRules(Qt::StretchTile, Qt::RepeatTile));
+ addDescriptor(SG_VDisabled,
+ QLatin1String("://bright/slider/core_slider_vdisabled.png"),
+ QMargins(50, 50, 50, 50),
+ QTileRules(Qt::StretchTile, Qt::RepeatTile));
+ addDescriptor(SG_VActiveEnabled,
+ QLatin1String("://bright/slider/core_slider_vinactive.png"),
+ QMargins(50, 50, 50, 50),
+ QTileRules(Qt::StretchTile, Qt::RepeatTile));
+ addDescriptor(SG_VActivePressed,
+ QLatin1String("://bright/slider/core_slider_vactive.png"),
+ QMargins(50, 50, 50, 50),
+ QTileRules(Qt::StretchTile, Qt::RepeatTile));
+ addDescriptor(SG_VActiveDisabled,
+ QLatin1String("://bright/slider/core_slider_vcache.png"),
+ QMargins(50, 50, 50, 50),
+ QTileRules(Qt::StretchTile, Qt::RepeatTile));
+
+ addPixmap(SH_HEnabled,
+ QLatin1String("://bright/slider/core_slider_handle.png"));
+ addPixmap(SH_HDisabled,
+ QLatin1String("://bright/slider/core_slider_handle_disabled.png"));
+ addPixmap(SH_HPressed,
+ QLatin1String("://bright/slider/core_slider_handle_pressed.png"));
+ addPixmap(SH_VEnabled,
+ QLatin1String("://bright/slider/core_slider_handle.png"));
+ addPixmap(SH_VDisabled,
+ QLatin1String("://bright/slider/core_slider_handle_disabled.png"));
+ addPixmap(SH_VPressed,
+ QLatin1String("://bright/slider/core_slider_handle_pressed.png"));
+
+ addDescriptor(DD_ButtonEnabled,
+ QLatin1String("://bright/combobox/core_dropdown_button.png"),
+ QMargins(14, 14, 14, 14),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+ addDescriptor(DD_ButtonDisabled,
+ QLatin1String("://bright/combobox/core_dropdown_button_disabled.png"),
+ QMargins(14, 14, 14, 14),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+ addDescriptor(DD_ButtonPressed,
+ QLatin1String("://bright/combobox/core_dropdown_button_pressed.png"),
+ QMargins(14, 14, 14, 14),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+ addDescriptor(DD_ItemSelected,
+ QLatin1String("://bright/combobox/core_listitem_active.png"));
+
+ addPixmap(DD_ArrowEnabled,
+ QLatin1String("://bright/combobox/core_dropdown_button_arrowdown.png"),
+ QMargins(35, 39, 35, 39));
+ copyPixmap(DD_ArrowEnabled, DD_ArrowDisabled);
+ addPixmap(DD_ArrowPressed,
+ QLatin1String("://bright/combobox/core_dropdown_button_arrowdown_pressed.png"),
+ QMargins(35, 39, 35, 39));
+ addPixmap(DD_ArrowOpen,
+ QLatin1String("://bright/combobox/core_dropdown_button_arrowup.png"),
+ QMargins(35, 39, 35, 39));
+ addDescriptor(DD_PopupDown,
+ QLatin1String("://bright/combobox/core_dropdown_menu.png"),
+ QMargins(12, 12, 12, 12),
+ QTileRules(Qt::StretchTile, Qt::StretchTile));
+ addDescriptor(DD_PopupUp,
+ QLatin1String("://bright/combobox/core_dropdown_menuup.png"),
+ QMargins(12, 12, 12, 12),
+ QTileRules(Qt::StretchTile, Qt::StretchTile));
+ addPixmap(DD_ItemSeparator,
+ QLatin1String("://bright/combobox/core_dropdown_divider.png"),
+ QMargins(5, 0, 5, 0));
+
+ addDescriptor(ID_Selected,
+ QLatin1String("://bright/listitem/core_listitem_active.png"));
+ addPixmap(ID_Separator,
+ QLatin1String("://bright/listitem/core_listitem_divider.png"));
+
+ addDescriptor(SB_Horizontal,
+ QLatin1String("://bright/scrollbar/core_scrollbar.png"),
+ QMargins(7, 8, 7, 8),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+ addDescriptor(SB_Vertical,
+ QLatin1String("://bright/scrollbar/core_scrollbar_v.png"),
+ QMargins(8, 7, 8, 7),
+ QTileRules(Qt::StretchTile, Qt::RepeatTile));
+}
+
+QBB10BrightStyle::~QBB10BrightStyle()
+{
+}
+
+void QBB10BrightStyle::polish(QApplication *application)
+{
+ QPixmapStyle::polish(application);
+}
+
+void QBB10BrightStyle::polish(QWidget *widget)
+{
+ // Hide the text by default
+ if (QProgressBar *pb = qobject_cast<QProgressBar*>(widget))
+ pb->setTextVisible(false);
+
+ if (QComboBox *cb = qobject_cast<QComboBox*>(widget)) {
+ QAbstractItemView *list = cb->view();
+ QPalette p = list->palette();
+ p.setBrush(QPalette::HighlightedText, p.brush(QPalette::Text));
+ list->setPalette(p);
+ }
+
+ if (qobject_cast<QAbstractItemView*>(widget)) {
+ QPalette p = widget->palette();
+ p.setBrush(QPalette::Disabled, QPalette::HighlightedText, p.brush(QPalette::Text));
+ widget->setPalette(p);
+ }
+
+ QPixmapStyle::polish(widget);
+}
+
+QPalette QBB10BrightStyle::standardPalette() const
+{
+ QPalette p;
+
+ QColor color = QColor(38, 38, 38);
+ p.setBrush(QPalette::ButtonText, color);
+ p.setBrush(QPalette::WindowText, color);
+ p.setBrush(QPalette::Text, color);
+
+ color.setAlpha(179);
+ p.setBrush(QPalette::Disabled, QPalette::ButtonText, color);
+ p.setBrush(QPalette::Disabled, QPalette::WindowText, color);
+ p.setBrush(QPalette::Disabled, QPalette::Text, color);
+
+ p.setColor(QPalette::Window, QColor(248, 248, 248));
+
+ p.setBrush(QPalette::Highlight, QColor(0, 168, 223));
+ p.setBrush(QPalette::HighlightedText, QColor(250, 250,250));
+
+ return p;
+}
+
+void QBB10BrightStyle::drawControl(QStyle::ControlElement element, const QStyleOption *option,
+ QPainter *painter, const QWidget *widget) const
+{
+ switch (element) {
+ case CE_PushButtonLabel:
+ {
+ const bool on = option->state & State_On || option->state & State_Sunken;
+ const QStyleOptionButton *button = qstyleoption_cast<const QStyleOptionButton*>(option);
+ QStyleOptionButton newOpt = *button;
+ if (on)
+ newOpt.palette.setBrush(QPalette::ButtonText, QColor(250, 250, 250));
+ QPixmapStyle::drawControl(CE_PushButtonLabel, &newOpt, painter, widget);
+ break;
+ }
+ case CE_ProgressBarLabel:
+ // Don't draw the progress bar label
+ break;
+ default:
+ QPixmapStyle::drawControl(element, option, painter, widget);
+ }
+}
+
+void QBB10BrightStyle::drawPrimitive(QStyle::PrimitiveElement element, const QStyleOption *option,
+ QPainter *painter, const QWidget *widget) const
+{
+ QPixmapStyle::drawPrimitive(element, option, painter, widget);
+
+ if (element == PE_PanelItemViewItem) {
+ // Draw the checkbox for current item
+ if (widget->property("_pixmap_combobox_list").toBool()
+ && option->state & QStyle::State_Selected) {
+ QPixmap pix(QLatin1String("://bright/combobox/core_dropdown_checkmark.png"));
+ QRect rect = option->rect;
+ const int margin = rect.height() / 2;
+ QPoint pos(rect.right() - margin - pix.width() / 2,
+ rect.top() + margin - pix.height() / 2);
+ painter->drawPixmap(pos, pix);
+ }
+ }
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/styles/bb10style/qbb10brightstyle.h b/src/plugins/styles/bb10style/qbb10brightstyle.h
new file mode 100644
index 0000000000..4a63b1dc48
--- /dev/null
+++ b/src/plugins/styles/bb10style/qbb10brightstyle.h
@@ -0,0 +1,70 @@
+/***************************************************************************
+**
+** Copyright (C) 2014 BlackBerry Limited. All rights reserved.
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QBB10BRIGHTSTYLE_H
+#define QBB10BRIGHTSTYLE_H
+
+#include "qpixmapstyle.h"
+
+QT_BEGIN_NAMESPACE
+
+class QBB10BrightStyle : public QPixmapStyle
+{
+ Q_OBJECT
+
+public:
+ QBB10BrightStyle();
+ ~QBB10BrightStyle();
+
+ void polish(QApplication *application);
+ void polish(QWidget *widget);
+
+ QPalette standardPalette() const;
+
+ void drawControl(ControlElement element, const QStyleOption *option,
+ QPainter *painter, const QWidget *widget = 0) const;
+ void drawPrimitive(PrimitiveElement element, const QStyleOption *option,
+ QPainter *painter, const QWidget *widget) const;
+};
+
+QT_END_NAMESPACE
+
+#endif // QBB10BRIGHTSTYLE_H
diff --git a/src/plugins/styles/bb10style/qbb10brightstyle.qrc b/src/plugins/styles/bb10style/qbb10brightstyle.qrc
new file mode 100644
index 0000000000..2172536fa3
--- /dev/null
+++ b/src/plugins/styles/bb10style/qbb10brightstyle.qrc
@@ -0,0 +1,57 @@
+<RCC>
+ <qresource prefix="/">
+ <file>bright/button/core_button_disabled.png</file>
+ <file>bright/button/core_button_disabled_selected.png</file>
+ <file>bright/button/core_button_inactive.png</file>
+ <file>bright/button/core_button_enabled_selected.png</file>
+ <file>bright/button/core_button_pressed.png</file>
+ <file>bright/checkbox/core_checkbox_checked.png</file>
+ <file>bright/checkbox/core_checkbox_disabled.png</file>
+ <file>bright/checkbox/core_checkbox_disabled_checked.png</file>
+ <file>bright/checkbox/core_checkbox_enabled.png</file>
+ <file>bright/checkbox/core_checkbox_pressed.png</file>
+ <file>bright/checkbox/core_checkbox_pressed_checked.png</file>
+ <file>bright/combobox/core_dropdown_button.png</file>
+ <file>bright/combobox/core_dropdown_button_arrowdown.png</file>
+ <file>bright/combobox/core_dropdown_button_arrowdown_pressed.png</file>
+ <file>bright/combobox/core_dropdown_button_arrowup.png</file>
+ <file>bright/combobox/core_dropdown_button_disabled.png</file>
+ <file>bright/combobox/core_dropdown_button_pressed.png</file>
+ <file>bright/combobox/core_dropdown_checkmark.png</file>
+ <file>bright/combobox/core_dropdown_divider.png</file>
+ <file>bright/combobox/core_dropdown_menu.png</file>
+ <file>bright/combobox/core_dropdown_menuup.png</file>
+ <file>bright/combobox/core_listitem_active.png</file>
+ <file>bright/lineedit/core_textinput_bg.png</file>
+ <file>bright/lineedit/core_textinput_bg_disabled.png</file>
+ <file>bright/lineedit/core_textinput_bg_highlight.png</file>
+ <file>bright/listitem/core_listitem_active.png</file>
+ <file>bright/listitem/core_listitem_divider.png</file>
+ <file>bright/progressbar/core_progressindicator_bg.png</file>
+ <file>bright/progressbar/core_progressindicator_complete.png</file>
+ <file>bright/progressbar/core_progressindicator_fill.png</file>
+ <file>bright/progressbar/core_progressindicator_vbg.png</file>
+ <file>bright/progressbar/core_progressindicator_vcomplete.png</file>
+ <file>bright/progressbar/core_progressindicator_vfill.png</file>
+ <file>bright/radiobutton/core_radiobutton_checked.png</file>
+ <file>bright/radiobutton/core_radiobutton_disabled.png</file>
+ <file>bright/radiobutton/core_radiobutton_disabled_checked.png</file>
+ <file>bright/radiobutton/core_radiobutton_inactive.png</file>
+ <file>bright/radiobutton/core_radiobutton_pressed.png</file>
+ <file>bright/scrollbar/core_scrollbar.png</file>
+ <file>bright/scrollbar/core_scrollbar_v.png</file>
+ <file>bright/slider/core_slider_active.png</file>
+ <file>bright/slider/core_slider_cache.png</file>
+ <file>bright/slider/core_slider_disabled.png</file>
+ <file>bright/slider/core_slider_enabled.png</file>
+ <file>bright/slider/core_slider_handle.png</file>
+ <file>bright/slider/core_slider_handle_disabled.png</file>
+ <file>bright/slider/core_slider_handle_pressed.png</file>
+ <file>bright/slider/core_slider_inactive.png</file>
+ <file>bright/slider/core_slider_vactive.png</file>
+ <file>bright/slider/core_slider_vcache.png</file>
+ <file>bright/slider/core_slider_vdisabled.png</file>
+ <file>bright/slider/core_slider_venabled.png</file>
+ <file>bright/slider/core_slider_vinactive.png</file>
+ </qresource>
+</RCC>
diff --git a/src/plugins/styles/bb10style/qbb10darkstyle.cpp b/src/plugins/styles/bb10style/qbb10darkstyle.cpp
new file mode 100644
index 0000000000..85bf4a7917
--- /dev/null
+++ b/src/plugins/styles/bb10style/qbb10darkstyle.cpp
@@ -0,0 +1,357 @@
+/***************************************************************************
+**
+** Copyright (C) 2014 BlackBerry Limited. All rights reserved.
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qbb10darkstyle.h"
+
+#include <QApplication>
+#include <QFont>
+#include <QStyleOption>
+#include <QProgressBar>
+#include <QComboBox>
+#include <QAbstractItemView>
+#include <QPainter>
+#include <QLineEdit>
+#include <QTextEdit>
+
+QT_BEGIN_NAMESPACE
+
+QBB10DarkStyle::QBB10DarkStyle() :
+ QPixmapStyle()
+{
+ addDescriptor(PB_Enabled,
+ QLatin1String("://dark/button/core_button_inactive.png"),
+ QMargins(13, 13, 13, 13),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+ addDescriptor(PB_Checked,
+ QLatin1String("://dark/button/core_button_enabled_selected.png"),
+ QMargins(13, 13, 13, 13),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+ addDescriptor(PB_Pressed,
+ QLatin1String("://dark/button/core_button_pressed.png"),
+ QMargins(13, 13, 13, 13),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+ addDescriptor(PB_Disabled,
+ QLatin1String("://dark/button/core_button_disabled.png"),
+ QMargins(13, 13, 13, 13),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+ addDescriptor(PB_PressedDisabled,
+ QLatin1String("://dark/button/core_button_disabled_selected.png"),
+ QMargins(13, 13, 13, 13),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+
+ addDescriptor(LE_Enabled,
+ QLatin1String("://dark/lineedit/core_textinput_bg.png"),
+ QMargins(8, 8, 8, 8));
+ addDescriptor(LE_Disabled,
+ QLatin1String("://dark/lineedit/core_textinput_bg_disabled.png"),
+ QMargins(8, 8, 8, 8));
+ addDescriptor(LE_Focused,
+ QLatin1String("://dark/lineedit/core_textinput_bg_highlight.png"),
+ QMargins(8, 8, 8, 8));
+
+ copyDescriptor(LE_Enabled, TE_Enabled);
+ copyDescriptor(LE_Disabled, TE_Disabled);
+ copyDescriptor(LE_Focused, TE_Focused);
+
+ addPixmap(CB_Enabled,
+ QLatin1String("://dark/checkbox/core_checkbox_enabled.png"),
+ QMargins(16, 16, 16, 16));
+ addPixmap(CB_Checked,
+ QLatin1String("://dark/checkbox/core_checkbox_checked.png"),
+ QMargins(16, 16, 16, 16));
+ addPixmap(CB_Pressed,
+ QLatin1String("://dark/checkbox/core_checkbox_pressed.png"),
+ QMargins(16, 16, 16, 16));
+ addPixmap(CB_PressedChecked,
+ QLatin1String("://dark/checkbox/core_checkbox_pressed_checked.png"),
+ QMargins(16, 16, 16, 16));
+ addPixmap(CB_Disabled,
+ QLatin1String("://dark/checkbox/core_checkbox_disabled.png"),
+ QMargins(16, 16, 16, 16));
+ addPixmap(CB_DisabledChecked,
+ QLatin1String("://dark/checkbox/core_checkbox_disabled_checked.png"),
+ QMargins(16, 16, 16, 16));
+
+ addPixmap(RB_Enabled,
+ QLatin1String("://dark/radiobutton/core_radiobutton_inactive.png"),
+ QMargins(16, 16, 16, 16));
+ addPixmap(RB_Checked,
+ QLatin1String("://dark/radiobutton/core_radiobutton_checked.png"),
+ QMargins(16, 16, 16, 16));
+ addPixmap(RB_Pressed,
+ QLatin1String("://dark/radiobutton/core_radiobutton_pressed.png"),
+ QMargins(16, 16, 16, 16));
+ addPixmap(RB_Disabled,
+ QLatin1String("://dark/radiobutton/core_radiobutton_disabled.png"),
+ QMargins(16, 16, 16, 16));
+ addPixmap(RB_DisabledChecked,
+ QLatin1String("://dark/radiobutton/core_radiobutton_disabled_checked.png"),
+ QMargins(16, 16, 16, 16));
+
+ addDescriptor(PB_HBackground,
+ QLatin1String("://dark/progressbar/core_progressindicator_bg.png"),
+ QMargins(10, 10, 10, 10),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+ addDescriptor(PB_HContent,
+ QLatin1String("://dark/progressbar/core_progressindicator_fill.png"),
+ QMargins(10, 10, 10, 10),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+ addDescriptor(PB_HComplete,
+ QLatin1String("://dark/progressbar/core_progressindicator_complete.png"),
+ QMargins(10, 10, 10, 10),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+ addDescriptor(PB_VBackground,
+ QLatin1String("://dark/progressbar/core_progressindicator_vbg.png"),
+ QMargins(10, 10, 10, 10),
+ QTileRules(Qt::StretchTile, Qt::RepeatTile));
+ addDescriptor(PB_VContent,
+ QLatin1String("://dark/progressbar/core_progressindicator_vfill.png"),
+ QMargins(10, 10, 10, 10),
+ QTileRules(Qt::StretchTile, Qt::RepeatTile));
+ addDescriptor(PB_VComplete,
+ QLatin1String("://dark/progressbar/core_progressindicator_vcomplete.png"),
+ QMargins(10, 10, 10, 10),
+ QTileRules(Qt::StretchTile, Qt::RepeatTile));
+
+ addDescriptor(SG_HEnabled,
+ QLatin1String("://dark/slider/core_slider_enabled.png"),
+ QMargins(50, 50, 50, 50),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+ addDescriptor(SG_HDisabled,
+ QLatin1String("://dark/slider/core_slider_disabled.png"),
+ QMargins(50, 50, 50, 50),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+ addDescriptor(SG_HActiveEnabled,
+ QLatin1String("://dark/slider/core_slider_inactive.png"),
+ QMargins(50, 50, 50, 50),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+ addDescriptor(SG_HActivePressed,
+ QLatin1String("://dark/slider/core_slider_active.png"),
+ QMargins(50, 50, 50, 50),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+ addDescriptor(SG_HActiveDisabled,
+ QLatin1String("://dark/slider/core_slider_cache.png"),
+ QMargins(50, 50, 50, 50),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+ addDescriptor(SG_VEnabled,
+ QLatin1String("://dark/slider/core_slider_venabled.png"),
+ QMargins(50, 50, 50, 50),
+ QTileRules(Qt::StretchTile, Qt::RepeatTile));
+ addDescriptor(SG_VDisabled,
+ QLatin1String("://dark/slider/core_slider_vdisabled.png"),
+ QMargins(50, 50, 50, 50),
+ QTileRules(Qt::StretchTile, Qt::RepeatTile));
+ addDescriptor(SG_VActiveEnabled,
+ QLatin1String("://dark/slider/core_slider_vinactive.png"),
+ QMargins(50, 50, 50, 50),
+ QTileRules(Qt::StretchTile, Qt::RepeatTile));
+ addDescriptor(SG_VActivePressed,
+ QLatin1String("://dark/slider/core_slider_vactive.png"),
+ QMargins(50, 50, 50, 50),
+ QTileRules(Qt::StretchTile, Qt::RepeatTile));
+ addDescriptor(SG_VActiveDisabled,
+ QLatin1String("://dark/slider/core_slider_vcache.png"),
+ QMargins(50, 50, 50, 50),
+ QTileRules(Qt::StretchTile, Qt::RepeatTile));
+
+ addPixmap(SH_HEnabled,
+ QLatin1String("://dark/slider/core_slider_handle.png"));
+ addPixmap(SH_HDisabled,
+ QLatin1String("://dark/slider/core_slider_handle_disabled.png"));
+ addPixmap(SH_HPressed,
+ QLatin1String("://dark/slider/core_slider_handle_pressed.png"));
+ addPixmap(SH_VEnabled,
+ QLatin1String("://dark/slider/core_slider_handle.png"));
+ addPixmap(SH_VDisabled,
+ QLatin1String("://dark/slider/core_slider_handle_disabled.png"));
+ addPixmap(SH_VPressed,
+ QLatin1String("://dark/slider/core_slider_handle_pressed.png"));
+
+ addDescriptor(DD_ButtonEnabled,
+ QLatin1String("://dark/combobox/core_dropdown_button.png"),
+ QMargins(14, 14, 14, 14),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+ addDescriptor(DD_ButtonDisabled,
+ QLatin1String("://dark/combobox/core_dropdown_button_disabled.png"),
+ QMargins(14, 14, 14, 14),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+ addDescriptor(DD_ButtonPressed,
+ QLatin1String("://dark/combobox/core_dropdown_button_pressed.png"),
+ QMargins(14, 14, 14, 14),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+ addDescriptor(DD_ItemSelected,
+ QLatin1String("://dark/combobox/core_listitem_active.png"));
+ addPixmap(DD_ArrowEnabled,
+ QLatin1String("://dark/combobox/core_dropdown_button_arrowdown.png"),
+ QMargins(35, 39, 35, 39));
+ copyPixmap(DD_ArrowEnabled, DD_ArrowDisabled);
+ addPixmap(DD_ArrowPressed,
+ QLatin1String("://dark/combobox/core_dropdown_button_arrowdown_pressed.png"),
+ QMargins(35, 39, 35, 39));
+ addPixmap(DD_ArrowOpen,
+ QLatin1String("://dark/combobox/core_dropdown_button_arrowup.png"),
+ QMargins(35, 39, 35, 39));
+ addDescriptor(DD_PopupDown,
+ QLatin1String("://dark/combobox/core_dropdown_menu.png"),
+ QMargins(12, 12, 12, 12), QTileRules(Qt::StretchTile, Qt::StretchTile));
+ addDescriptor(DD_PopupUp,
+ QLatin1String("://dark/combobox/core_dropdown_menuup.png"),
+ QMargins(12, 12, 12, 12), QTileRules(Qt::StretchTile, Qt::StretchTile));
+ addPixmap(DD_ItemSeparator,
+ QLatin1String("://dark/combobox/core_dropdown_divider.png"),
+ QMargins(5, 0, 5, 0));
+
+ addDescriptor(ID_Selected,
+ QLatin1String("://dark/listitem/core_listitem_active.png"));
+ addPixmap(ID_Separator,
+ QLatin1String("://dark/listitem/core_listitem_divider.png"));
+
+ addDescriptor(SB_Horizontal,
+ QLatin1String("://dark/scrollbar/core_scrollbar.png"),
+ QMargins(7, 8, 7, 8),
+ QTileRules(Qt::RepeatTile, Qt::StretchTile));
+ addDescriptor(SB_Vertical,
+ QLatin1String("://dark/scrollbar/core_scrollbar_v.png"),
+ QMargins(8, 7, 8, 7),
+ QTileRules(Qt::StretchTile, Qt::RepeatTile));
+}
+
+QBB10DarkStyle::~QBB10DarkStyle()
+{
+}
+
+void QBB10DarkStyle::polish(QApplication *application)
+{
+ QPixmapStyle::polish(application);
+}
+
+void QBB10DarkStyle::polish(QWidget *widget)
+{
+ // Hide the text by default
+ if (QProgressBar *pb = qobject_cast<QProgressBar*>(widget))
+ pb->setTextVisible(false);
+
+ if (QComboBox *cb = qobject_cast<QComboBox*>(widget)) {
+ QAbstractItemView *list = cb->view();
+ QPalette p = list->palette();
+ p.setBrush(QPalette::HighlightedText, p.brush(QPalette::Text));
+ list->setPalette(p);
+ }
+
+ if (qobject_cast<QLineEdit*>(widget) || qobject_cast<QTextEdit*>(widget)) {
+ QPalette p = widget->palette();
+ p.setBrush(QPalette::Text, QColor(38, 38, 38));
+ widget->setPalette(p);
+ }
+
+ if (qobject_cast<QAbstractItemView*>(widget)) {
+ QPalette p = widget->palette();
+ p.setBrush(QPalette::Disabled, QPalette::HighlightedText, p.brush(QPalette::Text));
+ widget->setPalette(p);
+ }
+
+ QPixmapStyle::polish(widget);
+}
+
+QPalette QBB10DarkStyle::standardPalette() const
+{
+ QPalette p;
+
+ QColor color = QColor(250, 250, 250);
+ p.setBrush(QPalette::ButtonText, color);
+ p.setBrush(QPalette::WindowText, color);
+ p.setBrush(QPalette::Text, color);
+
+ color.setAlpha(179);
+ p.setBrush(QPalette::Disabled, QPalette::ButtonText, color);
+ p.setBrush(QPalette::Disabled, QPalette::WindowText, color);
+ p.setBrush(QPalette::Disabled, QPalette::Text, color);
+
+ p.setColor(QPalette::Window, QColor(18, 18, 18));
+
+ p.setBrush(QPalette::Highlight, QColor(0, 168, 223));
+ p.setBrush(QPalette::HighlightedText, QColor(250, 250,250));
+
+ return p;
+}
+
+void QBB10DarkStyle::drawControl(QStyle::ControlElement element, const QStyleOption *option,
+ QPainter *painter, const QWidget *widget) const
+{
+ switch (element) {
+ case CE_PushButtonLabel:
+ {
+ const bool on = option->state & State_On || option->state & State_Sunken;
+ const QStyleOptionButton *button = qstyleoption_cast<const QStyleOptionButton*>(option);
+ QStyleOptionButton newOpt = *button;
+ if (on)
+ newOpt.palette.setBrush(QPalette::ButtonText, QColor(38, 38, 38));
+ QPixmapStyle::drawControl(CE_PushButtonLabel, &newOpt, painter, widget);
+ break;
+ }
+ case CE_ProgressBarLabel:
+ // Don't draw the progress bar label
+ break;
+ default:
+ QPixmapStyle::drawControl(element, option, painter, widget);
+ }
+}
+
+void QBB10DarkStyle::drawPrimitive(QStyle::PrimitiveElement element, const QStyleOption *option,
+ QPainter *painter, const QWidget *widget) const
+{
+ QPixmapStyle::drawPrimitive(element, option, painter, widget);
+
+ if (element == PE_PanelItemViewItem) {
+ // Draw the checkbox for current item
+ if (widget->property("_pixmap_combobox_list").toBool()
+ && option->state & QStyle::State_Selected) {
+ QPixmap pix(QLatin1String("://dark/combobox/core_dropdown_checkmark.png"));
+ QRect rect = option->rect;
+ const int margin = rect.height() / 2;
+ QPoint pos(rect.right() - margin - pix.width() / 2,
+ rect.top() + margin - pix.height() / 2);
+ painter->drawPixmap(pos, pix);
+ }
+ }
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/styles/bb10style/qbb10darkstyle.h b/src/plugins/styles/bb10style/qbb10darkstyle.h
new file mode 100644
index 0000000000..1be7b0540c
--- /dev/null
+++ b/src/plugins/styles/bb10style/qbb10darkstyle.h
@@ -0,0 +1,70 @@
+/***************************************************************************
+**
+** Copyright (C) 2014 BlackBerry Limited. All rights reserved.
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QBB10DARKSTYLE_H
+#define QBB10DARKSTYLE_H
+
+#include "qpixmapstyle.h"
+
+QT_BEGIN_NAMESPACE
+
+class QBB10DarkStyle : public QPixmapStyle
+{
+ Q_OBJECT
+
+public:
+ QBB10DarkStyle();
+ ~QBB10DarkStyle();
+
+ void polish(QApplication *application);
+ void polish(QWidget *widget);
+
+ QPalette standardPalette() const;
+
+ void drawControl(ControlElement element, const QStyleOption *option,
+ QPainter *painter, const QWidget *widget = 0) const;
+ void drawPrimitive(PrimitiveElement element, const QStyleOption *option,
+ QPainter *painter, const QWidget *widget) const;
+};
+
+QT_END_NAMESPACE
+
+#endif // QBB10DARKSTYLE_H
diff --git a/src/plugins/styles/bb10style/qbb10darkstyle.qrc b/src/plugins/styles/bb10style/qbb10darkstyle.qrc
new file mode 100644
index 0000000000..31a5236207
--- /dev/null
+++ b/src/plugins/styles/bb10style/qbb10darkstyle.qrc
@@ -0,0 +1,57 @@
+<RCC>
+ <qresource prefix="/">
+ <file>dark/button/core_button_disabled.png</file>
+ <file>dark/button/core_button_disabled_selected.png</file>
+ <file>dark/button/core_button_inactive.png</file>
+ <file>dark/button/core_button_enabled_selected.png</file>
+ <file>dark/button/core_button_pressed.png</file>
+ <file>dark/checkbox/core_checkbox_checked.png</file>
+ <file>dark/checkbox/core_checkbox_disabled.png</file>
+ <file>dark/checkbox/core_checkbox_disabled_checked.png</file>
+ <file>dark/checkbox/core_checkbox_enabled.png</file>
+ <file>dark/checkbox/core_checkbox_pressed.png</file>
+ <file>dark/checkbox/core_checkbox_pressed_checked.png</file>
+ <file>dark/combobox/core_dropdown_button.png</file>
+ <file>dark/combobox/core_dropdown_button_arrowdown.png</file>
+ <file>dark/combobox/core_dropdown_button_arrowdown_pressed.png</file>
+ <file>dark/combobox/core_dropdown_button_arrowup.png</file>
+ <file>dark/combobox/core_dropdown_button_disabled.png</file>
+ <file>dark/combobox/core_dropdown_button_pressed.png</file>
+ <file>dark/combobox/core_dropdown_checkmark.png</file>
+ <file>dark/combobox/core_dropdown_divider.png</file>
+ <file>dark/combobox/core_dropdown_menu.png</file>
+ <file>dark/combobox/core_dropdown_menuup.png</file>
+ <file>dark/combobox/core_listitem_active.png</file>
+ <file>dark/lineedit/core_textinput_bg.png</file>
+ <file>dark/lineedit/core_textinput_bg_disabled.png</file>
+ <file>dark/lineedit/core_textinput_bg_highlight.png</file>
+ <file>dark/listitem/core_listitem_active.png</file>
+ <file>dark/listitem/core_listitem_divider.png</file>
+ <file>dark/progressbar/core_progressindicator_bg.png</file>
+ <file>dark/progressbar/core_progressindicator_complete.png</file>
+ <file>dark/progressbar/core_progressindicator_fill.png</file>
+ <file>dark/progressbar/core_progressindicator_vbg.png</file>
+ <file>dark/progressbar/core_progressindicator_vcomplete.png</file>
+ <file>dark/progressbar/core_progressindicator_vfill.png</file>
+ <file>dark/radiobutton/core_radiobutton_checked.png</file>
+ <file>dark/radiobutton/core_radiobutton_disabled.png</file>
+ <file>dark/radiobutton/core_radiobutton_disabled_checked.png</file>
+ <file>dark/radiobutton/core_radiobutton_inactive.png</file>
+ <file>dark/radiobutton/core_radiobutton_pressed.png</file>
+ <file>dark/scrollbar/core_scrollbar.png</file>
+ <file>dark/scrollbar/core_scrollbar_v.png</file>
+ <file>dark/slider/core_slider_active.png</file>
+ <file>dark/slider/core_slider_cache.png</file>
+ <file>dark/slider/core_slider_disabled.png</file>
+ <file>dark/slider/core_slider_enabled.png</file>
+ <file>dark/slider/core_slider_handle.png</file>
+ <file>dark/slider/core_slider_handle_disabled.png</file>
+ <file>dark/slider/core_slider_handle_pressed.png</file>
+ <file>dark/slider/core_slider_inactive.png</file>
+ <file>dark/slider/core_slider_vactive.png</file>
+ <file>dark/slider/core_slider_vcache.png</file>
+ <file>dark/slider/core_slider_vdisabled.png</file>
+ <file>dark/slider/core_slider_venabled.png</file>
+ <file>dark/slider/core_slider_vinactive.png</file>
+ </qresource>
+</RCC>
diff --git a/src/plugins/styles/bb10style/qbb10styleplugin.cpp b/src/plugins/styles/bb10style/qbb10styleplugin.cpp
new file mode 100644
index 0000000000..eba5e868a2
--- /dev/null
+++ b/src/plugins/styles/bb10style/qbb10styleplugin.cpp
@@ -0,0 +1,74 @@
+/***************************************************************************
+**
+** Copyright (C) 2014 BlackBerry Limited. All rights reserved.
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qbb10styleplugin.h"
+#include "qbb10darkstyle.h"
+#include "qbb10brightstyle.h"
+
+QT_BEGIN_NAMESPACE
+
+QBB10StylePlugin::QBB10StylePlugin()
+{
+}
+
+QBB10StylePlugin::~QBB10StylePlugin()
+{
+}
+
+QStyle *QBB10StylePlugin::create(const QString &key)
+{
+ const QString keyLower(key.toLower());
+ if (keyLower == QLatin1String("bb10bright"))
+ return new QBB10BrightStyle;
+ else if (keyLower == QLatin1String("bb10dark"))
+ return new QBB10DarkStyle;
+
+ return 0;
+}
+
+QStringList QBB10StylePlugin::keys() const
+{
+ return QStringList() << QLatin1String("bb10bright") << QLatin1String("bb10dark");
+}
+
+QT_END_NAMESPACE
+
+#include "moc_qbb10styleplugin.cpp"
diff --git a/src/plugins/styles/bb10style/qbb10styleplugin.h b/src/plugins/styles/bb10style/qbb10styleplugin.h
new file mode 100644
index 0000000000..2bc08d441c
--- /dev/null
+++ b/src/plugins/styles/bb10style/qbb10styleplugin.h
@@ -0,0 +1,64 @@
+/***************************************************************************
+**
+** Copyright (C) 2014 BlackBerry Limited. All rights reserved.
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QBB10STYLEPLUGIN_H
+#define QBB10STYLEPLUGIN_H
+
+#include <QStylePlugin>
+
+QT_BEGIN_NAMESPACE
+
+class QBB10StylePlugin : public QStylePlugin
+{
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID "org.qt-project.Qt.QStyleFactoryInterface" FILE "qbb10styleplugin.json")
+
+public:
+ QBB10StylePlugin();
+ ~QBB10StylePlugin();
+
+ QStyle *create(const QString &key);
+ QStringList keys() const;
+};
+
+QT_END_NAMESPACE
+
+#endif // QBB10STYLEPLUGIN_H
diff --git a/src/plugins/styles/bb10style/qbb10styleplugin.json b/src/plugins/styles/bb10style/qbb10styleplugin.json
new file mode 100644
index 0000000000..8f79b706c3
--- /dev/null
+++ b/src/plugins/styles/bb10style/qbb10styleplugin.json
@@ -0,0 +1,3 @@
+{
+ "Keys": [ "bb10bright", "bb10dark" ]
+}
diff --git a/src/plugins/styles/bb10style/qpixmapstyle.cpp b/src/plugins/styles/bb10style/qpixmapstyle.cpp
new file mode 100644
index 0000000000..e80a1d991c
--- /dev/null
+++ b/src/plugins/styles/bb10style/qpixmapstyle.cpp
@@ -0,0 +1,994 @@
+/***************************************************************************
+**
+** Copyright (C) 2014 BlackBerry Limited. All rights reserved.
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qpixmapstyle.h"
+
+#include <QDebug>
+#include <QTextEdit>
+#include <QStringBuilder>
+#include <QPainter>
+#include <QPixmapCache>
+#include <QStyleOption>
+#include <QString>
+#include <QProgressBar>
+#include <QSlider>
+#include <QEvent>
+#include <QComboBox>
+#include <QAbstractItemView>
+#include <QListView>
+#include <QTreeView>
+#include <QStyledItemDelegate>
+#include <QAbstractScrollArea>
+#include <QScrollBar>
+
+#include <qscroller.h>
+
+QT_BEGIN_NAMESPACE
+
+QPixmapStyle::QPixmapStyle() :
+ QCommonStyle()
+{
+}
+
+QPixmapStyle::~QPixmapStyle()
+{
+}
+
+void QPixmapStyle::polish(QApplication *application)
+{
+ QCommonStyle::polish(application);
+#if defined(Q_WS_WIN)
+ QApplication::setEffectEnabled(Qt::UI_AnimateCombo, false);
+#endif
+}
+
+void QPixmapStyle::polish(QPalette &palette)
+{
+ palette = proxy()->standardPalette();
+}
+
+void QPixmapStyle::polish(QWidget *widget)
+{
+ // Don't fill the interior of the QTextEdit
+ if (qobject_cast<QTextEdit*>(widget)) {
+ QPalette p = widget->palette();
+ p.setBrush(QPalette::Base, Qt::NoBrush);
+ widget->setPalette(p);
+ }
+
+ if (QProgressBar *pb = qobject_cast<QProgressBar*>(widget)) {
+ // Center the text in the progress bar
+ pb->setAlignment(Qt::AlignCenter);
+ // Change the font size if needed, as it's used to compute the minimum size
+ QFont font = pb->font();
+ font.setPixelSize(m_descriptors.value(PB_HBackground).size.height()/2);
+ pb->setFont(font);
+ }
+
+ if (qobject_cast<QSlider*>(widget))
+ widget->installEventFilter(this);
+
+ if (QComboBox *cb = qobject_cast<QComboBox*>(widget)) {
+ widget->installEventFilter(this);
+ // NOTE: This will break if the private API of QComboBox changes drastically
+ // Make sure the popup is created so we can change the frame style
+ QAbstractItemView *list = cb->view();
+ list->setProperty("_pixmap_combobox_list", true);
+ list->setItemDelegate(new QStyledItemDelegate(list));
+ QPalette p = list->palette();
+ p.setBrush(QPalette::Active, QPalette::Base, QBrush(Qt::transparent) );
+ p.setBrush(QPalette::Active, QPalette::AlternateBase, QBrush(Qt::transparent) );
+ p.setBrush(QPalette::Inactive, QPalette::Base, QBrush(Qt::transparent) );
+ p.setBrush(QPalette::Inactive, QPalette::AlternateBase, QBrush(Qt::transparent) );
+ p.setBrush(QPalette::Disabled, QPalette::Base, QBrush(Qt::transparent) );
+ p.setBrush(QPalette::Disabled, QPalette::AlternateBase, QBrush(Qt::transparent) );
+ list->setPalette(p);
+
+ QFrame *frame = qobject_cast<QFrame*>(list->parent());
+ if (frame) {
+ const Descriptor &desc = m_descriptors.value(DD_PopupDown);
+ const Pixmap &pix = m_pixmaps.value(DD_ItemSeparator);
+ frame->setContentsMargins(pix.margins.left(), desc.margins.top(),
+ pix.margins.right(), desc.margins.bottom());
+ frame->setAttribute(Qt::WA_TranslucentBackground);
+#ifdef Q_WS_WIN
+ // FramelessWindowHint is needed on windows to make
+ // WA_TranslucentBackground work properly
+ frame->setWindowFlags(widget->windowFlags() | Qt::FramelessWindowHint);
+#endif
+ }
+ }
+
+ if (qstrcmp(widget->metaObject()->className(),"QComboBoxPrivateContainer") == 0)
+ widget->installEventFilter(this);
+
+ if (QAbstractScrollArea *scrollArea = qobject_cast<QAbstractScrollArea*>(widget)) {
+ scrollArea->viewport()->setAutoFillBackground(false);
+ if (QAbstractItemView *view = qobject_cast<QAbstractItemView*>(scrollArea)) {
+ view->setHorizontalScrollMode(QAbstractItemView::ScrollPerPixel);
+ view->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
+ }
+ QScroller::grabGesture(scrollArea->viewport(), QScroller::LeftMouseButtonGesture);
+ }
+
+ if (qobject_cast<QScrollBar*>(widget))
+ widget->setAttribute(Qt::WA_OpaquePaintEvent, false);
+
+ QCommonStyle::polish(widget);
+}
+
+void QPixmapStyle::unpolish(QWidget *widget)
+{
+ if (qobject_cast<QSlider*>(widget) ||
+ qobject_cast<QComboBox*>(widget)) {
+ widget->removeEventFilter(this);
+ }
+
+ if (qstrcmp(widget->metaObject()->className(),"QComboBoxPrivateContainer") == 0)
+ widget->removeEventFilter(this);
+
+ if (QAbstractScrollArea *scrollArea = qobject_cast<QAbstractScrollArea*>(widget))
+ QScroller::ungrabGesture(scrollArea->viewport());
+
+ QCommonStyle::unpolish(widget);
+}
+
+void QPixmapStyle::drawPrimitive(PrimitiveElement element, const QStyleOption *option,
+ QPainter *painter, const QWidget *widget) const
+{
+ switch (element) {
+ case PE_FrameFocusRect: //disable focus rectangle
+ break;
+ case PE_PanelButtonBevel:
+ case PE_PanelButtonCommand:
+ drawPushButton(option, painter, widget);
+ break;
+ case PE_PanelLineEdit:
+ case PE_FrameLineEdit:
+ drawLineEdit(option, painter, widget);
+ break;
+ case PE_Frame:
+ case PE_FrameDefaultButton:
+ if (qobject_cast<const QTextEdit*>(widget))
+ drawTextEdit(option, painter, widget);
+ break;
+ case PE_IndicatorCheckBox:
+ drawCheckBox(option, painter, widget);
+ break;
+ case PE_IndicatorRadioButton:
+ drawRadioButton(option, painter, widget);
+ break;
+ case PE_PanelItemViewItem:
+ if (qobject_cast<const QListView*>(widget))
+ drawPanelItemViewItem(option, painter, widget);
+ else
+ QCommonStyle::drawPrimitive(element, option, painter, widget);
+ break;
+ default:
+ QCommonStyle::drawPrimitive(element, option, painter, widget);
+ }
+}
+
+void QPixmapStyle::drawControl(ControlElement element, const QStyleOption *option,
+ QPainter *painter, const QWidget *widget) const
+{
+ switch (element) {
+ case CE_ProgressBarGroove:
+ drawProgressBarBackground(option, painter, widget);
+ break;
+ case CE_ProgressBarLabel:
+ drawProgressBarLabel(option, painter, widget);
+ break;
+ case CE_ProgressBarContents:
+ drawProgressBarFill(option, painter, widget);
+ break;
+ case CE_ShapedFrame:
+ // NOTE: This will break if the private API of QComboBox changes drastically
+ if (qstrcmp(widget->metaObject()->className(),"QComboBoxPrivateContainer") == 0) {
+ const Descriptor &desc = m_descriptors.value(DD_PopupDown);
+ const Pixmap &pix = m_pixmaps.value(DD_ItemSeparator);
+ QRect rect = option->rect;
+ rect.adjust(-pix.margins.left(), -desc.margins.top(),
+ pix.margins.right(), desc.margins.bottom());
+ bool up = widget->property("_pixmapstyle_combobox_up").toBool();
+ drawCachedPixmap(up ? DD_PopupUp : DD_PopupDown, rect, painter);
+ }
+ else {
+ QCommonStyle::drawControl(element, option, painter, widget);
+ }
+ break;
+ default:
+ QCommonStyle::drawControl(element, option, painter, widget);
+ }
+}
+
+void QPixmapStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex *option,
+ QPainter *painter, const QWidget *widget) const
+{
+ switch (cc) {
+ case CC_Slider:
+ drawSlider(option, painter, widget);
+ break;
+ case CC_ComboBox:
+ drawComboBox(option, painter, widget);
+ break;
+ case CC_ScrollBar:
+ drawScrollBar(option, painter, widget);
+ break;
+ default:
+ QCommonStyle::drawComplexControl(cc, option, painter, widget);
+ }
+}
+
+QSize QPixmapStyle::sizeFromContents(ContentsType type, const QStyleOption *option,
+ const QSize &contentsSize, const QWidget *widget) const
+{
+ switch (type) {
+ case CT_PushButton:
+ return pushButtonSizeFromContents(option, contentsSize, widget);
+ case CT_LineEdit:
+ return lineEditSizeFromContents(option, contentsSize, widget);
+ case CT_ProgressBar:
+ return progressBarSizeFromContents(option, contentsSize, widget);
+ case CT_Slider:
+ return sliderSizeFromContents(option, contentsSize, widget);
+ case CT_ComboBox:
+ return comboBoxSizeFromContents(option, contentsSize, widget);
+ case CT_ItemViewItem:
+ return itemViewSizeFromContents(option, contentsSize, widget);
+ default: ;
+ }
+
+ return QCommonStyle::sizeFromContents(type, option, contentsSize, widget);
+}
+
+QRect QPixmapStyle::subElementRect(SubElement element, const QStyleOption *option,
+ const QWidget *widget) const
+{
+ switch (element) {
+ case SE_LineEditContents:
+ {
+ QRect rect = QCommonStyle::subElementRect(element, option, widget);
+ const Descriptor &desc = m_descriptors.value(LE_Enabled);
+ rect.adjust(desc.margins.left(), desc.margins.top(),
+ -desc.margins.right(), -desc.margins.bottom());
+ rect = visualRect(option->direction, option->rect, rect);
+ return rect;
+ }
+ default: ;
+ }
+
+ return QCommonStyle::subElementRect(element, option, widget);
+}
+
+QRect QPixmapStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex *option,
+ SubControl sc, const QWidget *widget) const
+{
+ switch (cc) {
+ case CC_ComboBox:
+ return comboBoxSubControlRect(option, sc, widget);
+ case CC_ScrollBar:
+ return scrollBarSubControlRect(option, sc, widget);
+ default: ;
+ }
+
+ return QCommonStyle::subControlRect(cc, option, sc, widget);
+}
+
+int QPixmapStyle::pixelMetric(PixelMetric metric, const QStyleOption *option,
+ const QWidget *widget) const
+{
+ switch (metric) {
+ case PM_ButtonShiftHorizontal:
+ case PM_ButtonShiftVertical:
+ return 0;
+ case PM_DefaultFrameWidth:
+ if (qobject_cast<const QTextEdit*>(widget)) {
+ const Descriptor &desc = m_descriptors.value(LE_Enabled);
+ return qMax(qMax(desc.margins.left(), desc.margins.right()),
+ qMax(desc.margins.top(), desc.margins.bottom()));
+ }
+ return 0;
+ case PM_IndicatorWidth:
+ return m_pixmaps.value(CB_Enabled).pixmap.width();
+ case PM_IndicatorHeight:
+ return m_pixmaps.value(CB_Enabled).pixmap.height();
+ case PM_CheckBoxLabelSpacing:
+ {
+ const Pixmap &pix = m_pixmaps.value(CB_Enabled);
+ return qMax(qMax(pix.margins.left(), pix.margins.right()),
+ qMax(pix.margins.top(), pix.margins.bottom()));
+ }
+ case PM_ExclusiveIndicatorWidth:
+ return m_pixmaps.value(RB_Enabled).pixmap.width();
+ case PM_ExclusiveIndicatorHeight:
+ return m_pixmaps.value(RB_Enabled).pixmap.height();
+ case PM_RadioButtonLabelSpacing:
+ {
+ const Pixmap &pix = m_pixmaps.value(RB_Enabled);
+ return qMax(qMax(pix.margins.left(), pix.margins.right()),
+ qMax(pix.margins.top(), pix.margins.bottom()));
+ }
+ case PM_SliderThickness:
+ if (const QStyleOptionSlider *slider =
+ qstyleoption_cast<const QStyleOptionSlider*>(option)) {
+ const Descriptor desc = m_descriptors.value(slider->orientation == Qt::Horizontal
+ ? SG_HEnabled : SG_VEnabled);
+ return slider->orientation == Qt::Horizontal
+ ? desc.size.height() : desc.size.width();
+ }
+ break;
+ case PM_SliderControlThickness:
+ if (const QStyleOptionSlider *slider =
+ qstyleoption_cast<const QStyleOptionSlider*>(option)) {
+ const Pixmap pix = m_pixmaps.value(slider->orientation == Qt::Horizontal
+ ? SH_HEnabled : SH_VEnabled);
+ return slider->orientation == Qt::Horizontal
+ ? pix.pixmap.height() : pix.pixmap.width();
+ }
+ break;
+ case PM_SliderLength:
+ if (const QStyleOptionSlider *slider =
+ qstyleoption_cast<const QStyleOptionSlider*>(option)) {
+ const Pixmap pix = m_pixmaps.value(slider->orientation == Qt::Horizontal
+ ? SH_HEnabled : SH_VEnabled);
+ return slider->orientation == Qt::Horizontal
+ ? pix.pixmap.width() : pix.pixmap.height();
+ }
+ break;
+ case PM_ScrollBarExtent:
+ if (const QStyleOptionSlider *slider =
+ qstyleoption_cast<const QStyleOptionSlider*>(option)) {
+ const Descriptor desc = m_descriptors.value(slider->orientation == Qt::Horizontal
+ ? SB_Horizontal : SB_Vertical);
+ return slider->orientation == Qt::Horizontal
+ ? desc.size.height() : desc.size.width();
+ }
+ break;
+ case PM_ScrollBarSliderMin:
+ return 0;
+ default: ;
+ }
+
+ return QCommonStyle::pixelMetric(metric, option, widget);
+}
+
+int QPixmapStyle::styleHint(StyleHint hint, const QStyleOption *option,
+ const QWidget *widget, QStyleHintReturn *returnData) const
+{
+ switch (hint) {
+ case SH_EtchDisabledText:
+ return false;
+ case SH_ComboBox_Popup:
+ return false;
+ default: ;
+ }
+
+ return QCommonStyle::styleHint(hint, option, widget, returnData);
+}
+
+QStyle::SubControl QPixmapStyle::hitTestComplexControl(QStyle::ComplexControl control,
+ const QStyleOptionComplex *option,
+ const QPoint &pos,
+ const QWidget *widget) const
+{
+ const SubControl sc = QCommonStyle::hitTestComplexControl(control, option, pos, widget);
+ if (control == CC_ScrollBar) {
+ if (sc == SC_ScrollBarAddLine)
+ return SC_ScrollBarAddPage;
+ else if (sc == SC_ScrollBarSubLine)
+ return SC_ScrollBarSubPage;
+ }
+
+ return sc;
+}
+
+bool QPixmapStyle::eventFilter(QObject *watched, QEvent *event)
+{
+ if (QSlider *slider = qobject_cast<QSlider*>(watched)) {
+ switch (event->type()) {
+ case QEvent::MouseButtonPress:
+ case QEvent::MouseButtonRelease:
+ case QEvent::MouseMove:
+ slider->update();
+ break;
+ default: ;
+ }
+ }
+
+ if (QComboBox *comboBox = qobject_cast<QComboBox*>(watched)) {
+ switch (event->type()) {
+ case QEvent::MouseButtonPress:
+ event->ignore();
+ comboBox->setProperty("_pixmapstyle_combobox_pressed", true);
+ comboBox->repaint();
+ return true;
+ case QEvent::MouseButtonRelease:
+ comboBox->setProperty("_pixmapstyle_combobox_pressed", false);
+ comboBox->repaint();
+ if ( comboBox->view() ) {
+ if ( comboBox->view()->isVisible() || (!comboBox->isEnabled()))
+ comboBox->hidePopup();
+ else
+ comboBox->showPopup();
+ }
+ break;
+ default: ;
+ }
+ }
+
+ if (qstrcmp(watched->metaObject()->className(),"QComboBoxPrivateContainer") == 0) {
+ if (event->type() == QEvent::Show) {
+ QWidget *widget = qobject_cast<QWidget*>(watched);
+ int yPopup = widget->geometry().top();
+ int yCombo = widget->parentWidget()->mapToGlobal(QPoint(0, 0)).y();
+ QRect geom = widget->geometry();
+ const Descriptor &desc = m_descriptors.value(DD_ButtonEnabled);
+ const bool up = yPopup < yCombo;
+ geom.moveTop(geom.top() + (up ? desc.margins.top() : -desc.margins.bottom()));
+ widget->setGeometry(geom);
+ widget->setProperty("_pixmapstyle_combobox_up", up);
+ widget->parentWidget()->setProperty("_pixmapstyle_combobox_up", up);
+ }
+ }
+
+ return QCommonStyle::eventFilter(watched, event);
+}
+
+void QPixmapStyle::addDescriptor(QPixmapStyle::ControlDescriptor control, const QString &fileName,
+ QMargins margins, QTileRules tileRules)
+{
+ Descriptor desc;
+
+ QImage image(fileName);
+ if (image.isNull())
+ return;
+
+ desc.fileName = fileName;
+ desc.margins = margins;
+ desc.tileRules = tileRules;
+ desc.size = image.size();
+
+ m_descriptors[control] = desc;
+}
+
+void QPixmapStyle::copyDescriptor(QPixmapStyle::ControlDescriptor source,
+ QPixmapStyle::ControlDescriptor dest)
+{
+ m_descriptors[dest] = m_descriptors.value(source);
+}
+
+void QPixmapStyle::drawCachedPixmap(QPixmapStyle::ControlDescriptor control, const QRect &rect,
+ QPainter *p) const
+{
+ if (!m_descriptors.contains(control))
+ return;
+ const Descriptor &desc = m_descriptors.value(control);
+ const QPixmap pix = getCachedPixmap(control, desc, rect.size());
+ Q_ASSERT(!pix.isNull());
+ p->drawPixmap(rect, pix);
+}
+
+void QPixmapStyle::addPixmap(ControlPixmap control, const QString &fileName,
+ QMargins margins)
+{
+ Pixmap pix;
+
+ QPixmap image(fileName);
+ if (image.isNull())
+ return;
+
+ pix.pixmap = image;
+ pix.margins = margins;
+
+ m_pixmaps[control] = pix;
+}
+
+void QPixmapStyle::copyPixmap(QPixmapStyle::ControlPixmap source, QPixmapStyle::ControlPixmap dest)
+{
+ m_pixmaps[dest] = m_pixmaps.value(source);
+}
+
+void QPixmapStyle::drawPushButton(const QStyleOption *option,
+ QPainter *painter, const QWidget *) const
+{
+ const bool checked = option->state & State_On;
+ const bool pressed = option->state & State_Sunken;
+ const bool enabled = option->state & State_Enabled;
+
+ ControlDescriptor control = PB_Enabled;
+ if (enabled)
+ control = pressed ? PB_Pressed : (checked ? PB_Checked : PB_Enabled);
+ else
+ control = checked ? PB_PressedDisabled : PB_Disabled;
+ drawCachedPixmap(control, option->rect, painter);
+}
+
+void QPixmapStyle::drawLineEdit(const QStyleOption *option,
+ QPainter *painter, const QWidget *widget) const
+{
+ // Don't draw for the line edit inside a combobox
+ if (widget && qobject_cast<const QComboBox*>(widget->parentWidget()))
+ return;
+
+ const bool enabled = option->state & State_Enabled;
+ const bool focused = option->state & State_HasFocus;
+ ControlDescriptor control = enabled ? (focused ? LE_Focused : LE_Enabled) : LE_Disabled;
+ drawCachedPixmap(control, option->rect, painter);
+}
+
+void QPixmapStyle::drawTextEdit(const QStyleOption *option,
+ QPainter *painter, const QWidget *) const
+{
+ const bool enabled = option->state & State_Enabled;
+ const bool focused = option->state & State_HasFocus;
+ ControlDescriptor control = enabled ? (focused ? TE_Focused : TE_Enabled) : TE_Disabled;
+ drawCachedPixmap(control, option->rect, painter);
+}
+
+void QPixmapStyle::drawCheckBox(const QStyleOption *option,
+ QPainter *painter, const QWidget *) const
+{
+ const QStyleOptionButton *button = qstyleoption_cast<const QStyleOptionButton*>(option);
+
+ const bool down = button->state & State_Sunken;
+ const bool enabled = button->state & State_Enabled;
+ const bool on = button->state & State_On;
+
+ ControlPixmap control;
+ if (enabled)
+ control = on ? (down ? CB_PressedChecked : CB_Checked) : (down ? CB_Pressed : CB_Enabled);
+ else
+ control = on ? CB_DisabledChecked : CB_Disabled;
+ painter->drawPixmap(button->rect, m_pixmaps.value(control).pixmap);
+}
+
+void QPixmapStyle::drawRadioButton(const QStyleOption *option,
+ QPainter *painter, const QWidget *) const
+{
+ const QStyleOptionButton *button = qstyleoption_cast<const QStyleOptionButton*>(option);
+
+ const bool down = button->state & State_Sunken;
+ const bool enabled = button->state & State_Enabled;
+ const bool on = button->state & State_On;
+
+ ControlPixmap control;
+ if (enabled)
+ control = on ? RB_Checked : (down ? RB_Pressed : RB_Enabled);
+ else
+ control = on ? RB_DisabledChecked : RB_Disabled;
+ painter->drawPixmap(button->rect, m_pixmaps.value(control).pixmap);
+}
+
+void QPixmapStyle::drawPanelItemViewItem(const QStyleOption *option, QPainter *painter,
+ const QWidget *widget) const
+{
+ ControlPixmap cp = ID_Separator;
+ ControlDescriptor cd = ID_Selected;
+
+ if (widget && widget->property("_pixmap_combobox_list").toBool()) {
+ cp = DD_ItemSeparator;
+ cd = DD_ItemSelected;
+ }
+
+ QPixmap pix = m_pixmaps.value(cp).pixmap;
+ QRect rect = option->rect;
+ rect.setBottom(rect.top() + pix.height()-1);
+ painter->drawPixmap(rect, pix);
+ if (option->state & QStyle::State_Selected) {
+ rect = option->rect;
+ rect.setTop(rect.top() + pix.height());
+ drawCachedPixmap(cd, rect, painter);
+ }
+}
+
+void QPixmapStyle::drawProgressBarBackground(const QStyleOption *option,
+ QPainter *painter, const QWidget *) const
+{
+ bool vertical = false;
+ if (const QStyleOptionProgressBarV2 *pb2 =
+ qstyleoption_cast<const QStyleOptionProgressBarV2 *>(option)) {
+ vertical = (pb2->orientation == Qt::Vertical);
+ }
+ drawCachedPixmap(vertical ? PB_VBackground : PB_HBackground, option->rect, painter);
+}
+
+void QPixmapStyle::drawProgressBarLabel(const QStyleOption *option,
+ QPainter *painter, const QWidget *) const
+{
+ if (const QStyleOptionProgressBar *pb =
+ qstyleoption_cast<const QStyleOptionProgressBar *>(option)) {
+ bool vertical = false;
+ if (const QStyleOptionProgressBarV2 *pb2 =
+ qstyleoption_cast<const QStyleOptionProgressBarV2 *>(option)) {
+ vertical = (pb2->orientation == Qt::Vertical);
+ }
+ if (!vertical) {
+ QPalette::ColorRole textRole = QPalette::ButtonText;
+ proxy()->drawItemText(painter, pb->rect,
+ Qt::AlignCenter | Qt::TextSingleLine, pb->palette,
+ pb->state & State_Enabled, pb->text, textRole);
+ }
+ }
+}
+
+void QPixmapStyle::drawProgressBarFill(const QStyleOption *option,
+ QPainter *painter, const QWidget *) const
+{
+ const QStyleOptionProgressBar *pbar =
+ qstyleoption_cast<const QStyleOptionProgressBar*>(option);
+ bool vertical = false;
+ bool flip = pbar->direction == Qt::RightToLeft;
+ if (const QStyleOptionProgressBarV2 *pb2 =
+ qstyleoption_cast<const QStyleOptionProgressBarV2 *>(option)) {
+ vertical = (pb2->orientation == Qt::Vertical);
+ flip = flip ^ pb2->invertedAppearance;
+ }
+
+ if (pbar->progress == pbar->maximum) {
+ drawCachedPixmap(vertical ? PB_VComplete : PB_HComplete, option->rect, painter);
+
+ } else {
+ if (pbar->progress == 0)
+ return;
+ const int maximum = pbar->maximum;
+ const qreal ratio = qreal(vertical?option->rect.height():option->rect.width())/maximum;
+ const int progress = pbar->progress*ratio;
+
+ QRect optRect = option->rect;
+ if (vertical) {
+ if (flip)
+ optRect.setBottom(optRect.top()+progress-1);
+ else
+ optRect.setTop(optRect.bottom()-progress+1);
+ } else {
+ if (flip)
+ optRect.setLeft(optRect.right()-progress+1);
+ else
+ optRect.setRight(optRect.left()+progress-1);
+ }
+
+ drawCachedPixmap(vertical ? PB_VContent : PB_HContent, optRect, painter);
+ }
+}
+
+void QPixmapStyle::drawSlider(const QStyleOptionComplex *option,
+ QPainter *painter, const QWidget *widget) const
+{
+ const QStyleOptionSlider *slider = qstyleoption_cast<const QStyleOptionSlider*>(option);
+ if (!slider)
+ return;
+
+ const bool enabled = option->state & State_Enabled;
+ const bool pressed = option->state & State_Sunken;
+ const Qt::Orientation orient = slider->orientation;
+
+ const QRect handle = proxy()->subControlRect(CC_Slider, option, SC_SliderHandle, widget);
+ if (option->subControls & SC_SliderGroove) {
+ QRect groove = proxy()->subControlRect(CC_Slider, option, SC_SliderGroove, widget);
+ if (groove.isValid()) {
+ // Draw the background
+ ControlDescriptor control;
+ if (orient == Qt::Horizontal)
+ control = enabled ? SG_HEnabled : SG_HDisabled;
+ else
+ control = enabled ? SG_VEnabled : SG_VDisabled;
+ drawCachedPixmap(control, groove, painter);
+
+ // Draw the active part
+ if (orient == Qt::Horizontal) {
+ control = enabled ? (pressed ? SG_HActivePressed : SG_HActiveEnabled )
+ : SG_HActiveDisabled;
+ } else {
+ control = enabled ? (pressed ? SG_VActivePressed : SG_VActiveEnabled )
+ : SG_VActiveDisabled;
+ }
+ const Descriptor &desc = m_descriptors.value(control);
+ const QPixmap pix = getCachedPixmap(control, desc, groove.size());
+ if (!pix.isNull()) {
+ groove.setRight(orient == Qt::Horizontal
+ ? handle.center().x() : handle.center().y());
+ painter->drawPixmap(groove, pix, groove);
+ }
+ }
+ }
+ if (option->subControls & SC_SliderHandle) {
+ if (handle.isValid()) {
+ ControlPixmap pix;
+ if (orient == Qt::Horizontal)
+ pix = enabled ? (pressed ? SH_HPressed : SH_HEnabled) : SH_HDisabled;
+ else
+ pix = enabled ? (pressed ? SH_VPressed : SH_VEnabled) : SH_VDisabled;
+ painter->drawPixmap(handle, m_pixmaps.value(pix).pixmap);
+ }
+ }
+}
+
+void QPixmapStyle::drawComboBox(const QStyleOptionComplex *option,
+ QPainter *painter, const QWidget *widget) const
+{
+ const bool enabled = option->state & State_Enabled;
+ const bool pressed = widget->property("_pixmapstyle_combobox_pressed").toBool();
+ const bool opened = option->state & State_On;
+
+ ControlDescriptor control =
+ enabled ? (pressed ? DD_ButtonPressed : DD_ButtonEnabled) : DD_ButtonDisabled;
+ drawCachedPixmap(control, option->rect, painter);
+
+ ControlPixmap cp = enabled ? (opened ? DD_ArrowOpen
+ : (pressed ? DD_ArrowPressed : DD_ArrowEnabled))
+ : DD_ArrowDisabled;
+ Pixmap pix = m_pixmaps.value(cp);
+ QRect rect = comboBoxSubControlRect(option, SC_ComboBoxArrow, widget);
+ painter->drawPixmap(rect, pix.pixmap);
+}
+
+void QPixmapStyle::drawScrollBar(const QStyleOptionComplex *option,
+ QPainter *painter, const QWidget *widget) const
+{
+ if (const QStyleOptionSlider *slider =
+ qstyleoption_cast<const QStyleOptionSlider*>(option)) {
+ // Do not draw the scrollbar
+ if (slider->minimum == slider->maximum)
+ return;
+
+ QRect rect = scrollBarSubControlRect(option, SC_ScrollBarSlider, widget);
+ ControlDescriptor control = slider->orientation == Qt::Horizontal
+ ? SB_Horizontal : SB_Vertical;
+ drawCachedPixmap(control, rect, painter);
+ }
+}
+
+QSize QPixmapStyle::pushButtonSizeFromContents(const QStyleOption *option,
+ const QSize &contentsSize,
+ const QWidget *widget) const
+{
+ const Descriptor &desc = m_descriptors.value(PB_Enabled);
+ const int bm = proxy()->pixelMetric(PM_ButtonMargin, option, widget);
+
+ int w = contentsSize.width();
+ int h = contentsSize.height();
+ w += desc.margins.left() + desc.margins.right() + bm;
+ h += desc.margins.top() + desc.margins.bottom() + bm;
+
+ return computeSize(desc, w, h);
+}
+
+QSize QPixmapStyle::lineEditSizeFromContents(const QStyleOption *,
+ const QSize &contentsSize, const QWidget *) const
+{
+ const Descriptor &desc = m_descriptors.value(LE_Enabled);
+ const int border = 2 * proxy()->pixelMetric(PM_DefaultFrameWidth);
+
+ int w = contentsSize.width() + border + desc.margins.left() + desc.margins.right();
+ int h = contentsSize.height() + border + desc.margins.top() + desc.margins.bottom();
+
+ return computeSize(desc, w, h);
+}
+
+QSize QPixmapStyle::progressBarSizeFromContents(const QStyleOption *option,
+ const QSize &contentsSize,
+ const QWidget *widget) const
+{
+ bool vertical = false;
+ if (const QStyleOptionProgressBarV2 *pb2 =
+ qstyleoption_cast<const QStyleOptionProgressBarV2 *>(option)) {
+ vertical = (pb2->orientation == Qt::Vertical);
+ }
+ QSize result = QCommonStyle::sizeFromContents(CT_Slider, option, contentsSize, widget);
+ if (vertical) {
+ const Descriptor desc = m_descriptors.value(PB_VBackground);
+ return QSize(desc.size.height(), result.height());
+ } else {
+ const Descriptor desc = m_descriptors.value(PB_HBackground);
+ return QSize(result.width(), desc.size.height());
+ }
+}
+
+QSize QPixmapStyle::sliderSizeFromContents(const QStyleOption *option,
+ const QSize &contentsSize,
+ const QWidget *widget) const
+{
+ const QStyleOptionSlider *slider = qstyleoption_cast<const QStyleOptionSlider*>(option);
+ if (!slider)
+ return QSize();
+
+ QSize result = QCommonStyle::sizeFromContents(CT_Slider, option, contentsSize, widget);
+
+ const Descriptor desc = m_descriptors.value(slider->orientation == Qt::Horizontal
+ ? SG_HEnabled : SG_VEnabled);
+
+ if (slider->orientation == Qt::Horizontal)
+ return QSize(result.width(), desc.size.height());
+ else
+ return QSize(desc.size.width(), result.height());
+}
+
+QSize QPixmapStyle::comboBoxSizeFromContents(const QStyleOption *option,
+ const QSize &contentsSize,
+ const QWidget *widget) const
+{
+ const Descriptor &desc = m_descriptors.value(DD_ButtonEnabled);
+
+ QSize result = QCommonStyle::sizeFromContents(CT_ComboBox, option, contentsSize, widget);
+ return computeSize(desc, result.width(), result.height());
+}
+
+QSize QPixmapStyle::itemViewSizeFromContents(const QStyleOption *option,
+ const QSize &contentsSize,
+ const QWidget *widget) const
+{
+ QSize size = QCommonStyle::sizeFromContents(CT_ItemViewItem, option, contentsSize, widget);
+
+ ControlPixmap cp = ID_Separator;
+ ControlDescriptor cd = ID_Selected;
+ if (widget && widget->property("_pixmap_combobox_list").toBool()) {
+ cp = DD_ItemSeparator;
+ cd = DD_ItemSelected;
+ }
+
+ const Descriptor &desc = m_descriptors.value(cd);
+ const Pixmap &pix = m_pixmaps.value(cp);
+ size.setHeight(qMax(size.height(),
+ desc.size.height() + pix.pixmap.height()));
+ return size;
+}
+
+QRect QPixmapStyle::comboBoxSubControlRect(const QStyleOptionComplex *option,
+ QStyle::SubControl sc, const QWidget *) const
+{
+ QRect r = option->rect; // Default size
+ const Pixmap &pix = m_pixmaps.value(DD_ArrowEnabled);
+ const Descriptor &desc = m_descriptors.value(DD_ButtonEnabled);
+
+ switch (sc) {
+ case SC_ComboBoxArrow:
+ r.setRect(r.right() - pix.margins.right() - pix.pixmap.width(),
+ r.top() + pix.margins.top(),
+ pix.pixmap.width(), pix.pixmap.height());
+ break;
+ case SC_ComboBoxEditField:
+ r.adjust(desc.margins.left(), desc.margins.right(),
+ -desc.margins.right(), -desc.margins.bottom());
+ r.setRight(r.right() - pix.margins.right() - pix.margins.left() - pix.pixmap.width());
+ break;
+ default:
+ break;
+ }
+
+ r = visualRect(option->direction, option->rect, r);
+ return r;
+}
+
+QRect QPixmapStyle::scrollBarSubControlRect(const QStyleOptionComplex *option,
+ QStyle::SubControl sc, const QWidget *) const
+{
+ if (const QStyleOptionSlider *slider =
+ qstyleoption_cast<const QStyleOptionSlider*>(option)) {
+ int length = (slider->orientation == Qt::Horizontal)
+ ? slider->rect.width() : slider->rect.height();
+ int page = length * slider->pageStep
+ / (slider->maximum - slider->minimum + slider->pageStep);
+ int pos = length * slider->sliderValue
+ / (slider->maximum - slider->minimum + slider->pageStep);
+ pos = qMin(pos+page, length) - page;
+
+ QRect rect = slider->rect;
+
+ if (slider->orientation == Qt::Horizontal) {
+ switch (sc) {
+ case SC_ScrollBarAddPage:
+ rect.setLeft(pos+page);
+ return rect;
+ case SC_ScrollBarSubPage:
+ rect.setRight(pos);
+ return rect;
+ case SC_ScrollBarGroove:
+ return rect;
+ case SC_ScrollBarSlider:
+ rect.setLeft(pos);
+ rect.setRight(pos+page);
+ return rect;
+ default: ;
+ }
+ } else {
+ switch (sc) {
+ case SC_ScrollBarAddPage:
+ rect.setTop(pos+page);
+ return rect;
+ case SC_ScrollBarSubPage:
+ rect.setBottom(pos);
+ return rect;
+ case SC_ScrollBarGroove:
+ return rect;
+ case SC_ScrollBarSlider:
+ rect.setTop(pos);
+ rect.setBottom(pos+page);
+ return rect;
+ default: ;
+ }
+ }
+ }
+ return QRect();
+}
+
+static QPixmap scale(int w, int h, const QPixmap &pixmap, const QPixmapStyle::Descriptor &desc)
+{
+ QPixmap result(w, h);
+ {
+ const QColor transparent(0, 0, 0, 0);
+ result.fill( transparent );
+ QPainter p( &result );
+ const QMargins margins = desc.margins;
+ qDrawBorderPixmap(&p, result.rect(), margins, pixmap,
+ pixmap.rect(), margins, desc.tileRules);
+ }
+ return result;
+}
+
+QPixmap QPixmapStyle::getCachedPixmap(ControlDescriptor control, const Descriptor &desc,
+ const QSize &size) const
+{
+ const QString sizeString = QString::number(size.width()) % QLatin1Char('*')
+ % QString::number(size.height());
+ const QString key = QLatin1String(metaObject()->className()) % QString::number(control)
+ % QLatin1Char('@') % sizeString;
+
+ QPixmap result;
+
+ if (!QPixmapCache::find( key, &result)) {
+ QPixmap source(desc.fileName);
+ result = scale(size.width(), size.height(), source, desc);
+ QPixmapCache::insert(key, result);
+ }
+ return result;
+}
+
+QSize QPixmapStyle::computeSize(const QPixmapStyle::Descriptor &desc, int width, int height) const
+{
+ if (desc.tileRules.horizontal != Qt::RepeatTile)
+ width = qMax(width, desc.size.width());
+ if (desc.tileRules.vertical != Qt::RepeatTile)
+ height = qMax(height, desc.size.height());
+ return QSize(width, height);
+}
+
+QT_END_NAMESPACE
diff --git a/src/plugins/styles/bb10style/qpixmapstyle.h b/src/plugins/styles/bb10style/qpixmapstyle.h
new file mode 100644
index 0000000000..d4a223aab8
--- /dev/null
+++ b/src/plugins/styles/bb10style/qpixmapstyle.h
@@ -0,0 +1,236 @@
+/***************************************************************************
+**
+** Copyright (C) 2014 BlackBerry Limited. All rights reserved.
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the plugins of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3.0 as published by the Free Software
+** Foundation and appearing in the file LICENSE.GPL included in the
+** packaging of this file. Please review the following information to
+** ensure the GNU General Public License version 3.0 requirements will be
+** met: http://www.gnu.org/copyleft/gpl.html.
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QPIXMAPSTYLE_H
+#define QPIXMAPSTYLE_H
+
+#include <QCommonStyle>
+#include <QString>
+#include <QPixmap>
+#include <QMargins>
+#include <QTileRules>
+#include <QHash>
+#include <QPainter>
+
+QT_BEGIN_NAMESPACE
+
+class QPixmapStyle : public QCommonStyle
+{
+ Q_OBJECT
+
+public:
+ struct Descriptor {
+ QString fileName;
+ QSize size;
+ QMargins margins;
+ QTileRules tileRules;
+ };
+
+ enum ControlDescriptor {
+ BG_Background=0,
+ LE_Enabled, // QLineEdit
+ LE_Disabled,
+ LE_Focused,
+ PB_Enabled, // QPushButton
+ PB_Pressed,
+ PB_PressedDisabled,
+ PB_Checked,
+ PB_Disabled,
+ TE_Enabled, // QTextEdit
+ TE_Disabled,
+ TE_Focused,
+ PB_HBackground, // Horizontal QProgressBar
+ PB_HContent,
+ PB_HComplete,
+ PB_VBackground, // Vertical QProgressBar
+ PB_VContent,
+ PB_VComplete,
+ SG_HEnabled, // Horizontal QSlider groove
+ SG_HDisabled,
+ SG_HActiveEnabled,
+ SG_HActivePressed,
+ SG_HActiveDisabled,
+ SG_VEnabled, // Vertical QSlider groove
+ SG_VDisabled,
+ SG_VActiveEnabled,
+ SG_VActivePressed,
+ SG_VActiveDisabled,
+ DD_ButtonEnabled, // QComboBox (DropDown)
+ DD_ButtonDisabled,
+ DD_ButtonPressed,
+ DD_PopupDown,
+ DD_PopupUp,
+ DD_ItemSelected,
+ ID_Selected, // QStyledItemDelegate
+ SB_Horizontal, // QScrollBar
+ SB_Vertical
+ };
+
+ struct Pixmap {
+ QPixmap pixmap;
+ QMargins margins;
+ };
+ enum ControlPixmap {
+ CB_Enabled, // QCheckBox
+ CB_Checked,
+ CB_Pressed,
+ CB_PressedChecked,
+ CB_Disabled,
+ CB_DisabledChecked,
+ RB_Enabled, // QRadioButton
+ RB_Checked,
+ RB_Pressed,
+ RB_Disabled,
+ RB_DisabledChecked,
+ SH_HEnabled, // Horizontal QSlider handle
+ SH_HDisabled,
+ SH_HPressed,
+ SH_VEnabled, // Vertical QSlider handle
+ SH_VDisabled,
+ SH_VPressed,
+ DD_ArrowEnabled, // QComboBox (DropDown) arrow
+ DD_ArrowDisabled,
+ DD_ArrowPressed,
+ DD_ArrowOpen,
+ DD_ItemSeparator,
+ ID_Separator // QStyledItemDelegate separator
+ };
+
+public:
+ QPixmapStyle();
+ ~QPixmapStyle();
+
+ void polish(QApplication *application);
+ void polish(QPalette &palette);
+ void polish(QWidget *widget);
+ void unpolish(QWidget *widget);
+
+ void drawPrimitive(PrimitiveElement element, const QStyleOption *option,
+ QPainter *painter, const QWidget *widget = 0) const;
+ void drawControl(ControlElement element, const QStyleOption *option,
+ QPainter *painter, const QWidget *widget = 0) const;
+ void drawComplexControl(ComplexControl cc, const QStyleOptionComplex *option,
+ QPainter *painter, const QWidget *widget=0) const;
+
+ QSize sizeFromContents(ContentsType type, const QStyleOption *option,
+ const QSize &contentsSize, const QWidget *widget = 0) const;
+ QRect subElementRect(SubElement element, const QStyleOption *option,
+ const QWidget *widget = 0) const;
+ QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *option,
+ SubControl sc, const QWidget *widget = 0) const;
+
+ int pixelMetric(PixelMetric metric, const QStyleOption *option = 0,
+ const QWidget *widget = 0) const;
+ int styleHint(StyleHint hint, const QStyleOption *option,
+ const QWidget *widget, QStyleHintReturn *returnData) const;
+ SubControl hitTestComplexControl(ComplexControl control, const QStyleOptionComplex *option,
+ const QPoint &pos, const QWidget *widget) const;
+
+ bool eventFilter(QObject *watched, QEvent *event);
+
+protected:
+ void addDescriptor(ControlDescriptor control, const QString &fileName,
+ QMargins margins = QMargins(),
+ QTileRules tileRules = QTileRules(Qt::RepeatTile, Qt::RepeatTile));
+ void copyDescriptor(ControlDescriptor source, ControlDescriptor dest);
+ void drawCachedPixmap(ControlDescriptor control, const QRect &rect, QPainter *p) const;
+
+ void addPixmap(ControlPixmap control, const QString &fileName,
+ QMargins margins = QMargins());
+ void copyPixmap(ControlPixmap source, ControlPixmap dest);
+
+ void drawPushButton(const QStyleOption *option,
+ QPainter *painter, const QWidget *widget) const;
+ void drawLineEdit(const QStyleOption *option,
+ QPainter *painter, const QWidget *widget) const;
+ void drawTextEdit(const QStyleOption *option,
+ QPainter *painter, const QWidget *widget) const;
+ void drawCheckBox(const QStyleOption *option,
+ QPainter *painter, const QWidget *widget) const;
+ void drawRadioButton(const QStyleOption *option,
+ QPainter *painter, const QWidget *widget) const;
+ void drawPanelItemViewItem(const QStyleOption *option,
+ QPainter *painter, const QWidget *widget) const;
+ void drawProgressBarBackground(const QStyleOption *option,
+ QPainter *painter, const QWidget *widget) const;
+ void drawProgressBarLabel(const QStyleOption *option,
+ QPainter *painter, const QWidget *widget) const;
+ void drawProgressBarFill(const QStyleOption *option,
+ QPainter *painter, const QWidget *widget) const;
+ void drawSlider(const QStyleOptionComplex *option,
+ QPainter *painter, const QWidget *widget) const;
+ void drawComboBox(const QStyleOptionComplex *option,
+ QPainter *painter, const QWidget *widget) const;
+ void drawScrollBar(const QStyleOptionComplex *option,
+ QPainter *painter, const QWidget *widget) const;
+
+ QSize pushButtonSizeFromContents(const QStyleOption *option,
+ const QSize &contentsSize, const QWidget *widget) const;
+ QSize lineEditSizeFromContents(const QStyleOption *option,
+ const QSize &contentsSize, const QWidget *widget) const;
+ QSize progressBarSizeFromContents(const QStyleOption *option,
+ const QSize &contentsSize, const QWidget *widget) const;
+ QSize sliderSizeFromContents(const QStyleOption *option,
+ const QSize &contentsSize, const QWidget *widget) const;
+ QSize comboBoxSizeFromContents(const QStyleOption *option,
+ const QSize &contentsSize, const QWidget *widget) const;
+ QSize itemViewSizeFromContents(const QStyleOption *option,
+ const QSize &contentsSize, const QWidget *widget) const;
+
+ QRect comboBoxSubControlRect(const QStyleOptionComplex *option,
+ SubControl sc, const QWidget *widget) const;
+ QRect scrollBarSubControlRect(const QStyleOptionComplex *option,
+ SubControl sc, const QWidget *widget) const;
+
+private:
+ QPixmap getCachedPixmap(ControlDescriptor control,
+ const Descriptor &desc, const QSize &size) const;
+
+ QSize computeSize(const Descriptor &desc, int width, int height) const;
+
+private:
+ QHash<ControlDescriptor, Descriptor> m_descriptors;
+ QHash<ControlPixmap, Pixmap> m_pixmaps;
+};
+
+QT_END_NAMESPACE
+
+#endif // QPIXMAPSTYLE_H
diff --git a/src/plugins/styles/styles.pro b/src/plugins/styles/styles.pro
new file mode 100644
index 0000000000..88b3f90e0c
--- /dev/null
+++ b/src/plugins/styles/styles.pro
@@ -0,0 +1,3 @@
+TEMPLATE = subdirs
+
+blackberry:SUBDIRS += bb10style
diff --git a/src/printsupport/dialogs/qpagesetupdialog.h b/src/printsupport/dialogs/qpagesetupdialog.h
index a6edf91cd1..96d26c6d44 100644
--- a/src/printsupport/dialogs/qpagesetupdialog.h
+++ b/src/printsupport/dialogs/qpagesetupdialog.h
@@ -58,18 +58,12 @@ public:
#if defined(Q_OS_MAC) || defined(Q_OS_WIN)
virtual void setVisible(bool visible);
#endif
- virtual int exec();
+ virtual int exec() Q_DECL_OVERRIDE;
-#ifdef Q_NO_USING_KEYWORD
-#ifndef Q_QDOC
- void open() { QDialog::open(); }
-#endif
-#else
using QDialog::open;
-#endif
void open(QObject *receiver, const char *member);
- void done(int result);
+ void done(int result) Q_DECL_OVERRIDE;
QPrinter *printer();
};
diff --git a/src/printsupport/dialogs/qpagesetupdialog_unix.cpp b/src/printsupport/dialogs/qpagesetupdialog_unix.cpp
index a013ed82d3..2651522c47 100644
--- a/src/printsupport/dialogs/qpagesetupdialog_unix.cpp
+++ b/src/printsupport/dialogs/qpagesetupdialog_unix.cpp
@@ -110,7 +110,7 @@ public:
}
protected:
- void paintEvent(QPaintEvent *)
+ void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE
{
QSize pageSize = m_pageLayout.fullRectPoints().size();
QSizeF scaledSize = pageSize.scaled(width() - 10, height() - 10, Qt::KeepAspectRatio);
diff --git a/src/printsupport/dialogs/qprintdialog.h b/src/printsupport/dialogs/qprintdialog.h
index 437c2831d4..c243121054 100644
--- a/src/printsupport/dialogs/qprintdialog.h
+++ b/src/printsupport/dialogs/qprintdialog.h
@@ -57,11 +57,11 @@ public:
explicit QPrintDialog(QWidget *parent = 0);
~QPrintDialog();
- int exec();
+ int exec() Q_DECL_OVERRIDE;
#if defined (Q_OS_UNIX) && !defined(Q_OS_MAC)
- virtual void accept();
+ virtual void accept() Q_DECL_OVERRIDE;
#endif
- void done(int result);
+ void done(int result) Q_DECL_OVERRIDE;
void setOption(PrintDialogOption option, bool on = true);
bool testOption(PrintDialogOption option) const;
@@ -69,29 +69,17 @@ public:
PrintDialogOptions options() const;
#if defined(Q_OS_UNIX) || defined(Q_OS_WIN)
- void setVisible(bool visible);
+ void setVisible(bool visible) Q_DECL_OVERRIDE;
#endif
-#ifdef Q_NO_USING_KEYWORD
-#ifndef Q_QDOC
- void open() { QDialog::open(); }
-#endif
-#else
using QDialog::open;
-#endif
void open(QObject *receiver, const char *member);
#ifdef Q_QDOC
QPrinter *printer();
#endif
-#ifdef Q_NO_USING_KEYWORD
-#ifndef Q_QDOC
- void accepted() { QDialog::accepted(); }
-#endif
-#else
using QDialog::accepted;
-#endif
Q_SIGNALS:
void accepted(QPrinter *printer);
diff --git a/src/printsupport/dialogs/qprintdialog_unix.cpp b/src/printsupport/dialogs/qprintdialog_unix.cpp
index f40a08dd7e..95f128c6ae 100644
--- a/src/printsupport/dialogs/qprintdialog_unix.cpp
+++ b/src/printsupport/dialogs/qprintdialog_unix.cpp
@@ -119,7 +119,7 @@ public:
void setupPrinter() const;
protected:
- void showEvent(QShowEvent* event);
+ void showEvent(QShowEvent* event) Q_DECL_OVERRIDE;
private:
friend class QUnixPrintWidgetPrivate;
@@ -205,7 +205,7 @@ public:
void setupPrinter();
void updateWidgets();
- virtual void setTabs(const QList<QWidget*> &tabs);
+ virtual void setTabs(const QList<QWidget*> &tabs) Q_DECL_OVERRIDE;
Ui::QPrintSettingsOutput options;
QUnixPrintWidget *top;
diff --git a/src/printsupport/dialogs/qprintpreviewdialog.cpp b/src/printsupport/dialogs/qprintpreviewdialog.cpp
index 9c40e7dd51..a71f2122dc 100644
--- a/src/printsupport/dialogs/qprintpreviewdialog.cpp
+++ b/src/printsupport/dialogs/qprintpreviewdialog.cpp
@@ -73,7 +73,7 @@ class QPrintPreviewMainWindow : public QMainWindow
{
public:
QPrintPreviewMainWindow(QWidget *parent) : QMainWindow(parent) {}
- QMenu *createPopupMenu() { return 0; }
+ QMenu *createPopupMenu() Q_DECL_OVERRIDE { return 0; }
};
class ZoomFactorValidator : public QDoubleValidator
@@ -84,7 +84,7 @@ public:
ZoomFactorValidator(qreal bottom, qreal top, int decimals, QObject *parent)
: QDoubleValidator(bottom, top, decimals, parent) {}
- State validate(QString &input, int &pos) const
+ State validate(QString &input, int &pos) const Q_DECL_OVERRIDE
{
bool replacePercent = false;
if (input.endsWith(QLatin1Char('%'))) {
@@ -117,13 +117,13 @@ public:
}
protected:
- void focusInEvent(QFocusEvent *e)
+ void focusInEvent(QFocusEvent *e) Q_DECL_OVERRIDE
{
origText = text();
QLineEdit::focusInEvent(e);
}
- void focusOutEvent(QFocusEvent *e)
+ void focusOutEvent(QFocusEvent *e) Q_DECL_OVERRIDE
{
if (isModified() && !hasAcceptableInput())
setText(origText);
diff --git a/src/printsupport/dialogs/qprintpreviewdialog.h b/src/printsupport/dialogs/qprintpreviewdialog.h
index 423a27db12..3ec462b901 100644
--- a/src/printsupport/dialogs/qprintpreviewdialog.h
+++ b/src/printsupport/dialogs/qprintpreviewdialog.h
@@ -56,19 +56,13 @@ public:
explicit QPrintPreviewDialog(QPrinter *printer, QWidget *parent = 0, Qt::WindowFlags flags = 0);
~QPrintPreviewDialog();
-#ifdef Q_NO_USING_KEYWORD
-#ifndef Q_QDOC
- void open() { QDialog::open(); }
-#endif
-#else
using QDialog::open;
-#endif
void open(QObject *receiver, const char *member);
QPrinter *printer();
- void setVisible(bool visible);
- void done(int result);
+ void setVisible(bool visible) Q_DECL_OVERRIDE;
+ void done(int result) Q_DECL_OVERRIDE;
Q_SIGNALS:
void paintRequested(QPrinter *printer);
diff --git a/src/printsupport/kernel/qcups.cpp b/src/printsupport/kernel/qcups.cpp
index 1a27fbd07c..b8f75c3cb7 100644
--- a/src/printsupport/kernel/qcups.cpp
+++ b/src/printsupport/kernel/qcups.cpp
@@ -168,8 +168,11 @@ void QCUPSSupport::setPagesPerSheetLayout(QPrinter *printer, const PagesPerShee
const PagesPerSheetLayout pagesPerSheetLayout)
{
QStringList cupsOptions = cupsOptionsList(printer);
- static const char *pagesPerSheetData[] = { "1", "2", "4", "6", "9", "16", 0 };
- static const char *pageLayoutData[] = {"lrtb", "lrbt", "rlbt", "rltb", "btlr", "btrl", "tblr", "tbrl", 0};
+ // WARNING: the following trick (with a [2]-extent) only works as
+ // WARNING: long as there's only one two-digit number in the list
+ // WARNING: and it is the last one (before the "\0")!
+ static const char pagesPerSheetData[][2] = { "1", "2", "4", "6", "9", {'1', '6'}, "\0" };
+ static const char pageLayoutData[][5] = {"lrtb", "lrbt", "rlbt", "rltb", "btlr", "btrl", "tblr", "tbrl"};
setCupsOption(cupsOptions, QStringLiteral("number-up"), QLatin1String(pagesPerSheetData[pagesPerSheet]));
setCupsOption(cupsOptions, QStringLiteral("number-up-layout"), QLatin1String(pageLayoutData[pagesPerSheetLayout]));
setCupsOptions(printer, cupsOptions);
diff --git a/src/printsupport/kernel/qprintengine_pdf_p.h b/src/printsupport/kernel/qprintengine_pdf_p.h
index e78950eb97..401aee1af0 100644
--- a/src/printsupport/kernel/qprintengine_pdf_p.h
+++ b/src/printsupport/kernel/qprintengine_pdf_p.h
@@ -81,18 +81,18 @@ public:
virtual ~QPdfPrintEngine();
// reimplementations QPaintEngine
- bool begin(QPaintDevice *pdev);
- bool end();
+ bool begin(QPaintDevice *pdev) Q_DECL_OVERRIDE;
+ bool end() Q_DECL_OVERRIDE;
// end reimplementations QPaintEngine
// reimplementations QPrintEngine
- bool abort() {return false;}
- QPrinter::PrinterState printerState() const {return state;}
+ bool abort() Q_DECL_OVERRIDE {return false;}
+ QPrinter::PrinterState printerState() const Q_DECL_OVERRIDE {return state;}
- bool newPage();
- int metric(QPaintDevice::PaintDeviceMetric) const;
- virtual void setProperty(PrintEnginePropertyKey key, const QVariant &value);
- virtual QVariant property(PrintEnginePropertyKey key) const;
+ bool newPage() Q_DECL_OVERRIDE;
+ int metric(QPaintDevice::PaintDeviceMetric) const Q_DECL_OVERRIDE;
+ virtual void setProperty(PrintEnginePropertyKey key, const QVariant &value) Q_DECL_OVERRIDE;
+ virtual QVariant property(PrintEnginePropertyKey key) const Q_DECL_OVERRIDE;
// end reimplementations QPrintEngine
QPrinter::PrinterState state;
diff --git a/src/printsupport/kernel/qprinter.h b/src/printsupport/kernel/qprinter.h
index 1f0edaf1f3..61065a893e 100644
--- a/src/printsupport/kernel/qprinter.h
+++ b/src/printsupport/kernel/qprinter.h
@@ -66,7 +66,7 @@ public:
explicit QPrinter(const QPrinterInfo& printer, PrinterMode mode = ScreenResolution);
~QPrinter();
- int devType() const;
+ int devType() const Q_DECL_OVERRIDE;
enum Orientation { Portrait, Landscape };
@@ -314,10 +314,10 @@ public:
void setOrientation(Orientation);
Orientation orientation() const;
- void setPageSize(PageSize);
+ void setPageSize(PageSize) Q_DECL_OVERRIDE;
PageSize pageSize() const;
- void setPageSizeMM(const QSizeF &size);
+ void setPageSizeMM(const QSizeF &size) Q_DECL_OVERRIDE;
void setPaperSize(PaperSize);
PaperSize paperSize() const;
@@ -381,12 +381,12 @@ public:
QString printerSelectionOption() const;
void setPrinterSelectionOption(const QString &);
- bool newPage();
+ bool newPage() Q_DECL_OVERRIDE;
bool abort();
PrinterState printerState() const;
- QPaintEngine *paintEngine() const;
+ QPaintEngine *paintEngine() const Q_DECL_OVERRIDE;
QPrintEngine *printEngine() const;
void setFromTo(int fromPage, int toPage);
@@ -396,13 +396,13 @@ public:
void setPrintRange(PrintRange range);
PrintRange printRange() const;
- void setMargins(const Margins &m);
+ void setMargins(const Margins &m) Q_DECL_OVERRIDE;
void setPageMargins(qreal left, qreal top, qreal right, qreal bottom, Unit unit);
void getPageMargins(qreal *left, qreal *top, qreal *right, qreal *bottom, Unit unit) const;
protected:
- int metric(PaintDeviceMetric) const;
+ int metric(PaintDeviceMetric) const Q_DECL_OVERRIDE;
void setEngines(QPrintEngine *printEngine, QPaintEngine *paintEngine);
private:
diff --git a/src/printsupport/widgets/qprintpreviewwidget.cpp b/src/printsupport/widgets/qprintpreviewwidget.cpp
index 208ad5e0f3..7ea8bf9365 100644
--- a/src/printsupport/widgets/qprintpreviewwidget.cpp
+++ b/src/printsupport/widgets/qprintpreviewwidget.cpp
@@ -66,7 +66,7 @@ public:
inline int pageNumber() const
{ return pageNum; }
- void paint(QPainter *painter, const QStyleOptionGraphicsItem *item, QWidget *widget);
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *item, QWidget *widget) Q_DECL_OVERRIDE;
private:
int pageNum;
@@ -152,7 +152,7 @@ signals:
void resized();
protected:
- void resizeEvent(QResizeEvent* e)
+ void resizeEvent(QResizeEvent* e) Q_DECL_OVERRIDE
{
{
const QSignalBlocker blocker(verticalScrollBar()); // Don't change page, QTBUG-14517
@@ -161,7 +161,7 @@ protected:
emit resized();
}
- void showEvent(QShowEvent* e)
+ void showEvent(QShowEvent* e) Q_DECL_OVERRIDE
{
QGraphicsView::showEvent(e);
emit resized();
diff --git a/src/printsupport/widgets/qprintpreviewwidget.h b/src/printsupport/widgets/qprintpreviewwidget.h
index ff648b03d0..59ac9cdaba 100644
--- a/src/printsupport/widgets/qprintpreviewwidget.h
+++ b/src/printsupport/widgets/qprintpreviewwidget.h
@@ -72,7 +72,7 @@ public:
ZoomMode zoomMode() const;
int currentPage() const;
int pageCount() const;
- void setVisible(bool visible);
+ void setVisible(bool visible) Q_DECL_OVERRIDE;
public Q_SLOTS:
void print();
diff --git a/src/sql/drivers/mysql/qsql_mysql.cpp b/src/sql/drivers/mysql/qsql_mysql.cpp
index db54ce84da..9fd7e2b57f 100644
--- a/src/sql/drivers/mysql/qsql_mysql.cpp
+++ b/src/sql/drivers/mysql/qsql_mysql.cpp
@@ -670,6 +670,8 @@ QVariant QMYSQLResult::data(int field)
bool QMYSQLResult::isNull(int field)
{
+ if (field < 0 || field >= d->fields.count())
+ return true;
if (d->preparedQuery)
return d->fields.at(field).nullIndicator;
else
diff --git a/src/sql/drivers/mysql/qsql_mysql_p.h b/src/sql/drivers/mysql/qsql_mysql_p.h
index 601193f4b5..7cf2c9317c 100644
--- a/src/sql/drivers/mysql/qsql_mysql_p.h
+++ b/src/sql/drivers/mysql/qsql_mysql_p.h
@@ -75,26 +75,26 @@ public:
explicit QMYSQLResult(const QMYSQLDriver* db);
~QMYSQLResult();
- QVariant handle() const;
+ QVariant handle() const Q_DECL_OVERRIDE;
protected:
void cleanup();
- bool fetch(int i);
- bool fetchNext();
- bool fetchLast();
- bool fetchFirst();
- QVariant data(int field);
- bool isNull(int field);
- bool reset (const QString& query);
- int size();
- int numRowsAffected();
- QVariant lastInsertId() const;
- QSqlRecord record() const;
- void virtual_hook(int id, void *data);
- bool nextResult();
+ bool fetch(int i) Q_DECL_OVERRIDE;
+ bool fetchNext() Q_DECL_OVERRIDE;
+ bool fetchLast() Q_DECL_OVERRIDE;
+ bool fetchFirst() Q_DECL_OVERRIDE;
+ QVariant data(int field) Q_DECL_OVERRIDE;
+ bool isNull(int field) Q_DECL_OVERRIDE;
+ bool reset (const QString& query) Q_DECL_OVERRIDE;
+ int size() Q_DECL_OVERRIDE;
+ int numRowsAffected() Q_DECL_OVERRIDE;
+ QVariant lastInsertId() const Q_DECL_OVERRIDE;
+ QSqlRecord record() const Q_DECL_OVERRIDE;
+ void virtual_hook(int id, void *data) Q_DECL_OVERRIDE;
+ bool nextResult() Q_DECL_OVERRIDE;
#if MYSQL_VERSION_ID >= 40108
- bool prepare(const QString& stmt);
- bool exec();
+ bool prepare(const QString& stmt) Q_DECL_OVERRIDE;
+ bool exec() Q_DECL_OVERRIDE;
#endif
private:
QMYSQLResultPrivate* d;
@@ -109,29 +109,29 @@ public:
explicit QMYSQLDriver(QObject *parent=0);
explicit QMYSQLDriver(MYSQL *con, QObject * parent=0);
~QMYSQLDriver();
- bool hasFeature(DriverFeature f) const;
+ bool hasFeature(DriverFeature f) const Q_DECL_OVERRIDE;
bool open(const QString & db,
const QString & user,
const QString & password,
const QString & host,
int port,
- const QString& connOpts);
- void close();
- QSqlResult *createResult() const;
- QStringList tables(QSql::TableType) const;
- QSqlIndex primaryIndex(const QString& tablename) const;
- QSqlRecord record(const QString& tablename) const;
+ const QString& connOpts) Q_DECL_OVERRIDE;
+ void close() Q_DECL_OVERRIDE;
+ QSqlResult *createResult() const Q_DECL_OVERRIDE;
+ QStringList tables(QSql::TableType) const Q_DECL_OVERRIDE;
+ QSqlIndex primaryIndex(const QString& tablename) const Q_DECL_OVERRIDE;
+ QSqlRecord record(const QString& tablename) const Q_DECL_OVERRIDE;
QString formatValue(const QSqlField &field,
- bool trimStrings) const;
- QVariant handle() const;
- QString escapeIdentifier(const QString &identifier, IdentifierType type) const;
+ bool trimStrings) const Q_DECL_OVERRIDE;
+ QVariant handle() const Q_DECL_OVERRIDE;
+ QString escapeIdentifier(const QString &identifier, IdentifierType type) const Q_DECL_OVERRIDE;
- bool isIdentifierEscaped(const QString &identifier, IdentifierType type) const;
+ bool isIdentifierEscaped(const QString &identifier, IdentifierType type) const Q_DECL_OVERRIDE;
protected:
- bool beginTransaction();
- bool commitTransaction();
- bool rollbackTransaction();
+ bool beginTransaction() Q_DECL_OVERRIDE;
+ bool commitTransaction() Q_DECL_OVERRIDE;
+ bool rollbackTransaction() Q_DECL_OVERRIDE;
private:
void init();
};
diff --git a/src/sql/drivers/odbc/qsql_odbc.cpp b/src/sql/drivers/odbc/qsql_odbc.cpp
index 2b14809943..9462df8f97 100644
--- a/src/sql/drivers/odbc/qsql_odbc.cpp
+++ b/src/sql/drivers/odbc/qsql_odbc.cpp
@@ -222,12 +222,7 @@ static QString qWarnODBCHandle(int handleType, SQLHANDLE handle, int *nativeCode
if (r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) {
if (nativeCode)
*nativeCode = nativeCode_;
- QString tmpstore;
-#ifdef UNICODE
- tmpstore = fromSQLTCHAR(description_, msgLen);
-#else
- tmpstore = QString::fromUtf8((const char*)description_.constData(), msgLen);
-#endif
+ const QString tmpstore = fromSQLTCHAR(description_, msgLen);
if(result != tmpstore) {
if(!result.isEmpty())
result += QLatin1Char(' ');
@@ -241,17 +236,39 @@ static QString qWarnODBCHandle(int handleType, SQLHANDLE handle, int *nativeCode
return result;
}
+static QString qODBCWarn(const SQLHANDLE hStmt, const SQLHANDLE envHandle = 0,
+ const SQLHANDLE pDbC = 0, int *nativeCode = 0)
+{
+ QString result;
+ if (envHandle)
+ result += qWarnODBCHandle(SQL_HANDLE_ENV, envHandle, nativeCode);
+ if (pDbC) {
+ const QString dMessage = qWarnODBCHandle(SQL_HANDLE_DBC, pDbC, nativeCode);
+ if (!dMessage.isEmpty()) {
+ if (!result.isEmpty())
+ result += QLatin1Char(' ');
+ result += dMessage;
+ }
+ }
+ if (hStmt) {
+ const QString hMessage = qWarnODBCHandle(SQL_HANDLE_STMT, hStmt, nativeCode);
+ if (!hMessage.isEmpty()) {
+ if (!result.isEmpty())
+ result += QLatin1Char(' ');
+ result += hMessage;
+ }
+ }
+ return result;
+}
+
static QString qODBCWarn(const QODBCPrivate* odbc, int *nativeCode = 0)
{
- return QString(qWarnODBCHandle(SQL_HANDLE_ENV, odbc->dpEnv()) + QLatin1Char(' ')
- + qWarnODBCHandle(SQL_HANDLE_DBC, odbc->dpDbc()) + QLatin1Char(' ')
- + qWarnODBCHandle(SQL_HANDLE_STMT, odbc->hStmt, nativeCode)).simplified();
+ return qODBCWarn(odbc->hStmt, odbc->dpEnv(), odbc->dpDbc(), nativeCode);
}
static QString qODBCWarn(const QODBCDriverPrivate* odbc, int *nativeCode = 0)
{
- return QString(qWarnODBCHandle(SQL_HANDLE_ENV, odbc->hEnv) + QLatin1Char(' ')
- + qWarnODBCHandle(SQL_HANDLE_DBC, odbc->hDbc, nativeCode)).simplified();
+ return qODBCWarn(0, odbc->hEnv, odbc->hDbc, nativeCode);
}
static void qSqlWarning(const QString& message, const QODBCPrivate* odbc)
@@ -264,6 +281,11 @@ static void qSqlWarning(const QString &message, const QODBCDriverPrivate *odbc)
qWarning() << message << "\tError:" << qODBCWarn(odbc);
}
+static void qSqlWarning(const QString &message, const SQLHANDLE hStmt)
+{
+ qWarning() << message << "\tError:" << qODBCWarn(hStmt);
+}
+
static QSqlError qMakeError(const QString& err, QSqlError::ErrorType type, const QODBCPrivate* p)
{
int nativeCode = -1;
@@ -279,10 +301,8 @@ static QSqlError qMakeError(const QString& err, QSqlError::ErrorType type,
return QSqlError(QLatin1String("QODBC3: ") + err, qODBCWarn(p), type, nativeCode);
}
-template<class T>
-static QVariant::Type qDecodeODBCType(SQLSMALLINT sqltype, const T* p, bool isSigned = true)
+static QVariant::Type qDecodeODBCType(SQLSMALLINT sqltype, bool isSigned = true)
{
- Q_UNUSED(p);
QVariant::Type type = QVariant::Invalid;
switch (sqltype) {
case SQL_DECIMAL:
@@ -362,7 +382,7 @@ static QString qGetStringData(SQLHANDLE hStmt, int column, int colSize, bool uni
0,
&lengthIndicator);
if ((r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) && lengthIndicator > 0)
- colSize = lengthIndicator/sizeof(SQLTCHAR) + 1;
+ colSize = int(lengthIndicator / sizeof(SQLTCHAR) + 1);
QVarLengthArray<SQLTCHAR> buf(colSize);
memset(buf.data(), 0, colSize*sizeof(SQLTCHAR));
while (true) {
@@ -392,7 +412,7 @@ static QString qGetStringData(SQLHANDLE hStmt, int column, int colSize, bool uni
// contain the number of bytes returned - it contains the
// total number of bytes that CAN be fetched
// colSize-1: remove 0 termination when there is more data to fetch
- int rSize = (r == SQL_SUCCESS_WITH_INFO) ? colSize : lengthIndicator/sizeof(SQLTCHAR);
+ int rSize = (r == SQL_SUCCESS_WITH_INFO) ? colSize : int(lengthIndicator / sizeof(SQLTCHAR));
fieldVal += fromSQLTCHAR(buf, rSize);
if (lengthIndicator < SQLLEN(colSize*sizeof(SQLTCHAR))) {
// workaround for Drivermanagers that don't return SQL_NO_DATA
@@ -569,6 +589,21 @@ static QVariant qGetBigIntData(SQLHANDLE hStmt, int column, bool isSigned = true
return quint64(lngbuf);
}
+static bool isAutoValue(const SQLHANDLE hStmt, int column)
+{
+ SQLLEN nNumericAttribute = 0; // Check for auto-increment
+ const SQLRETURN r = ::SQLColAttribute(hStmt, column + 1, SQL_DESC_AUTO_UNIQUE_VALUE,
+ 0, 0, 0, &nNumericAttribute);
+ if (r != SQL_SUCCESS && r != SQL_SUCCESS_WITH_INFO) {
+ qSqlWarning(QStringLiteral("qMakeField: Unable to get autovalue attribute for column ")
+ + QString::number(column), hStmt);
+ return false;
+ }
+ return nNumericAttribute != SQL_FALSE;
+}
+
+static QSqlField qMakeFieldInfo(const SQLHANDLE hStmt, int i, QString *errorMessage);
+
// creates a QSqlField from a valid hStmt generated
// by SQLColumns. The hStmt has to point to a valid position.
static QSqlField qMakeFieldInfo(const SQLHANDLE hStmt, const QODBCDriverPrivate* p)
@@ -593,6 +628,15 @@ static QSqlField qMakeFieldInfo(const SQLHANDLE hStmt, const QODBCDriverPrivate*
static QSqlField qMakeFieldInfo(const QODBCPrivate* p, int i )
{
+ QString errorMessage;
+ const QSqlField result = qMakeFieldInfo(p->hStmt, i, &errorMessage);
+ if (!errorMessage.isEmpty())
+ qSqlWarning(errorMessage, p);
+ return result;
+}
+
+static QSqlField qMakeFieldInfo(const SQLHANDLE hStmt, int i, QString *errorMessage)
+{
SQLSMALLINT colNameLen;
SQLSMALLINT colType;
SQLULEN colSize;
@@ -600,7 +644,8 @@ static QSqlField qMakeFieldInfo(const QODBCPrivate* p, int i )
SQLSMALLINT nullable;
SQLRETURN r = SQL_ERROR;
QVarLengthArray<SQLTCHAR> colName(COLNAMESIZE);
- r = SQLDescribeCol(p->hStmt,
+ errorMessage->clear();
+ r = SQLDescribeCol(hStmt,
i+1,
colName.data(),
(SQLSMALLINT)COLNAMESIZE,
@@ -611,12 +656,12 @@ static QSqlField qMakeFieldInfo(const QODBCPrivate* p, int i )
&nullable);
if (r != SQL_SUCCESS) {
- qSqlWarning(QString::fromLatin1("qMakeField: Unable to describe column %1").arg(i), p);
+ *errorMessage = QStringLiteral("qMakeField: Unable to describe column ") + QString::number(i);
return QSqlField();
}
SQLLEN unsignedFlag = SQL_FALSE;
- r = SQLColAttribute (p->hStmt,
+ r = SQLColAttribute (hStmt,
i + 1,
SQL_DESC_UNSIGNED,
0,
@@ -624,16 +669,13 @@ static QSqlField qMakeFieldInfo(const QODBCPrivate* p, int i )
0,
&unsignedFlag);
if (r != SQL_SUCCESS) {
- qSqlWarning(QString::fromLatin1("qMakeField: Unable to get column attributes for column %1").arg(i), p);
+ qSqlWarning(QStringLiteral("qMakeField: Unable to get column attributes for column ")
+ + QString::number(i), hStmt);
}
-#ifdef UNICODE
- QString qColName(fromSQLTCHAR(colName, colNameLen));
-#else
- QString qColName = QString::fromUtf8((const char *)colName.constData());
-#endif
+ const QString qColName(fromSQLTCHAR(colName, colNameLen));
// nullable can be SQL_NO_NULLS, SQL_NULLABLE or SQL_NULLABLE_UNKNOWN
- QVariant::Type type = qDecodeODBCType(colType, p, unsignedFlag == SQL_FALSE);
+ QVariant::Type type = qDecodeODBCType(colType, unsignedFlag == SQL_FALSE);
QSqlField f(qColName, type);
f.setSqlType(colType);
f.setLength(colSize == 0 ? -1 : int(colSize));
@@ -643,6 +685,7 @@ static QSqlField qMakeFieldInfo(const QODBCPrivate* p, int i )
else if (nullable == SQL_NULLABLE)
f.setRequired(false);
// else we don't know
+ f.setAutoValue(isAutoValue(hStmt, i));
return f;
}
@@ -664,11 +707,7 @@ QChar QODBCDriverPrivate::quoteChar()
sizeof(driverResponse),
&length);
if (r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO)
-#ifdef UNICODE
quote = QChar(driverResponse[0]);
-#else
- quote = QLatin1Char(driverResponse[0]);
-#endif
else
quote = QLatin1Char('"');
isQuoteInitialized = true;
@@ -713,11 +752,7 @@ bool QODBCDriverPrivate::setConnectionOptions(const QString& connOpts)
} else if (opt.toUpper() == QLatin1String("SQL_ATTR_CURRENT_CATALOG")) {
val.utf16(); // 0 terminate
r = SQLSetConnectAttr(hDbc, SQL_ATTR_CURRENT_CATALOG,
-#ifdef UNICODE
toSQLTCHAR(val).data(),
-#else
- (SQLCHAR*) val.toUtf8().data(),
-#endif
val.length()*sizeof(SQLTCHAR));
} else if (opt.toUpper() == QLatin1String("SQL_ATTR_METADATA_ID")) {
if (val.toUpper() == QLatin1String("SQL_TRUE")) {
@@ -735,11 +770,7 @@ bool QODBCDriverPrivate::setConnectionOptions(const QString& connOpts)
} else if (opt.toUpper() == QLatin1String("SQL_ATTR_TRACEFILE")) {
val.utf16(); // 0 terminate
r = SQLSetConnectAttr(hDbc, SQL_ATTR_TRACEFILE,
-#ifdef UNICODE
toSQLTCHAR(val).data(),
-#else
- (SQLCHAR*) val.toUtf8().data(),
-#endif
val.length()*sizeof(SQLTCHAR));
} else if (opt.toUpper() == QLatin1String("SQL_ATTR_TRACE")) {
if (val.toUpper() == QLatin1String("SQL_OPT_TRACE_OFF")) {
@@ -944,16 +975,9 @@ bool QODBCResult::reset (const QString& query)
return false;
}
-#ifdef UNICODE
r = SQLExecDirect(d->hStmt,
toSQLTCHAR(query).data(),
(SQLINTEGER) query.length());
-#else
- QByteArray query8 = query.toUtf8();
- r = SQLExecDirect(d->hStmt,
- (SQLCHAR*) query8.data(),
- (SQLINTEGER) query8.length());
-#endif
if (r != SQL_SUCCESS && r != SQL_SUCCESS_WITH_INFO && r!= SQL_NO_DATA) {
setLastError(qMakeError(QCoreApplication::translate("QODBCResult",
"Unable to execute statement"), QSqlError::StatementError, d));
@@ -1290,16 +1314,9 @@ bool QODBCResult::prepare(const QString& query)
return false;
}
-#ifdef UNICODE
r = SQLPrepare(d->hStmt,
toSQLTCHAR(query).data(),
(SQLINTEGER) query.length());
-#else
- QByteArray query8 = query.toUtf8();
- r = SQLPrepare(d->hStmt,
- (SQLCHAR*) query8.data(),
- (SQLINTEGER) query8.length());
-#endif
if (r != SQL_SUCCESS) {
setLastError(qMakeError(QCoreApplication::translate("QODBCResult",
@@ -1889,11 +1906,7 @@ bool QODBCDriver::open(const QString & db,
memset(connOut.data(), 0, connOut.size() * sizeof(SQLTCHAR));
r = SQLDriverConnect(d->hDbc,
NULL,
-#ifdef UNICODE
toSQLTCHAR(connQStr).data(),
-#else
- (SQLCHAR*)connQStr.toUtf8().data(),
-#endif
(SQLSMALLINT)connQStr.length(),
connOut.data(),
1024,
@@ -2097,15 +2110,10 @@ void QODBCDriverPrivate::checkDBMS()
r = SQLGetInfo(hDbc,
SQL_DBMS_NAME,
serverString.data(),
- serverString.size() * sizeof(SQLTCHAR),
+ SQLSMALLINT(serverString.size() * sizeof(SQLTCHAR)),
&t);
if (r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) {
- QString serverType;
-#ifdef UNICODE
- serverType = fromSQLTCHAR(serverString, t/sizeof(SQLTCHAR));
-#else
- serverType = QString::fromUtf8((const char *)serverString.constData(), t);
-#endif
+ const QString serverType = fromSQLTCHAR(serverString, t / sizeof(SQLTCHAR));
if (serverType.contains(QLatin1String("PostgreSQL"), Qt::CaseInsensitive))
dbmsType = QSqlDriver::PostgreSQL;
else if (serverType.contains(QLatin1String("Oracle"), Qt::CaseInsensitive))
@@ -2120,15 +2128,10 @@ void QODBCDriverPrivate::checkDBMS()
r = SQLGetInfo(hDbc,
SQL_DRIVER_NAME,
serverString.data(),
- serverString.size() * sizeof(SQLTCHAR),
+ SQLSMALLINT(serverString.size() * sizeof(SQLTCHAR)),
&t);
if (r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO) {
- QString serverType;
-#ifdef UNICODE
- serverType = fromSQLTCHAR(serverString, t/sizeof(SQLTCHAR));
-#else
- serverType = QString::fromUtf8((const char *)serverString.constData(), t);
-#endif
+ const QString serverType = fromSQLTCHAR(serverString, t / sizeof(SQLTCHAR));
isFreeTDSDriver = serverType.contains(QLatin1String("tdsodbc"), Qt::CaseInsensitive);
unicode = unicode && !isFreeTDSDriver;
}
@@ -2151,14 +2154,10 @@ void QODBCDriverPrivate::checkHasMultiResults()
SQLRETURN r = SQLGetInfo(hDbc,
SQL_MULT_RESULT_SETS,
driverResponse.data(),
- driverResponse.size() * sizeof(SQLTCHAR),
+ SQLSMALLINT(driverResponse.size() * sizeof(SQLTCHAR)),
&length);
if (r == SQL_SUCCESS || r == SQL_SUCCESS_WITH_INFO)
-#ifdef UNICODE
hasMultiResultSets = fromSQLTCHAR(driverResponse, length/sizeof(SQLTCHAR)).startsWith(QLatin1Char('Y'));
-#else
- hasMultiResultSets = QString::fromUtf8((const char *)driverResponse.constData(), length).startsWith(QLatin1Char('Y'));
-#endif
}
void QODBCDriverPrivate::checkDateTimePrecision()
@@ -2299,11 +2298,7 @@ QStringList QODBCDriver::tables(QSql::TableType type) const
0,
NULL,
0,
-#ifdef UNICODE
toSQLTCHAR(joinedTableTypeString).data(),
-#else
- (SQLCHAR*)joinedTableTypeString.toUtf8().data(),
-#endif
joinedTableTypeString.length() /* characters, not bytes */);
if (r != SQL_SUCCESS)
@@ -2379,23 +2374,11 @@ QSqlIndex QODBCDriver::primaryIndex(const QString& tablename) const
(SQLPOINTER)SQL_CURSOR_FORWARD_ONLY,
SQL_IS_UINTEGER);
r = SQLPrimaryKeys(hStmt,
-#ifdef UNICODE
catalog.length() == 0 ? NULL : toSQLTCHAR(catalog).data(),
-#else
- catalog.length() == 0 ? NULL : (SQLCHAR*)catalog.toUtf8().data(),
-#endif
catalog.length(),
-#ifdef UNICODE
schema.length() == 0 ? NULL : toSQLTCHAR(schema).data(),
-#else
- schema.length() == 0 ? NULL : (SQLCHAR*)schema.toUtf8().data(),
-#endif
schema.length(),
-#ifdef UNICODE
toSQLTCHAR(table).data(),
-#else
- (SQLCHAR*)table.toUtf8().data(),
-#endif
table.length() /* in characters, not in bytes */);
// if the SQLPrimaryKeys() call does not succeed (e.g the driver
@@ -2404,23 +2387,11 @@ QSqlIndex QODBCDriver::primaryIndex(const QString& tablename) const
if (r != SQL_SUCCESS) {
r = SQLSpecialColumns(hStmt,
SQL_BEST_ROWID,
-#ifdef UNICODE
catalog.length() == 0 ? NULL : toSQLTCHAR(catalog).data(),
-#else
- catalog.length() == 0 ? NULL : (SQLCHAR*)catalog.toUtf8().data(),
-#endif
catalog.length(),
-#ifdef UNICODE
schema.length() == 0 ? NULL : toSQLTCHAR(schema).data(),
-#else
- schema.length() == 0 ? NULL : (SQLCHAR*)schema.toUtf8().data(),
-#endif
schema.length(),
-#ifdef UNICODE
toSQLTCHAR(table).data(),
-#else
- (SQLCHAR*)table.toUtf8().data(),
-#endif
table.length(),
SQL_SCOPE_CURROW,
SQL_NULLABLE);
@@ -2505,23 +2476,11 @@ QSqlRecord QODBCDriver::record(const QString& tablename) const
(SQLPOINTER)SQL_CURSOR_FORWARD_ONLY,
SQL_IS_UINTEGER);
r = SQLColumns(hStmt,
-#ifdef UNICODE
catalog.length() == 0 ? NULL : toSQLTCHAR(catalog).data(),
-#else
- catalog.length() == 0 ? NULL : (SQLCHAR*)catalog.toUtf8().data(),
-#endif
catalog.length(),
-#ifdef UNICODE
schema.length() == 0 ? NULL : toSQLTCHAR(schema).data(),
-#else
- schema.length() == 0 ? NULL : (SQLCHAR*)schema.toUtf8().data(),
-#endif
schema.length(),
-#ifdef UNICODE
toSQLTCHAR(table).data(),
-#else
- (SQLCHAR*)table.toUtf8().data(),
-#endif
table.length(),
NULL,
0);
diff --git a/src/sql/drivers/psql/qsql_psql.cpp b/src/sql/drivers/psql/qsql_psql.cpp
index 4268ea06f6..455e1f46ca 100644
--- a/src/sql/drivers/psql/qsql_psql.cpp
+++ b/src/sql/drivers/psql/qsql_psql.cpp
@@ -200,7 +200,7 @@ public:
preparedQueriesEnabled(false)
{ }
- QString fieldSerial(int i) const { return QLatin1Char('$') + QString::number(i + 1); }
+ QString fieldSerial(int i) const Q_DECL_OVERRIDE { return QLatin1Char('$') + QString::number(i + 1); }
void deallocatePreparedStmt();
const QPSQLDriverPrivate * privDriver() const
{
diff --git a/src/sql/drivers/psql/qsql_psql_p.h b/src/sql/drivers/psql/qsql_psql_p.h
index 4d8283ff48..b840fa8ed9 100644
--- a/src/sql/drivers/psql/qsql_psql_p.h
+++ b/src/sql/drivers/psql/qsql_psql_p.h
@@ -71,23 +71,23 @@ public:
QPSQLResult(const QPSQLDriver* db);
~QPSQLResult();
- QVariant handle() const;
- void virtual_hook(int id, void *data);
+ QVariant handle() const Q_DECL_OVERRIDE;
+ void virtual_hook(int id, void *data) Q_DECL_OVERRIDE;
protected:
void cleanup();
- bool fetch(int i);
- bool fetchFirst();
- bool fetchLast();
- QVariant data(int i);
- bool isNull(int field);
- bool reset (const QString& query);
- int size();
- int numRowsAffected();
- QSqlRecord record() const;
- QVariant lastInsertId() const;
- bool prepare(const QString& query);
- bool exec();
+ bool fetch(int i) Q_DECL_OVERRIDE;
+ bool fetchFirst() Q_DECL_OVERRIDE;
+ bool fetchLast() Q_DECL_OVERRIDE;
+ QVariant data(int i) Q_DECL_OVERRIDE;
+ bool isNull(int field) Q_DECL_OVERRIDE;
+ bool reset (const QString& query) Q_DECL_OVERRIDE;
+ int size() Q_DECL_OVERRIDE;
+ int numRowsAffected() Q_DECL_OVERRIDE;
+ QSqlRecord record() const Q_DECL_OVERRIDE;
+ QVariant lastInsertId() const Q_DECL_OVERRIDE;
+ bool prepare(const QString& query) Q_DECL_OVERRIDE;
+ bool exec() Q_DECL_OVERRIDE;
};
class QPSQLDriverPrivate;
@@ -117,34 +117,34 @@ public:
explicit QPSQLDriver(QObject *parent=0);
explicit QPSQLDriver(PGconn *conn, QObject *parent=0);
~QPSQLDriver();
- bool hasFeature(DriverFeature f) const;
+ bool hasFeature(DriverFeature f) const Q_DECL_OVERRIDE;
bool open(const QString & db,
const QString & user,
const QString & password,
const QString & host,
int port,
- const QString& connOpts);
- bool isOpen() const;
- void close();
- QSqlResult *createResult() const;
- QStringList tables(QSql::TableType) const;
- QSqlIndex primaryIndex(const QString& tablename) const;
- QSqlRecord record(const QString& tablename) const;
+ const QString& connOpts) Q_DECL_OVERRIDE;
+ bool isOpen() const Q_DECL_OVERRIDE;
+ void close() Q_DECL_OVERRIDE;
+ QSqlResult *createResult() const Q_DECL_OVERRIDE;
+ QStringList tables(QSql::TableType) const Q_DECL_OVERRIDE;
+ QSqlIndex primaryIndex(const QString& tablename) const Q_DECL_OVERRIDE;
+ QSqlRecord record(const QString& tablename) const Q_DECL_OVERRIDE;
Protocol protocol() const;
- QVariant handle() const;
+ QVariant handle() const Q_DECL_OVERRIDE;
- QString escapeIdentifier(const QString &identifier, IdentifierType type) const;
- QString formatValue(const QSqlField &field, bool trimStrings) const;
+ QString escapeIdentifier(const QString &identifier, IdentifierType type) const Q_DECL_OVERRIDE;
+ QString formatValue(const QSqlField &field, bool trimStrings) const Q_DECL_OVERRIDE;
- bool subscribeToNotification(const QString &name);
- bool unsubscribeFromNotification(const QString &name);
- QStringList subscribedToNotifications() const;
+ bool subscribeToNotification(const QString &name) Q_DECL_OVERRIDE;
+ bool unsubscribeFromNotification(const QString &name) Q_DECL_OVERRIDE;
+ QStringList subscribedToNotifications() const Q_DECL_OVERRIDE;
protected:
- bool beginTransaction();
- bool commitTransaction();
- bool rollbackTransaction();
+ bool beginTransaction() Q_DECL_OVERRIDE;
+ bool commitTransaction() Q_DECL_OVERRIDE;
+ bool rollbackTransaction() Q_DECL_OVERRIDE;
private Q_SLOTS:
void _q_handleNotification(int);
diff --git a/src/sql/drivers/sqlite/qsql_sqlite.cpp b/src/sql/drivers/sqlite/qsql_sqlite.cpp
index 84b6bbe80e..fa79230aa1 100644
--- a/src/sql/drivers/sqlite/qsql_sqlite.cpp
+++ b/src/sql/drivers/sqlite/qsql_sqlite.cpp
@@ -110,19 +110,19 @@ class QSQLiteResult : public QSqlCachedResult
public:
explicit QSQLiteResult(const QSQLiteDriver* db);
~QSQLiteResult();
- QVariant handle() const;
+ QVariant handle() const Q_DECL_OVERRIDE;
protected:
- bool gotoNext(QSqlCachedResult::ValueCache& row, int idx);
- bool reset(const QString &query);
- bool prepare(const QString &query);
- bool exec();
- int size();
- int numRowsAffected();
- QVariant lastInsertId() const;
- QSqlRecord record() const;
- void detachFromResultSet();
- void virtual_hook(int id, void *data);
+ bool gotoNext(QSqlCachedResult::ValueCache& row, int idx) Q_DECL_OVERRIDE;
+ bool reset(const QString &query) Q_DECL_OVERRIDE;
+ bool prepare(const QString &query) Q_DECL_OVERRIDE;
+ bool exec() Q_DECL_OVERRIDE;
+ int size() Q_DECL_OVERRIDE;
+ int numRowsAffected() Q_DECL_OVERRIDE;
+ QVariant lastInsertId() const Q_DECL_OVERRIDE;
+ QSqlRecord record() const Q_DECL_OVERRIDE;
+ void detachFromResultSet() Q_DECL_OVERRIDE;
+ void virtual_hook(int id, void *data) Q_DECL_OVERRIDE;
private:
QSQLiteResultPrivate* d;
diff --git a/src/sql/drivers/sqlite/qsql_sqlite_p.h b/src/sql/drivers/sqlite/qsql_sqlite_p.h
index 45a5bd75ac..5b5792b469 100644
--- a/src/sql/drivers/sqlite/qsql_sqlite_p.h
+++ b/src/sql/drivers/sqlite/qsql_sqlite_p.h
@@ -70,24 +70,24 @@ public:
explicit QSQLiteDriver(QObject *parent = 0);
explicit QSQLiteDriver(sqlite3 *connection, QObject *parent = 0);
~QSQLiteDriver();
- bool hasFeature(DriverFeature f) const;
+ bool hasFeature(DriverFeature f) const Q_DECL_OVERRIDE;
bool open(const QString & db,
const QString & user,
const QString & password,
const QString & host,
int port,
- const QString & connOpts);
- void close();
- QSqlResult *createResult() const;
- bool beginTransaction();
- bool commitTransaction();
- bool rollbackTransaction();
- QStringList tables(QSql::TableType) const;
+ const QString & connOpts) Q_DECL_OVERRIDE;
+ void close() Q_DECL_OVERRIDE;
+ QSqlResult *createResult() const Q_DECL_OVERRIDE;
+ bool beginTransaction() Q_DECL_OVERRIDE;
+ bool commitTransaction() Q_DECL_OVERRIDE;
+ bool rollbackTransaction() Q_DECL_OVERRIDE;
+ QStringList tables(QSql::TableType) const Q_DECL_OVERRIDE;
- QSqlRecord record(const QString& tablename) const;
- QSqlIndex primaryIndex(const QString &table) const;
- QVariant handle() const;
- QString escapeIdentifier(const QString &identifier, IdentifierType) const;
+ QSqlRecord record(const QString& tablename) const Q_DECL_OVERRIDE;
+ QSqlIndex primaryIndex(const QString &table) const Q_DECL_OVERRIDE;
+ QVariant handle() const Q_DECL_OVERRIDE;
+ QString escapeIdentifier(const QString &identifier, IdentifierType) const Q_DECL_OVERRIDE;
};
QT_END_NAMESPACE
diff --git a/src/sql/kernel/qsqldatabase.h b/src/sql/kernel/qsqldatabase.h
index d5f381102e..9e304fe3ee 100644
--- a/src/sql/kernel/qsqldatabase.h
+++ b/src/sql/kernel/qsqldatabase.h
@@ -58,7 +58,7 @@ template <class T>
class QSqlDriverCreator : public QSqlDriverCreatorBase
{
public:
- QSqlDriver *createObject() const { return new T; }
+ QSqlDriver *createObject() const Q_DECL_OVERRIDE { return new T; }
};
class Q_SQL_EXPORT QSqlDatabase
diff --git a/src/sql/kernel/qsqlfield.cpp b/src/sql/kernel/qsqlfield.cpp
index 3fd2c68296..a76e38b6f1 100644
--- a/src/sql/kernel/qsqlfield.cpp
+++ b/src/sql/kernel/qsqlfield.cpp
@@ -534,6 +534,12 @@ QDebug operator<<(QDebug dbg, const QSqlField &f)
Returns \c true if the value is auto-generated by the database,
for example auto-increment primary key values.
+ \note When using the ODBC driver, due to limitations in the ODBC API,
+ the \c isAutoValue() field is only populated in a QSqlField resulting from a
+ QSqlRecord obtained by executing a \c SELECT query. It is \c false in a QSqlField
+ resulting from a QSqlRecord returned from QSqlDatabase::record() or
+ QSqlDatabase::primaryIndex().
+
\sa setAutoValue()
*/
bool QSqlField::isAutoValue() const
diff --git a/src/sql/models/qsqlquerymodel.h b/src/sql/models/qsqlquerymodel.h
index 95910513df..93b1303807 100644
--- a/src/sql/models/qsqlquerymodel.h
+++ b/src/sql/models/qsqlquerymodel.h
@@ -54,19 +54,19 @@ public:
explicit QSqlQueryModel(QObject *parent = 0);
virtual ~QSqlQueryModel();
- int rowCount(const QModelIndex &parent = QModelIndex()) const;
- int columnCount(const QModelIndex &parent = QModelIndex()) const;
+ int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
+ int columnCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
QSqlRecord record(int row) const;
QSqlRecord record() const;
- QVariant data(const QModelIndex &item, int role = Qt::DisplayRole) const;
+ QVariant data(const QModelIndex &item, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
QVariant headerData(int section, Qt::Orientation orientation,
- int role = Qt::DisplayRole) const;
+ int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value,
- int role = Qt::EditRole);
+ int role = Qt::EditRole) Q_DECL_OVERRIDE;
- bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex());
- bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex());
+ bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
+ bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
void setQuery(const QSqlQuery &query);
void setQuery(const QString &query, const QSqlDatabase &db = QSqlDatabase());
@@ -76,8 +76,8 @@ public:
QSqlError lastError() const;
- void fetchMore(const QModelIndex &parent = QModelIndex());
- bool canFetchMore(const QModelIndex &parent = QModelIndex()) const;
+ void fetchMore(const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
+ bool canFetchMore(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
protected:
void beginInsertRows(const QModelIndex &parent, int first, int last);
diff --git a/src/sql/models/qsqlrelationaltablemodel.cpp b/src/sql/models/qsqlrelationaltablemodel.cpp
index 8f89f27cde..c6ef1570c0 100644
--- a/src/sql/models/qsqlrelationaltablemodel.cpp
+++ b/src/sql/models/qsqlrelationaltablemodel.cpp
@@ -150,7 +150,7 @@ class QRelatedTableModel : public QSqlTableModel
{
public:
QRelatedTableModel(QRelation *rel, QObject *parent = 0, QSqlDatabase db = QSqlDatabase());
- bool select();
+ bool select() Q_DECL_OVERRIDE;
private:
bool firstSelect;
QRelation *relation;
@@ -262,12 +262,12 @@ public:
{}
QString fullyQualifiedFieldName(const QString &tableName, const QString &fieldName) const;
- int nameToIndex(const QString &name) const;
+ int nameToIndex(const QString &name) const Q_DECL_OVERRIDE;
mutable QVector<QRelation> relations;
QSqlRecord baseRec; // the record without relations
void clearChanges();
- void clearCache();
- void revertCachedRow(int row);
+ void clearCache() Q_DECL_OVERRIDE;
+ void revertCachedRow(int row) Q_DECL_OVERRIDE;
void translateFieldNames(QSqlRecord &values) const;
QSqlRelationalTableModel::JoinMode joinMode;
diff --git a/src/sql/models/qsqlrelationaltablemodel.h b/src/sql/models/qsqlrelationaltablemodel.h
index 8a9ab43443..92ddb03c6c 100644
--- a/src/sql/models/qsqlrelationaltablemodel.h
+++ b/src/sql/models/qsqlrelationaltablemodel.h
@@ -74,27 +74,27 @@ public:
QSqlDatabase db = QSqlDatabase());
virtual ~QSqlRelationalTableModel();
- QVariant data(const QModelIndex &item, int role = Qt::DisplayRole) const;
- bool setData(const QModelIndex &item, const QVariant &value, int role = Qt::EditRole);
- bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex());
+ QVariant data(const QModelIndex &item, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
+ bool setData(const QModelIndex &item, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE;
+ bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
- void clear();
- bool select();
+ void clear() Q_DECL_OVERRIDE;
+ bool select() Q_DECL_OVERRIDE;
- void setTable(const QString &tableName);
+ void setTable(const QString &tableName) Q_DECL_OVERRIDE;
virtual void setRelation(int column, const QSqlRelation &relation);
QSqlRelation relation(int column) const;
virtual QSqlTableModel *relationModel(int column) const;
void setJoinMode( QSqlRelationalTableModel::JoinMode joinMode );
public Q_SLOTS:
- void revertRow(int row);
+ void revertRow(int row) Q_DECL_OVERRIDE;
protected:
- QString selectStatement() const;
- bool updateRowInTable(int row, const QSqlRecord &values);
- bool insertRowIntoTable(const QSqlRecord &values);
- QString orderByClause() const;
+ QString selectStatement() const Q_DECL_OVERRIDE;
+ bool updateRowInTable(int row, const QSqlRecord &values) Q_DECL_OVERRIDE;
+ bool insertRowIntoTable(const QSqlRecord &values) Q_DECL_OVERRIDE;
+ QString orderByClause() const Q_DECL_OVERRIDE;
private:
Q_DECLARE_PRIVATE(QSqlRelationalTableModel)
diff --git a/src/sql/models/qsqltablemodel.h b/src/sql/models/qsqltablemodel.h
index 4263d387ea..98841118f8 100644
--- a/src/sql/models/qsqltablemodel.h
+++ b/src/sql/models/qsqltablemodel.h
@@ -59,19 +59,19 @@ public:
virtual void setTable(const QString &tableName);
QString tableName() const;
- Qt::ItemFlags flags(const QModelIndex &index) const;
+ Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE;
QSqlRecord record() const;
QSqlRecord record(int row) const;
- QVariant data(const QModelIndex &idx, int role = Qt::DisplayRole) const;
- bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
+ QVariant data(const QModelIndex &idx, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
+ bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE;
- QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
+ QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
bool isDirty() const;
bool isDirty(const QModelIndex &index) const;
- void clear();
+ void clear() Q_DECL_OVERRIDE;
virtual void setEditStrategy(EditStrategy strategy);
EditStrategy editStrategy() const;
@@ -80,17 +80,17 @@ public:
QSqlDatabase database() const;
int fieldIndex(const QString &fieldName) const;
- void sort(int column, Qt::SortOrder order);
+ void sort(int column, Qt::SortOrder order) Q_DECL_OVERRIDE;
virtual void setSort(int column, Qt::SortOrder order);
QString filter() const;
virtual void setFilter(const QString &filter);
- int rowCount(const QModelIndex &parent = QModelIndex()) const;
+ int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
- bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex());
- bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex());
- bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex());
+ bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
+ bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
+ bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
bool insertRecord(int row, const QSqlRecord &record);
bool setRecord(int row, const QSqlRecord &record);
@@ -101,8 +101,8 @@ public Q_SLOTS:
virtual bool select();
virtual bool selectRow(int row);
- bool submit();
- void revert();
+ bool submit() Q_DECL_OVERRIDE;
+ void revert() Q_DECL_OVERRIDE;
bool submitAll();
void revertAll();
@@ -125,7 +125,7 @@ protected:
void setPrimaryKey(const QSqlIndex &key);
void setQuery(const QSqlQuery &query);
- QModelIndex indexInQuery(const QModelIndex &item) const;
+ QModelIndex indexInQuery(const QModelIndex &item) const Q_DECL_OVERRIDE;
QSqlRecord primaryValues(int row) const;
};
diff --git a/src/src.pro b/src/src.pro
index 81f4fa5256..7ec2765336 100644
--- a/src/src.pro
+++ b/src/src.pro
@@ -97,7 +97,7 @@ src_platformheaders.depends = src_corelib src_gui
src_platformsupport.subdir = $$PWD/platformsupport
src_platformsupport.target = sub-platformsupport
-src_platformsupport.depends = src_corelib src_gui src_network src_platformheaders
+src_platformsupport.depends = src_corelib src_gui src_platformheaders
src_widgets.subdir = $$PWD/widgets
src_widgets.target = sub-widgets
diff --git a/src/testlib/doc/snippets/code/src_qtestlib_qtestcase.cpp b/src/testlib/doc/snippets/code/src_qtestlib_qtestcase.cpp
index 7bcae3bf74..42dd082214 100644
--- a/src/testlib/doc/snippets/code/src_qtestlib_qtestcase.cpp
+++ b/src/testlib/doc/snippets/code/src_qtestlib_qtestcase.cpp
@@ -153,6 +153,19 @@ namespace QTest {
}
//! [16]
+//! [toString-overload]
+namespace MyNamespace {
+ char *toString(const MyPoint &point)
+ {
+ // bring QTest::toString overloads into scope:
+ using QTest::toString;
+ // delegate char* handling to QTest::toString(QByteArray):
+ return toString("MyPoint(" +
+ QByteArray::number(point.x()) + ", " +
+ QByteArray::number(point.y()) + ')');
+ }
+}
+//! [toString-overload]
//! [17]
int i = 0;
diff --git a/src/testlib/qabstracttestlogger_p.h b/src/testlib/qabstracttestlogger_p.h
index 894f4fc9d8..db240c6934 100644
--- a/src/testlib/qabstracttestlogger_p.h
+++ b/src/testlib/qabstracttestlogger_p.h
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtTest module of the Qt Toolkit.
@@ -72,7 +72,8 @@ public:
QSystem,
QFatal,
Skip,
- Info
+ Info,
+ QInfo
};
QAbstractTestLogger(const char *filename);
diff --git a/src/testlib/qbenchmarkperfevents_p.h b/src/testlib/qbenchmarkperfevents_p.h
index 2a571cf6a9..21c0150e3b 100644
--- a/src/testlib/qbenchmarkperfevents_p.h
+++ b/src/testlib/qbenchmarkperfevents_p.h
@@ -54,16 +54,16 @@ class QBenchmarkPerfEventsMeasurer : public QBenchmarkMeasurerBase
public:
QBenchmarkPerfEventsMeasurer();
~QBenchmarkPerfEventsMeasurer();
- virtual void init();
- virtual void start();
- virtual qint64 checkpoint();
- virtual qint64 stop();
- virtual bool isMeasurementAccepted(qint64 measurement);
- virtual int adjustIterationCount(int suggestion);
- virtual int adjustMedianCount(int suggestion);
- virtual bool repeatCount() { return 1; }
- virtual bool needsWarmupIteration() { return true; }
- virtual QTest::QBenchmarkMetric metricType();
+ virtual void init() Q_DECL_OVERRIDE;
+ virtual void start() Q_DECL_OVERRIDE;
+ virtual qint64 checkpoint() Q_DECL_OVERRIDE;
+ virtual qint64 stop() Q_DECL_OVERRIDE;
+ virtual bool isMeasurementAccepted(qint64 measurement) Q_DECL_OVERRIDE;
+ virtual int adjustIterationCount(int suggestion) Q_DECL_OVERRIDE;
+ virtual int adjustMedianCount(int suggestion) Q_DECL_OVERRIDE;
+ virtual bool repeatCount() Q_DECL_OVERRIDE { return 1; }
+ virtual bool needsWarmupIteration() Q_DECL_OVERRIDE { return true; }
+ virtual QTest::QBenchmarkMetric metricType() Q_DECL_OVERRIDE;
static bool isAvailable();
static QTest::QBenchmarkMetric metricForEvent(quint32 type, quint64 event_id);
diff --git a/src/testlib/qplaintestlogger.cpp b/src/testlib/qplaintestlogger.cpp
index e58daa528d..6f63aa19c3 100644
--- a/src/testlib/qplaintestlogger.cpp
+++ b/src/testlib/qplaintestlogger.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtTest module of the Qt Toolkit.
@@ -105,6 +105,8 @@ namespace QTest {
return "QWARN ";
case QAbstractTestLogger::QDebug:
return "QDEBUG ";
+ case QAbstractTestLogger::QInfo:
+ return "QINFO ";
case QAbstractTestLogger::QSystem:
return "QSYSTEM";
case QAbstractTestLogger::QFatal:
diff --git a/src/testlib/qtest.h b/src/testlib/qtest.h
index 995d653118..0c00e47afc 100644
--- a/src/testlib/qtest.h
+++ b/src/testlib/qtest.h
@@ -285,7 +285,7 @@ int main(int argc, char *argv[]) \
#if defined(QT_WIDGETS_LIB)
-#include <QtTest/qtest_gui.h>
+#include <QtTest/qtest_widgets.h>
#ifdef QT_KEYPAD_NAVIGATION
# define QTEST_DISABLE_KEYPAD_NAVIGATION QApplication::setNavigationMode(Qt::NavigationModeNone);
diff --git a/src/testlib/qtest_widgets.h b/src/testlib/qtest_widgets.h
index f188e60b16..8d7752f964 100644
--- a/src/testlib/qtest_widgets.h
+++ b/src/testlib/qtest_widgets.h
@@ -49,8 +49,72 @@
#pragma qt_no_master_include
#endif
+#include <QtWidgets/QSizePolicy>
+#include <QtCore/QMetaEnum>
+
QT_BEGIN_NAMESPACE
+namespace QTest
+{
+
+//
+// QSizePolicy & friends:
+//
+
+namespace Internal
+{
+
+inline const char *toString(QSizePolicy::Policy p)
+{
+ static const QMetaEnum me = QSizePolicy::staticMetaObject.enumerator(QSizePolicy::staticMetaObject.indexOfEnumerator("Policy"));
+ return me.valueToKey(int(p));
+}
+
+inline QByteArray toString(QSizePolicy::ControlTypes ct)
+{
+ static const QMetaEnum me = QSizePolicy::staticMetaObject.enumerator(QSizePolicy::staticMetaObject.indexOfEnumerator("ControlTypes"));
+ return me.valueToKeys(int(ct));
+}
+
+inline QByteArray toString(QSizePolicy sp)
+{
+ static const char comma[] = ", ";
+ return QByteArray("QSizePolicy(")
+ + Internal::toString(sp.horizontalPolicy()) + comma
+ + Internal::toString(sp.verticalPolicy()) + comma
+ + QByteArray::number(sp.horizontalStretch()) + comma
+ + QByteArray::number(sp.verticalStretch()) + comma
+ + Internal::toString(QSizePolicy::ControlTypes(sp.controlType())) + comma
+ + "height for width: " + (sp.hasHeightForWidth() ? "yes" : "no") + comma
+ + "width for height: " + (sp.hasWidthForHeight() ? "yes" : "no") + comma
+ + (sp.retainSizeWhenHidden() ? "" : "don't " ) + "retain size when hidden"
+ + ')';
+}
+
+} // namespace Internal
+
+inline char *toString(QSizePolicy::Policy p)
+{
+ return qstrdup(Internal::toString(p));
+}
+
+inline char *toString(QSizePolicy::ControlTypes ct)
+{
+ return qstrdup(Internal::toString(ct).constData());
+}
+
+inline char *toString(QSizePolicy::ControlType ct)
+{
+ return toString(QSizePolicy::ControlTypes(ct));
+}
+
+inline char *toString(QSizePolicy sp)
+{
+ return qstrdup(Internal::toString(sp).constData());
+}
+
+} // namespace QTest
+
QT_END_NAMESPACE
#endif
diff --git a/src/testlib/qtestcase.cpp b/src/testlib/qtestcase.cpp
index 2851f83427..dc03968258 100644
--- a/src/testlib/qtestcase.cpp
+++ b/src/testlib/qtestcase.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtTest module of the Qt Toolkit.
@@ -47,6 +47,7 @@
#include <QtCore/qprocess.h>
#include <QtCore/qdebug.h>
#include <QtCore/qlibraryinfo.h>
+#include <QtCore/private/qtools_p.h>
#include <QtTest/private/qtestlog_p.h>
#include <QtTest/private/qtesttable_p.h>
@@ -84,6 +85,8 @@
QT_BEGIN_NAMESPACE
+using QtMiscUtils::toHexUpper;
+
/*!
\namespace QTest
\inmodule QtTest
@@ -94,6 +97,11 @@ QT_BEGIN_NAMESPACE
See the \l{Qt Test Overview} for information about how to write unit tests.
*/
+/*!
+ \namespace QTest::Internal
+ \internal
+*/
+
/*! \macro QVERIFY(condition)
\relates QTest
@@ -899,14 +907,21 @@ QT_BEGIN_NAMESPACE
Returns a textual representation of \a value. This function is used by
\l QCOMPARE() to output verbose information in case of a test failure.
- You can add specializations of this function to your test to enable
+ You can add specializations or overloads of this function to your test to enable
verbose output.
+ \b {Note:} Starting with Qt 5.5, you should prefer to provide a toString() function
+ in the type's namespace instead of specializing this template.
+ If your code needs to continue to work with the QTestLib from Qt 5.4 or
+ earlier, you need to continue to use specialization.
+
\b {Note:} The caller of toString() must delete the returned data
using \c{delete[]}. Your implementation should return a string
- created with \c{new[]} or qstrdup().
+ created with \c{new[]} or qstrdup(). The easiest way to do so is to
+ create a QByteArray or QString and calling QTest::toString() on it
+ (see second example below).
- Example:
+ Example for specializing (Qt ≤ 5.4):
\snippet code/src_qtestlib_qtestcase.cpp 16
@@ -915,6 +930,10 @@ QT_BEGIN_NAMESPACE
MyPoint fails, \l QCOMPARE() will call this function to output the
contents of \c MyPoint to the test log.
+ Same example, but with overloading (Qt ≥ 5.5):
+
+ \snippet code/src_qtestlib_qtestcase.cpp toString-overload
+
\sa QCOMPARE()
*/
@@ -1027,6 +1046,38 @@ QT_BEGIN_NAMESPACE
Returns a textual representation of the given \a variant.
*/
+/*!
+ \fn char *QTest::toString(QSizePolicy::ControlType ct)
+ \overload
+ \since 5.5
+
+ Returns a textual representation of control type \a ct.
+*/
+
+/*!
+ \fn char *QTest::toString(QSizePolicy::ControlTypes cts)
+ \overload
+ \since 5.5
+
+ Returns a textual representation of control types \a cts.
+*/
+
+/*!
+ \fn char *QTest::toString(QSizePolicy::Policy p)
+ \overload
+ \since 5.5
+
+ Returns a textual representation of policy \a p.
+*/
+
+/*!
+ \fn char *QTest::toString(QSizePolicy sp)
+ \overload
+ \since 5.5
+
+ Returns a textual representation of size policy \a sp.
+*/
+
/*! \fn void QTest::qWait(int ms)
Waits for \a ms milliseconds. While waiting, events will be processed and
@@ -1549,6 +1600,7 @@ Q_TESTLIB_EXPORT void qtest_qParseArgs(int argc, char *argv[], bool qml)
printf ("\n"
" QmlTest options:\n"
" -import dir : Specify an import directory.\n"
+ " -plugins dir : Specify a directory where to search for plugins.\n"
" -input dir/file : Specify the root directory for test cases or a single test case file.\n"
" -qtquick1 : Run with QtQuick 1 rather than QtQuick 2.\n"
" -translation file : Specify the translation file.\n"
@@ -1737,6 +1789,7 @@ Q_TESTLIB_EXPORT void qtest_qParseArgs(int argc, char *argv[], bool qml)
if (qml) {
fprintf(stderr, "\nqmltest related options:\n"
" -import : Specify an import directory.\n"
+ " -plugins : Specify a directory where to search for plugins.\n"
" -input : Specify the root directory for test cases.\n"
" -qtquick1 : Run with QtQuick 1 rather than QtQuick 2.\n"
);
@@ -2060,12 +2113,6 @@ void *fetchData(QTestData *data, const char *tagName, int typeId)
return data->data(idx);
}
-static char toHex(ushort value)
-{
- static const char hexdigits[] = "0123456789ABCDEF";
- return hexdigits[value & 0xF];
-}
-
/*!
\fn char* QTest::toHexRepresentation(const char *ba, int length)
@@ -2115,9 +2162,9 @@ char *toHexRepresentation(const char *ba, int length)
while (true) {
const char at = ba[i];
- result[o] = toHex(at >> 4);
+ result[o] = toHexUpper(at >> 4);
++o;
- result[o] = toHex(at);
+ result[o] = toHexUpper(at);
++i;
++o;
@@ -2136,6 +2183,8 @@ char *toHexRepresentation(const char *ba, int length)
\internal
Returns the same QString but with only the ASCII characters still shown;
everything else is replaced with \c {\uXXXX}.
+
+ Similar to QDebug::putString().
*/
char *toPrettyUnicode(const ushort *p, int length)
{
@@ -2183,10 +2232,10 @@ char *toPrettyUnicode(const ushort *p, int length)
break;
default:
*dst++ = 'u';
- *dst++ = toHex(*p >> 12);
- *dst++ = toHex(*p >> 8);
- *dst++ = toHex(*p >> 4);
- *dst++ = toHex(*p);
+ *dst++ = toHexUpper(*p >> 12);
+ *dst++ = toHexUpper(*p >> 8);
+ *dst++ = toHexUpper(*p >> 4);
+ *dst++ = toHexUpper(*p);
}
}
@@ -2587,7 +2636,7 @@ void QTest::qWarn(const char *message, const char *file, int line)
}
/*!
- Ignores messages created by qDebug() or qWarning(). If the \a message
+ Ignores messages created by qDebug(), qInfo() or qWarning(). If the \a message
with the corresponding \a type is outputted, it will be removed from the
test log. If the test finished and the \a message was not outputted,
a test failure is appended to the test log.
@@ -2611,7 +2660,7 @@ void QTest::ignoreMessage(QtMsgType type, const char *message)
/*!
\overload
- Ignores messages created by qDebug() or qWarning(). If the message
+ Ignores messages created by qDebug(), qInfo() or qWarning(). If the message
matching \a messagePattern
with the corresponding \a type is outputted, it will be removed from the
test log. If the test finished and the message was not outputted,
diff --git a/src/testlib/qtestcase.h b/src/testlib/qtestcase.h
index c1c1559183..8d767e39fc 100644
--- a/src/testlib/qtestcase.h
+++ b/src/testlib/qtestcase.h
@@ -282,7 +282,7 @@ namespace QTest
const char *file, int line)
{
return compare_helper(t1 == t2, "Compared values are not the same",
- toString<T>(t1), toString<T>(t2), actual, expected, file, line);
+ toString(t1), toString(t2), actual, expected, file, line);
}
Q_TESTLIB_EXPORT bool qCompare(float const &t1, float const &t2,
diff --git a/src/testlib/qtestkeyboard.h b/src/testlib/qtestkeyboard.h
index 57c3a27295..e533293476 100644
--- a/src/testlib/qtestkeyboard.h
+++ b/src/testlib/qtestkeyboard.h
@@ -57,6 +57,7 @@
QT_BEGIN_NAMESPACE
Q_GUI_EXPORT void qt_handleKeyEvent(QWindow *w, QEvent::Type t, int k, Qt::KeyboardModifiers mods, const QString & text = QString(), bool autorep = false, ushort count = 1);
+Q_GUI_EXPORT bool qt_sendShortcutOverrideEvent(QObject *o, ulong timestamp, int k, Qt::KeyboardModifiers mods, const QString &text = QString(), bool autorep = false, ushort count = 1);
namespace QTest
{
@@ -170,6 +171,9 @@ namespace QTest
QKeyEvent a(press ? QEvent::KeyPress : QEvent::KeyRelease, code, modifier, text, repeat);
QSpontaneKeyEvent::setSpontaneous(&a);
+
+ if (press && qt_sendShortcutOverrideEvent(widget, a.timestamp(), code, modifier, text, repeat))
+ return;
if (!qApp->notify(widget, &a))
QTest::qWarn("Keyboard event not accepted by receiving widget");
}
diff --git a/src/testlib/qtestlog.cpp b/src/testlib/qtestlog.cpp
index e48fdc1ad0..9bdc7c186c 100644
--- a/src/testlib/qtestlog.cpp
+++ b/src/testlib/qtestlog.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtTest module of the Qt Toolkit.
@@ -295,6 +295,9 @@ namespace QTest {
case QtDebugMsg:
QTest::TestLoggers::addMessage(QAbstractTestLogger::QDebug, msg);
break;
+ case QtInfoMsg:
+ QTest::TestLoggers::addMessage(QAbstractTestLogger::QInfo, msg);
+ break;
case QtCriticalMsg:
QTest::TestLoggers::addMessage(QAbstractTestLogger::QSystem, msg);
break;
diff --git a/src/testlib/qxmltestlogger.cpp b/src/testlib/qxmltestlogger.cpp
index 4e26b25f1e..3aa222bace 100644
--- a/src/testlib/qxmltestlogger.cpp
+++ b/src/testlib/qxmltestlogger.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtTest module of the Qt Toolkit.
@@ -55,6 +55,8 @@ namespace QTest {
return "system";
case QAbstractTestLogger::QDebug:
return "qdebug";
+ case QAbstractTestLogger::QInfo:
+ return "qinfo";
case QAbstractTestLogger::QWarning:
return "qwarn";
case QAbstractTestLogger::QFatal:
diff --git a/src/testlib/qxunittestlogger.cpp b/src/testlib/qxunittestlogger.cpp
index e98ddb5e4f..0005eebe0e 100644
--- a/src/testlib/qxunittestlogger.cpp
+++ b/src/testlib/qxunittestlogger.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies).
** Contact: http://www.qt-project.org/legal
**
** This file is part of the QtTest module of the Qt Toolkit.
@@ -298,6 +298,9 @@ void QXunitTestLogger::addMessage(MessageTypes type, const QString &message, con
case QAbstractTestLogger::QDebug:
typeBuf = "qdebug";
break;
+ case QAbstractTestLogger::QInfo:
+ typeBuf = "qinfo";
+ break;
case QAbstractTestLogger::QWarning:
typeBuf = "qwarn";
break;
diff --git a/src/tools/bootstrap/bootstrap.pro b/src/tools/bootstrap/bootstrap.pro
index 527a932c4d..e0f5546966 100644
--- a/src/tools/bootstrap/bootstrap.pro
+++ b/src/tools/bootstrap/bootstrap.pro
@@ -130,9 +130,15 @@ win32:SOURCES += ../../corelib/io/qfilesystemengine_win.cpp \
../../corelib/plugin/qsystemlibrary.cpp \
mac {
- SOURCES += ../../corelib/kernel/qcoreapplication_mac.cpp \
- ../../corelib/kernel/qcore_mac.cpp
- LIBS += -framework CoreServices -framework Foundation
+ SOURCES += \
+ ../../corelib/kernel/qcoreapplication_mac.cpp \
+ ../../corelib/kernel/qcore_mac.cpp
+ OBJECTIVE_SOURCES += \
+ ../../corelib/kernel/qcore_mac_objc.mm
+
+ LIBS += -framework Foundation
+ osx: LIBS_PRIVATE += -framework CoreServices
+ ios: LIBS_PRIVATE += -framework UIKit
}
macx {
diff --git a/src/tools/moc/generator.cpp b/src/tools/moc/generator.cpp
index 6c5e772e8c..f27c155da5 100644
--- a/src/tools/moc/generator.cpp
+++ b/src/tools/moc/generator.cpp
@@ -1,6 +1,6 @@
/****************************************************************************
**
-** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Copyright (C) 2015 Digia Plc and/or its subsidiary(-ies).
** Copyright (C) 2013 Olivier Goffart <ogoffart@woboq.com>
** Contact: http://www.qt-project.org/legal
**
@@ -230,13 +230,23 @@ void Generator::generateCode()
//
// Build stringdata struct
//
+ const int constCharArraySizeLimit = 65535;
fprintf(out, "struct qt_meta_stringdata_%s_t {\n", qualifiedClassNameIdentifier.constData());
fprintf(out, " QByteArrayData data[%d];\n", strings.size());
{
- int len = 0;
- for (int i = 0; i < strings.size(); ++i)
- len += strings.at(i).length() + 1;
- fprintf(out, " char stringdata[%d];\n", len);
+ int stringDataLength = 0;
+ int stringDataCounter = 0;
+ for (int i = 0; i < strings.size(); ++i) {
+ int thisLength = strings.at(i).length() + 1;
+ stringDataLength += thisLength;
+ if (stringDataLength / constCharArraySizeLimit) {
+ // save previous stringdata and start computing the next one.
+ fprintf(out, " char stringdata%d[%d];\n", stringDataCounter++, stringDataLength - thisLength);
+ stringDataLength = thisLength;
+ }
+ }
+ fprintf(out, " char stringdata%d[%d];\n", stringDataCounter, stringDataLength);
+
}
fprintf(out, "};\n");
@@ -247,7 +257,7 @@ void Generator::generateCode()
// QByteArrayData::data() implementation returning simply "this + offset".
fprintf(out, "#define QT_MOC_LITERAL(idx, ofs, len) \\\n"
" Q_STATIC_BYTE_ARRAY_DATA_HEADER_INITIALIZER_WITH_OFFSET(len, \\\n"
- " qptrdiff(offsetof(qt_meta_stringdata_%s_t, stringdata) + ofs \\\n"
+ " qptrdiff(offsetof(qt_meta_stringdata_%s_t, stringdata0) + ofs \\\n"
" - idx * sizeof(QByteArrayData)) \\\n"
" )\n",
qualifiedClassNameIdentifier.constData());
@@ -282,9 +292,18 @@ void Generator::generateCode()
fprintf(out, " \"");
int col = 0;
int len = 0;
+ int stringDataLength = 0;
for (int i = 0; i < strings.size(); ++i) {
QByteArray s = strings.at(i);
len = s.length();
+ stringDataLength += len + 1;
+ if (stringDataLength >= constCharArraySizeLimit) {
+ fprintf(out, "\",\n \"");
+ stringDataLength = len + 1;
+ col = 0;
+ } else if (i)
+ fputs("\\0", out); // add \0 at the end of each string
+
if (col && col + len >= 72) {
fprintf(out, "\"\n \"");
col = 0;
@@ -309,9 +328,6 @@ void Generator::generateCode()
idx += spanLen;
col += spanLen;
}
-
- if (i != strings.size() - 1) // skip the last \0 the c++ will add it for us
- fputs("\\0", out);
col += len + 2;
}
@@ -359,7 +375,13 @@ void Generator::generateCode()
fprintf(out, " %4d, %4d, // constructors\n", isConstructible ? cdef->constructorList.count() : 0,
isConstructible ? index : 0);
- fprintf(out, " %4d, // flags\n", 0);
+ int flags = 0;
+ if (cdef->hasQGadget) {
+ // Ideally, all the classes could have that flag. But this broke classes generated
+ // by qdbusxml2cpp which generate code that require that we call qt_metacall for properties
+ flags |= PropertyAccessInStaticMetaCall;
+ }
+ fprintf(out, " %4d, // flags\n", flags);
fprintf(out, " %4d, // signalCount\n", cdef->signalList.count());
@@ -425,7 +447,9 @@ void Generator::generateCode()
//
// Generate internal qt_static_metacall() function
//
- if (cdef->hasQObject && !isQt)
+ const bool hasStaticMetaCall = !isQt &&
+ (cdef->hasQObject || !cdef->methodList.isEmpty() || !cdef->propertyList.isEmpty());
+ if (hasStaticMetaCall)
generateStaticMetacall();
//
@@ -506,14 +530,14 @@ void Generator::generateCode()
if (isQObject)
fprintf(out, " { Q_NULLPTR, ");
- else if (cdef->superclassList.size())
+ else if (cdef->superclassList.size() && (!cdef->hasQGadget || knownGadgets.contains(purestSuperClass)))
fprintf(out, " { &%s::staticMetaObject, ", purestSuperClass.constData());
else
fprintf(out, " { Q_NULLPTR, ");
fprintf(out, "qt_meta_stringdata_%s.data,\n"
" qt_meta_data_%s, ", qualifiedClassNameIdentifier.constData(),
qualifiedClassNameIdentifier.constData());
- if (cdef->hasQObject && !isQt)
+ if (hasStaticMetaCall)
fprintf(out, " qt_static_metacall, ");
else
fprintf(out, " Q_NULLPTR, ");
@@ -538,7 +562,7 @@ void Generator::generateCode()
//
fprintf(out, "\nvoid *%s::qt_metacast(const char *_clname)\n{\n", cdef->qualified.constData());
fprintf(out, " if (!_clname) return Q_NULLPTR;\n");
- fprintf(out, " if (!strcmp(_clname, qt_meta_stringdata_%s.stringdata))\n"
+ fprintf(out, " if (!strcmp(_clname, qt_meta_stringdata_%s.stringdata0))\n"
" return static_cast<void*>(const_cast< %s*>(this));\n",
qualifiedClassNameIdentifier.constData(), cdef->classname.constData());
for (int i = 1; i < cdef->superclassList.size(); ++i) { // for all superclasses but the first one
@@ -919,10 +943,6 @@ void Generator::generateMetacall()
}
if (cdef->propertyList.size()) {
- bool needGet = false;
- bool needTempVarForGet = false;
- bool needSet = false;
- bool needReset = false;
bool needDesignable = false;
bool needScriptable = false;
bool needStored = false;
@@ -930,132 +950,21 @@ void Generator::generateMetacall()
bool needUser = false;
for (int i = 0; i < cdef->propertyList.size(); ++i) {
const PropertyDef &p = cdef->propertyList.at(i);
- needGet |= !p.read.isEmpty() || !p.member.isEmpty();
- if (!p.read.isEmpty() || !p.member.isEmpty())
- needTempVarForGet |= (p.gspec != PropertyDef::PointerSpec
- && p.gspec != PropertyDef::ReferenceSpec);
-
- needSet |= !p.write.isEmpty() || (!p.member.isEmpty() && !p.constant);
- needReset |= !p.reset.isEmpty();
needDesignable |= p.designable.endsWith(')');
needScriptable |= p.scriptable.endsWith(')');
needStored |= p.stored.endsWith(')');
needEditable |= p.editable.endsWith(')');
needUser |= p.user.endsWith(')');
}
- fprintf(out, "\n#ifndef QT_NO_PROPERTIES\n ");
+ fprintf(out, "\n#ifndef QT_NO_PROPERTIES\n ");
if (needElse)
- fprintf(out, " else ");
- fprintf(out, "if (_c == QMetaObject::ReadProperty) {\n");
- if (needGet) {
- if (needTempVarForGet)
- fprintf(out, " void *_v = _a[0];\n");
- fprintf(out, " switch (_id) {\n");
- for (int propindex = 0; propindex < cdef->propertyList.size(); ++propindex) {
- const PropertyDef &p = cdef->propertyList.at(propindex);
- if (p.read.isEmpty() && p.member.isEmpty())
- continue;
- QByteArray prefix;
- if (p.inPrivateClass.size()) {
- prefix = p.inPrivateClass;
- prefix.append("->");
- }
- if (p.gspec == PropertyDef::PointerSpec)
- fprintf(out, " case %d: _a[0] = const_cast<void*>(reinterpret_cast<const void*>(%s%s())); break;\n",
- propindex, prefix.constData(), p.read.constData());
- else if (p.gspec == PropertyDef::ReferenceSpec)
- fprintf(out, " case %d: _a[0] = const_cast<void*>(reinterpret_cast<const void*>(&%s%s())); break;\n",
- propindex, prefix.constData(), p.read.constData());
- else if (cdef->enumDeclarations.value(p.type, false))
- fprintf(out, " case %d: *reinterpret_cast<int*>(_v) = QFlag(%s%s()); break;\n",
- propindex, prefix.constData(), p.read.constData());
- else if (!p.read.isEmpty())
- fprintf(out, " case %d: *reinterpret_cast< %s*>(_v) = %s%s(); break;\n",
- propindex, p.type.constData(), prefix.constData(), p.read.constData());
- else
- fprintf(out, " case %d: *reinterpret_cast< %s*>(_v) = %s%s; break;\n",
- propindex, p.type.constData(), prefix.constData(), p.member.constData());
- }
- fprintf(out, " default: break;\n");
- fprintf(out, " }\n");
- }
-
- fprintf(out,
- " _id -= %d;\n"
- " }", cdef->propertyList.count());
-
- fprintf(out, " else ");
- fprintf(out, "if (_c == QMetaObject::WriteProperty) {\n");
-
- if (needSet) {
- fprintf(out, " void *_v = _a[0];\n");
- fprintf(out, " switch (_id) {\n");
- for (int propindex = 0; propindex < cdef->propertyList.size(); ++propindex) {
- const PropertyDef &p = cdef->propertyList.at(propindex);
- if (p.constant)
- continue;
- if (p.write.isEmpty() && p.member.isEmpty())
- continue;
- QByteArray prefix;
- if (p.inPrivateClass.size()) {
- prefix = p.inPrivateClass;
- prefix.append("->");
- }
- if (cdef->enumDeclarations.value(p.type, false)) {
- fprintf(out, " case %d: %s%s(QFlag(*reinterpret_cast<int*>(_v))); break;\n",
- propindex, prefix.constData(), p.write.constData());
- } else if (!p.write.isEmpty()) {
- fprintf(out, " case %d: %s%s(*reinterpret_cast< %s*>(_v)); break;\n",
- propindex, prefix.constData(), p.write.constData(), p.type.constData());
- } else {
- fprintf(out, " case %d:\n", propindex);
- fprintf(out, " if (%s%s != *reinterpret_cast< %s*>(_v)) {\n",
- prefix.constData(), p.member.constData(), p.type.constData());
- fprintf(out, " %s%s = *reinterpret_cast< %s*>(_v);\n",
- prefix.constData(), p.member.constData(), p.type.constData());
- if (!p.notify.isEmpty() && p.notifyId != -1) {
- const FunctionDef &f = cdef->signalList.at(p.notifyId);
- if (f.arguments.size() == 0)
- fprintf(out, " Q_EMIT %s();\n", p.notify.constData());
- else if (f.arguments.size() == 1 && f.arguments.at(0).normalizedType == p.type)
- fprintf(out, " Q_EMIT %s(%s%s);\n",
- p.notify.constData(), prefix.constData(), p.member.constData());
- }
- fprintf(out, " }\n");
- fprintf(out, " break;\n");
- }
- }
- fprintf(out, " default: break;\n");
- fprintf(out, " }\n");
- }
-
+ fprintf(out, "else ");
fprintf(out,
- " _id -= %d;\n"
- " }", cdef->propertyList.count());
-
- fprintf(out, " else ");
- fprintf(out, "if (_c == QMetaObject::ResetProperty) {\n");
- if (needReset) {
- fprintf(out, " switch (_id) {\n");
- for (int propindex = 0; propindex < cdef->propertyList.size(); ++propindex) {
- const PropertyDef &p = cdef->propertyList.at(propindex);
- if (!p.reset.endsWith(')'))
- continue;
- QByteArray prefix;
- if (p.inPrivateClass.size()) {
- prefix = p.inPrivateClass;
- prefix.append("->");
- }
- fprintf(out, " case %d: %s%s; break;\n",
- propindex, prefix.constData(), p.reset.constData());
- }
- fprintf(out, " default: break;\n");
- fprintf(out, " }\n");
- }
- fprintf(out,
- " _id -= %d;\n"
- " }", cdef->propertyList.count());
+ "if (_c == QMetaObject::ReadProperty || _c == QMetaObject::WriteProperty\n"
+ " || _c == QMetaObject::ResetProperty || _c == QMetaObject::RegisterPropertyMetaType) {\n"
+ " qt_static_metacall(this, _c, _id, _a);\n"
+ " _id -= %d;\n }", cdef->propertyList.count());
fprintf(out, " else ");
fprintf(out, "if (_c == QMetaObject::QueryPropertyDesignable) {\n");
@@ -1153,16 +1062,6 @@ void Generator::generateMetacall()
" _id -= %d;\n"
" }", cdef->propertyList.count());
- fprintf(out, " else ");
- fprintf(out, "if (_c == QMetaObject::RegisterPropertyMetaType) {\n");
- fprintf(out, " if (_id < %d)\n", cdef->propertyList.size());
-
- if (automaticPropertyMetaTypesHelper().isEmpty())
- fprintf(out, " *reinterpret_cast<int*>(_a[0]) = -1;\n");
- else
- fprintf(out, " qt_static_metacall(this, _c, _id, _a);\n");
- fprintf(out, " _id -= %d;\n }", cdef->propertyList.size());
-
fprintf(out, "\n#endif // QT_NO_PROPERTIES");
}
if (methodList.size() || cdef->signalList.size() || cdef->propertyList.size())
@@ -1246,10 +1145,15 @@ void Generator::generateStaticMetacall()
else
fprintf(out, " ");
fprintf(out, "if (_c == QMetaObject::InvokeMetaMethod) {\n");
+ if (cdef->hasQObject) {
#ifndef QT_NO_DEBUG
- fprintf(out, " Q_ASSERT(staticMetaObject.cast(_o));\n");
+ fprintf(out, " Q_ASSERT(staticMetaObject.cast(_o));\n");
#endif
- fprintf(out, " %s *_t = static_cast<%s *>(_o);\n", cdef->classname.constData(), cdef->classname.constData());
+ fprintf(out, " %s *_t = static_cast<%s *>(_o);\n", cdef->classname.constData(), cdef->classname.constData());
+ } else {
+ fprintf(out, " %s *_t = reinterpret_cast<%s *>(_o);\n", cdef->classname.constData(), cdef->classname.constData());
+ }
+ fprintf(out, " Q_UNUSED(_t)\n");
fprintf(out, " switch (_id) {\n");
for (int methodindex = 0; methodindex < methodList.size(); ++methodindex) {
const FunctionDef &f = methodList.at(methodindex);
@@ -1377,6 +1281,153 @@ void Generator::generateStaticMetacall()
needElse = true;
}
+ if (!cdef->propertyList.empty()) {
+ bool needGet = false;
+ bool needTempVarForGet = false;
+ bool needSet = false;
+ bool needReset = false;
+ for (int i = 0; i < cdef->propertyList.size(); ++i) {
+ const PropertyDef &p = cdef->propertyList.at(i);
+ needGet |= !p.read.isEmpty() || !p.member.isEmpty();
+ if (!p.read.isEmpty() || !p.member.isEmpty())
+ needTempVarForGet |= (p.gspec != PropertyDef::PointerSpec
+ && p.gspec != PropertyDef::ReferenceSpec);
+
+ needSet |= !p.write.isEmpty() || (!p.member.isEmpty() && !p.constant);
+ needReset |= !p.reset.isEmpty();
+ }
+ fprintf(out, "\n#ifndef QT_NO_PROPERTIES\n ");
+
+ if (needElse)
+ fprintf(out, "else ");
+ fprintf(out, "if (_c == QMetaObject::ReadProperty) {\n");
+ if (needGet) {
+ if (cdef->hasQObject) {
+#ifndef QT_NO_DEBUG
+ fprintf(out, " Q_ASSERT(staticMetaObject.cast(_o));\n");
+#endif
+ fprintf(out, " %s *_t = static_cast<%s *>(_o);\n", cdef->classname.constData(), cdef->classname.constData());
+ } else {
+ fprintf(out, " %s *_t = reinterpret_cast<%s *>(_o);\n", cdef->classname.constData(), cdef->classname.constData());
+ }
+ if (needTempVarForGet)
+ fprintf(out, " void *_v = _a[0];\n");
+ fprintf(out, " switch (_id) {\n");
+ for (int propindex = 0; propindex < cdef->propertyList.size(); ++propindex) {
+ const PropertyDef &p = cdef->propertyList.at(propindex);
+ if (p.read.isEmpty() && p.member.isEmpty())
+ continue;
+ QByteArray prefix = "_t->";
+ if (p.inPrivateClass.size()) {
+ prefix += p.inPrivateClass + "->";
+ }
+ if (p.gspec == PropertyDef::PointerSpec)
+ fprintf(out, " case %d: _a[0] = const_cast<void*>(reinterpret_cast<const void*>(%s%s())); break;\n",
+ propindex, prefix.constData(), p.read.constData());
+ else if (p.gspec == PropertyDef::ReferenceSpec)
+ fprintf(out, " case %d: _a[0] = const_cast<void*>(reinterpret_cast<const void*>(&%s%s())); break;\n",
+ propindex, prefix.constData(), p.read.constData());
+ else if (cdef->enumDeclarations.value(p.type, false))
+ fprintf(out, " case %d: *reinterpret_cast<int*>(_v) = QFlag(%s%s()); break;\n",
+ propindex, prefix.constData(), p.read.constData());
+ else if (!p.read.isEmpty())
+ fprintf(out, " case %d: *reinterpret_cast< %s*>(_v) = %s%s(); break;\n",
+ propindex, p.type.constData(), prefix.constData(), p.read.constData());
+ else
+ fprintf(out, " case %d: *reinterpret_cast< %s*>(_v) = %s%s; break;\n",
+ propindex, p.type.constData(), prefix.constData(), p.member.constData());
+ }
+ fprintf(out, " default: break;\n");
+ fprintf(out, " }\n");
+ }
+
+ fprintf(out, " }");
+
+ fprintf(out, " else ");
+ fprintf(out, "if (_c == QMetaObject::WriteProperty) {\n");
+
+ if (needSet) {
+ if (cdef->hasQObject) {
+#ifndef QT_NO_DEBUG
+ fprintf(out, " Q_ASSERT(staticMetaObject.cast(_o));\n");
+#endif
+ fprintf(out, " %s *_t = static_cast<%s *>(_o);\n", cdef->classname.constData(), cdef->classname.constData());
+ } else {
+ fprintf(out, " %s *_t = reinterpret_cast<%s *>(_o);\n", cdef->classname.constData(), cdef->classname.constData());
+ }
+ fprintf(out, " void *_v = _a[0];\n");
+ fprintf(out, " switch (_id) {\n");
+ for (int propindex = 0; propindex < cdef->propertyList.size(); ++propindex) {
+ const PropertyDef &p = cdef->propertyList.at(propindex);
+ if (p.constant)
+ continue;
+ if (p.write.isEmpty() && p.member.isEmpty())
+ continue;
+ QByteArray prefix = "_t->";
+ if (p.inPrivateClass.size()) {
+ prefix += p.inPrivateClass + "->";
+ }
+ if (cdef->enumDeclarations.value(p.type, false)) {
+ fprintf(out, " case %d: %s%s(QFlag(*reinterpret_cast<int*>(_v))); break;\n",
+ propindex, prefix.constData(), p.write.constData());
+ } else if (!p.write.isEmpty()) {
+ fprintf(out, " case %d: %s%s(*reinterpret_cast< %s*>(_v)); break;\n",
+ propindex, prefix.constData(), p.write.constData(), p.type.constData());
+ } else {
+ fprintf(out, " case %d:\n", propindex);
+ fprintf(out, " if (%s%s != *reinterpret_cast< %s*>(_v)) {\n",
+ prefix.constData(), p.member.constData(), p.type.constData());
+ fprintf(out, " %s%s = *reinterpret_cast< %s*>(_v);\n",
+ prefix.constData(), p.member.constData(), p.type.constData());
+ if (!p.notify.isEmpty() && p.notifyId != -1) {
+ const FunctionDef &f = cdef->signalList.at(p.notifyId);
+ if (f.arguments.size() == 0)
+ fprintf(out, " Q_EMIT _t->%s();\n", p.notify.constData());
+ else if (f.arguments.size() == 1 && f.arguments.at(0).normalizedType == p.type)
+ fprintf(out, " Q_EMIT _t->%s(%s%s);\n",
+ p.notify.constData(), prefix.constData(), p.member.constData());
+ }
+ fprintf(out, " }\n");
+ fprintf(out, " break;\n");
+ }
+ }
+ fprintf(out, " default: break;\n");
+ fprintf(out, " }\n");
+ }
+
+ fprintf(out, " }");
+
+ fprintf(out, " else ");
+ fprintf(out, "if (_c == QMetaObject::ResetProperty) {\n");
+ if (needReset) {
+ if (cdef->hasQObject) {
+#ifndef QT_NO_DEBUG
+ fprintf(out, " Q_ASSERT(staticMetaObject.cast(_o));\n");
+#endif
+ fprintf(out, " %s *_t = static_cast<%s *>(_o);\n", cdef->classname.constData(), cdef->classname.constData());
+ } else {
+ fprintf(out, " %s *_t = reinterpret_cast<%s *>(_o);\n", cdef->classname.constData(), cdef->classname.constData());
+ }
+ fprintf(out, " switch (_id) {\n");
+ for (int propindex = 0; propindex < cdef->propertyList.size(); ++propindex) {
+ const PropertyDef &p = cdef->propertyList.at(propindex);
+ if (!p.reset.endsWith(')'))
+ continue;
+ QByteArray prefix = "_t->";
+ if (p.inPrivateClass.size()) {
+ prefix += p.inPrivateClass + "->";
+ }
+ fprintf(out, " case %d: %s%s; break;\n",
+ propindex, prefix.constData(), p.reset.constData());
+ }
+ fprintf(out, " default: break;\n");
+ fprintf(out, " }\n");
+ }
+ fprintf(out, " }");
+ fprintf(out, "\n#endif // QT_NO_PROPERTIES");
+ needElse = true;
+ }
+
if (needElse)
fprintf(out, "\n");
diff --git a/src/tools/moc/keywords.cpp b/src/tools/moc/keywords.cpp
index bb4f2883cb..5bee666c8d 100644
--- a/src/tools/moc/keywords.cpp
+++ b/src/tools/moc/keywords.cpp
@@ -840,12 +840,12 @@ static const struct
{CHARACTER, 0, 78, 393, CHARACTER},
{CHARACTER, 0, 85, 394, CHARACTER},
{CHARACTER, 0, 77, 395, CHARACTER},
- {CHARACTER, 0, 83, 396, CHARACTER},
+ {Q_ENUM_TOKEN, 0, 83, 396, CHARACTER},
{Q_ENUMS_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 76, 398, CHARACTER},
{CHARACTER, 0, 65, 399, CHARACTER},
{CHARACTER, 0, 71, 400, CHARACTER},
- {CHARACTER, 0, 83, 401, CHARACTER},
+ {Q_FLAG_TOKEN, 0, 83, 401, CHARACTER},
{Q_FLAGS_TOKEN, 0, 0, 0, CHARACTER},
{CHARACTER, 0, 69, 403, CHARACTER},
{CHARACTER, 0, 67, 404, CHARACTER},
diff --git a/src/tools/moc/moc.cpp b/src/tools/moc/moc.cpp
index 5506dc75c5..fe59f430f5 100644
--- a/src/tools/moc/moc.cpp
+++ b/src/tools/moc/moc.cpp
@@ -139,6 +139,12 @@ bool Moc::parseClassHead(ClassDef *def)
def->superclassList += qMakePair(type, access);
}
} while (test(COMMA));
+
+ if (knownGadgets.contains(def->superclassList.first().first)) {
+ // Q_GADGET subclasses are treated as Q_GADGETs
+ knownGadgets.insert(def->classname, def->qualified);
+ knownGadgets.insert(def->qualified, def->qualified);
+ }
}
if (!test(LBRACE))
return false;
@@ -690,9 +696,11 @@ void Moc::parse()
parsePluginData(&def);
break;
case Q_ENUMS_TOKEN:
+ case Q_ENUM_TOKEN:
parseEnumOrFlag(&def, false);
break;
case Q_FLAGS_TOKEN:
+ case Q_FLAG_TOKEN:
parseEnumOrFlag(&def, true);
break;
case Q_DECLARE_FLAGS_TOKEN:
diff --git a/src/tools/moc/preprocessor.cpp b/src/tools/moc/preprocessor.cpp
index c5d6b58412..687c4f8474 100644
--- a/src/tools/moc/preprocessor.cpp
+++ b/src/tools/moc/preprocessor.cpp
@@ -52,11 +52,12 @@ static QByteArray cleaned(const QByteArray &input)
QByteArray result;
result.reserve(input.size());
const char *data = input.constData();
+ const char *end = input.constData() + input.size();
char *output = result.data();
int newlines = 0;
- while (*data) {
- while (*data && is_space(*data))
+ while (data != end) {
+ while (data != end && is_space(*data))
++data;
bool takeLine = (*data == '#');
if (*data == '%' && *(data+1) == ':') {
@@ -66,15 +67,15 @@ static QByteArray cleaned(const QByteArray &input)
if (takeLine) {
*output = '#';
++output;
- do ++data; while (*data && is_space(*data));
+ do ++data; while (data != end && is_space(*data));
}
- while (*data) {
+ while (data != end) {
// handle \\\n, \\\r\n and \\\r
if (*data == '\\') {
if (*(data + 1) == '\r') {
++data;
}
- if (*data && (*(data + 1) == '\n' || (*data) == '\r')) {
+ if (data != end && (*(data + 1) == '\n' || (*data) == '\r')) {
++newlines;
data += 1;
if (*data != '\r')
@@ -201,7 +202,7 @@ Symbols Preprocessor::tokenize(const QByteArray& input, int lineNum, Preprocesso
data = skipQuote(data);
token = STRING_LITERAL;
// concatenate multi-line strings for easier
- // STRING_LITERAAL handling in moc
+ // STRING_LITERAL handling in moc
if (!Preprocessor::preprocessOnly
&& !symbols.isEmpty()
&& symbols.last().token == STRING_LITERAL) {
@@ -964,6 +965,43 @@ int Preprocessor::evaluateCondition()
return expression.value();
}
+static QByteArray readOrMapFile(QFile *file)
+{
+ const qint64 size = file->size();
+ char *rawInput = reinterpret_cast<char*>(file->map(0, size));
+ return rawInput ? QByteArray::fromRawData(rawInput, size) : file->readAll();
+}
+
+static void mergeStringLiterals(Symbols *_symbols)
+{
+ Symbols &symbols = *_symbols;
+ for (Symbols::iterator i = symbols.begin(); i != symbols.end(); ++i) {
+ if (i->token == STRING_LITERAL) {
+ Symbols::Iterator mergeSymbol = i;
+ int literalsLength = mergeSymbol->len;
+ while (++i != symbols.end() && i->token == STRING_LITERAL)
+ literalsLength += i->len - 2; // no quotes
+
+ if (literalsLength != mergeSymbol->len) {
+ QByteArray mergeSymbolOriginalLexem = mergeSymbol->unquotedLexem();
+ QByteArray &mergeSymbolLexem = mergeSymbol->lex;
+ mergeSymbolLexem.resize(0);
+ mergeSymbolLexem.reserve(literalsLength);
+ mergeSymbolLexem.append('"');
+ mergeSymbolLexem.append(mergeSymbolOriginalLexem);
+ for (Symbols::const_iterator j = mergeSymbol + 1; j != i; ++j)
+ mergeSymbolLexem.append(j->lex.constData() + j->from + 1, j->len - 2); // append j->unquotedLexem()
+ mergeSymbolLexem.append('"');
+ mergeSymbol->len = mergeSymbol->lex.length();
+ mergeSymbol->from = 0;
+ i = symbols.erase(mergeSymbol + 1, i);
+ }
+ if (i == symbols.end())
+ break;
+ }
+ }
+}
+
void Preprocessor::preprocess(const QByteArray &filename, Symbols &preprocessed)
{
currentFilenames.push(filename);
@@ -1020,7 +1058,8 @@ void Preprocessor::preprocess(const QByteArray &filename, Symbols &preprocessed)
if (!file.open(QFile::ReadOnly))
continue;
- QByteArray input = file.readAll();
+ QByteArray input = readOrMapFile(&file);
+
file.close();
if (input.isEmpty())
continue;
@@ -1153,9 +1192,10 @@ void Preprocessor::preprocess(const QByteArray &filename, Symbols &preprocessed)
currentFilenames.pop();
}
-Symbols Preprocessor::preprocessed(const QByteArray &filename, QIODevice *file)
+Symbols Preprocessor::preprocessed(const QByteArray &filename, QFile *file)
{
- QByteArray input = file->readAll();
+ QByteArray input = readOrMapFile(file);
+
if (input.isEmpty())
return symbols;
@@ -1176,6 +1216,7 @@ Symbols Preprocessor::preprocessed(const QByteArray &filename, QIODevice *file)
// phase 3: preprocess conditions and substitute macros
Symbols result;
preprocess(filename, result);
+ mergeStringLiterals(&result);
#if 0
for (int j = 0; j < result.size(); ++j)
diff --git a/src/tools/moc/preprocessor.h b/src/tools/moc/preprocessor.h
index fc86781be8..77f3a30ac0 100644
--- a/src/tools/moc/preprocessor.h
+++ b/src/tools/moc/preprocessor.h
@@ -57,7 +57,7 @@ typedef SubArray MacroName;
#endif
typedef QHash<MacroName, Macro> Macros;
-class QIODevice;
+class QFile;
class Preprocessor : public Parser
{
@@ -67,7 +67,7 @@ public:
QList<QByteArray> frameworks;
QSet<QByteArray> preprocessedIncludes;
Macros macros;
- Symbols preprocessed(const QByteArray &filename, QIODevice *device);
+ Symbols preprocessed(const QByteArray &filename, QFile *device);
void parseDefineArguments(Macro *m);
diff --git a/src/tools/moc/token.h b/src/tools/moc/token.h
index 57be5b4999..19832e5406 100644
--- a/src/tools/moc/token.h
+++ b/src/tools/moc/token.h
@@ -162,7 +162,9 @@ QT_BEGIN_NAMESPACE
F(Q_PROPERTY_TOKEN) \
F(Q_PLUGIN_METADATA_TOKEN) \
F(Q_ENUMS_TOKEN) \
+ F(Q_ENUM_TOKEN) \
F(Q_FLAGS_TOKEN) \
+ F(Q_FLAG_TOKEN) \
F(Q_DECLARE_FLAGS_TOKEN) \
F(Q_DECLARE_INTERFACE_TOKEN) \
F(Q_DECLARE_METATYPE_TOKEN) \
diff --git a/src/tools/moc/util/generate_keywords.cpp b/src/tools/moc/util/generate_keywords.cpp
index 98800486a3..1d94d1fbdb 100644
--- a/src/tools/moc/util/generate_keywords.cpp
+++ b/src/tools/moc/util/generate_keywords.cpp
@@ -222,7 +222,9 @@ static const Keyword keywords[] = {
{ "Q_PROPERTY", "Q_PROPERTY_TOKEN" },
{ "Q_PLUGIN_METADATA", "Q_PLUGIN_METADATA_TOKEN" },
{ "Q_ENUMS", "Q_ENUMS_TOKEN" },
+ { "Q_ENUM", "Q_ENUM_TOKEN" },
{ "Q_FLAGS", "Q_FLAGS_TOKEN" },
+ { "Q_FLAG", "Q_FLAG_TOKEN" },
{ "Q_DECLARE_FLAGS", "Q_DECLARE_FLAGS_TOKEN" },
{ "Q_DECLARE_INTERFACE", "Q_DECLARE_INTERFACE_TOKEN" },
{ "Q_DECLARE_METATYPE", "Q_DECLARE_METATYPE_TOKEN" },
diff --git a/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp b/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp
index a85dd44f65..871175a822 100644
--- a/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp
+++ b/src/tools/qdbusxml2cpp/qdbusxml2cpp.cpp
@@ -488,6 +488,15 @@ static QString propertySetter(const QDBusIntrospection::Property &property)
return setter;
}
+static QString methodName(const QDBusIntrospection::Method &method)
+{
+ QString name = method.annotations.value(QStringLiteral("org.qtproject.QtDBus.MethodName"));
+ if (!name.isEmpty())
+ return name;
+
+ return method.name;
+}
+
static QString stringify(const QString &data)
{
QString retval;
@@ -679,7 +688,7 @@ static void writeProxy(const QString &filename, const QDBusIntrospection::Interf
hs << "> ";
}
- hs << method.name << "(";
+ hs << methodName(method) << "(";
QStringList argNames = makeArgNames(method.inputArgs);
writeArgList(hs, argNames, method.annotations, method.inputArgs);
@@ -1012,7 +1021,7 @@ static void writeAdaptor(const QString &filename, const QDBusIntrospection::Inte
cs << returnType << " ";
}
- QString name = method.name;
+ QString name = methodName(method);
hs << name << "(";
cs << className << "::" << name << "(";
@@ -1023,7 +1032,7 @@ static void writeAdaptor(const QString &filename, const QDBusIntrospection::Inte
hs << ");" << endl; // finished for header
cs << ")" << endl
<< "{" << endl
- << " // handle method call " << interface->name << "." << method.name << endl;
+ << " // handle method call " << interface->name << "." << methodName(method) << endl;
// make the call
bool usingInvokeMethod = false;
diff --git a/src/tools/qdoc/atom.cpp b/src/tools/qdoc/atom.cpp
index 1af31afedd..caa6642cf3 100644
--- a/src/tools/qdoc/atom.cpp
+++ b/src/tools/qdoc/atom.cpp
@@ -97,6 +97,9 @@ QT_BEGIN_NAMESPACE
\value ImageText
\value ImportantNote
\value InlineImage
+ \value JavaScript
+ \value EndJavaScript
+ \value Keyword
\value LineBreak
\value Link
\value LinkNode
@@ -107,6 +110,8 @@ QT_BEGIN_NAMESPACE
\value ListItemLeft
\value ListItemRight
\value ListRight
+ \value NavAutoLink
+ \value NavLink
\value Nop
\value Note
\value ParaLeft
@@ -181,6 +186,7 @@ static const struct {
{ "InlineImage", Atom::InlineImage },
{ "JavaScript", Atom::JavaScript },
{ "EndJavaScript", Atom::EndJavaScript },
+ { "Keyword", Atom::Keyword },
{ "LegaleseLeft", Atom::LegaleseLeft },
{ "LegaleseRight", Atom::LegaleseRight },
{ "LineBreak", Atom::LineBreak },
@@ -193,6 +199,8 @@ static const struct {
{ "ListItemLeft", Atom::ListItemLeft },
{ "ListItemRight", Atom::ListItemRight },
{ "ListRight", Atom::ListRight },
+ { "NavAutoLink", Atom::NavAutoLink },
+ { "NavLink", Atom::NavLink },
{ "Nop", Atom::Nop },
{ "NoteLeft", Atom::NoteLeft },
{ "NoteRight", Atom::NoteRight },
@@ -371,15 +379,33 @@ void Atom::dump() const
the space character.
*/
LinkAtom::LinkAtom(const QString& p1, const QString& p2)
- : Atom(p1), genus_(Node::DontCare), goal_(Node::NoType), domain_(0)
+ : Atom(p1),
+ resolved_(false),
+ genus_(Node::DontCare),
+ goal_(Node::NoType),
+ domain_(0),
+ squareBracketParams_(p2)
{
- QStringList params = p2.toLower().split(QLatin1Char(' '));
- foreach (const QString& p, params) {
+ // nada.
+}
+
+/*!
+ This function resolves the parameters that were enclosed in
+ square brackets. If the parameters have already been resolved,
+ it does nothing and returns immediately.
+ */
+void LinkAtom::resolveSquareBracketParams()
+{
+ if (resolved_)
+ return;
+ QStringList params = squareBracketParams_.toLower().split(QLatin1Char(' '));
+ foreach (const QString& p, params) {
if (!domain_) {
domain_ = QDocDatabase::qdocDB()->findTree(p);
- if (domain_)
- continue;
- }
+ if (domain_) {
+ continue;
+ }
+ }
if (goal_ == Node::NoType) {
goal_ = Node::goal(p);
if (goal_ != Node::NoType)
@@ -393,9 +419,14 @@ LinkAtom::LinkAtom(const QString& p1, const QString& p2)
genus_ = Node::CPP;
continue;
}
- error_ = p2;
+ if (p == "doc") {
+ genus_ = Node::DOC;
+ continue;
+ }
+ error_ = squareBracketParams_;
break;
}
+ resolved_ = true;
}
/*!
@@ -403,10 +434,12 @@ LinkAtom::LinkAtom(const QString& p1, const QString& p2)
*/
LinkAtom::LinkAtom(const LinkAtom& t)
: Atom(Link, t.string()),
+ resolved_(t.resolved_),
genus_(t.genus_),
goal_(t.goal_),
domain_(t.domain_),
- error_(t.error_)
+ error_(t.error_),
+ squareBracketParams_(t.squareBracketParams_)
{
// nothing
}
@@ -418,10 +451,12 @@ LinkAtom::LinkAtom(const LinkAtom& t)
*/
LinkAtom::LinkAtom(Atom* previous, const LinkAtom& t)
: Atom(previous, Link, t.string()),
+ resolved_(t.resolved_),
genus_(t.genus_),
goal_(t.goal_),
domain_(t.domain_),
- error_(t.error_)
+ error_(t.error_),
+ squareBracketParams_(t.squareBracketParams_)
{
previous->next_ = this;
}
diff --git a/src/tools/qdoc/atom.h b/src/tools/qdoc/atom.h
index 3a7e992f7b..9d453517dd 100644
--- a/src/tools/qdoc/atom.h
+++ b/src/tools/qdoc/atom.h
@@ -57,7 +57,7 @@ public:
BriefRight,
C,
CaptionLeft,
- CaptionRight, // 10
+ CaptionRight,
Code,
CodeBad,
CodeNew,
@@ -67,7 +67,7 @@ public:
DivLeft,
DivRight,
EndQmlText,
- FootnoteLeft, // 20
+ FootnoteLeft,
FootnoteRight,
FormatElse,
FormatEndif,
@@ -77,17 +77,18 @@ public:
GeneratedList,
GuidLink,
HR,
- Image, // 30
+ Image,
ImageText,
ImportantLeft,
ImportantRight,
InlineImage,
JavaScript,
EndJavaScript,
+ Keyword,
LegaleseLeft,
LegaleseRight,
LineBreak,
- Link, // 40
+ Link,
LinkNode,
ListLeft,
ListItemNumber,
@@ -96,8 +97,10 @@ public:
ListItemLeft,
ListItemRight,
ListRight,
+ NavAutoLink,
+ NavLink,
Nop,
- NoteLeft, // 50
+ NoteLeft,
NoteRight,
ParaLeft,
ParaRight,
@@ -107,7 +110,7 @@ public:
QuotationRight,
RawString,
SectionLeft,
- SectionRight, // 60
+ SectionRight,
SectionHeadingLeft,
SectionHeadingRight,
SidebarLeft,
@@ -117,7 +120,7 @@ public:
SnippetIdentifier,
SnippetLocation,
String,
- TableLeft, // 70
+ TableLeft,
TableRight,
TableHeaderLeft,
TableHeaderRight,
@@ -127,7 +130,7 @@ public:
TableItemRight,
TableOfContents,
Target,
- UnhandledFormat, // 80
+ UnhandledFormat,
UnknownCommand,
Last = UnknownCommand
};
@@ -191,11 +194,12 @@ public:
const QStringList& strings() const { return strs; }
virtual bool isLinkAtom() const { return false; }
- virtual Node::Genus genus() const { return Node::DontCare; }
- virtual bool specifiesDomain() const { return false; }
- virtual Tree* domain() const { return 0; }
- virtual Node::Type goal() const { return Node::NoType; }
+ virtual Node::Genus genus() { return Node::DontCare; }
+ virtual bool specifiesDomain() { return false; }
+ virtual Tree* domain() { return 0; }
+ virtual Node::Type goal() { return Node::NoType; }
virtual const QString& error() { return noError_; }
+ virtual void resolveSquareBracketParams() { }
protected:
static QString noError_;
@@ -212,18 +216,21 @@ class LinkAtom : public Atom
LinkAtom(Atom* previous, const LinkAtom& t);
virtual ~LinkAtom() { }
- virtual bool isLinkAtom() const { return true; }
- virtual Node::Genus genus() const { return genus_; }
- virtual bool specifiesDomain() const { return (domain_ != 0); }
- virtual Tree* domain() const { return domain_; }
- virtual Node::Type goal() const { return goal_; }
- virtual const QString& error() { return error_; }
+ virtual bool isLinkAtom() const Q_DECL_OVERRIDE { return true; }
+ virtual Node::Genus genus() Q_DECL_OVERRIDE { resolveSquareBracketParams(); return genus_; }
+ virtual bool specifiesDomain() Q_DECL_OVERRIDE { resolveSquareBracketParams(); return (domain_ != 0); }
+ virtual Tree* domain() Q_DECL_OVERRIDE { resolveSquareBracketParams(); return domain_; }
+ virtual Node::Type goal() Q_DECL_OVERRIDE { resolveSquareBracketParams(); return goal_; }
+ virtual const QString& error() Q_DECL_OVERRIDE { return error_; }
+ virtual void resolveSquareBracketParams() Q_DECL_OVERRIDE;
protected:
+ bool resolved_;
Node::Genus genus_;
Node::Type goal_;
Tree* domain_;
QString error_;
+ QString squareBracketParams_;
};
#define ATOM_FORMATTING_BOLD "bold"
diff --git a/src/tools/qdoc/codeparser.cpp b/src/tools/qdoc/codeparser.cpp
index 00341940da..acb297d5f9 100644
--- a/src/tools/qdoc/codeparser.cpp
+++ b/src/tools/qdoc/codeparser.cpp
@@ -65,9 +65,9 @@ QT_BEGIN_NAMESPACE
#define COMMAND_TITLE Doc::alias(QLatin1String("title"))
#define COMMAND_WRAPPER Doc::alias(QLatin1String("wrapper"))
-QString CodeParser::currentSubDir_;
QList<CodeParser *> CodeParser::parsers;
-bool CodeParser::showInternal = false;
+bool CodeParser::showInternal_ = false;
+bool CodeParser::singleExec_ = false;
/*!
The constructor adds this code parser to the static
@@ -93,7 +93,8 @@ CodeParser::~CodeParser()
*/
void CodeParser::initializeParser(const Config& config)
{
- showInternal = config.getBool(CONFIG_SHOWINTERNAL);
+ showInternal_ = config.getBool(CONFIG_SHOWINTERNAL);
+ singleExec_ = config.getBool(CONFIG_SINGLEEXEC);
}
/*!
@@ -262,7 +263,7 @@ void CodeParser::processCommonMetaCommand(const Location& location,
node->setStatus(Node::Preliminary);
}
else if (command == COMMAND_INTERNAL) {
- if (!showInternal) {
+ if (!showInternal_) {
node->setAccess(Node::Private);
node->setStatus(Node::Internal);
if (node->type() == Node::QmlPropertyGroup) {
diff --git a/src/tools/qdoc/codeparser.h b/src/tools/qdoc/codeparser.h
index 5b3b1192f3..c9a9b746b1 100644
--- a/src/tools/qdoc/codeparser.h
+++ b/src/tools/qdoc/codeparser.h
@@ -74,7 +74,6 @@ public:
static CodeParser *parserForHeaderFile(const QString &filePath);
static CodeParser *parserForSourceFile(const QString &filePath);
static void setLink(Node* node, Node::LinkType linkType, const QString& arg);
- static const QString& currentOutputSubdirectory() { return currentSubDir_; }
protected:
const QSet<QString>& commonMetaCommands();
@@ -89,9 +88,9 @@ protected:
QDocDatabase* qdb_;
private:
- static QString currentSubDir_;
static QList<CodeParser *> parsers;
- static bool showInternal;
+ static bool showInternal_;
+ static bool singleExec_;
};
QT_END_NAMESPACE
diff --git a/src/tools/qdoc/config.cpp b/src/tools/qdoc/config.cpp
index 51ab341869..450e7b9560 100644
--- a/src/tools/qdoc/config.cpp
+++ b/src/tools/qdoc/config.cpp
@@ -98,6 +98,7 @@ QString ConfigStrings::QUOTINGINFORMATION = QStringLiteral("quotinginformation")
QString ConfigStrings::SCRIPTDIRS = QStringLiteral("scriptdirs");
QString ConfigStrings::SCRIPTS = QStringLiteral("scripts");
QString ConfigStrings::SHOWINTERNAL = QStringLiteral("showinternal");
+QString ConfigStrings::SINGLEEXEC = QStringLiteral("singleexec");
QString ConfigStrings::SOURCEDIRS = QStringLiteral("sourcedirs");
QString ConfigStrings::SOURCEENCODING = QStringLiteral("sourceencoding");
QString ConfigStrings::SOURCES = QStringLiteral("sources");
@@ -118,6 +119,7 @@ QString ConfigStrings::FILEEXTENSIONS = QStringLiteral("fileextensions");
QString ConfigStrings::IMAGEEXTENSIONS = QStringLiteral("imageextensions");
QString ConfigStrings::QMLONLY = QStringLiteral("qmlonly");
QString ConfigStrings::QMLTYPESPAGE = QStringLiteral("qmltypespage");
+QString ConfigStrings::WRITEQAPAGES = QStringLiteral("writeqapages");
/*!
An entry in a stack, where each entry is a list
@@ -350,6 +352,10 @@ QString Config::getOutputDir() const
t = getString(CONFIG_OUTPUTDIR);
else
t = overrideOutputDir;
+ if (Generator::singleExec()) {
+ QString project = getString(CONFIG_PROJECT);
+ t += QLatin1Char('/') + project.toLower();
+ }
if (!Generator::useOutputSubdirs()) {
t = t.left(t.lastIndexOf('/'));
QString singleOutputSubdir = getString("HTML.outputsubdir");
@@ -869,6 +875,36 @@ bool Config::isMetaKeyChar(QChar ch)
}
/*!
+ \a fileName is a master qdocconf file. It contains a list of
+ qdocconf files and nothing else. Read the list and return it.
+ */
+QStringList Config::loadMaster(const QString& fileName)
+{
+ Location location = Location::null;
+ QFile fin(fileName);
+ if (!fin.open(QFile::ReadOnly | QFile::Text)) {
+ if (!Config::installDir.isEmpty()) {
+ int prefix = location.filePath().length() - location.fileName().length();
+ fin.setFileName(Config::installDir + "/" + fileName.right(fileName.length() - prefix));
+ }
+ if (!fin.open(QFile::ReadOnly | QFile::Text))
+ location.fatal(tr("Cannot open master qdocconf file '%1': %2").arg(fileName).arg(fin.errorString()));
+ }
+ QTextStream stream(&fin);
+#ifndef QT_NO_TEXTCODEC
+ stream.setCodec("UTF-8");
+#endif
+ QStringList qdocFiles;
+ QString line = stream.readLine();
+ while (!line.isNull()) {
+ qdocFiles.append(line);
+ line = stream.readLine();
+ }
+ fin.close();
+ return qdocFiles;
+}
+
+/*!
Load, parse, and process a qdoc configuration file. This
function is only called by the other load() function, but
this one is recursive, i.e., it calls itself when it sees
@@ -970,8 +1006,8 @@ void Config::load(Location location, const QString& fileName)
SKIP_CHAR();
}
if (!var.isEmpty()) {
- char *val = getenv(var.toLatin1().data());
- if (val == 0) {
+ const QByteArray val = qgetenv(var.toLatin1().data());
+ if (val.isNull()) {
location.fatal(tr("Environment variable '%1' undefined").arg(var));
}
else {
@@ -1078,8 +1114,8 @@ void Config::load(Location location, const QString& fileName)
SKIP_CHAR();
}
if (!var.isEmpty()) {
- char *val = getenv(var.toLatin1().data());
- if (val == 0) {
+ const QByteArray val = qgetenv(var.toLatin1().constData());
+ if (val.isNull()) {
location.fatal(tr("Environment variable '%1' undefined").arg(var));
}
else {
diff --git a/src/tools/qdoc/config.h b/src/tools/qdoc/config.h
index 70b5adfd68..a836448719 100644
--- a/src/tools/qdoc/config.h
+++ b/src/tools/qdoc/config.h
@@ -108,6 +108,7 @@ public:
QStringList getExampleQdocFiles(const QSet<QString> &excludedDirs, const QSet<QString> &excludedFiles);
QStringList getExampleImageFiles(const QSet<QString> &excludedDirs, const QSet<QString> &excludedFiles);
+ static QStringList loadMaster(const QString& fileName);
static QStringList getFilesHere(const QString& dir,
const QString& nameFilter,
const Location &location = Location(),
@@ -209,6 +210,7 @@ struct ConfigStrings
static QString SCRIPTDIRS;
static QString SCRIPTS;
static QString SHOWINTERNAL;
+ static QString SINGLEEXEC;
static QString SOURCEDIRS;
static QString SOURCEENCODING;
static QString SOURCES;
@@ -229,6 +231,7 @@ struct ConfigStrings
static QString IMAGEEXTENSIONS;
static QString QMLONLY;
static QString QMLTYPESPAGE;
+ static QString WRITEQAPAGES;
};
#define CONFIG_ALIAS ConfigStrings::ALIAS
@@ -282,6 +285,7 @@ struct ConfigStrings
#define CONFIG_SCRIPTDIRS ConfigStrings::SCRIPTDIRS
#define CONFIG_SCRIPTS ConfigStrings::SCRIPTS
#define CONFIG_SHOWINTERNAL ConfigStrings::SHOWINTERNAL
+#define CONFIG_SINGLEEXEC ConfigStrings::SINGLEEXEC
#define CONFIG_SOURCEDIRS ConfigStrings::SOURCEDIRS
#define CONFIG_SOURCEENCODING ConfigStrings::SOURCEENCODING
#define CONFIG_SOURCES ConfigStrings::SOURCES
@@ -302,6 +306,7 @@ struct ConfigStrings
#define CONFIG_IMAGEEXTENSIONS ConfigStrings::IMAGEEXTENSIONS
#define CONFIG_QMLONLY ConfigStrings::QMLONLY
#define CONFIG_QMLTYPESPAGE ConfigStrings::QMLTYPESPAGE
+#define CONFIG_WRITEQAPAGES ConfigStrings::WRITEQAPAGES
QT_END_NAMESPACE
diff --git a/src/tools/qdoc/cppcodemarker.h b/src/tools/qdoc/cppcodemarker.h
index ec2ee124d4..899c2018fe 100644
--- a/src/tools/qdoc/cppcodemarker.h
+++ b/src/tools/qdoc/cppcodemarker.h
@@ -50,29 +50,29 @@ public:
CppCodeMarker();
~CppCodeMarker();
- virtual bool recognizeCode(const QString& code);
- virtual bool recognizeExtension(const QString& ext);
- virtual bool recognizeLanguage(const QString& lang);
- virtual Atom::Type atomType() const;
+ virtual bool recognizeCode(const QString& code) Q_DECL_OVERRIDE;
+ virtual bool recognizeExtension(const QString& ext) Q_DECL_OVERRIDE;
+ virtual bool recognizeLanguage(const QString& lang) Q_DECL_OVERRIDE;
+ virtual Atom::Type atomType() const Q_DECL_OVERRIDE;
virtual QString markedUpCode(const QString& code,
const Node *relative,
- const Location &location);
+ const Location &location) Q_DECL_OVERRIDE;
virtual QString markedUpSynopsis(const Node *node,
const Node *relative,
- SynopsisStyle style);
- virtual QString markedUpQmlItem(const Node *node, bool summary);
- virtual QString markedUpName(const Node *node);
- virtual QString markedUpFullName(const Node *node, const Node *relative);
- virtual QString markedUpEnumValue(const QString &enumValue, const Node *relative);
- virtual QString markedUpIncludes(const QStringList& includes);
- virtual QString functionBeginRegExp(const QString& funcName);
- virtual QString functionEndRegExp(const QString& funcName);
+ SynopsisStyle style) Q_DECL_OVERRIDE;
+ virtual QString markedUpQmlItem(const Node *node, bool summary) Q_DECL_OVERRIDE;
+ virtual QString markedUpName(const Node *node) Q_DECL_OVERRIDE;
+ virtual QString markedUpFullName(const Node *node, const Node *relative) Q_DECL_OVERRIDE;
+ virtual QString markedUpEnumValue(const QString &enumValue, const Node *relative) Q_DECL_OVERRIDE;
+ virtual QString markedUpIncludes(const QStringList& includes) Q_DECL_OVERRIDE;
+ virtual QString functionBeginRegExp(const QString& funcName) Q_DECL_OVERRIDE;
+ virtual QString functionEndRegExp(const QString& funcName) Q_DECL_OVERRIDE;
virtual QList<Section> sections(const InnerNode *innerNode,
SynopsisStyle style,
- Status status);
+ Status status) Q_DECL_OVERRIDE;
virtual QList<Section> qmlSections(QmlClassNode* qmlClassNode,
SynopsisStyle style,
- Status status = Okay);
+ Status status = Okay) Q_DECL_OVERRIDE;
private:
QString addMarkUp(const QString& protectedCode,
diff --git a/src/tools/qdoc/cppcodeparser.h b/src/tools/qdoc/cppcodeparser.h
index 7499575d13..03b55c7775 100644
--- a/src/tools/qdoc/cppcodeparser.h
+++ b/src/tools/qdoc/cppcodeparser.h
@@ -65,15 +65,15 @@ public:
CppCodeParser();
~CppCodeParser();
- virtual void initializeParser(const Config& config);
- virtual void terminateParser();
- virtual QString language();
- virtual QStringList headerFileNameFilter();
- virtual QStringList sourceFileNameFilter();
- virtual void parseHeaderFile(const Location& location, const QString& filePath);
- virtual void parseSourceFile(const Location& location, const QString& filePath);
- virtual void doneParsingHeaderFiles();
- virtual void doneParsingSourceFiles();
+ virtual void initializeParser(const Config& config) Q_DECL_OVERRIDE;
+ virtual void terminateParser() Q_DECL_OVERRIDE;
+ virtual QString language() Q_DECL_OVERRIDE;
+ virtual QStringList headerFileNameFilter() Q_DECL_OVERRIDE;
+ virtual QStringList sourceFileNameFilter() Q_DECL_OVERRIDE;
+ virtual void parseHeaderFile(const Location& location, const QString& filePath) Q_DECL_OVERRIDE;
+ virtual void parseSourceFile(const Location& location, const QString& filePath) Q_DECL_OVERRIDE;
+ virtual void doneParsingHeaderFiles() Q_DECL_OVERRIDE;
+ virtual void doneParsingSourceFiles() Q_DECL_OVERRIDE;
protected:
const QSet<QString>& topicCommands();
diff --git a/src/tools/qdoc/ditaxmlgenerator.cpp b/src/tools/qdoc/ditaxmlgenerator.cpp
index d9cf56769b..54b358e170 100644
--- a/src/tools/qdoc/ditaxmlgenerator.cpp
+++ b/src/tools/qdoc/ditaxmlgenerator.cpp
@@ -663,10 +663,10 @@ GuidMap* DitaXmlGenerator::lookupGuidMap(const QString& fileName)
*/
void DitaXmlGenerator::generateDocs()
{
- if (!runPrepareOnly())
+ if (!preparing())
Generator::generateDocs();
- if (!runGenerateOnly()) {
+ if (!generating()) {
QString fileBase = project.toLower().simplified().replace(QLatin1Char(' '), QLatin1Char('-'));
qdb_->generateIndex(outputDir() + QLatin1Char('/') + fileBase + ".index",
projectUrl,
@@ -675,7 +675,7 @@ void DitaXmlGenerator::generateDocs()
true);
}
- if (!runPrepareOnly()) {
+ if (!preparing()) {
writeDitaMap();
/*
Generate the XML tag file, if it was requested.
diff --git a/src/tools/qdoc/ditaxmlgenerator.h b/src/tools/qdoc/ditaxmlgenerator.h
index 4514f19bc8..d2f445dd5b 100644
--- a/src/tools/qdoc/ditaxmlgenerator.h
+++ b/src/tools/qdoc/ditaxmlgenerator.h
@@ -290,11 +290,11 @@ public:
DitaXmlGenerator();
~DitaXmlGenerator();
- virtual void initializeGenerator(const Config& config);
- virtual void terminateGenerator();
- virtual QString format();
- virtual bool canHandleFormat(const QString& format);
- virtual void generateDocs();
+ virtual void initializeGenerator(const Config& config) Q_DECL_OVERRIDE;
+ virtual void terminateGenerator() Q_DECL_OVERRIDE;
+ virtual QString format() Q_DECL_OVERRIDE;
+ virtual bool canHandleFormat(const QString& format) Q_DECL_OVERRIDE;
+ virtual void generateDocs() Q_DECL_OVERRIDE;
QString protectEnc(const QString& string);
static QString protect(const QString& string, const QString& encoding = "ISO-8859-1");
@@ -304,12 +304,12 @@ public:
protected:
virtual int generateAtom(const Atom* atom,
const Node* relative,
- CodeMarker* marker);
- virtual void generateClassLikeNode(InnerNode* inner, CodeMarker* marker);
- virtual void generateQmlBasicTypePage(QmlBasicTypeNode* qbtn, CodeMarker* marker);
- virtual void generateDocNode(DocNode* dn, CodeMarker* marker);
- virtual void generateCollectionNode(CollectionNode* cn, CodeMarker* marker);
- virtual QString fileExtension() const;
+ CodeMarker* marker) Q_DECL_OVERRIDE;
+ virtual void generateClassLikeNode(InnerNode* inner, CodeMarker* marker) Q_DECL_OVERRIDE;
+ virtual void generateQmlBasicTypePage(QmlBasicTypeNode* qbtn, CodeMarker* marker) Q_DECL_OVERRIDE;
+ virtual void generateDocNode(DocNode* dn, CodeMarker* marker) Q_DECL_OVERRIDE;
+ virtual void generateCollectionNode(CollectionNode* cn, CodeMarker* marker) Q_DECL_OVERRIDE;
+ virtual QString fileExtension() const Q_DECL_OVERRIDE;
virtual QString guidForNode(const Node* node);
virtual QString linkForNode(const Node* node, const Node* relative);
@@ -394,8 +394,8 @@ private:
void generateDetailedQmlMember(Node* node,
const InnerNode* relative,
CodeMarker* marker);
- void generateQmlInherits(QmlClassNode* qcn, CodeMarker* marker);
- void generateQmlInheritedBy(const QmlClassNode* qcn, CodeMarker* marker);
+ void generateQmlInherits(QmlClassNode* qcn, CodeMarker* marker) Q_DECL_OVERRIDE;
+ void generateQmlInheritedBy(const QmlClassNode* qcn, CodeMarker* marker) Q_DECL_OVERRIDE;
void generateQmlInstantiates(QmlClassNode* qcn, CodeMarker* marker);
void generateInstantiatedBy(ClassNode* cn, CodeMarker* marker);
void generateQmlModuleDef(QmlClassNode* qcn);
@@ -420,7 +420,7 @@ private:
QString getAutoLink(const Atom *atom, const Node *relative, const Node** node);
QString registerRef(const QString& ref);
- virtual QString fileBase(const Node *node) const;
+ virtual QString fileBase(const Node *node) const Q_DECL_OVERRIDE;
QString fileName(const Node *node);
static int hOffset(const Node *node);
static bool isThreeColumnEnumValueTable(const Atom *atom);
@@ -434,9 +434,9 @@ private:
QString lookupGuid(QString text);
QString lookupGuid(const QString& fileName, const QString& text);
GuidMap* lookupGuidMap(const QString& fileName);
- virtual void beginSubPage(const InnerNode* node, const QString& fileName);
- virtual void endSubPage();
- virtual void generateInnerNode(InnerNode* node);
+ virtual void beginSubPage(const InnerNode* node, const QString& fileName) Q_DECL_OVERRIDE;
+ virtual void endSubPage() Q_DECL_OVERRIDE;
+ virtual void generateInnerNode(InnerNode* node) Q_DECL_OVERRIDE;
QXmlStreamWriter& xmlWriter();
void writeApiDesc(const Node* node, CodeMarker* marker, const QString& title);
void addLink(const QString& href, const QStringRef& text, DitaTag t = DT_xref);
diff --git a/src/tools/qdoc/doc.cpp b/src/tools/qdoc/doc.cpp
index 5a3ad959d2..c10e3b4669 100644
--- a/src/tools/qdoc/doc.cpp
+++ b/src/tools/qdoc/doc.cpp
@@ -1611,12 +1611,14 @@ void DocParser::parse(const QString& source,
QString word = in.mid(startPos, pos - startPos);
// is word a C++ symbol or an English word?
if ((numInternalUppercase >= 1 && numLowercase >= 2)
- || numStrangeSymbols >= 1) {
- append(Atom::AutoLink, word);
+ || numStrangeSymbols > 0) {
+ if (word.startsWith(QString("__")))
+ appendWord(word);
+ else
+ append(Atom::AutoLink, word);
}
- else {
+ else
appendWord(word);
- }
}
}
}
@@ -1690,12 +1692,15 @@ void DocParser::insertTarget(const QString &target, bool keyword)
}
else {
targetMap_.insert(target, location());
- append(Atom::Target, target);
priv->constructExtra();
- if (keyword)
+ if (keyword) {
+ append(Atom::Keyword, target);
priv->extra->keywords_.append(priv->text.lastAtom());
- else
+ }
+ else {
+ append(Atom::Target, target);
priv->extra->targets_.append(priv->text.lastAtom());
+ }
}
}
@@ -1991,7 +1996,7 @@ void DocParser::append(const QString &string)
Atom::Type lastType = priv->text.lastAtom()->type();
if ((lastType == Atom::Code) && priv->text.lastAtom()->string().endsWith(QLatin1String("\n\n")))
priv->text.lastAtom()->chopString();
- priv->text << Atom(string);
+ priv->text << Atom(string); // The Atom type is Link.
}
void DocParser::append(Atom::Type type, const QString& p1, const QString& p2)
@@ -2008,7 +2013,7 @@ void DocParser::append(const QString& p1, const QString& p2)
if ((lastType == Atom::Code) && priv->text.lastAtom()->string().endsWith(QLatin1String("\n\n")))
priv->text.lastAtom()->chopString();
if (p2.isEmpty())
- priv->text << Atom(p1);
+ priv->text << Atom(p1); // The Atom type is Link.
else
priv->text << LinkAtom(p1, p2);
}
@@ -2319,7 +2324,10 @@ QString DocParser::getBracedArgument(bool verbatim)
}
break;
default:
- arg += in[pos];
+ if (in[pos].isSpace() && !verbatim)
+ arg += QChar(' ');
+ else
+ arg += in[pos];
pos++;
}
}
@@ -2816,18 +2824,6 @@ QString DocParser::slashed(const QString& str)
#define COMMAND_BRIEF Doc::alias("brief")
#define COMMAND_QMLBRIEF Doc::alias("qmlbrief")
-#if 0
-Doc::Doc(const Location& start_loc,
- const Location& end_loc,
- const QString& source,
- const QSet<QString>& metaCommandSet)
-{
- priv = new DocPrivate(start_loc,end_loc,source);
- DocParser parser;
- parser.parse(source,priv,metaCommandSet,QSet<QString>());
-}
-#endif
-
/*!
Parse the qdoc comment \a source. Build up a list of all the topic
commands found including their arguments. This constructor is used
@@ -3234,6 +3230,9 @@ void Doc::initialize(const Config& config)
}
}
+/*!
+ All the heap allocated variables are deleted.
+ */
void Doc::terminate()
{
DocParser::exampleFiles.clear();
diff --git a/src/tools/qdoc/doc.h b/src/tools/qdoc/doc.h
index 1c13c0f026..72db2c882c 100644
--- a/src/tools/qdoc/doc.h
+++ b/src/tools/qdoc/doc.h
@@ -97,9 +97,9 @@ public:
TopicRef() { }
~TopicRef();
- virtual bool isMapRef() const { return false; }
- virtual const DitaRefList* subrefs() const { return &subrefs_; }
- virtual void appendSubref(DitaRef* t) { subrefs_.append(t); }
+ virtual bool isMapRef() const Q_DECL_OVERRIDE { return false; }
+ virtual const DitaRefList* subrefs() const Q_DECL_OVERRIDE { return &subrefs_; }
+ virtual void appendSubref(DitaRef* t) Q_DECL_OVERRIDE { subrefs_.append(t); }
private:
DitaRefList subrefs_;
@@ -111,7 +111,7 @@ public:
MapRef() { }
~MapRef() { }
- virtual bool isMapRef() const { return true; }
+ virtual bool isMapRef() const Q_DECL_OVERRIDE { return true; }
};
class Doc
diff --git a/src/tools/qdoc/doc/images/link-to-qquickitem.png b/src/tools/qdoc/doc/images/link-to-qquickitem.png
new file mode 100644
index 0000000000..00e03c3717
--- /dev/null
+++ b/src/tools/qdoc/doc/images/link-to-qquickitem.png
Binary files differ
diff --git a/src/tools/qdoc/doc/images/links-to-broken-links.png b/src/tools/qdoc/doc/images/links-to-broken-links.png
new file mode 100644
index 0000000000..775143bd4a
--- /dev/null
+++ b/src/tools/qdoc/doc/images/links-to-broken-links.png
Binary files differ
diff --git a/src/tools/qdoc/doc/images/links-to-links.png b/src/tools/qdoc/doc/images/links-to-links.png
new file mode 100644
index 0000000000..9d2cc2fae5
--- /dev/null
+++ b/src/tools/qdoc/doc/images/links-to-links.png
Binary files differ
diff --git a/src/tools/qdoc/doc/images/qa-table.png b/src/tools/qdoc/doc/images/qa-table.png
new file mode 100644
index 0000000000..5818739fac
--- /dev/null
+++ b/src/tools/qdoc/doc/images/qa-table.png
Binary files differ
diff --git a/src/tools/qdoc/doc/qa-pages.qdoc b/src/tools/qdoc/doc/qa-pages.qdoc
new file mode 100644
index 0000000000..d392877ecb
--- /dev/null
+++ b/src/tools/qdoc/doc/qa-pages.qdoc
@@ -0,0 +1,109 @@
+/****************************************************************************
+**
+** Copyright (C) 2013 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the documentation of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:FDL$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Free Documentation License Usage
+** Alternatively, this file may be used under the terms of the GNU Free
+** Documentation License version 1.3 as published by the Free Software
+** Foundation and appearing in the file included in the packaging of
+** this file. Please review the following information to ensure
+** the GNU Free Documentation License version 1.3 requirements
+** will be met: http://www.gnu.org/copyleft/fdl.html.
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+/*!
+ \page 28-qdoc-qa-pages.html
+ \previouspage Generating DITA XML Output
+ \contentspage QDoc Manual
+ \nextpage QDoc Manual
+
+ \title QA Pages
+
+ qdoc can generate some extra HTML pages that can be useful for
+ debugging qdoc documentation. These \e QA pages make it easier for
+ those who write documentation to find links that either go to the
+ wrong targets or don't go anywhere at all.
+
+ \section2 Generating the QA Pages
+
+ Add \c {-write-qa-pages} to the command line to tell qdoc to
+ generate the QA pages. If this option is not provided, the QA
+ pages will not be generated, and previolusly generated QA pages
+ will be deleted.
+
+ \section2 Finding the Module's Main QA Page
+
+ The main QA page for a module is not linked into the module's
+ generated documentation, but it is located in the same output
+ directory. To find the top-level QA page for module \e {xxx}, set
+ your browser to the qdoc output directory for module \e {xxx}.
+ Several files whose names begin with \e {aaa} appear at the top of
+ the list. These are the QA pages for module \e{xxx}. The file
+ names begin with \e {aaa} to ensure that they are easy to find at
+ the top of the directory.
+
+ For module \e{xxx}, find the file \e{aaa-xxx-qa-page.html}. This
+ is the top-level QA page for module \e{xxx}. Load that file into
+ the browser. The top-level QA page shows a table that contains
+ links to several QA sub-pages.
+
+ For example, the main QA page for QtCore is \c{aaa-qtcore-qa-page.html}.
+ This was the table for QtCore at one point:
+
+ \image qa-table.png
+
+ Each table entry shows the number of links from QtCore to some
+ other module, except for the last entry, which shows the number of
+ broken links in QtCore. Click the \b qtquick entry to load the QA
+ subpage showing the links from QtCore to QtQuick.
+
+ \section2 Links To Links Page
+
+ Clicking the \b qtquick table entry on the main QA page for QtCore
+ loads the QA subpage showing a table containing all the links from
+ QtCore to QtQuick. The table contains all the links constructed
+ with the \l {l-command} {\\l command}, as well as the autolinks.
+
+ \image links-to-links.png
+
+ At the time this table was generated, there were six links from
+ QtCore to QtQuick. The first column of each table entry contains
+ a link to some link in QtCore. The link text as it appears in
+ QtCore is shown. The second and third columns contain the source
+ file name and line number for where qdoc saw the link in a qdoc
+ comment.
+
+ \note The line number will normally refer to the first line of the
+ comment where qdoc saw the link.
+
+ Clicking on a link in the table takes you to that link in the
+ documentation. There the link will be marked with three red
+ asterisks. For example, clicking on the link in the fifth table
+ entry takes you here:
+
+ \image link-to-qquickitem.png
+
+ The link is marked with three red asterisks. Now you can click on
+ the actual link to check that it goes to the correct place. In
+ this case, the link should go to the reference page for the
+ QQuickItem class. You can check each link in the table this
+ way. If you find a link that goes to the wrong place, use the
+ source file name and line number to find the link, and fix the
+ problem using the square bracket notation for the \l {l-command}
+ {\\l command}.
+
+ */
diff --git a/src/tools/qdoc/doc/qdoc-manual-intro.qdoc b/src/tools/qdoc/doc/qdoc-manual-intro.qdoc
index 636cd6980e..3b7dda30f3 100644
--- a/src/tools/qdoc/doc/qdoc-manual-intro.qdoc
+++ b/src/tools/qdoc/doc/qdoc-manual-intro.qdoc
@@ -89,8 +89,8 @@
\section1 Running QDoc
- The current name of the QDoc program is \c {qdoc}. To run qdoc
- from the command line, give it the name of a configuration file:
+ The name of the QDoc program is \c {qdoc}. To run qdoc from the
+ command line, give it the name of a configuration file:
\quotation
\c {$ ../../bin/qdoc ./config.qdocconf}
@@ -107,6 +107,151 @@
See \l{The QDoc Configuration File} for instructions on how to
set up a QDoc configuration file.
+ \section2 Running QDoc in Single Execution Mode
+
+ Beginning with Qt 5.5, a new way to run QDoc is available that
+ reduces the time it takes to generate the Qt5 documentation by as
+ much as 90%. The new way to run QDoc is \e{single execution} mode.
+ Single execution mode is not currently available in the Qt5 build
+ system, which still uses the \e {standard} mode. Single execution
+ mode is only available when you run QDoc yourself, which you will
+ want to do often as you document your module and integrate your
+ documentation with the other Qt modules.
+
+ To run QDoc in single execution mode, add \c {-single-exec} to the
+ command line and pass QDoc a master \c qdocconf file that is
+ simply a list of file paths for qdocconf files of all the Qt5
+ modules. For example:
+
+ \code
+ /Users/me/qt5/qtbase/bin/qdoc -outputdir /Users/me/qt5/qtbase/doc -installdir /Users/me/qt5/qtbase/doc /Users/me/qt5/master.qdocconf -single-exec
+ \endcode
+
+ The qdocconf file, \c {master.qdocconf}, just lists the qdocconf files for all the Qt5 modules to be processed:
+
+ \badcode
+ /Users/me/qt5/qtbase/src/corelib/doc/qtcore.qdocconf
+ /Users/me/qt5/qtbase/src/network/doc/qtnetwork.qdocconf
+ /Users/me/qt5/qtbase/src/sql/doc/qtsql.qdocconf
+ /Users/me/qt5/qtbase/src/xml/doc/qtxml.qdocconf
+ /Users/me/qt5/qtbase/src/testlib/doc/qttestlib.qdocconf
+ /Users/me/qt5/qtbase/src/concurrent/doc/qtconcurrent.qdocconf
+ /Users/me/qt5/qtbase/src/gui/doc/qtgui.qdocconf
+ /Users/me/qt5/qtbase/src/platformheaders/doc/qtplatformheaders.qdocconf
+ /Users/me/qt5/qtbase/src/widgets/doc/qtwidgets.qdocconf
+ /Users/me/qt5/qtbase/src/opengl/doc/qtopengl.qdocconf
+ /Users/me/qt5/qtbase/src/printsupport/doc/qtprintsupport.qdocconf
+ /Users/me/qt5/qtbase/src/tools/qdoc/doc/config/qdoc.qdocconf
+ /Users/me/qt5/qtbase/qmake/doc/qmake.qdocconf
+ /Users/me/qt5/qtsvg/src/svg/doc/qtsvg.qdocconf
+ /Users/me/qt5/qtxmlpatterns/src/xmlpatterns/doc/qtxmlpatterns.qdocconf
+ /Users/me/qt5/qtdeclarative/src/qml/doc/qtqml.qdocconf
+ /Users/me/qt5/qtdeclarative/src/quick/doc/qtquick.qdocconf
+ /Users/me/qt5/qtquickcontrols/src/controls/doc/qtquickcontrols.qdocconf
+ /Users/me/qt5/qtquickcontrols/src/layouts/doc/qtquicklayouts.qdocconf
+ /Users/me/qt5/qtquickcontrols/src/dialogs/doc/qtquickdialogs.qdocconf
+ /Users/me/qt5/qtmultimedia/src/multimedia/doc/qtmultimedia.qdocconf
+ /Users/me/qt5/qtmultimedia/src/multimediawidgets/doc/qtmultimediawidgets.qdocconf
+ /Users/me/qt5/qtactiveqt/src/activeqt/doc/activeqt.qdocconf
+ /Users/me/qt5/qtsensors/src/sensors/doc/qtsensors.qdocconf
+ /Users/me/qt5/qtwebkit/Source/qtwebkit.qdocconf
+ /Users/me/qt5/qttools/src/assistant/help/doc/qthelp.qdocconf
+ /Users/me/qt5/qttools/src/assistant/assistant/doc/qtassistant.qdocconf
+ /Users/me/qt5/qttools/src/designer/src/uitools/doc/qtuitools.qdocconf
+ /Users/me/qt5/qttools/src/designer/src/designer/doc/qtdesigner.qdocconf
+ /Users/me/qt5/qttools/src/linguist/linguist/doc/qtlinguist.qdocconf
+ /Users/me/qt5/qtwebkit-examples/doc/qtwebkitexamples.qdocconf
+ /Users/me/qt5/qtimageformats/src/imageformats/doc/qtimageformats.qdocconf
+ /Users/me/qt5/qtgraphicaleffects/src/effects/doc/qtgraphicaleffects.qdocconf
+ /Users/me/qt5/qtscript/src/script/doc/qtscript.qdocconf
+ /Users/me/qt5/qtscript/src/scripttools/doc/qtscripttools.qdocconf
+ /Users/me/qt5/qtserialport/src/serialport/doc/qtserialport.qdocconf
+ /Users/me/qt5/qtdoc/doc/config/qtdoc.qdocconf
+ \endcode
+
+ \section3 Why Standard Mode Is Slow
+
+ Currently, the Qt5 build system does not use QDoc's \e {single
+ execution} mode for generating the Qt5 documentation. It runs QDoc
+ in the \e {standard} mode. The standard mode was came about
+ because it was the easiest way to get convert the Qt4 QDoc to
+ handle the modularization of Qt in Qt5. In Qt4, QDoc ran once over
+ all the Qt4 sources to generate the HTML documentation for Qt.
+ While generating the Qt documentation, Qt4 QDoc also generated an
+ \e {index file} for Qt. That index file was meant to be used as
+ input to subsequent QDoc runs for generating HTML documentation
+ for other software libraries/products that were based on Qt. The
+ Qt index file allowed QDoc to link documentation written for those
+ other libraries/products to the Qt4 documentation.
+
+ When Qt5 came along, Qt was divided into modules. Since then,
+ many new modules have been added to Qt. As of version 5.5, there
+ are over 40 separate modules in Qt5, each with its own
+ documentation that links to (depends on) the documentation of
+ other Qt modules.
+
+ In \e {standard mode}, QDoc runs twice for each module. The first
+ QDoc run for a particular Qt module, parses all the module's
+ source files and then uses the information to generate the
+ module's index file. It is called the \e{prepare phase} because
+ it \e prepares the module's index file. The second QDoc run for
+ the module also parses all the module's source files and then
+ generates the module's documentation pages. This is called the \e
+ {generate phase} because it generates the module's documentation.
+
+ The module's documentation will likely contain HTML links to the
+ documentation of one or more of the other Qt modules. For example,
+ most Qt5 modules contain links to documentation in QtCore. When a
+ Qt module contains links into the documentation of other Qt
+ module's, that module is said to depend on those other Qt modules.
+ Hence when QDoc runs the \e {generate phase} for that module, it
+ must also load the index files for those modules so it can create
+ those thinks.
+
+ Hence, when the Qt build system generates the Qt documentation, it
+ first runs QDoc once for each module to perform the \e {prepare
+ phase} to generate all the index files. Then it runs QDoc once for
+ each module to perform the \e {generate phase}, where it uses the
+ dependent index files to generate the module's documentation,
+ including any cross-module links it finds. Each execution of
+ QDoc, both \e {prepare phase} and \e {generate phase}, parses
+ all the source files that are included in the module, and in the
+ \e {generate phase} also parses the index files for the dependent
+ modules. Nothing is retained or retainable between QDoc runs.
+
+ \section3 Why Single Execution Mode Is Much Faster
+
+ As the name implies, single execution mode uses a single QDoc
+ process to generate all the Qt5 documentation. The single QDoc
+ process still performs a \e{prepare phase} for each module and
+ then a \e{generate phase} for each module, but there are a few
+ differences. It begins by reading the master qdocconf file. Then
+ it reads each qdocconf file in the master list and performs the
+ \e{prepare phase} for each module. During the \e{prepare phase},
+ all the source files for the module are parsed to build a syntax
+ tree for the module. The module's index file is then generated,
+ although QDoc will not re-read the index files in the \e{generate
+ phase}. The important difference here is that the module's syntax
+ tree is retained after the index file is generated, so that after
+ the \e{prepare phase} has been run for all the modules, QDoc still
+ has all the syntax trees it built.
+
+ QDoc then processes each module again for the \e{generate phase}.
+ But now QDoc doesn't need to re-parse each module's source files,
+ because the module's syntax tree is still in memory. Nor does QDoc
+ need to re-read the index files for the dependent modules, again
+ because it still has the syntax trees for those modules in memry.
+ It remains only to traverse each module's syntax tree to generate
+ the documentation pages.
+
+ Hence, QDoc parses each source file once and only once and doesn't
+ need to read index files. This is what makes single execution mode
+ much faster than the standard mode. It is anticipated that the Qt
+ build system will eventually run QDoc in single execution mode.
+ However, changes to the master qdocconf file might be required, so
+ the method described above for running QDoc in single execution
+ mode might have to change, watch this space for updates.
+
\section1 How QDoc Works
QDoc begins by reading the configuration file you specified on the
diff --git a/src/tools/qdoc/doc/qdoc-manual-markupcmds.qdoc b/src/tools/qdoc/doc/qdoc-manual-markupcmds.qdoc
index c04cdeca2b..e7d651704e 100644
--- a/src/tools/qdoc/doc/qdoc-manual-markupcmds.qdoc
+++ b/src/tools/qdoc/doc/qdoc-manual-markupcmds.qdoc
@@ -1771,9 +1771,15 @@
different kinds of targets. The command's general syntax is:
\code
- \l {link target} {link text}
+ \l [ link criteria ] { link target } { link text }
\endcode
+ ...where the \c {link criteria} in square brackets are optional
+ but may be required when the \c {link target} is ambiguous. See
+ \l {Fixing Ambiguous Links} below.
+
+ Here is an example using the \\l command to link to an external page:
+
\code
/ *!
Read the \l {http://qt-project.org/doc/qt-5.0/}
@@ -1877,6 +1883,101 @@
\l {QWidget::} {sizeHint()}
\endquotation
+ \section2 Fixing Ambiguous Links
+
+ Because of the modularization of Qt beginning with Qt 5.0, The
+ possibility that qdoc will have to deal with ambiguous links has
+ increased. An ambiguous link is one that has a matching target in
+ more than one Qt module, e.g. the same section title can appear in
+ more than one Qt module, or the name of a C++ class in one module
+ can also be the name of a QML type in another module. A real
+ example in Qt5 is the name Qt itself. Qt is the name of both a C++
+ namespace in QtCore and a QML type in QtQml.
+
+ Suppose we want to link to the \l {Qt} {Qt C++ namespace}. At the
+ time qdoc generated this HTML page, that link was correct. Does
+ it still go to the C++ namespace? Qdoc generated that link from
+ this link command:
+
+ \list
+ \li \c {\l {Qt} {Qt C++ namespace}}
+ \endlist
+
+ Now suppose we want to link to the \l [QML] {Qt} {Qt QML type}.
+ At the time qdoc generated this HTML page, that link was also
+ correct, but we had to use this link command:
+
+ \list
+ \li \c {\l [QML] {Qt} {Qt QML type}}
+ \endlist
+
+ The \e {QML} in \e {square brackets} tells qdoc to accept a
+ matching target only if the traget is on a QML page. Qdoc actually
+ finds the C++ namespace target first, but since that target is on
+ a C++ page, qdoc ignores it and keeps looking until it finds the
+ same target on a QML page.
+
+ Without the guidance in the \e{\\l command} in the optional \e
+ {square bracket} argument, qdoc links to the first matching target
+ it finds. qdoc can't warn that the link was ambiguous in such
+ cases because it doesn't know that another matching target exists.
+
+ \section2 What arguments can appear in square brackets?
+
+ A link command with square bracket argument has the following syntax:
+ \list
+ \c {\l [QML|CPP|DOC|QtModuleName] {link target} {link text}}
+ \endlist
+
+ The \e {square bracket} argument is only allowed in the \c {\\l
+ (link)} command. The example above shows how \c QML is used as the
+ \e {square brackets} argument to force qdoc to match a QML target.
+ Most often, this will be a QML type, but it can also be a QML
+ member function of property.
+
+ In the example, qdoc didn't need a \e {square bracket} argument to
+ find the Qt C++ namespace page, because that one was the first
+ matching target qdoc found anyway. However, to force qdoc to find
+ a C++ target when a matching QML target gets in the way, \c CPP
+ can be used as the \e {square bracket} argument. For example:
+
+ \list
+ \li \c {\l [CPP] {Qt} {Qt C++ namespace}}
+ \endlist
+
+ ...will force qdoc to ignore the Qt QML type and continue
+ searching until it matches the Qt C++ namespace.
+
+ If the link target is neither a C++ nor a QML entity, \c {DOC} can
+ be used as the \e {square bracket} argument to prevent qdoc from
+ matching either of those. At this writing, there were no cases of
+ ambiguous links where using \c {DOC} was required.
+
+ Often, the documentor knows which Qt module the link target is
+ in. When the module name is known, use the module name as the \e
+ {square bracket} argument. In the example above, if we know that
+ the QML type named Qt is located in the QtQml module, we can write
+ the link command like this:
+
+ \list
+ \li \c {\l [QtQml] {Qt} {Qt QML type}}
+ \endlist
+
+ When a module name is used as the \e {square bracket} argument,
+ qdoc will search for link the target in that module only. This
+ makes searching for link targets more efficient.
+
+ Finally, the module name and entity type arguments can be
+ combined, separated by a blank, so something like this is also
+ allowed:
+
+ \list
+ \li \c {\l [CPP QtQml] {Window} {C++ class Window}}
+ \endlist
+
+ As of this writing, there were no cases where combining the two
+ was required.
+
See also \l {sa-command} {\\sa}, \l {target-command} {\\target},
and \l {keyword-command} {\\keyword}.
diff --git a/src/tools/qdoc/doc/qdoc-manual-qdocconf.qdoc b/src/tools/qdoc/doc/qdoc-manual-qdocconf.qdoc
index 093f9cc2c6..925cd3d16a 100644
--- a/src/tools/qdoc/doc/qdoc-manual-qdocconf.qdoc
+++ b/src/tools/qdoc/doc/qdoc-manual-qdocconf.qdoc
@@ -1531,7 +1531,7 @@
\page 21-3-qt-dita-xml-output.html
\previouspage minimum.qdocconf
\contentspage QDoc Manual
- \nextpage QDoc Manual
+ \nextpage QA Pages
\title Generating DITA XML Output
diff --git a/src/tools/qdoc/doc/qdoc-manual.qdoc b/src/tools/qdoc/doc/qdoc-manual.qdoc
index 485faba70f..e6f335097a 100644
--- a/src/tools/qdoc/doc/qdoc-manual.qdoc
+++ b/src/tools/qdoc/doc/qdoc-manual.qdoc
@@ -70,6 +70,7 @@
\li \l {minimum.qdocconf}
\li \l {Generating DITA XML Output}
\endlist
+ \li \l {QA Pages}
\endlist
*/
diff --git a/src/tools/qdoc/generator.cpp b/src/tools/qdoc/generator.cpp
index 5aff19e121..75bfa5033b 100644
--- a/src/tools/qdoc/generator.cpp
+++ b/src/tools/qdoc/generator.cpp
@@ -64,7 +64,7 @@ QString Generator::outSubdir_;
QStringList Generator::outFileNames_;
QSet<QString> Generator::outputFormats;
QHash<QString, QString> Generator::outputPrefixes;
-QString Generator::project;
+QString Generator::project_;
QStringList Generator::scriptDirs;
QStringList Generator::scriptFiles;
QString Generator::sinceTitles[] =
@@ -92,8 +92,11 @@ bool Generator::debugging_ = false;
bool Generator::noLinkErrors_ = false;
bool Generator::autolinkErrors_ = false;
bool Generator::redirectDocumentationToDevNull_ = false;
-Generator::Passes Generator::qdocPass_ = Both;
+Generator::QDocPass Generator::qdocPass_ = Generator::Neither;
+bool Generator::qdocSingleExec_ = false;
+bool Generator::qdocWriteQaPages_ = false;
bool Generator::useOutputSubdirs_ = true;
+QmlClassNode* Generator::qmlTypeContext_ = 0;
void Generator::startDebugging(const QString& message)
{
@@ -134,6 +137,7 @@ Generator::Generator()
inTableHeader_(false),
threeColumnEnumValueTable_(true),
showInternal_(false),
+ singleExec_(false),
numTableRows_(0)
{
qdb_ = QDocDatabase::qdocDB();
@@ -259,7 +263,8 @@ void Generator::writeOutFileNames()
void Generator::beginSubPage(const InnerNode* node, const QString& fileName)
{
QString path = outputDir() + QLatin1Char('/');
- if (Generator::useOutputSubdirs() && !node->outputSubdirectory().isEmpty())
+ if (Generator::useOutputSubdirs() && !node->outputSubdirectory().isEmpty() &&
+ !outputDir().endsWith(node->outputSubdirectory()))
path += node->outputSubdirectory() + QLatin1Char('/');
path += fileName;
@@ -314,7 +319,7 @@ QString Generator::fileBase(const Node *node) const
if (node->isExample() || node->isExampleFile()) {
QString modPrefix(node->moduleName());
if (modPrefix.isEmpty()) {
- modPrefix = project;
+ modPrefix = project_;
}
base.prepend(modPrefix.toLower() + QLatin1Char('-'));
}
@@ -1529,7 +1534,7 @@ void Generator::initialize(const Config &config)
QDir dirInfo;
if (dirInfo.exists(outDir_)) {
- if (!runGenerateOnly() && Generator::useOutputSubdirs()) {
+ if (!generating() && Generator::useOutputSubdirs()) {
if (!Config::removeDirContents(outDir_))
config.lastLocation().error(tr("Cannot empty output directory '%1'").arg(outDir_));
}
@@ -1643,7 +1648,7 @@ void Generator::initialize(const Config &config)
++n;
}
- project = config.getString(CONFIG_PROJECT);
+ project_ = config.getString(CONFIG_PROJECT);
QStringList prefixes = config.getStringList(CONFIG_OUTPUTPREFIXES);
if (!prefixes.isEmpty()) {
@@ -1678,6 +1683,7 @@ void Generator::initializeGenerator(const Config& config)
{
config_ = &config;
showInternal_ = config.getBool(CONFIG_SHOWINTERNAL);
+ singleExec_ = config.getBool(CONFIG_SINGLEEXEC);
}
bool Generator::matchAhead(const Atom *atom, Atom::Type expectedAtomType)
diff --git a/src/tools/qdoc/generator.h b/src/tools/qdoc/generator.h
index 110a8d9e73..d0c38bcb40 100644
--- a/src/tools/qdoc/generator.h
+++ b/src/tools/qdoc/generator.h
@@ -61,7 +61,7 @@ class Generator
Q_DECLARE_TR_FUNCTIONS(QDoc::Generator)
public:
- enum Passes { Both, Prepare, Generate };
+ enum QDocPass { Neither, Prepare, Generate };
enum ListType { Generic, Obsolete };
Generator();
@@ -91,18 +91,25 @@ public:
static bool debugging() { return debugging_; }
static bool noLinkErrors() { return noLinkErrors_; }
static bool autolinkErrors() { return autolinkErrors_; }
- static void setQDocPass(Passes pass) { qdocPass_ = pass; }
- static bool runPrepareOnly() { return (qdocPass_ == Prepare); }
- static bool runGenerateOnly() { return (qdocPass_ == Generate); }
- static QString defaultModuleName() { return project; }
+ static void setQDocPass(QDocPass t) { qdocPass_ = t; }
+ static bool preparing() { return (qdocPass_ == Prepare); }
+ static bool generating() { return (qdocPass_ == Generate); }
+ static bool singleExec() { return qdocSingleExec_; }
+ static bool writeQaPages() { return qdocWriteQaPages_; }
+ static void setSingleExec() { qdocSingleExec_ = true; }
+ static void setWriteQaPages() { qdocWriteQaPages_ = true; }
+ static QString defaultModuleName() { return project_; }
static void resetUseOutputSubdirs() { useOutputSubdirs_ = false; }
static bool useOutputSubdirs() { return useOutputSubdirs_; }
+ static void setQmlTypeContext(QmlClassNode* t) { qmlTypeContext_ = t; }
+ static QmlClassNode* qmlTypeContext() { return qmlTypeContext_; }
protected:
virtual void beginSubPage(const InnerNode* node, const QString& fileName);
virtual void endSubPage();
virtual QString fileBase(const Node* node) const;
virtual QString fileExtension() const = 0;
+ virtual void generateQAPage() { }
virtual void generateAlsoList(const Node *node, CodeMarker *marker);
virtual int generateAtom(const Atom *atom, const Node *relative, CodeMarker *marker);
virtual void generateBody(const Node *node, CodeMarker *marker);
@@ -198,7 +205,7 @@ private:
static QStringList imageDirs;
static QStringList imageFiles;
static QMap<QString, QStringList> imgFileExts;
- static QString project;
+ static QString project_;
static QString outDir_;
static QString outSubdir_;
static QStringList outFileNames_;
@@ -212,8 +219,11 @@ private:
static bool noLinkErrors_;
static bool autolinkErrors_;
static bool redirectDocumentationToDevNull_;
- static Passes qdocPass_;
+ static QDocPass qdocPass_;
+ static bool qdocSingleExec_;
+ static bool qdocWriteQaPages_;
static bool useOutputSubdirs_;
+ static QmlClassNode* qmlTypeContext_;
void generateReimplementedFrom(const FunctionNode *func, CodeMarker *marker);
@@ -232,6 +242,7 @@ private:
bool inTableHeader_;
bool threeColumnEnumValueTable_;
bool showInternal_;
+ bool singleExec_;
int numTableRows_;
QString link_;
QString sectionNumber_;
diff --git a/src/tools/qdoc/htmlgenerator.cpp b/src/tools/qdoc/htmlgenerator.cpp
index ced7e637b3..22c44bd7f6 100644
--- a/src/tools/qdoc/htmlgenerator.cpp
+++ b/src/tools/qdoc/htmlgenerator.cpp
@@ -100,8 +100,10 @@ HtmlGenerator::HtmlGenerator()
*/
HtmlGenerator::~HtmlGenerator()
{
- if (helpProjectWriter)
+ if (helpProjectWriter) {
delete helpProjectWriter;
+ helpProjectWriter = 0;
+ }
}
/*!
@@ -130,6 +132,11 @@ void HtmlGenerator::initializeGenerator(const Config &config)
Generator::initializeGenerator(config);
obsoleteLinks = config.getBool(CONFIG_OBSOLETELINKS);
setImageFileExtensions(QStringList() << "png" << "jpg" << "jpeg" << "gif");
+
+ /*
+ The formatting maps are owned by Generator. They are cleared in
+ Generator::terminate().
+ */
int i = 0;
while (defaults[i].key) {
formattingLeftMap().insert(defaults[i].key, defaults[i].left);
@@ -215,7 +222,12 @@ void HtmlGenerator::initializeGenerator(const Config &config)
// The following line was changed to fix QTBUG-27798
//codeIndent = config.getInt(CONFIG_CODEINDENT);
- helpProjectWriter = new HelpProjectWriter(config, project.toLower() + ".qhp", this);
+ /*
+ The help file write should be allocated once and only once
+ per qdoc execution.
+ */
+ if (helpProjectWriter == 0)
+ helpProjectWriter = new HelpProjectWriter(config, project.toLower() + ".qhp", this);
// Documentation template handling
headerScripts = config.getString(HtmlGenerator::format() + Config::dot + CONFIG_HEADERSCRIPTS);
@@ -263,6 +275,20 @@ QString HtmlGenerator::format()
}
/*!
+ Generate targets for any \keyword commands that were seen
+ in the qdoc comment for the \a node.
+ */
+void HtmlGenerator::generateKeywordAnchors(const Node* node)
+{
+ if (!node->doc().isEmpty()) {
+ const QList<Atom*>& keywords = node->doc().keywords();
+ foreach (Atom* a, keywords) {
+ out() << "<a name=\"" << Doc::canonicalTitle(a->string()) << "\"></a>";
+ }
+ }
+}
+
+/*!
Traverses the current tree generating all the HTML documentation.
*/
void HtmlGenerator::generateDocs()
@@ -270,10 +296,12 @@ void HtmlGenerator::generateDocs()
Node* qflags = qdb_->findClassNode(QStringList("QFlags"));
if (qflags)
qflagsHref_ = linkForNode(qflags,0);
- if (!runPrepareOnly())
+ if (!preparing())
Generator::generateDocs();
+ if (Generator::generating() && Generator::writeQaPages())
+ generateQAPage();
- if (!runGenerateOnly()) {
+ if (!generating()) {
QString fileBase = project.toLower().simplified().replace(QLatin1Char(' '), QLatin1Char('-'));
qdb_->generateIndex(outputDir() + QLatin1Char('/') + fileBase + ".index",
projectUrl,
@@ -282,7 +310,7 @@ void HtmlGenerator::generateDocs()
true);
}
- if (!runPrepareOnly()) {
+ if (!preparing()) {
helpProjectWriter->generate();
generateManifestFiles();
/*
@@ -293,6 +321,144 @@ void HtmlGenerator::generateDocs()
}
/*!
+ Output the module's Quality Assurance page.
+ */
+void HtmlGenerator::generateQAPage()
+{
+ NamespaceNode* node = qdb_->primaryTreeRoot();
+ beginSubPage(node, "aaa-" + defaultModuleName().toLower() + "-qa-page.html");
+ CodeMarker* marker = CodeMarker::markerForFileName(node->location().filePath());
+ QString title = "Quality Assurance Page for " + defaultModuleName();
+ QString t = "Quality assurance information for checking the " + defaultModuleName() + " documentation.";
+ generateHeader(title, node, marker);
+ generateTitle(title, Text() << t, LargeSubTitle, node, marker);
+
+ QStringList strings;
+ QVector<int> counts;
+ QString depends = qdb_->getLinkCounts(strings, counts);
+ if (!strings.isEmpty()) {
+ t = "Intermodule Link Counts";
+ QString ref = registerRef(t);
+ out() << "<a name=\"" << ref << "\"></a>" << divNavTop << '\n';
+ out() << "<h2 id=\"" << ref << "\">" << protectEnc(t) << "</h2>\n";
+ out() << "<table class=\"valuelist\"><tr valign=\"top\" "
+ << "class=\"even\"><th class=\"tblConst\">Destination Module</th>"
+ << "<th class=\"tblval\">Link Count</th></tr>\n";
+ QString fileName;
+ for (int i = 0; i< strings.size(); ++i) {
+ fileName = generateLinksToLinksPage(strings.at(i), marker);
+ out() << "<tr><td class=\"topAlign\"><tt>"
+ << "<a href=\"" << fileName << "\">"
+ << strings.at(i) << "</a>"
+ << "</tt></td><td class=\"topAlign\"><tt>" << counts.at(i)
+ << "</tt></td></tr>\n";
+ }
+ int count = 0;
+ fileName = generateLinksToBrokenLinksPage(marker, count);
+ if (count != 0) {
+ out() << "<tr><td class=\"topAlign\"><tt>"
+ << "<a href=\"" << fileName << "\">"
+ << "Broken Links" << "</a>"
+ << "</tt></td><td class=\"topAlign\"><tt>" << count
+ << "</tt></td></tr>\n";
+
+ }
+
+ out() << "</table>\n";
+ t = "The Optimal \"depends\" Variable";
+ out() << "<h2>" << protectEnc(t) << "</h2>\n";
+ t = "Consider replacing the depends variable in " + defaultModuleName().toLower() +
+ ".qdocconf with this one, if the two are not identical:";
+ out() << "<p>" << protectEnc(t) << "</p>\n";
+ out() << "<p>" << protectEnc(depends) << "</p>\n";
+ }
+ generateFooter();
+ endSubPage();
+}
+
+/*!
+ This function writes an html file containing a list of
+ links to links that originate in the current module and
+ go to targets in the specified \a module. The \a marker
+ is used for the same thing the marker is always used for.
+ */
+QString HtmlGenerator::generateLinksToLinksPage(const QString& module, CodeMarker* marker)
+{
+ NamespaceNode* node = qdb_->primaryTreeRoot();
+ QString fileName = "aaa-links-to-" + module + ".html";
+ beginSubPage(node, fileName);
+ QString title = "Links from " + defaultModuleName() + " to " + module;
+ generateHeader(title, node, marker);
+ generateTitle(title, Text(), SmallSubTitle, node, marker);
+ out() << "<p>This is a list of links from " << defaultModuleName()
+ << " to " << module << ". ";
+ out() << "Click on a link to go to the location of the link. The link is marked ";
+ out() << "with red asterisks. ";
+ out() << "Click on the marked link to see if it goes to the right place.</p>\n";
+ TargetList* tlist = qdb_->getTargetList(module);
+ if (tlist) {
+ out() << "<table class=\"valuelist\"><tr valign=\"top\" class=\"odd\"><th class=\"tblConst\">Link to link...</th><th class=\"tblval\">In file...</th><th class=\"tbldscr\">Somewhere after line number...</th></tr>\n";
+ foreach (TargetLoc* t, *tlist) {
+ // e.g.: <a name="link-8421"></a><a href="layout.html">Layout Management</a>
+ out() << "<tr><td class=\"topAlign\">";
+ out() << "<a href=\"" << t->fileName_ << "#" << t->target_ << "\">";
+ out() << t->text_ << "</a></td>";
+ out() << "<td class=\"topAlign\">";
+ QString f = t->loc_->doc().location().filePath();
+ out() << f << "</td>";
+ out() << "<td class=\"topAlign\">";
+ out() << t->loc_->doc().location().lineNo() << "</td></tr>\n";
+ }
+ out() << "</table>\n";
+ }
+ generateFooter();
+ endSubPage();
+ return fileName;
+}
+
+/*!
+ This function writes an html file containing a list of
+ links to broken links that originate in the current
+ module and go nowwhere. It returns the name of the file
+ it generates, and it sets \a count to the number of
+ broken links that were found. The \a marker is used for
+ the same thing the marker is always used for.
+ */
+QString HtmlGenerator::generateLinksToBrokenLinksPage(CodeMarker* marker, int& count)
+{
+ QString fileName;
+ NamespaceNode* node = qdb_->primaryTreeRoot();
+ TargetList* tlist = qdb_->getTargetList("broken");
+ if (tlist && !tlist->isEmpty()) {
+ count = tlist->size();
+ fileName = "aaa-links-to-broken-links.html";
+ beginSubPage(node, fileName);
+ QString title = "Broken links in " + defaultModuleName();
+ generateHeader(title, node, marker);
+ generateTitle(title, Text(), SmallSubTitle, node, marker);
+ out() << "<p>This is a list of broken links in " << defaultModuleName() << ". ";
+ out() << "Click on a link to go to the broken link. ";
+ out() << "The link's target could not be found.</p>\n";
+ out() << "<table class=\"valuelist\"><tr valign=\"top\" class=\"odd\"><th class=\"tblConst\">Link to broken link...</th><th class=\"tblval\">In file...</th><th class=\"tbldscr\">Somewhere after line number...</th></tr>\n";
+ foreach (TargetLoc* t, *tlist) {
+ // e.g.: <a name="link-8421"></a><a href="layout.html">Layout Management</a>
+ out() << "<tr><td class=\"topAlign\">";
+ out() << "<a href=\"" << t->fileName_ << "#" << t->target_ << "\">";
+ out() << t->text_ << "</a></td>";
+ out() << "<td class=\"topAlign\">";
+ QString f = t->loc_->doc().location().filePath();
+ out() << f << "</td>";
+ out() << "<td class=\"topAlign\">";
+ out() << t->loc_->doc().location().lineNo() << "</td></tr>\n";
+ }
+ out() << "</table>\n";
+ generateFooter();
+ endSubPage();
+ }
+ return fileName;
+}
+
+/*!
Generate html from an instance of Atom.
*/
int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMarker *marker)
@@ -310,6 +476,7 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark
case Atom::AbstractRight:
break;
case Atom::AutoLink:
+ case Atom::NavAutoLink:
if (!inLink_ && !inContents_ && !inSectionHeading_) {
const Node *node = 0;
QString link = getAutoLink(atom, relative, &node);
@@ -321,9 +488,15 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark
if ((relative->parent() != node) && !relative->isObsolete())
link.clear();
}
- if (link.isEmpty())
+ if (link.isEmpty()) {
out() << protectEnc(atom->string());
+ }
else {
+ if (Generator::writeQaPages() && node && (atom->type() != Atom::NavAutoLink)) {
+ QString text = atom->string();
+ QString target = qdb_->getNewLinkTarget(relative, node, outFileName(), text);
+ out() << "<a id=\"" << Doc::canonicalTitle(target) << "\" class=\"qa-mark\"></a>";
+ }
beginLink(link, node, relative);
generateLink(atom, marker);
endLink();
@@ -806,14 +979,31 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark
out() << "<br/>";
break;
case Atom::Link:
+ case Atom::NavLink:
{
inObsoleteLink = false;
const Node *node = 0;
QString link = getLink(atom, relative, &node);
if (link.isEmpty() && (node != relative) && !noLinkErrors()) {
relative->doc().location().warning(tr("Can't link to '%1'").arg(atom->string()));
+ if (Generator::writeQaPages() && (atom->type() != Atom::NavAutoLink)) {
+ QString text = atom->next()->next()->string();
+ QString target = qdb_->getNewLinkTarget(relative, node, outFileName(), text, true);
+ out() << "<a id=\"" << Doc::canonicalTitle(target) << "\" class=\"qa-mark\"></a>";
+ }
}
else {
+ if (Generator::writeQaPages() && node && (atom->type() != Atom::NavLink)) {
+ QString text = atom->next()->next()->string();
+ QString target = qdb_->getNewLinkTarget(relative, node, outFileName(), text);
+ out() << "<a id=\"" << Doc::canonicalTitle(target) << "\" class=\"qa-mark\"></a>";
+ }
+ /*
+ mws saw this on 17/10/2014.
+ Is this correct? Setting node to 0 means the
+ following test always fails. Did we decide to
+ no longer warn about linking to obsolete things?
+ */
node = 0;
if (node && node->status() == Node::Obsolete) {
if ((relative->parent() != node) && !relative->isObsolete()) {
@@ -1126,6 +1316,8 @@ int HtmlGenerator::generateAtom(const Atom *atom, const Node *relative, CodeMark
break;
case Atom::TableOfContents:
break;
+ case Atom::Keyword:
+ break;
case Atom::Target:
out() << "<a name=\"" << Doc::canonicalTitle(atom->string()) << "\"></a>";
break;
@@ -1173,8 +1365,10 @@ void HtmlGenerator::generateClassLikeNode(InnerNode* inner, CodeMarker* marker)
subtitleText << "(" << Atom(Atom::AutoLink, fullTitle) << ")" << Atom(Atom::LineBreak);
generateHeader(title, inner, marker);
+
sections = marker->sections(inner, CodeMarker::Summary, CodeMarker::Okay);
generateTableOfContents(inner,marker,&sections);
+ generateKeywordAnchors(inner);
generateTitle(title, subtitleText, SmallSubTitle, inner, marker);
generateBrief(inner, marker);
generateRequisites(inner, marker);
@@ -1338,6 +1532,7 @@ void HtmlGenerator::generateClassLikeNode(InnerNode* inner, CodeMarker* marker)
*/
void HtmlGenerator::generateQmlTypePage(QmlClassNode* qcn, CodeMarker* marker)
{
+ Generator::setQmlTypeContext(qcn);
SubTitleSize subTitleSize = LargeSubTitle;
QList<Section>::const_iterator s;
QString htmlTitle = qcn->fullTitle() + " QML Type";
@@ -1346,6 +1541,7 @@ void HtmlGenerator::generateQmlTypePage(QmlClassNode* qcn, CodeMarker* marker)
QList<Section> sections = marker->qmlSections(qcn, CodeMarker::Summary);
generateTableOfContents(qcn, marker, &sections);
marker = CodeMarker::markerForLanguage(QLatin1String("QML"));
+ generateKeywordAnchors(qcn);
generateTitle(htmlTitle, Text() << qcn->subTitle(), subTitleSize, qcn, marker);
generateBrief(qcn, marker);
generateQmlRequisites(qcn, marker);
@@ -1400,6 +1596,7 @@ void HtmlGenerator::generateQmlTypePage(QmlClassNode* qcn, CodeMarker* marker)
++s;
}
generateFooter(qcn);
+ Generator::setQmlTypeContext(0);
}
/*!
@@ -1417,6 +1614,7 @@ void HtmlGenerator::generateQmlBasicTypePage(QmlBasicTypeNode* qbtn, CodeMarker*
generateHeader(htmlTitle, qbtn, marker);
QList<Section> sections = marker->sections(qbtn, CodeMarker::Summary, CodeMarker::Okay);
generateTableOfContents(qbtn,marker,&sections);
+ generateKeywordAnchors(qbtn);
generateTitle(htmlTitle,
Text() << qbtn->subTitle(),
subTitleSize,
@@ -1462,6 +1660,7 @@ void HtmlGenerator::generateDocNode(DocNode* dn, CodeMarker* marker)
if ((dn->name() != QStringLiteral("index.html")))
generateTableOfContents(dn,marker,0);
+ generateKeywordAnchors(dn);
generateTitle(fullTitle,
Text() << dn->subTitle(),
subTitleSize,
@@ -1546,6 +1745,7 @@ void HtmlGenerator::generateCollectionNode(CollectionNode* cn, CodeMarker* marke
generateHeader(fullTitle, cn, marker);
generateTableOfContents(cn,marker,0);
+ generateKeywordAnchors(cn);
generateTitle(fullTitle, Text() << cn->subTitle(), subTitleSize, cn, marker);
if (cn->isModule()) {
@@ -1646,11 +1846,11 @@ void HtmlGenerator::generateNavigationBar(const QString &title,
return;
if (!homepage.isEmpty())
navigationbar << Atom(Atom::ListItemLeft)
- << Atom(Atom::AutoLink, homepage)
+ << Atom(Atom::NavAutoLink, homepage)
<< Atom(Atom::ListItemRight);
if (!landingpage.isEmpty() && landingpage != title)
navigationbar << Atom(Atom::ListItemLeft)
- << Atom(Atom::AutoLink, landingpage)
+ << Atom(Atom::NavAutoLink, landingpage)
<< Atom(Atom::ListItemRight);
if (node->isClass()) {
@@ -1659,7 +1859,7 @@ void HtmlGenerator::generateNavigationBar(const QString &title,
if (!cppclassespage.isEmpty())
navigationbar << Atom(Atom::ListItemLeft)
- << Atom(Atom::Link, cppclassespage)
+ << Atom(Atom::NavLink, cppclassespage)
<< Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
<< Atom(Atom::String, QLatin1String("C++ Classes"))
<< Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK)
@@ -1673,7 +1873,7 @@ void HtmlGenerator::generateNavigationBar(const QString &title,
else if (node->isQmlType() || node->isQmlBasicType()) {
if (!qmltypespage.isEmpty())
navigationbar << Atom(Atom::ListItemLeft)
- << Atom(Atom::Link, qmltypespage)
+ << Atom(Atom::NavLink, qmltypespage)
<< Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
<< Atom(Atom::String, QLatin1String("QML Types"))
<< Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK)
@@ -1685,7 +1885,7 @@ void HtmlGenerator::generateNavigationBar(const QString &title,
else {
if (node->isExampleFile()) {
navigationbar << Atom(Atom::ListItemLeft)
- << Atom(Atom::Link, node->parent()->name())
+ << Atom(Atom::NavLink, node->parent()->name())
<< Atom(Atom::FormattingLeft, ATOM_FORMATTING_LINK)
<< Atom(Atom::String, node->parent()->title())
<< Atom(Atom::FormattingRight, ATOM_FORMATTING_LINK)
@@ -2329,7 +2529,7 @@ QString HtmlGenerator::generateListOfAllMemberFile(const InnerNode *inner,
out() << ", including inherited members.</p>\n";
Section section = sections.first();
- generateSectionList(section, 0, marker, CodeMarker::Subpage);
+ generateSectionList(section, inner, marker, CodeMarker::Subpage);
generateFooter();
endSubPage();
@@ -2386,7 +2586,7 @@ QString HtmlGenerator::generateAllQmlMembersFile(QmlClassNode* qml_cn, CodeMarke
prefix = keys.at(j).mid(1);
prefix = prefix.left(keys.at(j).indexOf("::")+1);
}
- generateQmlItem(nodes[j], qcn, marker, true);
+ generateQmlItem(nodes[j], qml_cn, marker, true);
if (nodes[j]->isAttached())
out() << " [attached]";
//generateSynopsis(nodes[j], qcn, marker, CodeMarker::Subpage, false, &prefix);
@@ -2815,8 +3015,9 @@ void HtmlGenerator::generateCompactList(ListType listType,
else if (listType == Obsolete) {
QString fileName = fileBase(it.value()) + "-obsolete." + fileExtension();
QString link;
- if (useOutputSubdirs())
+ if (useOutputSubdirs()) {
link = QString("../" + it.value()->outputSubdirectory() + QLatin1Char('/'));
+ }
link += fileName;
out() << "<a href=\"" << link << "\">";
}
@@ -2856,7 +3057,7 @@ void HtmlGenerator::generateFunctionIndex(const Node *relative)
char currentLetter;
out() << "<ul>\n";
- NodeMapMap funcIndex = qdb_->getFunctionIndex();
+ NodeMapMap& funcIndex = qdb_->getFunctionIndex();
QMap<QString, NodeMap >::ConstIterator f = funcIndex.constBegin();
while (f != funcIndex.constEnd()) {
out() << "<li>";
@@ -3675,34 +3876,7 @@ QString HtmlGenerator::getLink(const Atom *atom, const Node *relative, const Nod
if (t.startsWith("mailto:"))
return t;
}
-
- QString ref;
-
- *node = qdb_->findNodeForAtom(atom, relative, ref);
- if (!(*node))
- return QString();
-
- QString url = (*node)->url();
- if (!url.isEmpty()) {
- if (ref.isEmpty())
- return url;
- int hashtag = url.lastIndexOf(QChar('#'));
- if (hashtag != -1)
- url.truncate(hashtag);
- return url + "#" + ref;
- }
- /*
- Given that *node is not null, we now cconstruct a link
- to the page that *node represents, and then if we found
- a target on that page, we connect the target to the link
- with '#'.
- */
- QString link = linkForNode(*node, relative);
- if (*node && (*node)->subType() == Node::Image)
- link = "images/used-in-examples/" + link;
- if (!ref.isEmpty())
- link += QLatin1Char('#') + ref;
- return link;
+ return getAutoLink(atom, relative, node);
}
/*!
@@ -3720,29 +3894,29 @@ QString HtmlGenerator::getLink(const Atom *atom, const Node *relative, const Nod
QString HtmlGenerator::getAutoLink(const Atom *atom, const Node *relative, const Node** node)
{
QString ref;
- QString link;
*node = qdb_->findNodeForAtom(atom, relative, ref);
- if (!(*node))
+ if (!(*node)) {
return QString();
+ }
- QString url = (*node)->url();
- if (!url.isEmpty()) {
- if (ref.isEmpty())
- return url;
- int hashtag = url.lastIndexOf(QChar('#'));
+ QString link = (*node)->url();
+ if (link.isEmpty()) {
+ link = linkForNode(*node, relative);
+ if ((*node)->subType() == Node::Image)
+ link = "images/used-in-examples/" + link;
+ if (!ref.isEmpty())
+ link += QLatin1Char('#') + ref;
+ }
+ else if (!ref.isEmpty()) {
+ int hashtag = link.lastIndexOf(QChar('#'));
if (hashtag != -1)
- url.truncate(hashtag);
- return url + "#" + ref;
+ link.truncate(hashtag);
+ link += "#" + ref;
}
-
- link = linkForNode(*node, relative);
- if (!ref.isEmpty())
- link += QLatin1Char('#') + ref;
return link;
}
-
/*!
Construct the link string for the \a node and return it.
The \a relative node is use to decide the link we are
@@ -3762,21 +3936,9 @@ QString HtmlGenerator::linkForNode(const Node *node, const Node *relative)
return QString();
QString fn = fileName(node);
- if (node && relative && node->parent() != relative) {
- if (node->parent()->isQmlType() && relative->isQmlType()) {
- if (node->parent()->isAbstract()) {
- /*
- This is a bit of a hack. What we discover with
- the three 'if' statements immediately above,
- is that node's parent is marked \qmlabstract
- but the link appears in a qdoc comment for a
- subclass of the node's parent. This means the
- link should refer to the file for the relative
- node, not the file for node.
- */
- fn = fileName(relative);
- }
- }
+ if (node && node->parent() && node->parent()->isQmlType() && node->parent()->isAbstract()) {
+ if (Generator::qmlTypeContext())
+ fn = fileName(Generator::qmlTypeContext());
}
QString link = fn;
@@ -3797,7 +3959,12 @@ QString HtmlGenerator::linkForNode(const Node *node, const Node *relative)
if (node && relative && (node != relative)) {
if (useOutputSubdirs() && !node->isExternalPage() &&
node->outputSubdirectory() != relative->outputSubdirectory()) {
- link.prepend(QString("../" + node->outputSubdirectory() + QLatin1Char('/')));
+ if (link.startsWith(QString(node->outputSubdirectory() + QLatin1Char('/')))) {
+ link.prepend(QString("../"));
+ }
+ else {
+ link.prepend(QString("../" + node->outputSubdirectory() + QLatin1Char('/')));
+ }
}
}
return link;
@@ -3835,6 +4002,7 @@ void HtmlGenerator::generateDetailedMember(const Node *node,
generateMacRef(node, marker);
#endif
generateExtractionMark(node, MemberMark);
+ generateKeywordAnchors(node);
QString nodeRef = refForNode(node);
if (node->type() == Node::Enum
&& (enume = static_cast<const EnumNode *>(node))->flagsType()) {
@@ -4071,6 +4239,7 @@ void HtmlGenerator::generateDetailedQmlMember(Node *node,
generateMacRef(node, marker);
#endif
generateExtractionMark(node, MemberMark);
+ generateKeywordAnchors(node);
out() << "<div class=\"qmlitem\">";
QString nodeRef = refForNode(node);
if (node->type() == Node::QmlPropertyGroup) {
@@ -4524,6 +4693,9 @@ void HtmlGenerator::generateManifestFile(QString manifest, QString element)
Reads metacontent - additional attributes and tags to apply
when generating manifest files, read from config. Takes the
configuration class \a config as a parameter.
+
+ The manifest metacontent map is cleared immediately after
+ the manifest files have been generated.
*/
void HtmlGenerator::readManifestMetaContent(const Config &config)
{
diff --git a/src/tools/qdoc/htmlgenerator.h b/src/tools/qdoc/htmlgenerator.h
index 40360da02e..4d93822db1 100644
--- a/src/tools/qdoc/htmlgenerator.h
+++ b/src/tools/qdoc/htmlgenerator.h
@@ -77,10 +77,10 @@ public:
HtmlGenerator();
~HtmlGenerator();
- virtual void initializeGenerator(const Config& config);
- virtual void terminateGenerator();
- virtual QString format();
- virtual void generateDocs();
+ virtual void initializeGenerator(const Config& config) Q_DECL_OVERRIDE;
+ virtual void terminateGenerator() Q_DECL_OVERRIDE;
+ virtual QString format() Q_DECL_OVERRIDE;
+ virtual void generateDocs() Q_DECL_OVERRIDE;
void generateManifestFiles();
QString protectEnc(const QString &string);
@@ -89,20 +89,24 @@ public:
static QString sinceTitle(int i) { return sinceTitles[i]; }
protected:
+ virtual void generateQAPage() Q_DECL_OVERRIDE;
+ QString generateLinksToLinksPage(const QString& module, CodeMarker* marker);
+ QString generateLinksToBrokenLinksPage(CodeMarker* marker, int& count);
virtual int generateAtom(const Atom *atom,
const Node *relative,
- CodeMarker *marker);
- virtual void generateClassLikeNode(InnerNode* inner, CodeMarker* marker);
- virtual void generateQmlTypePage(QmlClassNode* qcn, CodeMarker* marker);
- virtual void generateQmlBasicTypePage(QmlBasicTypeNode* qbtn, CodeMarker* marker);
- virtual void generateDocNode(DocNode* dn, CodeMarker* marker);
- virtual void generateCollectionNode(CollectionNode* cn, CodeMarker* marker);
- virtual QString fileExtension() const;
+ CodeMarker *marker) Q_DECL_OVERRIDE;
+ virtual void generateClassLikeNode(InnerNode* inner, CodeMarker* marker) Q_DECL_OVERRIDE;
+ virtual void generateQmlTypePage(QmlClassNode* qcn, CodeMarker* marker) Q_DECL_OVERRIDE;
+ virtual void generateQmlBasicTypePage(QmlBasicTypeNode* qbtn, CodeMarker* marker) Q_DECL_OVERRIDE;
+ virtual void generateDocNode(DocNode* dn, CodeMarker* marker) Q_DECL_OVERRIDE;
+ virtual void generateCollectionNode(CollectionNode* cn, CodeMarker* marker) Q_DECL_OVERRIDE;
+ virtual QString fileExtension() const Q_DECL_OVERRIDE;
virtual QString refForNode(const Node *node);
virtual QString linkForNode(const Node *node, const Node *relative);
void generateManifestFile(QString manifest, QString element);
void readManifestMetaContent(const Config &config);
+ void generateKeywordAnchors(const Node* node);
private:
enum SubTitleSize { SmallSubTitle, LargeSubTitle };
@@ -179,7 +183,7 @@ private:
void generateDetailedQmlMember(Node *node,
const InnerNode *relative,
CodeMarker *marker);
- void generateQmlInherits(QmlClassNode* qcn, CodeMarker* marker);
+ void generateQmlInherits(QmlClassNode* qcn, CodeMarker* marker) Q_DECL_OVERRIDE;
void generateQmlInstantiates(QmlClassNode* qcn, CodeMarker* marker);
void generateInstantiatedBy(ClassNode* cn, CodeMarker* marker);
@@ -210,7 +214,7 @@ private:
QString getAutoLink(const Atom *atom, const Node *relative, const Node** node);
QString registerRef(const QString& ref);
- virtual QString fileBase(const Node *node) const;
+ virtual QString fileBase(const Node *node) const Q_DECL_OVERRIDE;
QString fileName(const Node *node);
static int hOffset(const Node *node);
static bool isThreeColumnEnumValueTable(const Atom *atom);
diff --git a/src/tools/qdoc/jscodemarker.h b/src/tools/qdoc/jscodemarker.h
index 52fe8855af..70bf38d67d 100644
--- a/src/tools/qdoc/jscodemarker.h
+++ b/src/tools/qdoc/jscodemarker.h
@@ -50,14 +50,14 @@ public:
JsCodeMarker();
~JsCodeMarker();
- virtual bool recognizeCode(const QString &code);
- virtual bool recognizeExtension(const QString &ext);
- virtual bool recognizeLanguage(const QString &language);
- virtual Atom::Type atomType() const;
+ virtual bool recognizeCode(const QString &code) Q_DECL_OVERRIDE;
+ virtual bool recognizeExtension(const QString &ext) Q_DECL_OVERRIDE;
+ virtual bool recognizeLanguage(const QString &language) Q_DECL_OVERRIDE;
+ virtual Atom::Type atomType() const Q_DECL_OVERRIDE;
virtual QString markedUpCode(const QString &code,
const Node *relative,
- const Location &location);
+ const Location &location) Q_DECL_OVERRIDE;
private:
QString addMarkUp(const QString &code, const Node *relative,
diff --git a/src/tools/qdoc/location.cpp b/src/tools/qdoc/location.cpp
index 040dd0cd88..923901fc34 100644
--- a/src/tools/qdoc/location.cpp
+++ b/src/tools/qdoc/location.cpp
@@ -256,7 +256,7 @@ QString Location::canonicalRelativePath(const QString &path)
*/
void Location::warning(const QString& message, const QString& details) const
{
- if (!Generator::runPrepareOnly())
+ if (!Generator::preparing())
emitMessage(Warning, message, details);
}
@@ -267,7 +267,7 @@ void Location::warning(const QString& message, const QString& details) const
*/
void Location::error(const QString& message, const QString& details) const
{
- if (!Generator::runPrepareOnly())
+ if (!Generator::preparing())
emitMessage(Error, message, details);
}
@@ -286,6 +286,15 @@ void Location::fatal(const QString& message, const QString& details) const
}
/*!
+ Writes \a message and \a detals to stderr as a formatted
+ report message.
+ */
+void Location::report(const QString& message, const QString& details) const
+{
+ emitMessage(Report, message, details);
+}
+
+/*!
Gets several parameters from the \a config, including
tab size, program name, and a regular expression that
appears to be used for matching certain error messages
@@ -371,7 +380,8 @@ void Location::emitMessage(MessageType type,
result.prepend(tr(": error: "));
else if (type == Warning)
result.prepend(tr(": warning: "));
- result.prepend(toString());
+ if (type != Report)
+ result.prepend(toString());
fprintf(stderr, "%s\n", result.toLatin1().data());
fflush(stderr);
}
diff --git a/src/tools/qdoc/location.h b/src/tools/qdoc/location.h
index eb4dbbae98..b6589fd6ab 100644
--- a/src/tools/qdoc/location.h
+++ b/src/tools/qdoc/location.h
@@ -81,6 +81,8 @@ public:
const QString& details = QString()) const;
void fatal(const QString& message,
const QString& details = QString()) const;
+ void report(const QString& message,
+ const QString& details = QString()) const;
static const Location null;
@@ -94,7 +96,7 @@ public:
static QString canonicalRelativePath(const QString &path);
private:
- enum MessageType { Warning, Error };
+ enum MessageType { Warning, Error, Report };
struct StackEntry
{
diff --git a/src/tools/qdoc/main.cpp b/src/tools/qdoc/main.cpp
index 118c206f16..186fd3195b 100644
--- a/src/tools/qdoc/main.cpp
+++ b/src/tools/qdoc/main.cpp
@@ -63,7 +63,6 @@
QT_BEGIN_NAMESPACE
-
bool creationTimeBefore(const QFileInfo &fi1, const QFileInfo &fi2)
{
return fi1.lastModified() < fi2.lastModified();
@@ -71,6 +70,8 @@ bool creationTimeBefore(const QFileInfo &fi1, const QFileInfo &fi2)
static bool highlighting = false;
static bool showInternal = false;
+static bool singleExec = false;
+static bool writeQaPages = false;
static bool redirectDocumentationToDevNull = false;
static bool noLinkErrors = false;
static bool autolinkErrors = false;
@@ -80,14 +81,22 @@ static QStringList dependModules;
static QStringList indexDirs;
static QString currentDir;
static QString prevCurrentDir;
+static QHash<QString,QString> defaults;
+#ifndef QT_NO_TRANSLATION
+typedef QPair<QString, QTranslator*> Translator;
+static QList<Translator> translators;
+#endif
-
+/*!
+ Read some XML indexes containing definitions from other
+ documentation sets. \a config contains a variable that
+ lists directories where index files can bge found. It also
+ contains the \c depends variable, which lists the modules
+ that the current module depends on.
+*/
static void loadIndexFiles(Config& config)
{
QDocDatabase* qdb = QDocDatabase::qdocDB();
- /*
- Read some XML indexes containing definitions from other documentation sets.
- */
QStringList indexFiles;
QStringList configIndexes = config.getStringList(CONFIG_INDEXES);
foreach (const QString &index, configIndexes) {
@@ -194,35 +203,17 @@ static void loadIndexFiles(Config& config)
*/
static void processQdocconfFile(const QString &fileName)
{
-#ifndef QT_NO_TRANSLATION
- QList<QTranslator *> translators;
-#endif
-
/*
The Config instance represents the configuration data for qdoc.
- All the other classes are initialized with the config. Here we
+ All the other classes are initialized with the config. Below, we
initialize the configuration with some default values.
- */
- Config config(QCoreApplication::translate("QDoc", "qdoc"));
- /*
- The default indent for code is 4.
- The default value for false is 0.
- The default supported file extensions are cpp, h, qdoc and qml.
- The default language is c++.
- The default output format is html.
- The default tab size is 8.
- And those are all the default values for configuration variables.
+ I don't think the call to translate() does anything here. For one
+ thing, the translators haven't been installed at this point. And
+ I doubt any translator would translate QDoc anyway. But I left it
+ here because it does no harm.
*/
- static QHash<QString,QString> defaults;
- if (defaults.isEmpty()) {
- defaults.insert(CONFIG_CODEINDENT, QLatin1String("4"));
- defaults.insert(CONFIG_FALSEHOODS, QLatin1String("0"));
- defaults.insert(CONFIG_FILEEXTENSIONS, QLatin1String("*.cpp *.h *.qdoc *.qml"));
- defaults.insert(CONFIG_LANGUAGE, QLatin1String("Cpp"));
- defaults.insert(CONFIG_OUTPUTFORMATS, QLatin1String("HTML"));
- defaults.insert(CONFIG_TABSIZE, QLatin1String("8"));
- }
+ Config config(QCoreApplication::translate("QDoc", "qdoc"));
QHash<QString,QString>::iterator iter;
for (iter = defaults.begin(); iter != defaults.end(); ++iter)
@@ -230,6 +221,8 @@ static void processQdocconfFile(const QString &fileName)
config.setStringList(CONFIG_SYNTAXHIGHLIGHTING, QStringList(highlighting ? "true" : "false"));
config.setStringList(CONFIG_SHOWINTERNAL, QStringList(showInternal ? "true" : "false"));
+ config.setStringList(CONFIG_SINGLEEXEC, QStringList(singleExec ? "true" : "false"));
+ config.setStringList(CONFIG_WRITEQAPAGES, QStringList(writeQaPages ? "true" : "false"));
config.setStringList(CONFIG_REDIRECTDOCUMENTATIONTODEVNULL, QStringList(redirectDocumentationToDevNull ? "true" : "false"));
config.setStringList(CONFIG_NOLINKERRORS, QStringList(noLinkErrors ? "true" : "false"));
config.setStringList(CONFIG_AUTOLINKERRORS, QStringList(autolinkErrors ? "true" : "false"));
@@ -247,8 +240,8 @@ static void processQdocconfFile(const QString &fileName)
currentDir = QFileInfo(fileName).path();
Location::initialize(config);
config.load(fileName);
- QString project = config.getString(CONFIG_PROJECT).toLower();
- //qDebug() << "\nStart project:" << project;
+ QString project = config.getString(CONFIG_PROJECT);
+ //qDebug() << "Start project:" << project;
/*
Add the defines to the configuration variables.
*/
@@ -261,17 +254,24 @@ static void processQdocconfFile(const QString &fileName)
if (!currentDir.isEmpty())
QDir::setCurrent(currentDir);
- QString phase;
- if (Generator::runPrepareOnly())
- phase = " in -prepare mode ";
- else if (Generator::runGenerateOnly())
- phase = " in -generate mode ";
+ QString phase = " in -";
+ if (Generator::singleExec())
+ phase += "single exec mode, ";
+ else
+ phase += "separate exec mode, ";
+ if (Generator::preparing())
+ phase += "prepare phase ";
+ else if (Generator::generating())
+ phase += "generate phase ";
QString msg = "Running qdoc for " + config.getString(CONFIG_PROJECT) + phase;
Location::logToStdErr(msg);
/*
Initialize all the classes and data structures with the
- qdoc configuration.
+ qdoc configuration. This is safe to do for each qdocconf
+ file processed, because all the data structures created
+ are either cleared after they have been used, or they
+ are cleared in the terminate() functions below.
*/
Location::initialize(config);
Tokenizer::initialize(config);
@@ -282,16 +282,32 @@ static void processQdocconfFile(const QString &fileName)
#ifndef QT_NO_TRANSLATION
/*
- Load the language translators, if the configuration specifies any.
+ Load the language translators, if the configuration specifies any,
+ but only if they haven't already been loaded. This works in both
+ -prepare/-generate mode and -singleexec mode.
*/
QStringList fileNames = config.getStringList(CONFIG_TRANSLATORS);
QStringList::ConstIterator fn = fileNames.constBegin();
while (fn != fileNames.constEnd()) {
- QTranslator *translator = new QTranslator(0);
- if (!translator->load(*fn))
- config.lastLocation().error(QCoreApplication::translate("QDoc", "Cannot load translator '%1'").arg(*fn));
- QCoreApplication::instance()->installTranslator(translator);
- translators.append(translator);
+ bool found = false;
+ if (!translators.isEmpty()) {
+ for (int i=0; i<translators.size(); ++i) {
+ if (translators.at(i).first == *fn) {
+ found = true;
+ break;
+ }
+ }
+ }
+ if (!found) {
+ QTranslator *translator = new QTranslator(0);
+ if (!translator->load(*fn)) {
+ config.lastLocation().error(QCoreApplication::translate("QDoc", "Cannot load translator '%1'").arg(*fn));
+ }
+ else {
+ QCoreApplication::instance()->installTranslator(translator);
+ translators.append(Translator(*fn, translator));
+ }
+ }
++fn;
}
#endif
@@ -311,175 +327,228 @@ static void processQdocconfFile(const QString &fileName)
will be stored. The database includes a tree of nodes, which gets
built as the source files are parsed. The documentation output is
generated by traversing that tree.
+
+ Note: qdocDB() allocates a new instance only if no instance exists.
+ So it is safe to call qdocDB() any time.
*/
QDocDatabase* qdb = QDocDatabase::qdocDB();
qdb->setVersion(config.getString(CONFIG_VERSION));
qdb->setShowInternal(config.getBool(CONFIG_SHOWINTERNAL));
+ qdb->setSingleExec(config.getBool(CONFIG_SINGLEEXEC));
/*
By default, the only output format is HTML.
*/
QSet<QString> outputFormats = config.getOutputFormats();
Location outputFormatsLocation = config.lastLocation();
- //if (!Generator::runPrepareOnly())
- Generator::debug(" loading index files");
- loadIndexFiles(config);
- qdb->newPrimaryTree(config.getString(CONFIG_PROJECT));
- qdb->setSearchOrder();
- Generator::debug(" done loading index files");
+ qdb->clearSearchOrder();
+ QString p = config.getString(CONFIG_PROJECT).toLower();
+ if (!Generator::singleExec()) {
+ Generator::debug(" loading index files");
+ loadIndexFiles(config);
+ Generator::debug(" done loading index files");
+ qdb->newPrimaryTree(p);
+ }
+ else if (Generator::preparing())
+ qdb->newPrimaryTree(p);
+ else
+ qdb->setPrimaryTree(p);
+
+ dependModules = config.getStringList(CONFIG_DEPENDS);
+ dependModules.removeDuplicates();
+ qdb->setSearchOrder(dependModules);
QSet<QString> excludedDirs;
QSet<QString> excludedFiles;
- QStringList headerList;
- QStringList sourceList;
QStringList excludedDirsList;
QStringList excludedFilesList;
- Generator::debug("Reading excludedirs");
- excludedDirsList = config.getCanonicalPathList(CONFIG_EXCLUDEDIRS);
- foreach (const QString &excludeDir, excludedDirsList) {
- QString p = QDir::fromNativeSeparators(excludeDir);
- QDir tmp(p);
- if (tmp.exists())
- excludedDirs.insert(p);
- }
+ if (!Generator::singleExec() || !Generator::generating()) {
+ QStringList headerList;
+ QStringList sourceList;
+
+ Generator::debug("Reading excludedirs");
+ excludedDirsList = config.getCanonicalPathList(CONFIG_EXCLUDEDIRS);
+ foreach (const QString &excludeDir, excludedDirsList) {
+ QString p = QDir::fromNativeSeparators(excludeDir);
+ QDir tmp(p);
+ if (tmp.exists())
+ excludedDirs.insert(p);
+ }
- Generator::debug("Reading excludefiles");
- excludedFilesList = config.getCanonicalPathList(CONFIG_EXCLUDEFILES);
- foreach (const QString& excludeFile, excludedFilesList) {
- QString p = QDir::fromNativeSeparators(excludeFile);
- excludedFiles.insert(p);
- }
+ Generator::debug("Reading excludefiles");
+ excludedFilesList = config.getCanonicalPathList(CONFIG_EXCLUDEFILES);
+ foreach (const QString& excludeFile, excludedFilesList) {
+ QString p = QDir::fromNativeSeparators(excludeFile);
+ excludedFiles.insert(p);
+ }
- Generator::debug("Reading headerdirs");
- headerList = config.getAllFiles(CONFIG_HEADERS,CONFIG_HEADERDIRS,excludedDirs,excludedFiles);
- QMap<QString,QString> headers;
- QMultiMap<QString,QString> headerFileNames;
- for (int i=0; i<headerList.size(); ++i) {
- if (headerList[i].contains(QString("doc/snippets")))
- continue;
- if (headers.contains(headerList[i]))
- continue;
- headers.insert(headerList[i],headerList[i]);
- QString t = headerList[i].mid(headerList[i].lastIndexOf('/')+1);
- headerFileNames.insert(t,t);
- }
+ Generator::debug("Reading headerdirs");
+ headerList = config.getAllFiles(CONFIG_HEADERS,CONFIG_HEADERDIRS,excludedDirs,excludedFiles);
+ QMap<QString,QString> headers;
+ QMultiMap<QString,QString> headerFileNames;
+ for (int i=0; i<headerList.size(); ++i) {
+ if (headerList[i].contains(QString("doc/snippets")))
+ continue;
+ if (headers.contains(headerList[i]))
+ continue;
+ headers.insert(headerList[i],headerList[i]);
+ QString t = headerList[i].mid(headerList[i].lastIndexOf('/')+1);
+ headerFileNames.insert(t,t);
+ }
- Generator::debug("Reading sourcedirs");
- sourceList = config.getAllFiles(CONFIG_SOURCES,CONFIG_SOURCEDIRS,excludedDirs,excludedFiles);
- QMap<QString,QString> sources;
- QMultiMap<QString,QString> sourceFileNames;
- for (int i=0; i<sourceList.size(); ++i) {
- if (sourceList[i].contains(QString("doc/snippets")))
- continue;
- if (sources.contains(sourceList[i]))
- continue;
- sources.insert(sourceList[i],sourceList[i]);
- QString t = sourceList[i].mid(sourceList[i].lastIndexOf('/')+1);
- sourceFileNames.insert(t,t);
- }
- /*
- Find all the qdoc files in the example dirs, and add
- them to the source files to be parsed.
- */
- Generator::debug("Reading exampledirs");
- QStringList exampleQdocList = config.getExampleQdocFiles(excludedDirs, excludedFiles);
- for (int i=0; i<exampleQdocList.size(); ++i) {
- if (!sources.contains(exampleQdocList[i])) {
- sources.insert(exampleQdocList[i],exampleQdocList[i]);
- QString t = exampleQdocList[i].mid(exampleQdocList[i].lastIndexOf('/')+1);
+ Generator::debug("Reading sourcedirs");
+ sourceList = config.getAllFiles(CONFIG_SOURCES,CONFIG_SOURCEDIRS,excludedDirs,excludedFiles);
+ QMap<QString,QString> sources;
+ QMultiMap<QString,QString> sourceFileNames;
+ for (int i=0; i<sourceList.size(); ++i) {
+ if (sourceList[i].contains(QString("doc/snippets")))
+ continue;
+ if (sources.contains(sourceList[i]))
+ continue;
+ sources.insert(sourceList[i],sourceList[i]);
+ QString t = sourceList[i].mid(sourceList[i].lastIndexOf('/')+1);
sourceFileNames.insert(t,t);
}
- }
+ /*
+ Find all the qdoc files in the example dirs, and add
+ them to the source files to be parsed.
+ */
+ Generator::debug("Reading exampledirs");
+ QStringList exampleQdocList = config.getExampleQdocFiles(excludedDirs, excludedFiles);
+ for (int i=0; i<exampleQdocList.size(); ++i) {
+ if (!sources.contains(exampleQdocList[i])) {
+ sources.insert(exampleQdocList[i],exampleQdocList[i]);
+ QString t = exampleQdocList[i].mid(exampleQdocList[i].lastIndexOf('/')+1);
+ sourceFileNames.insert(t,t);
+ }
+ }
- Generator::debug("Adding doc/image dirs found in exampledirs to imagedirs");
- QSet<QString> exampleImageDirs;
- QStringList exampleImageList = config.getExampleImageFiles(excludedDirs, excludedFiles);
- for (int i=0; i<exampleImageList.size(); ++i) {
- if (exampleImageList[i].contains("doc/images")) {
- QString t = exampleImageList[i].left(exampleImageList[i].lastIndexOf("doc/images")+10);
- if (!exampleImageDirs.contains(t)) {
- exampleImageDirs.insert(t);
+ Generator::debug("Adding doc/image dirs found in exampledirs to imagedirs");
+ QSet<QString> exampleImageDirs;
+ QStringList exampleImageList = config.getExampleImageFiles(excludedDirs, excludedFiles);
+ for (int i=0; i<exampleImageList.size(); ++i) {
+ if (exampleImageList[i].contains("doc/images")) {
+ QString t = exampleImageList[i].left(exampleImageList[i].lastIndexOf("doc/images")+10);
+ if (!exampleImageDirs.contains(t)) {
+ exampleImageDirs.insert(t);
+ }
}
}
- }
- Generator::augmentImageDirs(exampleImageDirs);
+ Generator::augmentImageDirs(exampleImageDirs);
+
+ /*
+ Parse each header file in the set using the appropriate parser and add it
+ to the big tree.
+ */
+ QSet<CodeParser *> usedParsers;
+
+ Generator::debug("Parsing header files");
+ int parsed = 0;
+ QMap<QString,QString>::ConstIterator h = headers.constBegin();
+ while (h != headers.constEnd()) {
+ CodeParser *codeParser = CodeParser::parserForHeaderFile(h.key());
+ if (codeParser) {
+ ++parsed;
+ Generator::debug(QString("Parsing " + h.key()));
+ codeParser->parseHeaderFile(config.location(), h.key());
+ usedParsers.insert(codeParser);
+ }
+ ++h;
+ }
- /*
- Parse each header file in the set using the appropriate parser and add it
- to the big tree.
- */
- QSet<CodeParser *> usedParsers;
-
- Generator::debug("Parsing header files");
- int parsed = 0;
- QMap<QString,QString>::ConstIterator h = headers.constBegin();
- while (h != headers.constEnd()) {
- CodeParser *codeParser = CodeParser::parserForHeaderFile(h.key());
- if (codeParser) {
- ++parsed;
- Generator::debug(QString("Parsing " + h.key()));
- codeParser->parseHeaderFile(config.location(), h.key());
- usedParsers.insert(codeParser);
+ foreach (CodeParser *codeParser, usedParsers)
+ codeParser->doneParsingHeaderFiles();
+
+ usedParsers.clear();
+ qdb->resolveInheritance();
+
+ /*
+ Parse each source text file in the set using the appropriate parser and
+ add it to the big tree.
+ */
+ parsed = 0;
+ Generator::debug("Parsing source files");
+ QMap<QString,QString>::ConstIterator s = sources.constBegin();
+ while (s != sources.constEnd()) {
+ CodeParser *codeParser = CodeParser::parserForSourceFile(s.key());
+ if (codeParser) {
+ ++parsed;
+ Generator::debug(QString("Parsing " + s.key()));
+ codeParser->parseSourceFile(config.location(), s.key());
+ usedParsers.insert(codeParser);
+ }
+ ++s;
}
- ++h;
+ Generator::debug(QString("Parsing done."));
+
+ foreach (CodeParser *codeParser, usedParsers)
+ codeParser->doneParsingSourceFiles();
+
+ /*
+ Now the primary tree has been built from all the header and
+ source files. Resolve all the class names, function names,
+ targets, URLs, links, and other stuff that needs resolving.
+ */
+ Generator::debug("Resolving stuff prior to generating docs");
+ qdb->resolveIssues();
}
+ else {
+ Generator::debug("Reading excludedirs");
+ excludedDirsList = config.getCanonicalPathList(CONFIG_EXCLUDEDIRS);
+ foreach (const QString &excludeDir, excludedDirsList) {
+ QString p = QDir::fromNativeSeparators(excludeDir);
+ QDir tmp(p);
+ if (tmp.exists())
+ excludedDirs.insert(p);
+ }
- foreach (CodeParser *codeParser, usedParsers)
- codeParser->doneParsingHeaderFiles();
-
- usedParsers.clear();
- qdb->resolveInheritance();
+ Generator::debug("Reading excludefiles");
+ excludedFilesList = config.getCanonicalPathList(CONFIG_EXCLUDEFILES);
+ foreach (const QString& excludeFile, excludedFilesList) {
+ QString p = QDir::fromNativeSeparators(excludeFile);
+ excludedFiles.insert(p);
+ }
- /*
- Parse each source text file in the set using the appropriate parser and
- add it to the big tree.
- */
- parsed = 0;
- Generator::debug("Parsing source files");
- QMap<QString,QString>::ConstIterator s = sources.constBegin();
- while (s != sources.constEnd()) {
- CodeParser *codeParser = CodeParser::parserForSourceFile(s.key());
- if (codeParser) {
- ++parsed;
- Generator::debug(QString("Parsing " + s.key()));
- codeParser->parseSourceFile(config.location(), s.key());
- usedParsers.insert(codeParser);
+ Generator::debug("Adding doc/image dirs found in exampledirs to imagedirs");
+ QSet<QString> exampleImageDirs;
+ QStringList exampleImageList = config.getExampleImageFiles(excludedDirs, excludedFiles);
+ for (int i=0; i<exampleImageList.size(); ++i) {
+ if (exampleImageList[i].contains("doc/images")) {
+ QString t = exampleImageList[i].left(exampleImageList[i].lastIndexOf("doc/images")+10);
+ if (!exampleImageDirs.contains(t)) {
+ exampleImageDirs.insert(t);
+ }
+ }
}
- ++s;
+ Generator::augmentImageDirs(exampleImageDirs);
+ qdb->resolveStuff();
}
- Generator::debug(QString("Parsing done."));
-
- foreach (CodeParser *codeParser, usedParsers)
- codeParser->doneParsingSourceFiles();
/*
- Now the big tree has been built from all the header and
- source files. Resolve all the class names, function names,
- targets, URLs, links, and other stuff that needs resolving.
- */
- Generator::debug("Resolving stuff prior to generating docs");
- qdb->resolveIssues();
-
- /*
- The tree is built and all the stuff that needed resolving
- has been resolved. Now traverse the tree and generate the
- documentation output. More than one output format can be
- requested. The tree is traversed for each one.
+ The primary tree is built and all the stuff that needed
+ resolving has been resolved. Now traverse the tree and
+ generate the documentation output. More than one output
+ format can be requested. The tree is traversed for each
+ one.
*/
Generator::debug("Generating docs");
QSet<QString>::ConstIterator of = outputFormats.constBegin();
while (of != outputFormats.constEnd()) {
Generator* generator = Generator::generatorForFormat(*of);
if (generator == 0)
- outputFormatsLocation.fatal(QCoreApplication::translate("QDoc", "Unknown output format '%1'").arg(*of));
+ outputFormatsLocation.fatal(QCoreApplication::translate("QDoc",
+ "Unknown output format '%1'").arg(*of));
generator->generateDocs();
++of;
}
+#if 0
+ if (Generator::generating() && Generator::writeQaPages())
+ qdb->printLinkCounts(project);
+#endif
+ qdb->clearLinkCounts();
-
- //Generator::writeOutFileNames();
- Generator::debug("Shutting down qdoc");
+ Generator::debug("Terminating qdoc classes");
if (Generator::debugging())
Generator::stopDebugging(project);
@@ -492,17 +561,7 @@ static void processQdocconfFile(const QString &fileName)
Location::terminate();
QDir::setCurrent(prevCurrentDir);
-#ifndef QT_NO_TRANSLATION
- qDeleteAll(translators);
-#endif
-#ifdef DEBUG_SHUTDOWN_CRASH
- qDebug() << "main(): Delete qdoc database";
-#endif
- QDocDatabase::destroyQdocDB();
-#ifdef DEBUG_SHUTDOWN_CRASH
- qDebug() << "main(): qdoc database deleted";
-#endif
- Generator::debug("qdoc finished!");
+ Generator::debug("qdoc classes terminated");
}
extern Q_CORE_EXPORT QBasicAtomicInt qt_qhash_seed;
@@ -621,12 +680,22 @@ int main(int argc, char **argv)
logProgressOption.setDescription(QCoreApplication::translate("qdoc", "Log progress on stderr."));
parser.addOption(logProgressOption);
+ QCommandLineOption singleExecOption(QStringList() << QStringLiteral("single-exec"));
+ singleExecOption.setDescription(QCoreApplication::translate("qdoc", "Run qdoc once over all the qdoc conf files."));
+ parser.addOption(singleExecOption);
+
+ QCommandLineOption writeQaPagesOption(QStringList() << QStringLiteral("write-qa-pages"));
+ writeQaPagesOption.setDescription(QCoreApplication::translate("qdoc", "Write QA pages."));
+ parser.addOption(writeQaPagesOption);
+
parser.process(app);
defines += parser.values(defineOption);
dependModules += parser.values(dependsOption);
highlighting = parser.isSet(highlightingOption);
showInternal = parser.isSet(showInternalOption);
+ singleExec = parser.isSet(singleExecOption);
+ writeQaPages = parser.isSet(writeQaPagesOption);
redirectDocumentationToDevNull = parser.isSet(redirectDocumentationToDevNullOption);
Config::generateExamples = !parser.isSet(noExamplesOption);
foreach (const QString &indexDir, parser.values(indexDirOption)) {
@@ -650,21 +719,73 @@ int main(int argc, char **argv)
Generator::setQDocPass(Generator::Prepare);
if (parser.isSet(generateOption))
Generator::setQDocPass(Generator::Generate);
+ if (parser.isSet(singleExecOption))
+ Generator::setSingleExec();
+ if (parser.isSet(writeQaPagesOption))
+ Generator::setWriteQaPages();
if (parser.isSet(logProgressOption))
Location::startLoggingProgress();
- const QStringList qdocFiles = parser.positionalArguments();
+ /*
+ The default indent for code is 4.
+ The default value for false is 0.
+ The default supported file extensions are cpp, h, qdoc and qml.
+ The default language is c++.
+ The default output format is html.
+ The default tab size is 8.
+ And those are all the default values for configuration variables.
+ */
+ if (defaults.isEmpty()) {
+ defaults.insert(CONFIG_CODEINDENT, QLatin1String("4"));
+ defaults.insert(CONFIG_FALSEHOODS, QLatin1String("0"));
+ defaults.insert(CONFIG_FILEEXTENSIONS, QLatin1String("*.cpp *.h *.qdoc *.qml"));
+ defaults.insert(CONFIG_LANGUAGE, QLatin1String("Cpp"));
+ defaults.insert(CONFIG_OUTPUTFORMATS, QLatin1String("HTML"));
+ defaults.insert(CONFIG_TABSIZE, QLatin1String("8"));
+ }
+
+ QStringList qdocFiles = parser.positionalArguments();
if (qdocFiles.isEmpty())
parser.showHelp();
+ if (singleExec)
+ qdocFiles = Config::loadMaster(qdocFiles.at(0));
+
/*
- Main loop.
+ Main loop is now modified to handle single exec mode.
*/
+ if (Generator::singleExec())
+ Generator::setQDocPass(Generator::Prepare);
foreach (const QString &qf, qdocFiles) {
- //qDebug() << "PROCESSING:" << qf;
+ dependModules.clear();
processQdocconfFile(qf);
}
+ if (Generator::singleExec()) {
+ Generator::setQDocPass(Generator::Generate);
+ QDocDatabase* qdb = QDocDatabase::qdocDB();
+ qdb->processForest();
+ foreach (const QString &qf, qdocFiles) {
+ dependModules.clear();
+ processQdocconfFile(qf);
+ }
+ }
+
+#ifndef QT_NO_TRANSLATION
+ if (!translators.isEmpty()) {
+ for (int i=0; i<translators.size(); ++i) {
+ delete translators.at(i).second;
+ }
+ }
+ translators.clear();
+#endif
+
+#ifdef DEBUG_SHUTDOWN_CRASH
+ qDebug() << "main(): Delete qdoc database";
+#endif
+ QDocDatabase::destroyQdocDB();
+#ifdef DEBUG_SHUTDOWN_CRASH
+ qDebug() << "main(): qdoc database deleted";
+#endif
return EXIT_SUCCESS;
}
-
diff --git a/src/tools/qdoc/node.cpp b/src/tools/qdoc/node.cpp
index ce655efef6..6e291e0e65 100644
--- a/src/tools/qdoc/node.cpp
+++ b/src/tools/qdoc/node.cpp
@@ -218,7 +218,7 @@ Node::Node(Type type, InnerNode *parent, const QString& name)
{
if (parent_)
parent_->addChild(this);
- outSubDir_ = CodeParser::currentOutputSubdirectory();
+ outSubDir_ = Generator::outputSubdir();
if (operators_.isEmpty()) {
operators_.insert("++","inc");
operators_.insert("--","dec");
@@ -732,7 +732,7 @@ Node *InnerNode::findChildNode(const QString& name, Node::Genus genus) const
if (!nodes.isEmpty()) {
for (int i=0; i<nodes.size(); ++i) {
Node* node = nodes.at(i);
- if (genus == node->genus() || genus == Node::DontCare)
+ if (genus == node->genus())
return node;
}
}
diff --git a/src/tools/qdoc/node.h b/src/tools/qdoc/node.h
index e25bbd7a4a..7defa10cc3 100644
--- a/src/tools/qdoc/node.h
+++ b/src/tools/qdoc/node.h
@@ -107,7 +107,7 @@ public:
LastSubtype
};
- enum Genus { DontCare, CPP, QML };
+ enum Genus { DontCare, CPP, QML, DOC };
enum Access { Public, Protected, Private };
@@ -359,7 +359,7 @@ public:
//Node* findChildNode(const QString& name, bool qml) const;
Node* findChildNode(const QString& name, Type type);
//void findNodes(const QString& name, NodeList& n);
- virtual void findChildren(const QString& name, NodeList& nodes) const;
+ virtual void findChildren(const QString& name, NodeList& nodes) const Q_DECL_OVERRIDE;
FunctionNode* findFunctionNode(const QString& name) const;
FunctionNode* findFunctionNode(const FunctionNode* clone);
void addInclude(const QString &include);
@@ -370,8 +370,8 @@ public:
void deleteChildren();
void removeFromRelated();
- virtual bool isInnerNode() const { return true; }
- virtual bool isLeaf() const { return false; }
+ virtual bool isInnerNode() const Q_DECL_OVERRIDE { return true; }
+ virtual bool isLeaf() const Q_DECL_OVERRIDE { return false; }
const EnumNode* findEnumNodeForValue(const QString &enumValue) const;
const NodeList & childNodes() const { return children_; }
const NodeList & relatedNodes() const { return related_; }
@@ -384,14 +384,14 @@ public:
QStringList primaryKeys();
QStringList secondaryKeys();
const QStringList& pageKeywords() const { return pageKeywds; }
- virtual void addPageKeywords(const QString& t) { pageKeywds << t; }
- virtual void setOutputFileName(const QString& f) { outputFileName_ = f; }
- virtual QString outputFileName() const { return outputFileName_; }
- virtual QmlPropertyNode* hasQmlProperty(const QString& ) const;
- virtual QmlPropertyNode* hasQmlProperty(const QString&, bool attached) const;
+ virtual void addPageKeywords(const QString& t) Q_DECL_OVERRIDE { pageKeywds << t; }
+ virtual void setOutputFileName(const QString& f) Q_DECL_OVERRIDE { outputFileName_ = f; }
+ virtual QString outputFileName() const Q_DECL_OVERRIDE { return outputFileName_; }
+ virtual QmlPropertyNode* hasQmlProperty(const QString& ) const Q_DECL_OVERRIDE;
+ virtual QmlPropertyNode* hasQmlProperty(const QString&, bool attached) const Q_DECL_OVERRIDE;
void addChild(Node* child, const QString& title);
const QStringList& groupNames() const { return groupNames_; }
- virtual void appendGroupName(const QString& t) { groupNames_.append(t); }
+ virtual void appendGroupName(const QString& t) Q_DECL_OVERRIDE { groupNames_.append(t); }
void printChildren(const QString& title);
protected:
@@ -423,8 +423,8 @@ public:
LeafNode();
virtual ~LeafNode() { }
- virtual bool isInnerNode() const { return false; }
- virtual bool isLeaf() const { return true; }
+ virtual bool isInnerNode() const Q_DECL_OVERRIDE { return false; }
+ virtual bool isLeaf() const Q_DECL_OVERRIDE { return true; }
protected:
LeafNode(Type type, InnerNode* parent, const QString& name);
@@ -436,10 +436,10 @@ class NamespaceNode : public InnerNode
public:
NamespaceNode(InnerNode* parent, const QString& name);
virtual ~NamespaceNode() { }
- virtual bool isNamespace() const { return true; }
- virtual Tree* tree() const { return (parent() ? parent()->tree() : tree_); }
- virtual bool isCppNode() const { return true; }
- virtual Node::Genus genus() const { return Node::CPP; }
+ virtual bool isNamespace() const Q_DECL_OVERRIDE { return true; }
+ virtual Tree* tree() const Q_DECL_OVERRIDE { return (parent() ? parent()->tree() : tree_); }
+ virtual bool isCppNode() const Q_DECL_OVERRIDE { return true; }
+ virtual Node::Genus genus() const Q_DECL_OVERRIDE { return Node::CPP; }
void setTree(Tree* t) { tree_ = t; }
private:
@@ -469,13 +469,13 @@ class ClassNode : public InnerNode
public:
ClassNode(InnerNode* parent, const QString& name);
virtual ~ClassNode() { }
- virtual bool isClass() const { return true; }
- virtual bool isCppNode() const { return true; }
- virtual bool isWrapper() const { return wrapper_; }
- virtual Node::Genus genus() const { return Node::CPP; }
- virtual QString obsoleteLink() const { return obsoleteLink_; }
- virtual void setObsoleteLink(const QString& t) { obsoleteLink_ = t; }
- virtual void setWrapper() { wrapper_ = true; }
+ virtual bool isClass() const Q_DECL_OVERRIDE { return true; }
+ virtual bool isCppNode() const Q_DECL_OVERRIDE { return true; }
+ virtual bool isWrapper() const Q_DECL_OVERRIDE { return wrapper_; }
+ virtual Node::Genus genus() const Q_DECL_OVERRIDE { return Node::CPP; }
+ virtual QString obsoleteLink() const Q_DECL_OVERRIDE { return obsoleteLink_; }
+ virtual void setObsoleteLink(const QString& t) Q_DECL_OVERRIDE { obsoleteLink_ = t; }
+ virtual void setWrapper() Q_DECL_OVERRIDE { wrapper_ = true; }
void addResolvedBaseClass(Access access, ClassNode* node);
void addDerivedClass(Access access, ClassNode* node);
@@ -495,8 +495,8 @@ public:
void setServiceName(const QString& value) { sname = value; }
QmlClassNode* qmlElement() { return qmlelement; }
void setQmlElement(QmlClassNode* qcn) { qmlelement = qcn; }
- virtual bool isAbstract() const { return abstract_; }
- virtual void setAbstract(bool b) { abstract_ = b; }
+ virtual bool isAbstract() const Q_DECL_OVERRIDE { return abstract_; }
+ virtual void setAbstract(bool b) Q_DECL_OVERRIDE { abstract_ = b; }
PropertyNode* findPropertyNode(const QString& name);
QmlClassNode* findQmlBaseNode();
@@ -521,21 +521,23 @@ public:
PageType ptype);
virtual ~DocNode() { }
- virtual void setTitle(const QString &title);
- virtual void setSubTitle(const QString &subTitle) { subtitle_ = subTitle; }
+ virtual void setTitle(const QString &title) Q_DECL_OVERRIDE;
+ virtual void setSubTitle(const QString &subTitle) Q_DECL_OVERRIDE { subtitle_ = subTitle; }
- SubType subType() const { return nodeSubtype_; }
- virtual QString title() const { return title_; }
- virtual QString fullTitle() const;
- virtual QString subTitle() const;
+ SubType subType() const Q_DECL_OVERRIDE { return nodeSubtype_; }
+ virtual QString title() const Q_DECL_OVERRIDE { return title_; }
+ virtual QString fullTitle() const Q_DECL_OVERRIDE;
+ virtual QString subTitle() const Q_DECL_OVERRIDE;
virtual QString imageFileName() const { return QString(); }
- virtual QString nameForLists() const { return title(); }
+ virtual QString nameForLists() const Q_DECL_OVERRIDE { return title(); }
virtual void setImageFileName(const QString& ) { }
- virtual bool isHeaderFile() const { return (subType() == Node::HeaderFile); }
- virtual bool isExample() const { return (subType() == Node::Example); }
- virtual bool isExampleFile() const { return (parent() && parent()->isExample()); }
- virtual bool isExternalPage() const { return nodeSubtype_ == ExternalPage; }
- virtual bool isDocNode() const { return true; }
+
+ virtual bool isHeaderFile() const Q_DECL_OVERRIDE { return (subType() == Node::HeaderFile); }
+ virtual bool isExample() const Q_DECL_OVERRIDE { return (subType() == Node::Example); }
+ virtual bool isExampleFile() const Q_DECL_OVERRIDE { return (parent() && parent()->isExample()); }
+ virtual bool isExternalPage() const Q_DECL_OVERRIDE { return nodeSubtype_ == ExternalPage; }
+ virtual bool isDocNode() const Q_DECL_OVERRIDE { return true; }
+ virtual Node::Genus genus() const Q_DECL_OVERRIDE { return Node::DOC; }
protected:
SubType nodeSubtype_;
@@ -549,8 +551,8 @@ public:
ExampleNode(InnerNode* parent, const QString& name)
: DocNode(parent, name, Node::Example, Node::ExamplePage) { }
virtual ~ExampleNode() { }
- virtual QString imageFileName() const { return imageFileName_; }
- virtual void setImageFileName(const QString& ifn) { imageFileName_ = ifn; }
+ virtual QString imageFileName() const Q_DECL_OVERRIDE { return imageFileName_; }
+ virtual void setImageFileName(const QString& ifn) Q_DECL_OVERRIDE { imageFileName_ = ifn; }
private:
QString imageFileName_;
@@ -581,25 +583,25 @@ class QmlClassNode : public InnerNode
public:
QmlClassNode(InnerNode* parent, const QString& name);
virtual ~QmlClassNode();
- virtual bool isQmlNode() const { return true; }
- virtual bool isQmlType() const { return true; }
- virtual bool isQtQuickNode() const { return (qmlModuleName() == QLatin1String("QtQuick")); }
- virtual ClassNode* classNode() { return cnode_; }
- virtual void setClassNode(ClassNode* cn) { cnode_ = cn; }
- virtual bool isAbstract() const { return abstract_; }
- virtual bool isWrapper() const { return wrapper_; }
- virtual void setAbstract(bool b) { abstract_ = b; }
- virtual void setWrapper() { wrapper_ = true; }
- virtual bool isInternal() const { return (status() == Internal); }
- virtual QString qmlFullBaseName() const;
- virtual QString obsoleteLink() const { return obsoleteLink_; }
- virtual void setObsoleteLink(const QString& t) { obsoleteLink_ = t; };
- virtual QString qmlModuleName() const;
- virtual QString qmlModuleVersion() const;
- virtual QString qmlModuleIdentifier() const;
- virtual QmlModuleNode* qmlModule() const { return qmlModule_; }
- virtual void setQmlModule(QmlModuleNode* t) { qmlModule_ = t; }
- virtual Node::Genus genus() const { return Node::QML; }
+ virtual bool isQmlNode() const Q_DECL_OVERRIDE { return true; }
+ virtual bool isQmlType() const Q_DECL_OVERRIDE { return true; }
+ virtual bool isQtQuickNode() const Q_DECL_OVERRIDE { return (qmlModuleName() == QLatin1String("QtQuick")); }
+ virtual ClassNode* classNode() Q_DECL_OVERRIDE { return cnode_; }
+ virtual void setClassNode(ClassNode* cn) Q_DECL_OVERRIDE { cnode_ = cn; }
+ virtual bool isAbstract() const Q_DECL_OVERRIDE { return abstract_; }
+ virtual bool isWrapper() const Q_DECL_OVERRIDE { return wrapper_; }
+ virtual void setAbstract(bool b) Q_DECL_OVERRIDE { abstract_ = b; }
+ virtual void setWrapper() Q_DECL_OVERRIDE { wrapper_ = true; }
+ virtual bool isInternal() const Q_DECL_OVERRIDE { return (status() == Internal); }
+ virtual QString qmlFullBaseName() const Q_DECL_OVERRIDE;
+ virtual QString obsoleteLink() const Q_DECL_OVERRIDE { return obsoleteLink_; }
+ virtual void setObsoleteLink(const QString& t) Q_DECL_OVERRIDE { obsoleteLink_ = t; };
+ virtual QString qmlModuleName() const Q_DECL_OVERRIDE;
+ virtual QString qmlModuleVersion() const Q_DECL_OVERRIDE;
+ virtual QString qmlModuleIdentifier() const Q_DECL_OVERRIDE;
+ virtual QmlModuleNode* qmlModule() const Q_DECL_OVERRIDE { return qmlModule_; }
+ virtual void setQmlModule(QmlModuleNode* t) Q_DECL_OVERRIDE { qmlModule_ = t; }
+ virtual Node::Genus genus() const Q_DECL_OVERRIDE { return Node::QML; }
const ImportList& importList() const { return importList_; }
void setImportList(const ImportList& il) { importList_ = il; }
const QString& qmlBaseName() const { return qmlBaseName_; }
@@ -635,9 +637,9 @@ public:
QmlBasicTypeNode(InnerNode* parent,
const QString& name);
virtual ~QmlBasicTypeNode() { }
- virtual bool isQmlNode() const { return true; }
- virtual bool isQmlBasicType() const { return true; }
- virtual Node::Genus genus() const { return Node::QML; }
+ virtual bool isQmlNode() const Q_DECL_OVERRIDE { return true; }
+ virtual bool isQmlBasicType() const Q_DECL_OVERRIDE { return true; }
+ virtual Node::Genus genus() const Q_DECL_OVERRIDE { return Node::QML; }
};
class QmlPropertyGroupNode : public InnerNode
@@ -645,17 +647,17 @@ class QmlPropertyGroupNode : public InnerNode
public:
QmlPropertyGroupNode(QmlClassNode* parent, const QString& name);
virtual ~QmlPropertyGroupNode() { }
- virtual bool isQmlNode() const { return true; }
- virtual bool isQtQuickNode() const { return parent()->isQtQuickNode(); }
- virtual QString qmlTypeName() const { return parent()->qmlTypeName(); }
- virtual QString qmlModuleName() const { return parent()->qmlModuleName(); }
- virtual QString qmlModuleVersion() const { return parent()->qmlModuleVersion(); }
- virtual QString qmlModuleIdentifier() const { return parent()->qmlModuleIdentifier(); }
- virtual QString idNumber();
- virtual bool isQmlPropertyGroup() const { return true; }
- virtual Node::Genus genus() const { return Node::QML; }
-
- virtual QString element() const { return parent()->name(); }
+ virtual bool isQmlNode() const Q_DECL_OVERRIDE { return true; }
+ virtual bool isQtQuickNode() const Q_DECL_OVERRIDE { return parent()->isQtQuickNode(); }
+ virtual QString qmlTypeName() const Q_DECL_OVERRIDE { return parent()->qmlTypeName(); }
+ virtual QString qmlModuleName() const Q_DECL_OVERRIDE { return parent()->qmlModuleName(); }
+ virtual QString qmlModuleVersion() const Q_DECL_OVERRIDE { return parent()->qmlModuleVersion(); }
+ virtual QString qmlModuleIdentifier() const Q_DECL_OVERRIDE { return parent()->qmlModuleIdentifier(); }
+ virtual QString idNumber() Q_DECL_OVERRIDE;
+ virtual bool isQmlPropertyGroup() const Q_DECL_OVERRIDE { return true; }
+ virtual Node::Genus genus() const Q_DECL_OVERRIDE { return Node::QML; }
+
+ virtual QString element() const Q_DECL_OVERRIDE { return parent()->name(); }
private:
int idNumber_;
@@ -672,11 +674,11 @@ public:
bool attached);
virtual ~QmlPropertyNode() { }
- virtual Node::Genus genus() const { return Node::QML; }
- virtual void setDataType(const QString& dataType) { type_ = dataType; }
+ virtual Node::Genus genus() const Q_DECL_OVERRIDE { return Node::QML; }
+ virtual void setDataType(const QString& dataType) Q_DECL_OVERRIDE { type_ = dataType; }
void setStored(bool stored) { stored_ = toFlagValue(stored); }
void setDesignable(bool designable) { designable_ = toFlagValue(designable); }
- virtual void setReadOnly(bool ro) { readOnly_ = toFlagValue(ro); }
+ virtual void setReadOnly(bool ro) Q_DECL_OVERRIDE { readOnly_ = toFlagValue(ro); }
void setDefault() { isdefault_ = true; }
const QString &dataType() const { return type_; }
@@ -685,17 +687,17 @@ public:
bool isStored() const { return fromFlagValue(stored_,true); }
bool isDesignable() const { return fromFlagValue(designable_,false); }
bool isWritable();
- virtual bool isDefault() const { return isdefault_; }
- virtual bool isReadOnly() const { return fromFlagValue(readOnly_,false); }
- virtual bool isAlias() const { return isAlias_; }
- virtual bool isAttached() const { return attached_; }
- virtual bool isQmlNode() const { return true; }
- virtual bool isQtQuickNode() const { return parent()->isQtQuickNode(); }
- virtual QString qmlTypeName() const { return parent()->qmlTypeName(); }
- virtual QString qmlModuleName() const { return parent()->qmlModuleName(); }
- virtual QString qmlModuleVersion() const { return parent()->qmlModuleVersion(); }
- virtual QString qmlModuleIdentifier() const { return parent()->qmlModuleIdentifier(); }
- virtual QString element() const;
+ virtual bool isDefault() const Q_DECL_OVERRIDE { return isdefault_; }
+ virtual bool isReadOnly() const Q_DECL_OVERRIDE { return fromFlagValue(readOnly_,false); }
+ virtual bool isAlias() const Q_DECL_OVERRIDE { return isAlias_; }
+ virtual bool isAttached() const Q_DECL_OVERRIDE { return attached_; }
+ virtual bool isQmlNode() const Q_DECL_OVERRIDE { return true; }
+ virtual bool isQtQuickNode() const Q_DECL_OVERRIDE { return parent()->isQtQuickNode(); }
+ virtual QString qmlTypeName() const Q_DECL_OVERRIDE { return parent()->qmlTypeName(); }
+ virtual QString qmlModuleName() const Q_DECL_OVERRIDE { return parent()->qmlModuleName(); }
+ virtual QString qmlModuleVersion() const Q_DECL_OVERRIDE { return parent()->qmlModuleVersion(); }
+ virtual QString qmlModuleIdentifier() const Q_DECL_OVERRIDE { return parent()->qmlModuleIdentifier(); }
+ virtual QString element() const Q_DECL_OVERRIDE;
private:
PropertyNode* findCorrespondingCppProperty();
@@ -731,8 +733,8 @@ public:
EnumNode(InnerNode* parent, const QString& name);
virtual ~EnumNode() { }
- virtual Node::Genus genus() const { return Node::CPP; }
- virtual bool isCppNode() const { return true; }
+ virtual Node::Genus genus() const Q_DECL_OVERRIDE { return Node::CPP; }
+ virtual bool isCppNode() const Q_DECL_OVERRIDE { return true; }
void addItem(const EnumItem& item);
void setFlagsType(TypedefNode* typedeff);
bool hasItem(const QString &name) const { return names.contains(name); }
@@ -754,8 +756,8 @@ public:
TypedefNode(InnerNode* parent, const QString& name);
virtual ~TypedefNode() { }
- virtual Node::Genus genus() const { return Node::CPP; }
- virtual bool isCppNode() const { return true; }
+ virtual Node::Genus genus() const Q_DECL_OVERRIDE { return Node::CPP; }
+ virtual bool isCppNode() const Q_DECL_OVERRIDE { return true; }
const EnumNode* associatedEnum() const { return ae; }
private:
@@ -842,8 +844,8 @@ public:
bool isConst() const { return con; }
bool isStatic() const { return sta; }
bool isOverload() const { return ove; }
- bool isReimp() const { return reimp; }
- bool isFunction() const { return true; }
+ bool isReimp() const Q_DECL_OVERRIDE { return reimp; }
+ bool isFunction() const Q_DECL_OVERRIDE { return true; }
int overloadNumber() const;
const QList<Parameter>& parameters() const { return params; }
QStringList parameterNames() const;
@@ -855,20 +857,20 @@ public:
QStringList reconstructParams(bool values = false) const;
QString signature(bool values = false) const;
- virtual QString element() const { return parent()->name(); }
- virtual bool isAttached() const { return attached_; }
- virtual bool isQmlNode() const {
+ virtual QString element() const Q_DECL_OVERRIDE { return parent()->name(); }
+ virtual bool isAttached() const Q_DECL_OVERRIDE { return attached_; }
+ virtual bool isQmlNode() const Q_DECL_OVERRIDE {
return ((type() == QmlSignal) ||
(type() == QmlMethod) ||
(type() == QmlSignalHandler));
}
- virtual bool isCppNode() const { return !isQmlNode(); }
- virtual Node::Genus genus() const { return (isQmlNode() ? Node::QML : Node::CPP); }
- virtual bool isQtQuickNode() const { return parent()->isQtQuickNode(); }
- virtual QString qmlTypeName() const { return parent()->qmlTypeName(); }
- virtual QString qmlModuleName() const { return parent()->qmlModuleName(); }
- virtual QString qmlModuleVersion() const { return parent()->qmlModuleVersion(); }
- virtual QString qmlModuleIdentifier() const { return parent()->qmlModuleIdentifier(); }
+ virtual bool isCppNode() const Q_DECL_OVERRIDE { return !isQmlNode(); }
+ virtual Node::Genus genus() const Q_DECL_OVERRIDE { return (isQmlNode() ? Node::QML : Node::CPP); }
+ virtual bool isQtQuickNode() const Q_DECL_OVERRIDE { return parent()->isQtQuickNode(); }
+ virtual QString qmlTypeName() const Q_DECL_OVERRIDE { return parent()->qmlTypeName(); }
+ virtual QString qmlModuleName() const Q_DECL_OVERRIDE { return parent()->qmlModuleName(); }
+ virtual QString qmlModuleVersion() const Q_DECL_OVERRIDE { return parent()->qmlModuleVersion(); }
+ virtual QString qmlModuleIdentifier() const Q_DECL_OVERRIDE { return parent()->qmlModuleIdentifier(); }
void debug() const;
@@ -902,9 +904,9 @@ public:
PropertyNode(InnerNode* parent, const QString& name);
virtual ~PropertyNode() { }
- virtual Node::Genus genus() const { return Node::CPP; }
- virtual bool isCppNode() const { return true; }
- virtual void setDataType(const QString& dataType) { type_ = dataType; }
+ virtual Node::Genus genus() const Q_DECL_OVERRIDE { return Node::CPP; }
+ virtual bool isCppNode() const Q_DECL_OVERRIDE { return true; }
+ virtual void setDataType(const QString& dataType) Q_DECL_OVERRIDE { type_ = dataType; }
void addFunction(FunctionNode* function, FunctionRole role);
void addSignal(FunctionNode* function, FunctionRole role);
void setStored(bool stored) { stored_ = toFlagValue(stored); }
@@ -991,8 +993,8 @@ public:
VariableNode(InnerNode* parent, const QString &name);
virtual ~VariableNode() { }
- virtual Node::Genus genus() const { return Node::CPP; }
- virtual bool isCppNode() const { return true; }
+ virtual Node::Genus genus() const Q_DECL_OVERRIDE { return Node::CPP; }
+ virtual bool isCppNode() const Q_DECL_OVERRIDE { return true; }
void setLeftType(const QString &leftType) { lt = leftType; }
void setRightType(const QString &rightType) { rt = rightType; }
void setStatic(bool statique) { sta = statique; }
@@ -1033,20 +1035,20 @@ class CollectionNode : public InnerNode
}
virtual ~CollectionNode() { }
- virtual bool isCollectionNode() const { return true; }
- virtual void addMember(Node* node);
- virtual bool hasMembers() const;
- virtual bool hasNamespaces() const;
- virtual bool hasClasses() const;
- virtual void getMemberNamespaces(NodeMap& out);
- virtual void getMemberClasses(NodeMap& out);
- virtual bool wasSeen() const { return seen_; }
- virtual QString title() const { return title_; }
- virtual QString subTitle() const { return subtitle_; }
- virtual QString fullTitle() const { return title_; }
- virtual QString nameForLists() const { return title_; }
- virtual void setTitle(const QString &title);
- virtual void setSubTitle(const QString &subTitle) { subtitle_ = subTitle; }
+ virtual bool isCollectionNode() const Q_DECL_OVERRIDE { return true; }
+ virtual void addMember(Node* node) Q_DECL_OVERRIDE;
+ virtual bool hasMembers() const Q_DECL_OVERRIDE;
+ virtual bool hasNamespaces() const Q_DECL_OVERRIDE;
+ virtual bool hasClasses() const Q_DECL_OVERRIDE;
+ virtual void getMemberNamespaces(NodeMap& out) Q_DECL_OVERRIDE;
+ virtual void getMemberClasses(NodeMap& out) Q_DECL_OVERRIDE;
+ virtual bool wasSeen() const Q_DECL_OVERRIDE { return seen_; }
+ virtual QString title() const Q_DECL_OVERRIDE { return title_; }
+ virtual QString subTitle() const Q_DECL_OVERRIDE { return subtitle_; }
+ virtual QString fullTitle() const Q_DECL_OVERRIDE { return title_; }
+ virtual QString nameForLists() const Q_DECL_OVERRIDE { return title_; }
+ virtual void setTitle(const QString &title) Q_DECL_OVERRIDE;
+ virtual void setSubTitle(const QString &subTitle) Q_DECL_OVERRIDE { subtitle_ = subTitle; }
const NodeList& members() const { return members_; }
void printMembers(const QString& title);
@@ -1068,7 +1070,7 @@ class GroupNode : public CollectionNode
: CollectionNode(Node::Group, parent, name) { }
virtual ~GroupNode() { }
- virtual bool isGroup() const { return true; }
+ virtual bool isGroup() const Q_DECL_OVERRIDE { return true; }
};
class ModuleNode : public CollectionNode
@@ -1078,10 +1080,10 @@ class ModuleNode : public CollectionNode
: CollectionNode(Node::Module, parent, name) { }
virtual ~ModuleNode() { }
- virtual bool isModule() const { return true; }
- virtual bool isCppNode() const { return true; }
- virtual void setQtVariable(const QString& v) { qtVariable_ = v; }
- virtual QString qtVariable() const { return qtVariable_; }
+ virtual bool isModule() const Q_DECL_OVERRIDE { return true; }
+ virtual bool isCppNode() const Q_DECL_OVERRIDE { return true; }
+ virtual void setQtVariable(const QString& v) Q_DECL_OVERRIDE { qtVariable_ = v; }
+ virtual QString qtVariable() const Q_DECL_OVERRIDE { return qtVariable_; }
private:
QString qtVariable_;
@@ -1094,18 +1096,18 @@ class QmlModuleNode : public CollectionNode
: CollectionNode(Node::QmlModule, parent, name) { }
virtual ~QmlModuleNode() { }
- virtual bool isQmlNode() const { return true; }
- virtual bool isQmlModule() const { return true; }
- virtual QString qmlModuleName() const { return qmlModuleName_; }
- virtual QString qmlModuleVersion() const {
+ virtual bool isQmlNode() const Q_DECL_OVERRIDE { return true; }
+ virtual bool isQmlModule() const Q_DECL_OVERRIDE { return true; }
+ virtual QString qmlModuleName() const Q_DECL_OVERRIDE { return qmlModuleName_; }
+ virtual QString qmlModuleVersion() const Q_DECL_OVERRIDE {
return qmlModuleVersionMajor_ + "." + qmlModuleVersionMinor_;
}
- virtual QString qmlModuleIdentifier() const {
+ virtual QString qmlModuleIdentifier() const Q_DECL_OVERRIDE {
return qmlModuleName_ + qmlModuleVersionMajor_;
}
- virtual void setQmlModuleInfo(const QString& );
- virtual void setQtVariable(const QString& v) { qtVariable_ = v; }
- virtual QString qtVariable() const { return qtVariable_; }
+ virtual void setQmlModuleInfo(const QString& ) Q_DECL_OVERRIDE;
+ virtual void setQtVariable(const QString& v) Q_DECL_OVERRIDE { qtVariable_ = v; }
+ virtual QString qtVariable() const Q_DECL_OVERRIDE { return qtVariable_; }
private:
QString qmlModuleName_;
diff --git a/src/tools/qdoc/plaincodemarker.h b/src/tools/qdoc/plaincodemarker.h
index df6beebd03..2fb97c443d 100644
--- a/src/tools/qdoc/plaincodemarker.h
+++ b/src/tools/qdoc/plaincodemarker.h
@@ -48,20 +48,20 @@ public:
PlainCodeMarker();
~PlainCodeMarker();
- bool recognizeCode( const QString& code );
- bool recognizeExtension( const QString& ext );
- bool recognizeLanguage( const QString& lang );
- Atom::Type atomType() const;
- QString markedUpCode( const QString& code, const Node *relative, const Location &location );
+ bool recognizeCode( const QString& code ) Q_DECL_OVERRIDE;
+ bool recognizeExtension( const QString& ext ) Q_DECL_OVERRIDE;
+ bool recognizeLanguage( const QString& lang ) Q_DECL_OVERRIDE;
+ Atom::Type atomType() const Q_DECL_OVERRIDE;
+ QString markedUpCode( const QString& code, const Node *relative, const Location &location ) Q_DECL_OVERRIDE;
QString markedUpSynopsis( const Node *node, const Node *relative,
- SynopsisStyle style );
- QString markedUpName( const Node *node );
- QString markedUpFullName( const Node *node, const Node *relative );
- QString markedUpEnumValue(const QString &enumValue, const Node *relative);
- QString markedUpIncludes( const QStringList& includes );
- QString functionBeginRegExp( const QString& funcName );
- QString functionEndRegExp( const QString& funcName );
- QList<Section> sections(const InnerNode *innerNode, SynopsisStyle style, Status status);
+ SynopsisStyle style ) Q_DECL_OVERRIDE;
+ QString markedUpName( const Node *node ) Q_DECL_OVERRIDE;
+ QString markedUpFullName( const Node *node, const Node *relative ) Q_DECL_OVERRIDE;
+ QString markedUpEnumValue(const QString &enumValue, const Node *relative) Q_DECL_OVERRIDE;
+ QString markedUpIncludes( const QStringList& includes ) Q_DECL_OVERRIDE;
+ QString functionBeginRegExp( const QString& funcName ) Q_DECL_OVERRIDE;
+ QString functionEndRegExp( const QString& funcName ) Q_DECL_OVERRIDE;
+ QList<Section> sections(const InnerNode *innerNode, SynopsisStyle style, Status status) Q_DECL_OVERRIDE;
};
QT_END_NAMESPACE
diff --git a/src/tools/qdoc/puredocparser.h b/src/tools/qdoc/puredocparser.h
index e6a4eca9d8..4100b50e2d 100644
--- a/src/tools/qdoc/puredocparser.h
+++ b/src/tools/qdoc/puredocparser.h
@@ -57,8 +57,8 @@ public:
PureDocParser();
virtual ~PureDocParser();
- virtual QStringList sourceFileNameFilter();
- virtual void parseSourceFile(const Location& location, const QString& filePath);
+ virtual QStringList sourceFileNameFilter() Q_DECL_OVERRIDE;
+ virtual void parseSourceFile(const Location& location, const QString& filePath) Q_DECL_OVERRIDE;
private:
bool processQdocComments();
diff --git a/src/tools/qdoc/qdocdatabase.cpp b/src/tools/qdoc/qdocdatabase.cpp
index 36dd05bb92..a2c1b82c7f 100644
--- a/src/tools/qdoc/qdocdatabase.cpp
+++ b/src/tools/qdoc/qdocdatabase.cpp
@@ -128,142 +128,54 @@ Tree* QDocForest::nextTree()
*/
/*!
+ Finds the tree for module \a t in the forest and
+ sets the primary tree to be that tree. After the
+ primary tree is set, that tree is removed from the
+ forest.
+
+ \node It gets re-inserted into the forest after the
+ search order is built.
+ */
+void QDocForest::setPrimaryTree(const QString& t)
+{
+ primaryTree_ = findTree(t);
+ forest_.remove(t);
+ if (!primaryTree_)
+ qDebug() << "ERROR: Could not set primary tree to:" << t;
+}
+
+/*!
If the search order array is empty, create the search order.
If the search order array is not empty, do nothing.
*/
-void QDocForest::setSearchOrder()
+void QDocForest::setSearchOrder(QStringList& t)
{
if (!searchOrder_.isEmpty())
return;
- QString primaryName = primaryTree()->moduleName();
- searchOrder_.clear();
+
+ /* Allocate space for the search order. */
searchOrder_.reserve(forest_.size()+1);
+ searchOrder_.clear();
moduleNames_.reserve(forest_.size()+1);
+ moduleNames_.clear();
+
+ /* The primary tree is always first in the search order. */
+ QString primaryName = primaryTree()->moduleName();
searchOrder_.append(primaryTree_);
moduleNames_.append(primaryName);
+ forest_.remove(primaryName);
+
QMap<QString, Tree*>::iterator i;
- if (primaryName != "QtCore") {
- i = forest_.find("QtCore");
- if (i != forest_.end()) {
- searchOrder_.append(i.value());
- moduleNames_.append("QtCore");
- forest_.erase(i);
- }
- }
- if (primaryName != "QtGui") {
- i = forest_.find("QtGui");
- if (i != forest_.end()) {
- searchOrder_.append(i.value());
- moduleNames_.append("QtGui");
- forest_.erase(i);
- }
- }
- if (primaryName != "QtNetwork") {
- i = forest_.find("QtNetwork");
- if (i != forest_.end()) {
- searchOrder_.append(i.value());
- moduleNames_.append("QtNetwork");
- forest_.erase(i);
- }
- }
- if (primaryName != "QtOpenGL") {
- i = forest_.find("QtOpenGL");
- if (i != forest_.end()) {
- searchOrder_.append(i.value());
- moduleNames_.append("QtOpenGL");
- forest_.erase(i);
- }
- }
- if (primaryName != "QtWidgets") {
- i = forest_.find("QtWidgets");
- if (i != forest_.end()) {
- searchOrder_.append(i.value());
- moduleNames_.append("QtWidgets");
- forest_.erase(i);
- }
- }
- if (primaryName != "QtSql") {
- i = forest_.find("QtSql");
- if (i != forest_.end()) {
- searchOrder_.append(i.value());
- moduleNames_.append("QtSql");
- forest_.erase(i);
- }
- }
- if (primaryName != "QtXml") {
- i = forest_.find("QtXml");
- if (i != forest_.end()) {
- searchOrder_.append(i.value());
- moduleNames_.append("QtXml");
- forest_.erase(i);
- }
- }
- if (primaryName != "QtSvg") {
- i = forest_.find("QtSvg");
- if (i != forest_.end()) {
- searchOrder_.append(i.value());
- moduleNames_.append("QtSvg");
- forest_.erase(i);
- }
- }
- if (primaryName != "QtDoc") {
- i = forest_.find("QtDoc");
- if (i != forest_.end()) {
- searchOrder_.append(i.value());
- moduleNames_.append("QtDoc");
- forest_.erase(i);
- }
- }
- if (primaryName != "QtQuick") {
- i = forest_.find("QtQuick");
- if (i != forest_.end()) {
- searchOrder_.append(i.value());
- moduleNames_.append("QtQuick");
- forest_.erase(i);
- }
- }
- if (primaryName != "QtQml") {
- i = forest_.find("QtQml");
- if (i != forest_.end()) {
- searchOrder_.append(i.value());
- moduleNames_.append("QtQml");
- forest_.erase(i);
- }
- }
- if (primaryName != "QtPrintSupport") {
- i = forest_.find("QtPrintSupport");
- if (i != forest_.end()) {
- searchOrder_.append(i.value());
- moduleNames_.append("QtPrintSupport");
- forest_.erase(i);
- }
- }
- if (primaryName != "QtGraphicalEffects") {
- i = forest_.find("QtGraphicalEffects");
- if (i != forest_.end()) {
- searchOrder_.append(i.value());
- moduleNames_.append("QtGraphicalEffects");
- forest_.erase(i);
- }
- }
- if (primaryName != "QtConcurrent") {
- i = forest_.find("QtConcurrent");
- if (i != forest_.end()) {
- searchOrder_.append(i.value());
- moduleNames_.append("QtConcurrent");
- forest_.erase(i);
- }
- }
-#if 0
- if (primaryName != "zzz") {
- i = forest_.find("zzz");
- if (i != forest_.end()) {
- searchOrder_.append(i.value());
- moduleNames_.append("zzz");
- forest_.erase(i);
+ foreach (QString m, t) {
+ if (primaryName != m) {
+ i = forest_.find(m);
+ if (i != forest_.end()) {
+ searchOrder_.append(i.value());
+ moduleNames_.append(m);
+ forest_.remove(m);
+ }
}
}
-#endif
/*
If any trees remain in the forest, just add them
to the search order sequentially, because we don't
@@ -283,15 +195,21 @@ void QDocForest::setSearchOrder()
Rebuild the forest after constructing the search order.
It was destroyed during construction of the search order,
but it is needed for module-specific searches.
+
+ Note that this loop also inserts the primary tree into the
+ forrest. That is a requirement.
*/
for (int i=0; i<searchOrder_.size(); ++i) {
- forest_.insert(moduleNames_.at(i).toLower(), searchOrder_.at(i));
+ if (!forest_.contains(moduleNames_.at(i))) {
+ forest_.insert(moduleNames_.at(i), searchOrder_.at(i));
+ }
}
-
#if 0
- qDebug() << " SEARCH ORDER:";
+ qDebug() << " SEARCH ORDER:";
for (int i=0; i<moduleNames_.size(); ++i)
- qDebug() << " " << i+1 << "." << moduleNames_.at(i);
+ qDebug() << " " << i+1 << "." << moduleNames_.at(i);
+ qDebug() << " FOREST:" << forest_.keys();
+ qDebug() << "SEARCH ORDER:" << moduleNames_;
#endif
}
@@ -363,7 +281,7 @@ NamespaceNode* QDocForest::newIndexTree(const QString& module)
/*!
Create a new Tree for use as the primary tree. This tree
- will represent the primary module.
+ will represent the primary module. \a module is camel case.
*/
void QDocForest::newPrimaryTree(const QString& module)
{
@@ -431,6 +349,61 @@ void QDocForest::mergeCollectionMaps(Node::Type nt, CNMultiMap& cnmm)
}
}
+/*!
+ Print the list of module names ordered according
+ to how many successful searches each tree had.
+ */
+void QDocForest::printLinkCounts(const QString& project)
+{
+ Location::null.report(QString("%1: Link Counts").arg(project));
+ QMultiMap<int, QString> m;
+ foreach (Tree* t, searchOrder()) {
+ if (t->linkCount() < 0)
+ m.insert(t->linkCount(), t->moduleName());
+ }
+ QString depends = "depends +=";
+ QString module = project.toLower();
+ QMultiMap<int, QString>::iterator i = m.begin();
+ while (i != m.end()) {
+ QString line = " " + i.value();
+ if (i.value() != module)
+ depends += " " + i.value();
+ int pad = 30 - line.length();
+ for (int k=0; k<pad; ++k)
+ line += " ";
+ line += "%1";
+ Location::null.report(line.arg(-(i.key())));
+ ++i;
+ }
+ Location::null.report("Optimal depends variable:");
+ Location::null.report(depends);
+}
+
+/*!
+ Print the list of module names ordered according
+ to how many successful searches each tree had.
+ */
+QString QDocForest::getLinkCounts(QStringList& strings, QVector<int>& counts)
+{
+ QMultiMap<int, QString> m;
+ foreach (Tree* t, searchOrder()) {
+ if (t->linkCount() < 0)
+ m.insert(t->linkCount(), t->moduleName());
+ }
+ QString depends = "depends +=";
+ QString module = Generator::defaultModuleName().toLower();
+ QMultiMap<int, QString>::iterator i = m.begin();
+ while (i != m.end()) {
+ if (i.value() != module) {
+ counts.append(-(i.key()));
+ strings.append(i.value());
+ depends += " " + i.value();
+ }
+ ++i;
+ }
+ return depends;
+}
+
/*! \class QDocDatabase
This class provides exclusive access to the qdoc database,
which consists of a forrest of trees and a lot of maps and
@@ -445,8 +418,19 @@ NodeMap QDocDatabase::typeNodeMap_;
constructs the \a forest_ object, which is also a singleton.
\a showInternal_ is normally false. If it is true, qdoc will
write documentation for nodes marked \c internal.
+
+ \a singleExec_ is false when qdoc is being used in the standard
+ way of running qdoc twices for each module, first with -prepare
+ and then with -generate. First the -prepare phase is run for
+ each module, then the -generate phase is run for each module.
+
+ When \a singleExec_ is true, qdoc is run only once. During the
+ single execution, qdoc processes the qdocconf files for all the
+ modules sequentially in a loop. Each source file for each module
+ is read exactly once.
*/
-QDocDatabase::QDocDatabase() : showInternal_(false), forest_(this)
+QDocDatabase::QDocDatabase()
+ : showInternal_(false), singleExec_(false), forest_(this)
{
// nothing
}
@@ -809,13 +793,41 @@ QmlClassNode* QDocDatabase::findQmlType(const ImportRec& import, const QString&
}
/*!
- This function calls \a func for each tree in the forest.
+ This function calls a set of functions for each tree in the
+ forest that has not already been analyzed. In this way, when
+ running qdoc in \e singleExec mode, each tree is analyzed in
+ turn, and its classes and types are added to the appropriate
+ node maps.
+ */
+void QDocDatabase::processForest()
+{
+ Tree* t = forest_.firstTree();
+ while (t) {
+ findAllNamespaces(t->root());
+ findAllClasses(t->root());
+ findAllFunctions(t->root());
+ findAllObsoleteThings(t->root());
+ findAllLegaleseTexts(t->root());
+ findAllSince(t->root());
+ t->setTreeHasBeenAnalyzed();
+ t = forest_.nextTree();
+ }
+}
+
+/*!
+ This function calls \a func for each tree in the forest,
+ but only if Tree::treeHasBeenAnalyzed() returns false for
+ the tree. In this way, when running qdoc in \e singleExec
+ mode, each tree is analyzed in turn, and its classes and
+ types are added to the appropriate node maps.
*/
void QDocDatabase::processForest(void (QDocDatabase::*func) (InnerNode*))
{
Tree* t = forest_.firstTree();
while (t) {
- (this->*(func))(t->root());
+ if (!t->treeHasBeenAnalyzed()) {
+ (this->*(func))(t->root());
+ }
t = forest_.nextTree();
}
}
@@ -887,7 +899,7 @@ NodeMap& QDocDatabase::getNamespaces()
*/
NodeMap& QDocDatabase::getServiceClasses()
{
- if (nonCompatClasses_.isEmpty() && qmlClasses_.isEmpty())
+ if (cppClasses_.isEmpty() && qmlTypes_.isEmpty())
processForest(&QDocDatabase::findAllClasses);
return serviceClasses_;
}
@@ -899,7 +911,7 @@ NodeMap& QDocDatabase::getServiceClasses()
*/
NodeMap& QDocDatabase::getQmlBasicTypes()
{
- if (nonCompatClasses_.isEmpty() && qmlBasicTypes_.isEmpty())
+ if (cppClasses_.isEmpty() && qmlBasicTypes_.isEmpty())
processForest(&QDocDatabase::findAllClasses);
return qmlBasicTypes_;
}
@@ -911,9 +923,9 @@ NodeMap& QDocDatabase::getQmlBasicTypes()
*/
NodeMap& QDocDatabase::getQmlTypes()
{
- if (nonCompatClasses_.isEmpty() && qmlClasses_.isEmpty())
+ if (cppClasses_.isEmpty() && qmlTypes_.isEmpty())
processForest(&QDocDatabase::findAllClasses);
- return qmlClasses_;
+ return qmlTypes_;
}
/*!
@@ -935,7 +947,7 @@ NodeMap& QDocDatabase::getObsoleteClasses()
*/
NodeMap& QDocDatabase::getCompatibilityClasses()
{
- if (nonCompatClasses_.isEmpty() && qmlClasses_.isEmpty())
+ if (cppClasses_.isEmpty() && qmlTypes_.isEmpty())
processForest(&QDocDatabase::findAllClasses);
return compatClasses_;
}
@@ -950,7 +962,7 @@ NodeMap& QDocDatabase::getCompatibilityClasses()
*/
NodeMap& QDocDatabase::getMainClasses()
{
- if (nonCompatClasses_.isEmpty() && qmlClasses_.isEmpty())
+ if (cppClasses_.isEmpty() && qmlTypes_.isEmpty())
processForest(&QDocDatabase::findAllClasses);
return mainClasses_;
}
@@ -962,9 +974,9 @@ NodeMap& QDocDatabase::getMainClasses()
*/
NodeMap& QDocDatabase::getCppClasses()
{
- if (nonCompatClasses_.isEmpty() && qmlClasses_.isEmpty())
+ if (cppClasses_.isEmpty() && qmlTypes_.isEmpty())
processForest(&QDocDatabase::findAllClasses);
- return nonCompatClasses_;
+ return cppClasses_;
}
/*!
@@ -987,7 +999,7 @@ void QDocDatabase::findAllClasses(InnerNode* node)
compatClasses_.insert(className, *c);
}
else {
- nonCompatClasses_.insert(className, *c);
+ cppClasses_.insert(className, *c);
if ((*c)->status() == Node::Main)
mainClasses_.insert(className, *c);
}
@@ -1000,9 +1012,9 @@ void QDocDatabase::findAllClasses(InnerNode* node)
else if (((*c)->isQmlType() || (*c)->isQmlBasicType())&& !(*c)->doc().isEmpty()) {
QString qmlTypeName = (*c)->name();
if (qmlTypeName.startsWith(QLatin1String("QML:")))
- qmlClasses_.insert(qmlTypeName.mid(4),*c);
+ qmlTypes_.insert(qmlTypeName.mid(4),*c);
else
- qmlClasses_.insert(qmlTypeName,*c);
+ qmlTypes_.insert(qmlTypeName,*c);
//also add to the QML basic type map
if ((*c)->isQmlBasicType())
@@ -1022,7 +1034,6 @@ void QDocDatabase::findAllClasses(InnerNode* node)
*/
NodeMapMap& QDocDatabase::getFunctionIndex()
{
- funcIndex_.clear();
processForest(&QDocDatabase::findAllFunctions);
return funcIndex_;
}
@@ -1314,7 +1325,15 @@ const NodeMultiMap& QDocDatabase::getSinceMap(const QString& key)
*/
void QDocDatabase::resolveIssues() {
resolveQmlInheritance(primaryTreeRoot());
- resolveTargets();
+ primaryTree()->resolveTargets(primaryTreeRoot());
+ primaryTree()->resolveCppToQmlLinks();
+}
+
+void QDocDatabase::resolveStuff()
+{
+ primaryTree()->resolveInheritance();
+ resolveQmlInheritance(primaryTreeRoot());
+ //primaryTree()->resolveTargets(primaryTreeRoot());
primaryTree()->resolveCppToQmlLinks();
}
@@ -1424,10 +1443,18 @@ void QDocDatabase::generateTagFile(const QString& name, Generator* g)
}
/*!
- Reads and parses the qdoc index files listed in \a indexFiles.
+ Reads and parses the qdoc index files listed in \a t.
*/
-void QDocDatabase::readIndexes(const QStringList& indexFiles)
+void QDocDatabase::readIndexes(const QStringList& t)
{
+ QStringList indexFiles;
+ foreach (const QString& f, t) {
+ QString fn = f.mid(f.lastIndexOf(QChar('/'))+1);
+ if (!isLoaded(fn))
+ indexFiles << f;
+ else
+ qDebug() << "This index file is already in memory:" << f;
+ }
QDocIndexFiles::qdocIndexFiles()->readIndexes(indexFiles);
QDocIndexFiles::destroyQDocIndexFiles();
}
@@ -1443,6 +1470,8 @@ void QDocDatabase::generateIndex(const QString& fileName,
Generator* g,
bool generateInternalNodes)
{
+ QString t = fileName.mid(fileName.lastIndexOf(QChar('/'))+1);
+ primaryTree()->setIndexFileName(t);
QDocIndexFiles::qdocIndexFiles()->generateIndex(fileName, url, title, g, generateInternalNodes);
QDocIndexFiles::destroyQDocIndexFiles();
}
@@ -1577,10 +1606,11 @@ void QDocDatabase::mergeCollections(CollectionNode* cn)
\a ref. If the returned node pointer is null, \a ref is not
valid.
*/
-const Node* QDocDatabase::findNodeForAtom(const Atom* atom, const Node* relative, QString& ref)
+const Node* QDocDatabase::findNodeForAtom(const Atom* a, const Node* relative, QString& ref)
{
const Node* node = 0;
+ Atom* atom = const_cast<Atom*>(a);
QStringList targetPath = atom->string().split("#");
QString first = targetPath.first().trimmed();
diff --git a/src/tools/qdoc/qdocdatabase.h b/src/tools/qdoc/qdocdatabase.h
index 8b67aca971..bc7a912740 100644
--- a/src/tools/qdoc/qdocdatabase.h
+++ b/src/tools/qdoc/qdocdatabase.h
@@ -73,12 +73,22 @@ class QDocForest
Tree* nextTree();
Tree* primaryTree() { return primaryTree_; }
Tree* findTree(const QString& t) { return forest_.value(t); }
+ QStringList keys() {
+ return forest_.keys();
+ }
NamespaceNode* primaryTreeRoot() { return (primaryTree_ ? primaryTree_->root() : 0); }
bool isEmpty() { return searchOrder().isEmpty(); }
bool done() { return (currentIndex_ >= searchOrder().size()); }
const QVector<Tree*>& searchOrder();
const QVector<Tree*>& indexSearchOrder();
- void setSearchOrder();
+ void setSearchOrder(QStringList& t);
+ bool isLoaded(const QString& fn) {
+ foreach (Tree* t, searchOrder()) {
+ if (fn == t->indexFileName())
+ return true;
+ }
+ return false;
+ }
const Node* findNode(const QStringList& path,
const Node* relative,
@@ -186,8 +196,18 @@ class QDocForest
}
}
+ void clearSearchOrder() { searchOrder_.clear(); }
+ void clearLinkCounts()
+ {
+ foreach (Tree* t, searchOrder())
+ t->clearLinkCount();
+ }
+ void printLinkCounts(const QString& project);
+ QString getLinkCounts(QStringList& strings, QVector<int>& counts);
+
private:
void newPrimaryTree(const QString& module);
+ void setPrimaryTree(const QString& t);
NamespaceNode* newIndexTree(const QString& module);
private:
@@ -274,12 +294,10 @@ class QDocDatabase
void resolveInheritance() { primaryTree()->resolveInheritance(); }
void resolveQmlInheritance(InnerNode* root);
void resolveIssues();
+ void resolveStuff();
void fixInheritance() { primaryTree()->fixInheritance(); }
void resolveProperties() { primaryTree()->resolveProperties(); }
- void resolveTargets() {
- primaryTree()->resolveTargets(primaryTreeRoot());
- }
void insertTarget(const QString& name,
const QString& title,
TargetRec::Type type,
@@ -355,18 +373,40 @@ class QDocDatabase
void clearOpenNamespaces() { openNamespaces_.clear(); }
void insertOpenNamespace(const QString& path) { openNamespaces_.insert(path); }
void setShowInternal(bool value) { showInternal_ = value; }
+ void setSingleExec(bool value) { singleExec_ = value; }
+ void processForest();
// Try to make this function private.
QDocForest& forest() { return forest_; }
NamespaceNode* primaryTreeRoot() { return forest_.primaryTreeRoot(); }
void newPrimaryTree(const QString& module) { forest_.newPrimaryTree(module); }
+ void setPrimaryTree(const QString& t) { forest_.setPrimaryTree(t); }
NamespaceNode* newIndexTree(const QString& module) { return forest_.newIndexTree(module); }
const QVector<Tree*>& searchOrder() { return forest_.searchOrder(); }
void setLocalSearch() { forest_.searchOrder_ = QVector<Tree*>(1, primaryTree()); }
void setSearchOrder(const QVector<Tree*>& searchOrder) { forest_.searchOrder_ = searchOrder; }
- void setSearchOrder() { forest_.setSearchOrder(); }
+ void setSearchOrder(QStringList& t) { forest_.setSearchOrder(t); }
void mergeCollections(Node::Type nt, CNMap& cnm, const Node* relative);
void mergeCollections(CollectionNode* cn);
+ void clearSearchOrder() { forest_.clearSearchOrder(); }
+ void incrementLinkCount(const Node* t) { t->tree()->incrementLinkCount(); }
+ void clearLinkCounts() { forest_.clearLinkCounts(); }
+ void printLinkCounts(const QString& t) { forest_.printLinkCounts(t); }
+ QString getLinkCounts(QStringList& strings, QVector<int>& counts) {
+ return forest_.getLinkCounts(strings, counts);
+ }
+ QString getNewLinkTarget(const Node* locNode,
+ const Node* t,
+ const QString& fileName,
+ QString& text,
+ bool broken = false) {
+ return primaryTree()->getNewLinkTarget(locNode, t, fileName, text, broken);
+ }
+ TargetList* getTargetList(const QString& t) { return primaryTree()->getTargetList(t); }
+ QStringList getTargetListKeys() { return primaryTree()->getTargetListKeys(); }
+ QStringList keys() {
+ return forest_.keys();
+ }
private:
friend class QDocIndexFiles;
@@ -379,6 +419,7 @@ class QDocDatabase
return forest_.findNode(path, relative, findFlags, genus);
}
void processForest(void (QDocDatabase::*) (InnerNode*));
+ bool isLoaded(const QString& t) { return forest_.isLoaded(t); }
static void initializeDB();
private:
@@ -394,20 +435,21 @@ class QDocDatabase
static QDocDatabase* qdocDB_;
static NodeMap typeNodeMap_;
bool showInternal_;
+ bool singleExec_;
QString version_;
QDocForest forest_;
- NodeMap nonCompatClasses_;
- NodeMap mainClasses_;
+ NodeMap cppClasses_;
+ NodeMap mainClasses_; // MWS: not needed, should be delete
NodeMap compatClasses_;
NodeMap obsoleteClasses_;
NodeMap classesWithObsoleteMembers_;
NodeMap obsoleteQmlTypes_;
NodeMap qmlTypesWithObsoleteMembers_;
NodeMap namespaceIndex_;
- NodeMap serviceClasses_;
+ NodeMap serviceClasses_; // MWS: not needed, should be deleted
NodeMap qmlBasicTypes_;
- NodeMap qmlClasses_;
+ NodeMap qmlTypes_;
NodeMapMap newClassMaps_;
NodeMapMap newQmlTypeMaps_;
NodeMultiMapMap newSinceMaps_;
diff --git a/src/tools/qdoc/qdocindexfiles.cpp b/src/tools/qdoc/qdocindexfiles.cpp
index 00041b2b65..e152b04ead 100644
--- a/src/tools/qdoc/qdocindexfiles.cpp
+++ b/src/tools/qdoc/qdocindexfiles.cpp
@@ -564,7 +564,6 @@ void QDocIndexFiles::readIndexSection(const QDomElement& element,
node->setReconstitutedBrief(briefAttr);
}
- // zzz
bool useParent = (element.nodeName() == "namespace" && name.isEmpty());
if (element.hasChildNodes()) {
QDomElement child = element.firstChildElement();
@@ -806,11 +805,14 @@ bool QDocIndexFiles::generateIndexSection(QXmlStreamWriter& writer,
QString fullName = node->fullDocumentName();
if (fullName != objName)
writer.writeAttribute("fullname", fullName);
+#if 0
if (Generator::useOutputSubdirs())
href = node->outputSubdirectory();
if (!href.isEmpty())
href.append(QLatin1Char('/'));
href.append(gen_->fullDocumentLocation(node));
+#endif
+ href = gen_->fullDocumentLocation(node);
}
else
href = node->name();
diff --git a/src/tools/qdoc/qmlcodemarker.h b/src/tools/qdoc/qmlcodemarker.h
index c6e4aa7e19..e9a54710df 100644
--- a/src/tools/qdoc/qmlcodemarker.h
+++ b/src/tools/qdoc/qmlcodemarker.h
@@ -51,19 +51,19 @@ public:
QmlCodeMarker();
~QmlCodeMarker();
- virtual bool recognizeCode(const QString &code);
- virtual bool recognizeExtension(const QString &ext);
- virtual bool recognizeLanguage(const QString &language);
- virtual Atom::Type atomType() const;
+ virtual bool recognizeCode(const QString &code) Q_DECL_OVERRIDE;
+ virtual bool recognizeExtension(const QString &ext) Q_DECL_OVERRIDE;
+ virtual bool recognizeLanguage(const QString &language) Q_DECL_OVERRIDE;
+ virtual Atom::Type atomType() const Q_DECL_OVERRIDE;
virtual QString markedUpCode(const QString &code,
const Node *relative,
- const Location &location);
+ const Location &location) Q_DECL_OVERRIDE;
- virtual QString markedUpName(const Node *node);
- virtual QString markedUpFullName(const Node *node, const Node *relative);
- virtual QString markedUpIncludes(const QStringList &includes);
- virtual QString functionBeginRegExp(const QString &funcName);
- virtual QString functionEndRegExp(const QString &funcName);
+ virtual QString markedUpName(const Node *node) Q_DECL_OVERRIDE;
+ virtual QString markedUpFullName(const Node *node, const Node *relative) Q_DECL_OVERRIDE;
+ virtual QString markedUpIncludes(const QStringList &includes) Q_DECL_OVERRIDE;
+ virtual QString functionBeginRegExp(const QString &funcName) Q_DECL_OVERRIDE;
+ virtual QString functionEndRegExp(const QString &funcName) Q_DECL_OVERRIDE;
/* Copied from src/declarative/qml/qdeclarativescriptparser.cpp */
QList<QQmlJS::AST::SourceLocation> extractPragmas(QString &script);
diff --git a/src/tools/qdoc/qmlcodeparser.h b/src/tools/qdoc/qmlcodeparser.h
index cf60b1d7d7..715b4278b9 100644
--- a/src/tools/qdoc/qmlcodeparser.h
+++ b/src/tools/qdoc/qmlcodeparser.h
@@ -59,12 +59,12 @@ public:
QmlCodeParser();
virtual ~QmlCodeParser();
- virtual void initializeParser(const Config& config);
- virtual void terminateParser();
- virtual QString language();
- virtual QStringList sourceFileNameFilter();
- virtual void parseSourceFile(const Location& location, const QString& filePath);
- virtual void doneParsingSourceFiles();
+ virtual void initializeParser(const Config& config) Q_DECL_OVERRIDE;
+ virtual void terminateParser() Q_DECL_OVERRIDE;
+ virtual QString language() Q_DECL_OVERRIDE;
+ virtual QStringList sourceFileNameFilter() Q_DECL_OVERRIDE;
+ virtual void parseSourceFile(const Location& location, const QString& filePath) Q_DECL_OVERRIDE;
+ virtual void doneParsingSourceFiles() Q_DECL_OVERRIDE;
/* Copied from src/declarative/qml/qdeclarativescriptparser.cpp */
void extractPragmas(QString &script);
diff --git a/src/tools/qdoc/qmlmarkupvisitor.h b/src/tools/qdoc/qmlmarkupvisitor.h
index 09aa1f7400..4debce9129 100644
--- a/src/tools/qdoc/qmlmarkupvisitor.h
+++ b/src/tools/qdoc/qmlmarkupvisitor.h
@@ -56,92 +56,92 @@ public:
QString markedUpCode();
- virtual bool visit(QQmlJS::AST::UiImport *);
- virtual void endVisit(QQmlJS::AST::UiImport *);
-
- virtual bool visit(QQmlJS::AST::UiPublicMember *);
- virtual bool visit(QQmlJS::AST::UiObjectDefinition *);
-
- virtual bool visit(QQmlJS::AST::UiObjectInitializer *);
- virtual void endVisit(QQmlJS::AST::UiObjectInitializer *);
-
- virtual bool visit(QQmlJS::AST::UiObjectBinding *);
- virtual bool visit(QQmlJS::AST::UiScriptBinding *);
- virtual bool visit(QQmlJS::AST::UiArrayBinding *);
- virtual bool visit(QQmlJS::AST::UiArrayMemberList *);
- virtual bool visit(QQmlJS::AST::UiQualifiedId *);
-
- virtual bool visit(QQmlJS::AST::ThisExpression *);
- virtual bool visit(QQmlJS::AST::IdentifierExpression *);
- virtual bool visit(QQmlJS::AST::NullExpression *);
- virtual bool visit(QQmlJS::AST::TrueLiteral *);
- virtual bool visit(QQmlJS::AST::FalseLiteral *);
- virtual bool visit(QQmlJS::AST::NumericLiteral *);
- virtual bool visit(QQmlJS::AST::StringLiteral *);
- virtual bool visit(QQmlJS::AST::RegExpLiteral *);
- virtual bool visit(QQmlJS::AST::ArrayLiteral *);
-
- virtual bool visit(QQmlJS::AST::ObjectLiteral *);
- virtual void endVisit(QQmlJS::AST::ObjectLiteral *);
-
- virtual bool visit(QQmlJS::AST::ElementList *);
- virtual bool visit(QQmlJS::AST::Elision *);
- virtual bool visit(QQmlJS::AST::PropertyNameAndValue *);
- virtual bool visit(QQmlJS::AST::ArrayMemberExpression *);
- virtual bool visit(QQmlJS::AST::FieldMemberExpression *);
- virtual bool visit(QQmlJS::AST::NewMemberExpression *);
- virtual bool visit(QQmlJS::AST::NewExpression *);
- virtual bool visit(QQmlJS::AST::ArgumentList *);
- virtual bool visit(QQmlJS::AST::PostIncrementExpression *);
- virtual bool visit(QQmlJS::AST::PostDecrementExpression *);
- virtual bool visit(QQmlJS::AST::DeleteExpression *);
- virtual bool visit(QQmlJS::AST::VoidExpression *);
- virtual bool visit(QQmlJS::AST::TypeOfExpression *);
- virtual bool visit(QQmlJS::AST::PreIncrementExpression *);
- virtual bool visit(QQmlJS::AST::PreDecrementExpression *);
- virtual bool visit(QQmlJS::AST::UnaryPlusExpression *);
- virtual bool visit(QQmlJS::AST::UnaryMinusExpression *);
- virtual bool visit(QQmlJS::AST::TildeExpression *);
- virtual bool visit(QQmlJS::AST::NotExpression *);
- virtual bool visit(QQmlJS::AST::BinaryExpression *);
- virtual bool visit(QQmlJS::AST::ConditionalExpression *);
- virtual bool visit(QQmlJS::AST::Expression *);
-
- virtual bool visit(QQmlJS::AST::Block *);
- virtual void endVisit(QQmlJS::AST::Block *);
-
- virtual bool visit(QQmlJS::AST::VariableStatement *);
- virtual bool visit(QQmlJS::AST::VariableDeclarationList *);
- virtual bool visit(QQmlJS::AST::VariableDeclaration *);
- virtual bool visit(QQmlJS::AST::EmptyStatement *);
- virtual bool visit(QQmlJS::AST::ExpressionStatement *);
- virtual bool visit(QQmlJS::AST::IfStatement *);
- virtual bool visit(QQmlJS::AST::DoWhileStatement *);
- virtual bool visit(QQmlJS::AST::WhileStatement *);
- virtual bool visit(QQmlJS::AST::ForStatement *);
- virtual bool visit(QQmlJS::AST::LocalForStatement *);
- virtual bool visit(QQmlJS::AST::ForEachStatement *);
- virtual bool visit(QQmlJS::AST::LocalForEachStatement *);
- virtual bool visit(QQmlJS::AST::ContinueStatement *);
- virtual bool visit(QQmlJS::AST::BreakStatement *);
- virtual bool visit(QQmlJS::AST::ReturnStatement *);
- virtual bool visit(QQmlJS::AST::WithStatement *);
-
- virtual bool visit(QQmlJS::AST::CaseBlock *);
- virtual void endVisit(QQmlJS::AST::CaseBlock *);
-
- virtual bool visit(QQmlJS::AST::SwitchStatement *);
- virtual bool visit(QQmlJS::AST::CaseClause *);
- virtual bool visit(QQmlJS::AST::DefaultClause *);
- virtual bool visit(QQmlJS::AST::LabelledStatement *);
- virtual bool visit(QQmlJS::AST::ThrowStatement *);
- virtual bool visit(QQmlJS::AST::TryStatement *);
- virtual bool visit(QQmlJS::AST::Catch *);
- virtual bool visit(QQmlJS::AST::Finally *);
- virtual bool visit(QQmlJS::AST::FunctionDeclaration *);
- virtual bool visit(QQmlJS::AST::FunctionExpression *);
- virtual bool visit(QQmlJS::AST::FormalParameterList *);
- virtual bool visit(QQmlJS::AST::DebuggerStatement *);
+ virtual bool visit(QQmlJS::AST::UiImport *) Q_DECL_OVERRIDE;
+ virtual void endVisit(QQmlJS::AST::UiImport *) Q_DECL_OVERRIDE;
+
+ virtual bool visit(QQmlJS::AST::UiPublicMember *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::UiObjectDefinition *) Q_DECL_OVERRIDE;
+
+ virtual bool visit(QQmlJS::AST::UiObjectInitializer *) Q_DECL_OVERRIDE;
+ virtual void endVisit(QQmlJS::AST::UiObjectInitializer *) Q_DECL_OVERRIDE;
+
+ virtual bool visit(QQmlJS::AST::UiObjectBinding *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::UiScriptBinding *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::UiArrayBinding *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::UiArrayMemberList *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::UiQualifiedId *) Q_DECL_OVERRIDE;
+
+ virtual bool visit(QQmlJS::AST::ThisExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::IdentifierExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::NullExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::TrueLiteral *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::FalseLiteral *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::NumericLiteral *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::StringLiteral *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::RegExpLiteral *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::ArrayLiteral *) Q_DECL_OVERRIDE;
+
+ virtual bool visit(QQmlJS::AST::ObjectLiteral *) Q_DECL_OVERRIDE;
+ virtual void endVisit(QQmlJS::AST::ObjectLiteral *) Q_DECL_OVERRIDE;
+
+ virtual bool visit(QQmlJS::AST::ElementList *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::Elision *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::PropertyNameAndValue *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::ArrayMemberExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::FieldMemberExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::NewMemberExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::NewExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::ArgumentList *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::PostIncrementExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::PostDecrementExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::DeleteExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::VoidExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::TypeOfExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::PreIncrementExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::PreDecrementExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::UnaryPlusExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::UnaryMinusExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::TildeExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::NotExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::BinaryExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::ConditionalExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::Expression *) Q_DECL_OVERRIDE;
+
+ virtual bool visit(QQmlJS::AST::Block *) Q_DECL_OVERRIDE;
+ virtual void endVisit(QQmlJS::AST::Block *) Q_DECL_OVERRIDE;
+
+ virtual bool visit(QQmlJS::AST::VariableStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::VariableDeclarationList *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::VariableDeclaration *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::EmptyStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::ExpressionStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::IfStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::DoWhileStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::WhileStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::ForStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::LocalForStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::ForEachStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::LocalForEachStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::ContinueStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::BreakStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::ReturnStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::WithStatement *) Q_DECL_OVERRIDE;
+
+ virtual bool visit(QQmlJS::AST::CaseBlock *) Q_DECL_OVERRIDE;
+ virtual void endVisit(QQmlJS::AST::CaseBlock *) Q_DECL_OVERRIDE;
+
+ virtual bool visit(QQmlJS::AST::SwitchStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::CaseClause *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::DefaultClause *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::LabelledStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::ThrowStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::TryStatement *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::Catch *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::Finally *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::FunctionDeclaration *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::FunctionExpression *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::FormalParameterList *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::DebuggerStatement *) Q_DECL_OVERRIDE;
protected:
QString protect(const QString &string);
diff --git a/src/tools/qdoc/qmlparser/qqmljsast_p.h b/src/tools/qdoc/qmlparser/qqmljsast_p.h
index fa4b2c3e13..ae79046563 100644
--- a/src/tools/qdoc/qmlparser/qqmljsast_p.h
+++ b/src/tools/qdoc/qmlparser/qqmljsast_p.h
@@ -247,7 +247,7 @@ class QML_PARSER_EXPORT ExpressionNode: public Node
public:
ExpressionNode() {}
- virtual ExpressionNode *expressionCast();
+ virtual ExpressionNode *expressionCast() Q_DECL_OVERRIDE;
};
class QML_PARSER_EXPORT Statement: public Node
@@ -255,7 +255,7 @@ class QML_PARSER_EXPORT Statement: public Node
public:
Statement() {}
- virtual Statement *statementCast();
+ virtual Statement *statementCast() Q_DECL_OVERRIDE;
};
class QML_PARSER_EXPORT NestedExpression: public ExpressionNode
@@ -267,12 +267,12 @@ public:
: expression(expression)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return lparenToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return rparenToken; }
// attributes
@@ -288,12 +288,12 @@ public:
ThisExpression() { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return thisToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return thisToken; }
// attributes
@@ -308,12 +308,12 @@ public:
IdentifierExpression(const QStringRef &n):
name (n) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return identifierToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return identifierToken; }
// attributes
@@ -328,12 +328,12 @@ public:
NullExpression() { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return nullToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return nullToken; }
// attributes
@@ -347,12 +347,12 @@ public:
TrueLiteral() { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return trueToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return trueToken; }
// attributes
@@ -366,12 +366,12 @@ public:
FalseLiteral() { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return falseToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return falseToken; }
// attributes
@@ -386,12 +386,12 @@ public:
NumericLiteral(double v):
value(v) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return literalToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return literalToken; }
// attributes:
@@ -407,12 +407,12 @@ public:
StringLiteral(const QStringRef &v):
value (v) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return literalToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return literalToken; }
// attributes:
@@ -428,12 +428,12 @@ public:
RegExpLiteral(const QStringRef &p, int f):
pattern (p), flags (f) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return literalToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return literalToken; }
// attributes:
@@ -459,12 +459,12 @@ public:
elements (elts), elision (e)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return lbracketToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return rbracketToken; }
// attributes
@@ -486,12 +486,12 @@ public:
ObjectLiteral(PropertyAssignmentList *plist):
properties (plist) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return lbraceToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return rbraceToken; }
// attributes
@@ -515,12 +515,12 @@ public:
previous->next = this;
}
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return commaToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return next ? next->lastSourceLocation() : commaToken; }
inline Elision *finish ()
@@ -559,16 +559,16 @@ public:
return front;
}
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{
if (elision)
return elision->firstSourceLocation();
return expression->firstSourceLocation();
}
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{
if (next)
return next->lastSourceLocation();
@@ -589,10 +589,10 @@ public:
PropertyName() { kind = K; }
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return propertyNameToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return propertyNameToken; }
// attributes
@@ -630,12 +630,12 @@ public:
return front;
}
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return assignment->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return next ? next->lastSourceLocation() : assignment->lastSourceLocation(); }
// attributes
@@ -653,12 +653,12 @@ public:
: name(n), value(v)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return name->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return value->lastSourceLocation(); }
// attributes
@@ -686,12 +686,12 @@ public:
: type(Setter), name(n), formals(f), functionBody (b)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return getSetToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return rbraceToken; }
// attributes
@@ -714,7 +714,7 @@ public:
IdentifierPropertyName(const QStringRef &n):
id (n) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
// attributes
QStringRef id;
@@ -728,7 +728,7 @@ public:
StringLiteralPropertyName(const QStringRef &n):
id (n) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
// attributes
QStringRef id;
@@ -742,7 +742,7 @@ public:
NumericLiteralPropertyName(double n):
id (n) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
// attributes
double id;
@@ -757,12 +757,12 @@ public:
base (b), expression (e)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return base->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return rbracketToken; }
// attributes
@@ -781,12 +781,12 @@ public:
base (b), name (n)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return base->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return identifierToken; }
// attributes
@@ -805,12 +805,12 @@ public:
base (b), arguments (a)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return newToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return rparenToken; }
// attributes
@@ -829,12 +829,12 @@ public:
NewExpression(ExpressionNode *e):
expression (e) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return newToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return expression->lastSourceLocation(); }
// attributes
@@ -851,12 +851,12 @@ public:
base (b), arguments (a)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return base->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return rparenToken; }
// attributes
@@ -883,12 +883,12 @@ public:
previous->next = this;
}
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return expression->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{
if (next)
return next->lastSourceLocation();
@@ -916,12 +916,12 @@ public:
PostIncrementExpression(ExpressionNode *b):
base (b) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return base->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return incrementToken; }
// attributes
@@ -937,12 +937,12 @@ public:
PostDecrementExpression(ExpressionNode *b):
base (b) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return base->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return decrementToken; }
// attributes
@@ -958,12 +958,12 @@ public:
DeleteExpression(ExpressionNode *e):
expression (e) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return deleteToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return expression->lastSourceLocation(); }
// attributes
@@ -979,12 +979,12 @@ public:
VoidExpression(ExpressionNode *e):
expression (e) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return voidToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return expression->lastSourceLocation(); }
// attributes
@@ -1000,12 +1000,12 @@ public:
TypeOfExpression(ExpressionNode *e):
expression (e) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return typeofToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return expression->lastSourceLocation(); }
// attributes
@@ -1021,12 +1021,12 @@ public:
PreIncrementExpression(ExpressionNode *e):
expression (e) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return incrementToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return expression->lastSourceLocation(); }
// attributes
@@ -1042,12 +1042,12 @@ public:
PreDecrementExpression(ExpressionNode *e):
expression (e) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return decrementToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return expression->lastSourceLocation(); }
// attributes
@@ -1063,12 +1063,12 @@ public:
UnaryPlusExpression(ExpressionNode *e):
expression (e) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return plusToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return expression->lastSourceLocation(); }
// attributes
@@ -1084,12 +1084,12 @@ public:
UnaryMinusExpression(ExpressionNode *e):
expression (e) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return minusToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return expression->lastSourceLocation(); }
// attributes
@@ -1105,12 +1105,12 @@ public:
TildeExpression(ExpressionNode *e):
expression (e) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return tildeToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return expression->lastSourceLocation(); }
// attributes
@@ -1126,12 +1126,12 @@ public:
NotExpression(ExpressionNode *e):
expression (e) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return notToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return expression->lastSourceLocation(); }
// attributes
@@ -1148,14 +1148,14 @@ public:
left (l), op (o), right (r)
{ kind = K; }
- virtual BinaryExpression *binaryExpressionCast();
+ virtual BinaryExpression *binaryExpressionCast() Q_DECL_OVERRIDE;
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return left->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return right->lastSourceLocation(); }
// attributes
@@ -1174,12 +1174,12 @@ public:
expression (e), ok (t), ko (f)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return expression->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return ko->lastSourceLocation(); }
// attributes
@@ -1198,12 +1198,12 @@ public:
Expression(ExpressionNode *l, ExpressionNode *r):
left (l), right (r) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return left->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return right->lastSourceLocation(); }
// attributes
@@ -1220,12 +1220,12 @@ public:
Block(StatementList *slist):
statements (slist) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return lbraceToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return rbraceToken; }
// attributes
@@ -1251,12 +1251,12 @@ public:
previous->next = this;
}
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return statement->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return next ? next->lastSourceLocation() : statement->lastSourceLocation(); }
inline StatementList *finish ()
@@ -1280,12 +1280,12 @@ public:
declarations (vlist)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return declarationKindToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return semicolonToken; }
// attributes
@@ -1303,12 +1303,12 @@ public:
name (n), expression (e), readOnly(false)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return identifierToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return expression ? expression->lastSourceLocation() : identifierToken; }
// attributes
@@ -1335,12 +1335,12 @@ public:
previous->next = this;
}
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return declaration->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{
if (next)
return next->lastSourceLocation();
@@ -1372,12 +1372,12 @@ public:
EmptyStatement() { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return semicolonToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return semicolonToken; }
// attributes
@@ -1392,12 +1392,12 @@ public:
ExpressionStatement(ExpressionNode *e):
expression (e) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return expression->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return semicolonToken; }
// attributes
@@ -1414,12 +1414,12 @@ public:
expression (e), ok (t), ko (f)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return ifToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{
if (ko)
return ko->lastSourceLocation();
@@ -1446,12 +1446,12 @@ public:
statement (stmt), expression (e)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return doToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return semicolonToken; }
// attributes
@@ -1473,12 +1473,12 @@ public:
expression (e), statement (stmt)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return whileToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return statement->lastSourceLocation(); }
// attributes
@@ -1498,12 +1498,12 @@ public:
initialiser (i), condition (c), expression (e), statement (stmt)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return forToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return statement->lastSourceLocation(); }
// attributes
@@ -1527,12 +1527,12 @@ public:
declarations (vlist), condition (c), expression (e), statement (stmt)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return forToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return statement->lastSourceLocation(); }
// attributes
@@ -1557,12 +1557,12 @@ public:
initialiser (i), expression (e), statement (stmt)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return forToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return statement->lastSourceLocation(); }
// attributes
@@ -1584,12 +1584,12 @@ public:
declaration (v), expression (e), statement (stmt)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return forToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return statement->lastSourceLocation(); }
// attributes
@@ -1611,12 +1611,12 @@ public:
ContinueStatement(const QStringRef &l = QStringRef()):
label (l) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return continueToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return semicolonToken; }
// attributes
@@ -1634,12 +1634,12 @@ public:
BreakStatement(const QStringRef &l):
label (l) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return breakToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return semicolonToken; }
// attributes
@@ -1657,12 +1657,12 @@ public:
ReturnStatement(ExpressionNode *e):
expression (e) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return returnToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return semicolonToken; }
// attributes
@@ -1680,12 +1680,12 @@ public:
expression (e), statement (stmt)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return withToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return statement->lastSourceLocation(); }
// attributes
@@ -1705,12 +1705,12 @@ public:
clauses (c), defaultClause (d), moreClauses (r)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return lbraceToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return rbraceToken; }
// attributes
@@ -1730,12 +1730,12 @@ public:
expression (e), block (b)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return switchToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return block->rbraceToken; }
// attributes
@@ -1755,12 +1755,12 @@ public:
expression (e), statements (slist)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return caseToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return statements ? statements->lastSourceLocation() : colonToken; }
// attributes
@@ -1787,12 +1787,12 @@ public:
previous->next = this;
}
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return clause->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return next ? next->lastSourceLocation() : clause->lastSourceLocation(); }
inline CaseClauses *finish ()
@@ -1816,12 +1816,12 @@ public:
statements (slist)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return defaultToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return statements ? statements->lastSourceLocation() : colonToken; }
// attributes
@@ -1839,12 +1839,12 @@ public:
label (l), statement (stmt)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return identifierToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return statement->lastSourceLocation(); }
// attributes
@@ -1862,12 +1862,12 @@ public:
ThrowStatement(ExpressionNode *e):
expression (e) { kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return throwToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return semicolonToken; }
// attributes
@@ -1885,12 +1885,12 @@ public:
name (n), statement (stmt)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return catchToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return statement->lastSourceLocation(); }
// attributes
@@ -1911,12 +1911,12 @@ public:
statement (stmt)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return finallyToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return statement ? statement->lastSourceLocation() : finallyToken; }
// attributes
@@ -1941,12 +1941,12 @@ public:
statement (stmt), catchExpression (c), finallyExpression (0)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return tryToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{
if (finallyExpression)
return finallyExpression->statement->rbraceToken;
@@ -1972,12 +1972,12 @@ public:
name (n), formals (f), body (b)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return functionToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return rbraceToken; }
// attributes
@@ -2001,7 +2001,7 @@ public:
FunctionExpression(n, f, b)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
};
class QML_PARSER_EXPORT FormalParameterList: public Node
@@ -2021,12 +2021,12 @@ public:
previous->next = this;
}
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return identifierToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return next ? next->lastSourceLocation() : identifierToken; }
inline FormalParameterList *finish ()
@@ -2069,12 +2069,12 @@ public:
previous->next = this;
}
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return element->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return next ? next->lastSourceLocation() : element->lastSourceLocation(); }
inline SourceElements *finish ()
@@ -2098,12 +2098,12 @@ public:
elements (elts)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return elements ? elements->firstSourceLocation() : SourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return elements ? elements->lastSourceLocation() : SourceLocation(); }
// attributes
@@ -2119,12 +2119,12 @@ public:
elements (elts)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return elements ? elements->firstSourceLocation() : SourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return elements ? elements->lastSourceLocation() : SourceLocation(); }
// attributes
@@ -2140,12 +2140,12 @@ public:
declaration (f)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return declaration->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return declaration->lastSourceLocation(); }
// attributes
@@ -2161,12 +2161,12 @@ public:
statement (stmt)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return statement->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return statement->lastSourceLocation(); }
// attributes
@@ -2181,12 +2181,12 @@ public:
DebuggerStatement()
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return debuggerToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return semicolonToken; }
// attributes
@@ -2218,12 +2218,12 @@ public:
return head;
}
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return identifierToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return next ? next->lastSourceLocation() : identifierToken; }
// attributes
@@ -2245,12 +2245,12 @@ public:
: importUri(uri)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return importToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return semicolonToken; }
// attributes
@@ -2271,7 +2271,7 @@ public:
virtual SourceLocation firstSourceLocation() const = 0;
virtual SourceLocation lastSourceLocation() const = 0;
- virtual UiObjectMember *uiObjectMemberCast();
+ virtual UiObjectMember *uiObjectMemberCast() Q_DECL_OVERRIDE;
};
class QML_PARSER_EXPORT UiObjectMemberList: public Node
@@ -2291,12 +2291,12 @@ public:
previous->next = this;
}
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return member->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return next ? next->lastSourceLocation() : member->lastSourceLocation(); }
UiObjectMemberList *finish()
@@ -2335,12 +2335,12 @@ public:
return head;
}
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return identifierToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return next ? next->lastSourceLocation() : identifierToken; }
// attributes
@@ -2358,12 +2358,12 @@ public:
: pragmaType(type)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return pragmaToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return semicolonToken; }
// attributes
@@ -2408,12 +2408,12 @@ public:
return head;
}
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return headerItem->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return next ? next->lastSourceLocation() : headerItem->lastSourceLocation(); }
// attributes
@@ -2430,9 +2430,9 @@ public:
: headers(headers), members(members)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{
if (headers)
return headers->firstSourceLocation();
@@ -2441,7 +2441,7 @@ public:
return SourceLocation();
}
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{
if (members)
return members->lastSourceLocation();
@@ -2472,12 +2472,12 @@ public:
previous->next = this;
}
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return member->firstSourceLocation(); }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return next ? next->lastSourceLocation() : member->lastSourceLocation(); }
UiArrayMemberList *finish()
@@ -2502,12 +2502,12 @@ public:
: members(members)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return lbraceToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return rbraceToken; }
// attributes
@@ -2533,12 +2533,12 @@ public:
previous->next = this;
}
- virtual void accept0(Visitor *);
+ virtual void accept0(Visitor *) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return propertyTypeToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return next ? next->lastSourceLocation() : identifierToken; }
inline UiParameterList *finish ()
@@ -2573,9 +2573,9 @@ public:
: type(Property), memberType(memberType), name(name), statement(statement), binding(0), isDefaultMember(false), isReadonlyMember(false), parameters(0)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{
if (defaultToken.isValid())
return defaultToken;
@@ -2585,7 +2585,7 @@ public:
return propertyToken;
}
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{
if (binding)
return binding->lastSourceLocation();
@@ -2625,12 +2625,12 @@ public:
: qualifiedTypeNameId(qualifiedTypeNameId), initializer(initializer)
{ kind = K; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return qualifiedTypeNameId->identifierToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return initializer->rbraceToken; }
// attributes
@@ -2647,7 +2647,7 @@ public:
: sourceElement(sourceElement)
{ kind = K; }
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{
if (FunctionDeclaration *funDecl = cast<FunctionDeclaration *>(sourceElement))
return funDecl->firstSourceLocation();
@@ -2657,7 +2657,7 @@ public:
return SourceLocation();
}
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{
if (FunctionDeclaration *funDecl = cast<FunctionDeclaration *>(sourceElement))
return funDecl->lastSourceLocation();
@@ -2667,7 +2667,7 @@ public:
return SourceLocation();
}
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
// attributes
@@ -2688,7 +2688,7 @@ public:
hasOnToken(false)
{ kind = K; }
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{
if (hasOnToken && qualifiedTypeNameId)
return qualifiedTypeNameId->identifierToken;
@@ -2696,10 +2696,10 @@ public:
return qualifiedId->identifierToken;
}
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return initializer->rbraceToken; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
// attributes
@@ -2721,13 +2721,13 @@ public:
statement(statement)
{ kind = K; }
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return qualifiedId->identifierToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return statement->lastSourceLocation(); }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
// attributes
UiQualifiedId *qualifiedId;
@@ -2746,13 +2746,13 @@ public:
members(members)
{ kind = K; }
- virtual SourceLocation firstSourceLocation() const
+ virtual SourceLocation firstSourceLocation() const Q_DECL_OVERRIDE
{ return qualifiedId->identifierToken; }
- virtual SourceLocation lastSourceLocation() const
+ virtual SourceLocation lastSourceLocation() const Q_DECL_OVERRIDE
{ return rbracketToken; }
- virtual void accept0(Visitor *visitor);
+ virtual void accept0(Visitor *visitor) Q_DECL_OVERRIDE;
// attributes
UiQualifiedId *qualifiedId;
diff --git a/src/tools/qdoc/qmlvisitor.h b/src/tools/qdoc/qmlvisitor.h
index ed9ba7c6eb..418772cdff 100644
--- a/src/tools/qdoc/qmlvisitor.h
+++ b/src/tools/qdoc/qmlvisitor.h
@@ -67,30 +67,30 @@ public:
const QSet<QString> &topics);
virtual ~QmlDocVisitor();
- bool visit(QQmlJS::AST::UiImport *import);
- void endVisit(QQmlJS::AST::UiImport *definition);
+ bool visit(QQmlJS::AST::UiImport *import) Q_DECL_OVERRIDE;
+ void endVisit(QQmlJS::AST::UiImport *definition) Q_DECL_OVERRIDE;
- bool visit(QQmlJS::AST::UiObjectDefinition *definition);
- void endVisit(QQmlJS::AST::UiObjectDefinition *definition);
+ bool visit(QQmlJS::AST::UiObjectDefinition *definition) Q_DECL_OVERRIDE;
+ void endVisit(QQmlJS::AST::UiObjectDefinition *definition) Q_DECL_OVERRIDE;
- bool visit(QQmlJS::AST::UiPublicMember *member);
- void endVisit(QQmlJS::AST::UiPublicMember *definition);
+ bool visit(QQmlJS::AST::UiPublicMember *member) Q_DECL_OVERRIDE;
+ void endVisit(QQmlJS::AST::UiPublicMember *definition) Q_DECL_OVERRIDE;
- virtual bool visit(QQmlJS::AST::UiObjectBinding *);
- virtual void endVisit(QQmlJS::AST::UiObjectBinding *);
- virtual void endVisit(QQmlJS::AST::UiArrayBinding *);
- virtual bool visit(QQmlJS::AST::UiArrayBinding *);
+ virtual bool visit(QQmlJS::AST::UiObjectBinding *) Q_DECL_OVERRIDE;
+ virtual void endVisit(QQmlJS::AST::UiObjectBinding *) Q_DECL_OVERRIDE;
+ virtual void endVisit(QQmlJS::AST::UiArrayBinding *) Q_DECL_OVERRIDE;
+ virtual bool visit(QQmlJS::AST::UiArrayBinding *) Q_DECL_OVERRIDE;
- bool visit(QQmlJS::AST::IdentifierPropertyName *idproperty);
+ bool visit(QQmlJS::AST::IdentifierPropertyName *idproperty) Q_DECL_OVERRIDE;
- bool visit(QQmlJS::AST::FunctionDeclaration *);
- void endVisit(QQmlJS::AST::FunctionDeclaration *);
+ bool visit(QQmlJS::AST::FunctionDeclaration *) Q_DECL_OVERRIDE;
+ void endVisit(QQmlJS::AST::FunctionDeclaration *) Q_DECL_OVERRIDE;
- bool visit(QQmlJS::AST::UiScriptBinding *);
- void endVisit(QQmlJS::AST::UiScriptBinding *);
+ bool visit(QQmlJS::AST::UiScriptBinding *) Q_DECL_OVERRIDE;
+ void endVisit(QQmlJS::AST::UiScriptBinding *) Q_DECL_OVERRIDE;
- bool visit(QQmlJS::AST::UiQualifiedId *);
- void endVisit(QQmlJS::AST::UiQualifiedId *);
+ bool visit(QQmlJS::AST::UiQualifiedId *) Q_DECL_OVERRIDE;
+ void endVisit(QQmlJS::AST::UiQualifiedId *) Q_DECL_OVERRIDE;
private:
QString getFullyQualifiedId(QQmlJS::AST::UiQualifiedId *id);
diff --git a/src/tools/qdoc/tokenizer.cpp b/src/tools/qdoc/tokenizer.cpp
index 7c9e9f338a..dca1e9bb55 100644
--- a/src/tools/qdoc/tokenizer.cpp
+++ b/src/tools/qdoc/tokenizer.cpp
@@ -511,6 +511,9 @@ void Tokenizer::initialize(const Config &config)
defines = new QRegExp(d.join('|'));
falsehoods = new QRegExp(config.getStringList(CONFIG_FALSEHOODS).join('|'));
+ /*
+ The keyword hash table is always cleared before any words are inserted.
+ */
memset(kwordHashTable, 0, sizeof(kwordHashTable));
for (int i = 0; i < Tok_LastKeyword - Tok_FirstKeyword + 1; i++)
insertKwordIntoHash(kwords[i], i + 1);
@@ -533,6 +536,11 @@ void Tokenizer::initialize(const Config &config)
}
}
+/*!
+ The heap allocated variables are freed here. The keyword
+ hash table is not cleared here, but it is cleared in the
+ initialize() function, before any keywords are inserted.
+ */
void Tokenizer::terminate()
{
delete comment;
diff --git a/src/tools/qdoc/tree.cpp b/src/tools/qdoc/tree.cpp
index 2e327a5ac8..9e52099205 100644
--- a/src/tools/qdoc/tree.cpp
+++ b/src/tools/qdoc/tree.cpp
@@ -66,10 +66,19 @@ QT_BEGIN_NAMESPACE
be necessary, and it might be removed later.
*/
Tree::Tree(const QString& module, QDocDatabase* qdb)
- : module_(module), qdb_(qdb), root_(0, QString())
+ : treeHasBeenAnalyzed_(false),
+ docsHaveBeenGenerated_(false),
+ linkCount_(0),
+ module_(module),
+ qdb_(qdb),
+ root_(0, QString()),
+ targetListMap_(0)
{
root_.setModuleName(module_);
root_.setTree(this);
+ if (Generator::writeQaPages()) {
+ targetListMap_ = new TargetListMap;
+ }
}
/*!
@@ -95,6 +104,18 @@ Tree::~Tree()
}
nodesByTargetRef_.clear();
nodesByTargetTitle_.clear();
+ if (Generator::writeQaPages() && targetListMap_) {
+ TargetListMap::iterator i = targetListMap_->begin();
+ while (i != targetListMap_->end()) {
+ TargetList* tlist = i.value();
+ if (tlist) {
+ foreach (TargetLoc* tloc, *tlist)
+ delete tloc;
+ }
+ delete tlist;
+ ++i;
+ }
+ }
}
/* API members */
@@ -198,7 +219,8 @@ const FunctionNode* Tree::findFunctionNode(const QStringList& path,
int findFlags,
Node::Genus genus) const
{
- if (path.size() == 3 && !path[0].isEmpty() && (genus != Node::CPP)) {
+ if (path.size() == 3 && !path[0].isEmpty() &&
+ ((genus == Node::QML) || (genus == Node::DontCare))) {
QmlClassNode* qcn = lookupQmlType(QString(path[0] + "::" + path[1]));
if (!qcn) {
QStringList p(path[1]);
@@ -670,7 +692,7 @@ const Node* Tree::findNodeForTarget(const QStringList& path,
QString p;
if (path.size() > 1)
p = path.join(QString("::"));
- else {
+ else if ((genus == Node::DontCare) || (genus == Node::DOC)) {
p = path.at(0);
node = findDocNodeByTitle(p);
if (node) {
@@ -707,7 +729,8 @@ const Node* Tree::findNodeForTarget(const QStringList& path,
type node.
*/
int path_idx = 0;
- if ((genus != Node::CPP) && (path.size() >= 2) && !path[0].isEmpty()) {
+ if (((genus == Node::QML) || (genus == Node::DontCare)) &&
+ (path.size() >= 2) && !path[0].isEmpty()) {
QmlClassNode* qcn = lookupQmlType(QString(path[0] + "::" + path[1]));
if (qcn) {
current = qcn;
@@ -716,8 +739,7 @@ const Node* Tree::findNodeForTarget(const QStringList& path,
ref = getRef(target, current);
if (!ref.isEmpty())
return current;
- else if (genus == Node::QML)
- return 0;
+ return 0;
}
else
return current;
@@ -803,7 +825,8 @@ const Node* Tree::matchPathAndTarget(const QStringList& path,
return t;
}
}
- if ((genus != Node::QML) && node->isClass() && (flags & SearchBaseClasses)) {
+ if (((genus == Node::CPP) || (genus == Node::DontCare)) &&
+ node->isClass() && (flags & SearchBaseClasses)) {
NodeList baseClasses = allBaseClasses(static_cast<const ClassNode*>(node));
foreach (const Node* bc, baseClasses) {
t = matchPathAndTarget(path, idx, target, bc, flags, genus, ref);
@@ -851,7 +874,8 @@ const Node* Tree::findNode(const QStringList& path,
If the answer is yes, the reference identifies a QML
type node.
*/
- if ((genus != Node::CPP) && (path.size() >= 2) && !path[0].isEmpty()) {
+ if (((genus == Node::QML) || (genus == Node::DontCare)) &&
+ (path.size() >= 2) && !path[0].isEmpty()) {
QmlClassNode* qcn = lookupQmlType(QString(path[0] + "::" + path[1]));
if (qcn) {
node = qcn;
@@ -869,7 +893,8 @@ const Node* Tree::findNode(const QStringList& path,
if (!next && (findFlags & SearchEnumValues) && i == path.size()-1) {
next = static_cast<const InnerNode*>(node)->findEnumNodeForValue(path.at(i));
}
- if (!next && (genus != Node::QML) && node->isClass() && (findFlags & SearchBaseClasses)) {
+ if (!next && ((genus == Node::CPP) || (genus == Node::DontCare)) &&
+ node->isClass() && (findFlags & SearchBaseClasses)) {
NodeList baseClasses = allBaseClasses(static_cast<const ClassNode*>(node));
foreach (const Node* baseClass, baseClasses) {
next = static_cast<const InnerNode*>(baseClass)->findChildNode(path.at(i), genus);
@@ -1114,7 +1139,7 @@ QString Tree::refForAtom(const Atom* atom)
if (atom) {
if (atom->type() == Atom::SectionLeft)
return Doc::canonicalTitle(Text::sectionHeading(atom).toString());
- if (atom->type() == Atom::Target)
+ if ((atom->type() == Atom::Target) || (atom->type() == Atom::Keyword))
return Doc::canonicalTitle(atom->string());
}
return QString();
@@ -1394,4 +1419,51 @@ const Node* Tree::checkForCollision(const QString& name)
return findNode(QStringList(name), 0, 0, Node::DontCare);
}
+/*!
+ Generate a target of the form link-nnn, where the nnn is
+ the current link count for this tree. This target string
+ is returned. It will be output as an HTML anchor just before
+ an HTML link to the node \a t.
+
+ The node \a t
+ */
+QString Tree::getNewLinkTarget(const Node* locNode,
+ const Node* t,
+ const QString& fileName,
+ QString& text,
+ bool broken)
+{
+ QString moduleName;
+ if (t && !broken) {
+ Tree* tree = t->tree();
+ if (tree != this)
+ tree->incrementLinkCount();
+ moduleName = tree->moduleName();
+ }
+ else
+ moduleName = "broken";
+ incrementLinkCount();
+ QString target = QString("qa-target-%1").arg(-(linkCount()));
+ TargetLoc* tloc = new TargetLoc(locNode, target, fileName, text, broken);
+ TargetList* tList = 0;
+ TargetListMap::iterator i = targetListMap_->find(moduleName);
+ if (i == targetListMap_->end()) {
+ tList = new TargetList;
+ i = targetListMap_->insert(moduleName, tList);
+ }
+ else
+ tList = i.value();
+ tList->append(tloc);
+ return target;
+}
+
+/*!
+ Look up the target list for the specified \a module
+ and return a pointer to it.
+ */
+TargetList* Tree::getTargetList(const QString& module)
+{
+ return targetListMap_->value(module);
+}
+
QT_END_NAMESPACE
diff --git a/src/tools/qdoc/tree.h b/src/tools/qdoc/tree.h
index 6bb13ee327..6ccf85371b 100644
--- a/src/tools/qdoc/tree.h
+++ b/src/tools/qdoc/tree.h
@@ -67,10 +67,24 @@ struct TargetRec
Type type_;
};
+struct TargetLoc
+{
+ public:
+ TargetLoc(const Node* loc, const QString& t, const QString& fileName, const QString& text, bool broken)
+ : loc_(loc), target_(t), fileName_(fileName), text_(text), broken_(broken) { }
+ const Node* loc_;
+ QString target_;
+ QString fileName_;
+ QString text_;
+ bool broken_;
+};
+
typedef QMultiMap<QString, TargetRec*> TargetMap;
typedef QMultiMap<QString, DocNode*> DocNodeMultiMap;
typedef QMap<QString, QmlClassNode*> QmlTypeMap;
typedef QMultiMap<QString, const ExampleNode*> ExampleNodeMap;
+typedef QVector<TargetLoc*> TargetList;
+typedef QMap<QString, TargetList*> TargetListMap;
class Tree
{
@@ -187,12 +201,33 @@ class Tree
void addExampleNode(ExampleNode* n) { exampleNodeMap_.insert(n->title(), n); }
ExampleNodeMap& exampleNodeMap() { return exampleNodeMap_; }
const Node* checkForCollision(const QString& name);
+ void setIndexFileName(const QString& t) { indexFileName_ = t; }
+
+ bool treeHasBeenAnalyzed() const { return treeHasBeenAnalyzed_; }
+ bool docsHaveBeenGenerated() const { return docsHaveBeenGenerated_; }
+ void setTreeHasBeenAnalyzed() { treeHasBeenAnalyzed_ = true; }
+ void setdocsHaveBeenGenerated() { docsHaveBeenGenerated_ = true; }
+ QString getNewLinkTarget(const Node* locNode,
+ const Node* t,
+ const QString& fileName,
+ QString& text,
+ bool broken);
+ TargetList* getTargetList(const QString& module);
+ QStringList getTargetListKeys() { return targetListMap_->keys(); }
public:
const QString& moduleName() const { return module_; }
+ const QString& indexFileName() const { return indexFileName_; }
+ long incrementLinkCount() { return --linkCount_; }
+ void clearLinkCount() { linkCount_ = 0; }
+ long linkCount() const { return linkCount_; }
private:
+ bool treeHasBeenAnalyzed_;
+ bool docsHaveBeenGenerated_;
+ long linkCount_;
QString module_;
+ QString indexFileName_;
QDocDatabase* qdb_;
NamespaceNode root_;
PropertyMap unresolvedPropertyMap;
@@ -204,6 +239,7 @@ private:
CNMap qmlModules_;
QmlTypeMap qmlTypeMap_;
ExampleNodeMap exampleNodeMap_;
+ TargetListMap* targetListMap_;
};
QT_END_NAMESPACE
diff --git a/src/tools/uic/cpp/cppextractimages.h b/src/tools/uic/cpp/cppextractimages.h
index ce5fd75b5d..162359ca13 100644
--- a/src/tools/uic/cpp/cppextractimages.h
+++ b/src/tools/uic/cpp/cppextractimages.h
@@ -52,9 +52,9 @@ class ExtractImages : public TreeWalker
public:
ExtractImages(const Option &opt);
- void acceptUI(DomUI *node);
- void acceptImages(DomImages *images);
- void acceptImage(DomImage *image);
+ void acceptUI(DomUI *node) Q_DECL_OVERRIDE;
+ void acceptImages(DomImages *images) Q_DECL_OVERRIDE;
+ void acceptImage(DomImage *image) Q_DECL_OVERRIDE;
private:
QTextStream *m_output;
diff --git a/src/tools/uic/cpp/cppwritedeclaration.h b/src/tools/uic/cpp/cppwritedeclaration.h
index 7cd8b3581e..7ce7cd083c 100644
--- a/src/tools/uic/cpp/cppwritedeclaration.h
+++ b/src/tools/uic/cpp/cppwritedeclaration.h
@@ -50,13 +50,13 @@ struct WriteDeclaration : public TreeWalker
{
WriteDeclaration(Uic *uic, bool activateScripts);
- void acceptUI(DomUI *node);
- void acceptWidget(DomWidget *node);
- void acceptSpacer(DomSpacer *node);
- void acceptLayout(DomLayout *node);
- void acceptActionGroup(DomActionGroup *node);
- void acceptAction(DomAction *node);
- void acceptButtonGroup(const DomButtonGroup *buttonGroup);
+ void acceptUI(DomUI *node) Q_DECL_OVERRIDE;
+ void acceptWidget(DomWidget *node) Q_DECL_OVERRIDE;
+ void acceptSpacer(DomSpacer *node) Q_DECL_OVERRIDE;
+ void acceptLayout(DomLayout *node) Q_DECL_OVERRIDE;
+ void acceptActionGroup(DomActionGroup *node) Q_DECL_OVERRIDE;
+ void acceptAction(DomAction *node) Q_DECL_OVERRIDE;
+ void acceptButtonGroup(const DomButtonGroup *buttonGroup) Q_DECL_OVERRIDE;
private:
Uic *m_uic;
diff --git a/src/tools/uic/cpp/cppwriteicondata.h b/src/tools/uic/cpp/cppwriteicondata.h
index 0dc2bf0721..613b7d7ca3 100644
--- a/src/tools/uic/cpp/cppwriteicondata.h
+++ b/src/tools/uic/cpp/cppwriteicondata.h
@@ -52,9 +52,9 @@ class WriteIconData : public TreeWalker
public:
WriteIconData(Uic *uic);
- void acceptUI(DomUI *node);
- void acceptImages(DomImages *images);
- void acceptImage(DomImage *image);
+ void acceptUI(DomUI *node) Q_DECL_OVERRIDE;
+ void acceptImages(DomImages *images) Q_DECL_OVERRIDE;
+ void acceptImage(DomImage *image) Q_DECL_OVERRIDE;
static void writeImage(QTextStream &output, const QString &indent,
bool limitXPM_LineLength, const DomImage *image);
diff --git a/src/tools/uic/cpp/cppwriteicondeclaration.h b/src/tools/uic/cpp/cppwriteicondeclaration.h
index c093430bec..f717208b59 100644
--- a/src/tools/uic/cpp/cppwriteicondeclaration.h
+++ b/src/tools/uic/cpp/cppwriteicondeclaration.h
@@ -51,9 +51,9 @@ class WriteIconDeclaration : public TreeWalker
public:
WriteIconDeclaration(Uic *uic);
- void acceptUI(DomUI *node);
- void acceptImages(DomImages *images);
- void acceptImage(DomImage *image);
+ void acceptUI(DomUI *node) Q_DECL_OVERRIDE;
+ void acceptImages(DomImages *images) Q_DECL_OVERRIDE;
+ void acceptImage(DomImage *image) Q_DECL_OVERRIDE;
private:
Driver *driver;
diff --git a/src/tools/uic/cpp/cppwriteiconinitialization.h b/src/tools/uic/cpp/cppwriteiconinitialization.h
index d8a0a6195f..53f7de6597 100644
--- a/src/tools/uic/cpp/cppwriteiconinitialization.h
+++ b/src/tools/uic/cpp/cppwriteiconinitialization.h
@@ -53,9 +53,9 @@ class WriteIconInitialization : public TreeWalker
public:
WriteIconInitialization(Uic *uic);
- void acceptUI(DomUI *node);
- void acceptImages(DomImages *images);
- void acceptImage(DomImage *image);
+ void acceptUI(DomUI *node) Q_DECL_OVERRIDE;
+ void acceptImages(DomImages *images) Q_DECL_OVERRIDE;
+ void acceptImage(DomImage *image) Q_DECL_OVERRIDE;
static QString iconFromDataFunction();
diff --git a/src/tools/uic/cpp/cppwriteincludes.h b/src/tools/uic/cpp/cppwriteincludes.h
index 6f6a0f6105..0d446514f1 100644
--- a/src/tools/uic/cpp/cppwriteincludes.h
+++ b/src/tools/uic/cpp/cppwriteincludes.h
@@ -53,24 +53,24 @@ struct WriteIncludes : public TreeWalker
{
WriteIncludes(Uic *uic);
- void acceptUI(DomUI *node);
- void acceptWidget(DomWidget *node);
- void acceptLayout(DomLayout *node);
- void acceptSpacer(DomSpacer *node);
- void acceptProperty(DomProperty *node);
- void acceptWidgetScripts(const DomScripts &, DomWidget *, const DomWidgets &);
+ void acceptUI(DomUI *node) Q_DECL_OVERRIDE;
+ void acceptWidget(DomWidget *node) Q_DECL_OVERRIDE;
+ void acceptLayout(DomLayout *node) Q_DECL_OVERRIDE;
+ void acceptSpacer(DomSpacer *node) Q_DECL_OVERRIDE;
+ void acceptProperty(DomProperty *node) Q_DECL_OVERRIDE;
+ void acceptWidgetScripts(const DomScripts &, DomWidget *, const DomWidgets &) Q_DECL_OVERRIDE;
//
// custom widgets
//
- void acceptCustomWidgets(DomCustomWidgets *node);
- void acceptCustomWidget(DomCustomWidget *node);
+ void acceptCustomWidgets(DomCustomWidgets *node) Q_DECL_OVERRIDE;
+ void acceptCustomWidget(DomCustomWidget *node) Q_DECL_OVERRIDE;
//
// include hints
//
- void acceptIncludes(DomIncludes *node);
- void acceptInclude(DomInclude *node);
+ void acceptIncludes(DomIncludes *node) Q_DECL_OVERRIDE;
+ void acceptInclude(DomInclude *node) Q_DECL_OVERRIDE;
bool scriptsActivated() const { return m_scriptsActivated; }
diff --git a/src/tools/uic/cpp/cppwriteinitialization.cpp b/src/tools/uic/cpp/cppwriteinitialization.cpp
index 5a1c1850d4..2627c4cf5c 100644
--- a/src/tools/uic/cpp/cppwriteinitialization.cpp
+++ b/src/tools/uic/cpp/cppwriteinitialization.cpp
@@ -913,6 +913,7 @@ void WriteInitialization::acceptLayout(DomLayout *node)
m_layoutMarginType = SubLayoutMargin;
DomPropertyList propList = node->elementProperty();
+ DomPropertyList newPropList;
if (m_layoutWidget) {
bool left, top, right, bottom;
left = top = right = bottom = false;
@@ -932,31 +933,38 @@ void WriteInitialization::acceptLayout(DomLayout *node)
DomProperty *p = new DomProperty();
p->setAttributeName(QLatin1String("leftMargin"));
p->setElementNumber(0);
- propList.append(p);
+ newPropList.append(p);
}
if (!top) {
DomProperty *p = new DomProperty();
p->setAttributeName(QLatin1String("topMargin"));
p->setElementNumber(0);
- propList.append(p);
+ newPropList.append(p);
}
if (!right) {
DomProperty *p = new DomProperty();
p->setAttributeName(QLatin1String("rightMargin"));
p->setElementNumber(0);
- propList.append(p);
+ newPropList.append(p);
}
if (!bottom) {
DomProperty *p = new DomProperty();
p->setAttributeName(QLatin1String("bottomMargin"));
p->setElementNumber(0);
- propList.append(p);
+ newPropList.append(p);
}
m_layoutWidget = false;
}
+ propList.append(newPropList);
+
writeProperties(varName, className, propList, WritePropertyIgnoreMargin|WritePropertyIgnoreSpacing);
+ // Clean up again:
+ propList.clear();
+ qDeleteAll(newPropList);
+ newPropList.clear();
+
m_layoutChain.push(node);
TreeWalker::acceptLayout(node);
m_layoutChain.pop();
diff --git a/src/tools/uic/cpp/cppwriteinitialization.h b/src/tools/uic/cpp/cppwriteinitialization.h
index 1cf3e750b4..53bc57d376 100644
--- a/src/tools/uic/cpp/cppwriteinitialization.h
+++ b/src/tools/uic/cpp/cppwriteinitialization.h
@@ -110,47 +110,47 @@ struct WriteInitialization : public TreeWalker
//
// widgets
//
- void acceptUI(DomUI *node);
- void acceptWidget(DomWidget *node);
- void acceptWidgetScripts(const DomScripts &, DomWidget *node, const DomWidgets &childWidgets);
+ void acceptUI(DomUI *node) Q_DECL_OVERRIDE;
+ void acceptWidget(DomWidget *node) Q_DECL_OVERRIDE;
+ void acceptWidgetScripts(const DomScripts &, DomWidget *node, const DomWidgets &childWidgets) Q_DECL_OVERRIDE;
- void acceptLayout(DomLayout *node);
- void acceptSpacer(DomSpacer *node);
- void acceptLayoutItem(DomLayoutItem *node);
+ void acceptLayout(DomLayout *node) Q_DECL_OVERRIDE;
+ void acceptSpacer(DomSpacer *node) Q_DECL_OVERRIDE;
+ void acceptLayoutItem(DomLayoutItem *node) Q_DECL_OVERRIDE;
//
// actions
//
- void acceptActionGroup(DomActionGroup *node);
- void acceptAction(DomAction *node);
- void acceptActionRef(DomActionRef *node);
+ void acceptActionGroup(DomActionGroup *node) Q_DECL_OVERRIDE;
+ void acceptAction(DomAction *node) Q_DECL_OVERRIDE;
+ void acceptActionRef(DomActionRef *node) Q_DECL_OVERRIDE;
//
// tab stops
//
- void acceptTabStops(DomTabStops *tabStops);
+ void acceptTabStops(DomTabStops *tabStops) Q_DECL_OVERRIDE;
//
// custom widgets
//
- void acceptCustomWidgets(DomCustomWidgets *node);
- void acceptCustomWidget(DomCustomWidget *node);
+ void acceptCustomWidgets(DomCustomWidgets *node) Q_DECL_OVERRIDE;
+ void acceptCustomWidget(DomCustomWidget *node) Q_DECL_OVERRIDE;
//
// layout defaults/functions
//
- void acceptLayoutDefault(DomLayoutDefault *node) { m_LayoutDefaultHandler.acceptLayoutDefault(node); }
- void acceptLayoutFunction(DomLayoutFunction *node) { m_LayoutDefaultHandler.acceptLayoutFunction(node); }
+ void acceptLayoutDefault(DomLayoutDefault *node) Q_DECL_OVERRIDE { m_LayoutDefaultHandler.acceptLayoutDefault(node); }
+ void acceptLayoutFunction(DomLayoutFunction *node) Q_DECL_OVERRIDE { m_LayoutDefaultHandler.acceptLayoutFunction(node); }
//
// signal/slot connections
//
- void acceptConnection(DomConnection *connection);
+ void acceptConnection(DomConnection *connection) Q_DECL_OVERRIDE;
//
// images
//
- void acceptImage(DomImage *image);
+ void acceptImage(DomImage *image) Q_DECL_OVERRIDE;
enum {
Use43UiFile = 0,
diff --git a/src/tools/uic/customwidgetsinfo.h b/src/tools/uic/customwidgetsinfo.h
index 5e58d6c3ce..6b0f7ed81a 100644
--- a/src/tools/uic/customwidgetsinfo.h
+++ b/src/tools/uic/customwidgetsinfo.h
@@ -48,10 +48,10 @@ class CustomWidgetsInfo : public TreeWalker
public:
CustomWidgetsInfo();
- void acceptUI(DomUI *node);
+ void acceptUI(DomUI *node) Q_DECL_OVERRIDE;
- void acceptCustomWidgets(DomCustomWidgets *node);
- void acceptCustomWidget(DomCustomWidget *node);
+ void acceptCustomWidgets(DomCustomWidgets *node) Q_DECL_OVERRIDE;
+ void acceptCustomWidget(DomCustomWidget *node) Q_DECL_OVERRIDE;
inline QStringList customWidgets() const
{ return m_customWidgets.keys(); }
diff --git a/src/tools/uic/databaseinfo.h b/src/tools/uic/databaseinfo.h
index 0c80ad9551..92e0b37fe1 100644
--- a/src/tools/uic/databaseinfo.h
+++ b/src/tools/uic/databaseinfo.h
@@ -47,8 +47,8 @@ class DatabaseInfo : public TreeWalker
public:
DatabaseInfo();
- void acceptUI(DomUI *node);
- void acceptWidget(DomWidget *node);
+ void acceptUI(DomUI *node) Q_DECL_OVERRIDE;
+ void acceptWidget(DomWidget *node) Q_DECL_OVERRIDE;
inline QStringList connections() const
{ return m_connections; }
diff --git a/src/tools/uic/validator.h b/src/tools/uic/validator.h
index 82f6b71b1a..82511776a8 100644
--- a/src/tools/uic/validator.h
+++ b/src/tools/uic/validator.h
@@ -48,14 +48,14 @@ struct Validator : public TreeWalker
{
Validator(Uic *uic);
- void acceptUI(DomUI *node);
- void acceptWidget(DomWidget *node);
+ void acceptUI(DomUI *node) Q_DECL_OVERRIDE;
+ void acceptWidget(DomWidget *node) Q_DECL_OVERRIDE;
- void acceptLayoutItem(DomLayoutItem *node);
- void acceptLayout(DomLayout *node);
+ void acceptLayoutItem(DomLayoutItem *node) Q_DECL_OVERRIDE;
+ void acceptLayout(DomLayout *node) Q_DECL_OVERRIDE;
- void acceptActionGroup(DomActionGroup *node);
- void acceptAction(DomAction *node);
+ void acceptActionGroup(DomActionGroup *node) Q_DECL_OVERRIDE;
+ void acceptAction(DomAction *node) Q_DECL_OVERRIDE;
private:
Driver *m_driver;
diff --git a/src/widgets/accessible/complexwidgets.cpp b/src/widgets/accessible/complexwidgets.cpp
index 30f9ccb1f4..1945fd8416 100644
--- a/src/widgets/accessible/complexwidgets.cpp
+++ b/src/widgets/accessible/complexwidgets.cpp
@@ -77,16 +77,16 @@ public:
: m_parent(parent), m_index(index)
{}
- void *interface_cast(QAccessible::InterfaceType t) {
+ void *interface_cast(QAccessible::InterfaceType t) Q_DECL_OVERRIDE {
if (t == QAccessible::ActionInterface) {
return static_cast<QAccessibleActionInterface*>(this);
}
return 0;
}
- QObject *object() const { return 0; }
- QAccessible::Role role() const { return QAccessible::PageTab; }
- QAccessible::State state() const {
+ QObject *object() const Q_DECL_OVERRIDE { return 0; }
+ QAccessible::Role role() const Q_DECL_OVERRIDE { return QAccessible::PageTab; }
+ QAccessible::State state() const Q_DECL_OVERRIDE {
if (!isValid()) {
QAccessible::State s;
s.invalid = true;
@@ -94,7 +94,7 @@ public:
}
return parent()->state();
}
- QRect rect() const {
+ QRect rect() const Q_DECL_OVERRIDE {
if (!isValid())
return QRect();
@@ -104,13 +104,13 @@ public:
return rec;
}
- bool isValid() const { return m_parent.data() && m_parent->count() > m_index; }
+ bool isValid() const Q_DECL_OVERRIDE { return m_parent.data() && m_parent->count() > m_index; }
- QAccessibleInterface *childAt(int, int) const { return 0; }
- int childCount() const { return 0; }
- int indexOfChild(const QAccessibleInterface *) const { return -1; }
+ QAccessibleInterface *childAt(int, int) const Q_DECL_OVERRIDE { return 0; }
+ int childCount() const Q_DECL_OVERRIDE { return 0; }
+ int indexOfChild(const QAccessibleInterface *) const Q_DECL_OVERRIDE { return -1; }
- QString text(QAccessible::Text t) const
+ QString text(QAccessible::Text t) const Q_DECL_OVERRIDE
{
if (!isValid())
return QString();
@@ -129,26 +129,26 @@ public:
return QString();
}
- void setText(QAccessible::Text, const QString &) {}
+ void setText(QAccessible::Text, const QString &) Q_DECL_OVERRIDE {}
- QAccessibleInterface *parent() const {
+ QAccessibleInterface *parent() const Q_DECL_OVERRIDE {
return QAccessible::queryAccessibleInterface(m_parent.data());
}
- QAccessibleInterface *child(int) const { return 0; }
+ QAccessibleInterface *child(int) const Q_DECL_OVERRIDE { return 0; }
// action interface
- QStringList actionNames() const
+ QStringList actionNames() const Q_DECL_OVERRIDE
{
return QStringList(pressAction());
}
- void doAction(const QString &actionName)
+ void doAction(const QString &actionName) Q_DECL_OVERRIDE
{
if (isValid() && actionName == pressAction())
m_parent->setCurrentIndex(m_index);
}
- QStringList keyBindingsForAction(const QString &) const
+ QStringList keyBindingsForAction(const QString &) const Q_DECL_OVERRIDE
{
return QStringList();
}
diff --git a/src/widgets/accessible/qaccessiblewidgets.h b/src/widgets/accessible/qaccessiblewidgets.h
index b2459fe71e..50a01be397 100644
--- a/src/widgets/accessible/qaccessiblewidgets.h
+++ b/src/widgets/accessible/qaccessiblewidgets.h
@@ -67,7 +67,7 @@ class QAccessibleTextWidget : public QAccessibleWidget,
public:
QAccessibleTextWidget(QWidget *o, QAccessible::Role r = QAccessible::EditableText, const QString &name = QString());
- QAccessible::State state() const;
+ QAccessible::State state() const Q_DECL_OVERRIDE;
// QAccessibleTextInterface
// selection
@@ -89,7 +89,7 @@ public:
int *startOffset, int *endOffset) const Q_DECL_OVERRIDE;
QString textAtOffset(int offset, QAccessible::TextBoundaryType boundaryType,
int *startOffset, int *endOffset) const Q_DECL_OVERRIDE;
- int characterCount() const;
+ int characterCount() const Q_DECL_OVERRIDE;
// character <-> geometry
QRect characterRect(int offset) const Q_DECL_OVERRIDE;
diff --git a/src/widgets/dialogs/qcolordialog.cpp b/src/widgets/dialogs/qcolordialog.cpp
index b133c49b5e..5fffe61877 100644
--- a/src/widgets/dialogs/qcolordialog.cpp
+++ b/src/widgets/dialogs/qcolordialog.cpp
@@ -84,7 +84,7 @@ public:
virtual void setCurrent(int row, int col);
virtual void setSelected(int row, int col);
- QSize sizeHint() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
virtual void setCellBrush(int row, int col, const QBrush &);
QBrush cellBrush(int row, int col);
@@ -137,12 +137,12 @@ protected:
virtual void paintCell(QPainter *, int row, int col, const QRect&);
virtual void paintCellContents(QPainter *, int row, int col, const QRect&);
- void mousePressEvent(QMouseEvent*);
- void mouseReleaseEvent(QMouseEvent*);
- void keyPressEvent(QKeyEvent*);
- void focusInEvent(QFocusEvent*);
- void focusOutEvent(QFocusEvent*);
- void paintEvent(QPaintEvent *);
+ void mousePressEvent(QMouseEvent*) Q_DECL_OVERRIDE;
+ void mouseReleaseEvent(QMouseEvent*) Q_DECL_OVERRIDE;
+ void keyPressEvent(QKeyEvent*) Q_DECL_OVERRIDE;
+ void focusInEvent(QFocusEvent*) Q_DECL_OVERRIDE;
+ void focusOutEvent(QFocusEvent*) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QWellArray)
@@ -514,15 +514,15 @@ public:
{ setSizePolicy(QSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum)); }
protected:
- void paintCellContents(QPainter *, int row, int col, const QRect&);
- void mousePressEvent(QMouseEvent *e);
- void mouseMoveEvent(QMouseEvent *e);
- void mouseReleaseEvent(QMouseEvent *e);
+ void paintCellContents(QPainter *, int row, int col, const QRect&) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
+ void mouseMoveEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
+ void mouseReleaseEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
#ifndef QT_NO_DRAGANDDROP
- void dragEnterEvent(QDragEnterEvent *e);
- void dragLeaveEvent(QDragLeaveEvent *e);
- void dragMoveEvent(QDragMoveEvent *e);
- void dropEvent(QDropEvent *e);
+ void dragEnterEvent(QDragEnterEvent *e) Q_DECL_OVERRIDE;
+ void dragLeaveEvent(QDragLeaveEvent *e) Q_DECL_OVERRIDE;
+ void dragMoveEvent(QDragMoveEvent *e) Q_DECL_OVERRIDE;
+ void dropEvent(QDropEvent *e) Q_DECL_OVERRIDE;
#endif
private:
@@ -636,11 +636,11 @@ signals:
void newCol(int h, int s);
protected:
- QSize sizeHint() const;
- void paintEvent(QPaintEvent*);
- void mouseMoveEvent(QMouseEvent *);
- void mousePressEvent(QMouseEvent *);
- void resizeEvent(QResizeEvent *);
+ QSize sizeHint() const Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent*) Q_DECL_OVERRIDE;
+ void mouseMoveEvent(QMouseEvent *) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent *) Q_DECL_OVERRIDE;
+ void resizeEvent(QResizeEvent *) Q_DECL_OVERRIDE;
private:
int hue;
@@ -673,9 +673,9 @@ signals:
void newHsv(int h, int s, int v);
protected:
- void paintEvent(QPaintEvent*);
- void mouseMoveEvent(QMouseEvent *);
- void mousePressEvent(QMouseEvent *);
+ void paintEvent(QPaintEvent*) Q_DECL_OVERRIDE;
+ void mouseMoveEvent(QMouseEvent *) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent *) Q_DECL_OVERRIDE;
private:
enum { foff = 3, coff = 4 }; //frame and contents offset
@@ -995,14 +995,14 @@ signals:
void colorDropped(QRgb);
protected:
- void paintEvent(QPaintEvent *);
- void mousePressEvent(QMouseEvent *e);
- void mouseMoveEvent(QMouseEvent *e);
- void mouseReleaseEvent(QMouseEvent *e);
+ void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
+ void mouseMoveEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
+ void mouseReleaseEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
#ifndef QT_NO_DRAGANDDROP
- void dragEnterEvent(QDragEnterEvent *e);
- void dragLeaveEvent(QDragLeaveEvent *e);
- void dropEvent(QDropEvent *e);
+ void dragEnterEvent(QDragEnterEvent *e) Q_DECL_OVERRIDE;
+ void dragLeaveEvent(QDragLeaveEvent *e) Q_DECL_OVERRIDE;
+ void dropEvent(QDropEvent *e) Q_DECL_OVERRIDE;
#endif
private:
@@ -1119,10 +1119,7 @@ QColorShower::QColorShower(QColorDialog *parent)
#if !defined(QT_SMALL_COLORDIALOG)
gl->addWidget(lab, 0, 0, -1, 1);
#else
- if (nonTouchUI)
- gl->addWidget(lab, 0, 0, 1, -1);
- else
- gl->addWidget(lab, 0, 0, -1, 1);
+ gl->addWidget(lab, 0, 0, 1, -1);
#endif
connect(lab, SIGNAL(colorDropped(QRgb)), this, SIGNAL(newCol(QRgb)));
connect(lab, SIGNAL(colorDropped(QRgb)), this, SLOT(setRgb(QRgb)));
@@ -1138,13 +1135,8 @@ QColorShower::QColorShower(QColorDialog *parent)
gl->addWidget(lblHue, 0, 1);
gl->addWidget(hEd, 0, 2);
#else
- if (nonTouchUI) {
- gl->addWidget(lblHue, 1, 0);
- gl->addWidget(hEd, 2, 0);
- } else {
- lblHue->hide();
- hEd->hide();
- }
+ gl->addWidget(lblHue, 1, 0);
+ gl->addWidget(hEd, 2, 0);
#endif
sEd = new QColSpinBox(this);
@@ -1157,13 +1149,8 @@ QColorShower::QColorShower(QColorDialog *parent)
gl->addWidget(lblSat, 1, 1);
gl->addWidget(sEd, 1, 2);
#else
- if (nonTouchUI) {
- gl->addWidget(lblSat, 1, 1);
- gl->addWidget(sEd, 2, 1);
- } else {
- lblSat->hide();
- sEd->hide();
- }
+ gl->addWidget(lblSat, 1, 1);
+ gl->addWidget(sEd, 2, 1);
#endif
vEd = new QColSpinBox(this);
@@ -1176,13 +1163,8 @@ QColorShower::QColorShower(QColorDialog *parent)
gl->addWidget(lblVal, 2, 1);
gl->addWidget(vEd, 2, 2);
#else
- if (nonTouchUI) {
- gl->addWidget(lblVal, 1, 2);
- gl->addWidget(vEd, 2, 2);
- } else {
- lblVal->hide();
- vEd->hide();
- }
+ gl->addWidget(lblVal, 1, 2);
+ gl->addWidget(vEd, 2, 2);
#endif
rEd = new QColSpinBox(this);
@@ -1195,13 +1177,8 @@ QColorShower::QColorShower(QColorDialog *parent)
gl->addWidget(lblRed, 0, 3);
gl->addWidget(rEd, 0, 4);
#else
- if (nonTouchUI) {
- gl->addWidget(lblRed, 3, 0);
- gl->addWidget(rEd, 4, 0);
- } else {
- lblRed->hide();
- rEd->hide();
- }
+ gl->addWidget(lblRed, 3, 0);
+ gl->addWidget(rEd, 4, 0);
#endif
gEd = new QColSpinBox(this);
@@ -1214,13 +1191,8 @@ QColorShower::QColorShower(QColorDialog *parent)
gl->addWidget(lblGreen, 1, 3);
gl->addWidget(gEd, 1, 4);
#else
- if (nonTouchUI) {
- gl->addWidget(lblGreen, 3, 1);
- gl->addWidget(gEd, 4, 1);
- } else {
- lblGreen->hide();
- gEd->hide();
- }
+ gl->addWidget(lblGreen, 3, 1);
+ gl->addWidget(gEd, 4, 1);
#endif
bEd = new QColSpinBox(this);
@@ -1233,13 +1205,8 @@ QColorShower::QColorShower(QColorDialog *parent)
gl->addWidget(lblBlue, 2, 3);
gl->addWidget(bEd, 2, 4);
#else
- if (nonTouchUI) {
- gl->addWidget(lblBlue, 3, 2);
- gl->addWidget(bEd, 4, 2);
- } else {
- lblBlue->hide();
- bEd->hide();
- }
+ gl->addWidget(lblBlue, 3, 2);
+ gl->addWidget(bEd, 4, 2);
#endif
alphaEd = new QColSpinBox(this);
@@ -1252,13 +1219,8 @@ QColorShower::QColorShower(QColorDialog *parent)
gl->addWidget(alphaLab, 3, 1, 1, 3);
gl->addWidget(alphaEd, 3, 4);
#else
- if (nonTouchUI) {
- gl->addWidget(alphaLab, 1, 3, 3, 1);
- gl->addWidget(alphaEd, 4, 3);
- } else {
- alphaLab->hide();
- alphaEd->hide();
- }
+ gl->addWidget(alphaLab, 1, 3, 3, 1);
+ gl->addWidget(alphaEd, 4, 3);
#endif
alphaEd->hide();
alphaLab->hide();
@@ -1598,11 +1560,16 @@ void QColorDialogPrivate::_q_pickScreenColor()
buttons->setDisabled(true);
screenColorPickerButton->setDisabled(true);
- q->setCurrentColor(grabScreenColor(QCursor::pos()));
- lblScreenColorInfo->setText(QColorDialog::tr("Cursor at %1, %2, color: %3\nPress ESC to cancel")
- .arg(QCursor::pos().x())
- .arg(QCursor::pos().y())
- .arg(q->currentColor().name()));
+ const QPoint globalPos = QCursor::pos();
+ q->setCurrentColor(grabScreenColor(globalPos));
+ updateColorLabelText(globalPos);
+}
+
+void QColorDialogPrivate::updateColorLabelText(const QPoint &globalPos)
+{
+ lblScreenColorInfo->setText(QColorDialog::tr("Cursor at %1, %2\nPress ESC to cancel")
+ .arg(globalPos.x())
+ .arg(globalPos.y()));
}
void QColorDialogPrivate::releaseColorPicking()
@@ -1674,9 +1641,7 @@ void QColorDialogPrivate::initWidgets()
if (!smallDisplay) {
leftLay = new QVBoxLayout;
topLay->addLayout(leftLay);
- }
- if (!smallDisplay) {
standard = new QColorWell(q, standardColorRows, colorColumns, QColorDialogOptions::standardColors());
lblBasicColors = new QLabel(q);
#ifndef QT_NO_SHORTCUT
@@ -1688,7 +1653,7 @@ void QColorDialogPrivate::initWidgets()
#if !defined(Q_OS_WINCE) && !defined(QT_SMALL_COLORDIALOG)
// The screen color picker button
- screenColorPickerButton = new QPushButton(QColorDialog::tr("Pick Screen Color"));
+ screenColorPickerButton = new QPushButton();
leftLay->addWidget(screenColorPickerButton);
lblScreenColorInfo = new QLabel(QLatin1String("\n"));
leftLay->addWidget(lblScreenColorInfo);
@@ -1743,12 +1708,7 @@ void QColorDialogPrivate::initWidgets()
cp->setFrameStyle(QFrame::Panel + QFrame::Sunken);
#if defined(QT_SMALL_COLORDIALOG)
- if (!nonTouchUI) {
- pickLay->addWidget(cp);
- cLay->addSpacing(lumSpace);
- } else {
- cp->hide();
- }
+ cp->hide();
#else
cLay->addSpacing(lumSpace);
cLay->addWidget(cp);
@@ -1757,15 +1717,7 @@ void QColorDialogPrivate::initWidgets()
lp = new QColorLuminancePicker(q);
#if defined(QT_SMALL_COLORDIALOG)
- QSize screenSize = QApplication::desktop()->availableGeometry(QCursor::pos()).size();
- const int minDimension = qMin(screenSize.height(), screenSize.width());
- //set picker to be finger-usable
- int pickerWidth = !nonTouchUI ? minDimension/9 : minDimension/12;
- lp->setFixedWidth(pickerWidth);
- if (!nonTouchUI)
- pickLay->addWidget(lp);
- else
- lp->hide();
+ lp->hide();
#else
lp->setFixedWidth(20);
pickLay->addSpacing(10);
@@ -1784,12 +1736,11 @@ void QColorDialogPrivate::initWidgets()
QObject::connect(cs, SIGNAL(currentColorChanged(QColor)),
q, SIGNAL(currentColorChanged(QColor)));
#if defined(QT_SMALL_COLORDIALOG)
- if (!nonTouchUI)
- pWidth -= cp->size().width();
topLay->addWidget(cs);
#else
rightLay->addWidget(cs);
- leftLay->addSpacing(cs->gl->margin());
+ if (leftLay)
+ leftLay->addSpacing(cs->gl->margin());
#endif
buttons = new QDialogButtonBox(q);
@@ -1835,6 +1786,7 @@ void QColorDialogPrivate::retranslateStrings()
lblBasicColors->setText(QColorDialog::tr("&Basic colors"));
lblCustomColors->setText(QColorDialog::tr("&Custom colors"));
addCusBt->setText(QColorDialog::tr("&Add to Custom Colors"));
+ screenColorPickerButton->setText(QColorDialog::tr("&Pick Screen Color"));
}
cs->retranslateStrings();
@@ -2137,16 +2089,6 @@ void QColorDialog::open(QObject *receiver, const char *member)
}
/*!
- \fn QColorDialog::open()
-
- \since 4.5
- Shows the dialog as a \l{QDialog#Modal Dialogs}{window modal dialog},
- returning immediately.
-
- \sa QDialog::open()
-*/
-
-/*!
\since 4.5
Pops up a modal color dialog with the given window \a title (or "Select Color" if none is
@@ -2244,8 +2186,8 @@ void QColorDialogPrivate::updateColorPicking(const QPoint &globalPos)
// QTBUG-39792, do not change standard, custom color selectors while moving as
// otherwise it is not possible to pre-select a custom cell for assignment.
setCurrentColor(color, ShowColor);
- lblScreenColorInfo->setText(QColorDialog::tr("Cursor at %1, %2, color: %3\nPress ESC to cancel")
- .arg(globalPos.x()).arg(globalPos.y()).arg(color.name()));
+ updateColorLabelText(globalPos);
+
}
bool QColorDialogPrivate::handleColorPickingMouseMove(QMouseEvent *e)
diff --git a/src/widgets/dialogs/qcolordialog.h b/src/widgets/dialogs/qcolordialog.h
index b06da2ab13..87e62be81f 100644
--- a/src/widgets/dialogs/qcolordialog.h
+++ b/src/widgets/dialogs/qcolordialog.h
@@ -75,14 +75,10 @@ public:
void setOptions(ColorDialogOptions options);
ColorDialogOptions options() const;
-#ifdef Q_NO_USING_KEYWORD
- void open() { QDialog::open(); }
-#else
using QDialog::open;
-#endif
void open(QObject *receiver, const char *member);
- void setVisible(bool visible);
+ void setVisible(bool visible) Q_DECL_OVERRIDE;
static QColor getColor(const QColor &initial = Qt::white,
QWidget *parent = 0,
@@ -103,8 +99,8 @@ Q_SIGNALS:
void colorSelected(const QColor &color);
protected:
- void changeEvent(QEvent *event);
- void done(int result);
+ void changeEvent(QEvent *event) Q_DECL_OVERRIDE;
+ void done(int result) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QColorDialog)
diff --git a/src/widgets/dialogs/qcolordialog_p.h b/src/widgets/dialogs/qcolordialog_p.h
index 9182b510f1..cf8bb33d94 100644
--- a/src/widgets/dialogs/qcolordialog_p.h
+++ b/src/widgets/dialogs/qcolordialog_p.h
@@ -111,13 +111,14 @@ public:
void _q_newStandard(int, int);
void _q_pickScreenColor();
void _q_updateColorPicking();
+ void updateColorLabelText(const QPoint &);
void updateColorPicking(const QPoint &pos);
void releaseColorPicking();
bool handleColorPickingMouseMove(QMouseEvent *e);
bool handleColorPickingMouseButtonRelease(QMouseEvent *e);
bool handleColorPickingKeyPress(QKeyEvent *e);
- bool canBeNativeDialog() const;
+ bool canBeNativeDialog() const Q_DECL_OVERRIDE;
QWellArray *custom;
QWellArray *standard;
@@ -167,8 +168,8 @@ public:
void mac_nativeDialogModalHelp();
#endif
private:
- virtual void initHelper(QPlatformDialogHelper *h);
- virtual void helperPrepareShow(QPlatformDialogHelper *h);
+ virtual void initHelper(QPlatformDialogHelper *h) Q_DECL_OVERRIDE;
+ virtual void helperPrepareShow(QPlatformDialogHelper *h) Q_DECL_OVERRIDE;
};
#endif // QT_NO_COLORDIALOG
diff --git a/src/widgets/dialogs/qerrormessage.cpp b/src/widgets/dialogs/qerrormessage.cpp
index 6bab921d21..65da7e3928 100644
--- a/src/widgets/dialogs/qerrormessage.cpp
+++ b/src/widgets/dialogs/qerrormessage.cpp
@@ -84,8 +84,8 @@ public:
QErrorMessageTextView(QWidget *parent)
: QTextEdit(parent) { setReadOnly(true); }
- virtual QSize minimumSizeHint() const;
- virtual QSize sizeHint() const;
+ virtual QSize minimumSizeHint() const Q_DECL_OVERRIDE;
+ virtual QSize sizeHint() const Q_DECL_OVERRIDE;
};
QSize QErrorMessageTextView::minimumSizeHint() const
diff --git a/src/widgets/dialogs/qerrormessage.h b/src/widgets/dialogs/qerrormessage.h
index 0925923d96..301fbc7f8d 100644
--- a/src/widgets/dialogs/qerrormessage.h
+++ b/src/widgets/dialogs/qerrormessage.h
@@ -58,8 +58,8 @@ public Q_SLOTS:
void showMessage(const QString &message, const QString &type);
protected:
- void done(int);
- void changeEvent(QEvent *e);
+ void done(int) Q_DECL_OVERRIDE;
+ void changeEvent(QEvent *e) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QErrorMessage)
diff --git a/src/widgets/dialogs/qfiledialog.h b/src/widgets/dialogs/qfiledialog.h
index 70e498a2cd..c991256eef 100644
--- a/src/widgets/dialogs/qfiledialog.h
+++ b/src/widgets/dialogs/qfiledialog.h
@@ -172,15 +172,9 @@ public:
void setOptions(Options options);
Options options() const;
-#ifdef Q_NO_USING_KEYWORD
-#ifndef Q_QDOC
- void open() { QDialog::open(); }
-#endif
-#else
using QDialog::open;
-#endif
void open(QObject *receiver, const char *member);
- void setVisible(bool visible);
+ void setVisible(bool visible) Q_DECL_OVERRIDE;
Q_SIGNALS:
void fileSelected(const QString &file);
@@ -256,9 +250,9 @@ public:
protected:
QFileDialog(const QFileDialogArgs &args);
- void done(int result);
- void accept();
- void changeEvent(QEvent *e);
+ void done(int result) Q_DECL_OVERRIDE;
+ void accept() Q_DECL_OVERRIDE;
+ void changeEvent(QEvent *e) Q_DECL_OVERRIDE;
private:
Q_DECLARE_PRIVATE(QFileDialog)
diff --git a/src/widgets/dialogs/qfiledialog_p.h b/src/widgets/dialogs/qfiledialog_p.h
index cc2f481eb9..991d2a0f7a 100644
--- a/src/widgets/dialogs/qfiledialog_p.h
+++ b/src/widgets/dialogs/qfiledialog_p.h
@@ -243,7 +243,7 @@ public:
// setVisible_sys returns true if it ends up showing a native
// dialog. Returning false means that a non-native dialog must be
// used instead.
- bool canBeNativeDialog() const;
+ bool canBeNativeDialog() const Q_DECL_OVERRIDE;
inline bool usingWidgets() const;
void setDirectory_sys(const QUrl &directory);
@@ -273,9 +273,9 @@ public:
~QFileDialogPrivate();
private:
- virtual void initHelper(QPlatformDialogHelper *);
- virtual void helperPrepareShow(QPlatformDialogHelper *);
- virtual void helperDone(QDialog::DialogCode, QPlatformDialogHelper *);
+ virtual void initHelper(QPlatformDialogHelper *) Q_DECL_OVERRIDE;
+ virtual void helperPrepareShow(QPlatformDialogHelper *) Q_DECL_OVERRIDE;
+ virtual void helperDone(QDialog::DialogCode, QPlatformDialogHelper *) Q_DECL_OVERRIDE;
Q_DISABLE_COPY(QFileDialogPrivate)
};
@@ -285,7 +285,7 @@ class QFileDialogLineEdit : public QLineEdit
public:
QFileDialogLineEdit(QWidget *parent = 0) : QLineEdit(parent), d_ptr(0){}
void setFileDialogPrivate(QFileDialogPrivate *d_pointer) {d_ptr = d_pointer; }
- void keyPressEvent(QKeyEvent *e);
+ void keyPressEvent(QKeyEvent *e) Q_DECL_OVERRIDE;
bool hideOnEsc;
private:
QFileDialogPrivate *d_ptr;
@@ -296,10 +296,10 @@ class QFileDialogComboBox : public QComboBox
public:
QFileDialogComboBox(QWidget *parent = 0) : QComboBox(parent), urlModel(0) {}
void setFileDialogPrivate(QFileDialogPrivate *d_pointer);
- void showPopup();
+ void showPopup() Q_DECL_OVERRIDE;
void setHistory(const QStringList &paths);
QStringList history() const { return m_history; }
- void paintEvent(QPaintEvent *);
+ void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
private:
QUrlModel *urlModel;
@@ -312,9 +312,9 @@ class QFileDialogListView : public QListView
public:
QFileDialogListView(QWidget *parent = 0);
void setFileDialogPrivate(QFileDialogPrivate *d_pointer);
- QSize sizeHint() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
protected:
- void keyPressEvent(QKeyEvent *e);
+ void keyPressEvent(QKeyEvent *e) Q_DECL_OVERRIDE;
private:
QFileDialogPrivate *d_ptr;
};
@@ -324,10 +324,10 @@ class QFileDialogTreeView : public QTreeView
public:
QFileDialogTreeView(QWidget *parent);
void setFileDialogPrivate(QFileDialogPrivate *d_pointer);
- QSize sizeHint() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
protected:
- void keyPressEvent(QKeyEvent *e);
+ void keyPressEvent(QKeyEvent *e) Q_DECL_OVERRIDE;
private:
QFileDialogPrivate *d_ptr;
};
diff --git a/src/widgets/dialogs/qfilesystemmodel.h b/src/widgets/dialogs/qfilesystemmodel.h
index bde699d2a0..28c5660080 100644
--- a/src/widgets/dialogs/qfilesystemmodel.h
+++ b/src/widgets/dialogs/qfilesystemmodel.h
@@ -72,31 +72,31 @@ public:
explicit QFileSystemModel(QObject *parent = 0);
~QFileSystemModel();
- QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
+ QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
QModelIndex index(const QString &path, int column = 0) const;
- QModelIndex parent(const QModelIndex &child) const;
- bool hasChildren(const QModelIndex &parent = QModelIndex()) const;
- bool canFetchMore(const QModelIndex &parent) const;
- void fetchMore(const QModelIndex &parent);
+ QModelIndex parent(const QModelIndex &child) const Q_DECL_OVERRIDE;
+ bool hasChildren(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
+ bool canFetchMore(const QModelIndex &parent) const Q_DECL_OVERRIDE;
+ void fetchMore(const QModelIndex &parent) Q_DECL_OVERRIDE;
- int rowCount(const QModelIndex &parent = QModelIndex()) const;
- int columnCount(const QModelIndex &parent = QModelIndex()) const;
+ int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
+ int columnCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
QVariant myComputer(int role = Qt::DisplayRole) const;
- QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
- bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
+ bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE;
- QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
+ QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
- Qt::ItemFlags flags(const QModelIndex &index) const;
+ Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE;
- void sort(int column, Qt::SortOrder order = Qt::AscendingOrder);
+ void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) Q_DECL_OVERRIDE;
- QStringList mimeTypes() const;
- QMimeData *mimeData(const QModelIndexList &indexes) const;
+ QStringList mimeTypes() const Q_DECL_OVERRIDE;
+ QMimeData *mimeData(const QModelIndexList &indexes) const Q_DECL_OVERRIDE;
bool dropMimeData(const QMimeData *data, Qt::DropAction action,
- int row, int column, const QModelIndex &parent);
- Qt::DropActions supportedDropActions() const;
+ int row, int column, const QModelIndex &parent) Q_DECL_OVERRIDE;
+ Qt::DropActions supportedDropActions() const Q_DECL_OVERRIDE;
// QFileSystemModel specific API
QModelIndex setRootPath(const QString &path);
@@ -137,8 +137,8 @@ public:
protected:
QFileSystemModel(QFileSystemModelPrivate &, QObject *parent = 0);
- void timerEvent(QTimerEvent *event);
- bool event(QEvent *event);
+ void timerEvent(QTimerEvent *event) Q_DECL_OVERRIDE;
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
private:
Q_DECLARE_PRIVATE(QFileSystemModel)
diff --git a/src/widgets/dialogs/qfontdialog.cpp b/src/widgets/dialogs/qfontdialog.cpp
index d12b109d9f..5294e78bfe 100644
--- a/src/widgets/dialogs/qfontdialog.cpp
+++ b/src/widgets/dialogs/qfontdialog.cpp
@@ -84,7 +84,7 @@ public:
int row = QListView::currentIndex().row();
return row < 0 ? QString() : model()->stringList().at(row);
}
- void currentChanged(const QModelIndex &current, const QModelIndex &previous) {
+ void currentChanged(const QModelIndex &current, const QModelIndex &previous) Q_DECL_OVERRIDE {
QListView::currentChanged(current, previous);
if (current.isValid())
emit highlighted(current.row());
diff --git a/src/widgets/dialogs/qfontdialog.h b/src/widgets/dialogs/qfontdialog.h
index 455b5d3f3e..a065f8bebf 100644
--- a/src/widgets/dialogs/qfontdialog.h
+++ b/src/widgets/dialogs/qfontdialog.h
@@ -79,16 +79,10 @@ public:
void setOptions(FontDialogOptions options);
FontDialogOptions options() const;
-#ifdef Q_NO_USING_KEYWORD
-#ifndef Q_QDOC
- void open() { QDialog::open(); }
-#endif
-#else
using QDialog::open;
-#endif
void open(QObject *receiver, const char *member);
- void setVisible(bool visible);
+ void setVisible(bool visible) Q_DECL_OVERRIDE;
static QFont getFont(bool *ok, QWidget *parent = 0);
static QFont getFont(bool *ok, const QFont &initial, QWidget *parent = 0, const QString &title = QString(),
@@ -99,9 +93,9 @@ Q_SIGNALS:
void fontSelected(const QFont &font);
protected:
- void changeEvent(QEvent *event);
- void done(int result);
- bool eventFilter(QObject *object, QEvent *event);
+ void changeEvent(QEvent *event) Q_DECL_OVERRIDE;
+ void done(int result) Q_DECL_OVERRIDE;
+ bool eventFilter(QObject *object, QEvent *event) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QFontDialog)
diff --git a/src/widgets/dialogs/qfontdialog_p.h b/src/widgets/dialogs/qfontdialog_p.h
index 3af6f9f29a..9e6adfbf27 100644
--- a/src/widgets/dialogs/qfontdialog_p.h
+++ b/src/widgets/dialogs/qfontdialog_p.h
@@ -135,12 +135,12 @@ public:
QPointer<QObject> receiverToDisconnectOnClose;
QByteArray memberToDisconnectOnClose;
- bool canBeNativeDialog() const;
+ bool canBeNativeDialog() const Q_DECL_OVERRIDE;
void _q_runNativeAppModalPanel();
private:
- virtual void initHelper(QPlatformDialogHelper *);
- virtual void helperPrepareShow(QPlatformDialogHelper *);
+ virtual void initHelper(QPlatformDialogHelper *) Q_DECL_OVERRIDE;
+ virtual void helperPrepareShow(QPlatformDialogHelper *) Q_DECL_OVERRIDE;
};
#endif // QT_NO_FONTDIALOG
diff --git a/src/widgets/dialogs/qfscompleter_p.h b/src/widgets/dialogs/qfscompleter_p.h
index a5871e34f7..4a75f59f26 100644
--- a/src/widgets/dialogs/qfscompleter_p.h
+++ b/src/widgets/dialogs/qfscompleter_p.h
@@ -62,8 +62,8 @@ public:
setCaseSensitivity(Qt::CaseInsensitive);
#endif
}
- QString pathFromIndex(const QModelIndex &index) const;
- QStringList splitPath(const QString& path) const;
+ QString pathFromIndex(const QModelIndex &index) const Q_DECL_OVERRIDE;
+ QStringList splitPath(const QString& path) const Q_DECL_OVERRIDE;
QAbstractProxyModel *proxyModel;
QFileSystemModel *sourceModel;
diff --git a/src/widgets/dialogs/qinputdialog.cpp b/src/widgets/dialogs/qinputdialog.cpp
index b52cebadfa..67ed741159 100644
--- a/src/widgets/dialogs/qinputdialog.cpp
+++ b/src/widgets/dialogs/qinputdialog.cpp
@@ -111,7 +111,7 @@ private slots:
void notifyTextChanged() { emit textChanged(hasAcceptableInput()); }
private:
- void keyPressEvent(QKeyEvent *event) {
+ void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE {
if ((event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter) && !hasAcceptableInput()) {
#ifndef QT_NO_PROPERTIES
setProperty("value", property("value"));
@@ -122,7 +122,7 @@ private:
notifyTextChanged();
}
- void mousePressEvent(QMouseEvent *event) {
+ void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE {
QSpinBox::mousePressEvent(event);
notifyTextChanged();
}
@@ -146,7 +146,7 @@ private slots:
void notifyTextChanged() { emit textChanged(hasAcceptableInput()); }
private:
- void keyPressEvent(QKeyEvent *event) {
+ void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE {
if ((event->key() == Qt::Key_Return || event->key() == Qt::Key_Enter) && !hasAcceptableInput()) {
#ifndef QT_NO_PROPERTIES
setProperty("value", property("value"));
@@ -157,7 +157,7 @@ private:
notifyTextChanged();
}
- void mousePressEvent(QMouseEvent *event) {
+ void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE {
QDoubleSpinBox::mousePressEvent(event);
notifyTextChanged();
}
diff --git a/src/widgets/dialogs/qinputdialog.h b/src/widgets/dialogs/qinputdialog.h
index 4511e367d4..a56bd6d78b 100644
--- a/src/widgets/dialogs/qinputdialog.h
+++ b/src/widgets/dialogs/qinputdialog.h
@@ -143,19 +143,13 @@ public:
void setCancelButtonText(const QString &text);
QString cancelButtonText() const;
-#ifdef Q_NO_USING_KEYWORD
-#ifndef Q_QDOC
- void open() { QDialog::open(); }
-#endif
-#else
using QDialog::open;
-#endif
void open(QObject *receiver, const char *member);
- QSize minimumSizeHint() const;
- QSize sizeHint() const;
+ QSize minimumSizeHint() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
- void setVisible(bool visible);
+ void setVisible(bool visible) Q_DECL_OVERRIDE;
static QString getText(QWidget *parent, const QString &title, const QString &label,
QLineEdit::EchoMode echo = QLineEdit::Normal,
@@ -195,7 +189,7 @@ Q_SIGNALS:
void doubleValueSelected(double value);
public:
- void done(int result);
+ void done(int result) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QInputDialog)
diff --git a/src/widgets/dialogs/qmessagebox.cpp b/src/widgets/dialogs/qmessagebox.cpp
index effcef2bc9..e4862f16d1 100644
--- a/src/widgets/dialogs/qmessagebox.cpp
+++ b/src/widgets/dialogs/qmessagebox.cpp
@@ -89,7 +89,7 @@ public:
{
public:
TextEdit(QWidget *parent=0) : QTextEdit(parent) { }
- void contextMenuEvent(QContextMenuEvent * e)
+ void contextMenuEvent(QContextMenuEvent * e) Q_DECL_OVERRIDE
{
#ifndef QT_NO_CONTEXTMENU
QMenu *menu = createStandardContextMenu();
@@ -167,7 +167,7 @@ public:
void setLabel(DetailButtonLabel lbl)
{ setText(label(lbl)); }
- QSize sizeHint() const
+ QSize sizeHint() const Q_DECL_OVERRIDE
{
ensurePolished();
QStyleOptionButton opt;
@@ -256,9 +256,9 @@ public:
QByteArray signalToDisconnectOnClose;
QSharedPointer<QMessageDialogOptions> options;
private:
- void initHelper(QPlatformDialogHelper *);
- void helperPrepareShow(QPlatformDialogHelper *);
- void helperDone(QDialog::DialogCode, QPlatformDialogHelper *);
+ void initHelper(QPlatformDialogHelper *) Q_DECL_OVERRIDE;
+ void helperPrepareShow(QPlatformDialogHelper *) Q_DECL_OVERRIDE;
+ void helperDone(QDialog::DialogCode, QPlatformDialogHelper *) Q_DECL_OVERRIDE;
};
void QMessageBoxPrivate::init(const QString &title, const QString &text)
diff --git a/src/widgets/dialogs/qmessagebox.h b/src/widgets/dialogs/qmessagebox.h
index 1b47e9c575..f75331c967 100644
--- a/src/widgets/dialogs/qmessagebox.h
+++ b/src/widgets/dialogs/qmessagebox.h
@@ -140,13 +140,7 @@ public:
void setVisible(bool visible);
#endif
-#ifdef Q_NO_USING_KEYWORD
-#ifndef Q_QDOC
- void open() { QDialog::open(); }
-#endif
-#else
using QDialog::open;
-#endif
void open(QObject *receiver, const char *member);
QList<QAbstractButton *> buttons() const;
@@ -293,12 +287,12 @@ public Q_SLOTS:
#endif
protected:
- bool event(QEvent *e);
- void resizeEvent(QResizeEvent *event);
- void showEvent(QShowEvent *event);
- void closeEvent(QCloseEvent *event);
- void keyPressEvent(QKeyEvent *event);
- void changeEvent(QEvent *event);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
+ void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE;
+ void showEvent(QShowEvent *event) Q_DECL_OVERRIDE;
+ void closeEvent(QCloseEvent *event) Q_DECL_OVERRIDE;
+ void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
+ void changeEvent(QEvent *event) Q_DECL_OVERRIDE;
private:
Q_PRIVATE_SLOT(d_func(), void _q_buttonClicked(QAbstractButton *))
diff --git a/src/widgets/dialogs/qprogressdialog.cpp b/src/widgets/dialogs/qprogressdialog.cpp
index 371949e768..3f178189b9 100644
--- a/src/widgets/dialogs/qprogressdialog.cpp
+++ b/src/widgets/dialogs/qprogressdialog.cpp
@@ -65,6 +65,7 @@ public:
QProgressDialogPrivate() : label(0), cancel(0), bar(0),
shown_once(false),
cancellation_flag(false),
+ setValue_called(false),
showTime(defaultShowTime),
#ifndef QT_NO_SHORTCUT
escapeShortcut(0),
@@ -87,6 +88,7 @@ public:
QTimer *forceTimer;
bool shown_once;
bool cancellation_flag;
+ bool setValue_called;
QElapsedTimer starttime;
#ifndef QT_NO_CURSOR
QCursor parentCursor;
@@ -123,6 +125,8 @@ void QProgressDialogPrivate::init(const QString &labelText, const QString &cance
} else {
q->setCancelButtonText(cancelText);
}
+ starttime.start();
+ forceTimer->start(showTime);
}
void QProgressDialogPrivate::layout()
@@ -598,6 +602,7 @@ void QProgressDialog::reset()
d->bar->reset();
d->cancellation_flag = false;
d->shown_once = false;
+ d->setValue_called = false;
d->forceTimer->stop();
/*
@@ -636,7 +641,7 @@ int QProgressDialog::value() const
\brief the current amount of progress made.
For the progress dialog to work as expected, you should initially set
- this property to 0 and finally set it to
+ this property to QProgressDialog::minimum() and finally set it to
QProgressDialog::maximum(); you can call setValue() any number of times
in-between.
@@ -651,8 +656,7 @@ int QProgressDialog::value() const
void QProgressDialog::setValue(int progress)
{
Q_D(QProgressDialog);
- if (progress == d->bar->value()
- || (d->bar->value() == -1 && progress == d->bar->maximum()))
+ if (d->setValue_called && progress == d->bar->value())
return;
d->bar->setValue(progress);
@@ -661,11 +665,13 @@ void QProgressDialog::setValue(int progress)
if (isModal())
QApplication::processEvents();
} else {
- if (progress == 0) {
+ if ((!d->setValue_called && progress == 0 /* for compat with Qt < 5.4 */) || progress == minimum()) {
d->starttime.start();
d->forceTimer->start(d->showTime);
+ d->setValue_called = true;
return;
} else {
+ d->setValue_called = true;
bool need_show;
int elapsed = d->starttime.elapsed();
if (elapsed >= d->showTime) {
@@ -759,7 +765,7 @@ void QProgressDialog::setMinimumDuration(int ms)
{
Q_D(QProgressDialog);
d->showTime = ms;
- if (d->bar->value() == 0) {
+ if (d->bar->value() == d->bar->minimum()) {
d->forceTimer->stop();
d->forceTimer->start(ms);
}
diff --git a/src/widgets/dialogs/qprogressdialog.h b/src/widgets/dialogs/qprogressdialog.h
index 7547f06682..2b7a14aed3 100644
--- a/src/widgets/dialogs/qprogressdialog.h
+++ b/src/widgets/dialogs/qprogressdialog.h
@@ -77,7 +77,7 @@ public:
int value() const;
- QSize sizeHint() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
QString labelText() const;
int minimumDuration() const;
@@ -87,13 +87,7 @@ public:
void setAutoClose(bool close);
bool autoClose() const;
-#ifdef Q_NO_USING_KEYWORD
-#ifndef Q_QDOC
- void open() { QDialog::open(); }
-#endif
-#else
using QDialog::open;
-#endif
void open(QObject *receiver, const char *member);
public Q_SLOTS:
@@ -111,10 +105,10 @@ Q_SIGNALS:
void canceled();
protected:
- void resizeEvent(QResizeEvent *event);
- void closeEvent(QCloseEvent *event);
- void changeEvent(QEvent *event);
- void showEvent(QShowEvent *event);
+ void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE;
+ void closeEvent(QCloseEvent *event) Q_DECL_OVERRIDE;
+ void changeEvent(QEvent *event) Q_DECL_OVERRIDE;
+ void showEvent(QShowEvent *event) Q_DECL_OVERRIDE;
protected Q_SLOTS:
void forceShow();
diff --git a/src/widgets/dialogs/qsidebar_p.h b/src/widgets/dialogs/qsidebar_p.h
index 402863da85..e90fe5e636 100644
--- a/src/widgets/dialogs/qsidebar_p.h
+++ b/src/widgets/dialogs/qsidebar_p.h
@@ -61,7 +61,7 @@ class QSideBarDelegate : public QStyledItemDelegate
public:
QSideBarDelegate(QWidget *parent = 0) : QStyledItemDelegate(parent) {}
void initStyleOption(QStyleOptionViewItem *option,
- const QModelIndex &index) const;
+ const QModelIndex &index) const Q_DECL_OVERRIDE;
};
class Q_AUTOTEST_EXPORT QUrlModel : public QStandardItemModel
@@ -76,14 +76,14 @@ public:
QUrlModel(QObject *parent = 0);
- QStringList mimeTypes() const;
- QMimeData *mimeData(const QModelIndexList &indexes) const;
+ QStringList mimeTypes() const Q_DECL_OVERRIDE;
+ QMimeData *mimeData(const QModelIndexList &indexes) const Q_DECL_OVERRIDE;
#ifndef QT_NO_DRAGANDDROP
bool canDrop(QDragEnterEvent *event);
- bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent);
+ bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) Q_DECL_OVERRIDE;
#endif
- Qt::ItemFlags flags(const QModelIndex &index) const;
- bool setData(const QModelIndex &index, const QVariant &value, int role=Qt::EditRole);
+ Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE;
+ bool setData(const QModelIndex &index, const QVariant &value, int role=Qt::EditRole) Q_DECL_OVERRIDE;
void setUrls(const QList<QUrl> &list);
void addUrls(const QList<QUrl> &urls, int row = -1, bool move = true);
@@ -116,7 +116,7 @@ public:
void setModelAndUrls(QFileSystemModel *model, const QList<QUrl> &newUrls);
~QSidebar();
- QSize sizeHint() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
void setUrls(const QList<QUrl> &list) { urlModel->setUrls(list); }
void addUrls(const QList<QUrl> &list, int row) { urlModel->addUrls(list, row); }
@@ -125,10 +125,10 @@ public:
void selectUrl(const QUrl &url);
protected:
- bool event(QEvent * e);
- void focusInEvent(QFocusEvent *event);
+ bool event(QEvent * e) Q_DECL_OVERRIDE;
+ void focusInEvent(QFocusEvent *event) Q_DECL_OVERRIDE;
#ifndef QT_NO_DRAGANDDROP
- void dragEnterEvent(QDragEnterEvent *event);
+ void dragEnterEvent(QDragEnterEvent *event) Q_DECL_OVERRIDE;
#endif
private Q_SLOTS:
diff --git a/src/widgets/dialogs/qwizard.cpp b/src/widgets/dialogs/qwizard.cpp
index a378daa3d3..35ff6d73f1 100644
--- a/src/widgets/dialogs/qwizard.cpp
+++ b/src/widgets/dialogs/qwizard.cpp
@@ -290,7 +290,7 @@ public:
Qt::TextFormat titleFormat, Qt::TextFormat subTitleFormat);
protected:
- void paintEvent(QPaintEvent *event);
+ void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
#if !defined(QT_NO_STYLE_WINDOWSVISTA)
private:
bool vistaDisabled() const;
@@ -446,7 +446,7 @@ public:
m_layout->addWidget(m_sideWidget);
}
- QSize minimumSizeHint() const {
+ QSize minimumSizeHint() const Q_DECL_OVERRIDE {
if (!pixmap() && !pixmap()->isNull())
return pixmap()->size();
return QFrame::minimumSizeHint();
diff --git a/src/widgets/dialogs/qwizard.h b/src/widgets/dialogs/qwizard.h
index 25b0d5e3ee..7ceddf5049 100644
--- a/src/widgets/dialogs/qwizard.h
+++ b/src/widgets/dialogs/qwizard.h
@@ -161,8 +161,8 @@ public:
void setDefaultProperty(const char *className, const char *property,
const char *changedSignal);
- void setVisible(bool visible);
- QSize sizeHint() const;
+ void setVisible(bool visible) Q_DECL_OVERRIDE;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
Q_SIGNALS:
void currentIdChanged(int id);
@@ -177,13 +177,13 @@ public Q_SLOTS:
void restart();
protected:
- bool event(QEvent *event);
- void resizeEvent(QResizeEvent *event);
- void paintEvent(QPaintEvent *event);
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
+ void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
#ifdef Q_OS_WIN
bool nativeEvent(const QByteArray &eventType, void * message, long * result);
#endif
- void done(int result);
+ void done(int result) Q_DECL_OVERRIDE;
virtual void initializePage(int id);
virtual void cleanupPage(int id);
diff --git a/src/widgets/doc/snippets/javastyle.cpp b/src/widgets/doc/snippets/javastyle.cpp
index 37f02c7f13..84601abe3a 100644
--- a/src/widgets/doc/snippets/javastyle.cpp
+++ b/src/widgets/doc/snippets/javastyle.cpp
@@ -244,9 +244,7 @@ void JavaStyle::drawControl(ControlElement control, const QStyleOption *option,
QRect titleRect = rect;
if (docker->verticalTitleBar) {
QRect r = rect;
- QSize s = r.size();
- s.transpose();
- r.setSize(s);
+ r.setSize(r.size().transposed());
titleRect = QRect(r.left() + rect.bottom()
- titleRect.bottom(),
diff --git a/src/widgets/effects/qgraphicseffect.h b/src/widgets/effects/qgraphicseffect.h
index a7db19431d..bdb1770f83 100644
--- a/src/widgets/effects/qgraphicseffect.h
+++ b/src/widgets/effects/qgraphicseffect.h
@@ -137,7 +137,7 @@ Q_SIGNALS:
void strengthChanged(qreal strength);
protected:
- void draw(QPainter *painter);
+ void draw(QPainter *painter) Q_DECL_OVERRIDE;
private:
Q_DECLARE_PRIVATE(QGraphicsColorizeEffect)
@@ -162,7 +162,7 @@ public:
QGraphicsBlurEffect(QObject *parent = 0);
~QGraphicsBlurEffect();
- QRectF boundingRectFor(const QRectF &rect) const;
+ QRectF boundingRectFor(const QRectF &rect) const Q_DECL_OVERRIDE;
qreal blurRadius() const;
BlurHints blurHints() const;
@@ -175,7 +175,7 @@ Q_SIGNALS:
void blurHintsChanged(BlurHints hints);
protected:
- void draw(QPainter *painter);
+ void draw(QPainter *painter) Q_DECL_OVERRIDE;
private:
Q_DECLARE_PRIVATE(QGraphicsBlurEffect)
@@ -197,7 +197,7 @@ public:
QGraphicsDropShadowEffect(QObject *parent = 0);
~QGraphicsDropShadowEffect();
- QRectF boundingRectFor(const QRectF &rect) const;
+ QRectF boundingRectFor(const QRectF &rect) const Q_DECL_OVERRIDE;
QPointF offset() const;
inline qreal xOffset() const
@@ -233,7 +233,7 @@ Q_SIGNALS:
void colorChanged(const QColor &color);
protected:
- void draw(QPainter *painter);
+ void draw(QPainter *painter) Q_DECL_OVERRIDE;
private:
Q_DECLARE_PRIVATE(QGraphicsDropShadowEffect)
@@ -262,7 +262,7 @@ Q_SIGNALS:
void opacityMaskChanged(const QBrush &mask);
protected:
- void draw(QPainter *painter);
+ void draw(QPainter *painter) Q_DECL_OVERRIDE;
private:
Q_DECLARE_PRIVATE(QGraphicsOpacityEffect)
diff --git a/src/widgets/effects/qpixmapfilter.cpp b/src/widgets/effects/qpixmapfilter.cpp
index 6f618b8914..e4e409a542 100644
--- a/src/widgets/effects/qpixmapfilter.cpp
+++ b/src/widgets/effects/qpixmapfilter.cpp
@@ -705,7 +705,8 @@ void expblur(QImage &img, qreal radius, bool improvedQuality = false, int transp
Q_ASSERT(img.format() == QImage::Format_ARGB32_Premultiplied
|| img.format() == QImage::Format_RGB32
- || img.format() == QImage::Format_Indexed8);
+ || img.format() == QImage::Format_Indexed8
+ || img.format() == QImage::Format_Grayscale8);
// choose the alpha such that pixels at radius distance from a fully
// saturated pixel will have an alpha component of no greater than
@@ -780,7 +781,7 @@ Q_WIDGETS_EXPORT QImage qt_halfScaled(const QImage &source)
QImage srcImage = source;
- if (source.format() == QImage::Format_Indexed8) {
+ if (source.format() == QImage::Format_Indexed8 || source.format() == QImage::Format_Grayscale8) {
// assumes grayscale
QImage dest(source.width() / 2, source.height() / 2, srcImage.format());
@@ -890,7 +891,7 @@ Q_WIDGETS_EXPORT void qt_blurImage(QPainter *p, QImage &blurImage, qreal radius,
Q_WIDGETS_EXPORT void qt_blurImage(QImage &blurImage, qreal radius, bool quality, int transposed = 0)
{
- if (blurImage.format() == QImage::Format_Indexed8)
+ if (blurImage.format() == QImage::Format_Indexed8 || blurImage.format() == QImage::Format_Grayscale8)
expblur<12, 10, true>(blurImage, radius, quality, transposed);
else
expblur<12, 10, false>(blurImage, radius, quality, transposed);
diff --git a/src/widgets/effects/qpixmapfilter_p.h b/src/widgets/effects/qpixmapfilter_p.h
index 22925f66cf..6f71bd93e0 100644
--- a/src/widgets/effects/qpixmapfilter_p.h
+++ b/src/widgets/effects/qpixmapfilter_p.h
@@ -98,8 +98,8 @@ public:
void setConvolutionKernel(const qreal *matrix, int rows, int columns);
- QRectF boundingRectFor(const QRectF &rect) const;
- void draw(QPainter *painter, const QPointF &dest, const QPixmap &src, const QRectF &srcRect = QRectF()) const;
+ QRectF boundingRectFor(const QRectF &rect) const Q_DECL_OVERRIDE;
+ void draw(QPainter *painter, const QPointF &dest, const QPixmap &src, const QRectF &srcRect = QRectF()) const Q_DECL_OVERRIDE;
private:
friend class QGLPixmapConvolutionFilter;
@@ -126,8 +126,8 @@ public:
qreal radius() const;
QGraphicsBlurEffect::BlurHints blurHints() const;
- QRectF boundingRectFor(const QRectF &rect) const;
- void draw(QPainter *painter, const QPointF &dest, const QPixmap &src, const QRectF &srcRect = QRectF()) const;
+ QRectF boundingRectFor(const QRectF &rect) const Q_DECL_OVERRIDE;
+ void draw(QPainter *painter, const QPointF &dest, const QPixmap &src, const QRectF &srcRect = QRectF()) const Q_DECL_OVERRIDE;
private:
friend class QGLPixmapBlurFilter;
@@ -149,7 +149,7 @@ public:
void setStrength(qreal strength);
qreal strength() const;
- void draw(QPainter *painter, const QPointF &dest, const QPixmap &src, const QRectF &srcRect = QRectF()) const;
+ void draw(QPainter *painter, const QPointF &dest, const QPixmap &src, const QRectF &srcRect = QRectF()) const Q_DECL_OVERRIDE;
};
class QPixmapDropShadowFilterPrivate;
@@ -163,8 +163,8 @@ public:
QPixmapDropShadowFilter(QObject *parent = 0);
~QPixmapDropShadowFilter();
- QRectF boundingRectFor(const QRectF &rect) const;
- void draw(QPainter *p, const QPointF &pos, const QPixmap &px, const QRectF &src = QRectF()) const;
+ QRectF boundingRectFor(const QRectF &rect) const Q_DECL_OVERRIDE;
+ void draw(QPainter *p, const QPointF &pos, const QPixmap &px, const QRectF &src = QRectF()) const Q_DECL_OVERRIDE;
qreal blurRadius() const;
void setBlurRadius(qreal radius);
diff --git a/src/widgets/graphicsview/qgraphicsanchorlayout.h b/src/widgets/graphicsview/qgraphicsanchorlayout.h
index 13494dd81a..cec85f8430 100644
--- a/src/widgets/graphicsview/qgraphicsanchorlayout.h
+++ b/src/widgets/graphicsview/qgraphicsanchorlayout.h
@@ -92,14 +92,14 @@ public:
qreal horizontalSpacing() const;
qreal verticalSpacing() const;
- void removeAt(int index);
- void setGeometry(const QRectF &rect);
- int count() const;
- QGraphicsLayoutItem *itemAt(int index) const;
+ void removeAt(int index) Q_DECL_OVERRIDE;
+ void setGeometry(const QRectF &rect) Q_DECL_OVERRIDE;
+ int count() const Q_DECL_OVERRIDE;
+ QGraphicsLayoutItem *itemAt(int index) const Q_DECL_OVERRIDE;
- void invalidate();
+ void invalidate() Q_DECL_OVERRIDE;
protected:
- QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const;
+ QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QGraphicsAnchorLayout)
diff --git a/src/widgets/graphicsview/qgraphicsanchorlayout_p.h b/src/widgets/graphicsview/qgraphicsanchorlayout_p.h
index 457a5a2769..96ca7544ee 100644
--- a/src/widgets/graphicsview/qgraphicsanchorlayout_p.h
+++ b/src/widgets/graphicsview/qgraphicsanchorlayout_p.h
@@ -189,7 +189,7 @@ struct SequentialAnchorData : public AnchorData
#endif
}
- virtual void updateChildrenSizes();
+ virtual void updateChildrenSizes() Q_DECL_OVERRIDE;
void calculateSizeHints();
QVector<AnchorVertex*> m_children; // list of vertices in the sequence
@@ -217,7 +217,7 @@ struct ParallelAnchorData : public AnchorData
#endif
}
- virtual void updateChildrenSizes();
+ virtual void updateChildrenSizes() Q_DECL_OVERRIDE;
bool calculateSizeHints();
bool secondForward() const {
diff --git a/src/widgets/graphicsview/qgraphicsgridlayout.cpp b/src/widgets/graphicsview/qgraphicsgridlayout.cpp
index 9720bbf9ba..5f689edef6 100644
--- a/src/widgets/graphicsview/qgraphicsgridlayout.cpp
+++ b/src/widgets/graphicsview/qgraphicsgridlayout.cpp
@@ -108,7 +108,6 @@ QGraphicsLayoutStyleInfo *QGraphicsGridLayoutPrivate::styleInfo() const
{
if (!m_styleInfo)
m_styleInfo = new QGraphicsLayoutStyleInfo(this);
- m_styleInfo->updateChanged(QAbstractLayoutStyleInfo::Unknown);
return m_styleInfo;
}
diff --git a/src/widgets/graphicsview/qgraphicsgridlayout.h b/src/widgets/graphicsview/qgraphicsgridlayout.h
index 26b6daa96f..43400c3ce4 100644
--- a/src/widgets/graphicsview/qgraphicsgridlayout.h
+++ b/src/widgets/graphicsview/qgraphicsgridlayout.h
@@ -100,16 +100,16 @@ public:
QGraphicsLayoutItem *itemAt(int row, int column) const;
// inherited from QGraphicsLayout
- int count() const;
- QGraphicsLayoutItem *itemAt(int index) const;
- void removeAt(int index);
+ int count() const Q_DECL_OVERRIDE;
+ QGraphicsLayoutItem *itemAt(int index) const Q_DECL_OVERRIDE;
+ void removeAt(int index) Q_DECL_OVERRIDE;
void removeItem(QGraphicsLayoutItem *item);
- void invalidate();
+ void invalidate() Q_DECL_OVERRIDE;
// inherited from QGraphicsLayoutItem
- void setGeometry(const QRectF &rect);
- QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const;
+ void setGeometry(const QRectF &rect) Q_DECL_OVERRIDE;
+ QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const Q_DECL_OVERRIDE;
// ####
//QRect cellRect(int row, int column, int rowSpan = 1, int columnSpan = 1) const;
diff --git a/src/widgets/graphicsview/qgraphicsitem.cpp b/src/widgets/graphicsview/qgraphicsitem.cpp
index a543445244..3e9294343e 100644
--- a/src/widgets/graphicsview/qgraphicsitem.cpp
+++ b/src/widgets/graphicsview/qgraphicsitem.cpp
@@ -8034,16 +8034,6 @@ void QGraphicsItemPrivate::resetHeight()
*/
/*!
- \fn const QObjectList &QGraphicsObject::children() const
- \internal
-
- This function returns the same value as QObject::children(). It's
- provided to differentiate between the obsolete member
- QGraphicsItem::children() and QObject::children(). QGraphicsItem now
- provides childItems() instead.
-*/
-
-/*!
\property QGraphicsObject::transformOriginPoint
\brief the transformation origin
diff --git a/src/widgets/graphicsview/qgraphicsitem.h b/src/widgets/graphicsview/qgraphicsitem.h
index 3a238390d7..4435840e22 100644
--- a/src/widgets/graphicsview/qgraphicsitem.h
+++ b/src/widgets/graphicsview/qgraphicsitem.h
@@ -556,11 +556,7 @@ public:
explicit QGraphicsObject(QGraphicsItem *parent = 0);
~QGraphicsObject();
-#ifdef Q_NO_USING_KEYWORD
- const QObjectList &children() const { return QObject::children(); }
-#else
using QObject::children;
-#endif
#ifndef QT_NO_GESTURES
void grabGesture(Qt::GestureType type, Qt::GestureFlags flags = Qt::GestureFlags());
@@ -587,7 +583,7 @@ Q_SIGNALS:
protected:
QGraphicsObject(QGraphicsItemPrivate &dd, QGraphicsItem *parent);
- bool event(QEvent *ev);
+ bool event(QEvent *ev) Q_DECL_OVERRIDE;
private:
friend class QGraphicsItem;
@@ -608,8 +604,8 @@ public:
QBrush brush() const;
void setBrush(const QBrush &brush);
- bool isObscuredBy(const QGraphicsItem *item) const;
- QPainterPath opaqueArea() const;
+ bool isObscuredBy(const QGraphicsItem *item) const Q_DECL_OVERRIDE;
+ QPainterPath opaqueArea() const Q_DECL_OVERRIDE;
protected:
QAbstractGraphicsShapeItem(QAbstractGraphicsShapeItemPrivate &dd,
@@ -631,22 +627,22 @@ public:
QPainterPath path() const;
void setPath(const QPainterPath &path);
- QRectF boundingRect() const;
- QPainterPath shape() const;
- bool contains(const QPointF &point) const;
+ QRectF boundingRect() const Q_DECL_OVERRIDE;
+ QPainterPath shape() const Q_DECL_OVERRIDE;
+ bool contains(const QPointF &point) const Q_DECL_OVERRIDE;
- void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0) Q_DECL_OVERRIDE;
- bool isObscuredBy(const QGraphicsItem *item) const;
- QPainterPath opaqueArea() const;
+ bool isObscuredBy(const QGraphicsItem *item) const Q_DECL_OVERRIDE;
+ QPainterPath opaqueArea() const Q_DECL_OVERRIDE;
enum { Type = 2 };
- int type() const;
+ int type() const Q_DECL_OVERRIDE;
protected:
- bool supportsExtension(Extension extension) const;
- void setExtension(Extension extension, const QVariant &variant);
- QVariant extension(const QVariant &variant) const;
+ bool supportsExtension(Extension extension) const Q_DECL_OVERRIDE;
+ void setExtension(Extension extension, const QVariant &variant) Q_DECL_OVERRIDE;
+ QVariant extension(const QVariant &variant) const Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QGraphicsPathItem)
@@ -666,22 +662,22 @@ public:
void setRect(const QRectF &rect);
inline void setRect(qreal x, qreal y, qreal w, qreal h);
- QRectF boundingRect() const;
- QPainterPath shape() const;
- bool contains(const QPointF &point) const;
+ QRectF boundingRect() const Q_DECL_OVERRIDE;
+ QPainterPath shape() const Q_DECL_OVERRIDE;
+ bool contains(const QPointF &point) const Q_DECL_OVERRIDE;
- void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0) Q_DECL_OVERRIDE;
- bool isObscuredBy(const QGraphicsItem *item) const;
- QPainterPath opaqueArea() const;
+ bool isObscuredBy(const QGraphicsItem *item) const Q_DECL_OVERRIDE;
+ QPainterPath opaqueArea() const Q_DECL_OVERRIDE;
enum { Type = 3 };
- int type() const;
+ int type() const Q_DECL_OVERRIDE;
protected:
- bool supportsExtension(Extension extension) const;
- void setExtension(Extension extension, const QVariant &variant);
- QVariant extension(const QVariant &variant) const;
+ bool supportsExtension(Extension extension) const Q_DECL_OVERRIDE;
+ void setExtension(Extension extension, const QVariant &variant) Q_DECL_OVERRIDE;
+ QVariant extension(const QVariant &variant) const Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QGraphicsRectItem)
@@ -710,22 +706,22 @@ public:
int spanAngle() const;
void setSpanAngle(int angle);
- QRectF boundingRect() const;
- QPainterPath shape() const;
- bool contains(const QPointF &point) const;
+ QRectF boundingRect() const Q_DECL_OVERRIDE;
+ QPainterPath shape() const Q_DECL_OVERRIDE;
+ bool contains(const QPointF &point) const Q_DECL_OVERRIDE;
- void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0) Q_DECL_OVERRIDE;
- bool isObscuredBy(const QGraphicsItem *item) const;
- QPainterPath opaqueArea() const;
+ bool isObscuredBy(const QGraphicsItem *item) const Q_DECL_OVERRIDE;
+ QPainterPath opaqueArea() const Q_DECL_OVERRIDE;
enum { Type = 4 };
- int type() const;
+ int type() const Q_DECL_OVERRIDE;
protected:
- bool supportsExtension(Extension extension) const;
- void setExtension(Extension extension, const QVariant &variant);
- QVariant extension(const QVariant &variant) const;
+ bool supportsExtension(Extension extension) const Q_DECL_OVERRIDE;
+ void setExtension(Extension extension, const QVariant &variant) Q_DECL_OVERRIDE;
+ QVariant extension(const QVariant &variant) const Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QGraphicsEllipseItem)
@@ -750,22 +746,22 @@ public:
Qt::FillRule fillRule() const;
void setFillRule(Qt::FillRule rule);
- QRectF boundingRect() const;
- QPainterPath shape() const;
- bool contains(const QPointF &point) const;
+ QRectF boundingRect() const Q_DECL_OVERRIDE;
+ QPainterPath shape() const Q_DECL_OVERRIDE;
+ bool contains(const QPointF &point) const Q_DECL_OVERRIDE;
- void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0) Q_DECL_OVERRIDE;
- bool isObscuredBy(const QGraphicsItem *item) const;
- QPainterPath opaqueArea() const;
+ bool isObscuredBy(const QGraphicsItem *item) const Q_DECL_OVERRIDE;
+ QPainterPath opaqueArea() const Q_DECL_OVERRIDE;
enum { Type = 5 };
- int type() const;
+ int type() const Q_DECL_OVERRIDE;
protected:
- bool supportsExtension(Extension extension) const;
- void setExtension(Extension extension, const QVariant &variant);
- QVariant extension(const QVariant &variant) const;
+ bool supportsExtension(Extension extension) const Q_DECL_OVERRIDE;
+ void setExtension(Extension extension, const QVariant &variant) Q_DECL_OVERRIDE;
+ QVariant extension(const QVariant &variant) const Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QGraphicsPolygonItem)
@@ -789,22 +785,22 @@ public:
inline void setLine(qreal x1, qreal y1, qreal x2, qreal y2)
{ setLine(QLineF(x1, y1, x2, y2)); }
- QRectF boundingRect() const;
- QPainterPath shape() const;
- bool contains(const QPointF &point) const;
+ QRectF boundingRect() const Q_DECL_OVERRIDE;
+ QPainterPath shape() const Q_DECL_OVERRIDE;
+ bool contains(const QPointF &point) const Q_DECL_OVERRIDE;
- void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0) Q_DECL_OVERRIDE;
- bool isObscuredBy(const QGraphicsItem *item) const;
- QPainterPath opaqueArea() const;
+ bool isObscuredBy(const QGraphicsItem *item) const Q_DECL_OVERRIDE;
+ QPainterPath opaqueArea() const Q_DECL_OVERRIDE;
enum { Type = 6 };
- int type() const;
+ int type() const Q_DECL_OVERRIDE;
protected:
- bool supportsExtension(Extension extension) const;
- void setExtension(Extension extension, const QVariant &variant);
- QVariant extension(const QVariant &variant) const;
+ bool supportsExtension(Extension extension) const Q_DECL_OVERRIDE;
+ void setExtension(Extension extension, const QVariant &variant) Q_DECL_OVERRIDE;
+ QVariant extension(const QVariant &variant) const Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QGraphicsLineItem)
@@ -835,25 +831,25 @@ public:
void setOffset(const QPointF &offset);
inline void setOffset(qreal x, qreal y);
- QRectF boundingRect() const;
- QPainterPath shape() const;
- bool contains(const QPointF &point) const;
+ QRectF boundingRect() const Q_DECL_OVERRIDE;
+ QPainterPath shape() const Q_DECL_OVERRIDE;
+ bool contains(const QPointF &point) const Q_DECL_OVERRIDE;
- void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) Q_DECL_OVERRIDE;
- bool isObscuredBy(const QGraphicsItem *item) const;
- QPainterPath opaqueArea() const;
+ bool isObscuredBy(const QGraphicsItem *item) const Q_DECL_OVERRIDE;
+ QPainterPath opaqueArea() const Q_DECL_OVERRIDE;
enum { Type = 7 };
- int type() const;
+ int type() const Q_DECL_OVERRIDE;
ShapeMode shapeMode() const;
void setShapeMode(ShapeMode mode);
protected:
- bool supportsExtension(Extension extension) const;
- void setExtension(Extension extension, const QVariant &variant);
- QVariant extension(const QVariant &variant) const;
+ bool supportsExtension(Extension extension) const Q_DECL_OVERRIDE;
+ void setExtension(Extension extension, const QVariant &variant) Q_DECL_OVERRIDE;
+ QVariant extension(const QVariant &variant) const Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QGraphicsPixmapItem)
@@ -889,17 +885,17 @@ public:
void setDefaultTextColor(const QColor &c);
QColor defaultTextColor() const;
- QRectF boundingRect() const;
- QPainterPath shape() const;
- bool contains(const QPointF &point) const;
+ QRectF boundingRect() const Q_DECL_OVERRIDE;
+ QPainterPath shape() const Q_DECL_OVERRIDE;
+ bool contains(const QPointF &point) const Q_DECL_OVERRIDE;
- void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) Q_DECL_OVERRIDE;
- bool isObscuredBy(const QGraphicsItem *item) const;
- QPainterPath opaqueArea() const;
+ bool isObscuredBy(const QGraphicsItem *item) const Q_DECL_OVERRIDE;
+ QPainterPath opaqueArea() const Q_DECL_OVERRIDE;
enum { Type = 8 };
- int type() const;
+ int type() const Q_DECL_OVERRIDE;
void setTextWidth(qreal width);
qreal textWidth() const;
@@ -926,30 +922,30 @@ Q_SIGNALS:
void linkHovered(const QString &);
protected:
- bool sceneEvent(QEvent *event);
- void mousePressEvent(QGraphicsSceneMouseEvent *event);
- void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
- void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
- void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
- void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
- void keyPressEvent(QKeyEvent *event);
- void keyReleaseEvent(QKeyEvent *event);
- void focusInEvent(QFocusEvent *event);
- void focusOutEvent(QFocusEvent *event);
- void dragEnterEvent(QGraphicsSceneDragDropEvent *event);
- void dragLeaveEvent(QGraphicsSceneDragDropEvent *event);
- void dragMoveEvent(QGraphicsSceneDragDropEvent *event);
- void dropEvent(QGraphicsSceneDragDropEvent *event);
- void inputMethodEvent(QInputMethodEvent *event);
- void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
- void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
- void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
-
- QVariant inputMethodQuery(Qt::InputMethodQuery query) const;
-
- bool supportsExtension(Extension extension) const;
- void setExtension(Extension extension, const QVariant &variant);
- QVariant extension(const QVariant &variant) const;
+ bool sceneEvent(QEvent *event) Q_DECL_OVERRIDE;
+ void mousePressEvent(QGraphicsSceneMouseEvent *event) Q_DECL_OVERRIDE;
+ void mouseMoveEvent(QGraphicsSceneMouseEvent *event) Q_DECL_OVERRIDE;
+ void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) Q_DECL_OVERRIDE;
+ void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) Q_DECL_OVERRIDE;
+ void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) Q_DECL_OVERRIDE;
+ void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
+ void keyReleaseEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
+ void focusInEvent(QFocusEvent *event) Q_DECL_OVERRIDE;
+ void focusOutEvent(QFocusEvent *event) Q_DECL_OVERRIDE;
+ void dragEnterEvent(QGraphicsSceneDragDropEvent *event) Q_DECL_OVERRIDE;
+ void dragLeaveEvent(QGraphicsSceneDragDropEvent *event) Q_DECL_OVERRIDE;
+ void dragMoveEvent(QGraphicsSceneDragDropEvent *event) Q_DECL_OVERRIDE;
+ void dropEvent(QGraphicsSceneDragDropEvent *event) Q_DECL_OVERRIDE;
+ void inputMethodEvent(QInputMethodEvent *event) Q_DECL_OVERRIDE;
+ void hoverEnterEvent(QGraphicsSceneHoverEvent *event) Q_DECL_OVERRIDE;
+ void hoverMoveEvent(QGraphicsSceneHoverEvent *event) Q_DECL_OVERRIDE;
+ void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) Q_DECL_OVERRIDE;
+
+ QVariant inputMethodQuery(Qt::InputMethodQuery query) const Q_DECL_OVERRIDE;
+
+ bool supportsExtension(Extension extension) const Q_DECL_OVERRIDE;
+ void setExtension(Extension extension, const QVariant &variant) Q_DECL_OVERRIDE;
+ QVariant extension(const QVariant &variant) const Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QGraphicsTextItem)
@@ -974,22 +970,22 @@ public:
void setFont(const QFont &font);
QFont font() const;
- QRectF boundingRect() const;
- QPainterPath shape() const;
- bool contains(const QPointF &point) const;
+ QRectF boundingRect() const Q_DECL_OVERRIDE;
+ QPainterPath shape() const Q_DECL_OVERRIDE;
+ bool contains(const QPointF &point) const Q_DECL_OVERRIDE;
- void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) Q_DECL_OVERRIDE;
- bool isObscuredBy(const QGraphicsItem *item) const;
- QPainterPath opaqueArea() const;
+ bool isObscuredBy(const QGraphicsItem *item) const Q_DECL_OVERRIDE;
+ QPainterPath opaqueArea() const Q_DECL_OVERRIDE;
enum { Type = 9 };
- int type() const;
+ int type() const Q_DECL_OVERRIDE;
protected:
- bool supportsExtension(Extension extension) const;
- void setExtension(Extension extension, const QVariant &variant);
- QVariant extension(const QVariant &variant) const;
+ bool supportsExtension(Extension extension) const Q_DECL_OVERRIDE;
+ void setExtension(Extension extension, const QVariant &variant) Q_DECL_OVERRIDE;
+ QVariant extension(const QVariant &variant) const Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QGraphicsSimpleTextItem)
@@ -1006,14 +1002,14 @@ public:
void addToGroup(QGraphicsItem *item);
void removeFromGroup(QGraphicsItem *item);
- QRectF boundingRect() const;
- void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
+ QRectF boundingRect() const Q_DECL_OVERRIDE;
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0) Q_DECL_OVERRIDE;
- bool isObscuredBy(const QGraphicsItem *item) const;
- QPainterPath opaqueArea() const;
+ bool isObscuredBy(const QGraphicsItem *item) const Q_DECL_OVERRIDE;
+ QPainterPath opaqueArea() const Q_DECL_OVERRIDE;
enum { Type = 10 };
- int type() const;
+ int type() const Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QGraphicsItemGroup)
diff --git a/src/widgets/graphicsview/qgraphicsitem_p.h b/src/widgets/graphicsview/qgraphicsitem_p.h
index f1986a5072..4af39cac2f 100644
--- a/src/widgets/graphicsview/qgraphicsitem_p.h
+++ b/src/widgets/graphicsview/qgraphicsitem_p.h
@@ -699,11 +699,11 @@ public:
return info->widget->rect();
}
- QRectF boundingRect(Qt::CoordinateSystem system) const;
- void draw(QPainter *);
+ QRectF boundingRect(Qt::CoordinateSystem system) const Q_DECL_OVERRIDE;
+ void draw(QPainter *) Q_DECL_OVERRIDE;
QPixmap pixmap(Qt::CoordinateSystem system,
QPoint *offset,
- QGraphicsEffect::PixmapPadMode mode) const;
+ QGraphicsEffect::PixmapPadMode mode) const Q_DECL_OVERRIDE;
QRect paddedEffectRect(Qt::CoordinateSystem system, QGraphicsEffect::PixmapPadMode mode, const QRectF &sourceRect, bool *unpadded = 0) const;
QGraphicsItem *item;
diff --git a/src/widgets/graphicsview/qgraphicslayout.h b/src/widgets/graphicsview/qgraphicslayout.h
index 83004e36f9..226c3984cf 100644
--- a/src/widgets/graphicsview/qgraphicslayout.h
+++ b/src/widgets/graphicsview/qgraphicslayout.h
@@ -52,12 +52,12 @@ public:
~QGraphicsLayout();
void setContentsMargins(qreal left, qreal top, qreal right, qreal bottom);
- void getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const;
+ void getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const Q_DECL_OVERRIDE;
void activate();
bool isActivated() const;
virtual void invalidate();
- virtual void updateGeometry();
+ virtual void updateGeometry() Q_DECL_OVERRIDE;
virtual void widgetEvent(QEvent *e);
diff --git a/src/widgets/graphicsview/qgraphicslayout_p.h b/src/widgets/graphicsview/qgraphicslayout_p.h
index a45cb31b28..698118eb75 100644
--- a/src/widgets/graphicsview/qgraphicslayout_p.h
+++ b/src/widgets/graphicsview/qgraphicslayout_p.h
@@ -65,7 +65,7 @@ inline bool qt_graphicsLayoutDebug()
{
static int checked_env = -1;
if(checked_env == -1)
- checked_env = !!qgetenv("QT_GRAPHICSLAYOUT_DEBUG").toInt();
+ checked_env = !!qEnvironmentVariableIntValue("QT_GRAPHICSLAYOUT_DEBUG");
return checked_env;
}
#endif
diff --git a/src/widgets/graphicsview/qgraphicslayoutstyleinfo_p.h b/src/widgets/graphicsview/qgraphicslayoutstyleinfo_p.h
index 9e216c8200..1cf94d3962 100644
--- a/src/widgets/graphicsview/qgraphicslayoutstyleinfo_p.h
+++ b/src/widgets/graphicsview/qgraphicslayoutstyleinfo_p.h
@@ -77,13 +77,6 @@ public:
QAbstractLayoutStyleInfo::invalidate();
}
- virtual bool hasChangedCore() const Q_DECL_OVERRIDE
- {
- QStyle *s = m_style;
- // Note that style() will change m_style
- return s != style();
- }
-
QWidget *widget() const;
QStyle *style() const;
diff --git a/src/widgets/graphicsview/qgraphicslinearlayout.cpp b/src/widgets/graphicsview/qgraphicslinearlayout.cpp
index cad049c30a..baf68d6eef 100644
--- a/src/widgets/graphicsview/qgraphicslinearlayout.cpp
+++ b/src/widgets/graphicsview/qgraphicslinearlayout.cpp
@@ -173,7 +173,6 @@ QGraphicsLayoutStyleInfo *QGraphicsLinearLayoutPrivate::styleInfo() const
{
if (!m_styleInfo)
m_styleInfo = new QGraphicsLayoutStyleInfo(this);
- m_styleInfo->updateChanged(QAbstractLayoutStyleInfo::Unknown);
return m_styleInfo;
}
diff --git a/src/widgets/graphicsview/qgraphicslinearlayout.h b/src/widgets/graphicsview/qgraphicslinearlayout.h
index 28c6fb4813..2602ea2a51 100644
--- a/src/widgets/graphicsview/qgraphicslinearlayout.h
+++ b/src/widgets/graphicsview/qgraphicslinearlayout.h
@@ -61,7 +61,7 @@ public:
void insertStretch(int index, int stretch = 1);
void removeItem(QGraphicsLayoutItem *item);
- void removeAt(int index);
+ void removeAt(int index) Q_DECL_OVERRIDE;
void setSpacing(qreal spacing);
qreal spacing() const;
@@ -74,13 +74,13 @@ public:
void setAlignment(QGraphicsLayoutItem *item, Qt::Alignment alignment);
Qt::Alignment alignment(QGraphicsLayoutItem *item) const;
- void setGeometry(const QRectF &rect);
+ void setGeometry(const QRectF &rect) Q_DECL_OVERRIDE;
- int count() const;
- QGraphicsLayoutItem *itemAt(int index) const;
+ int count() const Q_DECL_OVERRIDE;
+ QGraphicsLayoutItem *itemAt(int index) const Q_DECL_OVERRIDE;
- void invalidate();
- QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const;
+ void invalidate() Q_DECL_OVERRIDE;
+ QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const Q_DECL_OVERRIDE;
#if 0 // ###
Q5SizePolicy::ControlTypes controlTypes(LayoutSide side) const;
diff --git a/src/widgets/graphicsview/qgraphicsproxywidget.h b/src/widgets/graphicsview/qgraphicsproxywidget.h
index 765caea0b1..c2bd73e056 100644
--- a/src/widgets/graphicsview/qgraphicsproxywidget.h
+++ b/src/widgets/graphicsview/qgraphicsproxywidget.h
@@ -55,63 +55,63 @@ public:
QRectF subWidgetRect(const QWidget *widget) const;
- void setGeometry(const QRectF &rect);
+ void setGeometry(const QRectF &rect) Q_DECL_OVERRIDE;
- void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget);
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget) Q_DECL_OVERRIDE;
enum {
Type = 12
};
- int type() const;
+ int type() const Q_DECL_OVERRIDE;
QGraphicsProxyWidget *createProxyForChildWidget(QWidget *child);
protected:
- QVariant itemChange(GraphicsItemChange change, const QVariant &value);
+ QVariant itemChange(GraphicsItemChange change, const QVariant &value) Q_DECL_OVERRIDE;
- bool event(QEvent *event);
- bool eventFilter(QObject *object, QEvent *event);
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
+ bool eventFilter(QObject *object, QEvent *event) Q_DECL_OVERRIDE;
- void showEvent(QShowEvent *event);
- void hideEvent(QHideEvent *event);
+ void showEvent(QShowEvent *event) Q_DECL_OVERRIDE;
+ void hideEvent(QHideEvent *event) Q_DECL_OVERRIDE;
#ifndef QT_NO_CONTEXTMENU
- void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
+ void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) Q_DECL_OVERRIDE;
#endif
#ifndef QT_NO_DRAGANDDROP
- void dragEnterEvent(QGraphicsSceneDragDropEvent *event);
- void dragLeaveEvent(QGraphicsSceneDragDropEvent *event);
- void dragMoveEvent(QGraphicsSceneDragDropEvent *event);
- void dropEvent(QGraphicsSceneDragDropEvent *event);
+ void dragEnterEvent(QGraphicsSceneDragDropEvent *event) Q_DECL_OVERRIDE;
+ void dragLeaveEvent(QGraphicsSceneDragDropEvent *event) Q_DECL_OVERRIDE;
+ void dragMoveEvent(QGraphicsSceneDragDropEvent *event) Q_DECL_OVERRIDE;
+ void dropEvent(QGraphicsSceneDragDropEvent *event) Q_DECL_OVERRIDE;
#endif
- void hoverEnterEvent(QGraphicsSceneHoverEvent *event);
- void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
- void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
- void grabMouseEvent(QEvent *event);
- void ungrabMouseEvent(QEvent *event);
+ void hoverEnterEvent(QGraphicsSceneHoverEvent *event) Q_DECL_OVERRIDE;
+ void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) Q_DECL_OVERRIDE;
+ void hoverMoveEvent(QGraphicsSceneHoverEvent *event) Q_DECL_OVERRIDE;
+ void grabMouseEvent(QEvent *event) Q_DECL_OVERRIDE;
+ void ungrabMouseEvent(QEvent *event) Q_DECL_OVERRIDE;
- void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
- void mousePressEvent(QGraphicsSceneMouseEvent *event);
- void mouseReleaseEvent(QGraphicsSceneMouseEvent *event);
- void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event);
+ void mouseMoveEvent(QGraphicsSceneMouseEvent *event) Q_DECL_OVERRIDE;
+ void mousePressEvent(QGraphicsSceneMouseEvent *event) Q_DECL_OVERRIDE;
+ void mouseReleaseEvent(QGraphicsSceneMouseEvent *event) Q_DECL_OVERRIDE;
+ void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *event) Q_DECL_OVERRIDE;
#ifndef QT_NO_WHEELEVENT
- void wheelEvent(QGraphicsSceneWheelEvent *event);
+ void wheelEvent(QGraphicsSceneWheelEvent *event) Q_DECL_OVERRIDE;
#endif
- void keyPressEvent(QKeyEvent *event);
- void keyReleaseEvent(QKeyEvent *event);
+ void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
+ void keyReleaseEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
- void focusInEvent(QFocusEvent *event);
- void focusOutEvent(QFocusEvent *event);
- bool focusNextPrevChild(bool next);
+ void focusInEvent(QFocusEvent *event) Q_DECL_OVERRIDE;
+ void focusOutEvent(QFocusEvent *event) Q_DECL_OVERRIDE;
+ bool focusNextPrevChild(bool next) Q_DECL_OVERRIDE;
- QVariant inputMethodQuery(Qt::InputMethodQuery query) const;
- void inputMethodEvent(QInputMethodEvent *event);
+ QVariant inputMethodQuery(Qt::InputMethodQuery query) const Q_DECL_OVERRIDE;
+ void inputMethodEvent(QInputMethodEvent *event) Q_DECL_OVERRIDE;
- QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const;
- void resizeEvent(QGraphicsSceneResizeEvent *event);
+ QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const Q_DECL_OVERRIDE;
+ void resizeEvent(QGraphicsSceneResizeEvent *event) Q_DECL_OVERRIDE;
protected Q_SLOTS:
QGraphicsProxyWidget *newProxyWidget(const QWidget *);
diff --git a/src/widgets/graphicsview/qgraphicsscene.cpp b/src/widgets/graphicsview/qgraphicsscene.cpp
index 988152da9d..aa42445b2a 100644
--- a/src/widgets/graphicsview/qgraphicsscene.cpp
+++ b/src/widgets/graphicsview/qgraphicsscene.cpp
@@ -1468,6 +1468,8 @@ void QGraphicsScenePrivate::mousePressEventHandler(QGraphicsSceneMouseEvent *mou
QGraphicsView *view = mouseEvent->widget() ? qobject_cast<QGraphicsView *>(mouseEvent->widget()->parentWidget()) : 0;
bool dontClearSelection = view && view->dragMode() == QGraphicsView::ScrollHandDrag;
+ bool extendSelection = (mouseEvent->modifiers() & Qt::ControlModifier) != 0;
+ dontClearSelection |= extendSelection;
if (!dontClearSelection) {
// Clear the selection if the originating view isn't in scroll
// hand drag mode. The view will clear the selection if no drag
@@ -2263,6 +2265,28 @@ void QGraphicsScene::setSelectionArea(const QPainterPath &path, const QTransform
void QGraphicsScene::setSelectionArea(const QPainterPath &path, Qt::ItemSelectionMode mode,
const QTransform &deviceTransform)
{
+ setSelectionArea(path, Qt::ReplaceSelection, mode, deviceTransform);
+}
+
+/*!
+ \overload
+ \since 5.5
+
+ Sets the selection area to \a path using \a mode to determine if items are
+ included in the selection area.
+
+ \a deviceTransform is the transformation that applies to the view, and needs to
+ be provided if the scene contains items that ignore transformations.
+
+ \a selectionOperation determines what to do with the currently selected items.
+
+ \sa clearSelection(), selectionArea()
+*/
+void QGraphicsScene::setSelectionArea(const QPainterPath &path,
+ Qt::ItemSelectionOperation selectionOperation,
+ Qt::ItemSelectionMode mode,
+ const QTransform &deviceTransform)
+{
Q_D(QGraphicsScene);
// Note: with boolean path operations, we can improve performance here
@@ -2287,10 +2311,16 @@ void QGraphicsScene::setSelectionArea(const QPainterPath &path, Qt::ItemSelectio
}
}
- // Unselect all items outside path.
- foreach (QGraphicsItem *item, unselectItems) {
- item->setSelected(false);
- changed = true;
+ switch (selectionOperation) {
+ case Qt::ReplaceSelection:
+ // Deselect all items outside path.
+ foreach (QGraphicsItem *item, unselectItems) {
+ item->setSelected(false);
+ changed = true;
+ }
+ break;
+ default:
+ break;
}
// Reenable emitting selectionChanged() for individual items.
@@ -4910,7 +4940,7 @@ void QGraphicsScenePrivate::draw(QGraphicsItem *item, QPainter *painter, const Q
if (painterStateProtection || restorePainterClip)
painter->restore();
- static int drawRect = qgetenv("QT_DRAW_SCENE_ITEM_RECTS").toInt();
+ static int drawRect = qEnvironmentVariableIntValue("QT_DRAW_SCENE_ITEM_RECTS");
if (drawRect) {
QPen oldPen = painter->pen();
QBrush oldBrush = painter->brush();
diff --git a/src/widgets/graphicsview/qgraphicsscene.h b/src/widgets/graphicsview/qgraphicsscene.h
index 24255c3b30..03df18fbce 100644
--- a/src/widgets/graphicsview/qgraphicsscene.h
+++ b/src/widgets/graphicsview/qgraphicsscene.h
@@ -177,6 +177,8 @@ public:
QPainterPath selectionArea() const;
void setSelectionArea(const QPainterPath &path, const QTransform &deviceTransform);
void setSelectionArea(const QPainterPath &path, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, const QTransform &deviceTransform = QTransform());
+ void setSelectionArea(const QPainterPath &path, Qt::ItemSelectionOperation selectionOperation, Qt::ItemSelectionMode mode = Qt::IntersectsItemShape, const QTransform &deviceTransform = QTransform());
+ // ### Qt6 merge the last 2 functions and add a default: Qt::ItemSelectionOperation selectionOperation = Qt::ReplaceSelection
QGraphicsItemGroup *createItemGroup(const QList<QGraphicsItem *> &items);
void destroyItemGroup(QGraphicsItemGroup *group);
@@ -253,8 +255,8 @@ public Q_SLOTS:
void clear();
protected:
- bool event(QEvent *event);
- bool eventFilter(QObject *watched, QEvent *event);
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
+ bool eventFilter(QObject *watched, QEvent *event) Q_DECL_OVERRIDE;
virtual void contextMenuEvent(QGraphicsSceneContextMenuEvent *event);
virtual void dragEnterEvent(QGraphicsSceneDragDropEvent *event);
virtual void dragMoveEvent(QGraphicsSceneDragDropEvent *event);
diff --git a/src/widgets/graphicsview/qgraphicsscene_bsp.cpp b/src/widgets/graphicsview/qgraphicsscene_bsp.cpp
index 739acecf5b..9a2932d127 100644
--- a/src/widgets/graphicsview/qgraphicsscene_bsp.cpp
+++ b/src/widgets/graphicsview/qgraphicsscene_bsp.cpp
@@ -45,7 +45,7 @@ class QGraphicsSceneInsertItemBspTreeVisitor : public QGraphicsSceneBspTreeVisit
public:
QGraphicsItem *item;
- void visit(QList<QGraphicsItem *> *items)
+ void visit(QList<QGraphicsItem *> *items) Q_DECL_OVERRIDE
{ items->prepend(item); }
};
@@ -54,7 +54,7 @@ class QGraphicsSceneRemoveItemBspTreeVisitor : public QGraphicsSceneBspTreeVisit
public:
QGraphicsItem *item;
- void visit(QList<QGraphicsItem *> *items)
+ void visit(QList<QGraphicsItem *> *items) Q_DECL_OVERRIDE
{ items->removeAll(item); }
};
@@ -64,7 +64,7 @@ public:
QList<QGraphicsItem *> *foundItems;
bool onlyTopLevelItems;
- void visit(QList<QGraphicsItem *> *items)
+ void visit(QList<QGraphicsItem *> *items) Q_DECL_OVERRIDE
{
for (int i = 0; i < items->size(); ++i) {
QGraphicsItem *item = items->at(i);
diff --git a/src/widgets/graphicsview/qgraphicsscenebsptreeindex_p.h b/src/widgets/graphicsview/qgraphicsscenebsptreeindex_p.h
index 02a3b44ff2..c329083844 100644
--- a/src/widgets/graphicsview/qgraphicsscenebsptreeindex_p.h
+++ b/src/widgets/graphicsview/qgraphicsscenebsptreeindex_p.h
@@ -71,25 +71,25 @@ public:
QGraphicsSceneBspTreeIndex(QGraphicsScene *scene = 0);
~QGraphicsSceneBspTreeIndex();
- QList<QGraphicsItem *> estimateItems(const QRectF &rect, Qt::SortOrder order) const;
- QList<QGraphicsItem *> estimateTopLevelItems(const QRectF &rect, Qt::SortOrder order) const;
- QList<QGraphicsItem *> items(Qt::SortOrder order = Qt::DescendingOrder) const;
+ QList<QGraphicsItem *> estimateItems(const QRectF &rect, Qt::SortOrder order) const Q_DECL_OVERRIDE;
+ QList<QGraphicsItem *> estimateTopLevelItems(const QRectF &rect, Qt::SortOrder order) const Q_DECL_OVERRIDE;
+ QList<QGraphicsItem *> items(Qt::SortOrder order = Qt::DescendingOrder) const Q_DECL_OVERRIDE;
int bspTreeDepth() const;
void setBspTreeDepth(int depth);
protected Q_SLOTS:
- void updateSceneRect(const QRectF &rect);
+ void updateSceneRect(const QRectF &rect) Q_DECL_OVERRIDE;
protected:
- bool event(QEvent *event);
- void clear();
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
+ void clear() Q_DECL_OVERRIDE;
- void addItem(QGraphicsItem *item);
- void removeItem(QGraphicsItem *item);
- void prepareBoundingRectChange(const QGraphicsItem *item);
+ void addItem(QGraphicsItem *item) Q_DECL_OVERRIDE;
+ void removeItem(QGraphicsItem *item) Q_DECL_OVERRIDE;
+ void prepareBoundingRectChange(const QGraphicsItem *item) Q_DECL_OVERRIDE;
- void itemChange(const QGraphicsItem *item, QGraphicsItem::GraphicsItemChange change, const void *const value);
+ void itemChange(const QGraphicsItem *item, QGraphicsItem::GraphicsItemChange change, const void *const value) Q_DECL_OVERRIDE;
private :
Q_DECLARE_PRIVATE(QGraphicsSceneBspTreeIndex)
diff --git a/src/widgets/graphicsview/qgraphicsscenelinearindex_p.h b/src/widgets/graphicsview/qgraphicsscenelinearindex_p.h
index 57d4ce9702..691e030a89 100644
--- a/src/widgets/graphicsview/qgraphicsscenelinearindex_p.h
+++ b/src/widgets/graphicsview/qgraphicsscenelinearindex_p.h
@@ -65,10 +65,10 @@ public:
QGraphicsSceneLinearIndex(QGraphicsScene *scene = 0) : QGraphicsSceneIndex(scene), m_numSortedElements(0)
{ }
- QList<QGraphicsItem *> items(Qt::SortOrder order = Qt::DescendingOrder) const
+ QList<QGraphicsItem *> items(Qt::SortOrder order = Qt::DescendingOrder) const Q_DECL_OVERRIDE
{ Q_UNUSED(order); return m_items; }
- virtual QList<QGraphicsItem *> estimateItems(const QRectF &rect, Qt::SortOrder order) const
+ virtual QList<QGraphicsItem *> estimateItems(const QRectF &rect, Qt::SortOrder order) const Q_DECL_OVERRIDE
{
Q_UNUSED(rect);
Q_UNUSED(order);
@@ -76,16 +76,16 @@ public:
}
protected :
- virtual void clear()
+ virtual void clear() Q_DECL_OVERRIDE
{
m_items.clear();
m_numSortedElements = 0;
}
- virtual void addItem(QGraphicsItem *item)
+ virtual void addItem(QGraphicsItem *item) Q_DECL_OVERRIDE
{ m_items << item; }
- virtual void removeItem(QGraphicsItem *item)
+ virtual void removeItem(QGraphicsItem *item) Q_DECL_OVERRIDE
{
// Sort m_items if needed
if (m_numSortedElements < m_items.size())
diff --git a/src/widgets/graphicsview/qgraphicstransform.h b/src/widgets/graphicsview/qgraphicstransform.h
index db8b574515..c2ee71d78d 100644
--- a/src/widgets/graphicsview/qgraphicstransform.h
+++ b/src/widgets/graphicsview/qgraphicstransform.h
@@ -93,7 +93,7 @@ public:
qreal zScale() const;
void setZScale(qreal);
- void applyTo(QMatrix4x4 *matrix) const;
+ void applyTo(QMatrix4x4 *matrix) const Q_DECL_OVERRIDE;
Q_SIGNALS:
void originChanged();
@@ -129,7 +129,7 @@ public:
void setAxis(const QVector3D &axis);
void setAxis(Qt::Axis axis);
- void applyTo(QMatrix4x4 *matrix) const;
+ void applyTo(QMatrix4x4 *matrix) const Q_DECL_OVERRIDE;
Q_SIGNALS:
void originChanged();
diff --git a/src/widgets/graphicsview/qgraphicsview.cpp b/src/widgets/graphicsview/qgraphicsview.cpp
index 5484ecb96e..b92655013e 100644
--- a/src/widgets/graphicsview/qgraphicsview.cpp
+++ b/src/widgets/graphicsview/qgraphicsview.cpp
@@ -350,6 +350,7 @@ QGraphicsViewPrivate::QGraphicsViewPrivate()
#ifndef QT_NO_RUBBERBAND
rubberBanding(false),
rubberBandSelectionMode(Qt::IntersectsItemShape),
+ rubberBandSelectionOperation(Qt::ReplaceSelection),
#endif
handScrollMotions(0), cacheMode(0),
#ifndef QT_NO_CURSOR
@@ -735,6 +736,7 @@ void QGraphicsViewPrivate::updateRubberBand(const QMouseEvent *event)
// if we didn't get the release events).
if (!event->buttons()) {
rubberBanding = false;
+ rubberBandSelectionOperation = Qt::ReplaceSelection;
if (!rubberBandRect.isNull()) {
rubberBandRect = QRect();
emit q->rubberBandChanged(rubberBandRect, QPointF(), QPointF());
@@ -768,7 +770,7 @@ void QGraphicsViewPrivate::updateRubberBand(const QMouseEvent *event)
selectionArea.addPolygon(q->mapToScene(rubberBandRect));
selectionArea.closeSubpath();
if (scene)
- scene->setSelectionArea(selectionArea, rubberBandSelectionMode, q->viewportTransform());
+ scene->setSelectionArea(selectionArea, rubberBandSelectionOperation, rubberBandSelectionMode, q->viewportTransform());
}
#endif
@@ -3289,8 +3291,14 @@ void QGraphicsView::mousePressEvent(QMouseEvent *event)
d->rubberBanding = true;
d->rubberBandRect = QRect();
if (d->scene) {
- // Initiating a rubber band always clears the selection.
- d->scene->clearSelection();
+ bool extendSelection = (event->modifiers() & Qt::ControlModifier) != 0;
+
+ if (extendSelection) {
+ d->rubberBandSelectionOperation = Qt::AddToSelection;
+ } else {
+ d->rubberBandSelectionOperation = Qt::ReplaceSelection;
+ d->scene->clearSelection();
+ }
}
}
} else
@@ -3347,6 +3355,7 @@ void QGraphicsView::mouseReleaseEvent(QMouseEvent *event)
d->updateAll();
}
d->rubberBanding = false;
+ d->rubberBandSelectionOperation = Qt::ReplaceSelection;
if (!d->rubberBandRect.isNull()) {
d->rubberBandRect = QRect();
emit rubberBandChanged(d->rubberBandRect, QPointF(), QPointF());
diff --git a/src/widgets/graphicsview/qgraphicsview.h b/src/widgets/graphicsview/qgraphicsview.h
index b681551fe7..39c28a1b64 100644
--- a/src/widgets/graphicsview/qgraphicsview.h
+++ b/src/widgets/graphicsview/qgraphicsview.h
@@ -110,7 +110,7 @@ public:
QGraphicsView(QGraphicsScene *scene, QWidget *parent = 0);
~QGraphicsView();
- QSize sizeHint() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
QPainter::RenderHints renderHints() const;
void setRenderHint(QPainter::RenderHint hint, bool enabled = true);
@@ -206,7 +206,7 @@ public:
inline QPoint mapFromScene(qreal x, qreal y) const;
inline QPolygon mapFromScene(qreal x, qreal y, qreal w, qreal h) const;
- QVariant inputMethodQuery(Qt::InputMethodQuery query) const;
+ QVariant inputMethodQuery(Qt::InputMethodQuery query) const Q_DECL_OVERRIDE;
QBrush backgroundBrush() const;
void setBackgroundBrush(const QBrush &brush);
@@ -225,37 +225,37 @@ Q_SIGNALS:
#endif
protected Q_SLOTS:
- void setupViewport(QWidget *widget);
+ void setupViewport(QWidget *widget) Q_DECL_OVERRIDE;
protected:
QGraphicsView(QGraphicsViewPrivate &, QWidget *parent = 0);
- bool event(QEvent *event);
- bool viewportEvent(QEvent *event);
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
+ bool viewportEvent(QEvent *event) Q_DECL_OVERRIDE;
#ifndef QT_NO_CONTEXTMENU
- void contextMenuEvent(QContextMenuEvent *event);
+ void contextMenuEvent(QContextMenuEvent *event) Q_DECL_OVERRIDE;
#endif
- void dragEnterEvent(QDragEnterEvent *event);
- void dragLeaveEvent(QDragLeaveEvent *event);
- void dragMoveEvent(QDragMoveEvent *event);
- void dropEvent(QDropEvent *event);
- void focusInEvent(QFocusEvent *event);
- bool focusNextPrevChild(bool next);
- void focusOutEvent(QFocusEvent *event);
- void keyPressEvent(QKeyEvent *event);
- void keyReleaseEvent(QKeyEvent *event);
- void mouseDoubleClickEvent(QMouseEvent *event);
- void mousePressEvent(QMouseEvent *event);
- void mouseMoveEvent(QMouseEvent *event);
- void mouseReleaseEvent(QMouseEvent *event);
+ void dragEnterEvent(QDragEnterEvent *event) Q_DECL_OVERRIDE;
+ void dragLeaveEvent(QDragLeaveEvent *event) Q_DECL_OVERRIDE;
+ void dragMoveEvent(QDragMoveEvent *event) Q_DECL_OVERRIDE;
+ void dropEvent(QDropEvent *event) Q_DECL_OVERRIDE;
+ void focusInEvent(QFocusEvent *event) Q_DECL_OVERRIDE;
+ bool focusNextPrevChild(bool next) Q_DECL_OVERRIDE;
+ void focusOutEvent(QFocusEvent *event) Q_DECL_OVERRIDE;
+ void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
+ void keyReleaseEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
+ void mouseDoubleClickEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
#ifndef QT_NO_WHEELEVENT
- void wheelEvent(QWheelEvent *event);
+ void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE;
#endif
- void paintEvent(QPaintEvent *event);
- void resizeEvent(QResizeEvent *event);
- void scrollContentsBy(int dx, int dy);
- void showEvent(QShowEvent *event);
- void inputMethodEvent(QInputMethodEvent *event);
+ void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
+ void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE;
+ void scrollContentsBy(int dx, int dy) Q_DECL_OVERRIDE;
+ void showEvent(QShowEvent *event) Q_DECL_OVERRIDE;
+ void inputMethodEvent(QInputMethodEvent *event) Q_DECL_OVERRIDE;
virtual void drawBackground(QPainter *painter, const QRectF &rect);
virtual void drawForeground(QPainter *painter, const QRectF &rect);
diff --git a/src/widgets/graphicsview/qgraphicsview_p.h b/src/widgets/graphicsview/qgraphicsview_p.h
index ca87b932e2..546f34ba81 100644
--- a/src/widgets/graphicsview/qgraphicsview_p.h
+++ b/src/widgets/graphicsview/qgraphicsview_p.h
@@ -134,6 +134,7 @@ public:
void updateRubberBand(const QMouseEvent *event);
bool rubberBanding;
Qt::ItemSelectionMode rubberBandSelectionMode;
+ Qt::ItemSelectionOperation rubberBandSelectionOperation;
#endif
int handScrollMotions;
diff --git a/src/widgets/graphicsview/qgraphicswidget.cpp b/src/widgets/graphicsview/qgraphicswidget.cpp
index 5bd563e535..fd4f66e3a8 100644
--- a/src/widgets/graphicsview/qgraphicswidget.cpp
+++ b/src/widgets/graphicsview/qgraphicswidget.cpp
@@ -2390,18 +2390,6 @@ bool QGraphicsWidget::close()
return true;
}
-#ifdef Q_NO_USING_KEYWORD
-/*!
- \fn const QObjectList &QGraphicsWidget::children() const
- \internal
-
- This function returns the same value as QObject::children(). It's
- provided to differentiate between the obsolete member
- QGraphicsItem::children() and QObject::children(). QGraphicsItem now
- provides childItems() instead.
-*/
-#endif
-
#if 0
void QGraphicsWidget::dumpFocusChain()
{
diff --git a/src/widgets/graphicsview/qgraphicswidget.h b/src/widgets/graphicsview/qgraphicswidget.h
index d0f3ac9af6..7999add64e 100644
--- a/src/widgets/graphicsview/qgraphicswidget.h
+++ b/src/widgets/graphicsview/qgraphicswidget.h
@@ -100,12 +100,12 @@ public:
inline void resize(qreal w, qreal h) { resize(QSizeF(w, h)); }
QSizeF size() const;
- void setGeometry(const QRectF &rect);
+ void setGeometry(const QRectF &rect) Q_DECL_OVERRIDE;
inline void setGeometry(qreal x, qreal y, qreal w, qreal h);
inline QRectF rect() const { return QRectF(QPointF(), size()); }
void setContentsMargins(qreal left, qreal top, qreal right, qreal bottom);
- void getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const;
+ void getContentsMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const Q_DECL_OVERRIDE;
void setWindowFrameMargins(qreal left, qreal top, qreal right, qreal bottom);
void getWindowFrameMargins(qreal *left, qreal *top, qreal *right, qreal *bottom) const;
@@ -150,22 +150,18 @@ public:
enum {
Type = 11
};
- int type() const;
+ int type() const Q_DECL_OVERRIDE;
- void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0) Q_DECL_OVERRIDE;
virtual void paintWindowFrame(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget = 0);
- QRectF boundingRect() const;
- QPainterPath shape() const;
+ QRectF boundingRect() const Q_DECL_OVERRIDE;
+ QPainterPath shape() const Q_DECL_OVERRIDE;
#if 0
void dumpFocusChain();
#endif
-#ifdef Q_NO_USING_KEYWORD
- const QObjectList &children() const { return QObject::children(); }
-#else
using QObject::children;
-#endif
Q_SIGNALS:
void geometryChanged();
@@ -177,28 +173,28 @@ public Q_SLOTS:
protected:
virtual void initStyleOption(QStyleOption *option) const;
- QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const;
- void updateGeometry();
+ QSizeF sizeHint(Qt::SizeHint which, const QSizeF &constraint = QSizeF()) const Q_DECL_OVERRIDE;
+ void updateGeometry() Q_DECL_OVERRIDE;
// Notification
- QVariant itemChange(GraphicsItemChange change, const QVariant &value);
+ QVariant itemChange(GraphicsItemChange change, const QVariant &value) Q_DECL_OVERRIDE;
virtual QVariant propertyChange(const QString &propertyName, const QVariant &value);
// Scene events
- bool sceneEvent(QEvent *event);
+ bool sceneEvent(QEvent *event) Q_DECL_OVERRIDE;
virtual bool windowFrameEvent(QEvent *e);
virtual Qt::WindowFrameSection windowFrameSectionAt(const QPointF& pos) const;
// Base event handlers
- bool event(QEvent *event);
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
//virtual void actionEvent(QActionEvent *event);
virtual void changeEvent(QEvent *event);
virtual void closeEvent(QCloseEvent *event);
//void create(WId window = 0, bool initializeWindow = true, bool destroyOldWindow = true);
//void destroy(bool destroyWindow = true, bool destroySubWindows = true);
- void focusInEvent(QFocusEvent *event);
+ void focusInEvent(QFocusEvent *event) Q_DECL_OVERRIDE;
virtual bool focusNextPrevChild(bool next);
- void focusOutEvent(QFocusEvent *event);
+ void focusOutEvent(QFocusEvent *event) Q_DECL_OVERRIDE;
virtual void hideEvent(QHideEvent *event);
//virtual int metric(PaintDeviceMetric m ) const;
virtual void moveEvent(QGraphicsSceneMoveEvent *event);
@@ -207,8 +203,8 @@ protected:
virtual void resizeEvent(QGraphicsSceneResizeEvent *event);
virtual void showEvent(QShowEvent *event);
//virtual void tabletEvent(QTabletEvent *event);
- virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event);
- virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event);
+ virtual void hoverMoveEvent(QGraphicsSceneHoverEvent *event) Q_DECL_OVERRIDE;
+ virtual void hoverLeaveEvent(QGraphicsSceneHoverEvent *event) Q_DECL_OVERRIDE;
virtual void grabMouseEvent(QEvent *event);
virtual void ungrabMouseEvent(QEvent *event);
virtual void grabKeyboardEvent(QEvent *event);
diff --git a/src/widgets/graphicsview/qgraphicswidget_p.h b/src/widgets/graphicsview/qgraphicswidget_p.h
index 2cb6565f87..16bf2e7c51 100644
--- a/src/widgets/graphicsview/qgraphicswidget_p.h
+++ b/src/widgets/graphicsview/qgraphicswidget_p.h
@@ -103,13 +103,13 @@ public:
QPalette palette;
uint inheritedPaletteResolveMask;
void setPalette_helper(const QPalette &palette);
- void resolvePalette(uint inheritedMask);
+ void resolvePalette(uint inheritedMask) Q_DECL_OVERRIDE;
void updatePalette(const QPalette &palette);
QPalette naturalWidgetPalette() const;
QFont font;
uint inheritedFontResolveMask;
void setFont_helper(const QFont &font);
- void resolveFont(uint inheritedMask);
+ void resolveFont(uint inheritedMask) Q_DECL_OVERRIDE;
void updateFont(const QFont &font);
QFont naturalWidgetFont() const;
@@ -124,13 +124,13 @@ public:
bool hasDecoration() const;
// Private Properties
- qreal width() const;
- void setWidth(qreal);
- void resetWidth();
+ qreal width() const Q_DECL_OVERRIDE;
+ void setWidth(qreal) Q_DECL_OVERRIDE;
+ void resetWidth() Q_DECL_OVERRIDE;
- qreal height() const;
- void setHeight(qreal);
- void resetHeight();
+ qreal height() const Q_DECL_OVERRIDE;
+ void setHeight(qreal) Q_DECL_OVERRIDE;
+ void resetHeight() Q_DECL_OVERRIDE;
void setGeometryFromSetPos();
// State
diff --git a/src/widgets/itemviews/itemviews.pri b/src/widgets/itemviews/itemviews.pri
index 4e152d18bb..2bbf7ac1ff 100644
--- a/src/widgets/itemviews/itemviews.pri
+++ b/src/widgets/itemviews/itemviews.pri
@@ -12,6 +12,7 @@ HEADERS += \
itemviews/qtreeview.h \
itemviews/qtreeview_p.h \
itemviews/qabstractitemdelegate.h \
+ itemviews/qabstractitemdelegate_p.h \
itemviews/qitemdelegate.h \
itemviews/qdirmodel.h \
itemviews/qlistwidget.h \
diff --git a/src/widgets/itemviews/qabstractitemdelegate.cpp b/src/widgets/itemviews/qabstractitemdelegate.cpp
index 4dffa6efe7..c4c3d2acfd 100644
--- a/src/widgets/itemviews/qabstractitemdelegate.cpp
+++ b/src/widgets/itemviews/qabstractitemdelegate.cpp
@@ -42,7 +42,17 @@
#include <qevent.h>
#include <qstring.h>
#include <qdebug.h>
+#include <qlineedit.h>
+#include <qtextedit.h>
+#include <qplaintextedit.h>
+#include <qapplication.h>
#include <private/qtextengine_p.h>
+#include <private/qabstractitemdelegate_p.h>
+
+#include <qpa/qplatformintegration.h>
+#include <qpa/qplatformdrag.h>
+#include <private/qguiapplication_p.h>
+#include <private/qdnd_p.h>
QT_BEGIN_NAMESPACE
@@ -165,7 +175,7 @@ QT_BEGIN_NAMESPACE
Creates a new abstract item delegate with the given \a parent.
*/
QAbstractItemDelegate::QAbstractItemDelegate(QObject *parent)
- : QObject(parent)
+ : QObject(*new QAbstractItemDelegatePrivate, parent)
{
}
@@ -405,6 +415,135 @@ QVector<int> QAbstractItemDelegate::paintingRoles() const
return QVector<int>();
}
+QAbstractItemDelegatePrivate::QAbstractItemDelegatePrivate()
+ : QObjectPrivate()
+{
+}
+
+static bool editorHandlesKeyEvent(QWidget *editor, const QKeyEvent *event)
+{
+#ifndef QT_NO_TEXTEDIT
+ // do not filter enter / return / tab / backtab for QTextEdit or QPlainTextEdit
+ if (qobject_cast<QTextEdit *>(editor) || qobject_cast<QPlainTextEdit *>(editor)) {
+ switch (event->key()) {
+ case Qt::Key_Tab:
+ case Qt::Key_Backtab:
+ case Qt::Key_Enter:
+ case Qt::Key_Return:
+ return true;
+
+ default:
+ break;
+ }
+ }
+#endif // QT_NO_TEXTEDIT
+
+ Q_UNUSED(editor);
+ Q_UNUSED(event);
+ return false;
+}
+
+bool QAbstractItemDelegatePrivate::editorEventFilter(QObject *object, QEvent *event)
+{
+ Q_Q(QAbstractItemDelegate);
+
+ QWidget *editor = qobject_cast<QWidget*>(object);
+ if (!editor)
+ return false;
+ if (event->type() == QEvent::KeyPress) {
+ QKeyEvent *keyEvent = static_cast<QKeyEvent *>(event);
+ if (editorHandlesKeyEvent(editor, keyEvent))
+ return false;
+
+ switch (keyEvent->key()) {
+ case Qt::Key_Tab:
+ if (tryFixup(editor)) {
+ emit q->commitData(editor);
+ emit q->closeEditor(editor, QAbstractItemDelegate::EditNextItem);
+ }
+ return true;
+ case Qt::Key_Backtab:
+ if (tryFixup(editor)) {
+ emit q->commitData(editor);
+ emit q->closeEditor(editor, QAbstractItemDelegate::EditPreviousItem);
+ }
+ return true;
+ case Qt::Key_Enter:
+ case Qt::Key_Return:
+ // We want the editor to be able to process the key press
+ // before committing the data (e.g. so it can do
+ // validation/fixup of the input).
+ if (!tryFixup(editor))
+ return true;
+
+ QMetaObject::invokeMethod(q, "_q_commitDataAndCloseEditor",
+ Qt::QueuedConnection, Q_ARG(QWidget*, editor));
+ return false;
+ case Qt::Key_Escape:
+ // don't commit data
+ emit q->closeEditor(editor, QAbstractItemDelegate::RevertModelCache);
+ return true;
+ default:
+ return false;
+ }
+ } else if (event->type() == QEvent::FocusOut || (event->type() == QEvent::Hide && editor->isWindow())) {
+ //the Hide event will take care of he editors that are in fact complete dialogs
+ if (!editor->isActiveWindow() || (QApplication::focusWidget() != editor)) {
+ QWidget *w = QApplication::focusWidget();
+ while (w) { // don't worry about focus changes internally in the editor
+ if (w == editor)
+ return false;
+ w = w->parentWidget();
+ }
+#ifndef QT_NO_DRAGANDDROP
+ // The window may lose focus during an drag operation.
+ // i.e when dragging involves the taskbar on Windows.
+ QPlatformDrag *platformDrag = QGuiApplicationPrivate::instance()->platformIntegration()->drag();
+ if (platformDrag && platformDrag->currentDrag()) {
+ return false;
+ }
+#endif
+ if (tryFixup(editor))
+ emit q->commitData(editor);
+
+ emit q->closeEditor(editor, QAbstractItemDelegate::NoHint);
+ }
+ } else if (event->type() == QEvent::ShortcutOverride) {
+ if (static_cast<QKeyEvent*>(event)->key() == Qt::Key_Escape) {
+ event->accept();
+ return true;
+ }
+ }
+ return false;
+}
+
+bool QAbstractItemDelegatePrivate::tryFixup(QWidget *editor)
+{
+#ifndef QT_NO_LINEEDIT
+ if (QLineEdit *e = qobject_cast<QLineEdit*>(editor)) {
+ if (!e->hasAcceptableInput()) {
+ if (const QValidator *validator = e->validator()) {
+ QString text = e->text();
+ validator->fixup(text);
+ e->setText(text);
+ }
+ return e->hasAcceptableInput();
+ }
+ }
+#endif // QT_NO_LINEEDIT
+
+ return true;
+}
+
+void QAbstractItemDelegatePrivate::_q_commitDataAndCloseEditor(QWidget *editor)
+{
+ Q_Q(QAbstractItemDelegate);
+ emit q->commitData(editor);
+ emit q->closeEditor(editor, QAbstractItemDelegate::SubmitModelCache);
+}
+
QT_END_NAMESPACE
+#include "moc_qabstractitemdelegate.cpp"
+
#endif // QT_NO_ITEMVIEWS
diff --git a/src/widgets/itemviews/qabstractitemdelegate.h b/src/widgets/itemviews/qabstractitemdelegate.h
index 9bce527bdc..8cd902f58e 100644
--- a/src/widgets/itemviews/qabstractitemdelegate.h
+++ b/src/widgets/itemviews/qabstractitemdelegate.h
@@ -47,6 +47,7 @@ class QModelIndex;
class QAbstractItemModel;
class QAbstractItemView;
class QHelpEvent;
+class QAbstractItemDelegatePrivate;
class Q_WIDGETS_EXPORT QAbstractItemDelegate : public QObject
{
@@ -114,7 +115,9 @@ Q_SIGNALS:
protected:
QAbstractItemDelegate(QObjectPrivate &, QObject *parent = 0);
private:
+ Q_DECLARE_PRIVATE(QAbstractItemDelegate)
Q_DISABLE_COPY(QAbstractItemDelegate)
+ Q_PRIVATE_SLOT(d_func(), void _q_commitDataAndCloseEditor(QWidget*))
};
#endif // QT_NO_ITEMVIEWS
diff --git a/src/widgets/itemviews/qabstractitemdelegate_p.h b/src/widgets/itemviews/qabstractitemdelegate_p.h
new file mode 100644
index 0000000000..debc9f5926
--- /dev/null
+++ b/src/widgets/itemviews/qabstractitemdelegate_p.h
@@ -0,0 +1,70 @@
+/****************************************************************************
+**
+** Copyright (C) 2014 Digia Plc and/or its subsidiary(-ies).
+** Contact: http://www.qt-project.org/legal
+**
+** This file is part of the QtWidgets module of the Qt Toolkit.
+**
+** $QT_BEGIN_LICENSE:LGPL21$
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Digia. For licensing terms and
+** conditions see http://qt.digia.com/licensing. For further information
+** use the contact form at http://qt.digia.com/contact-us.
+**
+** GNU Lesser General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 or version 3 as published by the Free
+** Software Foundation and appearing in the file LICENSE.LGPLv21 and
+** LICENSE.LGPLv3 included in the packaging of this file. Please review the
+** following information to ensure the GNU Lesser General Public License
+** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Digia gives you certain additional
+** rights. These rights are described in the Digia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#ifndef QABSTRACTITEMDELEGATE_P_H
+#define QABSTRACTITEMDELEGATE_P_H
+
+//
+// W A R N I N G
+// -------------
+//
+// This file is not part of the Qt API. It exists for the convenience
+// of other Qt classes. This header file may change from version to
+// version without notice, or even be removed.
+//
+// We mean it.
+//
+
+#include "qabstractitemdelegate.h"
+#include <private/qobject_p.h>
+
+#ifndef QT_NO_ITEMVIEWS
+
+QT_BEGIN_NAMESPACE
+
+class QAbstractItemDelegatePrivate : public QObjectPrivate
+{
+ Q_DECLARE_PUBLIC(QAbstractItemDelegate)
+public:
+ explicit QAbstractItemDelegatePrivate();
+
+ bool editorEventFilter(QObject *object, QEvent *event);
+ bool tryFixup(QWidget *editor);
+ void _q_commitDataAndCloseEditor(QWidget *editor);
+};
+
+QT_END_NAMESPACE
+
+#endif // QT_NO_ITEMVIEWS
+
+#endif // QABSTRACTITEMDELEGATE_P_H
diff --git a/src/widgets/itemviews/qabstractitemview.cpp b/src/widgets/itemviews/qabstractitemview.cpp
index 0f346a9682..2460955eb4 100644
--- a/src/widgets/itemviews/qabstractitemview.cpp
+++ b/src/widgets/itemviews/qabstractitemview.cpp
@@ -594,11 +594,6 @@ void QAbstractItemViewPrivate::_q_scrollerStateChanged()
*/
/*!
- \fn void QAbstractItemView::update()
- \internal
-*/
-
-/*!
Constructs an abstract item view with the given \a parent.
*/
QAbstractItemView::QAbstractItemView(QWidget *parent)
@@ -1538,6 +1533,7 @@ void QAbstractItemView::setIconSize(const QSize &size)
return;
d->iconSize = size;
d->doDelayedItemsLayout();
+ emit iconSizeChanged(size);
}
QSize QAbstractItemView::iconSize() const
diff --git a/src/widgets/itemviews/qabstractitemview.h b/src/widgets/itemviews/qabstractitemview.h
index f7cdcc8451..28c43633ea 100644
--- a/src/widgets/itemviews/qabstractitemview.h
+++ b/src/widgets/itemviews/qabstractitemview.h
@@ -68,7 +68,7 @@ class Q_WIDGETS_EXPORT QAbstractItemView : public QAbstractScrollArea
Q_PROPERTY(bool alternatingRowColors READ alternatingRowColors WRITE setAlternatingRowColors)
Q_PROPERTY(SelectionMode selectionMode READ selectionMode WRITE setSelectionMode)
Q_PROPERTY(SelectionBehavior selectionBehavior READ selectionBehavior WRITE setSelectionBehavior)
- Q_PROPERTY(QSize iconSize READ iconSize WRITE setIconSize)
+ Q_PROPERTY(QSize iconSize READ iconSize WRITE setIconSize NOTIFY iconSizeChanged)
Q_PROPERTY(Qt::TextElideMode textElideMode READ textElideMode WRITE setTextElideMode)
Q_PROPERTY(ScrollMode verticalScrollMode READ verticalScrollMode WRITE setVerticalScrollMode)
Q_PROPERTY(ScrollMode horizontalScrollMode READ horizontalScrollMode WRITE setHorizontalScrollMode)
@@ -209,13 +209,9 @@ public:
QAbstractItemDelegate *itemDelegate(const QModelIndex &index) const;
- virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const;
+ virtual QVariant inputMethodQuery(Qt::InputMethodQuery query) const Q_DECL_OVERRIDE;
-#ifdef Q_NO_USING_KEYWORD
- inline void update() { QAbstractScrollArea::update(); }
-#else
using QAbstractScrollArea::update;
-#endif
public Q_SLOTS:
virtual void reset();
@@ -255,6 +251,8 @@ Q_SIGNALS:
void entered(const QModelIndex &index);
void viewportEntered();
+ void iconSizeChanged(const QSize &size);
+
protected:
QAbstractItemView(QAbstractItemViewPrivate &, QWidget *parent = 0);
@@ -313,25 +311,25 @@ protected:
void stopAutoScroll();
void doAutoScroll();
- bool focusNextPrevChild(bool next);
- bool event(QEvent *event);
- bool viewportEvent(QEvent *event);
- void mousePressEvent(QMouseEvent *event);
- void mouseMoveEvent(QMouseEvent *event);
- void mouseReleaseEvent(QMouseEvent *event);
- void mouseDoubleClickEvent(QMouseEvent *event);
+ bool focusNextPrevChild(bool next) Q_DECL_OVERRIDE;
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
+ bool viewportEvent(QEvent *event) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ void mouseDoubleClickEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
#ifndef QT_NO_DRAGANDDROP
- void dragEnterEvent(QDragEnterEvent *event);
- void dragMoveEvent(QDragMoveEvent *event);
- void dragLeaveEvent(QDragLeaveEvent *event);
- void dropEvent(QDropEvent *event);
+ void dragEnterEvent(QDragEnterEvent *event) Q_DECL_OVERRIDE;
+ void dragMoveEvent(QDragMoveEvent *event) Q_DECL_OVERRIDE;
+ void dragLeaveEvent(QDragLeaveEvent *event) Q_DECL_OVERRIDE;
+ void dropEvent(QDropEvent *event) Q_DECL_OVERRIDE;
#endif
- void focusInEvent(QFocusEvent *event);
- void focusOutEvent(QFocusEvent *event);
- void keyPressEvent(QKeyEvent *event);
- void resizeEvent(QResizeEvent *event);
- void timerEvent(QTimerEvent *event);
- void inputMethodEvent(QInputMethodEvent *event);
+ void focusInEvent(QFocusEvent *event) Q_DECL_OVERRIDE;
+ void focusOutEvent(QFocusEvent *event) Q_DECL_OVERRIDE;
+ void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
+ void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE;
+ void timerEvent(QTimerEvent *event) Q_DECL_OVERRIDE;
+ void inputMethodEvent(QInputMethodEvent *event) Q_DECL_OVERRIDE;
#ifndef QT_NO_DRAGANDDROP
enum DropIndicatorPosition { OnItem, AboveItem, BelowItem, OnViewport };
diff --git a/src/widgets/itemviews/qcolumnview.h b/src/widgets/itemviews/qcolumnview.h
index 85b38840cf..91b5c10376 100644
--- a/src/widgets/itemviews/qcolumnview.h
+++ b/src/widgets/itemviews/qcolumnview.h
@@ -56,14 +56,14 @@ public:
~QColumnView();
// QAbstractItemView overloads
- QModelIndex indexAt(const QPoint &point) const;
- void scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible);
- QSize sizeHint() const;
- QRect visualRect(const QModelIndex &index) const;
- void setModel(QAbstractItemModel *model);
- void setSelectionModel(QItemSelectionModel * selectionModel);
- void setRootIndex(const QModelIndex &index);
- void selectAll();
+ QModelIndex indexAt(const QPoint &point) const Q_DECL_OVERRIDE;
+ void scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible) Q_DECL_OVERRIDE;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
+ QRect visualRect(const QModelIndex &index) const Q_DECL_OVERRIDE;
+ void setModel(QAbstractItemModel *model) Q_DECL_OVERRIDE;
+ void setSelectionModel(QItemSelectionModel * selectionModel) Q_DECL_OVERRIDE;
+ void setRootIndex(const QModelIndex &index) Q_DECL_OVERRIDE;
+ void selectAll() Q_DECL_OVERRIDE;
// QColumnView functions
void setResizeGripsVisible(bool visible);
@@ -79,18 +79,18 @@ protected:
QColumnView(QColumnViewPrivate &dd, QWidget *parent = 0);
// QAbstractItemView overloads
- bool isIndexHidden(const QModelIndex &index) const;
- QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers);
- void resizeEvent(QResizeEvent *event);
- void setSelection(const QRect & rect, QItemSelectionModel::SelectionFlags command);
- QRegion visualRegionForSelection(const QItemSelection &selection) const;
- int horizontalOffset() const;
- int verticalOffset() const;
- void rowsInserted(const QModelIndex &parent, int start, int end);
- void currentChanged(const QModelIndex &current, const QModelIndex &previous);
+ bool isIndexHidden(const QModelIndex &index) const Q_DECL_OVERRIDE;
+ QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers) Q_DECL_OVERRIDE;
+ void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE;
+ void setSelection(const QRect & rect, QItemSelectionModel::SelectionFlags command) Q_DECL_OVERRIDE;
+ QRegion visualRegionForSelection(const QItemSelection &selection) const Q_DECL_OVERRIDE;
+ int horizontalOffset() const Q_DECL_OVERRIDE;
+ int verticalOffset() const Q_DECL_OVERRIDE;
+ void rowsInserted(const QModelIndex &parent, int start, int end) Q_DECL_OVERRIDE;
+ void currentChanged(const QModelIndex &current, const QModelIndex &previous) Q_DECL_OVERRIDE;
// QColumnView functions
- void scrollContentsBy(int dx, int dy);
+ void scrollContentsBy(int dx, int dy) Q_DECL_OVERRIDE;
virtual QAbstractItemView* createColumn(const QModelIndex &rootIndex);
void initializeColumn(QAbstractItemView *column) const;
diff --git a/src/widgets/itemviews/qcolumnview_p.h b/src/widgets/itemviews/qcolumnview_p.h
index f96170679f..29bd97e5ef 100644
--- a/src/widgets/itemviews/qcolumnview_p.h
+++ b/src/widgets/itemviews/qcolumnview_p.h
@@ -73,7 +73,7 @@ public:
setMinimumWidth(previewWidget->minimumWidth());
}
- void resizeEvent(QResizeEvent * event){
+ void resizeEvent(QResizeEvent * event) Q_DECL_OVERRIDE{
if (!previewWidget)
return;
previewWidget->resize(
@@ -89,36 +89,36 @@ public:
QAbstractScrollArea::resizeEvent(event);
}
- QRect visualRect(const QModelIndex &) const
+ QRect visualRect(const QModelIndex &) const Q_DECL_OVERRIDE
{
return QRect();
}
- void scrollTo(const QModelIndex &, ScrollHint)
+ void scrollTo(const QModelIndex &, ScrollHint) Q_DECL_OVERRIDE
{
}
- QModelIndex indexAt(const QPoint &) const
+ QModelIndex indexAt(const QPoint &) const Q_DECL_OVERRIDE
{
return QModelIndex();
}
- QModelIndex moveCursor(CursorAction, Qt::KeyboardModifiers)
+ QModelIndex moveCursor(CursorAction, Qt::KeyboardModifiers) Q_DECL_OVERRIDE
{
return QModelIndex();
}
- int horizontalOffset () const {
+ int horizontalOffset () const Q_DECL_OVERRIDE {
return 0;
}
- int verticalOffset () const {
+ int verticalOffset () const Q_DECL_OVERRIDE {
return 0;
}
- QRegion visualRegionForSelection(const QItemSelection &) const
+ QRegion visualRegionForSelection(const QItemSelection &) const Q_DECL_OVERRIDE
{
return QRegion();
}
- bool isIndexHidden(const QModelIndex &) const
+ bool isIndexHidden(const QModelIndex &) const Q_DECL_OVERRIDE
{
return false;
}
- void setSelection(const QRect &, QItemSelectionModel::SelectionFlags)
+ void setSelection(const QRect &, QItemSelectionModel::SelectionFlags) Q_DECL_OVERRIDE
{
}
private:
@@ -146,7 +146,7 @@ public:
void _q_gripMoved(int offset);
void _q_changeCurrentColumn();
void _q_clicked(const QModelIndex &index);
- void _q_columnsInserted(const QModelIndex &parent, int start, int end);
+ void _q_columnsInserted(const QModelIndex &parent, int start, int end) Q_DECL_OVERRIDE;
QList<QAbstractItemView*> columns;
QVector<int> columnSizes; // used during init and corner moving
@@ -171,7 +171,7 @@ public:
void paint(QPainter *painter,
const QStyleOptionViewItem &option,
- const QModelIndex &index) const;
+ const QModelIndex &index) const Q_DECL_OVERRIDE;
};
#endif // QT_NO_QCOLUMNVIEW
diff --git a/src/widgets/itemviews/qcolumnviewgrip_p.h b/src/widgets/itemviews/qcolumnviewgrip_p.h
index e5e936a30d..e80f4b37be 100644
--- a/src/widgets/itemviews/qcolumnviewgrip_p.h
+++ b/src/widgets/itemviews/qcolumnviewgrip_p.h
@@ -67,11 +67,11 @@ public:
protected:
QColumnViewGrip(QColumnViewGripPrivate &, QWidget *parent = 0, Qt::WindowFlags f = 0);
- void paintEvent(QPaintEvent *event);
- void mouseDoubleClickEvent(QMouseEvent *event);
- void mouseMoveEvent(QMouseEvent *event);
- void mouseReleaseEvent(QMouseEvent *event);
- void mousePressEvent(QMouseEvent *event);
+ void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
+ void mouseDoubleClickEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
private:
Q_DECLARE_PRIVATE(QColumnViewGrip)
diff --git a/src/widgets/itemviews/qdatawidgetmapper.cpp b/src/widgets/itemviews/qdatawidgetmapper.cpp
index 43ed0b2ae5..2cf0725657 100644
--- a/src/widgets/itemviews/qdatawidgetmapper.cpp
+++ b/src/widgets/itemviews/qdatawidgetmapper.cpp
@@ -202,7 +202,7 @@ void QDataWidgetMapperPrivate::_q_commitData(QWidget *w)
class QFocusHelper: public QWidget
{
public:
- bool focusNextPrevChild(bool next)
+ bool focusNextPrevChild(bool next) Q_DECL_OVERRIDE
{
return QWidget::focusNextPrevChild(next);
}
diff --git a/src/widgets/itemviews/qdirmodel.cpp b/src/widgets/itemviews/qdirmodel.cpp
index 6bb8cd29c5..bff50fae0a 100644
--- a/src/widgets/itemviews/qdirmodel.cpp
+++ b/src/widgets/itemviews/qdirmodel.cpp
@@ -1146,11 +1146,6 @@ QFileInfo QDirModel::fileInfo(const QModelIndex &index) const
return node->info;
}
-/*!
- \fn QObject *QDirModel::parent() const
- \internal
-*/
-
/*
The root node is never seen outside the model.
*/
diff --git a/src/widgets/itemviews/qdirmodel.h b/src/widgets/itemviews/qdirmodel.h
index 249d7711c0..56b5a247d4 100644
--- a/src/widgets/itemviews/qdirmodel.h
+++ b/src/widgets/itemviews/qdirmodel.h
@@ -64,27 +64,27 @@ public:
explicit QDirModel(QObject *parent = 0);
~QDirModel();
- QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const;
- QModelIndex parent(const QModelIndex &child) const;
+ QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
+ QModelIndex parent(const QModelIndex &child) const Q_DECL_OVERRIDE;
- int rowCount(const QModelIndex &parent = QModelIndex()) const;
- int columnCount(const QModelIndex &parent = QModelIndex()) const;
+ int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
+ int columnCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
- QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
- bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
+ bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) Q_DECL_OVERRIDE;
- QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
+ QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
- bool hasChildren(const QModelIndex &index = QModelIndex()) const;
- Qt::ItemFlags flags(const QModelIndex &index) const;
+ bool hasChildren(const QModelIndex &index = QModelIndex()) const Q_DECL_OVERRIDE;
+ Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE;
- void sort(int column, Qt::SortOrder order = Qt::AscendingOrder);
+ void sort(int column, Qt::SortOrder order = Qt::AscendingOrder) Q_DECL_OVERRIDE;
- QStringList mimeTypes() const;
- QMimeData *mimeData(const QModelIndexList &indexes) const;
+ QStringList mimeTypes() const Q_DECL_OVERRIDE;
+ QMimeData *mimeData(const QModelIndexList &indexes) const Q_DECL_OVERRIDE;
bool dropMimeData(const QMimeData *data, Qt::DropAction action,
- int row, int column, const QModelIndex &parent);
- Qt::DropActions supportedDropActions() const;
+ int row, int column, const QModelIndex &parent) Q_DECL_OVERRIDE;
+ Qt::DropActions supportedDropActions() const Q_DECL_OVERRIDE;
// QDirModel specific API
@@ -121,11 +121,7 @@ public:
QIcon fileIcon(const QModelIndex &index) const;
QFileInfo fileInfo(const QModelIndex &index) const;
-#ifdef Q_NO_USING_KEYWORD
- inline QObject *parent() const { return QObject::parent(); }
-#else
using QObject::parent;
-#endif
public Q_SLOTS:
void refresh(const QModelIndex &parent = QModelIndex());
diff --git a/src/widgets/itemviews/qheaderview.cpp b/src/widgets/itemviews/qheaderview.cpp
index beade16339..aad382ed49 100644
--- a/src/widgets/itemviews/qheaderview.cpp
+++ b/src/widgets/itemviews/qheaderview.cpp
@@ -1515,6 +1515,11 @@ void QHeaderView::setCascadingSectionResizes(bool enable)
This property only affects sections that have \l Interactive or \l Fixed
as their resize mode.
+ By default, the value of this property is style dependent.
+ Thus, when the style changes, this property updates from it.
+ Calling setDefaultSectionSize() stops the updates, calling
+ resetDefaultSectionSize() will restore default behavior.
+
\sa setSectionResizeMode(), minimumSectionSize
*/
int QHeaderView::defaultSectionSize() const
@@ -1531,6 +1536,15 @@ void QHeaderView::setDefaultSectionSize(int size)
d->setDefaultSectionSize(size);
}
+void QHeaderView::resetDefaultSectionSize()
+{
+ Q_D(QHeaderView);
+ if (d->customDefaultSectionSize) {
+ d->updateDefaultSectionSizeFromStyle();
+ d->customDefaultSectionSize = false;
+ }
+}
+
/*!
\since 4.2
\property QHeaderView::minimumSectionSize
@@ -2209,6 +2223,10 @@ bool QHeaderView::event(QEvent *e)
resizeSections();
}
break; }
+ case QEvent::StyleChange:
+ if (!d->customDefaultSectionSize)
+ d->updateDefaultSectionSizeFromStyle();
+ break;
default:
break;
}
@@ -2371,7 +2389,7 @@ void QHeaderView::mouseMoveEvent(QMouseEvent *e)
{
Q_D(QHeaderView);
int pos = d->orientation == Qt::Horizontal ? e->x() : e->y();
- if (pos < 0)
+ if (pos < 0 && d->state != QHeaderViewPrivate::SelectSections)
return;
if (e->buttons() == Qt::NoButton) {
#if !defined(Q_WS_MAC)
@@ -2430,7 +2448,9 @@ void QHeaderView::mouseMoveEvent(QMouseEvent *e)
return;
}
case QHeaderViewPrivate::SelectSections: {
- int logical = logicalIndexAt(pos);
+ int logical = logicalIndexAt(qMax(-d->offset, pos));
+ if (logical == -1 && pos > 0)
+ logical = d->lastVisibleVisualIndex();
if (logical == d->pressed)
return; // nothing to do
else if (d->pressed != -1)
@@ -3463,6 +3483,7 @@ void QHeaderViewPrivate::setDefaultSectionSize(int size)
executePostedLayout();
invalidateCachedSizeHint();
defaultSectionSize = size;
+ customDefaultSectionSize = true;
if (state == QHeaderViewPrivate::ResizeSection)
preventCursorChangeInSetOffset = true;
for (int i = 0; i < sectionItems.count(); ++i) {
@@ -3483,6 +3504,17 @@ void QHeaderViewPrivate::setDefaultSectionSize(int size)
viewport->update();
}
+void QHeaderViewPrivate::updateDefaultSectionSizeFromStyle()
+{
+ Q_Q(QHeaderView);
+ if (orientation == Qt::Horizontal) {
+ defaultSectionSize = q->style()->pixelMetric(QStyle::PM_HeaderDefaultSectionSizeHorizontal, 0, q);
+ } else {
+ defaultSectionSize = qMax(q->minimumSectionSize(),
+ q->style()->pixelMetric(QStyle::PM_HeaderDefaultSectionSizeVertical, 0, q));
+ }
+}
+
void QHeaderViewPrivate::recalcSectionStartPos() const // linear (but fast)
{
int pixelpos = 0;
@@ -3630,6 +3662,7 @@ void QHeaderViewPrivate::write(QDataStream &out) const
out << sectionItems;
out << resizeContentsPrecision;
+ out << customDefaultSectionSize;
}
bool QHeaderViewPrivate::read(QDataStream &in)
@@ -3641,6 +3674,17 @@ bool QHeaderViewPrivate::read(QDataStream &in)
QVector<int> visualIndicesIn;
QVector<int> logicalIndicesIn;
QHash<int, int> hiddenSectionSizeIn;
+ bool movableSectionsIn;
+ bool clickableSectionsIn;
+ bool highlightSelectedIn;
+ bool stretchLastSectionIn;
+ bool cascadingResizingIn;
+ int stretchSectionsIn;
+ int contentsSectionsIn;
+ int defaultSectionSizeIn;
+ int minimumSectionSizeIn;
+ QVector<SectionItem> sectionItemsIn;
+
in >> orient;
in >> order;
@@ -3662,6 +3706,37 @@ bool QHeaderViewPrivate::read(QDataStream &in)
if (in.status() != QDataStream::Ok || lengthIn < 0)
return false;
+ in >> movableSectionsIn;
+ in >> clickableSectionsIn;
+ in >> highlightSelectedIn;
+ in >> stretchLastSectionIn;
+ in >> cascadingResizingIn;
+ in >> stretchSectionsIn;
+ in >> contentsSectionsIn;
+ in >> defaultSectionSizeIn;
+ in >> minimumSectionSizeIn;
+
+ in >> align;
+
+ in >> global;
+
+ in >> sectionItemsIn;
+ // In Qt4 we had a vector of spans where one span could hold information on more sections.
+ // Now we have an itemvector where one items contains information about one section
+ // For backward compatibility with Qt4 we do the following
+ QVector<SectionItem> newSectionItems;
+ for (int u = 0; u < sectionItemsIn.count(); ++u) {
+ int count = sectionItemsIn.at(u).tmpDataStreamSectionCount;
+ for (int n = 0; n < count; ++n)
+ newSectionItems.append(sectionItemsIn[u]);
+ }
+
+ int sectionItemsLengthTotal = 0;
+ foreach (const SectionItem& section, sectionItemsIn)
+ sectionItemsLengthTotal += section.size;
+ if (sectionItemsLengthTotal != lengthIn)
+ return false;
+
orientation = static_cast<Qt::Orientation>(orient);
sortIndicatorOrder = static_cast<Qt::SortOrder>(order);
sortIndicatorSection = sortIndicatorSectionIn;
@@ -3671,32 +3746,19 @@ bool QHeaderViewPrivate::read(QDataStream &in)
hiddenSectionSize = hiddenSectionSizeIn;
length = lengthIn;
- in >> movableSections;
- in >> clickableSections;
- in >> highlightSelected;
- in >> stretchLastSection;
- in >> cascadingResizing;
- in >> stretchSections;
- in >> contentsSections;
- in >> defaultSectionSize;
- in >> minimumSectionSize;
+ movableSections = movableSectionsIn;
+ clickableSections = clickableSectionsIn;
+ highlightSelected = highlightSelectedIn;
+ stretchLastSection = stretchLastSectionIn;
+ cascadingResizing = cascadingResizingIn;
+ stretchSections = stretchSectionsIn;
+ contentsSections = contentsSectionsIn;
+ defaultSectionSize = defaultSectionSizeIn;
+ minimumSectionSize = minimumSectionSizeIn;
- in >> align;
defaultAlignment = Qt::Alignment(align);
+ globalResizeMode = static_cast<QHeaderView::ResizeMode>(global);
- in >> global;
- globalResizeMode = (QHeaderView::ResizeMode)global;
-
- in >> sectionItems;
- // In Qt4 we had a vector of spans where one span could hold information on more sections.
- // Now we have an itemvector where one items contains information about one section
- // For backward compatibility with Qt4 we do the following
- QVector<SectionItem> newSectionItems;
- for (int u = 0; u < sectionItems.count(); ++u) {
- int count = sectionItems.at(u).tmpDataStreamSectionCount;
- for (int n = 0; n < count; ++n)
- newSectionItems.append(sectionItems[u]);
- }
sectionItems = newSectionItems;
setHiddenSectionsFromBitVector(sectionHidden);
recalcSectionStartPos();
@@ -3706,6 +3768,14 @@ bool QHeaderViewPrivate::read(QDataStream &in)
if (in.status() == QDataStream::Ok) // we haven't read past end
resizeContentsPrecision = tmpint;
+ bool tmpbool;
+ in >> tmpbool;
+ if (in.status() == QDataStream::Ok) { // we haven't read past end
+ customDefaultSectionSize = tmpbool;
+ if (!customDefaultSectionSize)
+ updateDefaultSectionSizeFromStyle();
+ }
+
return true;
}
diff --git a/src/widgets/itemviews/qheaderview.h b/src/widgets/itemviews/qheaderview.h
index 4a627b26b4..0163243cdf 100644
--- a/src/widgets/itemviews/qheaderview.h
+++ b/src/widgets/itemviews/qheaderview.h
@@ -51,7 +51,7 @@ class Q_WIDGETS_EXPORT QHeaderView : public QAbstractItemView
Q_PROPERTY(bool highlightSections READ highlightSections WRITE setHighlightSections)
Q_PROPERTY(bool stretchLastSection READ stretchLastSection WRITE setStretchLastSection)
Q_PROPERTY(bool cascadingSectionResizes READ cascadingSectionResizes WRITE setCascadingSectionResizes)
- Q_PROPERTY(int defaultSectionSize READ defaultSectionSize WRITE setDefaultSectionSize)
+ Q_PROPERTY(int defaultSectionSize READ defaultSectionSize WRITE setDefaultSectionSize RESET resetDefaultSectionSize)
Q_PROPERTY(int minimumSectionSize READ minimumSectionSize WRITE setMinimumSectionSize)
Q_PROPERTY(int maximumSectionSize READ maximumSectionSize WRITE setMaximumSectionSize)
Q_PROPERTY(Qt::Alignment defaultAlignment READ defaultAlignment WRITE setDefaultAlignment)
@@ -71,13 +71,13 @@ public:
explicit QHeaderView(Qt::Orientation orientation, QWidget *parent = 0);
virtual ~QHeaderView();
- void setModel(QAbstractItemModel *model);
+ void setModel(QAbstractItemModel *model) Q_DECL_OVERRIDE;
Qt::Orientation orientation() const;
int offset() const;
int length() const;
- QSize sizeHint() const;
- void setVisible(bool v);
+ QSize sizeHint() const Q_DECL_OVERRIDE;
+ void setVisible(bool v) Q_DECL_OVERRIDE;
int sectionSizeHint(int logicalIndex) const;
int visualIndexAt(int position) const;
@@ -156,6 +156,7 @@ public:
int defaultSectionSize() const;
void setDefaultSectionSize(int size);
+ void resetDefaultSectionSize();
int minimumSectionSize() const;
void setMinimumSectionSize(int size);
@@ -165,7 +166,7 @@ public:
Qt::Alignment defaultAlignment() const;
void setDefaultAlignment(Qt::Alignment alignment);
- void doItemsLayout();
+ void doItemsLayout() Q_DECL_OVERRIDE;
bool sectionsMoved() const;
bool sectionsHidden() const;
@@ -174,7 +175,7 @@ public:
bool restoreState(const QByteArray &state);
#endif
- void reset();
+ void reset() Q_DECL_OVERRIDE;
public Q_SLOTS:
void setOffset(int offset);
@@ -206,36 +207,36 @@ protected:
void initializeSections();
void initializeSections(int start, int end);
- void currentChanged(const QModelIndex &current, const QModelIndex &old);
+ void currentChanged(const QModelIndex &current, const QModelIndex &old) Q_DECL_OVERRIDE;
- bool event(QEvent *e);
- void paintEvent(QPaintEvent *e);
- void mousePressEvent(QMouseEvent *e);
- void mouseMoveEvent(QMouseEvent *e);
- void mouseReleaseEvent(QMouseEvent *e);
- void mouseDoubleClickEvent(QMouseEvent *e);
- bool viewportEvent(QEvent *e);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
+ void mouseMoveEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
+ void mouseReleaseEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
+ void mouseDoubleClickEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
+ bool viewportEvent(QEvent *e) Q_DECL_OVERRIDE;
virtual void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const;
virtual QSize sectionSizeFromContents(int logicalIndex) const;
- int horizontalOffset() const;
- int verticalOffset() const;
- void updateGeometries();
- void scrollContentsBy(int dx, int dy);
+ int horizontalOffset() const Q_DECL_OVERRIDE;
+ int verticalOffset() const Q_DECL_OVERRIDE;
+ void updateGeometries() Q_DECL_OVERRIDE;
+ void scrollContentsBy(int dx, int dy) Q_DECL_OVERRIDE;
- void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles = QVector<int>());
- void rowsInserted(const QModelIndex &parent, int start, int end);
+ void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles = QVector<int>()) Q_DECL_OVERRIDE;
+ void rowsInserted(const QModelIndex &parent, int start, int end) Q_DECL_OVERRIDE;
- QRect visualRect(const QModelIndex &index) const;
- void scrollTo(const QModelIndex &index, ScrollHint hint);
+ QRect visualRect(const QModelIndex &index) const Q_DECL_OVERRIDE;
+ void scrollTo(const QModelIndex &index, ScrollHint hint) Q_DECL_OVERRIDE;
- QModelIndex indexAt(const QPoint &p) const;
- bool isIndexHidden(const QModelIndex &index) const;
+ QModelIndex indexAt(const QPoint &p) const Q_DECL_OVERRIDE;
+ bool isIndexHidden(const QModelIndex &index) const Q_DECL_OVERRIDE;
- QModelIndex moveCursor(CursorAction, Qt::KeyboardModifiers);
- void setSelection(const QRect& rect, QItemSelectionModel::SelectionFlags flags);
- QRegion visualRegionForSelection(const QItemSelection &selection) const;
+ QModelIndex moveCursor(CursorAction, Qt::KeyboardModifiers) Q_DECL_OVERRIDE;
+ void setSelection(const QRect& rect, QItemSelectionModel::SelectionFlags flags) Q_DECL_OVERRIDE;
+ QRegion visualRegionForSelection(const QItemSelection &selection) const Q_DECL_OVERRIDE;
void initStyleOption(QStyleOptionHeader *option) const;
friend class QTableView;
diff --git a/src/widgets/itemviews/qheaderview_p.h b/src/widgets/itemviews/qheaderview_p.h
index fd99ea5474..2fde1bf79a 100644
--- a/src/widgets/itemviews/qheaderview_p.h
+++ b/src/widgets/itemviews/qheaderview_p.h
@@ -84,6 +84,7 @@ public:
cascadingResizing(false),
resizeRecursionBlock(false),
allowUserMoveOfSection0(true), // will be false for QTreeView and true for QTableView
+ customDefaultSectionSize(false),
stretchSections(0),
contentsSections(0),
minimumSectionSize(-1),
@@ -155,8 +156,7 @@ public:
inline void setDefaultValues(Qt::Orientation o) {
orientation = o;
- defaultSectionSize = (o == Qt::Horizontal ? 100
- : qMax(q_func()->minimumSectionSize(), 30));
+ updateDefaultSectionSizeFromStyle();
defaultAlignment = (o == Qt::Horizontal
? Qt::Alignment(Qt::AlignCenter)
: Qt::AlignLeft|Qt::AlignVCenter);
@@ -275,6 +275,7 @@ public:
bool cascadingResizing;
bool resizeRecursionBlock;
bool allowUserMoveOfSection0;
+ bool customDefaultSectionSize;
int stretchSections;
int contentsSections;
int defaultSectionSize;
@@ -321,6 +322,7 @@ public:
void removeSectionsFromSectionItems(int start, int end);
void resizeSectionItem(int visualIndex, int oldSize, int newSize);
void setDefaultSectionSize(int size);
+ void updateDefaultSectionSizeFromStyle();
void recalcSectionStartPos() const; // not really const
inline int headerLength() const { // for debugging
diff --git a/src/widgets/itemviews/qitemdelegate.cpp b/src/widgets/itemviews/qitemdelegate.cpp
index ef14ab8ed5..9303800e87 100644
--- a/src/widgets/itemviews/qitemdelegate.cpp
+++ b/src/widgets/itemviews/qitemdelegate.cpp
@@ -36,13 +36,7 @@
#ifndef QT_NO_ITEMVIEWS
#include <qabstractitemmodel.h>
#include <qapplication.h>
-#include <qpa/qplatformintegration.h>
-#include <qpa/qplatformdrag.h>
-#include <private/qguiapplication_p.h>
#include <qbrush.h>
-#include <qlineedit.h>
-#include <qtextedit.h>
-#include <qplaintextedit.h>
#include <qpainter.h>
#include <qpalette.h>
#include <qpoint.h>
@@ -58,8 +52,7 @@
#include <qitemeditorfactory.h>
#include <qmetaobject.h>
#include <qtextlayout.h>
-#include <private/qobject_p.h>
-#include <private/qdnd_p.h>
+#include <private/qabstractitemdelegate_p.h>
#include <private/qtextengine_p.h>
#include <qdebug.h>
#include <qlocale.h>
@@ -74,7 +67,7 @@
QT_BEGIN_NAMESPACE
-class QItemDelegatePrivate : public QObjectPrivate
+class QItemDelegatePrivate : public QAbstractItemDelegatePrivate
{
Q_DECLARE_PUBLIC(QItemDelegate)
@@ -105,9 +98,6 @@ public:
static QString valueToText(const QVariant &value, const QStyleOptionViewItem &option);
- bool tryFixup(QWidget *editor);
- void _q_commitDataAndCloseEditor(QWidget *editor);
-
QItemEditorFactory *f;
bool clipPainting;
@@ -129,13 +119,6 @@ public:
} tmp;
};
-void QItemDelegatePrivate::_q_commitDataAndCloseEditor(QWidget *editor)
-{
- Q_Q(QItemDelegate);
- emit q->commitData(editor);
- emit q->closeEditor(editor, QAbstractItemDelegate::SubmitModelCache);
-}
-
QRect QItemDelegatePrivate::textLayoutBounds(const QStyleOptionViewItem &option) const
{
QRect rect = option.rect;
@@ -379,24 +362,6 @@ QString QItemDelegatePrivate::valueToText(const QVariant &value, const QStyleOpt
return text;
}
-bool QItemDelegatePrivate::tryFixup(QWidget *editor)
-{
-#ifndef QT_NO_LINEEDIT
- if (QLineEdit *e = qobject_cast<QLineEdit*>(editor)) {
- if (!e->hasAcceptableInput()) {
- if (const QValidator *validator = e->validator()) {
- QString text = e->text();
- validator->fixup(text);
- e->setText(text);
- }
- return e->hasAcceptableInput();
- }
- }
-#endif // QT_NO_LINEEDIT
-
- return true;
-}
-
/*!
Renders the delegate using the given \a painter and style \a option for
the item specified by \a index.
@@ -1166,75 +1131,7 @@ QRect QItemDelegate::textRectangle(QPainter * /*painter*/, const QRect &rect,
bool QItemDelegate::eventFilter(QObject *object, QEvent *event)
{
Q_D(QItemDelegate);
-
- QWidget *editor = qobject_cast<QWidget*>(object);
- if (!editor)
- return false;
- if (event->type() == QEvent::KeyPress) {
- switch (static_cast<QKeyEvent *>(event)->key()) {
- case Qt::Key_Tab:
- if (d->tryFixup(editor)) {
- emit commitData(editor);
- emit closeEditor(editor, EditNextItem);
- }
- return true;
- case Qt::Key_Backtab:
- if (d->tryFixup(editor)) {
- emit commitData(editor);
- emit closeEditor(editor, EditPreviousItem);
- }
- return true;
- case Qt::Key_Enter:
- case Qt::Key_Return:
-#ifndef QT_NO_TEXTEDIT
- if (qobject_cast<QTextEdit *>(editor) || qobject_cast<QPlainTextEdit *>(editor))
- return false; // don't filter enter key events for QTextEdit
- // We want the editor to be able to process the key press
- // before committing the data (e.g. so it can do
- // validation/fixup of the input).
-#endif // QT_NO_TEXTEDIT
- if (!d->tryFixup(editor))
- return true;
-
- QMetaObject::invokeMethod(this, "_q_commitDataAndCloseEditor",
- Qt::QueuedConnection, Q_ARG(QWidget*, editor));
- return false;
- case Qt::Key_Escape:
- // don't commit data
- emit closeEditor(editor, QAbstractItemDelegate::RevertModelCache);
- return true;
- default:
- return false;
- }
- } else if (event->type() == QEvent::FocusOut || (event->type() == QEvent::Hide && editor->isWindow())) {
- //the Hide event will take care of he editors that are in fact complete dialogs
- if (!editor->isActiveWindow() || (QApplication::focusWidget() != editor)) {
- QWidget *w = QApplication::focusWidget();
- while (w) { // don't worry about focus changes internally in the editor
- if (w == editor)
- return false;
- w = w->parentWidget();
- }
-#ifndef QT_NO_DRAGANDDROP
- // The window may lose focus during an drag operation.
- // i.e when dragging involves the taskbar on Windows.
- QPlatformDrag *platformDrag = QGuiApplicationPrivate::instance()->platformIntegration()->drag();
- if (platformDrag && platformDrag->currentDrag()) {
- return false;
- }
-#endif
- if (d->tryFixup(editor))
- emit commitData(editor);
-
- emit closeEditor(editor, NoHint);
- }
- } else if (event->type() == QEvent::ShortcutOverride) {
- if (static_cast<QKeyEvent*>(event)->key() == Qt::Key_Escape) {
- event->accept();
- return true;
- }
- }
- return false;
+ return d->editorEventFilter(object, event);
}
/*!
diff --git a/src/widgets/itemviews/qitemdelegate.h b/src/widgets/itemviews/qitemdelegate.h
index 55b33b69b2..148e049333 100644
--- a/src/widgets/itemviews/qitemdelegate.h
+++ b/src/widgets/itemviews/qitemdelegate.h
@@ -62,21 +62,21 @@ public:
// painting
void paint(QPainter *painter,
const QStyleOptionViewItem &option,
- const QModelIndex &index) const;
+ const QModelIndex &index) const Q_DECL_OVERRIDE;
QSize sizeHint(const QStyleOptionViewItem &option,
- const QModelIndex &index) const;
+ const QModelIndex &index) const Q_DECL_OVERRIDE;
// editing
QWidget *createEditor(QWidget *parent,
const QStyleOptionViewItem &option,
- const QModelIndex &index) const;
+ const QModelIndex &index) const Q_DECL_OVERRIDE;
- void setEditorData(QWidget *editor, const QModelIndex &index) const;
- void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
+ void setEditorData(QWidget *editor, const QModelIndex &index) const Q_DECL_OVERRIDE;
+ void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const Q_DECL_OVERRIDE;
void updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option,
- const QModelIndex &index) const;
+ const QModelIndex &index) const Q_DECL_OVERRIDE;
// editor factory
QItemEditorFactory *itemEditorFactory() const;
@@ -99,9 +99,9 @@ protected:
QRect rect(const QStyleOptionViewItem &option, const QModelIndex &index, int role) const;
- bool eventFilter(QObject *object, QEvent *event);
+ bool eventFilter(QObject *object, QEvent *event) Q_DECL_OVERRIDE;
bool editorEvent(QEvent *event, QAbstractItemModel *model,
- const QStyleOptionViewItem &option, const QModelIndex &index);
+ const QStyleOptionViewItem &option, const QModelIndex &index) Q_DECL_OVERRIDE;
QStyleOptionViewItem setOptions(const QModelIndex &index,
const QStyleOptionViewItem &option) const;
@@ -117,8 +117,6 @@ protected:
private:
Q_DECLARE_PRIVATE(QItemDelegate)
Q_DISABLE_COPY(QItemDelegate)
-
- Q_PRIVATE_SLOT(d_func(), void _q_commitDataAndCloseEditor(QWidget*))
};
#endif // QT_NO_ITEMVIEWS
diff --git a/src/widgets/itemviews/qitemeditorfactory.cpp b/src/widgets/itemviews/qitemeditorfactory.cpp
index 2e8cca2997..ee1cb9b002 100644
--- a/src/widgets/itemviews/qitemeditorfactory.cpp
+++ b/src/widgets/itemviews/qitemeditorfactory.cpp
@@ -213,8 +213,8 @@ class QDefaultItemEditorFactory : public QItemEditorFactory
{
public:
inline QDefaultItemEditorFactory() {}
- QWidget *createEditor(int userType, QWidget *parent) const;
- QByteArray valuePropertyName(int) const;
+ QWidget *createEditor(int userType, QWidget *parent) const Q_DECL_OVERRIDE;
+ QByteArray valuePropertyName(int) const Q_DECL_OVERRIDE;
};
QWidget *QDefaultItemEditorFactory::createEditor(int userType, QWidget *parent) const
diff --git a/src/widgets/itemviews/qitemeditorfactory_p.h b/src/widgets/itemviews/qitemeditorfactory_p.h
index 9b46f1c728..739b75c63e 100644
--- a/src/widgets/itemviews/qitemeditorfactory_p.h
+++ b/src/widgets/itemviews/qitemeditorfactory_p.h
@@ -69,7 +69,7 @@ public:
}
protected:
- void changeEvent(QEvent *e);
+ void changeEvent(QEvent *e) Q_DECL_OVERRIDE;
public Q_SLOTS:
void resizeToContents();
diff --git a/src/widgets/itemviews/qlistview.h b/src/widgets/itemviews/qlistview.h
index ed0972413b..8e4cc7ff41 100644
--- a/src/widgets/itemviews/qlistview.h
+++ b/src/widgets/itemviews/qlistview.h
@@ -115,13 +115,13 @@ public:
void setSelectionRectVisible(bool show);
bool isSelectionRectVisible() const;
- QRect visualRect(const QModelIndex &index) const;
- void scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible);
- QModelIndex indexAt(const QPoint &p) const;
+ QRect visualRect(const QModelIndex &index) const Q_DECL_OVERRIDE;
+ void scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible) Q_DECL_OVERRIDE;
+ QModelIndex indexAt(const QPoint &p) const Q_DECL_OVERRIDE;
- void doItemsLayout();
- void reset();
- void setRootIndex(const QModelIndex &index);
+ void doItemsLayout() Q_DECL_OVERRIDE;
+ void reset() Q_DECL_OVERRIDE;
+ void setRootIndex(const QModelIndex &index) Q_DECL_OVERRIDE;
Q_SIGNALS:
void indexesMoved(const QModelIndexList &indexes);
@@ -129,48 +129,48 @@ Q_SIGNALS:
protected:
QListView(QListViewPrivate &, QWidget *parent = 0);
- bool event(QEvent *e);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
- void scrollContentsBy(int dx, int dy);
+ void scrollContentsBy(int dx, int dy) Q_DECL_OVERRIDE;
void resizeContents(int width, int height);
QSize contentsSize() const;
- void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles = QVector<int>());
- void rowsInserted(const QModelIndex &parent, int start, int end);
- void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end);
+ void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles = QVector<int>()) Q_DECL_OVERRIDE;
+ void rowsInserted(const QModelIndex &parent, int start, int end) Q_DECL_OVERRIDE;
+ void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) Q_DECL_OVERRIDE;
- void mouseMoveEvent(QMouseEvent *e);
- void mouseReleaseEvent(QMouseEvent *e);
+ void mouseMoveEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
+ void mouseReleaseEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
- void timerEvent(QTimerEvent *e);
- void resizeEvent(QResizeEvent *e);
+ void timerEvent(QTimerEvent *e) Q_DECL_OVERRIDE;
+ void resizeEvent(QResizeEvent *e) Q_DECL_OVERRIDE;
#ifndef QT_NO_DRAGANDDROP
- void dragMoveEvent(QDragMoveEvent *e);
- void dragLeaveEvent(QDragLeaveEvent *e);
- void dropEvent(QDropEvent *e);
- void startDrag(Qt::DropActions supportedActions);
+ void dragMoveEvent(QDragMoveEvent *e) Q_DECL_OVERRIDE;
+ void dragLeaveEvent(QDragLeaveEvent *e) Q_DECL_OVERRIDE;
+ void dropEvent(QDropEvent *e) Q_DECL_OVERRIDE;
+ void startDrag(Qt::DropActions supportedActions) Q_DECL_OVERRIDE;
#endif // QT_NO_DRAGANDDROP
- QStyleOptionViewItem viewOptions() const;
- void paintEvent(QPaintEvent *e);
+ QStyleOptionViewItem viewOptions() const Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE;
- int horizontalOffset() const;
- int verticalOffset() const;
- QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers);
+ int horizontalOffset() const Q_DECL_OVERRIDE;
+ int verticalOffset() const Q_DECL_OVERRIDE;
+ QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers) Q_DECL_OVERRIDE;
QRect rectForIndex(const QModelIndex &index) const;
void setPositionForIndex(const QPoint &position, const QModelIndex &index);
- void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command);
- QRegion visualRegionForSelection(const QItemSelection &selection) const;
- QModelIndexList selectedIndexes() const;
+ void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command) Q_DECL_OVERRIDE;
+ QRegion visualRegionForSelection(const QItemSelection &selection) const Q_DECL_OVERRIDE;
+ QModelIndexList selectedIndexes() const Q_DECL_OVERRIDE;
- void updateGeometries();
+ void updateGeometries() Q_DECL_OVERRIDE;
- bool isIndexHidden(const QModelIndex &index) const;
+ bool isIndexHidden(const QModelIndex &index) const Q_DECL_OVERRIDE;
- void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
- void currentChanged(const QModelIndex &current, const QModelIndex &previous);
+ void selectionChanged(const QItemSelection &selected, const QItemSelection &deselected) Q_DECL_OVERRIDE;
+ void currentChanged(const QModelIndex &current, const QModelIndex &previous) Q_DECL_OVERRIDE;
QSize viewportSizeHint() const Q_DECL_OVERRIDE;
diff --git a/src/widgets/itemviews/qlistwidget.cpp b/src/widgets/itemviews/qlistwidget.cpp
index 51561ac23b..aae75e5651 100644
--- a/src/widgets/itemviews/qlistwidget.cpp
+++ b/src/widgets/itemviews/qlistwidget.cpp
@@ -1783,9 +1783,24 @@ QStringList QListWidget::mimeTypes() const
If the list of items is empty, 0 is returned instead of a serialized empty
list.
*/
-QMimeData *QListWidget::mimeData(const QList<QListWidgetItem*>) const
+QMimeData *QListWidget::mimeData(const QList<QListWidgetItem*> items) const
{
- return d_func()->listModel()->internalMimeData();
+ Q_D(const QListWidget);
+
+ QModelIndexList &cachedIndexes = d->listModel()->cachedIndexes;
+
+ // if non empty, it's called from the model's own mimeData
+ if (cachedIndexes.isEmpty()) {
+ foreach (QListWidgetItem *item, items)
+ cachedIndexes << indexFromItem(item);
+
+ QMimeData *result = d->listModel()->internalMimeData();
+
+ cachedIndexes.clear();
+ return result;
+ }
+
+ return d->listModel()->internalMimeData();
}
#ifndef QT_NO_DRAGANDDROP
diff --git a/src/widgets/itemviews/qlistwidget.h b/src/widgets/itemviews/qlistwidget.h
index 753ad250cd..d5b131722d 100644
--- a/src/widgets/itemviews/qlistwidget.h
+++ b/src/widgets/itemviews/qlistwidget.h
@@ -243,7 +243,7 @@ public:
bool isItemHidden(const QListWidgetItem *item) const;
void setItemHidden(const QListWidgetItem *item, bool hide);
- void dropEvent(QDropEvent *event);
+ void dropEvent(QDropEvent *event) Q_DECL_OVERRIDE;
public Q_SLOTS:
void scrollToItem(const QListWidgetItem *item, QAbstractItemView::ScrollHint hint = EnsureVisible);
@@ -264,7 +264,7 @@ Q_SIGNALS:
void itemSelectionChanged();
protected:
- bool event(QEvent *e);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
virtual QStringList mimeTypes() const;
virtual QMimeData *mimeData(const QList<QListWidgetItem*> items) const;
#ifndef QT_NO_DRAGANDDROP
@@ -277,7 +277,7 @@ protected:
QListWidgetItem *itemFromIndex(const QModelIndex &index) const;
private:
- void setModel(QAbstractItemModel *model);
+ void setModel(QAbstractItemModel *model) Q_DECL_OVERRIDE;
Qt::SortOrder sortOrder() const;
Q_DECLARE_PRIVATE(QListWidget)
diff --git a/src/widgets/itemviews/qlistwidget_p.h b/src/widgets/itemviews/qlistwidget_p.h
index b019cd5eaf..1f2e9e8819 100644
--- a/src/widgets/itemviews/qlistwidget_p.h
+++ b/src/widgets/itemviews/qlistwidget_p.h
@@ -72,6 +72,8 @@ public:
class Q_AUTOTEST_EXPORT QListModel : public QAbstractListModel
{
Q_OBJECT
+ friend class QListWidget;
+
public:
QListModel(QListWidget *parent);
~QListModel();
diff --git a/src/widgets/itemviews/qstyleditemdelegate.cpp b/src/widgets/itemviews/qstyleditemdelegate.cpp
index fd4fb4440e..9d16b2abfc 100644
--- a/src/widgets/itemviews/qstyleditemdelegate.cpp
+++ b/src/widgets/itemviews/qstyleditemdelegate.cpp
@@ -36,9 +36,6 @@
#ifndef QT_NO_ITEMVIEWS
#include <qabstractitemmodel.h>
#include <qapplication.h>
-#include <qpa/qplatformintegration.h>
-#include <qpa/qplatformdrag.h>
-#include <private/qguiapplication_p.h>
#include <qbrush.h>
#include <qlineedit.h>
#include <qtextedit.h>
@@ -59,8 +56,7 @@
#include <private/qitemeditorfactory_p.h>
#include <qmetaobject.h>
#include <qtextlayout.h>
-#include <private/qobject_p.h>
-#include <private/qdnd_p.h>
+#include <private/qabstractitemdelegate_p.h>
#include <private/qtextengine_p.h>
#include <private/qlayoutengine_p.h>
#include <qdebug.h>
@@ -72,7 +68,7 @@
QT_BEGIN_NAMESPACE
-class QStyledItemDelegatePrivate : public QObjectPrivate
+class QStyledItemDelegatePrivate : public QAbstractItemDelegatePrivate
{
Q_DECLARE_PUBLIC(QStyledItemDelegate)
@@ -89,34 +85,9 @@ public:
return factory ? factory : QItemEditorFactory::defaultFactory();
}
- bool tryFixup(QWidget *editor);
- void _q_commitDataAndCloseEditor(QWidget *editor)
- {
- Q_Q(QStyledItemDelegate);
- emit q->commitData(editor);
- emit q->closeEditor(editor, QAbstractItemDelegate::SubmitModelCache);
- }
QItemEditorFactory *factory;
};
-bool QStyledItemDelegatePrivate::tryFixup(QWidget *editor)
-{
-#ifndef QT_NO_LINEEDIT
- if (QLineEdit *e = qobject_cast<QLineEdit*>(editor)) {
- if (!e->hasAcceptableInput()) {
- if (const QValidator *validator = e->validator()) {
- QString text = e->text();
- validator->fixup(text);
- e->setText(text);
- }
- return e->hasAcceptableInput();
- }
- }
-#endif // QT_NO_LINEEDIT
-
- return true;
-}
-
/*!
\class QStyledItemDelegate
@@ -637,75 +608,7 @@ void QStyledItemDelegate::setItemEditorFactory(QItemEditorFactory *factory)
bool QStyledItemDelegate::eventFilter(QObject *object, QEvent *event)
{
Q_D(QStyledItemDelegate);
-
- QWidget *editor = qobject_cast<QWidget*>(object);
- if (!editor)
- return false;
- if (event->type() == QEvent::KeyPress) {
- switch (static_cast<QKeyEvent *>(event)->key()) {
- case Qt::Key_Tab:
- if (d->tryFixup(editor)) {
- emit commitData(editor);
- emit closeEditor(editor, EditNextItem);
- }
- return true;
- case Qt::Key_Backtab:
- if (d->tryFixup(editor)) {
- emit commitData(editor);
- emit closeEditor(editor, EditPreviousItem);
- }
- return true;
- case Qt::Key_Enter:
- case Qt::Key_Return:
-#ifndef QT_NO_TEXTEDIT
- if (qobject_cast<QTextEdit *>(editor) || qobject_cast<QPlainTextEdit *>(editor))
- return false; // don't filter enter key events for QTextEdit
- // We want the editor to be able to process the key press
- // before committing the data (e.g. so it can do
- // validation/fixup of the input).
-#endif // QT_NO_TEXTEDIT
- if (!d->tryFixup(editor))
- return true;
-
- QMetaObject::invokeMethod(this, "_q_commitDataAndCloseEditor",
- Qt::QueuedConnection, Q_ARG(QWidget*, editor));
- return false;
- case Qt::Key_Escape:
- // don't commit data
- emit closeEditor(editor, QAbstractItemDelegate::RevertModelCache);
- return true;
- default:
- return false;
- }
- } else if (event->type() == QEvent::FocusOut || (event->type() == QEvent::Hide && editor->isWindow())) {
- //the Hide event will take care of he editors that are in fact complete dialogs
- if (!editor->isActiveWindow() || (QApplication::focusWidget() != editor)) {
- QWidget *w = QApplication::focusWidget();
- while (w) { // don't worry about focus changes internally in the editor
- if (w == editor)
- return false;
- w = w->parentWidget();
- }
-#ifndef QT_NO_DRAGANDDROP
- // The window may lose focus during an drag operation.
- // i.e when dragging involves the taskbar on Windows.
- QPlatformDrag *platformDrag = QGuiApplicationPrivate::instance()->platformIntegration()->drag();
- if (platformDrag && platformDrag->currentDrag()) {
- return false;
- }
-#endif
- if (d->tryFixup(editor))
- emit commitData(editor);
-
- emit closeEditor(editor, NoHint);
- }
- } else if (event->type() == QEvent::ShortcutOverride) {
- if (static_cast<QKeyEvent*>(event)->key() == Qt::Key_Escape) {
- event->accept();
- return true;
- }
- }
- return false;
+ return d->editorEventFilter(object, event);
}
/*!
diff --git a/src/widgets/itemviews/qstyleditemdelegate.h b/src/widgets/itemviews/qstyleditemdelegate.h
index b523263bd9..7f4ff006a3 100644
--- a/src/widgets/itemviews/qstyleditemdelegate.h
+++ b/src/widgets/itemviews/qstyleditemdelegate.h
@@ -57,23 +57,23 @@ public:
// painting
void paint(QPainter *painter,
- const QStyleOptionViewItem &option, const QModelIndex &index) const;
+ const QStyleOptionViewItem &option, const QModelIndex &index) const Q_DECL_OVERRIDE;
QSize sizeHint(const QStyleOptionViewItem &option,
- const QModelIndex &index) const;
+ const QModelIndex &index) const Q_DECL_OVERRIDE;
// editing
QWidget *createEditor(QWidget *parent,
const QStyleOptionViewItem &option,
- const QModelIndex &index) const;
+ const QModelIndex &index) const Q_DECL_OVERRIDE;
- void setEditorData(QWidget *editor, const QModelIndex &index) const;
+ void setEditorData(QWidget *editor, const QModelIndex &index) const Q_DECL_OVERRIDE;
void setModelData(QWidget *editor,
QAbstractItemModel *model,
- const QModelIndex &index) const;
+ const QModelIndex &index) const Q_DECL_OVERRIDE;
void updateEditorGeometry(QWidget *editor,
const QStyleOptionViewItem &option,
- const QModelIndex &index) const;
+ const QModelIndex &index) const Q_DECL_OVERRIDE;
// editor factory
QItemEditorFactory *itemEditorFactory() const;
@@ -85,15 +85,13 @@ protected:
virtual void initStyleOption(QStyleOptionViewItem *option,
const QModelIndex &index) const;
- bool eventFilter(QObject *object, QEvent *event);
+ bool eventFilter(QObject *object, QEvent *event) Q_DECL_OVERRIDE;
bool editorEvent(QEvent *event, QAbstractItemModel *model,
- const QStyleOptionViewItem &option, const QModelIndex &index);
+ const QStyleOptionViewItem &option, const QModelIndex &index) Q_DECL_OVERRIDE;
private:
Q_DECLARE_PRIVATE(QStyledItemDelegate)
Q_DISABLE_COPY(QStyledItemDelegate)
-
- Q_PRIVATE_SLOT(d_func(), void _q_commitDataAndCloseEditor(QWidget*))
};
#endif // QT_NO_ITEMVIEWS
diff --git a/src/widgets/itemviews/qtableview.cpp b/src/widgets/itemviews/qtableview.cpp
index b5eb509766..062debf4ee 100644
--- a/src/widgets/itemviews/qtableview.cpp
+++ b/src/widgets/itemviews/qtableview.cpp
@@ -584,7 +584,7 @@ class QTableCornerButton : public QAbstractButton
Q_OBJECT
public:
QTableCornerButton(QWidget *parent) : QAbstractButton(parent) {}
- void paintEvent(QPaintEvent*) {
+ void paintEvent(QPaintEvent*) Q_DECL_OVERRIDE {
QStyleOptionHeader opt;
opt.init(this);
QStyle::State state = QStyle::State_None;
diff --git a/src/widgets/itemviews/qtableview.h b/src/widgets/itemviews/qtableview.h
index 66e1318fad..a38d28f93e 100644
--- a/src/widgets/itemviews/qtableview.h
+++ b/src/widgets/itemviews/qtableview.h
@@ -57,10 +57,10 @@ public:
explicit QTableView(QWidget *parent = 0);
~QTableView();
- void setModel(QAbstractItemModel *model);
- void setRootIndex(const QModelIndex &index);
- void setSelectionModel(QItemSelectionModel *selectionModel);
- void doItemsLayout();
+ void setModel(QAbstractItemModel *model) Q_DECL_OVERRIDE;
+ void setRootIndex(const QModelIndex &index) Q_DECL_OVERRIDE;
+ void setSelectionModel(QItemSelectionModel *selectionModel) Q_DECL_OVERRIDE;
+ void doItemsLayout() Q_DECL_OVERRIDE;
QHeaderView *horizontalHeader() const;
QHeaderView *verticalHeader() const;
@@ -99,9 +99,9 @@ public:
void setCornerButtonEnabled(bool enable);
bool isCornerButtonEnabled() const;
- QRect visualRect(const QModelIndex &index) const;
- void scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible);
- QModelIndex indexAt(const QPoint &p) const;
+ QRect visualRect(const QModelIndex &index) const Q_DECL_OVERRIDE;
+ void scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible) Q_DECL_OVERRIDE;
+ QModelIndex indexAt(const QPoint &p) const Q_DECL_OVERRIDE;
void setSpan(int row, int column, int rowSpan, int columnSpan);
int rowSpan(int row, int column) const;
@@ -134,37 +134,37 @@ protected Q_SLOTS:
protected:
QTableView(QTableViewPrivate &, QWidget *parent);
- void scrollContentsBy(int dx, int dy);
+ void scrollContentsBy(int dx, int dy) Q_DECL_OVERRIDE;
- QStyleOptionViewItem viewOptions() const;
- void paintEvent(QPaintEvent *e);
+ QStyleOptionViewItem viewOptions() const Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE;
- void timerEvent(QTimerEvent *event);
+ void timerEvent(QTimerEvent *event) Q_DECL_OVERRIDE;
- int horizontalOffset() const;
- int verticalOffset() const;
- QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers);
+ int horizontalOffset() const Q_DECL_OVERRIDE;
+ int verticalOffset() const Q_DECL_OVERRIDE;
+ QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers) Q_DECL_OVERRIDE;
- void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command);
- QRegion visualRegionForSelection(const QItemSelection &selection) const;
- QModelIndexList selectedIndexes() const;
+ void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command) Q_DECL_OVERRIDE;
+ QRegion visualRegionForSelection(const QItemSelection &selection) const Q_DECL_OVERRIDE;
+ QModelIndexList selectedIndexes() const Q_DECL_OVERRIDE;
- void updateGeometries();
+ void updateGeometries() Q_DECL_OVERRIDE;
QSize viewportSizeHint() const Q_DECL_OVERRIDE;
- int sizeHintForRow(int row) const;
- int sizeHintForColumn(int column) const;
+ int sizeHintForRow(int row) const Q_DECL_OVERRIDE;
+ int sizeHintForColumn(int column) const Q_DECL_OVERRIDE;
- void verticalScrollbarAction(int action);
- void horizontalScrollbarAction(int action);
+ void verticalScrollbarAction(int action) Q_DECL_OVERRIDE;
+ void horizontalScrollbarAction(int action) Q_DECL_OVERRIDE;
- bool isIndexHidden(const QModelIndex &index) const;
+ bool isIndexHidden(const QModelIndex &index) const Q_DECL_OVERRIDE;
void selectionChanged(const QItemSelection &selected,
- const QItemSelection &deselected);
+ const QItemSelection &deselected) Q_DECL_OVERRIDE;
void currentChanged(const QModelIndex &current,
- const QModelIndex &previous);
+ const QModelIndex &previous) Q_DECL_OVERRIDE;
private:
friend class QAccessibleItemView;
diff --git a/src/widgets/itemviews/qtablewidget.cpp b/src/widgets/itemviews/qtablewidget.cpp
index 7c24819c0e..eb239f8025 100644
--- a/src/widgets/itemviews/qtablewidget.cpp
+++ b/src/widgets/itemviews/qtablewidget.cpp
@@ -2553,9 +2553,24 @@ QStringList QTableWidget::mimeTypes() const
If the list of items is empty, 0 is returned rather than a serialized
empty list.
*/
-QMimeData *QTableWidget::mimeData(const QList<QTableWidgetItem*>) const
+QMimeData *QTableWidget::mimeData(const QList<QTableWidgetItem*> items) const
{
- return d_func()->tableModel()->internalMimeData();
+ Q_D(const QTableWidget);
+
+ QModelIndexList &cachedIndexes = d->tableModel()->cachedIndexes;
+
+ // if non empty, it's called from the model's own mimeData
+ if (cachedIndexes.isEmpty()) {
+ foreach (QTableWidgetItem *item, items)
+ cachedIndexes << indexFromItem(item);
+
+ QMimeData *result = d->tableModel()->internalMimeData();
+
+ cachedIndexes.clear();
+ return result;
+ }
+
+ return d->tableModel()->internalMimeData();
}
/*!
diff --git a/src/widgets/itemviews/qtablewidget.h b/src/widgets/itemviews/qtablewidget.h
index a1d5b4e172..b7b5203d37 100644
--- a/src/widgets/itemviews/qtablewidget.h
+++ b/src/widgets/itemviews/qtablewidget.h
@@ -311,7 +311,7 @@ Q_SIGNALS:
void currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn);
protected:
- bool event(QEvent *e);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
virtual QStringList mimeTypes() const;
virtual QMimeData *mimeData(const QList<QTableWidgetItem*> items) const;
virtual bool dropMimeData(int row, int column, const QMimeData *data, Qt::DropAction action);
@@ -320,10 +320,10 @@ protected:
QModelIndex indexFromItem(QTableWidgetItem *item) const;
QTableWidgetItem *itemFromIndex(const QModelIndex &index) const;
- void dropEvent(QDropEvent *event);
+ void dropEvent(QDropEvent *event) Q_DECL_OVERRIDE;
private:
- void setModel(QAbstractItemModel *model);
+ void setModel(QAbstractItemModel *model) Q_DECL_OVERRIDE;
Q_DECLARE_PRIVATE(QTableWidget)
Q_DISABLE_COPY(QTableWidget)
diff --git a/src/widgets/itemviews/qtablewidget_p.h b/src/widgets/itemviews/qtablewidget_p.h
index 50b5a66eb5..92a8f5f305 100644
--- a/src/widgets/itemviews/qtablewidget_p.h
+++ b/src/widgets/itemviews/qtablewidget_p.h
@@ -82,6 +82,8 @@ public:
class QTableModel : public QAbstractTableModel
{
Q_OBJECT
+ friend class QTableWidget;
+
public:
enum ItemFlagsExtension {
ItemIsHeaderItem = 128
diff --git a/src/widgets/itemviews/qtreeview.cpp b/src/widgets/itemviews/qtreeview.cpp
index 2c5f4b7c72..71bf92f321 100644
--- a/src/widgets/itemviews/qtreeview.cpp
+++ b/src/widgets/itemviews/qtreeview.cpp
@@ -3094,8 +3094,6 @@ void QTreeViewPrivate::expand(int item, bool emitSignal)
void QTreeViewPrivate::insertViewItems(int pos, int count, const QTreeViewItem &viewItem)
{
- Q_Q(QTreeView);
- Q_UNUSED(q)
viewItems.insert(pos, count, viewItem);
QTreeViewItem *items = viewItems.data();
for (int i = pos + count; i < viewItems.count(); i++)
@@ -3105,8 +3103,6 @@ void QTreeViewPrivate::insertViewItems(int pos, int count, const QTreeViewItem &
void QTreeViewPrivate::removeViewItems(int pos, int count)
{
- Q_Q(QTreeView);
- Q_UNUSED(q)
viewItems.remove(pos, count);
QTreeViewItem *items = viewItems.data();
for (int i = pos; i < viewItems.count(); i++)
diff --git a/src/widgets/itemviews/qtreeview.h b/src/widgets/itemviews/qtreeview.h
index afdb94d770..2d7aaee69d 100644
--- a/src/widgets/itemviews/qtreeview.h
+++ b/src/widgets/itemviews/qtreeview.h
@@ -63,9 +63,9 @@ public:
explicit QTreeView(QWidget *parent = 0);
~QTreeView();
- void setModel(QAbstractItemModel *model);
- void setRootIndex(const QModelIndex &index);
- void setSelectionModel(QItemSelectionModel *selectionModel);
+ void setModel(QAbstractItemModel *model) Q_DECL_OVERRIDE;
+ void setRootIndex(const QModelIndex &index) Q_DECL_OVERRIDE;
+ void setSelectionModel(QItemSelectionModel *selectionModel) Q_DECL_OVERRIDE;
QHeaderView *header() const;
void setHeader(QHeaderView *header);
@@ -124,21 +124,21 @@ public:
void setTreePosition(int logicalIndex);
int treePosition() const;
- void keyboardSearch(const QString &search);
+ void keyboardSearch(const QString &search) Q_DECL_OVERRIDE;
- QRect visualRect(const QModelIndex &index) const;
- void scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible);
- QModelIndex indexAt(const QPoint &p) const;
+ QRect visualRect(const QModelIndex &index) const Q_DECL_OVERRIDE;
+ void scrollTo(const QModelIndex &index, ScrollHint hint = EnsureVisible) Q_DECL_OVERRIDE;
+ QModelIndex indexAt(const QPoint &p) const Q_DECL_OVERRIDE;
QModelIndex indexAbove(const QModelIndex &index) const;
QModelIndex indexBelow(const QModelIndex &index) const;
- void doItemsLayout();
- void reset();
+ void doItemsLayout() Q_DECL_OVERRIDE;
+ void reset() Q_DECL_OVERRIDE;
void sortByColumn(int column, Qt::SortOrder order);
- void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles = QVector<int>());
- void selectAll();
+ void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight, const QVector<int> &roles = QVector<int>()) Q_DECL_OVERRIDE;
+ void selectAll() Q_DECL_OVERRIDE;
Q_SIGNALS:
void expanded(const QModelIndex &index);
@@ -164,20 +164,20 @@ protected Q_SLOTS:
protected:
QTreeView(QTreeViewPrivate &dd, QWidget *parent = 0);
- void scrollContentsBy(int dx, int dy);
- void rowsInserted(const QModelIndex &parent, int start, int end);
- void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end);
+ void scrollContentsBy(int dx, int dy) Q_DECL_OVERRIDE;
+ void rowsInserted(const QModelIndex &parent, int start, int end) Q_DECL_OVERRIDE;
+ void rowsAboutToBeRemoved(const QModelIndex &parent, int start, int end) Q_DECL_OVERRIDE;
- QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers);
- int horizontalOffset() const;
- int verticalOffset() const;
+ QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers) Q_DECL_OVERRIDE;
+ int horizontalOffset() const Q_DECL_OVERRIDE;
+ int verticalOffset() const Q_DECL_OVERRIDE;
- void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command);
- QRegion visualRegionForSelection(const QItemSelection &selection) const;
- QModelIndexList selectedIndexes() const;
+ void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags command) Q_DECL_OVERRIDE;
+ QRegion visualRegionForSelection(const QItemSelection &selection) const Q_DECL_OVERRIDE;
+ QModelIndexList selectedIndexes() const Q_DECL_OVERRIDE;
- void timerEvent(QTimerEvent *event);
- void paintEvent(QPaintEvent *event);
+ void timerEvent(QTimerEvent *event) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
void drawTree(QPainter *painter, const QRegion &region) const;
virtual void drawRow(QPainter *painter,
@@ -187,30 +187,30 @@ protected:
const QRect &rect,
const QModelIndex &index) const;
- void mousePressEvent(QMouseEvent *event);
- void mouseReleaseEvent(QMouseEvent *event);
- void mouseDoubleClickEvent(QMouseEvent *event);
- void mouseMoveEvent(QMouseEvent *event);
- void keyPressEvent(QKeyEvent *event);
+ void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ void mouseDoubleClickEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
#ifndef QT_NO_DRAGANDDROP
- void dragMoveEvent(QDragMoveEvent *event);
+ void dragMoveEvent(QDragMoveEvent *event) Q_DECL_OVERRIDE;
#endif
- bool viewportEvent(QEvent *event);
+ bool viewportEvent(QEvent *event) Q_DECL_OVERRIDE;
- void updateGeometries();
+ void updateGeometries() Q_DECL_OVERRIDE;
QSize viewportSizeHint() const Q_DECL_OVERRIDE;
- int sizeHintForColumn(int column) const;
+ int sizeHintForColumn(int column) const Q_DECL_OVERRIDE;
int indexRowSizeHint(const QModelIndex &index) const;
int rowHeight(const QModelIndex &index) const;
- void horizontalScrollbarAction(int action);
+ void horizontalScrollbarAction(int action) Q_DECL_OVERRIDE;
- bool isIndexHidden(const QModelIndex &index) const;
+ bool isIndexHidden(const QModelIndex &index) const Q_DECL_OVERRIDE;
void selectionChanged(const QItemSelection &selected,
- const QItemSelection &deselected);
- void currentChanged(const QModelIndex &current, const QModelIndex &previous);
+ const QItemSelection &deselected) Q_DECL_OVERRIDE;
+ void currentChanged(const QModelIndex &current, const QModelIndex &previous) Q_DECL_OVERRIDE;
private:
friend class QAccessibleTable;
diff --git a/src/widgets/itemviews/qtreeview_p.h b/src/widgets/itemviews/qtreeview_p.h
index bc444eb37f..72cb897353 100644
--- a/src/widgets/itemviews/qtreeview_p.h
+++ b/src/widgets/itemviews/qtreeview_p.h
@@ -210,6 +210,8 @@ public:
QSet<QPersistentModelIndex> hiddenIndexes;
inline bool isRowHidden(const QModelIndex &idx) const {
+ if (hiddenIndexes.isEmpty())
+ return false;
//We first check if the idx is a QPersistentModelIndex, because creating QPersistentModelIndex is slow
return isPersistent(idx) && hiddenIndexes.contains(idx);
}
diff --git a/src/widgets/itemviews/qtreewidget.cpp b/src/widgets/itemviews/qtreewidget.cpp
index 0a4e57812a..704f8975b9 100644
--- a/src/widgets/itemviews/qtreewidget.cpp
+++ b/src/widgets/itemviews/qtreewidget.cpp
@@ -2153,10 +2153,11 @@ QVariant QTreeWidgetItem::childrenCheckState(int column) const
default:
return Qt::PartiallyChecked;
}
+
+ if (uncheckedChildren && checkedChildren)
+ return Qt::PartiallyChecked;
}
- if (uncheckedChildren && checkedChildren)
- return Qt::PartiallyChecked;
if (uncheckedChildren)
return Qt::Unchecked;
else if (checkedChildren)
diff --git a/src/widgets/itemviews/qtreewidget.h b/src/widgets/itemviews/qtreewidget.h
index b2b477289d..8ebfdd1b2a 100644
--- a/src/widgets/itemviews/qtreewidget.h
+++ b/src/widgets/itemviews/qtreewidget.h
@@ -316,7 +316,7 @@ public:
QTreeWidgetItem *itemAbove(const QTreeWidgetItem *item) const;
QTreeWidgetItem *itemBelow(const QTreeWidgetItem *item) const;
- void setSelectionModel(QItemSelectionModel *selectionModel);
+ void setSelectionModel(QItemSelectionModel *selectionModel) Q_DECL_OVERRIDE;
public Q_SLOTS:
void scrollToItem(const QTreeWidgetItem *item,
@@ -338,7 +338,7 @@ Q_SIGNALS:
void itemSelectionChanged();
protected:
- bool event(QEvent *e);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
virtual QStringList mimeTypes() const;
virtual QMimeData *mimeData(const QList<QTreeWidgetItem*> items) const;
virtual bool dropMimeData(QTreeWidgetItem *parent, int index,
@@ -348,10 +348,10 @@ protected:
QModelIndex indexFromItem(QTreeWidgetItem *item, int column = 0) const;
QTreeWidgetItem *itemFromIndex(const QModelIndex &index) const;
- void dropEvent(QDropEvent *event);
+ void dropEvent(QDropEvent *event) Q_DECL_OVERRIDE;
private:
- void setModel(QAbstractItemModel *model);
+ void setModel(QAbstractItemModel *model) Q_DECL_OVERRIDE;
Q_DECLARE_PRIVATE(QTreeWidget)
Q_DISABLE_COPY(QTreeWidget)
diff --git a/src/widgets/itemviews/qtreewidget_p.h b/src/widgets/itemviews/qtreewidget_p.h
index ec1395b9fb..3f7997d49b 100644
--- a/src/widgets/itemviews/qtreewidget_p.h
+++ b/src/widgets/itemviews/qtreewidget_p.h
@@ -84,24 +84,24 @@ public:
void itemChanged(QTreeWidgetItem *item);
QModelIndex index(const QTreeWidgetItem *item, int column) const;
- QModelIndex index(int row, int column, const QModelIndex &parent) const;
- QModelIndex parent(const QModelIndex &child) const;
- int rowCount(const QModelIndex &parent) const;
- int columnCount(const QModelIndex &parent = QModelIndex()) const;
- bool hasChildren(const QModelIndex &parent) const;
+ QModelIndex index(int row, int column, const QModelIndex &parent) const Q_DECL_OVERRIDE;
+ QModelIndex parent(const QModelIndex &child) const Q_DECL_OVERRIDE;
+ int rowCount(const QModelIndex &parent) const Q_DECL_OVERRIDE;
+ int columnCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
+ bool hasChildren(const QModelIndex &parent) const Q_DECL_OVERRIDE;
- QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
- bool setData(const QModelIndex &index, const QVariant &value, int role);
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
+ bool setData(const QModelIndex &index, const QVariant &value, int role) Q_DECL_OVERRIDE;
- QMap<int, QVariant> itemData(const QModelIndex &index) const;
+ QMap<int, QVariant> itemData(const QModelIndex &index) const Q_DECL_OVERRIDE;
- QVariant headerData(int section, Qt::Orientation orientation, int role) const;
+ QVariant headerData(int section, Qt::Orientation orientation, int role) const Q_DECL_OVERRIDE;
bool setHeaderData(int section, Qt::Orientation orientation, const QVariant &value,
- int role);
+ int role) Q_DECL_OVERRIDE;
- Qt::ItemFlags flags(const QModelIndex &index) const;
+ Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE;
- void sort(int column, Qt::SortOrder order);
+ void sort(int column, Qt::SortOrder order) Q_DECL_OVERRIDE;
void ensureSorted(int column, Qt::SortOrder order,
int start, int end, const QModelIndex &parent);
static bool itemLessThan(const QPair<QTreeWidgetItem*,int> &left,
@@ -113,17 +113,17 @@ public:
const QList<QTreeWidgetItem*>::iterator &end,
Qt::SortOrder order, QTreeWidgetItem *item);
- bool insertRows(int row, int count, const QModelIndex &);
- bool insertColumns(int column, int count, const QModelIndex &);
+ bool insertRows(int row, int count, const QModelIndex &) Q_DECL_OVERRIDE;
+ bool insertColumns(int column, int count, const QModelIndex &) Q_DECL_OVERRIDE;
- bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex());
+ bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE;
// dnd
- QStringList mimeTypes() const;
- QMimeData *mimeData(const QModelIndexList &indexes) const;
+ QStringList mimeTypes() const Q_DECL_OVERRIDE;
+ QMimeData *mimeData(const QModelIndexList &indexes) const Q_DECL_OVERRIDE;
bool dropMimeData(const QMimeData *data, Qt::DropAction action,
- int row, int column, const QModelIndex &parent);
- Qt::DropActions supportedDropActions() const;
+ int row, int column, const QModelIndex &parent) Q_DECL_OVERRIDE;
+ Qt::DropActions supportedDropActions() const Q_DECL_OVERRIDE;
QMimeData *internalMimeData() const;
@@ -138,7 +138,7 @@ protected:
void beginRemoveItems(QTreeWidgetItem *parent, int row, int count);
void endRemoveItems();
void sortItems(QList<QTreeWidgetItem*> *items, int column, Qt::SortOrder order);
- void timerEvent(QTimerEvent *);
+ void timerEvent(QTimerEvent *) Q_DECL_OVERRIDE;
private:
QTreeWidgetItem *rootItem;
diff --git a/src/widgets/kernel/qaction.h b/src/widgets/kernel/qaction.h
index 15364b4785..4fc4b424f6 100644
--- a/src/widgets/kernel/qaction.h
+++ b/src/widgets/kernel/qaction.h
@@ -170,7 +170,7 @@ public:
#endif
protected:
- bool event(QEvent *);
+ bool event(QEvent *) Q_DECL_OVERRIDE;
QAction(QActionPrivate &dd, QObject *parent);
public Q_SLOTS:
diff --git a/src/widgets/kernel/qapplication.cpp b/src/widgets/kernel/qapplication.cpp
index b7d0869289..bf05b2029b 100644
--- a/src/widgets/kernel/qapplication.cpp
+++ b/src/widgets/kernel/qapplication.cpp
@@ -64,6 +64,7 @@
#include <QtWidgets/qgraphicsproxywidget.h>
#include <QtGui/qstylehints.h>
#include <QtGui/qinputmethod.h>
+#include <QtGui/private/qwindow_p.h>
#include <qpa/qplatformtheme.h>
#ifndef QT_NO_WHATSTHIS
#include <QtWidgets/QWhatsThis>
@@ -636,7 +637,7 @@ void QApplicationPrivate::initialize()
qRegisterGuiStateMachine();
#endif
- if (qgetenv("QT_USE_NATIVE_WINDOWS").toInt() > 0)
+ if (qEnvironmentVariableIntValue("QT_USE_NATIVE_WINDOWS") > 0)
QCoreApplication::setAttribute(Qt::AA_NativeWindows);
#ifdef Q_OS_WINCE
@@ -658,8 +659,12 @@ void QApplicationPrivate::initialize()
initializeMultitouch();
if (QApplication::desktopSettingsAware())
- if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme())
+ if (const QPlatformTheme *theme = QGuiApplicationPrivate::platformTheme()) {
QApplicationPrivate::enabledAnimations = theme->themeHint(QPlatformTheme::UiEffects).toInt();
+#ifndef QT_NO_WHEELEVENT
+ QApplicationPrivate::wheel_scroll_lines = theme->themeHint(QPlatformTheme::WheelScrollLines).toInt();
+#endif
+ }
is_app_running = true; // no longer starting up
}
@@ -2485,7 +2490,7 @@ bool QApplicationPrivate::isWindowBlocked(QWindow *window, QWindow **blockingWin
}
QWidget *popupWidget = QApplication::activePopupWidget();
QWindow *popupWindow = popupWidget ? popupWidget->windowHandle() : 0;
- if (popupWindow == window) {
+ if (popupWindow == window || (!popupWindow && QWindowPrivate::get(window)->isPopup())) {
*blockingWindow = 0;
return false;
}
@@ -3122,39 +3127,15 @@ bool QApplication::notify(QObject *receiver, QEvent *e)
}
switch (e->type()) {
- case QEvent::KeyPress:
- {
- bool isWidget = receiver->isWidgetType();
- bool isWindow = receiver->isWindowType();
- bool isGraphicsWidget = false;
-#ifndef QT_NO_GRAPHICSVIEW
- isGraphicsWidget = !isWidget && !isWindow && qobject_cast<QGraphicsWidget *>(receiver);
-#endif
- if (!isWidget && !isGraphicsWidget && !isWindow) {
- return d->notify_helper(receiver, e);
- }
-
- QKeyEvent* key = static_cast<QKeyEvent*>(e);
-#ifndef QT_NO_SHORTCUT
- // Try looking for a Shortcut before sending key events
- QObject *shortcutReceiver = receiver;
- if (!isWidget && isWindow) {
- QWindow *w = qobject_cast<QWindow *>(receiver);
- QObject *focus = w ? w->focusObject() : 0;
- if (focus)
- shortcutReceiver = focus;
- }
- if (qApp->d_func()->shortcutMap.tryShortcutEvent(shortcutReceiver, key))
- return true;
-#endif
- qt_in_tab_key_event = (key->key() == Qt::Key_Backtab
- || key->key() == Qt::Key_Tab
- || key->key() == Qt::Key_Left
- || key->key() == Qt::Key_Up
- || key->key() == Qt::Key_Right
- || key->key() == Qt::Key_Down);
-
- }
+ case QEvent::KeyPress: {
+ int key = static_cast<QKeyEvent*>(e)->key();
+ qt_in_tab_key_event = (key == Qt::Key_Backtab
+ || key == Qt::Key_Tab
+ || key == Qt::Key_Left
+ || key == Qt::Key_Up
+ || key == Qt::Key_Right
+ || key == Qt::Key_Down);
+ }
default:
break;
}
@@ -3336,7 +3317,7 @@ bool QApplication::notify(QObject *receiver, QEvent *e)
while (w) {
QWheelEvent we(relpos, wheel->globalPos(), wheel->pixelDelta(), wheel->angleDelta(), wheel->delta(), wheel->orientation(), wheel->buttons(),
- wheel->modifiers(), wheel->phase());
+ wheel->modifiers(), wheel->phase(), wheel->source());
we.spont = wheel->spontaneous();
res = d->notify_helper(w, w == receiver ? wheel : &we);
eventAccepted = ((w == receiver) ? wheel : &we)->isAccepted();
diff --git a/src/widgets/kernel/qapplication.h b/src/widgets/kernel/qapplication.h
index ceba0c96c4..6762889b73 100644
--- a/src/widgets/kernel/qapplication.h
+++ b/src/widgets/kernel/qapplication.h
@@ -42,9 +42,6 @@
#ifdef QT_INCLUDE_COMPAT
# include <QtWidgets/qdesktopwidget.h>
#endif
-#ifdef Q_NO_USING_KEYWORD
-#include <QtGui/qpalette.h>
-#endif
#include <QtGui/qguiapplication.h>
QT_BEGIN_NAMESPACE
@@ -104,11 +101,7 @@ public:
QT_DEPRECATED static inline void setGraphicsSystem(const QString &) {}
#endif
-#if defined(Q_NO_USING_KEYWORD) && !defined(Q_QDOC)
- static QPalette palette() { return QGuiApplication::palette(); }
-#else
using QGuiApplication::palette;
-#endif
static QPalette palette(const QWidget *);
static QPalette palette(const char *className);
static void setPalette(const QPalette &, const char* className = 0);
@@ -178,7 +171,7 @@ public:
#endif
static int exec();
- bool notify(QObject *, QEvent *);
+ bool notify(QObject *, QEvent *) Q_DECL_OVERRIDE;
#ifdef QT_KEYPAD_NAVIGATION
static Q_DECL_DEPRECATED void setKeypadNavigationEnabled(bool);
@@ -206,8 +199,8 @@ public Q_SLOTS:
static void aboutQt();
protected:
- bool event(QEvent *);
- bool compressEvent(QEvent *, QObject *receiver, QPostEventList *);
+ bool event(QEvent *) Q_DECL_OVERRIDE;
+ bool compressEvent(QEvent *, QObject *receiver, QPostEventList *) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QApplication)
diff --git a/src/widgets/kernel/qapplication_p.h b/src/widgets/kernel/qapplication_p.h
index 7d97235c66..10f81a403a 100644
--- a/src/widgets/kernel/qapplication_p.h
+++ b/src/widgets/kernel/qapplication_p.h
@@ -108,10 +108,10 @@ public:
QApplicationPrivate(int &argc, char **argv, int flags);
~QApplicationPrivate();
- virtual void notifyLayoutDirectionChange();
- virtual void notifyActiveWindowChange(QWindow *);
+ virtual void notifyLayoutDirectionChange() Q_DECL_OVERRIDE;
+ virtual void notifyActiveWindowChange(QWindow *) Q_DECL_OVERRIDE;
- virtual bool shouldQuit();
+ virtual bool shouldQuit() Q_DECL_OVERRIDE;
bool tryCloseAllWindows() Q_DECL_OVERRIDE;
#if defined(Q_WS_X11)
@@ -127,7 +127,7 @@ public:
static QString desktopStyleKey();
- void createEventDispatcher();
+ void createEventDispatcher() Q_DECL_OVERRIDE;
static void dispatchEnterLeave(QWidget *enter, QWidget *leave, const QPointF &globalPosF);
void notifyWindowIconChanged() Q_DECL_OVERRIDE;
@@ -188,9 +188,9 @@ public:
static QPalette *set_pal;
protected:
- void notifyThemeChanged();
+ void notifyThemeChanged() Q_DECL_OVERRIDE;
#ifndef QT_NO_DRAGANDDROP
- void notifyDragStarted(const QDrag *);
+ void notifyDragStarted(const QDrag *) Q_DECL_OVERRIDE;
#endif // QT_NO_DRAGANDDROP
public:
@@ -289,7 +289,7 @@ public:
ulong timestamp);
static void translateTouchCancel(QTouchDevice *device, ulong timestamp);
- QPixmap applyQIconStyleHelper(QIcon::Mode mode, const QPixmap& base) const;
+ QPixmap applyQIconStyleHelper(QIcon::Mode mode, const QPixmap& base) const Q_DECL_OVERRIDE;
private:
static QApplicationPrivate *self;
static bool tryCloseAllWidgetWindows(QWindowList *processedWindows);
diff --git a/src/widgets/kernel/qboxlayout.h b/src/widgets/kernel/qboxlayout.h
index c2da23f34c..9c83248773 100644
--- a/src/widgets/kernel/qboxlayout.h
+++ b/src/widgets/kernel/qboxlayout.h
@@ -67,7 +67,7 @@ public:
void addWidget(QWidget *, int stretch = 0, Qt::Alignment alignment = 0);
void addLayout(QLayout *layout, int stretch = 0);
void addStrut(int);
- void addItem(QLayoutItem *);
+ void addItem(QLayoutItem *) Q_DECL_OVERRIDE;
void insertSpacing(int index, int size);
void insertStretch(int index, int stretch = 0);
@@ -84,20 +84,20 @@ public:
void setStretch(int index, int stretch);
int stretch(int index) const;
- QSize sizeHint() const;
- QSize minimumSize() const;
- QSize maximumSize() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize minimumSize() const Q_DECL_OVERRIDE;
+ QSize maximumSize() const Q_DECL_OVERRIDE;
- bool hasHeightForWidth() const;
- int heightForWidth(int) const;
- int minimumHeightForWidth(int) const;
+ bool hasHeightForWidth() const Q_DECL_OVERRIDE;
+ int heightForWidth(int) const Q_DECL_OVERRIDE;
+ int minimumHeightForWidth(int) const Q_DECL_OVERRIDE;
- Qt::Orientations expandingDirections() const;
- void invalidate();
- QLayoutItem *itemAt(int) const;
- QLayoutItem *takeAt(int);
- int count() const;
- void setGeometry(const QRect&);
+ Qt::Orientations expandingDirections() const Q_DECL_OVERRIDE;
+ void invalidate() Q_DECL_OVERRIDE;
+ QLayoutItem *itemAt(int) const Q_DECL_OVERRIDE;
+ QLayoutItem *takeAt(int) Q_DECL_OVERRIDE;
+ int count() const Q_DECL_OVERRIDE;
+ void setGeometry(const QRect&) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QBoxLayout)
diff --git a/src/widgets/kernel/qdesktopwidget.h b/src/widgets/kernel/qdesktopwidget.h
index e8ce49503b..322510aff4 100644
--- a/src/widgets/kernel/qdesktopwidget.h
+++ b/src/widgets/kernel/qdesktopwidget.h
@@ -79,7 +79,7 @@ Q_SIGNALS:
void screenCountChanged(int);
protected:
- void resizeEvent(QResizeEvent *e);
+ void resizeEvent(QResizeEvent *e) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QDesktopWidget)
diff --git a/src/widgets/kernel/qdesktopwidget_p.h b/src/widgets/kernel/qdesktopwidget_p.h
index 62f4d8ed6f..0f3083cbb5 100644
--- a/src/widgets/kernel/qdesktopwidget_p.h
+++ b/src/widgets/kernel/qdesktopwidget_p.h
@@ -48,6 +48,8 @@
#include "QDesktopWidget"
#include "private/qwidget_p.h"
+#include <QtCore/qalgorithms.h>
+
QT_BEGIN_NAMESPACE
class QDesktopScreenWidget : public QWidget {
@@ -65,7 +67,7 @@ class QDesktopWidgetPrivate : public QWidgetPrivate {
Q_DECLARE_PUBLIC(QDesktopWidget)
public:
- ~QDesktopWidgetPrivate() {foreach(QDesktopScreenWidget *s, screens) delete s; }
+ ~QDesktopWidgetPrivate() { qDeleteAll(screens); }
void _q_updateScreens();
void _q_availableGeometryChanged();
diff --git a/src/widgets/kernel/qformlayout.h b/src/widgets/kernel/qformlayout.h
index 06100f858f..e06f1f7375 100644
--- a/src/widgets/kernel/qformlayout.h
+++ b/src/widgets/kernel/qformlayout.h
@@ -118,19 +118,19 @@ public:
QWidget *labelForField(QLayout *field) const;
// reimplemented from QLayout
- void addItem(QLayoutItem *item);
- QLayoutItem *itemAt(int index) const;
- QLayoutItem *takeAt(int index);
-
- void setGeometry(const QRect &rect);
- QSize minimumSize() const;
- QSize sizeHint() const;
- void invalidate();
-
- bool hasHeightForWidth() const;
- int heightForWidth(int width) const;
- Qt::Orientations expandingDirections() const;
- int count() const;
+ void addItem(QLayoutItem *item) Q_DECL_OVERRIDE;
+ QLayoutItem *itemAt(int index) const Q_DECL_OVERRIDE;
+ QLayoutItem *takeAt(int index) Q_DECL_OVERRIDE;
+
+ void setGeometry(const QRect &rect) Q_DECL_OVERRIDE;
+ QSize minimumSize() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
+ void invalidate() Q_DECL_OVERRIDE;
+
+ bool hasHeightForWidth() const Q_DECL_OVERRIDE;
+ int heightForWidth(int width) const Q_DECL_OVERRIDE;
+ Qt::Orientations expandingDirections() const Q_DECL_OVERRIDE;
+ int count() const Q_DECL_OVERRIDE;
int rowCount() const;
diff --git a/src/widgets/kernel/qgesture.cpp b/src/widgets/kernel/qgesture.cpp
index 2b8f04ccdf..902f1fbcb1 100644
--- a/src/widgets/kernel/qgesture.cpp
+++ b/src/widgets/kernel/qgesture.cpp
@@ -36,6 +36,7 @@
#include "private/qstandardgestures_p.h"
#include "qgraphicsview.h"
+#include <QtCore/QDebug>
#ifndef QT_NO_GESTURES
QT_BEGIN_NAMESPACE
@@ -1086,46 +1087,79 @@ QPointF QGestureEvent::mapToGraphicsScene(const QPointF &gesturePoint) const
}
#endif //QT_NO_GRAPHICSVIEW
-#ifdef Q_NO_USING_KEYWORD
-/*!
- \fn void QGestureEvent::setAccepted(bool accepted)
-
- Sets or clears the event's internal flag that determines whether it should
- be delivered to other objects.
-
- Calling this function with a value of true for \a accepted indicates that the
- caller has accepted the event and that it should not be propagated further.
- Calling this function with a value of false indicates that the caller has
- ignored the event and that it should be delivered to other objects.
-
- For convenience, the accept flag can also be set with accept(), and cleared
- with ignore().
-
- \sa QEvent::accepted
-*/
-/*!
- \fn bool QGestureEvent::isAccepted() const
+#ifndef QT_NO_DEBUG_STREAM
- Returns \c true is the event has been accepted; otherwise returns \c false.
-
- \sa QEvent::accepted
-*/
-/*!
- \fn void QGestureEvent::accept()
-
- Accepts the event, the equivalent of calling setAccepted(true).
-
- \sa QEvent::accept()
-*/
-/*!
- \fn void QGestureEvent::ignore()
+static void formatGestureHeader(QDebug d, const char *className, const QGesture *gesture)
+{
+ d << className << "(state=" << gesture->state();
+ if (gesture->hasHotSpot())
+ d << ",hotSpot=" << gesture->hotSpot();
+}
- Ignores the event, the equivalent of calling setAccepted(false).
+Q_WIDGETS_EXPORT QDebug operator<<(QDebug d, const QGesture *gesture)
+{
+ QDebugStateSaver saver(d);
+ d.nospace();
+ switch (gesture->gestureType()) {
+ case Qt::TapGesture:
+ formatGestureHeader(d, "QTapGesture", gesture);
+ d << ",position=" << static_cast<const QTapGesture*>(gesture)->position() << ')';
+ break;
+ case Qt::TapAndHoldGesture: {
+ const QTapAndHoldGesture *tap = static_cast<const QTapAndHoldGesture*>(gesture);
+ formatGestureHeader(d, "QTapAndHoldGesture", tap);
+ d << ",position=" << tap->position() << ",timeout=" << tap->timeout() << ')';
+ }
+ break;
+ case Qt::PanGesture: {
+ const QPanGesture *pan = static_cast<const QPanGesture*>(gesture);
+ formatGestureHeader(d, "QPanGesture", pan);
+ d << ",lastOffset=" << pan->lastOffset() << ",offset=" << pan->offset()
+ << ",acceleration=" << pan->acceleration()
+ << ",delta=" << pan->delta() << ')';
+ }
+ break;
+ case Qt::PinchGesture: {
+ const QPinchGesture *pinch = static_cast<const QPinchGesture*>(gesture);
+ formatGestureHeader(d, "QPinchGesture", pinch);
+ d << ",totalChangeFlags=" << pinch->totalChangeFlags()
+ << ",changeFlags=" << pinch->changeFlags()
+ << ",startCenterPoint=" << pinch->startCenterPoint()
+ << ",lastCenterPoint=" << pinch->lastCenterPoint()
+ << ",centerPoint=" << pinch->centerPoint()
+ << ",totalScaleFactor=" << pinch->totalScaleFactor()
+ << ",lastScaleFactor=" << pinch->lastScaleFactor()
+ << ",scaleFactor=" << pinch->scaleFactor()
+ << ",totalRotationAngle=" << pinch->totalRotationAngle()
+ << ",lastRotationAngle=" << pinch->lastRotationAngle()
+ << ",rotationAngle=" << pinch->rotationAngle() << ')';
+ }
+ break;
+ case Qt::SwipeGesture: {
+ const QSwipeGesture *swipe = static_cast<const QSwipeGesture*>(gesture);
+ formatGestureHeader(d, "QSwipeGesture", swipe);
+ d << ",horizontalDirection=" << swipe->horizontalDirection()
+ << ",verticalDirection=" << swipe->verticalDirection()
+ << ",swipeAngle=" << swipe->swipeAngle() << ')';
+ }
+ break;
+ default:
+ formatGestureHeader(d, "Custom gesture", gesture);
+ d << ",type=" << gesture->gestureType() << ')';
+ break;
+ }
+ return d;
+}
- \sa QEvent::ignore()
-*/
-#endif
+Q_WIDGETS_EXPORT QDebug operator<<(QDebug d, const QGestureEvent *gestureEvent)
+{
+ QDebugStateSaver saver(d);
+ d.nospace();
+ d << "QGestureEvent(" << gestureEvent->gestures() << ')';
+ return d;
+}
+#endif // !QT_NO_DEBUG_STREAM
QT_END_NAMESPACE
#include <moc_qgesture.cpp>
diff --git a/src/widgets/kernel/qgesture.h b/src/widgets/kernel/qgesture.h
index 9e3ee64c87..a66132566b 100644
--- a/src/widgets/kernel/qgesture.h
+++ b/src/widgets/kernel/qgesture.h
@@ -275,18 +275,10 @@ public:
QList<QGesture *> activeGestures() const;
QList<QGesture *> canceledGestures() const;
-#ifdef Q_NO_USING_KEYWORD
- inline void setAccepted(bool accepted) { QEvent::setAccepted(accepted); }
- inline bool isAccepted() const { return QEvent::isAccepted(); }
-
- inline void accept() { QEvent::accept(); }
- inline void ignore() { QEvent::ignore(); }
-#else
using QEvent::setAccepted;
using QEvent::isAccepted;
using QEvent::accept;
using QEvent::ignore;
-#endif
void setAccepted(QGesture *, bool);
void accept(QGesture *);
@@ -315,6 +307,11 @@ private:
friend class QGestureManager;
};
+# ifndef QT_NO_DEBUG_STREAM
+Q_WIDGETS_EXPORT QDebug operator<<(QDebug, const QGesture *);
+Q_WIDGETS_EXPORT QDebug operator<<(QDebug, const QGestureEvent *);
+# endif
+
QT_END_NAMESPACE
Q_DECLARE_METATYPE(QGesture::GestureCancelPolicy)
diff --git a/src/widgets/kernel/qgesturemanager.cpp b/src/widgets/kernel/qgesturemanager.cpp
index f0aceaacf7..0dcb88fb39 100644
--- a/src/widgets/kernel/qgesturemanager.cpp
+++ b/src/widgets/kernel/qgesturemanager.cpp
@@ -51,18 +51,14 @@
#endif
#include "qdebug.h"
-
-// #define GESTURE_DEBUG
-#ifndef GESTURE_DEBUG
-# define DEBUG if (0) qDebug
-#else
-# define DEBUG qDebug
-#endif
+#include <QtCore/QLoggingCategory>
#ifndef QT_NO_GESTURES
QT_BEGIN_NAMESPACE
+Q_LOGGING_CATEGORY(lcGestureManager, "qt.widgets.gestures")
+
#if !defined(Q_OS_OSX)
static inline int panTouchPoints()
{
@@ -231,9 +227,8 @@ QGesture *QGestureManager::getState(QObject *object, QGestureRecognizer *recogni
// if the recognizer didn't fill in the gesture type, then this
// is a custom gesture with autogenerated id and we fill it.
state->d_func()->gestureType = type;
-#if defined(GESTURE_DEBUG)
- state->setObjectName(QString::number((int)type));
-#endif
+ if (lcGestureManager().isDebugEnabled())
+ state->setObjectName(QString::number((int)type));
}
m_objectGestures[QGestureManager::ObjectGesture(object, type)].append(state);
m_gestureToRecognizer[state] = recognizer;
@@ -275,26 +270,26 @@ bool QGestureManager::filterEventThroughContexts(const QMultiMap<QObject *,
QGestureRecognizer::Result recognizerState = recognizerResult & QGestureRecognizer::ResultState_Mask;
QGestureRecognizer::Result resultHint = recognizerResult & QGestureRecognizer::ResultHint_Mask;
if (recognizerState == QGestureRecognizer::TriggerGesture) {
- DEBUG() << "QGestureManager:Recognizer: gesture triggered: " << state;
+ qCDebug(lcGestureManager) << "QGestureManager:Recognizer: gesture triggered: " << state << event;
triggeredGestures << state;
} else if (recognizerState == QGestureRecognizer::FinishGesture) {
- DEBUG() << "QGestureManager:Recognizer: gesture finished: " << state;
+ qCDebug(lcGestureManager) << "QGestureManager:Recognizer: gesture finished: " << state << event;
finishedGestures << state;
} else if (recognizerState == QGestureRecognizer::MayBeGesture) {
- DEBUG() << "QGestureManager:Recognizer: maybe gesture: " << state;
+ qCDebug(lcGestureManager) << "QGestureManager:Recognizer: maybe gesture: " << state << event;
newMaybeGestures << state;
} else if (recognizerState == QGestureRecognizer::CancelGesture) {
- DEBUG() << "QGestureManager:Recognizer: not gesture: " << state;
+ qCDebug(lcGestureManager) << "QGestureManager:Recognizer: not gesture: " << state << event;
notGestures << state;
} else if (recognizerState == QGestureRecognizer::Ignore) {
- DEBUG() << "QGestureManager:Recognizer: ignored the event: " << state;
+ qCDebug(lcGestureManager) << "QGestureManager:Recognizer: ignored the event: " << state << event;
} else {
- DEBUG() << "QGestureManager:Recognizer: hm, lets assume the recognizer"
- << "ignored the event: " << state;
+ qCDebug(lcGestureManager) << "QGestureManager:Recognizer: hm, lets assume the recognizer"
+ << "ignored the event: " << state << event;
}
if (resultHint & QGestureRecognizer::ConsumeEventHint) {
- DEBUG() << "QGestureManager: we were asked to consume the event: "
- << state;
+ qCDebug(lcGestureManager) << "QGestureManager: we were asked to consume the event: "
+ << state << event;
consumeEventHint = true;
}
}
@@ -363,7 +358,7 @@ bool QGestureManager::filterEventThroughContexts(const QMultiMap<QObject *,
if (!m_activeGestures.isEmpty() || !m_maybeGestures.isEmpty() ||
!startedGestures.isEmpty() || !triggeredGestures.isEmpty() ||
!finishedGestures.isEmpty() || !canceledGestures.isEmpty()) {
- DEBUG() << "QGestureManager::filterEventThroughContexts:"
+ qCDebug(lcGestureManager) << "QGestureManager::filterEventThroughContexts:"
<< "\n\tactiveGestures:" << m_activeGestures
<< "\n\tmaybeGestures:" << m_maybeGestures
<< "\n\tstarted:" << startedGestures
@@ -381,7 +376,7 @@ bool QGestureManager::filterEventThroughContexts(const QMultiMap<QObject *,
if (undeliveredGestures.contains(g))
continue;
if (g->gestureCancelPolicy() == QGesture::CancelAllInContext) {
- DEBUG() << "lets try to cancel some";
+ qCDebug(lcGestureManager) << "lets try to cancel some";
// find gestures in context in Qt::GestureStarted or Qt::GestureUpdated state and cancel them
cancelGesturesForChildren(g);
}
@@ -421,7 +416,7 @@ void QGestureManager::cancelGesturesForChildren(QGesture *original)
QWidget *widget = m_gestureTargets.value(*iter);
// note that we don't touch the gestures for our originatingWidget
if (widget != originatingWidget && originatingWidget->isAncestorOf(widget)) {
- DEBUG() << " found a gesture to cancel" << (*iter);
+ qCDebug(lcGestureManager) << " found a gesture to cancel" << (*iter);
(*iter)->d_func()->state = Qt::GestureCanceled;
cancelledGestures << *iter;
iter = m_activeGestures.erase(iter);
@@ -648,7 +643,7 @@ void QGestureManager::deliverEvents(const QSet<QGesture *> &gestures,
normalStartedGestures[target].append(gesture);
}
} else {
- DEBUG() << "QGestureManager::deliverEvent: could not find the target for gesture"
+ qCDebug(lcGestureManager) << "QGestureManager::deliverEvent: could not find the target for gesture"
<< gesture->gestureType();
qWarning("QGestureManager::deliverEvent: could not find the target for gesture");
undeliveredGestures->insert(gesture);
@@ -656,7 +651,7 @@ void QGestureManager::deliverEvents(const QSet<QGesture *> &gestures,
}
getGestureTargets(startedGestures, &conflictedGestures, &normalStartedGestures);
- DEBUG() << "QGestureManager::deliverEvents:"
+ qCDebug(lcGestureManager) << "QGestureManager::deliverEvents:"
<< "\nstarted: " << startedGestures
<< "\nconflicted: " << conflictedGestures
<< "\nnormal: " << normalStartedGestures
@@ -667,7 +662,7 @@ void QGestureManager::deliverEvents(const QSet<QGesture *> &gestures,
e = conflictedGestures.constEnd(); it != e; ++it) {
QWidget *receiver = it.key();
QList<QGesture *> gestures = it.value();
- DEBUG() << "QGestureManager::deliverEvents: sending GestureOverride to"
+ qCDebug(lcGestureManager) << "QGestureManager::deliverEvents: sending GestureOverride to"
<< receiver
<< "gestures:" << gestures;
QGestureEvent event(gestures);
@@ -683,13 +678,13 @@ void QGestureManager::deliverEvents(const QSet<QGesture *> &gestures,
if (eventAccepted || event.isAccepted(gesture)) {
QWidget *w = event.m_targetWidgets.value(gesture->gestureType(), 0);
Q_ASSERT(w);
- DEBUG() << "override event: gesture was accepted:" << gesture << w;
+ qCDebug(lcGestureManager) << "override event: gesture was accepted:" << gesture << w;
QList<QGesture *> &gestures = normalStartedGestures[w];
gestures.append(gesture);
// override the target
m_gestureTargets[gesture] = w;
} else {
- DEBUG() << "override event: gesture wasn't accepted. putting back:" << gesture;
+ qCDebug(lcGestureManager) << "override event: gesture wasn't accepted. putting back:" << gesture;
QList<QGesture *> &gestures = normalStartedGestures[receiver];
gestures.append(gesture);
}
@@ -700,7 +695,7 @@ void QGestureManager::deliverEvents(const QSet<QGesture *> &gestures,
for (GesturesPerWidget::const_iterator it = normalStartedGestures.constBegin(),
e = normalStartedGestures.constEnd(); it != e; ++it) {
if (!it.value().isEmpty()) {
- DEBUG() << "QGestureManager::deliverEvents: sending to" << it.key()
+ qCDebug(lcGestureManager) << "QGestureManager::deliverEvents: sending to" << it.key()
<< "gestures:" << it.value();
QGestureEvent event(it.value());
QApplication::sendEvent(it.key(), &event);
@@ -710,7 +705,7 @@ void QGestureManager::deliverEvents(const QSet<QGesture *> &gestures,
(eventAccepted || event.isAccepted(gesture))) {
QWidget *w = event.m_targetWidgets.value(gesture->gestureType(), 0);
Q_ASSERT(w);
- DEBUG() << "started gesture was delivered and accepted by" << w;
+ qCDebug(lcGestureManager) << "started gesture was delivered and accepted by" << w;
m_gestureTargets[gesture] = w;
}
}
diff --git a/src/widgets/kernel/qgridlayout.h b/src/widgets/kernel/qgridlayout.h
index 95d8a0a445..89ece8f080 100644
--- a/src/widgets/kernel/qgridlayout.h
+++ b/src/widgets/kernel/qgridlayout.h
@@ -59,9 +59,9 @@ public:
~QGridLayout();
- QSize sizeHint() const;
- QSize minimumSize() const;
- QSize maximumSize() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize minimumSize() const Q_DECL_OVERRIDE;
+ QSize maximumSize() const Q_DECL_OVERRIDE;
void setHorizontalSpacing(int spacing);
int horizontalSpacing() const;
@@ -85,12 +85,12 @@ public:
QRect cellRect(int row, int column) const;
- bool hasHeightForWidth() const;
- int heightForWidth(int) const;
- int minimumHeightForWidth(int) const;
+ bool hasHeightForWidth() const Q_DECL_OVERRIDE;
+ int heightForWidth(int) const Q_DECL_OVERRIDE;
+ int minimumHeightForWidth(int) const Q_DECL_OVERRIDE;
- Qt::Orientations expandingDirections() const;
- void invalidate();
+ Qt::Orientations expandingDirections() const Q_DECL_OVERRIDE;
+ void invalidate() Q_DECL_OVERRIDE;
inline void addWidget(QWidget *w) { QLayout::addWidget(w); }
void addWidget(QWidget *, int row, int column, Qt::Alignment = 0);
@@ -101,11 +101,11 @@ public:
void setOriginCorner(Qt::Corner);
Qt::Corner originCorner() const;
- QLayoutItem *itemAt(int index) const;
+ QLayoutItem *itemAt(int index) const Q_DECL_OVERRIDE;
QLayoutItem *itemAtPosition(int row, int column) const;
- QLayoutItem *takeAt(int index);
- int count() const;
- void setGeometry(const QRect&);
+ QLayoutItem *takeAt(int index) Q_DECL_OVERRIDE;
+ int count() const Q_DECL_OVERRIDE;
+ void setGeometry(const QRect&) Q_DECL_OVERRIDE;
void addItem(QLayoutItem *item, int row, int column, int rowSpan = 1, int columnSpan = 1, Qt::Alignment = 0);
@@ -113,7 +113,7 @@ public:
void getItemPosition(int idx, int *row, int *column, int *rowSpan, int *columnSpan) const;
protected:
- void addItem(QLayoutItem *);
+ void addItem(QLayoutItem *) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QGridLayout)
diff --git a/src/widgets/kernel/qlayout.cpp b/src/widgets/kernel/qlayout.cpp
index f124f1ed8e..d2bc8f8347 100644
--- a/src/widgets/kernel/qlayout.cpp
+++ b/src/widgets/kernel/qlayout.cpp
@@ -268,14 +268,6 @@ bool QLayout::setAlignment(QLayout *l, Qt::Alignment alignment)
}
/*!
- \fn void QLayout::setAlignment(Qt::Alignment alignment)
-
- Sets the alignment of this item to \a alignment.
-
- \sa QLayoutItem::setAlignment()
-*/
-
-/*!
\property QLayout::margin
\brief the width of the outside border of the layout
\obsolete
diff --git a/src/widgets/kernel/qlayout.h b/src/widgets/kernel/qlayout.h
index 38568e434c..8bcbb700f4 100644
--- a/src/widgets/kernel/qlayout.h
+++ b/src/widgets/kernel/qlayout.h
@@ -88,11 +88,7 @@ public:
bool setAlignment(QWidget *w, Qt::Alignment alignment);
bool setAlignment(QLayout *l, Qt::Alignment alignment);
-#ifdef Q_NO_USING_KEYWORD
- inline void setAlignment(Qt::Alignment alignment) { QLayoutItem::setAlignment(alignment); }
-#else
using QLayoutItem::setAlignment;
-#endif
void setSizeConstraint(SizeConstraint);
SizeConstraint sizeConstraint() const;
@@ -101,8 +97,8 @@ public:
QWidget *parentWidget() const;
- void invalidate();
- QRect geometry() const;
+ void invalidate() Q_DECL_OVERRIDE;
+ QRect geometry() const Q_DECL_OVERRIDE;
bool activate();
void update();
@@ -112,16 +108,16 @@ public:
void removeWidget(QWidget *w);
void removeItem(QLayoutItem *);
- Qt::Orientations expandingDirections() const;
- QSize minimumSize() const;
- QSize maximumSize() const;
- virtual void setGeometry(const QRect&);
+ Qt::Orientations expandingDirections() const Q_DECL_OVERRIDE;
+ QSize minimumSize() const Q_DECL_OVERRIDE;
+ QSize maximumSize() const Q_DECL_OVERRIDE;
+ virtual void setGeometry(const QRect&) Q_DECL_OVERRIDE;
virtual QLayoutItem *itemAt(int index) const = 0;
virtual QLayoutItem *takeAt(int index) = 0;
virtual int indexOf(QWidget *) const;
virtual int count() const = 0;
- bool isEmpty() const;
- QSizePolicy::ControlTypes controlTypes() const;
+ bool isEmpty() const Q_DECL_OVERRIDE;
+ QSizePolicy::ControlTypes controlTypes() const Q_DECL_OVERRIDE;
// ### Qt 6 make this function virtual
QLayoutItem *replaceWidget(QWidget *from, QWidget *to, Qt::FindChildOptions options = Qt::FindChildrenRecursively);
@@ -130,7 +126,7 @@ public:
QSize totalMinimumSize() const;
QSize totalMaximumSize() const;
QSize totalSizeHint() const;
- QLayout *layout();
+ QLayout *layout() Q_DECL_OVERRIDE;
void setEnabled(bool);
bool isEnabled() const;
@@ -140,7 +136,7 @@ public:
protected:
void widgetEvent(QEvent *);
- void childEvent(QChildEvent *e);
+ void childEvent(QChildEvent *e) Q_DECL_OVERRIDE;
void addChildLayout(QLayout *l);
void addChildWidget(QWidget *w);
bool adoptLayout(QLayout *layout);
diff --git a/src/widgets/kernel/qopenglwidget.cpp b/src/widgets/kernel/qopenglwidget.cpp
index db116b070c..63ef4d6cc6 100644
--- a/src/widgets/kernel/qopenglwidget.cpp
+++ b/src/widgets/kernel/qopenglwidget.cpp
@@ -420,10 +420,25 @@ QT_BEGIN_NAMESPACE
the intention is to have a semi-transparent window. In that case the
traditional approach of setting Qt::WA_TranslucentBackground is sufficient.
+ QOpenGLWidget supports multiple update behaviors, just like QOpenGLWindow. In
+ preserved mode the rendered content from the previous paintGL() call is
+ available in the next one, allowing incremental rendering. In non-preserved
+ mode the content is lost and paintGL() implementations are expected to redraw
+ everything in the view.
+
+ Before Qt 5.5 the default behavior of QOpenGLWidget was to preserve the
+ rendered contents between paintGL() calls. Since Qt 5.5 the default behavior
+ is non-preserved because this provides better performance and the majority of
+ applications have no need for the previous content. This also resembles the
+ semantics of an OpenGL-based QWindow and matches the default behavior of
+ QOpenGLWindow in that the color and ancillary buffers are invalidated for
+ each frame. To restore the preserved behavior, call setUpdateBehavior() with
+ \c PartialUpdate.
+
\e{OpenGL is a trademark of Silicon Graphics, Inc. in the United States and other
countries.}
- \sa QOpenGLFunctions, QOpenGLWindow, Qt::AA_ShareOpenGLContexts
+ \sa QOpenGLFunctions, QOpenGLWindow, Qt::AA_ShareOpenGLContexts, UpdateBehavior
*/
/*!
@@ -455,6 +470,30 @@ QT_BEGIN_NAMESPACE
due to resizing the widget.
*/
+/*!
+ \enum QOpenGLWidget::UpdateBehavior
+ \since 5.5
+
+ This enum describes the update semantics of QOpenGLWidget.
+
+ \value NoPartialUpdate QOpenGLWidget will discard the
+ contents of the color buffer and the ancillary buffers after the
+ QOpenGLWidget is rendered to screen. This is the same behavior that can be
+ expected by calling QOpenGLContext::swapBuffers with a default opengl
+ enabled QWindow as the argument. NoPartialUpdate can have some performance
+ benefits on certain hardware architectures common in the mobile and
+ embedded space when a framebuffer object is used as the rendering target.
+ The framebuffer object is invalidated between frames with
+ glDiscardFramebufferEXT if supported or a glClear. Please see the
+ documentation of EXT_discard_framebuffer for more information:
+ https://www.khronos.org/registry/gles/extensions/EXT/EXT_discard_framebuffer.txt
+
+ \value PartialUpdate The framebuffer objects color buffer and ancillary
+ buffers are not invalidated between frames.
+
+ \sa updateBehavior(), setUpdateBehavior()
+*/
+
class QOpenGLWidgetPaintDevicePrivate : public QOpenGLPaintDevicePrivate
{
public:
@@ -486,9 +525,11 @@ public:
surface(0),
initialized(false),
fakeHidden(false),
- paintDevice(0),
inBackingStorePaint(false),
- flushPending(false)
+ hasBeenComposed(false),
+ flushPending(false),
+ paintDevice(0),
+ updateBehavior(QOpenGLWidget::NoPartialUpdate)
{
requestedFormat = QSurfaceFormat::defaultFormat();
}
@@ -507,6 +548,8 @@ public:
void invokeUserPaint();
void render();
+ void invalidateFbo();
+
QImage grabFramebuffer() Q_DECL_OVERRIDE;
void beginBackingStorePainting() Q_DECL_OVERRIDE { inBackingStorePaint = true; }
void endBackingStorePainting() Q_DECL_OVERRIDE { inBackingStorePaint = false; }
@@ -522,10 +565,12 @@ public:
QOffscreenSurface *surface;
bool initialized;
bool fakeHidden;
- QOpenGLPaintDevice *paintDevice;
bool inBackingStorePaint;
- QSurfaceFormat requestedFormat;
+ bool hasBeenComposed;
bool flushPending;
+ QOpenGLPaintDevice *paintDevice;
+ QSurfaceFormat requestedFormat;
+ QOpenGLWidget::UpdateBehavior updateBehavior;
};
void QOpenGLWidgetPaintDevicePrivate::beginPaint()
@@ -648,6 +693,7 @@ void QOpenGLWidgetPrivate::beginCompose()
q->makeCurrent();
context->functions()->glFlush();
}
+ hasBeenComposed = true;
emit q->aboutToCompose();
}
@@ -743,9 +789,31 @@ void QOpenGLWidgetPrivate::render()
return;
q->makeCurrent();
+
+ if (updateBehavior == QOpenGLWidget::NoPartialUpdate && hasBeenComposed) {
+ invalidateFbo();
+ hasBeenComposed = false;
+ }
+
invokeUserPaint();
}
+void QOpenGLWidgetPrivate::invalidateFbo()
+{
+ QOpenGLExtensions *f = static_cast<QOpenGLExtensions *>(QOpenGLContext::currentContext()->functions());
+ if (f->hasOpenGLExtension(QOpenGLExtensions::DiscardFramebuffer)) {
+ const int gl_color_attachment0 = 0x8CE0; // GL_COLOR_ATTACHMENT0
+ const int gl_depth_attachment = 0x8D00; // GL_DEPTH_ATTACHMENT
+ const int gl_stencil_attachment = 0x8D20; // GL_STENCIL_ATTACHMENT
+ const GLenum attachments[] = {
+ gl_color_attachment0, gl_depth_attachment, gl_stencil_attachment
+ };
+ f->glDiscardFramebufferEXT(GL_FRAMEBUFFER, sizeof attachments / sizeof *attachments, attachments);
+ } else {
+ f->glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);
+ }
+}
+
extern Q_GUI_EXPORT QImage qt_gl_read_framebuffer(const QSize &size, bool alpha_format, bool include_alpha);
QImage QOpenGLWidgetPrivate::grabFramebuffer()
@@ -801,6 +869,26 @@ QOpenGLWidget::~QOpenGLWidget()
}
/*!
+ Sets this widget's update behavior to \a updateBehavior.
+ \since 5.5
+*/
+void QOpenGLWidget::setUpdateBehavior(UpdateBehavior updateBehavior)
+{
+ Q_D(QOpenGLWidget);
+ d->updateBehavior = updateBehavior;
+}
+
+/*!
+ \return the update behavior of the widget.
+ \since 5.5
+*/
+QOpenGLWidget::UpdateBehavior QOpenGLWidget::updateBehavior() const
+{
+ Q_D(const QOpenGLWidget);
+ return d->updateBehavior;
+}
+
+/*!
Sets the requested surface \a format.
When the format is not explicitly set via this function, the format returned by
diff --git a/src/widgets/kernel/qopenglwidget.h b/src/widgets/kernel/qopenglwidget.h
index 2439fe65ce..3a4c1780dd 100644
--- a/src/widgets/kernel/qopenglwidget.h
+++ b/src/widgets/kernel/qopenglwidget.h
@@ -52,9 +52,17 @@ class Q_WIDGETS_EXPORT QOpenGLWidget : public QWidget
Q_DECLARE_PRIVATE(QOpenGLWidget)
public:
+ enum UpdateBehavior {
+ NoPartialUpdate,
+ PartialUpdate
+ };
+
explicit QOpenGLWidget(QWidget* parent = 0, Qt::WindowFlags f = 0);
~QOpenGLWidget();
+ void setUpdateBehavior(UpdateBehavior updateBehavior);
+ UpdateBehavior updateBehavior() const;
+
void setFormat(const QSurfaceFormat &format);
QSurfaceFormat format() const;
diff --git a/src/widgets/kernel/qshortcut.h b/src/widgets/kernel/qshortcut.h
index 86db4bcdab..0edaab7175 100644
--- a/src/widgets/kernel/qshortcut.h
+++ b/src/widgets/kernel/qshortcut.h
@@ -84,7 +84,7 @@ Q_SIGNALS:
void activatedAmbiguously();
protected:
- bool event(QEvent *e);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
};
#endif // QT_NO_SHORTCUT
diff --git a/src/widgets/kernel/qsizepolicy.h b/src/widgets/kernel/qsizepolicy.h
index 41adf5c58a..3a4fa80ba7 100644
--- a/src/widgets/kernel/qsizepolicy.h
+++ b/src/widgets/kernel/qsizepolicy.h
@@ -45,6 +45,7 @@ class Q_WIDGETS_EXPORT QSizePolicy
{
Q_GADGET
Q_ENUMS(Policy)
+ Q_FLAGS(ControlTypes)
public:
enum PolicyFlag {
@@ -100,12 +101,8 @@ public:
void setControlType(ControlType type);
Qt::Orientations expandingDirections() const {
- Qt::Orientations result;
- if (verticalPolicy() & ExpandFlag)
- result |= Qt::Vertical;
- if (horizontalPolicy() & ExpandFlag)
- result |= Qt::Horizontal;
- return result;
+ return ( (verticalPolicy() & ExpandFlag) ? Qt::Vertical : Qt::Orientations() )
+ | ( (horizontalPolicy() & ExpandFlag) ? Qt::Horizontal : Qt::Orientations() ) ;
}
void setHeightForWidth(bool b) { bits.hfw = b; }
diff --git a/src/widgets/kernel/qstackedlayout.cpp b/src/widgets/kernel/qstackedlayout.cpp
index d9a7745686..94ac97e1f8 100644
--- a/src/widgets/kernel/qstackedlayout.cpp
+++ b/src/widgets/kernel/qstackedlayout.cpp
@@ -140,11 +140,6 @@ QLayoutItem* QStackedLayoutPrivate::replaceAt(int idx, QLayoutItem *newitem)
*/
/*!
- \fn QWidget *QStackedLayout::widget()
- \internal
-*/
-
-/*!
Constructs a QStackedLayout with no parent.
This QStackedLayout must be installed on a widget later on to
diff --git a/src/widgets/kernel/qstackedlayout.h b/src/widgets/kernel/qstackedlayout.h
index b715f02069..afa45afc68 100644
--- a/src/widgets/kernel/qstackedlayout.h
+++ b/src/widgets/kernel/qstackedlayout.h
@@ -66,26 +66,22 @@ public:
QWidget *currentWidget() const;
int currentIndex() const;
-#ifdef Q_NO_USING_KEYWORD
- inline QWidget *widget() { return QLayout::widget(); }
-#else
using QLayout::widget;
-#endif
QWidget *widget(int) const;
- int count() const;
+ int count() const Q_DECL_OVERRIDE;
StackingMode stackingMode() const;
void setStackingMode(StackingMode stackingMode);
// abstract virtual functions:
- void addItem(QLayoutItem *item);
- QSize sizeHint() const;
- QSize minimumSize() const;
- QLayoutItem *itemAt(int) const;
- QLayoutItem *takeAt(int);
- void setGeometry(const QRect &rect);
- bool hasHeightForWidth() const;
- int heightForWidth(int width) const;
+ void addItem(QLayoutItem *item) Q_DECL_OVERRIDE;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize minimumSize() const Q_DECL_OVERRIDE;
+ QLayoutItem *itemAt(int) const Q_DECL_OVERRIDE;
+ QLayoutItem *takeAt(int) Q_DECL_OVERRIDE;
+ void setGeometry(const QRect &rect) Q_DECL_OVERRIDE;
+ bool hasHeightForWidth() const Q_DECL_OVERRIDE;
+ int heightForWidth(int width) const Q_DECL_OVERRIDE;
Q_SIGNALS:
void widgetRemoved(int index);
diff --git a/src/widgets/kernel/qstandardgestures_p.h b/src/widgets/kernel/qstandardgestures_p.h
index 15ba31f26a..2f2aac45c1 100644
--- a/src/widgets/kernel/qstandardgestures_p.h
+++ b/src/widgets/kernel/qstandardgestures_p.h
@@ -57,9 +57,9 @@ class QPanGestureRecognizer : public QGestureRecognizer
public:
explicit QPanGestureRecognizer(int pointCount = 2) : m_pointCount(pointCount) {}
- QGesture *create(QObject *target);
- QGestureRecognizer::Result recognize(QGesture *state, QObject *watched, QEvent *event);
- void reset(QGesture *state);
+ QGesture *create(QObject *target) Q_DECL_OVERRIDE;
+ QGestureRecognizer::Result recognize(QGesture *state, QObject *watched, QEvent *event) Q_DECL_OVERRIDE;
+ void reset(QGesture *state) Q_DECL_OVERRIDE;
private:
const int m_pointCount;
@@ -70,9 +70,9 @@ class QPinchGestureRecognizer : public QGestureRecognizer
public:
QPinchGestureRecognizer();
- QGesture *create(QObject *target);
- QGestureRecognizer::Result recognize(QGesture *state, QObject *watched, QEvent *event);
- void reset(QGesture *state);
+ QGesture *create(QObject *target) Q_DECL_OVERRIDE;
+ QGestureRecognizer::Result recognize(QGesture *state, QObject *watched, QEvent *event) Q_DECL_OVERRIDE;
+ void reset(QGesture *state) Q_DECL_OVERRIDE;
};
class QSwipeGestureRecognizer : public QGestureRecognizer
@@ -80,9 +80,9 @@ class QSwipeGestureRecognizer : public QGestureRecognizer
public:
QSwipeGestureRecognizer();
- QGesture *create(QObject *target);
- QGestureRecognizer::Result recognize(QGesture *state, QObject *watched, QEvent *event);
- void reset(QGesture *state);
+ QGesture *create(QObject *target) Q_DECL_OVERRIDE;
+ QGestureRecognizer::Result recognize(QGesture *state, QObject *watched, QEvent *event) Q_DECL_OVERRIDE;
+ void reset(QGesture *state) Q_DECL_OVERRIDE;
};
class QTapGestureRecognizer : public QGestureRecognizer
@@ -90,9 +90,9 @@ class QTapGestureRecognizer : public QGestureRecognizer
public:
QTapGestureRecognizer();
- QGesture *create(QObject *target);
- QGestureRecognizer::Result recognize(QGesture *state, QObject *watched, QEvent *event);
- void reset(QGesture *state);
+ QGesture *create(QObject *target) Q_DECL_OVERRIDE;
+ QGestureRecognizer::Result recognize(QGesture *state, QObject *watched, QEvent *event) Q_DECL_OVERRIDE;
+ void reset(QGesture *state) Q_DECL_OVERRIDE;
};
class QTapAndHoldGestureRecognizer : public QGestureRecognizer
@@ -100,9 +100,9 @@ class QTapAndHoldGestureRecognizer : public QGestureRecognizer
public:
QTapAndHoldGestureRecognizer();
- QGesture *create(QObject *target);
- QGestureRecognizer::Result recognize(QGesture *state, QObject *watched, QEvent *event);
- void reset(QGesture *state);
+ QGesture *create(QObject *target) Q_DECL_OVERRIDE;
+ QGestureRecognizer::Result recognize(QGesture *state, QObject *watched, QEvent *event) Q_DECL_OVERRIDE;
+ void reset(QGesture *state) Q_DECL_OVERRIDE;
};
QT_END_NAMESPACE
diff --git a/src/widgets/kernel/qtooltip.cpp b/src/widgets/kernel/qtooltip.cpp
index 7fcc5d3bc6..bb095e2ee0 100644
--- a/src/widgets/kernel/qtooltip.cpp
+++ b/src/widgets/kernel/qtooltip.cpp
@@ -116,7 +116,7 @@ public:
~QTipLabel();
static QTipLabel *instance;
- bool eventFilter(QObject *, QEvent *);
+ bool eventFilter(QObject *, QEvent *) Q_DECL_OVERRIDE;
QBasicTimer hideTimer, expireTimer;
@@ -132,10 +132,10 @@ public:
static int getTipScreen(const QPoint &pos, QWidget *w);
protected:
- void timerEvent(QTimerEvent *e);
- void paintEvent(QPaintEvent *e);
- void mouseMoveEvent(QMouseEvent *e);
- void resizeEvent(QResizeEvent *e);
+ void timerEvent(QTimerEvent *e) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE;
+ void mouseMoveEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
+ void resizeEvent(QResizeEvent *e) Q_DECL_OVERRIDE;
#ifndef QT_NO_STYLE_STYLESHEET
public slots:
diff --git a/src/widgets/kernel/qwhatsthis.cpp b/src/widgets/kernel/qwhatsthis.cpp
index 632cb242dc..b4d18844a9 100644
--- a/src/widgets/kernel/qwhatsthis.cpp
+++ b/src/widgets/kernel/qwhatsthis.cpp
@@ -141,12 +141,12 @@ public:
static QWhatsThat *instance;
protected:
- void showEvent(QShowEvent *e);
- void mousePressEvent(QMouseEvent*);
- void mouseReleaseEvent(QMouseEvent*);
- void mouseMoveEvent(QMouseEvent*);
- void keyPressEvent(QKeyEvent*);
- void paintEvent(QPaintEvent*);
+ void showEvent(QShowEvent *e) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent*) Q_DECL_OVERRIDE;
+ void mouseReleaseEvent(QMouseEvent*) Q_DECL_OVERRIDE;
+ void mouseMoveEvent(QMouseEvent*) Q_DECL_OVERRIDE;
+ void keyPressEvent(QKeyEvent*) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent*) Q_DECL_OVERRIDE;
private:
QPointer<QWidget>widget;
@@ -361,7 +361,7 @@ class QWhatsThisPrivate : public QObject
QWhatsThisPrivate();
~QWhatsThisPrivate();
static QWhatsThisPrivate *instance;
- bool eventFilter(QObject *, QEvent *);
+ bool eventFilter(QObject *, QEvent *) Q_DECL_OVERRIDE;
QPointer<QAction> action;
static void say(QWidget *, const QString &, int x = 0, int y = 0);
static void notifyToplevels(QEvent *e);
diff --git a/src/widgets/kernel/qwidget.cpp b/src/widgets/kernel/qwidget.cpp
index 453a7ca537..40ecc8d184 100644
--- a/src/widgets/kernel/qwidget.cpp
+++ b/src/widgets/kernel/qwidget.cpp
@@ -1283,10 +1283,8 @@ void QWidget::create(WId window, bool initializeWindow, bool destroyOldWindow)
}
- static int paintOnScreenEnv = -1;
- if (paintOnScreenEnv == -1)
- paintOnScreenEnv = qgetenv("QT_ONSCREEN_PAINT").toInt() > 0 ? 1 : 0;
- if (paintOnScreenEnv == 1)
+ static const bool paintOnScreenEnv = qEnvironmentVariableIntValue("QT_ONSCREEN_PAINT") > 0;
+ if (paintOnScreenEnv)
setAttribute(Qt::WA_PaintOnScreen);
if (QApplicationPrivate::testAttribute(Qt::AA_NativeWindows))
@@ -2112,7 +2110,7 @@ void QWidgetPrivate::subtractOpaqueSiblings(QRegion &sourceRegion, bool *hasDirt
bool alsoNonOpaque) const
{
Q_Q(const QWidget);
- static int disableSubtractOpaqueSiblings = qgetenv("QT_NO_SUBTRACTOPAQUESIBLINGS").toInt();
+ static int disableSubtractOpaqueSiblings = qEnvironmentVariableIntValue("QT_NO_SUBTRACTOPAQUESIBLINGS");
if (disableSubtractOpaqueSiblings || q->isWindow())
return;
@@ -10917,9 +10915,9 @@ void QWidget::setAttribute(Qt::WidgetAttribute attribute, bool on)
return;
Q_D(QWidget);
- Q_ASSERT_X(sizeof(d->high_attributes)*8 >= (Qt::WA_AttributeCount - sizeof(uint)*8),
- "QWidget::setAttribute(WidgetAttribute, bool)",
- "QWidgetPrivate::high_attributes[] too small to contain all attributes in WidgetAttribute");
+ Q_STATIC_ASSERT_X(sizeof(d->high_attributes)*8 >= (Qt::WA_AttributeCount - sizeof(uint)*8),
+ "QWidget::setAttribute(WidgetAttribute, bool): "
+ "QWidgetPrivate::high_attributes[] too small to contain all attributes in WidgetAttribute");
#ifdef Q_OS_WIN
// ### Don't use PaintOnScreen+paintEngine() to do native painting in some future release
if (attribute == Qt::WA_PaintOnScreen && on && windowType() != Qt::Desktop && !inherits("QGLWidget")) {
@@ -12578,13 +12576,10 @@ int QWidget::metric(PaintDeviceMetric m) const
QWindow *topLevelWindow = 0;
QScreen *screen = 0;
- if (QWidget *topLevel = window())
+ if (QWidget *topLevel = window()) {
topLevelWindow = topLevel->windowHandle();
-
- if (topLevelWindow) {
- QPlatformScreen *platformScreen = QPlatformScreen::platformScreenForWindow(topLevelWindow);
- if (platformScreen)
- screen = platformScreen->screen();
+ if (topLevelWindow)
+ screen = topLevelWindow->screen();
}
if (!screen && QGuiApplication::primaryScreen())
screen = QGuiApplication::primaryScreen();
diff --git a/src/widgets/kernel/qwidget.h b/src/widgets/kernel/qwidget.h
index ad1e276567..52c12d3730 100644
--- a/src/widgets/kernel/qwidget.h
+++ b/src/widgets/kernel/qwidget.h
@@ -203,7 +203,7 @@ public:
explicit QWidget(QWidget* parent = 0, Qt::WindowFlags f = 0);
~QWidget();
- int devType() const;
+ int devType() const Q_DECL_OVERRIDE;
WId winId() const;
void createWinId(); // internal, going away
@@ -568,7 +568,7 @@ public:
void setAttribute(Qt::WidgetAttribute, bool on = true);
inline bool testAttribute(Qt::WidgetAttribute) const;
- QPaintEngine *paintEngine() const;
+ QPaintEngine *paintEngine() const Q_DECL_OVERRIDE;
void ensurePolished() const;
@@ -598,7 +598,7 @@ Q_SIGNALS:
protected:
// Event handlers
- bool event(QEvent *);
+ bool event(QEvent *) Q_DECL_OVERRIDE;
virtual void mousePressEvent(QMouseEvent *);
virtual void mouseReleaseEvent(QMouseEvent *);
virtual void mouseDoubleClickEvent(QMouseEvent *);
@@ -640,10 +640,10 @@ protected:
// Misc. protected functions
virtual void changeEvent(QEvent *);
- int metric(PaintDeviceMetric) const;
- void initPainter(QPainter *painter) const;
- QPaintDevice *redirected(QPoint *offset) const;
- QPainter *sharedPainter() const;
+ int metric(PaintDeviceMetric) const Q_DECL_OVERRIDE;
+ void initPainter(QPainter *painter) const Q_DECL_OVERRIDE;
+ QPaintDevice *redirected(QPoint *offset) const Q_DECL_OVERRIDE;
+ QPainter *sharedPainter() const Q_DECL_OVERRIDE;
virtual void inputMethodEvent(QInputMethodEvent *);
public:
diff --git a/src/widgets/kernel/qwidget_p.h b/src/widgets/kernel/qwidget_p.h
index b3552cba68..50a8066a41 100644
--- a/src/widgets/kernel/qwidget_p.h
+++ b/src/widgets/kernel/qwidget_p.h
@@ -612,10 +612,10 @@ public:
{ return p + data.wrect.topLeft(); }
inline QRect mapToWS(const QRect &r) const
- { QRect rr(r); rr.translate(-data.wrect.topLeft()); return rr; }
+ { return r.translated(-data.wrect.topLeft()); }
inline QRect mapFromWS(const QRect &r) const
- { QRect rr(r); rr.translate(data.wrect.topLeft()); return rr; }
+ { return r.translated(data.wrect.topLeft()); }
QOpenGLContext *shareContext() const;
@@ -909,10 +909,10 @@ public:
inline QRect deviceRect() const
{ return m_widget->window()->rect(); }
- QRectF boundingRect(Qt::CoordinateSystem system) const;
- void draw(QPainter *p);
+ QRectF boundingRect(Qt::CoordinateSystem system) const Q_DECL_OVERRIDE;
+ void draw(QPainter *p) Q_DECL_OVERRIDE;
QPixmap pixmap(Qt::CoordinateSystem system, QPoint *offset,
- QGraphicsEffect::PixmapPadMode mode) const;
+ QGraphicsEffect::PixmapPadMode mode) const Q_DECL_OVERRIDE;
QWidget *m_widget;
QWidgetPaintContext *context;
diff --git a/src/widgets/kernel/qwidgetaction.h b/src/widgets/kernel/qwidgetaction.h
index afea8454d9..896fc1ffe4 100644
--- a/src/widgets/kernel/qwidgetaction.h
+++ b/src/widgets/kernel/qwidgetaction.h
@@ -59,8 +59,8 @@ public:
void releaseWidget(QWidget *widget);
protected:
- virtual bool event(QEvent *);
- virtual bool eventFilter(QObject *, QEvent *);
+ virtual bool event(QEvent *) Q_DECL_OVERRIDE;
+ virtual bool eventFilter(QObject *, QEvent *) Q_DECL_OVERRIDE;
virtual QWidget *createWidget(QWidget *parent);
virtual void deleteWidget(QWidget *widget);
QList<QWidget *> createdWidgets() const;
diff --git a/src/widgets/kernel/qwidgetbackingstore.cpp b/src/widgets/kernel/qwidgetbackingstore.cpp
index cd01869af2..68beb9afca 100644
--- a/src/widgets/kernel/qwidgetbackingstore.cpp
+++ b/src/widgets/kernel/qwidgetbackingstore.cpp
@@ -81,14 +81,14 @@ void QWidgetBackingStore::qt_flush(QWidget *widget, const QRegion &region, QBack
Q_ASSERT(tlw);
#if !defined(QT_NO_PAINT_DEBUG)
- static int flushUpdate = qgetenv("QT_FLUSH_UPDATE").toInt();
+ static int flushUpdate = qEnvironmentVariableIntValue("QT_FLUSH_UPDATE");
if (flushUpdate > 0)
QWidgetBackingStore::showYellowThing(widget, region, flushUpdate * 10, false);
#endif
if (tlw->testAttribute(Qt::WA_DontShowOnScreen) || widget->testAttribute(Qt::WA_DontShowOnScreen))
return;
- static bool fpsDebug = qgetenv("QT_DEBUG_FPS").toInt();
+ static bool fpsDebug = qEnvironmentVariableIntValue("QT_DEBUG_FPS");
if (fpsDebug) {
if (!widgetBackingStore->perfFrames++)
widgetBackingStore->perfTime.start();
@@ -239,12 +239,12 @@ bool QWidgetBackingStore::flushPaint(QWidget *widget, const QRegion &rgn)
int delay = 0;
if (widget->testAttribute(Qt::WA_WState_InPaintEvent)) {
- static int flushPaintEvent = qgetenv("QT_FLUSH_PAINT_EVENT").toInt();
+ static int flushPaintEvent = qEnvironmentVariableIntValue("QT_FLUSH_PAINT_EVENT");
if (!flushPaintEvent)
return false;
delay = flushPaintEvent;
} else {
- static int flushPaint = qgetenv("QT_FLUSH_PAINT").toInt();
+ static int flushPaint = qEnvironmentVariableIntValue("QT_FLUSH_PAINT");
if (!flushPaint)
return false;
delay = flushPaint;
@@ -780,10 +780,7 @@ void QWidgetPrivate::moveRect(const QRect &rect, int dx, int dy)
if (x->inTopLevelResize)
return;
- static int accelEnv = -1;
- if (accelEnv == -1) {
- accelEnv = qgetenv("QT_NO_FAST_MOVE").toInt() == 0;
- }
+ static const bool accelEnv = qEnvironmentVariableIntValue("QT_NO_FAST_MOVE") == 0;
QWidget *pw = q->parentWidget();
QPoint toplevelOffset = pw->mapTo(tlw, QPoint());
@@ -862,10 +859,7 @@ void QWidgetPrivate::scrollRect(const QRect &rect, int dx, int dy)
if (!wbs)
return;
- static int accelEnv = -1;
- if (accelEnv == -1) {
- accelEnv = qgetenv("QT_NO_FAST_SCROLL").toInt() == 0;
- }
+ static const bool accelEnv = qEnvironmentVariableIntValue("QT_NO_FAST_SCROLL") == 0;
QRect scrollRect = rect & clipRect();
bool overlapped = false;
diff --git a/src/widgets/kernel/qwidgetwindow.cpp b/src/widgets/kernel/qwidgetwindow.cpp
index b31f9a51dd..ed5d56c689 100644
--- a/src/widgets/kernel/qwidgetwindow.cpp
+++ b/src/widgets/kernel/qwidgetwindow.cpp
@@ -63,7 +63,7 @@ class QWidgetWindowPrivate : public QWindowPrivate
{
Q_DECLARE_PUBLIC(QWidgetWindow)
public:
- QWindow *eventReceiver() {
+ QWindow *eventReceiver() Q_DECL_OVERRIDE {
Q_Q(QWidgetWindow);
QWindow *w = q;
while (w->parent() && qobject_cast<QWidgetWindow *>(w) && qobject_cast<QWidgetWindow *>(w->parent())) {
@@ -72,7 +72,7 @@ public:
return w;
}
- void clearFocusObject()
+ void clearFocusObject() Q_DECL_OVERRIDE
{
Q_Q(QWidgetWindow);
QWidget *widget = q->widget();
@@ -440,6 +440,7 @@ void QWidgetWindow::handleMouseEvent(QMouseEvent *event)
QGuiApplicationPrivate::setMouseEventSource(&e, QGuiApplicationPrivate::mouseEventSource(event));
e.setTimestamp(event->timestamp());
QApplicationPrivate::sendMouseEvent(receiver, &e, alien, m_widget, &qt_button_down, qt_last_mouse_receiver);
+ qt_last_mouse_receiver = receiver;
} else {
// close disabled popups when a mouse button is pressed or released
switch (event->type()) {
@@ -711,7 +712,7 @@ void QWidgetWindow::handleWheelEvent(QWheelEvent *event)
QPoint mapped = widget->mapFrom(m_widget, event->pos());
- QWheelEvent translated(mapped, event->globalPos(), event->pixelDelta(), event->angleDelta(), event->delta(), event->orientation(), event->buttons(), event->modifiers(), event->phase());
+ QWheelEvent translated(mapped, event->globalPos(), event->pixelDelta(), event->angleDelta(), event->delta(), event->orientation(), event->buttons(), event->modifiers(), event->phase(), event->source());
QGuiApplication::sendSpontaneousEvent(widget, &translated);
}
diff --git a/src/widgets/kernel/qwidgetwindow_p.h b/src/widgets/kernel/qwidgetwindow_p.h
index 0632a5c364..3bacb0c8e4 100644
--- a/src/widgets/kernel/qwidgetwindow_p.h
+++ b/src/widgets/kernel/qwidgetwindow_p.h
@@ -65,12 +65,12 @@ public:
QWidget *widget() const { return m_widget; }
#ifndef QT_NO_ACCESSIBILITY
- QAccessibleInterface *accessibleRoot() const;
+ QAccessibleInterface *accessibleRoot() const Q_DECL_OVERRIDE;
#endif
- QObject *focusObject() const;
+ QObject *focusObject() const Q_DECL_OVERRIDE;
protected:
- bool event(QEvent *);
+ bool event(QEvent *) Q_DECL_OVERRIDE;
void handleCloseEvent(QCloseEvent *);
void handleEnterLeaveEvent(QEvent *);
@@ -91,7 +91,7 @@ protected:
#endif
void handleExposeEvent(QExposeEvent *);
void handleWindowStateChangedEvent(QWindowStateChangeEvent *event);
- bool nativeEvent(const QByteArray &eventType, void *message, long *result);
+ bool nativeEvent(const QByteArray &eventType, void *message, long *result) Q_DECL_OVERRIDE;
#ifndef QT_NO_TABLETEVENT
void handleTabletEvent(QTabletEvent *);
#endif
diff --git a/src/widgets/kernel/qwindowcontainer_p.h b/src/widgets/kernel/qwindowcontainer_p.h
index 6ba1ab544e..751c932ef0 100644
--- a/src/widgets/kernel/qwindowcontainer_p.h
+++ b/src/widgets/kernel/qwindowcontainer_p.h
@@ -68,7 +68,7 @@ public:
static void parentWasLowered(QWidget *parent);
protected:
- bool event(QEvent *ev);
+ bool event(QEvent *ev) Q_DECL_OVERRIDE;
private slots:
void focusWindowChanged(QWindow *focusWindow);
diff --git a/src/widgets/statemachine/qbasickeyeventtransition_p.h b/src/widgets/statemachine/qbasickeyeventtransition_p.h
index cae7342b2e..4a856be57c 100644
--- a/src/widgets/statemachine/qbasickeyeventtransition_p.h
+++ b/src/widgets/statemachine/qbasickeyeventtransition_p.h
@@ -75,8 +75,8 @@ public:
void setModifierMask(Qt::KeyboardModifiers modifiers);
protected:
- bool eventTest(QEvent *event);
- void onTransition(QEvent *);
+ bool eventTest(QEvent *event) Q_DECL_OVERRIDE;
+ void onTransition(QEvent *) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QBasicKeyEventTransition)
diff --git a/src/widgets/statemachine/qbasicmouseeventtransition_p.h b/src/widgets/statemachine/qbasicmouseeventtransition_p.h
index 5adb8702cc..beedec2201 100644
--- a/src/widgets/statemachine/qbasicmouseeventtransition_p.h
+++ b/src/widgets/statemachine/qbasicmouseeventtransition_p.h
@@ -78,8 +78,8 @@ public:
void setHitTestPath(const QPainterPath &path);
protected:
- bool eventTest(QEvent *event);
- void onTransition(QEvent *);
+ bool eventTest(QEvent *event) Q_DECL_OVERRIDE;
+ void onTransition(QEvent *) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QBasicMouseEventTransition)
diff --git a/src/widgets/statemachine/qkeyeventtransition.h b/src/widgets/statemachine/qkeyeventtransition.h
index 816770c04a..571040a748 100644
--- a/src/widgets/statemachine/qkeyeventtransition.h
+++ b/src/widgets/statemachine/qkeyeventtransition.h
@@ -60,8 +60,8 @@ public:
void setModifierMask(Qt::KeyboardModifiers modifiers);
protected:
- void onTransition(QEvent *event);
- bool eventTest(QEvent *event);
+ void onTransition(QEvent *event) Q_DECL_OVERRIDE;
+ bool eventTest(QEvent *event) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QKeyEventTransition)
diff --git a/src/widgets/statemachine/qmouseeventtransition.h b/src/widgets/statemachine/qmouseeventtransition.h
index 2bad8b13bd..d2caf8d5fe 100644
--- a/src/widgets/statemachine/qmouseeventtransition.h
+++ b/src/widgets/statemachine/qmouseeventtransition.h
@@ -64,8 +64,8 @@ public:
void setHitTestPath(const QPainterPath &path);
protected:
- void onTransition(QEvent *event);
- bool eventTest(QEvent *event);
+ void onTransition(QEvent *event) Q_DECL_OVERRIDE;
+ bool eventTest(QEvent *event) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QMouseEventTransition)
diff --git a/src/widgets/styles/qcommonstyle.cpp b/src/widgets/styles/qcommonstyle.cpp
index c688462794..be6507f1ed 100644
--- a/src/widgets/styles/qcommonstyle.cpp
+++ b/src/widgets/styles/qcommonstyle.cpp
@@ -2021,9 +2021,7 @@ void QCommonStyle::drawControl(ControlElement element, const QStyleOption *opt,
bool verticalTitleBar = v2 == 0 ? false : v2->verticalTitleBar;
if (verticalTitleBar) {
- QSize s = r.size();
- s.transpose();
- r.setSize(s);
+ r.setSize(r.size().transposed());
p->save();
p->translate(r.left(), r.top() + r.width());
@@ -2898,11 +2896,8 @@ QRect QCommonStyle::subElementRect(SubElement sr, const QStyleOption *opt,
// If this is a vertical titlebar, we transpose and work as if it was
// horizontal, then transpose again.
- if (verticalTitleBar) {
- QSize size = rect.size();
- size.transpose();
- rect.setSize(size);
- }
+ if (verticalTitleBar)
+ rect.setSize(rect.size().transposed());
do {
@@ -2915,7 +2910,7 @@ QRect QCommonStyle::subElementRect(SubElement sr, const QStyleOption *opt,
opt, widget).actualSize(QSize(iconSize, iconSize));
sz += QSize(buttonMargin, buttonMargin);
if (verticalTitleBar)
- sz.transpose();
+ sz = sz.transposed();
closeRect = QRect(right - sz.width(),
rect.center().y() - sz.height()/2,
sz.width(), sz.height());
@@ -2932,7 +2927,7 @@ QRect QCommonStyle::subElementRect(SubElement sr, const QStyleOption *opt,
opt, widget).actualSize(QSize(iconSize, iconSize));
sz += QSize(buttonMargin, buttonMargin);
if (verticalTitleBar)
- sz.transpose();
+ sz = sz.transposed();
floatRect = QRect(right - sz.width(),
rect.center().y() - sz.height()/2,
sz.width(), sz.height());
@@ -2952,7 +2947,7 @@ QRect QCommonStyle::subElementRect(SubElement sr, const QStyleOption *opt,
&& icon.cacheKey() != QApplication::windowIcon().cacheKey()) {
QSize sz = icon.actualSize(QSize(r.height(), r.height()));
if (verticalTitleBar)
- sz.transpose();
+ sz = sz.transposed();
iconRect = QRect(left, rect.center().y() - sz.height()/2,
sz.width(), sz.height());
left = iconRect.right() + margin;
@@ -4592,6 +4587,12 @@ int QCommonStyle::pixelMetric(PixelMetric m, const QStyleOption *opt, const QWid
case PM_HeaderGripMargin:
ret = int(QStyleHelper::dpiScaled(4.));
break;
+ case PM_HeaderDefaultSectionSizeHorizontal:
+ ret = int(QStyleHelper::dpiScaled(100.));
+ break;
+ case PM_HeaderDefaultSectionSizeVertical:
+ ret = int(QStyleHelper::dpiScaled(30.));
+ break;
case PM_TabBarScrollButtonWidth:
ret = int(QStyleHelper::dpiScaled(16.));
break;
@@ -4926,6 +4927,25 @@ int QCommonStyle::styleHint(StyleHint sh, const QStyleOption *opt, const QWidget
ret = true;
break;
+ case SH_Menu_SubMenuUniDirection:
+ ret = false;
+ break;
+ case SH_Menu_SubMenuUniDirectionFailCount:
+ ret = 1;
+ break;
+ case SH_Menu_SubMenuSloppySelectOtherActions:
+ ret = true;
+ break;
+ case SH_Menu_SubMenuSloppyCloseTimeout:
+ ret = 1000;
+ break;
+ case SH_Menu_SubMenuResetWhenReenteringParent:
+ ret = false;
+ break;
+ case SH_Menu_SubMenuDontStartSloppyOnLeave:
+ ret = false;
+ break;
+
case SH_ProgressDialog_TextLabelAlignment:
ret = Qt::AlignCenter;
break;
diff --git a/src/widgets/styles/qcommonstyle.h b/src/widgets/styles/qcommonstyle.h
index 7e885d0b77..465d0f17aa 100644
--- a/src/widgets/styles/qcommonstyle.h
+++ b/src/widgets/styles/qcommonstyle.h
@@ -49,40 +49,40 @@ public:
~QCommonStyle();
void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p,
- const QWidget *w = 0) const;
+ const QWidget *w = 0) const Q_DECL_OVERRIDE;
void drawControl(ControlElement element, const QStyleOption *opt, QPainter *p,
- const QWidget *w = 0) const;
- QRect subElementRect(SubElement r, const QStyleOption *opt, const QWidget *widget = 0) const;
+ const QWidget *w = 0) const Q_DECL_OVERRIDE;
+ QRect subElementRect(SubElement r, const QStyleOption *opt, const QWidget *widget = 0) const Q_DECL_OVERRIDE;
void drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p,
- const QWidget *w = 0) const;
+ const QWidget *w = 0) const Q_DECL_OVERRIDE;
SubControl hitTestComplexControl(ComplexControl cc, const QStyleOptionComplex *opt,
- const QPoint &pt, const QWidget *w = 0) const;
+ const QPoint &pt, const QWidget *w = 0) const Q_DECL_OVERRIDE;
QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc,
- const QWidget *w = 0) const;
+ const QWidget *w = 0) const Q_DECL_OVERRIDE;
QSize sizeFromContents(ContentsType ct, const QStyleOption *opt,
- const QSize &contentsSize, const QWidget *widget = 0) const;
+ const QSize &contentsSize, const QWidget *widget = 0) const Q_DECL_OVERRIDE;
- int pixelMetric(PixelMetric m, const QStyleOption *opt = 0, const QWidget *widget = 0) const;
+ int pixelMetric(PixelMetric m, const QStyleOption *opt = 0, const QWidget *widget = 0) const Q_DECL_OVERRIDE;
int styleHint(StyleHint sh, const QStyleOption *opt = 0, const QWidget *w = 0,
- QStyleHintReturn *shret = 0) const;
+ QStyleHintReturn *shret = 0) const Q_DECL_OVERRIDE;
QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *opt = 0,
- const QWidget *widget = 0) const;
+ const QWidget *widget = 0) const Q_DECL_OVERRIDE;
QPixmap standardPixmap(StandardPixmap sp, const QStyleOption *opt = 0,
- const QWidget *widget = 0) const;
+ const QWidget *widget = 0) const Q_DECL_OVERRIDE;
QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap,
- const QStyleOption *opt) const;
+ const QStyleOption *opt) const Q_DECL_OVERRIDE;
int layoutSpacing(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2,
Qt::Orientation orientation, const QStyleOption *option = 0,
- const QWidget *widget = 0) const;
+ const QWidget *widget = 0) const Q_DECL_OVERRIDE;
- void polish(QPalette &);
- void polish(QApplication *app);
- void polish(QWidget *widget);
- void unpolish(QWidget *widget);
- void unpolish(QApplication *application);
+ void polish(QPalette &) Q_DECL_OVERRIDE;
+ void polish(QApplication *app) Q_DECL_OVERRIDE;
+ void polish(QWidget *widget) Q_DECL_OVERRIDE;
+ void unpolish(QWidget *widget) Q_DECL_OVERRIDE;
+ void unpolish(QApplication *application) Q_DECL_OVERRIDE;
protected:
QCommonStyle(QCommonStylePrivate &dd);
diff --git a/src/widgets/styles/qfusionstyle.cpp b/src/widgets/styles/qfusionstyle.cpp
index cf2f3ea26b..6ae0bde20a 100644
--- a/src/widgets/styles/qfusionstyle.cpp
+++ b/src/widgets/styles/qfusionstyle.cpp
@@ -1213,9 +1213,7 @@ void QFusionStyle::drawControl(ControlElement element, const QStyleOption *optio
if (verticalTitleBar) {
QRect rect = dwOpt->rect;
QRect r = rect;
- QSize s = r.size();
- s.transpose();
- r.setSize(s);
+ r.setSize(r.size().transposed());
titleRect = QRect(r.left() + rect.bottom()
- titleRect.bottom(),
r.top() + titleRect.left() - rect.left(),
@@ -1544,7 +1542,8 @@ void QFusionStyle::drawControl(ControlElement element, const QStyleOption *optio
bool ignoreCheckMark = false;
int checkcol = qMax(menuItem->maxIconWidth, 20);
- if (qobject_cast<const QComboBox*>(widget))
+ if (qobject_cast<const QComboBox*>(widget) ||
+ (option->styleObject && option->styleObject->property("_q_isComboBoxPopupItem").toBool()))
ignoreCheckMark = true; //ignore the checkmarks provided by the QComboMenuDelegate
if (!ignoreCheckMark) {
@@ -1613,7 +1612,7 @@ void QFusionStyle::drawControl(ControlElement element, const QStyleOption *optio
QRect pmr(0, 0, pixw, pixh);
pmr.moveCenter(vCheckRect.center());
painter->setPen(menuItem->palette.text().color());
- if (checkable && checked) {
+ if (!ignoreCheckMark && checkable && checked) {
QStyleOption opt = *option;
if (act) {
QColor activeColor = mergedColors(option->palette.background().color(),
diff --git a/src/widgets/styles/qfusionstyle_p.h b/src/widgets/styles/qfusionstyle_p.h
index 7d0326d0a1..e7ba66f818 100644
--- a/src/widgets/styles/qfusionstyle_p.h
+++ b/src/widgets/styles/qfusionstyle_p.h
@@ -62,41 +62,41 @@ public:
QFusionStyle();
~QFusionStyle();
- QPalette standardPalette () const;
+ QPalette standardPalette () const Q_DECL_OVERRIDE;
void drawPrimitive(PrimitiveElement elem,
const QStyleOption *option,
- QPainter *painter, const QWidget *widget = 0) const;
+ QPainter *painter, const QWidget *widget = 0) const Q_DECL_OVERRIDE;
void drawControl(ControlElement ce, const QStyleOption *option, QPainter *painter,
- const QWidget *widget) const;
- int pixelMetric(PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) const;
+ const QWidget *widget) const Q_DECL_OVERRIDE;
+ int pixelMetric(PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) const Q_DECL_OVERRIDE;
void drawComplexControl(ComplexControl control, const QStyleOptionComplex *option,
- QPainter *painter, const QWidget *widget) const;
- QRect subElementRect(SubElement r, const QStyleOption *opt, const QWidget *widget = 0) const;
+ QPainter *painter, const QWidget *widget) const Q_DECL_OVERRIDE;
+ QRect subElementRect(SubElement r, const QStyleOption *opt, const QWidget *widget = 0) const Q_DECL_OVERRIDE;
QSize sizeFromContents(ContentsType type, const QStyleOption *option,
- const QSize &size, const QWidget *widget) const;
+ const QSize &size, const QWidget *widget) const Q_DECL_OVERRIDE;
SubControl hitTestComplexControl(ComplexControl cc, const QStyleOptionComplex *opt,
- const QPoint &pt, const QWidget *w = 0) const;
+ const QPoint &pt, const QWidget *w = 0) const Q_DECL_OVERRIDE;
QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt,
- SubControl sc, const QWidget *widget) const;
+ SubControl sc, const QWidget *widget) const Q_DECL_OVERRIDE;
QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap,
- const QStyleOption *opt) const;
+ const QStyleOption *opt) const Q_DECL_OVERRIDE;
int styleHint(StyleHint hint, const QStyleOption *option = 0, const QWidget *widget = 0,
- QStyleHintReturn *returnData = 0) const;
- QRect itemPixmapRect(const QRect &r, int flags, const QPixmap &pixmap) const;
+ QStyleHintReturn *returnData = 0) const Q_DECL_OVERRIDE;
+ QRect itemPixmapRect(const QRect &r, int flags, const QPixmap &pixmap) const Q_DECL_OVERRIDE;
QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option = 0,
- const QWidget *widget = 0) const;
+ const QWidget *widget = 0) const Q_DECL_OVERRIDE;
QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt,
- const QWidget *widget = 0) const;
+ const QWidget *widget = 0) const Q_DECL_OVERRIDE;
void drawItemPixmap(QPainter *painter, const QRect &rect,
- int alignment, const QPixmap &pixmap) const;
+ int alignment, const QPixmap &pixmap) const Q_DECL_OVERRIDE;
void drawItemText(QPainter *painter, const QRect &rect,
int flags, const QPalette &pal, bool enabled,
- const QString &text, QPalette::ColorRole textRole = QPalette::NoRole) const;
- void polish(QWidget *widget);
- void polish(QApplication *app);
- void polish(QPalette &pal);
- void unpolish(QWidget *widget);
- void unpolish(QApplication *app);
+ const QString &text, QPalette::ColorRole textRole = QPalette::NoRole) const Q_DECL_OVERRIDE;
+ void polish(QWidget *widget) Q_DECL_OVERRIDE;
+ void polish(QApplication *app) Q_DECL_OVERRIDE;
+ void polish(QPalette &pal) Q_DECL_OVERRIDE;
+ void unpolish(QWidget *widget) Q_DECL_OVERRIDE;
+ void unpolish(QApplication *app) Q_DECL_OVERRIDE;
protected:
QFusionStyle(QFusionStylePrivate &dd);
diff --git a/src/widgets/styles/qgtk2painter_p.h b/src/widgets/styles/qgtk2painter_p.h
index 432daaca29..6204e11fa9 100644
--- a/src/widgets/styles/qgtk2painter_p.h
+++ b/src/widgets/styles/qgtk2painter_p.h
@@ -59,33 +59,33 @@ public:
void paintBoxGap(GtkWidget *gtkWidget, const gchar* part, const QRect &rect,
GtkStateType state, GtkShadowType shadow, GtkPositionType gap_side, gint x,
- gint width, GtkStyle *style);
+ gint width, GtkStyle *style) Q_DECL_OVERRIDE;
void paintBox(GtkWidget *gtkWidget, const gchar* part,
const QRect &rect, GtkStateType state, GtkShadowType shadow, GtkStyle *style,
- const QString &pmKey = QString());
+ const QString &pmKey = QString()) Q_DECL_OVERRIDE;
void paintHline(GtkWidget *gtkWidget, const gchar* part, const QRect &rect, GtkStateType state, GtkStyle *style,
- int x1, int x2, int y, const QString &pmKey = QString());
+ int x1, int x2, int y, const QString &pmKey = QString()) Q_DECL_OVERRIDE;
void paintVline(GtkWidget *gtkWidget, const gchar* part, const QRect &rect, GtkStateType state, GtkStyle *style,
- int y1, int y2, int x, const QString &pmKey = QString());
+ int y1, int y2, int x, const QString &pmKey = QString()) Q_DECL_OVERRIDE;
void paintExpander(GtkWidget *gtkWidget, const gchar* part, const QRect &rect, GtkStateType state,
- GtkExpanderStyle expander_state, GtkStyle *style, const QString &pmKey = QString());
+ GtkExpanderStyle expander_state, GtkStyle *style, const QString &pmKey = QString()) Q_DECL_OVERRIDE;
void paintFocus(GtkWidget *gtkWidget, const gchar* part, const QRect &rect, GtkStateType state, GtkStyle *style,
- const QString &pmKey = QString());
+ const QString &pmKey = QString()) Q_DECL_OVERRIDE;
void paintResizeGrip(GtkWidget *gtkWidget, const gchar* part, const QRect &rect, GtkStateType state, GtkShadowType shadow,
- GdkWindowEdge edge, GtkStyle *style, const QString &pmKey = QString());
+ GdkWindowEdge edge, GtkStyle *style, const QString &pmKey = QString()) Q_DECL_OVERRIDE;
void paintArrow(GtkWidget *gtkWidget, const gchar* part, const QRect &arrowrect, GtkArrowType arrow_type, GtkStateType state, GtkShadowType shadow,
- gboolean fill, GtkStyle *style, const QString &pmKey = QString());
+ gboolean fill, GtkStyle *style, const QString &pmKey = QString()) Q_DECL_OVERRIDE;
void paintHandle(GtkWidget *gtkWidget, const gchar* part, const QRect &rect,
- GtkStateType state, GtkShadowType shadow, GtkOrientation orientation, GtkStyle *style);
+ GtkStateType state, GtkShadowType shadow, GtkOrientation orientation, GtkStyle *style) Q_DECL_OVERRIDE;
void paintSlider(GtkWidget *gtkWidget, const gchar* part, const QRect &rect, GtkStateType state, GtkShadowType shadow,
- GtkStyle *style, GtkOrientation orientation, const QString &pmKey = QString());
+ GtkStyle *style, GtkOrientation orientation, const QString &pmKey = QString()) Q_DECL_OVERRIDE;
void paintShadow(GtkWidget *gtkWidget, const gchar* part, const QRect &rect, GtkStateType state, GtkShadowType shadow,
- GtkStyle *style, const QString &pmKey = QString());
- void paintFlatBox(GtkWidget *gtkWidget, const gchar* part, const QRect &rect, GtkStateType state, GtkShadowType shadow, GtkStyle *style, const QString & = QString());
+ GtkStyle *style, const QString &pmKey = QString()) Q_DECL_OVERRIDE;
+ void paintFlatBox(GtkWidget *gtkWidget, const gchar* part, const QRect &rect, GtkStateType state, GtkShadowType shadow, GtkStyle *style, const QString & = QString()) Q_DECL_OVERRIDE;
void paintExtention(GtkWidget *gtkWidget, const gchar *part, const QRect &rect, GtkStateType state, GtkShadowType shadow,
- GtkPositionType gap_pos, GtkStyle *style);
- void paintOption(GtkWidget *gtkWidget, const QRect &rect, GtkStateType state, GtkShadowType shadow, GtkStyle *style, const QString &detail);
- void paintCheckbox(GtkWidget *gtkWidget, const QRect &rect, GtkStateType state, GtkShadowType shadow, GtkStyle *style, const QString &detail);
+ GtkPositionType gap_pos, GtkStyle *style) Q_DECL_OVERRIDE;
+ void paintOption(GtkWidget *gtkWidget, const QRect &rect, GtkStateType state, GtkShadowType shadow, GtkStyle *style, const QString &detail) Q_DECL_OVERRIDE;
+ void paintCheckbox(GtkWidget *gtkWidget, const QRect &rect, GtkStateType state, GtkShadowType shadow, GtkStyle *style, const QString &detail) Q_DECL_OVERRIDE;
private:
QPixmap renderTheme(uchar *bdata, uchar *wdata, const QRect &rect) const;
diff --git a/src/widgets/styles/qgtkstyle.cpp b/src/widgets/styles/qgtkstyle.cpp
index f87af6cd93..144d723779 100644
--- a/src/widgets/styles/qgtkstyle.cpp
+++ b/src/widgets/styles/qgtkstyle.cpp
@@ -2902,9 +2902,7 @@ void QGtkStyle::drawControl(ControlElement element,
if (verticalTitleBar) {
QRect r = rect;
- QSize s = r.size();
- s.transpose();
- r.setSize(s);
+ r.setSize(r.size().transposed());
titleRect = QRect(r.left() + rect.bottom()
- titleRect.bottom(),
diff --git a/src/widgets/styles/qgtkstyle_p.cpp b/src/widgets/styles/qgtkstyle_p.cpp
index 61d1cd796e..beb52c01a7 100644
--- a/src/widgets/styles/qgtkstyle_p.cpp
+++ b/src/widgets/styles/qgtkstyle_p.cpp
@@ -57,6 +57,7 @@
#include <private/qgtk2painter_p.h>
#include <private/qapplication_p.h>
#include <private/qiconloader_p.h>
+#include <qpa/qplatformfontdatabase.h>
#include <QtWidgets/QMenu>
#include <QtWidgets/QStyle>
@@ -823,17 +824,8 @@ QFont QGtkStylePrivate::getThemeFont()
if (!family.isEmpty())
font.setFamily(family);
- int weight = pango_font_description_get_weight(gtk_font);
- if (weight >= PANGO_WEIGHT_HEAVY)
- font.setWeight(QFont::Black);
- else if (weight >= PANGO_WEIGHT_BOLD)
- font.setWeight(QFont::Bold);
- else if (weight >= PANGO_WEIGHT_SEMIBOLD)
- font.setWeight(QFont::DemiBold);
- else if (weight >= PANGO_WEIGHT_NORMAL)
- font.setWeight(QFont::Normal);
- else
- font.setWeight(QFont::Light);
+ const int weight = pango_font_description_get_weight(gtk_font);
+ font.setWeight(QPlatformFontDatabase::weightFromInteger(weight));
PangoStyle fontstyle = pango_font_description_get_style(gtk_font);
if (fontstyle == PANGO_STYLE_ITALIC)
diff --git a/src/widgets/styles/qgtkstyle_p.h b/src/widgets/styles/qgtkstyle_p.h
index d8a4fb093d..5aecf66152 100644
--- a/src/widgets/styles/qgtkstyle_p.h
+++ b/src/widgets/styles/qgtkstyle_p.h
@@ -69,48 +69,48 @@ public:
~QGtkStyle();
- QPalette standardPalette() const;
+ QPalette standardPalette() const Q_DECL_OVERRIDE;
void drawPrimitive(PrimitiveElement element, const QStyleOption *option,
- QPainter *painter, const QWidget *widget) const;
+ QPainter *painter, const QWidget *widget) const Q_DECL_OVERRIDE;
void drawControl(ControlElement control, const QStyleOption *option,
- QPainter *painter, const QWidget *widget) const;
+ QPainter *painter, const QWidget *widget) const Q_DECL_OVERRIDE;
void drawComplexControl(ComplexControl control, const QStyleOptionComplex *option,
- QPainter *painter, const QWidget *widget) const;
+ QPainter *painter, const QWidget *widget) const Q_DECL_OVERRIDE;
void drawItemPixmap(QPainter *painter, const QRect &rect, int alignment,
- const QPixmap &pixmap) const;
+ const QPixmap &pixmap) const Q_DECL_OVERRIDE;
void drawItemText(QPainter *painter, const QRect &rect, int alignment, const QPalette &pal,
- bool enabled, const QString& text, QPalette::ColorRole textRole) const;
+ bool enabled, const QString& text, QPalette::ColorRole textRole) const Q_DECL_OVERRIDE;
int pixelMetric(PixelMetric metric, const QStyleOption *option = 0,
- const QWidget *widget = 0) const;
+ const QWidget *widget = 0) const Q_DECL_OVERRIDE;
int styleHint(StyleHint hint, const QStyleOption *option,
- const QWidget *widget, QStyleHintReturn *returnData) const;
+ const QWidget *widget, QStyleHintReturn *returnData) const Q_DECL_OVERRIDE;
QStyle::SubControl hitTestComplexControl(ComplexControl cc, const QStyleOptionComplex *opt,
- const QPoint &pt, const QWidget *w) const;
+ const QPoint &pt, const QWidget *w) const Q_DECL_OVERRIDE;
QRect subControlRect(ComplexControl control, const QStyleOptionComplex *option,
- SubControl subControl, const QWidget *widget) const;
- QRect subElementRect(SubElement sr, const QStyleOption *opt, const QWidget *w) const;
- QRect itemPixmapRect(const QRect &r, int flags, const QPixmap &pixmap) const;
+ SubControl subControl, const QWidget *widget) const Q_DECL_OVERRIDE;
+ QRect subElementRect(SubElement sr, const QStyleOption *opt, const QWidget *w) const Q_DECL_OVERRIDE;
+ QRect itemPixmapRect(const QRect &r, int flags, const QPixmap &pixmap) const Q_DECL_OVERRIDE;
QSize sizeFromContents(ContentsType type, const QStyleOption *option,
- const QSize &size, const QWidget *widget) const;
+ const QSize &size, const QWidget *widget) const Q_DECL_OVERRIDE;
QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option = 0,
- const QWidget *widget = 0) const;
+ const QWidget *widget = 0) const Q_DECL_OVERRIDE;
QPixmap standardPixmap(StandardPixmap sp, const QStyleOption *option,
- const QWidget *widget) const;
+ const QWidget *widget) const Q_DECL_OVERRIDE;
QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap,
- const QStyleOption *opt) const;
+ const QStyleOption *opt) const Q_DECL_OVERRIDE;
- void polish(QWidget *widget);
- void polish(QApplication *app);
- void polish(QPalette &palette);
+ void polish(QWidget *widget) Q_DECL_OVERRIDE;
+ void polish(QApplication *app) Q_DECL_OVERRIDE;
+ void polish(QPalette &palette) Q_DECL_OVERRIDE;
- void unpolish(QWidget *widget);
- void unpolish(QApplication *app);
+ void unpolish(QWidget *widget) Q_DECL_OVERRIDE;
+ void unpolish(QApplication *app) Q_DECL_OVERRIDE;
static bool getGConfBool(const QString &key, bool fallback = 0);
static QString getGConfString(const QString &key, const QString &fallback = QString());
diff --git a/src/widgets/styles/qgtkstyle_p_p.h b/src/widgets/styles/qgtkstyle_p_p.h
index 0076f14ba3..02b375bc54 100644
--- a/src/widgets/styles/qgtkstyle_p_p.h
+++ b/src/widgets/styles/qgtkstyle_p_p.h
@@ -228,7 +228,7 @@ public:
{}
private:
QGtkStylePrivate* stylePrivate;
- bool eventFilter(QObject *obj, QEvent *e);
+ bool eventFilter(QObject *obj, QEvent *e) Q_DECL_OVERRIDE;
};
typedef enum {
diff --git a/src/widgets/styles/qmacstyle_mac.mm b/src/widgets/styles/qmacstyle_mac.mm
index c166b1b26e..40a2ca7f14 100644
--- a/src/widgets/styles/qmacstyle_mac.mm
+++ b/src/widgets/styles/qmacstyle_mac.mm
@@ -2798,6 +2798,19 @@ int QMacStyle::styleHint(StyleHint sh, const QStyleOption *opt, const QWidget *w
case SH_Menu_SubMenuPopupDelay:
ret = 100;
break;
+ case SH_Menu_SubMenuUniDirection:
+ ret = true;
+ break;
+ case SH_Menu_SubMenuSloppySelectOtherActions:
+ ret = false;
+ break;
+ case SH_Menu_SubMenuResetWhenReenteringParent:
+ ret = true;
+ break;
+ case SH_Menu_SubMenuDontStartSloppyOnLeave:
+ ret = true;
+ break;
+
case SH_ScrollBar_LeftClickAbsolutePosition: {
NSUserDefaults* defaults = [NSUserDefaults standardUserDefaults];
bool result = [defaults boolForKey:@"AppleScrollerPagingBehavior"];
@@ -3044,8 +3057,11 @@ int QMacStyle::styleHint(StyleHint sh, const QStyleOption *opt, const QWidget *w
break;
case SH_ScrollBar_Transient:
if ((qobject_cast<const QScrollBar *>(w) && w->parent() &&
- qobject_cast<QAbstractScrollArea*>(w->parent()->parent())) ||
- (opt && QStyleHelper::hasAncestor(opt->styleObject, QAccessible::ScrollBar))) {
+ qobject_cast<QAbstractScrollArea*>(w->parent()->parent()))
+#ifndef QT_NO_ACCESSIBILITY
+ || (opt && QStyleHelper::hasAncestor(opt->styleObject, QAccessible::ScrollBar))
+#endif
+ ) {
ret = [NSScroller preferredScrollerStyle] == NSScrollerStyleOverlay;
}
break;
@@ -3687,6 +3703,7 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter
if (const QStyleOptionToolButton *tb = qstyleoption_cast<const QStyleOptionToolButton *>(opt)) {
QStyleOptionToolButton myTb = *tb;
myTb.state &= ~State_AutoRaise;
+#ifndef QT_NO_ACCESSIBILITY
if (QStyleHelper::hasAncestor(opt->styleObject, QAccessible::ToolBar)) {
QRect cr = tb->rect;
int shiftX = 0;
@@ -3776,6 +3793,9 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter
} else {
QCommonStyle::drawControl(ce, &myTb, p, w);
}
+#else
+ Q_UNUSED(tb)
+#endif
}
break;
case CE_ToolBoxTabShape:
@@ -4347,9 +4367,7 @@ void QMacStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPainter
if (verticalTitleBar) {
QRect rect = dwOpt->rect;
QRect r = rect;
- QSize s = r.size();
- s.transpose();
- r.setSize(s);
+ r.setSize(r.size().transposed());
titleRect = QRect(r.left() + rect.bottom()
- titleRect.bottom(),
@@ -5176,11 +5194,8 @@ QRect QMacStyle::subElementRect(SubElement sr, const QStyleOption *opt,
// If this is a vertical titlebar, we transpose and work as if it was
// horizontal, then transpose again.
- if (verticalTitleBar) {
- QSize size = srect.size();
- size.transpose();
- srect.setSize(size);
- }
+ if (verticalTitleBar)
+ srect.setSize(srect.size().transposed());
do {
int right = srect.right();
@@ -5192,7 +5207,7 @@ QRect QMacStyle::subElementRect(SubElement sr, const QStyleOption *opt,
opt, widget).actualSize(QSize(iconSize, iconSize));
sz += QSize(buttonMargin, buttonMargin);
if (verticalTitleBar)
- sz.transpose();
+ sz = sz.transposed();
closeRect = QRect(left,
srect.center().y() - sz.height()/2,
sz.width(), sz.height());
@@ -5209,7 +5224,7 @@ QRect QMacStyle::subElementRect(SubElement sr, const QStyleOption *opt,
opt, widget).actualSize(QSize(iconSize, iconSize));
sz += QSize(buttonMargin, buttonMargin);
if (verticalTitleBar)
- sz.transpose();
+ sz = sz.transposed();
floatRect = QRect(left,
srect.center().y() - sz.height()/2,
sz.width(), sz.height());
@@ -5229,7 +5244,7 @@ QRect QMacStyle::subElementRect(SubElement sr, const QStyleOption *opt,
&& icon.cacheKey() != QApplication::windowIcon().cacheKey()) {
QSize sz = icon.actualSize(QSize(rect.height(), rect.height()));
if (verticalTitleBar)
- sz.transpose();
+ sz = sz.transposed();
iconRect = QRect(right - sz.width(), srect.center().y() - sz.height()/2,
sz.width(), sz.height());
right = iconRect.left() - 1;
@@ -5914,7 +5929,7 @@ void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex
case CC_ToolButton:
if (const QStyleOptionToolButton *tb
= qstyleoption_cast<const QStyleOptionToolButton *>(opt)) {
-
+#ifndef QT_NO_ACCESSIBILITY
if (QStyleHelper::hasAncestor(opt->styleObject, QAccessible::ToolBar)) {
if (tb->subControls & SC_ToolButtonMenu) {
QStyleOption arrowOpt(0);
@@ -6040,6 +6055,7 @@ void QMacStyle::drawComplexControl(ComplexControl cc, const QStyleOptionComplex
label.rect = buttonRect.adjusted(fw, fw, -fw, -fw);
proxy()->drawControl(CE_ToolButtonLabel, &label, p, widget);
}
+#endif
}
break;
case CC_Dial:
@@ -6518,7 +6534,11 @@ QRect QMacStyle::subControlRect(ComplexControl cc, const QStyleOptionComplex *op
break;
case CC_ToolButton:
ret = QCommonStyle::subControlRect(cc, opt, sc, widget);
- if (sc == SC_ToolButtonMenu && !QStyleHelper::hasAncestor(opt->styleObject, QAccessible::ToolBar)) {
+ if (sc == SC_ToolButtonMenu
+#ifndef QT_NO_ACCESSIBILITY
+ && !QStyleHelper::hasAncestor(opt->styleObject, QAccessible::ToolBar)
+#endif
+ ) {
ret.adjust(-1, 0, 0, 0);
}
break;
@@ -6605,7 +6625,7 @@ QSize QMacStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt,
ThemeTabDirection ttd = getTabDirection(tab->shape);
bool vertTabs = ttd == kThemeTabWest || ttd == kThemeTabEast;
if (vertTabs)
- sz.transpose();
+ sz = sz.transposed();
int defaultTabHeight;
int defaultExtraSpace = proxy()->pixelMetric(PM_TabBarTabHSpace, tab, widget); // Remove spurious gcc warning (AFAIK)
QFontMetrics fm = opt->fontMetrics;
@@ -6635,7 +6655,7 @@ QSize QMacStyle::sizeFromContents(ContentsType ct, const QStyleOption *opt,
}
if (vertTabs)
- sz.transpose();
+ sz = sz.transposed();
int maxWidgetHeight = qMax(tab->leftButtonSize.height(), tab->rightButtonSize.height());
int maxWidgetWidth = qMax(tab->leftButtonSize.width(), tab->rightButtonSize.width());
diff --git a/src/widgets/styles/qproxystyle.h b/src/widgets/styles/qproxystyle.h
index 24779925a5..f2ddf6bda1 100644
--- a/src/widgets/styles/qproxystyle.h
+++ b/src/widgets/styles/qproxystyle.h
@@ -54,40 +54,40 @@ public:
QStyle *baseStyle() const;
void setBaseStyle(QStyle *style);
- void drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = 0) const;
- void drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = 0) const;
- void drawComplexControl(ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget = 0) const;
+ void drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = 0) const Q_DECL_OVERRIDE;
+ void drawControl(ControlElement element, const QStyleOption *option, QPainter *painter, const QWidget *widget = 0) const Q_DECL_OVERRIDE;
+ void drawComplexControl(ComplexControl control, const QStyleOptionComplex *option, QPainter *painter, const QWidget *widget = 0) const Q_DECL_OVERRIDE;
void drawItemText(QPainter *painter, const QRect &rect, int flags, const QPalette &pal, bool enabled,
- const QString &text, QPalette::ColorRole textRole = QPalette::NoRole) const;
- virtual void drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, const QPixmap &pixmap) const;
+ const QString &text, QPalette::ColorRole textRole = QPalette::NoRole) const Q_DECL_OVERRIDE;
+ virtual void drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, const QPixmap &pixmap) const Q_DECL_OVERRIDE;
- QSize sizeFromContents(ContentsType type, const QStyleOption *option, const QSize &size, const QWidget *widget) const;
+ QSize sizeFromContents(ContentsType type, const QStyleOption *option, const QSize &size, const QWidget *widget) const Q_DECL_OVERRIDE;
- QRect subElementRect(SubElement element, const QStyleOption *option, const QWidget *widget) const;
- QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc, const QWidget *widget) const;
- QRect itemTextRect(const QFontMetrics &fm, const QRect &r, int flags, bool enabled, const QString &text) const;
- QRect itemPixmapRect(const QRect &r, int flags, const QPixmap &pixmap) const;
+ QRect subElementRect(SubElement element, const QStyleOption *option, const QWidget *widget) const Q_DECL_OVERRIDE;
+ QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc, const QWidget *widget) const Q_DECL_OVERRIDE;
+ QRect itemTextRect(const QFontMetrics &fm, const QRect &r, int flags, bool enabled, const QString &text) const Q_DECL_OVERRIDE;
+ QRect itemPixmapRect(const QRect &r, int flags, const QPixmap &pixmap) const Q_DECL_OVERRIDE;
- SubControl hitTestComplexControl(ComplexControl control, const QStyleOptionComplex *option, const QPoint &pos, const QWidget *widget = 0) const;
- int styleHint(StyleHint hint, const QStyleOption *option = 0, const QWidget *widget = 0, QStyleHintReturn *returnData = 0) const;
- int pixelMetric(PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) const;
+ SubControl hitTestComplexControl(ComplexControl control, const QStyleOptionComplex *option, const QPoint &pos, const QWidget *widget = 0) const Q_DECL_OVERRIDE;
+ int styleHint(StyleHint hint, const QStyleOption *option = 0, const QWidget *widget = 0, QStyleHintReturn *returnData = 0) const Q_DECL_OVERRIDE;
+ int pixelMetric(PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) const Q_DECL_OVERRIDE;
int layoutSpacing(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2,
- Qt::Orientation orientation, const QStyleOption *option = 0, const QWidget *widget = 0) const;
+ Qt::Orientation orientation, const QStyleOption *option = 0, const QWidget *widget = 0) const Q_DECL_OVERRIDE;
- QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option = 0, const QWidget *widget = 0) const;
- QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt, const QWidget *widget = 0) const;
- QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const;
- QPalette standardPalette() const;
+ QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option = 0, const QWidget *widget = 0) const Q_DECL_OVERRIDE;
+ QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt, const QWidget *widget = 0) const Q_DECL_OVERRIDE;
+ QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap, const QStyleOption *opt) const Q_DECL_OVERRIDE;
+ QPalette standardPalette() const Q_DECL_OVERRIDE;
- void polish(QWidget *widget);
- void polish(QPalette &pal);
- void polish(QApplication *app);
+ void polish(QWidget *widget) Q_DECL_OVERRIDE;
+ void polish(QPalette &pal) Q_DECL_OVERRIDE;
+ void polish(QApplication *app) Q_DECL_OVERRIDE;
- void unpolish(QWidget *widget);
- void unpolish(QApplication *app);
+ void unpolish(QWidget *widget) Q_DECL_OVERRIDE;
+ void unpolish(QApplication *app) Q_DECL_OVERRIDE;
protected:
- bool event(QEvent *e);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QProxyStyle)
diff --git a/src/widgets/styles/qstyle.cpp b/src/widgets/styles/qstyle.cpp
index 6072842fc9..8df68d25a5 100644
--- a/src/widgets/styles/qstyle.cpp
+++ b/src/widgets/styles/qstyle.cpp
@@ -1472,6 +1472,11 @@ void QStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment,
\value PM_TreeViewIndentation The indentation of items in a tree view.
This enum value has been introduced in Qt 5.4.
+ \value PM_HeaderDefaultSectionSizeHorizontal The default size of sections
+ in a horizontal header. This enum value has been introduced in Qt 5.5.
+ \value PM_HeaderDefaultSectionSizeVertical The default size of sections
+ in a vertical header. This enum value has been introduced in Qt 5.5.
+
\value PM_CustomBase Base value for custom pixel metrics. Custom
values must be greater than this value.
@@ -1708,6 +1713,32 @@ void QStyle::drawItemPixmap(QPainter *painter, const QRect &rect, int alignment,
other items of the menu. This is supported on most modern
desktop platforms.
+ \value SH_Menu_SubMenuUniDirection Since Qt 5.5. If the cursor has
+ to move towards the submenu (like it is on OS X), or if the
+ cursor can move in any direction as long as it reaches the
+ submenu before the sloppy timeout.
+
+ \value SH_Menu_SubMenuUniDirectionFailCount Since Qt 5.5. When
+ SH_Menu_SubMenuUniDirection is defined this enum defines the
+ number of failed mouse moves before the sloppy submenu is
+ discarded. This can be used to control the "strictness" of the
+ uni direction algorithm.
+
+ \value SH_Menu_SubMenuSloppySelectOtherActions Since Qt 5.5. Should
+ other action items be selected when the mouse moves towards a
+ sloppy submenu.
+
+ \value SH_Menu_SubMenuSloppyCloseTimeout Since Qt 5.5. The timeout
+ used to close sloppy submenus.
+
+ \value SH_Menu_SubMenuResetWhenReenteringParent Since Qt 5.5. When
+ entering parent from child submenu, should the sloppy state be
+ reset, effectively closing the child and making the current
+ submenu active.
+
+ \value SH_Menu_SubMenuDontStartSloppyOnLeave Since Qt 5.5. Do not
+ start sloppy timers when the mouse leaves a sub-menu.
+
\value SH_ScrollView_FrameOnlyAroundContents Whether scrollviews
draw their frame only around contents (like Motif), or around
contents, scroll bars and corner widgets (like Windows).
diff --git a/src/widgets/styles/qstyle.h b/src/widgets/styles/qstyle.h
index 43a49e3746..225146c5bb 100644
--- a/src/widgets/styles/qstyle.h
+++ b/src/widgets/styles/qstyle.h
@@ -550,6 +550,9 @@ public:
PM_SubMenuOverlap,
PM_TreeViewIndentation,
+ PM_HeaderDefaultSectionSizeHorizontal,
+ PM_HeaderDefaultSectionSizeVertical,
+
// do not add any values below/greater than this
PM_CustomBase = 0xf0000000
};
@@ -703,6 +706,12 @@ public:
SH_ComboBox_UseNativePopup,
SH_LineEdit_PasswordMaskDelay,
SH_TabBar_ChangeCurrentDelay,
+ SH_Menu_SubMenuUniDirection,
+ SH_Menu_SubMenuUniDirectionFailCount,
+ SH_Menu_SubMenuSloppySelectOtherActions,
+ SH_Menu_SubMenuSloppyCloseTimeout,
+ SH_Menu_SubMenuResetWhenReenteringParent,
+ SH_Menu_SubMenuDontStartSloppyOnLeave,
// Add new style hint values here
SH_CustomBase = 0xf0000000
diff --git a/src/widgets/styles/qstyleanimation_p.h b/src/widgets/styles/qstyleanimation_p.h
index a9f9325826..7bfdb34e5e 100644
--- a/src/widgets/styles/qstyleanimation_p.h
+++ b/src/widgets/styles/qstyleanimation_p.h
@@ -63,7 +63,7 @@ public:
QObject *target() const;
- int duration() const;
+ int duration() const Q_DECL_OVERRIDE;
void setDuration(int duration);
int delay() const;
@@ -89,7 +89,7 @@ public Q_SLOTS:
protected:
virtual bool isUpdateNeeded() const;
- virtual void updateCurrentTime(int time);
+ virtual void updateCurrentTime(int time) Q_DECL_OVERRIDE;
private:
int _delay;
@@ -113,7 +113,7 @@ public:
void setSpeed(int speed);
protected:
- bool isUpdateNeeded() const;
+ bool isUpdateNeeded() const Q_DECL_OVERRIDE;
private:
int _speed;
@@ -136,7 +136,7 @@ public:
qreal currentValue() const;
protected:
- bool isUpdateNeeded() const;
+ bool isUpdateNeeded() const Q_DECL_OVERRIDE;
private:
qreal _start;
@@ -162,7 +162,7 @@ public:
QImage currentImage() const;
protected:
- virtual void updateCurrentTime(int time);
+ virtual void updateCurrentTime(int time) Q_DECL_OVERRIDE;
private:
Type _type;
@@ -186,7 +186,7 @@ public:
void setActive(bool active);
private slots:
- void updateCurrentTime(int time);
+ void updateCurrentTime(int time) Q_DECL_OVERRIDE;
private:
Mode _mode;
diff --git a/src/widgets/styles/qstyleoption.cpp b/src/widgets/styles/qstyleoption.cpp
index 1d98a56063..027e36387a 100644
--- a/src/widgets/styles/qstyleoption.cpp
+++ b/src/widgets/styles/qstyleoption.cpp
@@ -1626,6 +1626,9 @@ QStyleOptionProgressBar::QStyleOptionProgressBar(int version)
\brief the progress bar's orientation (horizontal or vertical);
the default orentation is Qt::Horizontal
+ \deprecated
+ Use the QStyle::State_Horizontal flag instead (in the the QStyleOption::state member).
+
\sa QProgressBar::orientation
*/
diff --git a/src/widgets/styles/qstyleoption.h b/src/widgets/styles/qstyleoption.h
index a475f485df..4b55cf3faf 100644
--- a/src/widgets/styles/qstyleoption.h
+++ b/src/widgets/styles/qstyleoption.h
@@ -317,7 +317,7 @@ public:
QString text;
Qt::Alignment textAlignment;
bool textVisible;
- Qt::Orientation orientation;
+ Qt::Orientation orientation; // ### Qt 6: remove
bool invertedAppearance;
bool bottomToTop;
diff --git a/src/widgets/styles/qstylesheetstyle.cpp b/src/widgets/styles/qstylesheetstyle.cpp
index 3d9ba6b490..ea51d4989e 100644
--- a/src/widgets/styles/qstylesheetstyle.cpp
+++ b/src/widgets/styles/qstylesheetstyle.cpp
@@ -1413,7 +1413,7 @@ class QStyleSheetStyleSelector : public StyleSelector
public:
QStyleSheetStyleSelector() { }
- QStringList nodeNames(NodePtr node) const
+ QStringList nodeNames(NodePtr node) const Q_DECL_OVERRIDE
{
if (isNullNode(node))
return QStringList();
@@ -1429,7 +1429,7 @@ public:
} while (metaObject != 0);
return result;
}
- QString attribute(NodePtr node, const QString& name) const
+ QString attribute(NodePtr node, const QString& name) const Q_DECL_OVERRIDE
{
if (isNullNode(node))
return QString();
@@ -1466,7 +1466,7 @@ public:
cache[name] = valueStr;
return valueStr;
}
- bool nodeNameEquals(NodePtr node, const QString& nodeName) const
+ bool nodeNameEquals(NodePtr node, const QString& nodeName) const Q_DECL_OVERRIDE
{
if (isNullNode(node))
return false;
@@ -1489,19 +1489,19 @@ public:
} while (metaObject != 0);
return false;
}
- bool hasAttributes(NodePtr) const
+ bool hasAttributes(NodePtr) const Q_DECL_OVERRIDE
{ return true; }
- QStringList nodeIds(NodePtr node) const
+ QStringList nodeIds(NodePtr node) const Q_DECL_OVERRIDE
{ return isNullNode(node) ? QStringList() : QStringList(OBJECT_PTR(node)->objectName()); }
- bool isNullNode(NodePtr node) const
+ bool isNullNode(NodePtr node) const Q_DECL_OVERRIDE
{ return node.ptr == 0; }
- NodePtr parentNode(NodePtr node) const
+ NodePtr parentNode(NodePtr node) const Q_DECL_OVERRIDE
{ NodePtr n; n.ptr = isNullNode(node) ? 0 : parentObject(OBJECT_PTR(node)); return n; }
- NodePtr previousSiblingNode(NodePtr) const
+ NodePtr previousSiblingNode(NodePtr) const Q_DECL_OVERRIDE
{ NodePtr n; n.ptr = 0; return n; }
- NodePtr duplicateNode(NodePtr node) const
+ NodePtr duplicateNode(NodePtr node) const Q_DECL_OVERRIDE
{ return node; }
- void freeNode(NodePtr) const
+ void freeNode(NodePtr) const Q_DECL_OVERRIDE
{ }
private:
@@ -4051,9 +4051,7 @@ void QStyleSheetStyle::drawControl(ControlElement ce, const QStyleOption *opt, Q
if (!dwOpt->title.isEmpty()) {
QRect r = subElementRect(SE_DockWidgetTitleBarText, opt, w);
if (dwOpt->verticalTitleBar) {
- QSize s = r.size();
- s.transpose();
- r.setSize(s);
+ r.setSize(r.size().transposed());
p->save();
p->translate(r.left(), r.top() + r.width());
p->rotate(-90);
diff --git a/src/widgets/styles/qstylesheetstyle_p.h b/src/widgets/styles/qstylesheetstyle_p.h
index c4e81787b5..212be5f530 100644
--- a/src/widgets/styles/qstylesheetstyle_p.h
+++ b/src/widgets/styles/qstylesheetstyle_p.h
@@ -74,48 +74,48 @@ public:
~QStyleSheetStyle();
void drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p,
- const QWidget *w = 0) const;
+ const QWidget *w = 0) const Q_DECL_OVERRIDE;
void drawControl(ControlElement element, const QStyleOption *opt, QPainter *p,
- const QWidget *w = 0) const;
- void drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, const QPixmap &pixmap) const;
+ const QWidget *w = 0) const Q_DECL_OVERRIDE;
+ void drawItemPixmap(QPainter *painter, const QRect &rect, int alignment, const QPixmap &pixmap) const Q_DECL_OVERRIDE;
void drawItemText(QPainter *painter, const QRect& rect, int alignment, const QPalette &pal,
- bool enabled, const QString& text, QPalette::ColorRole textRole = QPalette::NoRole) const;
+ bool enabled, const QString& text, QPalette::ColorRole textRole = QPalette::NoRole) const Q_DECL_OVERRIDE;
void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p,
- const QWidget *w = 0) const;
+ const QWidget *w = 0) const Q_DECL_OVERRIDE;
QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap &pixmap,
- const QStyleOption *option) const;
+ const QStyleOption *option) const Q_DECL_OVERRIDE;
SubControl hitTestComplexControl(ComplexControl cc, const QStyleOptionComplex *opt,
- const QPoint &pt, const QWidget *w = 0) const;
- QRect itemPixmapRect(const QRect &rect, int alignment, const QPixmap &pixmap) const;
+ const QPoint &pt, const QWidget *w = 0) const Q_DECL_OVERRIDE;
+ QRect itemPixmapRect(const QRect &rect, int alignment, const QPixmap &pixmap) const Q_DECL_OVERRIDE;
QRect itemTextRect(const QFontMetrics &metrics, const QRect &rect, int alignment, bool enabled,
- const QString &text) const;
- int pixelMetric(PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) const;
- void polish(QWidget *widget);
- void polish(QApplication *app);
- void polish(QPalette &pal);
+ const QString &text) const Q_DECL_OVERRIDE;
+ int pixelMetric(PixelMetric metric, const QStyleOption *option = 0, const QWidget *widget = 0) const Q_DECL_OVERRIDE;
+ void polish(QWidget *widget) Q_DECL_OVERRIDE;
+ void polish(QApplication *app) Q_DECL_OVERRIDE;
+ void polish(QPalette &pal) Q_DECL_OVERRIDE;
QSize sizeFromContents(ContentsType ct, const QStyleOption *opt,
- const QSize &contentsSize, const QWidget *widget = 0) const;
- QPalette standardPalette() const;
+ const QSize &contentsSize, const QWidget *widget = 0) const Q_DECL_OVERRIDE;
+ QPalette standardPalette() const Q_DECL_OVERRIDE;
QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *opt = 0,
- const QWidget *widget = 0) const;
+ const QWidget *widget = 0) const Q_DECL_OVERRIDE;
QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *option = 0,
- const QWidget *w = 0 ) const;
+ const QWidget *w = 0 ) const Q_DECL_OVERRIDE;
int layoutSpacing(QSizePolicy::ControlType control1, QSizePolicy::ControlType control2,
Qt::Orientation orientation, const QStyleOption *option = 0,
- const QWidget *widget = 0) const;
+ const QWidget *widget = 0) const Q_DECL_OVERRIDE;
int styleHint(StyleHint sh, const QStyleOption *opt = 0, const QWidget *w = 0,
- QStyleHintReturn *shret = 0) const;
- QRect subElementRect(SubElement r, const QStyleOption *opt, const QWidget *widget = 0) const;
+ QStyleHintReturn *shret = 0) const Q_DECL_OVERRIDE;
+ QRect subElementRect(SubElement r, const QStyleOption *opt, const QWidget *widget = 0) const Q_DECL_OVERRIDE;
QRect subControlRect(ComplexControl cc, const QStyleOptionComplex *opt, SubControl sc,
- const QWidget *w = 0) const;
+ const QWidget *w = 0) const Q_DECL_OVERRIDE;
// These functions are called from QApplication/QWidget. Be careful.
QStyle *baseStyle() const;
void repolish(QWidget *widget);
void repolish(QApplication *app);
- void unpolish(QWidget *widget);
- void unpolish(QApplication *app);
+ void unpolish(QWidget *widget) Q_DECL_OVERRIDE;
+ void unpolish(QApplication *app) Q_DECL_OVERRIDE;
QStyle *base;
void ref() { ++refcount; }
@@ -128,7 +128,7 @@ public:
bool styleSheetPalette(const QWidget* w, const QStyleOption* opt, QPalette* pal);
protected:
- bool event(QEvent *e);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
private:
int refcount;
diff --git a/src/widgets/styles/qwindowsmobilestyle.cpp b/src/widgets/styles/qwindowsmobilestyle.cpp
index 4ff0248b0d..a94c62f37d 100644
--- a/src/widgets/styles/qwindowsmobilestyle.cpp
+++ b/src/widgets/styles/qwindowsmobilestyle.cpp
@@ -5686,9 +5686,7 @@ void QWindowsMobileStyle::drawControl(ControlElement element, const QStyleOption
QRect r = rect;
if (verticalTitleBar) {
- QSize s = r.size();
- s.transpose();
- r.setSize(s);
+ r.setSize(r.size().transposed());
painter->save();
painter->translate(r.left(), r.top() + r.width());
diff --git a/src/widgets/styles/qwindowsstyle.cpp b/src/widgets/styles/qwindowsstyle.cpp
index a10bdc67e1..1336c04c42 100644
--- a/src/widgets/styles/qwindowsstyle.cpp
+++ b/src/widgets/styles/qwindowsstyle.cpp
@@ -586,6 +586,17 @@ int QWindowsStyle::styleHint(StyleHint hint, const QStyleOption *opt, const QWid
break;
}
#endif // Q_OS_WIN && !Q_OS_WINRT
+ case SH_Menu_SubMenuSloppyCloseTimeout:
+ case SH_Menu_SubMenuPopupDelay: {
+#if defined(Q_OS_WIN) && !defined(Q_OS_WINCE) && !defined(Q_OS_WINRT)
+ DWORD delay;
+ if (SystemParametersInfo(SPI_GETMENUSHOWDELAY, 0, &delay, 0))
+ ret = delay;
+ else
+#endif // Q_OS_WIN && !Q_OS_WINCE && !Q_OS_WINRT
+ ret = 400;
+ break;
+ }
#ifndef QT_NO_RUBBERBAND
case SH_RubberBand_Mask:
if (const QStyleOptionRubberBand *rbOpt = qstyleoption_cast<const QStyleOptionRubberBand *>(opt)) {
@@ -1756,9 +1767,7 @@ void QWindowsStyle::drawControl(ControlElement ce, const QStyleOption *opt, QPai
QRect r = rect;
if (verticalTitleBar) {
- QSize s = r.size();
- s.transpose();
- r.setSize(s);
+ r.setSize(r.size().transposed());
p->save();
p->translate(r.left(), r.top() + r.width());
diff --git a/src/widgets/styles/qwindowsstyle_p.h b/src/widgets/styles/qwindowsstyle_p.h
index b3c6f831d8..9b3efc6f1f 100644
--- a/src/widgets/styles/qwindowsstyle_p.h
+++ b/src/widgets/styles/qwindowsstyle_p.h
@@ -61,37 +61,37 @@ public:
QWindowsStyle();
~QWindowsStyle();
- void polish(QApplication*);
- void unpolish(QApplication*);
+ void polish(QApplication*) Q_DECL_OVERRIDE;
+ void unpolish(QApplication*) Q_DECL_OVERRIDE;
- void polish(QWidget*);
- void unpolish(QWidget*);
+ void polish(QWidget*) Q_DECL_OVERRIDE;
+ void unpolish(QWidget*) Q_DECL_OVERRIDE;
- void polish(QPalette &);
+ void polish(QPalette &) Q_DECL_OVERRIDE;
void drawPrimitive(PrimitiveElement pe, const QStyleOption *opt, QPainter *p,
- const QWidget *w = 0) const;
+ const QWidget *w = 0) const Q_DECL_OVERRIDE;
void drawControl(ControlElement element, const QStyleOption *opt, QPainter *p,
- const QWidget *w = 0) const;
- QRect subElementRect(SubElement r, const QStyleOption *opt, const QWidget *widget = 0) const;
+ const QWidget *w = 0) const Q_DECL_OVERRIDE;
+ QRect subElementRect(SubElement r, const QStyleOption *opt, const QWidget *widget = 0) const Q_DECL_OVERRIDE;
void drawComplexControl(ComplexControl cc, const QStyleOptionComplex *opt, QPainter *p,
- const QWidget *w = 0) const;
+ const QWidget *w = 0) const Q_DECL_OVERRIDE;
QSize sizeFromContents(ContentsType ct, const QStyleOption *opt,
- const QSize &contentsSize, const QWidget *widget = 0) const;
+ const QSize &contentsSize, const QWidget *widget = 0) const Q_DECL_OVERRIDE;
- int pixelMetric(PixelMetric pm, const QStyleOption *option = 0, const QWidget *widget = 0) const;
+ int pixelMetric(PixelMetric pm, const QStyleOption *option = 0, const QWidget *widget = 0) const Q_DECL_OVERRIDE;
int styleHint(StyleHint hint, const QStyleOption *opt = 0, const QWidget *widget = 0,
- QStyleHintReturn *returnData = 0) const;
+ QStyleHintReturn *returnData = 0) const Q_DECL_OVERRIDE;
QPixmap standardPixmap(StandardPixmap standardPixmap, const QStyleOption *opt,
- const QWidget *widget = 0) const;
+ const QWidget *widget = 0) const Q_DECL_OVERRIDE;
QIcon standardIcon(StandardPixmap standardIcon, const QStyleOption *option = 0,
- const QWidget *widget = 0) const;
+ const QWidget *widget = 0) const Q_DECL_OVERRIDE;
protected:
- bool eventFilter(QObject *o, QEvent *e);
+ bool eventFilter(QObject *o, QEvent *e) Q_DECL_OVERRIDE;
QWindowsStyle(QWindowsStylePrivate &dd);
private:
diff --git a/src/widgets/styles/qwindowsvistastyle.cpp b/src/widgets/styles/qwindowsvistastyle.cpp
index 42a85e8f64..c793e0c588 100644
--- a/src/widgets/styles/qwindowsvistastyle.cpp
+++ b/src/widgets/styles/qwindowsvistastyle.cpp
@@ -652,15 +652,18 @@ void QWindowsVistaStyle::drawPrimitive(PrimitiveElement element, const QStyleOpt
case PE_PanelItemViewItem:
{
const QStyleOptionViewItem *vopt;
- const QAbstractItemView *view = qobject_cast<const QAbstractItemView *>(widget);
bool newStyle = true;
+ QAbstractItemView::SelectionBehavior selectionBehavior = QAbstractItemView::SelectRows;
+ QAbstractItemView::SelectionMode selectionMode = QAbstractItemView::NoSelection;
+ if (const QAbstractItemView *view = qobject_cast<const QAbstractItemView *>(widget)) {
+ newStyle = !qobject_cast<const QTableView*>(view);
+ selectionBehavior = view->selectionBehavior();
+ selectionMode = view->selectionMode();
+ }
- if (qobject_cast<const QTableView*>(widget))
- newStyle = false;
-
- if (newStyle && view && (vopt = qstyleoption_cast<const QStyleOptionViewItem *>(option))) {
+ if (newStyle && (vopt = qstyleoption_cast<const QStyleOptionViewItem *>(option))) {
bool selected = vopt->state & QStyle::State_Selected;
- bool hover = vopt->state & QStyle::State_MouseOver;
+ const bool hover = selectionMode != QAbstractItemView::NoSelection && (vopt->state & QStyle::State_MouseOver);
bool active = vopt->state & QStyle::State_Active;
if (vopt->features & QStyleOptionViewItem::Alternate)
@@ -679,10 +682,8 @@ void QWindowsVistaStyle::drawPrimitive(PrimitiveElement element, const QStyleOpt
if (vopt->showDecorationSelected)
sectionSize = vopt->rect.size();
- if (view->selectionBehavior() == QAbstractItemView::SelectRows)
+ if (selectionBehavior == QAbstractItemView::SelectRows)
sectionSize.setWidth(vopt->rect.width());
- if (view->selectionMode() == QAbstractItemView::NoSelection)
- hover = false;
QPixmap pixmap;
if (vopt->backgroundBrush.style() != Qt::NoBrush) {
@@ -1382,9 +1383,7 @@ void QWindowsVistaStyle::drawControl(ControlElement element, const QStyleOption
bool verticalTitleBar = v2 == 0 ? false : v2->verticalTitleBar;
if (verticalTitleBar) {
- QSize s = rect.size();
- s.transpose();
- rect.setSize(s);
+ rect.setSize(rect.size().transposed());
painter->translate(rect.left() - 1, rect.top() + rect.width());
painter->rotate(-90);
diff --git a/src/widgets/styles/qwindowsxpstyle.cpp b/src/widgets/styles/qwindowsxpstyle.cpp
index c1f7b599b3..ed5eca7318 100644
--- a/src/widgets/styles/qwindowsxpstyle.cpp
+++ b/src/widgets/styles/qwindowsxpstyle.cpp
@@ -2372,9 +2372,7 @@ void QWindowsXPStyle::drawControl(ControlElement element, const QStyleOption *op
bool verticalTitleBar = v2 == 0 ? false : v2->verticalTitleBar;
if (verticalTitleBar) {
- QSize s = rect.size();
- s.transpose();
- rect.setSize(s);
+ rect.setSize(rect.size().transposed());
p->translate(rect.left() - 1, rect.top() + rect.width());
p->rotate(-90);
diff --git a/src/widgets/util/qcompleter.h b/src/widgets/util/qcompleter.h
index 3bee280719..c252284b85 100644
--- a/src/widgets/util/qcompleter.h
+++ b/src/widgets/util/qcompleter.h
@@ -136,8 +136,8 @@ public:
virtual QStringList splitPath(const QString &path) const;
protected:
- bool eventFilter(QObject *o, QEvent *e);
- bool event(QEvent *);
+ bool eventFilter(QObject *o, QEvent *e) Q_DECL_OVERRIDE;
+ bool event(QEvent *) Q_DECL_OVERRIDE;
Q_SIGNALS:
void activated(const QString &text);
diff --git a/src/widgets/util/qcompleter_p.h b/src/widgets/util/qcompleter_p.h
index 50f7cdacdb..b4ead17cab 100644
--- a/src/widgets/util/qcompleter_p.h
+++ b/src/widgets/util/qcompleter_p.h
@@ -167,7 +167,7 @@ class QSortedModelEngine : public QCompletionEngine
{
public:
QSortedModelEngine(QCompleterPrivate *c) : QCompletionEngine(c) { }
- QMatchData filter(const QString&, const QModelIndex&, int);
+ QMatchData filter(const QString&, const QModelIndex&, int) Q_DECL_OVERRIDE;
QIndexMapper indexHint(QString, const QModelIndex&, Qt::SortOrder);
Qt::SortOrder sortOrder(const QModelIndex&) const;
};
@@ -177,8 +177,8 @@ class QUnsortedModelEngine : public QCompletionEngine
public:
QUnsortedModelEngine(QCompleterPrivate *c) : QCompletionEngine(c) { }
- void filterOnDemand(int);
- QMatchData filter(const QString&, const QModelIndex&, int);
+ void filterOnDemand(int) Q_DECL_OVERRIDE;
+ QMatchData filter(const QString&, const QModelIndex&, int) Q_DECL_OVERRIDE;
private:
int buildIndices(const QString& str, const QModelIndex& parent, int n,
const QIndexMapper& iv, QMatchData* m);
@@ -189,7 +189,7 @@ class QCompleterItemDelegate : public QItemDelegate
public:
QCompleterItemDelegate(QAbstractItemView *view)
: QItemDelegate(view), view(view) { }
- void paint(QPainter *p, const QStyleOptionViewItem& opt, const QModelIndex& idx) const {
+ void paint(QPainter *p, const QStyleOptionViewItem& opt, const QModelIndex& idx) const Q_DECL_OVERRIDE {
QStyleOptionViewItem optCopy = opt;
optCopy.showDecorationSelected = true;
if (view->currentIndex() == idx)
@@ -218,16 +218,16 @@ public:
bool setCurrentRow(int row);
QModelIndex currentIndex(bool) const;
- QModelIndex index(int row, int column, const QModelIndex & = QModelIndex()) const;
- int rowCount(const QModelIndex &index = QModelIndex()) const;
- int columnCount(const QModelIndex &index = QModelIndex()) const;
- bool hasChildren(const QModelIndex &parent = QModelIndex()) const;
- QModelIndex parent(const QModelIndex & = QModelIndex()) const { return QModelIndex(); }
- QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const;
+ QModelIndex index(int row, int column, const QModelIndex & = QModelIndex()) const Q_DECL_OVERRIDE;
+ int rowCount(const QModelIndex &index = QModelIndex()) const Q_DECL_OVERRIDE;
+ int columnCount(const QModelIndex &index = QModelIndex()) const Q_DECL_OVERRIDE;
+ bool hasChildren(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
+ QModelIndex parent(const QModelIndex & = QModelIndex()) const Q_DECL_OVERRIDE { return QModelIndex(); }
+ QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
- void setSourceModel(QAbstractItemModel *sourceModel);
- QModelIndex mapToSource(const QModelIndex& proxyIndex) const;
- QModelIndex mapFromSource(const QModelIndex& sourceIndex) const;
+ void setSourceModel(QAbstractItemModel *sourceModel) Q_DECL_OVERRIDE;
+ QModelIndex mapToSource(const QModelIndex& proxyIndex) const Q_DECL_OVERRIDE;
+ QModelIndex mapFromSource(const QModelIndex& sourceIndex) const Q_DECL_OVERRIDE;
QCompleterPrivate *c;
QScopedPointer<QCompletionEngine> engine;
diff --git a/src/widgets/util/qflickgesture.cpp b/src/widgets/util/qflickgesture.cpp
index 42ead263f8..f7abd008b7 100644
--- a/src/widgets/util/qflickgesture.cpp
+++ b/src/widgets/util/qflickgesture.cpp
@@ -248,7 +248,7 @@ public:
}
protected:
- void timerEvent(QTimerEvent *e)
+ void timerEvent(QTimerEvent *e) Q_DECL_OVERRIDE
{
if (e->timerId() == pressDelayTimer) {
if (pressDelayEvent && mouseTarget) {
diff --git a/src/widgets/util/qscroller.cpp b/src/widgets/util/qscroller.cpp
index 8cd7b97e30..5235511b6d 100644
--- a/src/widgets/util/qscroller.cpp
+++ b/src/widgets/util/qscroller.cpp
@@ -190,7 +190,7 @@ public:
: d(_d), ignoreUpdate(false), skip(0)
{ }
- int duration() const
+ int duration() const Q_DECL_OVERRIDE
{
return -1;
}
@@ -206,7 +206,7 @@ public:
}
protected:
- void updateCurrentTime(int /*currentTime*/)
+ void updateCurrentTime(int /*currentTime*/) Q_DECL_OVERRIDE
{
if (!ignoreUpdate) {
if (++skip >= d->frameRateSkip()) {
diff --git a/src/widgets/util/qsystemtrayicon.cpp b/src/widgets/util/qsystemtrayicon.cpp
index 7d04cab05e..30ef7e82e5 100644
--- a/src/widgets/util/qsystemtrayicon.cpp
+++ b/src/widgets/util/qsystemtrayicon.cpp
@@ -718,8 +718,8 @@ void QSystemTrayIconPrivate::updateToolTip_sys_qpa()
qpa_sys->updateToolTip(toolTip);
}
-void QSystemTrayIconPrivate::showMessage_sys_qpa(const QString &message,
- const QString &title,
+void QSystemTrayIconPrivate::showMessage_sys_qpa(const QString &title,
+ const QString &message,
QSystemTrayIcon::MessageIcon icon,
int msecs)
{
@@ -737,7 +737,7 @@ void QSystemTrayIconPrivate::showMessage_sys_qpa(const QString &message,
default:
break;
}
- qpa_sys->showMessage(message, title, notificationIcon,
+ qpa_sys->showMessage(title, message, notificationIcon,
static_cast<QPlatformSystemTrayIcon::MessageIcon>(icon), msecs);
}
diff --git a/src/widgets/util/qsystemtrayicon.h b/src/widgets/util/qsystemtrayicon.h
index 4d92d811ed..29a9f849b4 100644
--- a/src/widgets/util/qsystemtrayicon.h
+++ b/src/widgets/util/qsystemtrayicon.h
@@ -102,7 +102,7 @@ Q_SIGNALS:
void messageClicked();
protected:
- bool event(QEvent *event);
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QSystemTrayIcon)
diff --git a/src/widgets/util/qsystemtrayicon_p.h b/src/widgets/util/qsystemtrayicon_p.h
index 0dda689c51..fdf91d4c43 100644
--- a/src/widgets/util/qsystemtrayicon_p.h
+++ b/src/widgets/util/qsystemtrayicon_p.h
@@ -77,7 +77,7 @@ public:
void updateToolTip_sys();
void updateMenu_sys();
QRect geometry_sys() const;
- void showMessage_sys(const QString &msg, const QString &title, QSystemTrayIcon::MessageIcon icon, int secs);
+ void showMessage_sys(const QString &title, const QString &msg, QSystemTrayIcon::MessageIcon icon, int secs);
static bool isSystemTrayAvailable_sys();
static bool supportsMessages_sys();
@@ -98,7 +98,7 @@ private:
void updateToolTip_sys_qpa();
void updateMenu_sys_qpa();
QRect geometry_sys_qpa() const;
- void showMessage_sys_qpa(const QString &msg, const QString &title, QSystemTrayIcon::MessageIcon icon, int secs);
+ void showMessage_sys_qpa(const QString &title, const QString &msg, QSystemTrayIcon::MessageIcon icon, int secs);
};
class QBalloonTip : public QWidget
@@ -119,10 +119,10 @@ private:
void balloon(const QPoint&, int, bool);
protected:
- void paintEvent(QPaintEvent *);
- void resizeEvent(QResizeEvent *);
- void mousePressEvent(QMouseEvent *e);
- void timerEvent(QTimerEvent *e);
+ void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
+ void resizeEvent(QResizeEvent *) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
+ void timerEvent(QTimerEvent *e) Q_DECL_OVERRIDE;
private:
QSystemTrayIcon *trayIcon;
diff --git a/src/widgets/util/qsystemtrayicon_qpa.cpp b/src/widgets/util/qsystemtrayicon_qpa.cpp
index 08764b405d..7dc848d3ab 100644
--- a/src/widgets/util/qsystemtrayicon_qpa.cpp
+++ b/src/widgets/util/qsystemtrayicon_qpa.cpp
@@ -111,13 +111,11 @@ bool QSystemTrayIconPrivate::supportsMessages_sys()
return false;
}
-void QSystemTrayIconPrivate::showMessage_sys(const QString &message,
- const QString &title,
- QSystemTrayIcon::MessageIcon icon,
- int msecs)
+void QSystemTrayIconPrivate::showMessage_sys(const QString &title, const QString &message,
+ QSystemTrayIcon::MessageIcon icon, int msecs)
{
if (qpa_sys)
- showMessage_sys_qpa(message, title, icon, msecs);
+ showMessage_sys_qpa(title, message, icon, msecs);
}
QT_END_NAMESPACE
diff --git a/src/widgets/util/qsystemtrayicon_x11.cpp b/src/widgets/util/qsystemtrayicon_x11.cpp
index 09f2d6266c..ba80734876 100644
--- a/src/widgets/util/qsystemtrayicon_x11.cpp
+++ b/src/widgets/util/qsystemtrayicon_x11.cpp
@@ -74,12 +74,12 @@ public:
QRect globalGeometry() const;
protected:
- virtual void mousePressEvent(QMouseEvent *ev);
- virtual void mouseDoubleClickEvent(QMouseEvent *ev);
- virtual bool event(QEvent *);
- virtual void paintEvent(QPaintEvent *);
- virtual void resizeEvent(QResizeEvent *);
- virtual void moveEvent(QMoveEvent *);
+ virtual void mousePressEvent(QMouseEvent *ev) Q_DECL_OVERRIDE;
+ virtual void mouseDoubleClickEvent(QMouseEvent *ev) Q_DECL_OVERRIDE;
+ virtual bool event(QEvent *) Q_DECL_OVERRIDE;
+ virtual void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
+ virtual void resizeEvent(QResizeEvent *) Q_DECL_OVERRIDE;
+ virtual void moveEvent(QMoveEvent *) Q_DECL_OVERRIDE;
private slots:
void systemTrayWindowChanged(QScreen *screen);
@@ -107,13 +107,29 @@ QSystemTrayIconSys::QSystemTrayIconSys(QSystemTrayIcon *qIn)
// If we have a visual that has an alpha channel, we can paint this widget with a transparent
// background and it will work.
// However, if there's no alpha channel visual, in order for transparent tray icons to work,
- // we do not have a transparent background on the widget, but call xcb_clear_region before
- // painting the icon
+ // we do not have a transparent background on the widget, but set the BackPixmap property of our
+ // window to ParentRelative (so that it inherits the background of its X11 parent window), call
+ // xcb_clear_region before painting (so that the inherited background is visible) and then grab
+ // the just-drawn background from the X11 server.
bool hasAlphaChannel = false;
QMetaObject::invokeMethod(QGuiApplication::platformNativeInterface(),
"systrayVisualHasAlphaChannel", Qt::DirectConnection,
Q_RETURN_ARG(bool, hasAlphaChannel));
setAttribute(Qt::WA_TranslucentBackground, hasAlphaChannel);
+ if (!hasAlphaChannel) {
+ createWinId();
+ QMetaObject::invokeMethod(QGuiApplication::platformNativeInterface(),
+ "setParentRelativeBackPixmap", Qt::DirectConnection,
+ Q_ARG(const QWindow *, windowHandle())
+ );
+
+ // XXX: This is actually required, but breaks things ("QWidget::paintEngine: Should no
+ // longer be called"). Why is this needed? When the widget is drawn, we use tricks to grab
+ // the tray icon's background from the server. If the tray icon isn't visible (because
+ // another window is on top of it), the trick fails and instead uses the content of that
+ // other window as the background.
+ // setAttribute(Qt::WA_PaintOnScreen);
+ }
addToTray();
}
@@ -214,11 +230,18 @@ void QSystemTrayIconSys::paintEvent(QPaintEvent *)
painter.setCompositionMode(QPainter::CompositionMode_Source);
painter.fillRect(rect, Qt::transparent);
} else {
+ // Without Qt::WA_TranslucentBackground, we use a ParentRelative BackPixmap and jump through
+ // some hops to draw this background below our icon. This clears the whole tray icon to its
+ // background color and thus causes flickering (you can see that the icon is being
+ // repainted). However, we can't really do much about this.
QMetaObject::invokeMethod(QGuiApplication::platformNativeInterface(),
"clearRegion", Qt::DirectConnection,
Q_ARG(const QWindow *, windowHandle()),
Q_ARG(const QRect&, rect)
);
+ painter.drawPixmap(QPoint(0, 0),
+ QGuiApplication::primaryScreen()->grabWindow(winId(),
+ 0, 0, rect.size().width(), rect.size().height()));
}
painter.setCompositionMode(QPainter::CompositionMode_SourceOver);
q->icon().paint(&painter, rect);
@@ -341,11 +364,11 @@ bool QSystemTrayIconPrivate::supportsMessages_sys()
return true;
}
-void QSystemTrayIconPrivate::showMessage_sys(const QString &message, const QString &title,
+void QSystemTrayIconPrivate::showMessage_sys(const QString &title, const QString &message,
QSystemTrayIcon::MessageIcon icon, int msecs)
{
if (qpa_sys) {
- showMessage_sys_qpa(message, title, icon, msecs);
+ showMessage_sys_qpa(title, message, icon, msecs);
return;
}
if (!sys)
diff --git a/src/widgets/util/qundoview.cpp b/src/widgets/util/qundoview.cpp
index 970541cf73..4ead2910a2 100644
--- a/src/widgets/util/qundoview.cpp
+++ b/src/widgets/util/qundoview.cpp
@@ -53,11 +53,11 @@ public:
QUndoStack *stack() const;
virtual QModelIndex index(int row, int column,
- const QModelIndex &parent = QModelIndex()) const;
- virtual QModelIndex parent(const QModelIndex &child) const;
- virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
- virtual int columnCount(const QModelIndex &parent = QModelIndex()) const;
- virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
+ const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
+ virtual QModelIndex parent(const QModelIndex &child) const Q_DECL_OVERRIDE;
+ virtual int rowCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
+ virtual int columnCount(const QModelIndex &parent = QModelIndex()) const Q_DECL_OVERRIDE;
+ virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const Q_DECL_OVERRIDE;
QModelIndex selectedIndex() const;
QItemSelectionModel *selectionModel() const;
diff --git a/src/widgets/widgets/qabstractbutton.h b/src/widgets/widgets/qabstractbutton.h
index 7fa50f4c0b..c80e2e9d5d 100644
--- a/src/widgets/widgets/qabstractbutton.h
+++ b/src/widgets/widgets/qabstractbutton.h
@@ -122,16 +122,16 @@ protected:
virtual void checkStateSet();
virtual void nextCheckState();
- bool event(QEvent *e);
- void keyPressEvent(QKeyEvent *e);
- void keyReleaseEvent(QKeyEvent *e);
- void mousePressEvent(QMouseEvent *e);
- void mouseReleaseEvent(QMouseEvent *e);
- void mouseMoveEvent(QMouseEvent *e);
- void focusInEvent(QFocusEvent *e);
- void focusOutEvent(QFocusEvent *e);
- void changeEvent(QEvent *e);
- void timerEvent(QTimerEvent *e);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
+ void keyPressEvent(QKeyEvent *e) Q_DECL_OVERRIDE;
+ void keyReleaseEvent(QKeyEvent *e) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
+ void mouseReleaseEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
+ void mouseMoveEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
+ void focusInEvent(QFocusEvent *e) Q_DECL_OVERRIDE;
+ void focusOutEvent(QFocusEvent *e) Q_DECL_OVERRIDE;
+ void changeEvent(QEvent *e) Q_DECL_OVERRIDE;
+ void timerEvent(QTimerEvent *e) Q_DECL_OVERRIDE;
protected:
diff --git a/src/widgets/widgets/qabstractscrollarea.cpp b/src/widgets/widgets/qabstractscrollarea.cpp
index 4cafeafcec..bcf0bbe1fc 100644
--- a/src/widgets/widgets/qabstractscrollarea.cpp
+++ b/src/widgets/widgets/qabstractscrollarea.cpp
@@ -923,7 +923,7 @@ QWidgetList QAbstractScrollArea::scrollBarWidgets(Qt::Alignment alignment)
they should not call this function.
By default all margins are zero.
-
+ \sa viewportMargins()
*/
void QAbstractScrollArea::setViewportMargins(int left, int top, int right, int bottom)
{
@@ -943,7 +943,7 @@ void QAbstractScrollArea::setViewportMargins(int left, int top, int right, int b
area.
By default all margins are zero.
-
+ \sa viewportMargins()
*/
void QAbstractScrollArea::setViewportMargins(const QMargins &margins)
{
@@ -951,6 +951,19 @@ void QAbstractScrollArea::setViewportMargins(const QMargins &margins)
margins.right(), margins.bottom());
}
+/*!
+ \since 5.5
+ Returns the margins around the scrolling area.
+ By default all the margins are zero.
+
+ \sa setViewportMargins()
+*/
+QMargins QAbstractScrollArea::viewportMargins() const
+{
+ Q_D(const QAbstractScrollArea);
+ return QMargins(d->left, d->top, d->right, d->bottom);
+}
+
/*! \internal */
bool QAbstractScrollArea::eventFilter(QObject *o, QEvent *e)
{
diff --git a/src/widgets/widgets/qabstractscrollarea.h b/src/widgets/widgets/qabstractscrollarea.h
index a3f6c3e2d4..6a9a86b07f 100644
--- a/src/widgets/widgets/qabstractscrollarea.h
+++ b/src/widgets/widgets/qabstractscrollarea.h
@@ -84,9 +84,9 @@ public:
void setViewport(QWidget *widget);
QSize maximumViewportSize() const;
- QSize minimumSizeHint() const;
+ QSize minimumSizeHint() const Q_DECL_OVERRIDE;
- QSize sizeHint() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
virtual void setupViewport(QWidget *viewport);
@@ -97,31 +97,32 @@ protected:
QAbstractScrollArea(QAbstractScrollAreaPrivate &dd, QWidget *parent = 0);
void setViewportMargins(int left, int top, int right, int bottom);
void setViewportMargins(const QMargins &margins);
+ QMargins viewportMargins() const;
- bool eventFilter(QObject *, QEvent *);
- bool event(QEvent *);
+ bool eventFilter(QObject *, QEvent *) Q_DECL_OVERRIDE;
+ bool event(QEvent *) Q_DECL_OVERRIDE;
virtual bool viewportEvent(QEvent *);
- void resizeEvent(QResizeEvent *);
- void paintEvent(QPaintEvent *);
- void mousePressEvent(QMouseEvent *);
- void mouseReleaseEvent(QMouseEvent *);
- void mouseDoubleClickEvent(QMouseEvent *);
- void mouseMoveEvent(QMouseEvent *);
+ void resizeEvent(QResizeEvent *) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent *) Q_DECL_OVERRIDE;
+ void mouseReleaseEvent(QMouseEvent *) Q_DECL_OVERRIDE;
+ void mouseDoubleClickEvent(QMouseEvent *) Q_DECL_OVERRIDE;
+ void mouseMoveEvent(QMouseEvent *) Q_DECL_OVERRIDE;
#ifndef QT_NO_WHEELEVENT
- void wheelEvent(QWheelEvent *);
+ void wheelEvent(QWheelEvent *) Q_DECL_OVERRIDE;
#endif
#ifndef QT_NO_CONTEXTMENU
- void contextMenuEvent(QContextMenuEvent *);
+ void contextMenuEvent(QContextMenuEvent *) Q_DECL_OVERRIDE;
#endif
#ifndef QT_NO_DRAGANDDROP
- void dragEnterEvent(QDragEnterEvent *);
- void dragMoveEvent(QDragMoveEvent *);
- void dragLeaveEvent(QDragLeaveEvent *);
- void dropEvent(QDropEvent *);
+ void dragEnterEvent(QDragEnterEvent *) Q_DECL_OVERRIDE;
+ void dragMoveEvent(QDragMoveEvent *) Q_DECL_OVERRIDE;
+ void dragLeaveEvent(QDragLeaveEvent *) Q_DECL_OVERRIDE;
+ void dropEvent(QDropEvent *) Q_DECL_OVERRIDE;
#endif
- void keyPressEvent(QKeyEvent *);
+ void keyPressEvent(QKeyEvent *) Q_DECL_OVERRIDE;
virtual void scrollContentsBy(int dx, int dy);
diff --git a/src/widgets/widgets/qabstractscrollarea_p.h b/src/widgets/widgets/qabstractscrollarea_p.h
index aaf93a3352..a70b4df5eb 100644
--- a/src/widgets/widgets/qabstractscrollarea_p.h
+++ b/src/widgets/widgets/qabstractscrollarea_p.h
@@ -114,7 +114,7 @@ class QAbstractScrollAreaFilter : public QObject
public:
QAbstractScrollAreaFilter(QAbstractScrollAreaPrivate *p) : d(p)
{ setObjectName(QLatin1String("qt_abstractscrollarea_filter")); }
- bool eventFilter(QObject *o, QEvent *e)
+ bool eventFilter(QObject *o, QEvent *e) Q_DECL_OVERRIDE
{ return (o == d->viewport ? d->viewportEvent(e) : false); }
private:
QAbstractScrollAreaPrivate *d;
diff --git a/src/widgets/widgets/qabstractslider.cpp b/src/widgets/widgets/qabstractslider.cpp
index d9dae9d775..fccdd24c39 100644
--- a/src/widgets/widgets/qabstractslider.cpp
+++ b/src/widgets/widgets/qabstractslider.cpp
@@ -728,7 +728,7 @@ bool QAbstractSliderPrivate::scrollByDelta(Qt::Orientation orientation, Qt::Keyb
stepsToScroll = -stepsToScroll;
int prevValue = value;
- position = overflowSafeAdd(stepsToScroll); // value will be updated by triggerAction()
+ position = bound(overflowSafeAdd(stepsToScroll)); // value will be updated by triggerAction()
q->triggerAction(QAbstractSlider::SliderMove);
if (prevValue == value) {
diff --git a/src/widgets/widgets/qabstractslider.h b/src/widgets/widgets/qabstractslider.h
index 99312a0ef7..3b107d5502 100644
--- a/src/widgets/widgets/qabstractslider.h
+++ b/src/widgets/widgets/qabstractslider.h
@@ -122,7 +122,7 @@ Q_SIGNALS:
void actionTriggered(int action);
protected:
- bool event(QEvent *e);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
void setRepeatAction(SliderAction action, int thresholdTime = 500, int repeatTime = 50);
SliderAction repeatAction() const;
@@ -135,12 +135,12 @@ protected:
};
virtual void sliderChange(SliderChange change);
- void keyPressEvent(QKeyEvent *ev);
- void timerEvent(QTimerEvent *);
+ void keyPressEvent(QKeyEvent *ev) Q_DECL_OVERRIDE;
+ void timerEvent(QTimerEvent *) Q_DECL_OVERRIDE;
#ifndef QT_NO_WHEELEVENT
- void wheelEvent(QWheelEvent *e);
+ void wheelEvent(QWheelEvent *e) Q_DECL_OVERRIDE;
#endif
- void changeEvent(QEvent *e);
+ void changeEvent(QEvent *e) Q_DECL_OVERRIDE;
protected:
diff --git a/src/widgets/widgets/qcalendarwidget.cpp b/src/widgets/widgets/qcalendarwidget.cpp
index fa3dbc1f32..0071143958 100644
--- a/src/widgets/widgets/qcalendarwidget.cpp
+++ b/src/widgets/widgets/qcalendarwidget.cpp
@@ -104,11 +104,11 @@ class QCalendarDayValidator : public QCalendarDateSectionValidator
public:
QCalendarDayValidator();
- virtual Section handleKey(int key);
- virtual QDate applyToDate(const QDate &date) const;
- virtual void setDate(const QDate &date);
- virtual QString text() const;
- virtual QString text(const QDate &date, int repeat) const;
+ virtual Section handleKey(int key) Q_DECL_OVERRIDE;
+ virtual QDate applyToDate(const QDate &date) const Q_DECL_OVERRIDE;
+ virtual void setDate(const QDate &date) Q_DECL_OVERRIDE;
+ virtual QString text() const Q_DECL_OVERRIDE;
+ virtual QString text(const QDate &date, int repeat) const Q_DECL_OVERRIDE;
private:
int m_pos;
int m_day;
@@ -220,11 +220,11 @@ class QCalendarMonthValidator : public QCalendarDateSectionValidator
public:
QCalendarMonthValidator();
- virtual Section handleKey(int key);
- virtual QDate applyToDate(const QDate &date) const;
- virtual void setDate(const QDate &date);
- virtual QString text() const;
- virtual QString text(const QDate &date, int repeat) const;
+ virtual Section handleKey(int key) Q_DECL_OVERRIDE;
+ virtual QDate applyToDate(const QDate &date) const Q_DECL_OVERRIDE;
+ virtual void setDate(const QDate &date) Q_DECL_OVERRIDE;
+ virtual QString text() const Q_DECL_OVERRIDE;
+ virtual QString text(const QDate &date, int repeat) const Q_DECL_OVERRIDE;
private:
int m_pos;
int m_month;
@@ -337,11 +337,11 @@ class QCalendarYearValidator : public QCalendarDateSectionValidator
public:
QCalendarYearValidator();
- virtual Section handleKey(int key);
- virtual QDate applyToDate(const QDate &date) const;
- virtual void setDate(const QDate &date);
- virtual QString text() const;
- virtual QString text(const QDate &date, int repeat) const;
+ virtual Section handleKey(int key) Q_DECL_OVERRIDE;
+ virtual QDate applyToDate(const QDate &date) const Q_DECL_OVERRIDE;
+ virtual void setDate(const QDate &date) Q_DECL_OVERRIDE;
+ virtual QString text() const Q_DECL_OVERRIDE;
+ virtual QString text(const QDate &date, int repeat) const Q_DECL_OVERRIDE;
private:
int pow10(int n);
int m_pos;
@@ -683,8 +683,8 @@ public:
QDate date() const;
void setDate(const QDate &date);
- bool eventFilter(QObject *o, QEvent *e);
- void timerEvent(QTimerEvent *e);
+ bool eventFilter(QObject *o, QEvent *e) Q_DECL_OVERRIDE;
+ void timerEvent(QTimerEvent *e) Q_DECL_OVERRIDE;
signals:
void dateChanged(const QDate &date);
@@ -853,32 +853,32 @@ class QCalendarModel : public QAbstractTableModel
public:
QCalendarModel(QObject *parent = 0);
- int rowCount(const QModelIndex &) const
+ int rowCount(const QModelIndex &) const Q_DECL_OVERRIDE
{ return RowCount + m_firstRow; }
- int columnCount(const QModelIndex &) const
+ int columnCount(const QModelIndex &) const Q_DECL_OVERRIDE
{ return ColumnCount + m_firstColumn; }
- QVariant data(const QModelIndex &index, int role) const;
- Qt::ItemFlags flags(const QModelIndex &index) const;
+ QVariant data(const QModelIndex &index, int role) const Q_DECL_OVERRIDE;
+ Qt::ItemFlags flags(const QModelIndex &index) const Q_DECL_OVERRIDE;
- bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex())
+ bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE
{
beginInsertRows(parent, row, row + count - 1);
endInsertRows();
return true;
}
- bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex())
+ bool insertColumns(int column, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE
{
beginInsertColumns(parent, column, column + count - 1);
endInsertColumns();
return true;
}
- bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex())
+ bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE
{
beginRemoveRows(parent, row, row + count - 1);
endRemoveRows();
return true;
}
- bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex())
+ bool removeColumns(int column, int count, const QModelIndex &parent = QModelIndex()) Q_DECL_OVERRIDE
{
beginRemoveColumns(parent, column, column + count - 1);
endRemoveColumns();
@@ -939,7 +939,7 @@ public:
void internalUpdate() { updateGeometries(); }
void setReadOnly(bool enable);
- virtual void keyboardSearch(const QString & search) { Q_UNUSED(search) }
+ virtual void keyboardSearch(const QString & search) Q_DECL_OVERRIDE { Q_UNUSED(search) }
signals:
void showDate(const QDate &date);
@@ -947,16 +947,16 @@ signals:
void clicked(const QDate &date);
void editingFinished();
protected:
- QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers);
- void mouseDoubleClickEvent(QMouseEvent *event);
- void mousePressEvent(QMouseEvent *event);
- void mouseMoveEvent(QMouseEvent *event);
- void mouseReleaseEvent(QMouseEvent *event);
+ QModelIndex moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers) Q_DECL_OVERRIDE;
+ void mouseDoubleClickEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
#ifndef QT_NO_WHEELEVENT
- void wheelEvent(QWheelEvent *event);
+ void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE;
#endif
- void keyPressEvent(QKeyEvent *event);
- bool event(QEvent *event);
+ void keyPressEvent(QKeyEvent *event) Q_DECL_OVERRIDE;
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
QDate handleMouseEvent(QMouseEvent *event);
public:
@@ -1555,7 +1555,7 @@ public:
: QItemDelegate(parent), calendarWidgetPrivate(w)
{ }
virtual void paint(QPainter *painter, const QStyleOptionViewItem &option,
- const QModelIndex &index) const;
+ const QModelIndex &index) const Q_DECL_OVERRIDE;
void paintCell(QPainter *painter, const QRect &rect, const QDate &date) const;
private:
@@ -1571,7 +1571,7 @@ public:
: QToolButton(parent)
{ }
protected:
- void paintEvent(QPaintEvent *e)
+ void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE
{
Q_UNUSED(e)
@@ -1599,7 +1599,7 @@ class QPrevNextCalButton : public QToolButton
public:
QPrevNextCalButton(QWidget *parent) : QToolButton(parent) {}
protected:
- void paintEvent(QPaintEvent *) {
+ void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE {
QStylePainter painter(this);
QStyleOptionToolButton opt;
initStyleOption(&opt);
diff --git a/src/widgets/widgets/qcalendarwidget.h b/src/widgets/widgets/qcalendarwidget.h
index e838098e53..f039fdf6c9 100644
--- a/src/widgets/widgets/qcalendarwidget.h
+++ b/src/widgets/widgets/qcalendarwidget.h
@@ -86,8 +86,8 @@ public:
explicit QCalendarWidget(QWidget *parent = 0);
~QCalendarWidget();
- virtual QSize sizeHint() const;
- virtual QSize minimumSizeHint() const;
+ virtual QSize sizeHint() const Q_DECL_OVERRIDE;
+ virtual QSize minimumSizeHint() const Q_DECL_OVERRIDE;
QDate selectedDate() const;
@@ -132,11 +132,11 @@ public:
void setDateEditAcceptDelay(int delay);
protected:
- bool event(QEvent *event);
- bool eventFilter(QObject *watched, QEvent *event);
- void mousePressEvent(QMouseEvent *event);
- void resizeEvent(QResizeEvent * event);
- void keyPressEvent(QKeyEvent * event);
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
+ bool eventFilter(QObject *watched, QEvent *event) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ void resizeEvent(QResizeEvent * event) Q_DECL_OVERRIDE;
+ void keyPressEvent(QKeyEvent * event) Q_DECL_OVERRIDE;
virtual void paintCell(QPainter *painter, const QRect &rect, const QDate &date) const;
void updateCell(const QDate &date);
diff --git a/src/widgets/widgets/qcheckbox.h b/src/widgets/widgets/qcheckbox.h
index fe954571aa..6586793db2 100644
--- a/src/widgets/widgets/qcheckbox.h
+++ b/src/widgets/widgets/qcheckbox.h
@@ -53,8 +53,8 @@ public:
explicit QCheckBox(const QString &text, QWidget *parent=0);
~QCheckBox();
- QSize sizeHint() const;
- QSize minimumSizeHint() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize minimumSizeHint() const Q_DECL_OVERRIDE;
void setTristate(bool y = true);
bool isTristate() const;
@@ -66,12 +66,12 @@ Q_SIGNALS:
void stateChanged(int);
protected:
- bool event(QEvent *e);
- bool hitButton(const QPoint &pos) const;
- void checkStateSet();
- void nextCheckState();
- void paintEvent(QPaintEvent *);
- void mouseMoveEvent(QMouseEvent *);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
+ bool hitButton(const QPoint &pos) const Q_DECL_OVERRIDE;
+ void checkStateSet() Q_DECL_OVERRIDE;
+ void nextCheckState() Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
+ void mouseMoveEvent(QMouseEvent *) Q_DECL_OVERRIDE;
void initStyleOption(QStyleOptionButton *option) const;
diff --git a/src/widgets/widgets/qcombobox.cpp b/src/widgets/widgets/qcombobox.cpp
index 40cf2f0f95..24aef5254f 100644
--- a/src/widgets/widgets/qcombobox.cpp
+++ b/src/widgets/widgets/qcombobox.cpp
@@ -1931,6 +1931,9 @@ void QComboBox::setModel(QAbstractItemModel *model)
return;
}
+ if (model == d->model)
+ return;
+
#ifndef QT_NO_COMPLETER
if (d->lineEdit && d->lineEdit->completer()
&& d->lineEdit->completer() == d->completer)
@@ -1983,15 +1986,16 @@ void QComboBox::setModel(QAbstractItemModel *model)
this, SLOT(_q_emitHighlighted(QModelIndex)), Qt::UniqueConnection);
}
+ setRootModelIndex(QModelIndex());
+
bool currentReset = false;
- if (count()) {
- for (int pos=0; pos < count(); pos++) {
- if (d->model->index(pos, d->modelColumn, d->root).flags() & Qt::ItemIsEnabled) {
- setCurrentIndex(pos);
- currentReset = true;
- break;
- }
+ const int rowCount = count();
+ for (int pos=0; pos < rowCount; pos++) {
+ if (d->model->index(pos, d->modelColumn, d->root).flags() & Qt::ItemIsEnabled) {
+ setCurrentIndex(pos);
+ currentReset = true;
+ break;
}
}
@@ -2021,6 +2025,8 @@ QModelIndex QComboBox::rootModelIndex() const
void QComboBox::setRootModelIndex(const QModelIndex &index)
{
Q_D(QComboBox);
+ if (d->root == index)
+ return;
d->root = QPersistentModelIndex(index);
view()->setRootIndex(index);
update();
diff --git a/src/widgets/widgets/qcombobox.h b/src/widgets/widgets/qcombobox.h
index 806653d2d8..7e399ec1f5 100644
--- a/src/widgets/widgets/qcombobox.h
+++ b/src/widgets/widgets/qcombobox.h
@@ -188,14 +188,14 @@ public:
QAbstractItemView *view() const;
void setView(QAbstractItemView *itemView);
- QSize sizeHint() const;
- QSize minimumSizeHint() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize minimumSizeHint() const Q_DECL_OVERRIDE;
virtual void showPopup();
virtual void hidePopup();
- bool event(QEvent *event);
- QVariant inputMethodQuery(Qt::InputMethodQuery) const;
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
+ QVariant inputMethodQuery(Qt::InputMethodQuery) const Q_DECL_OVERRIDE;
public Q_SLOTS:
void clear();
@@ -215,22 +215,22 @@ Q_SIGNALS:
void currentTextChanged(const QString &);
protected:
- void focusInEvent(QFocusEvent *e);
- void focusOutEvent(QFocusEvent *e);
- void changeEvent(QEvent *e);
- void resizeEvent(QResizeEvent *e);
- void paintEvent(QPaintEvent *e);
- void showEvent(QShowEvent *e);
- void hideEvent(QHideEvent *e);
- void mousePressEvent(QMouseEvent *e);
- void mouseReleaseEvent(QMouseEvent *e);
- void keyPressEvent(QKeyEvent *e);
- void keyReleaseEvent(QKeyEvent *e);
+ void focusInEvent(QFocusEvent *e) Q_DECL_OVERRIDE;
+ void focusOutEvent(QFocusEvent *e) Q_DECL_OVERRIDE;
+ void changeEvent(QEvent *e) Q_DECL_OVERRIDE;
+ void resizeEvent(QResizeEvent *e) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE;
+ void showEvent(QShowEvent *e) Q_DECL_OVERRIDE;
+ void hideEvent(QHideEvent *e) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
+ void mouseReleaseEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
+ void keyPressEvent(QKeyEvent *e) Q_DECL_OVERRIDE;
+ void keyReleaseEvent(QKeyEvent *e) Q_DECL_OVERRIDE;
#ifndef QT_NO_WHEELEVENT
- void wheelEvent(QWheelEvent *e);
+ void wheelEvent(QWheelEvent *e) Q_DECL_OVERRIDE;
#endif
- void contextMenuEvent(QContextMenuEvent *e);
- void inputMethodEvent(QInputMethodEvent *);
+ void contextMenuEvent(QContextMenuEvent *e) Q_DECL_OVERRIDE;
+ void inputMethodEvent(QInputMethodEvent *) Q_DECL_OVERRIDE;
void initStyleOption(QStyleOptionComboBox *option) const;
diff --git a/src/widgets/widgets/qcommandlinkbutton.h b/src/widgets/widgets/qcommandlinkbutton.h
index bfef2e300d..582f666e83 100644
--- a/src/widgets/widgets/qcommandlinkbutton.h
+++ b/src/widgets/widgets/qcommandlinkbutton.h
@@ -58,11 +58,11 @@ public:
void setDescription(const QString &description);
protected:
- QSize sizeHint() const;
- int heightForWidth(int) const;
- QSize minimumSizeHint() const;
- bool event(QEvent *e);
- void paintEvent(QPaintEvent *);
+ QSize sizeHint() const Q_DECL_OVERRIDE;
+ int heightForWidth(int) const Q_DECL_OVERRIDE;
+ QSize minimumSizeHint() const Q_DECL_OVERRIDE;
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QCommandLinkButton)
diff --git a/src/widgets/widgets/qdial.cpp b/src/widgets/widgets/qdial.cpp
index 0dd6515f5b..a9de9a7154 100644
--- a/src/widgets/widgets/qdial.cpp
+++ b/src/widgets/widgets/qdial.cpp
@@ -75,7 +75,7 @@ public:
int valueFromPoint(const QPoint &) const;
double angle(const QPoint &, const QPoint &) const;
void init();
- virtual int bound(int val) const;
+ virtual int bound(int val) const Q_DECL_OVERRIDE;
};
void QDialPrivate::init()
diff --git a/src/widgets/widgets/qdial.h b/src/widgets/widgets/qdial.h
index de233b09b7..acaf6c8c9e 100644
--- a/src/widgets/widgets/qdial.h
+++ b/src/widgets/widgets/qdial.h
@@ -66,23 +66,23 @@ public:
qreal notchTarget() const;
bool notchesVisible() const;
- QSize sizeHint() const;
- QSize minimumSizeHint() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize minimumSizeHint() const Q_DECL_OVERRIDE;
public Q_SLOTS:
void setNotchesVisible(bool visible);
void setWrapping(bool on);
protected:
- bool event(QEvent *e);
- void resizeEvent(QResizeEvent *re);
- void paintEvent(QPaintEvent *pe);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
+ void resizeEvent(QResizeEvent *re) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *pe) Q_DECL_OVERRIDE;
- void mousePressEvent(QMouseEvent *me);
- void mouseReleaseEvent(QMouseEvent *me);
- void mouseMoveEvent(QMouseEvent *me);
+ void mousePressEvent(QMouseEvent *me) Q_DECL_OVERRIDE;
+ void mouseReleaseEvent(QMouseEvent *me) Q_DECL_OVERRIDE;
+ void mouseMoveEvent(QMouseEvent *me) Q_DECL_OVERRIDE;
- void sliderChange(SliderChange change);
+ void sliderChange(SliderChange change) Q_DECL_OVERRIDE;
void initStyleOption(QStyleOptionSlider *option) const;
diff --git a/src/widgets/widgets/qdialogbuttonbox.h b/src/widgets/widgets/qdialogbuttonbox.h
index e20a166d29..7bf497e3e5 100644
--- a/src/widgets/widgets/qdialogbuttonbox.h
+++ b/src/widgets/widgets/qdialogbuttonbox.h
@@ -140,8 +140,8 @@ Q_SIGNALS:
void rejected();
protected:
- void changeEvent(QEvent *event);
- bool event(QEvent *event);
+ void changeEvent(QEvent *event) Q_DECL_OVERRIDE;
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QDialogButtonBox)
diff --git a/src/widgets/widgets/qdockwidget.cpp b/src/widgets/widgets/qdockwidget.cpp
index 2bf8a37e7f..4121074e2e 100644
--- a/src/widgets/widgets/qdockwidget.cpp
+++ b/src/widgets/widgets/qdockwidget.cpp
@@ -109,13 +109,13 @@ class QDockWidgetTitleButton : public QAbstractButton
public:
QDockWidgetTitleButton(QDockWidget *dockWidget);
- QSize sizeHint() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
inline QSize minimumSizeHint() const
{ return sizeHint(); }
- void enterEvent(QEvent *event);
- void leaveEvent(QEvent *event);
- void paintEvent(QPaintEvent *event);
+ void enterEvent(QEvent *event) Q_DECL_OVERRIDE;
+ void leaveEvent(QEvent *event) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
};
@@ -207,7 +207,7 @@ static bool isXcb()
bool QDockWidgetLayout::nativeWindowDeco(bool floating) const
{
-#ifdef Q_OS_WINCE
+#if defined(Q_OS_WINCE) || defined(Q_OS_ANDROID)
return false;
#else
return !isXcb() && (floating && item_list[QDockWidgetLayout::TitleBar] == 0);
diff --git a/src/widgets/widgets/qdockwidget.h b/src/widgets/widgets/qdockwidget.h
index 70ee2a4dcb..fb5c2c375a 100644
--- a/src/widgets/widgets/qdockwidget.h
+++ b/src/widgets/widgets/qdockwidget.h
@@ -106,10 +106,10 @@ Q_SIGNALS:
void dockLocationChanged(Qt::DockWidgetArea area);
protected:
- void changeEvent(QEvent *event);
- void closeEvent(QCloseEvent *event);
- void paintEvent(QPaintEvent *event);
- bool event(QEvent *event);
+ void changeEvent(QEvent *event) Q_DECL_OVERRIDE;
+ void closeEvent(QCloseEvent *event) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
void initStyleOption(QStyleOptionDockWidget *option) const;
private:
diff --git a/src/widgets/widgets/qdockwidget_p.h b/src/widgets/widgets/qdockwidget_p.h
index 7d75b4859c..e8c4720a98 100644
--- a/src/widgets/widgets/qdockwidget_p.h
+++ b/src/widgets/widgets/qdockwidget_p.h
@@ -128,18 +128,18 @@ class Q_WIDGETS_EXPORT QDockWidgetLayout : public QLayout
public:
QDockWidgetLayout(QWidget *parent = 0);
~QDockWidgetLayout();
- void addItem(QLayoutItem *item);
- QLayoutItem *itemAt(int index) const;
- QLayoutItem *takeAt(int index);
- int count() const;
+ void addItem(QLayoutItem *item) Q_DECL_OVERRIDE;
+ QLayoutItem *itemAt(int index) const Q_DECL_OVERRIDE;
+ QLayoutItem *takeAt(int index) Q_DECL_OVERRIDE;
+ int count() const Q_DECL_OVERRIDE;
- QSize maximumSize() const;
- QSize minimumSize() const;
- QSize sizeHint() const;
+ QSize maximumSize() const Q_DECL_OVERRIDE;
+ QSize minimumSize() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
QSize sizeFromContent(const QSize &content, bool floating) const;
- void setGeometry(const QRect &r);
+ void setGeometry(const QRect &r) Q_DECL_OVERRIDE;
enum Role { Content, CloseButton, FloatButton, TitleBar, RoleCount };
QWidget *widgetForRole(Role r) const;
@@ -170,9 +170,9 @@ class QDockWidgetItem : public QWidgetItem
{
public:
QDockWidgetItem(QDockWidget *dockWidget);
- QSize minimumSize() const;
- QSize maximumSize() const;
- QSize sizeHint() const;
+ QSize minimumSize() const Q_DECL_OVERRIDE;
+ QSize maximumSize() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
private:
inline QLayoutItem *dockWidgetChildItem() const;
diff --git a/src/widgets/widgets/qeffects.cpp b/src/widgets/widgets/qeffects.cpp
index 33fa772d83..79e9c0669a 100644
--- a/src/widgets/widgets/qeffects.cpp
+++ b/src/widgets/widgets/qeffects.cpp
@@ -64,10 +64,10 @@ public:
void run(int time);
protected:
- void paintEvent(QPaintEvent* e);
- void closeEvent(QCloseEvent*);
+ void paintEvent(QPaintEvent* e) Q_DECL_OVERRIDE;
+ void closeEvent(QCloseEvent*) Q_DECL_OVERRIDE;
void alphaBlend();
- bool eventFilter(QObject *, QEvent *);
+ bool eventFilter(QObject *, QEvent *) Q_DECL_OVERRIDE;
protected slots:
void render();
@@ -341,8 +341,8 @@ public:
void run(int time);
protected:
- void paintEvent(QPaintEvent*);
- void closeEvent(QCloseEvent*);
+ void paintEvent(QPaintEvent*) Q_DECL_OVERRIDE;
+ void closeEvent(QCloseEvent*) Q_DECL_OVERRIDE;
private slots:
void scroll();
diff --git a/src/widgets/widgets/qfocusframe.h b/src/widgets/widgets/qfocusframe.h
index d84f286bb6..08eb2a570d 100644
--- a/src/widgets/widgets/qfocusframe.h
+++ b/src/widgets/widgets/qfocusframe.h
@@ -53,10 +53,10 @@ public:
QWidget *widget() const;
protected:
- bool event(QEvent *e);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
- bool eventFilter(QObject *, QEvent *);
- void paintEvent(QPaintEvent *);
+ bool eventFilter(QObject *, QEvent *) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
void initStyleOption(QStyleOption *option) const;
private:
diff --git a/src/widgets/widgets/qfontcombobox.cpp b/src/widgets/widgets/qfontcombobox.cpp
index 4e3b57bd02..b040d9ba0d 100644
--- a/src/widgets/widgets/qfontcombobox.cpp
+++ b/src/widgets/widgets/qfontcombobox.cpp
@@ -188,10 +188,10 @@ public:
// painting
void paint(QPainter *painter,
const QStyleOptionViewItem &option,
- const QModelIndex &index) const;
+ const QModelIndex &index) const Q_DECL_OVERRIDE;
QSize sizeHint(const QStyleOptionViewItem &option,
- const QModelIndex &index) const;
+ const QModelIndex &index) const Q_DECL_OVERRIDE;
QIcon truetype;
QIcon bitmap;
diff --git a/src/widgets/widgets/qfontcombobox.h b/src/widgets/widgets/qfontcombobox.h
index 95bedc7009..c2e5332c50 100644
--- a/src/widgets/widgets/qfontcombobox.h
+++ b/src/widgets/widgets/qfontcombobox.h
@@ -72,7 +72,7 @@ public:
FontFilters fontFilters() const;
QFont currentFont() const;
- QSize sizeHint() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
public Q_SLOTS:
void setCurrentFont(const QFont &f);
@@ -81,7 +81,7 @@ Q_SIGNALS:
void currentFontChanged(const QFont &f);
protected:
- bool event(QEvent *e);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QFontComboBox)
diff --git a/src/widgets/widgets/qframe.cpp b/src/widgets/widgets/qframe.cpp
index 57cd51396c..b914a80f1d 100644
--- a/src/widgets/widgets/qframe.cpp
+++ b/src/widgets/widgets/qframe.cpp
@@ -202,6 +202,49 @@ QFrame::QFrame(QFramePrivate &dd, QWidget* parent, Qt::WindowFlags f)
d->init();
}
+/*!
+ \since 5.5
+
+ Initializes \a option with the values from this QFrame. This method is
+ useful for subclasses when they need a QStyleOptionFrame but don't want to
+ fill in all the information themselves.
+
+ \sa QStyleOption::initFrom()
+*/
+void QFrame::initStyleOption(QStyleOptionFrame *option) const
+{
+ if (!option)
+ return;
+
+ Q_D(const QFrame);
+ option->initFrom(this);
+
+ int frameShape = d->frameStyle & QFrame::Shape_Mask;
+ int frameShadow = d->frameStyle & QFrame::Shadow_Mask;
+ option->frameShape = Shape(int(option->frameShape) | frameShape);
+ option->rect = frameRect();
+ switch (frameShape) {
+ case QFrame::Box:
+ case QFrame::HLine:
+ case QFrame::VLine:
+ case QFrame::StyledPanel:
+ case QFrame::Panel:
+ option->lineWidth = d->lineWidth;
+ option->midLineWidth = d->midLineWidth;
+ break;
+ default:
+ // most frame styles do not handle customized line and midline widths
+ // (see updateFrameWidth()).
+ option->lineWidth = d->frameWidth;
+ break;
+ }
+
+ if (frameShadow == Sunken)
+ option->state |= QStyle::State_Sunken;
+ else if (frameShadow == Raised)
+ option->state |= QStyle::State_Raised;
+}
+
/*!
Destroys the frame.
@@ -362,10 +405,7 @@ void QFramePrivate::updateStyledFrameWidths()
{
Q_Q(const QFrame);
QStyleOptionFrame opt;
- opt.initFrom(q);
- opt.lineWidth = lineWidth;
- opt.midLineWidth = midLineWidth;
- opt.frameShape = QFrame::Shape(frameStyle & QFrame::Shape_Mask);
+ q->initStyleOption(&opt);
QRect cr = q->style()->subElementRect(QStyle::SE_ShapedFrameContents, &opt, q);
leftFrameWidth = cr.left() - opt.rect.left();
@@ -472,34 +512,8 @@ void QFrame::paintEvent(QPaintEvent *)
*/
void QFrame::drawFrame(QPainter *p)
{
- Q_D(QFrame);
QStyleOptionFrame opt;
- opt.init(this);
- int frameShape = d->frameStyle & QFrame::Shape_Mask;
- int frameShadow = d->frameStyle & QFrame::Shadow_Mask;
- opt.frameShape = Shape(int(opt.frameShape) | frameShape);
- opt.rect = frameRect();
- switch (frameShape) {
- case QFrame::Box:
- case QFrame::HLine:
- case QFrame::VLine:
- case QFrame::StyledPanel:
- case QFrame::Panel:
- opt.lineWidth = d->lineWidth;
- opt.midLineWidth = d->midLineWidth;
- break;
- default:
- // most frame styles do not handle customized line and midline widths
- // (see updateFrameWidth()).
- opt.lineWidth = d->frameWidth;
- break;
- }
-
- if (frameShadow == Sunken)
- opt.state |= QStyle::State_Sunken;
- else if (frameShadow == Raised)
- opt.state |= QStyle::State_Raised;
-
+ initStyleOption(&opt);
style()->drawControl(QStyle::CE_ShapedFrame, &opt, p, this);
}
diff --git a/src/widgets/widgets/qframe.h b/src/widgets/widgets/qframe.h
index ff04d70afc..90e434722e 100644
--- a/src/widgets/widgets/qframe.h
+++ b/src/widgets/widgets/qframe.h
@@ -40,6 +40,7 @@ QT_BEGIN_NAMESPACE
class QFramePrivate;
+class QStyleOptionFrame;
class Q_WIDGETS_EXPORT QFrame : public QWidget
{
@@ -62,7 +63,7 @@ public:
int frameWidth() const;
- QSize sizeHint() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
enum Shape {
NoFrame = 0, // no frame
@@ -99,14 +100,15 @@ public:
void setFrameRect(const QRect &);
protected:
- bool event(QEvent *e);
- void paintEvent(QPaintEvent *);
- void changeEvent(QEvent *);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
+ void changeEvent(QEvent *) Q_DECL_OVERRIDE;
void drawFrame(QPainter *);
protected:
QFrame(QFramePrivate &dd, QWidget* parent = 0, Qt::WindowFlags f = 0);
+ void initStyleOption(QStyleOptionFrame *option) const;
private:
Q_DISABLE_COPY(QFrame)
diff --git a/src/widgets/widgets/qgroupbox.h b/src/widgets/widgets/qgroupbox.h
index ca5a95e79e..da0f4680d6 100644
--- a/src/widgets/widgets/qgroupbox.h
+++ b/src/widgets/widgets/qgroupbox.h
@@ -63,7 +63,7 @@ public:
Qt::Alignment alignment() const;
void setAlignment(int alignment);
- QSize minimumSizeHint() const;
+ QSize minimumSizeHint() const Q_DECL_OVERRIDE;
bool isFlat() const;
void setFlat(bool flat);
@@ -79,15 +79,15 @@ Q_SIGNALS:
void toggled(bool);
protected:
- bool event(QEvent *event);
- void childEvent(QChildEvent *event);
- void resizeEvent(QResizeEvent *event);
- void paintEvent(QPaintEvent *event);
- void focusInEvent(QFocusEvent *event);
- void changeEvent(QEvent *event);
- void mousePressEvent(QMouseEvent *event);
- void mouseMoveEvent(QMouseEvent *event);
- void mouseReleaseEvent(QMouseEvent *event);
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
+ void childEvent(QChildEvent *event) Q_DECL_OVERRIDE;
+ void resizeEvent(QResizeEvent *event) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
+ void focusInEvent(QFocusEvent *event) Q_DECL_OVERRIDE;
+ void changeEvent(QEvent *event) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
void initStyleOption(QStyleOptionGroupBox *option) const;
diff --git a/src/widgets/widgets/qlabel.h b/src/widgets/widgets/qlabel.h
index a1e9543187..be56d3bf0f 100644
--- a/src/widgets/widgets/qlabel.h
+++ b/src/widgets/widgets/qlabel.h
@@ -88,13 +88,13 @@ public:
bool hasScaledContents() const;
void setScaledContents(bool);
- QSize sizeHint() const;
- QSize minimumSizeHint() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize minimumSizeHint() const Q_DECL_OVERRIDE;
#ifndef QT_NO_SHORTCUT
void setBuddy(QWidget *);
QWidget *buddy() const;
#endif
- int heightForWidth(int) const;
+ int heightForWidth(int) const Q_DECL_OVERRIDE;
bool openExternalLinks() const;
void setOpenExternalLinks(bool open);
@@ -125,17 +125,17 @@ Q_SIGNALS:
void linkHovered(const QString& link);
protected:
- bool event(QEvent *e);
- void keyPressEvent(QKeyEvent *ev);
- void paintEvent(QPaintEvent *);
- void changeEvent(QEvent *);
- void mousePressEvent(QMouseEvent *ev);
- void mouseMoveEvent(QMouseEvent *ev);
- void mouseReleaseEvent(QMouseEvent *ev);
- void contextMenuEvent(QContextMenuEvent *ev);
- void focusInEvent(QFocusEvent *ev);
- void focusOutEvent(QFocusEvent *ev);
- bool focusNextPrevChild(bool next);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
+ void keyPressEvent(QKeyEvent *ev) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
+ void changeEvent(QEvent *) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent *ev) Q_DECL_OVERRIDE;
+ void mouseMoveEvent(QMouseEvent *ev) Q_DECL_OVERRIDE;
+ void mouseReleaseEvent(QMouseEvent *ev) Q_DECL_OVERRIDE;
+ void contextMenuEvent(QContextMenuEvent *ev) Q_DECL_OVERRIDE;
+ void focusInEvent(QFocusEvent *ev) Q_DECL_OVERRIDE;
+ void focusOutEvent(QFocusEvent *ev) Q_DECL_OVERRIDE;
+ bool focusNextPrevChild(bool next) Q_DECL_OVERRIDE;
private:
diff --git a/src/widgets/widgets/qlcdnumber.h b/src/widgets/widgets/qlcdnumber.h
index 0c3a4d6cf5..6acba3f7c1 100644
--- a/src/widgets/widgets/qlcdnumber.h
+++ b/src/widgets/widgets/qlcdnumber.h
@@ -81,7 +81,7 @@ public:
double value() const;
int intValue() const;
- QSize sizeHint() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
public Q_SLOTS:
void display(const QString &str);
@@ -97,8 +97,8 @@ Q_SIGNALS:
void overflow();
protected:
- bool event(QEvent *e);
- void paintEvent(QPaintEvent *);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
public:
diff --git a/src/widgets/widgets/qlineedit.cpp b/src/widgets/widgets/qlineedit.cpp
index bd8dd783ff..f10608a8be 100644
--- a/src/widgets/widgets/qlineedit.cpp
+++ b/src/widgets/widgets/qlineedit.cpp
@@ -434,12 +434,6 @@ bool QLineEdit::hasFrame() const
*/
/*!
- \fn void QLineEdit::addAction(QAction *action)
- \overload
- \internal
-*/
-
-/*!
\overload
Adds the \a action to the list of actions at the \a position.
@@ -1405,7 +1399,7 @@ bool QLineEdit::event(QEvent * e)
{
Q_D(QLineEdit);
if (e->type() == QEvent::Timer) {
- // should be timerEvent, is here for binary compatibility
+ // ### Qt6: move to timerEvent, is here for binary compatibility
int timerId = ((QTimerEvent*)e)->timerId();
if (false) {
#ifndef QT_NO_DRAGANDDROP
diff --git a/src/widgets/widgets/qlineedit.h b/src/widgets/widgets/qlineedit.h
index 3997ed16fd..bfbf9fe670 100644
--- a/src/widgets/widgets/qlineedit.h
+++ b/src/widgets/widgets/qlineedit.h
@@ -121,8 +121,8 @@ public:
QCompleter *completer() const;
#endif
- QSize sizeHint() const;
- QSize minimumSizeHint() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize minimumSizeHint() const Q_DECL_OVERRIDE;
int cursorPosition() const;
void setCursorPosition(int);
@@ -166,13 +166,7 @@ public:
void getTextMargins(int *left, int *top, int *right, int *bottom) const;
QMargins textMargins() const;
-#ifdef Q_NO_USING_KEYWORD
- inline void addAction(QAction *action)
- { QWidget::addAction(action); }
-#else
using QWidget::addAction;
-#endif
-
void addAction(QAction *action, ActionPosition position);
QAction *addAction(const QIcon &icon, ActionPosition position);
@@ -204,30 +198,30 @@ Q_SIGNALS:
void selectionChanged();
protected:
- void mousePressEvent(QMouseEvent *);
- void mouseMoveEvent(QMouseEvent *);
- void mouseReleaseEvent(QMouseEvent *);
- void mouseDoubleClickEvent(QMouseEvent *);
- void keyPressEvent(QKeyEvent *);
- void focusInEvent(QFocusEvent *);
- void focusOutEvent(QFocusEvent *);
- void paintEvent(QPaintEvent *);
+ void mousePressEvent(QMouseEvent *) Q_DECL_OVERRIDE;
+ void mouseMoveEvent(QMouseEvent *) Q_DECL_OVERRIDE;
+ void mouseReleaseEvent(QMouseEvent *) Q_DECL_OVERRIDE;
+ void mouseDoubleClickEvent(QMouseEvent *) Q_DECL_OVERRIDE;
+ void keyPressEvent(QKeyEvent *) Q_DECL_OVERRIDE;
+ void focusInEvent(QFocusEvent *) Q_DECL_OVERRIDE;
+ void focusOutEvent(QFocusEvent *) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
#ifndef QT_NO_DRAGANDDROP
- void dragEnterEvent(QDragEnterEvent *);
- void dragMoveEvent(QDragMoveEvent *e);
- void dragLeaveEvent(QDragLeaveEvent *e);
- void dropEvent(QDropEvent *);
+ void dragEnterEvent(QDragEnterEvent *) Q_DECL_OVERRIDE;
+ void dragMoveEvent(QDragMoveEvent *e) Q_DECL_OVERRIDE;
+ void dragLeaveEvent(QDragLeaveEvent *e) Q_DECL_OVERRIDE;
+ void dropEvent(QDropEvent *) Q_DECL_OVERRIDE;
#endif
- void changeEvent(QEvent *);
+ void changeEvent(QEvent *) Q_DECL_OVERRIDE;
#ifndef QT_NO_CONTEXTMENU
- void contextMenuEvent(QContextMenuEvent *);
+ void contextMenuEvent(QContextMenuEvent *) Q_DECL_OVERRIDE;
#endif
- void inputMethodEvent(QInputMethodEvent *);
+ void inputMethodEvent(QInputMethodEvent *) Q_DECL_OVERRIDE;
void initStyleOption(QStyleOptionFrame *option) const;
public:
- QVariant inputMethodQuery(Qt::InputMethodQuery) const;
- bool event(QEvent *);
+ QVariant inputMethodQuery(Qt::InputMethodQuery) const Q_DECL_OVERRIDE;
+ bool event(QEvent *) Q_DECL_OVERRIDE;
protected:
QRect cursorRect() const;
diff --git a/src/widgets/widgets/qlineedit_p.h b/src/widgets/widgets/qlineedit_p.h
index 6426329de6..95fc7551fc 100644
--- a/src/widgets/widgets/qlineedit_p.h
+++ b/src/widgets/widgets/qlineedit_p.h
@@ -81,7 +81,7 @@ public:
#endif
protected:
- void paintEvent(QPaintEvent *event);
+ void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
private slots:
void updateCursor();
diff --git a/src/widgets/widgets/qmainwindow.h b/src/widgets/widgets/qmainwindow.h
index 4478c47449..717bc32739 100644
--- a/src/widgets/widgets/qmainwindow.h
+++ b/src/widgets/widgets/qmainwindow.h
@@ -188,9 +188,9 @@ Q_SIGNALS:
protected:
#ifndef QT_NO_CONTEXTMENU
- void contextMenuEvent(QContextMenuEvent *event);
+ void contextMenuEvent(QContextMenuEvent *event) Q_DECL_OVERRIDE;
#endif
- bool event(QEvent *event);
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
private:
Q_DECLARE_PRIVATE(QMainWindow)
diff --git a/src/widgets/widgets/qmainwindowlayout.cpp b/src/widgets/widgets/qmainwindowlayout.cpp
index 827e2ed2ba..75fef35968 100644
--- a/src/widgets/widgets/qmainwindowlayout.cpp
+++ b/src/widgets/widgets/qmainwindowlayout.cpp
@@ -1243,7 +1243,7 @@ class QMainWindowTabBar : public QTabBar
public:
QMainWindowTabBar(QWidget *parent);
protected:
- bool event(QEvent *e);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
};
QMainWindowTabBar::QMainWindowTabBar(QWidget *parent)
@@ -1261,8 +1261,8 @@ bool QMainWindowTabBar::event(QEvent *e)
QSize size = this->size();
QSize hint = sizeHint();
if (shape() == QTabBar::RoundedWest || shape() == QTabBar::RoundedEast) {
- size.transpose();
- hint.transpose();
+ size = size.transposed();
+ hint = hint.transposed();
}
if (size.width() < hint.width())
return QTabBar::event(e);
diff --git a/src/widgets/widgets/qmainwindowlayout_p.h b/src/widgets/widgets/qmainwindowlayout_p.h
index d9e18b03f4..4e10aef891 100644
--- a/src/widgets/widgets/qmainwindowlayout_p.h
+++ b/src/widgets/widgets/qmainwindowlayout_p.h
@@ -151,7 +151,7 @@ public:
void setDockOptions(QMainWindow::DockOptions opts);
bool usesHIToolBar(QToolBar *toolbar) const;
- void timerEvent(QTimerEvent *e);
+ void timerEvent(QTimerEvent *e) Q_DECL_OVERRIDE;
// status bar
@@ -249,17 +249,17 @@ public:
// QLayout interface
- void addItem(QLayoutItem *item);
- void setGeometry(const QRect &r);
- QLayoutItem *itemAt(int index) const;
- QLayoutItem *takeAt(int index);
- int count() const;
+ void addItem(QLayoutItem *item) Q_DECL_OVERRIDE;
+ void setGeometry(const QRect &r) Q_DECL_OVERRIDE;
+ QLayoutItem *itemAt(int index) const Q_DECL_OVERRIDE;
+ QLayoutItem *takeAt(int index) Q_DECL_OVERRIDE;
+ int count() const Q_DECL_OVERRIDE;
- QSize sizeHint() const;
- QSize minimumSize() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize minimumSize() const Q_DECL_OVERRIDE;
mutable QSize szHint;
mutable QSize minSize;
- void invalidate();
+ void invalidate() Q_DECL_OVERRIDE;
// animations
diff --git a/src/widgets/widgets/qmdiarea.cpp b/src/widgets/widgets/qmdiarea.cpp
index 3553baf68a..e104a3511b 100644
--- a/src/widgets/widgets/qmdiarea.cpp
+++ b/src/widgets/widgets/qmdiarea.cpp
@@ -567,9 +567,9 @@ public:
QMdiAreaTabBar(QWidget *parent) : QTabBar(parent) {}
protected:
- void mousePressEvent(QMouseEvent *event);
+ void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
#ifndef QT_NO_CONTEXTMENU
- void contextMenuEvent(QContextMenuEvent *event);
+ void contextMenuEvent(QContextMenuEvent *event) Q_DECL_OVERRIDE;
#endif
private:
diff --git a/src/widgets/widgets/qmdiarea.h b/src/widgets/widgets/qmdiarea.h
index 18d559e21b..b824cfb4ae 100644
--- a/src/widgets/widgets/qmdiarea.h
+++ b/src/widgets/widgets/qmdiarea.h
@@ -82,8 +82,8 @@ public:
QMdiArea(QWidget *parent = 0);
~QMdiArea();
- QSize sizeHint() const;
- QSize minimumSizeHint() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize minimumSizeHint() const Q_DECL_OVERRIDE;
QMdiSubWindow *currentSubWindow() const;
QMdiSubWindow *activeSubWindow() const;
@@ -135,18 +135,18 @@ public Q_SLOTS:
void activatePreviousSubWindow();
protected Q_SLOTS:
- void setupViewport(QWidget *viewport);
+ void setupViewport(QWidget *viewport) Q_DECL_OVERRIDE;
protected:
- bool event(QEvent *event);
- bool eventFilter(QObject *object, QEvent *event);
- void paintEvent(QPaintEvent *paintEvent);
- void childEvent(QChildEvent *childEvent);
- void resizeEvent(QResizeEvent *resizeEvent);
- void timerEvent(QTimerEvent *timerEvent);
- void showEvent(QShowEvent *showEvent);
- bool viewportEvent(QEvent *event);
- void scrollContentsBy(int dx, int dy);
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
+ bool eventFilter(QObject *object, QEvent *event) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *paintEvent) Q_DECL_OVERRIDE;
+ void childEvent(QChildEvent *childEvent) Q_DECL_OVERRIDE;
+ void resizeEvent(QResizeEvent *resizeEvent) Q_DECL_OVERRIDE;
+ void timerEvent(QTimerEvent *timerEvent) Q_DECL_OVERRIDE;
+ void showEvent(QShowEvent *showEvent) Q_DECL_OVERRIDE;
+ bool viewportEvent(QEvent *event) Q_DECL_OVERRIDE;
+ void scrollContentsBy(int dx, int dy) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QMdiArea)
diff --git a/src/widgets/widgets/qmdiarea_p.h b/src/widgets/widgets/qmdiarea_p.h
index ba531adaad..d1341d5837 100644
--- a/src/widgets/widgets/qmdiarea_p.h
+++ b/src/widgets/widgets/qmdiarea_p.h
@@ -81,7 +81,7 @@ class RegularTiler : public Rearranger
// Rearranges widgets according to a regular tiling pattern
// covering the entire domain.
// Both positions and sizes may change.
- void rearrange(QList<QWidget *> &widgets, const QRect &domain) const;
+ void rearrange(QList<QWidget *> &widgets, const QRect &domain) const Q_DECL_OVERRIDE;
inline Type type() const { return Rearranger::RegularTiler; }
};
@@ -90,7 +90,7 @@ class SimpleCascader : public Rearranger
// Rearranges widgets according to a simple, regular cascading pattern.
// Widgets are resized to minimumSize.
// Both positions and sizes may change.
- void rearrange(QList<QWidget *> &widgets, const QRect &domain) const;
+ void rearrange(QList<QWidget *> &widgets, const QRect &domain) const Q_DECL_OVERRIDE;
inline Type type() const { return Rearranger::SimpleCascader; }
};
@@ -99,7 +99,7 @@ class IconTiler : public Rearranger
// Rearranges icons (assumed to be the same size) according to a regular
// tiling pattern filling up the domain from the bottom.
// Only positions may change.
- void rearrange(QList<QWidget *> &widgets, const QRect &domain) const;
+ void rearrange(QList<QWidget *> &widgets, const QRect &domain) const Q_DECL_OVERRIDE;
inline Type type() const { return Rearranger::IconTiler; }
};
@@ -115,7 +115,7 @@ public:
class MinOverlapPlacer : public Placer
{
- QPoint place(const QSize &size, const QVector<QRect> &rects, const QRect &domain) const;
+ QPoint place(const QSize &size, const QVector<QRect> &rects, const QRect &domain) const Q_DECL_OVERRIDE;
static int accumulatedOverlap(const QRect &source, const QVector<QRect> &rects);
static QRect findMinOverlapRect(const QVector<QRect> &source, const QVector<QRect> &rects);
static QVector<QRect> getCandidatePlacements(const QSize &size, const QVector<QRect> &rects, const QRect &domain);
@@ -199,7 +199,7 @@ public:
bool lastWindowAboutToBeDestroyed() const;
void setChildActivationEnabled(bool enable = true, bool onlyNextActivationEvent = false) const;
QRect resizeToMinimumTileSize(const QSize &minSubWindowSize, int subWindowCount);
- void scrollBarPolicyChanged(Qt::Orientation, Qt::ScrollBarPolicy); // reimp
+ void scrollBarPolicyChanged(Qt::Orientation, Qt::ScrollBarPolicy) Q_DECL_OVERRIDE; // reimp
QMdiSubWindow *nextVisibleSubWindow(int increaseFactor, QMdiArea::WindowOrder,
int removed = -1, int fromIndex = -1) const;
void highlightNextSubWindow(int increaseFactor);
diff --git a/src/widgets/widgets/qmdisubwindow.cpp b/src/widgets/widgets/qmdisubwindow.cpp
index 2340c8fe4b..d656c0abb7 100644
--- a/src/widgets/widgets/qmdisubwindow.cpp
+++ b/src/widgets/widgets/qmdisubwindow.cpp
@@ -362,18 +362,18 @@ class ControlLabel : public QWidget
public:
ControlLabel(QMdiSubWindow *subWindow, QWidget *parent = 0);
- QSize sizeHint() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
signals:
void _q_clicked();
void _q_doubleClicked();
protected:
- bool event(QEvent *event);
- void paintEvent(QPaintEvent *paintEvent);
- void mousePressEvent(QMouseEvent *mouseEvent);
- void mouseDoubleClickEvent(QMouseEvent *mouseEvent);
- void mouseReleaseEvent(QMouseEvent *mouseEvent);
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *paintEvent) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent *mouseEvent) Q_DECL_OVERRIDE;
+ void mouseDoubleClickEvent(QMouseEvent *mouseEvent) Q_DECL_OVERRIDE;
+ void mouseReleaseEvent(QMouseEvent *mouseEvent) Q_DECL_OVERRIDE;
private:
QPixmap label;
@@ -488,7 +488,7 @@ class ControllerWidget : public QWidget
Q_OBJECT
public:
ControllerWidget(QMdiSubWindow *subWindow, QWidget *parent = 0);
- QSize sizeHint() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
void setControlVisible(QMdiSubWindowPrivate::WindowStateAction action, bool visible);
inline bool hasVisibleControls() const
{
@@ -503,12 +503,12 @@ signals:
void _q_close();
protected:
- void paintEvent(QPaintEvent *event);
- void mousePressEvent(QMouseEvent *event);
- void mouseReleaseEvent(QMouseEvent *event);
- void mouseMoveEvent(QMouseEvent *event);
- void leaveEvent(QEvent *event);
- bool event(QEvent *event);
+ void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ void mouseReleaseEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ void mouseMoveEvent(QMouseEvent *event) Q_DECL_OVERRIDE;
+ void leaveEvent(QEvent *event) Q_DECL_OVERRIDE;
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
private:
QStyle::SubControl activeControl;
diff --git a/src/widgets/widgets/qmdisubwindow.h b/src/widgets/widgets/qmdisubwindow.h
index a94ecfb48e..6e4d0514ee 100644
--- a/src/widgets/widgets/qmdisubwindow.h
+++ b/src/widgets/widgets/qmdisubwindow.h
@@ -63,8 +63,8 @@ public:
QMdiSubWindow(QWidget *parent = 0, Qt::WindowFlags flags = 0);
~QMdiSubWindow();
- QSize sizeHint() const;
- QSize minimumSizeHint() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize minimumSizeHint() const Q_DECL_OVERRIDE;
void setWidget(QWidget *widget);
QWidget *widget() const;
@@ -101,28 +101,28 @@ public Q_SLOTS:
void showShaded();
protected:
- bool eventFilter(QObject *object, QEvent *event);
- bool event(QEvent *event);
- void showEvent(QShowEvent *showEvent);
- void hideEvent(QHideEvent *hideEvent);
- void changeEvent(QEvent *changeEvent);
- void closeEvent(QCloseEvent *closeEvent);
- void leaveEvent(QEvent *leaveEvent);
- void resizeEvent(QResizeEvent *resizeEvent);
- void timerEvent(QTimerEvent *timerEvent);
- void moveEvent(QMoveEvent *moveEvent);
- void paintEvent(QPaintEvent *paintEvent);
- void mousePressEvent(QMouseEvent *mouseEvent);
- void mouseDoubleClickEvent(QMouseEvent *mouseEvent);
- void mouseReleaseEvent(QMouseEvent *mouseEvent);
- void mouseMoveEvent(QMouseEvent *mouseEvent);
- void keyPressEvent(QKeyEvent *keyEvent);
+ bool eventFilter(QObject *object, QEvent *event) Q_DECL_OVERRIDE;
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
+ void showEvent(QShowEvent *showEvent) Q_DECL_OVERRIDE;
+ void hideEvent(QHideEvent *hideEvent) Q_DECL_OVERRIDE;
+ void changeEvent(QEvent *changeEvent) Q_DECL_OVERRIDE;
+ void closeEvent(QCloseEvent *closeEvent) Q_DECL_OVERRIDE;
+ void leaveEvent(QEvent *leaveEvent) Q_DECL_OVERRIDE;
+ void resizeEvent(QResizeEvent *resizeEvent) Q_DECL_OVERRIDE;
+ void timerEvent(QTimerEvent *timerEvent) Q_DECL_OVERRIDE;
+ void moveEvent(QMoveEvent *moveEvent) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *paintEvent) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent *mouseEvent) Q_DECL_OVERRIDE;
+ void mouseDoubleClickEvent(QMouseEvent *mouseEvent) Q_DECL_OVERRIDE;
+ void mouseReleaseEvent(QMouseEvent *mouseEvent) Q_DECL_OVERRIDE;
+ void mouseMoveEvent(QMouseEvent *mouseEvent) Q_DECL_OVERRIDE;
+ void keyPressEvent(QKeyEvent *keyEvent) Q_DECL_OVERRIDE;
#ifndef QT_NO_CONTEXTMENU
- void contextMenuEvent(QContextMenuEvent *contextMenuEvent);
+ void contextMenuEvent(QContextMenuEvent *contextMenuEvent) Q_DECL_OVERRIDE;
#endif
- void focusInEvent(QFocusEvent *focusInEvent);
- void focusOutEvent(QFocusEvent *focusOutEvent);
- void childEvent(QChildEvent *childEvent);
+ void focusInEvent(QFocusEvent *focusInEvent) Q_DECL_OVERRIDE;
+ void focusOutEvent(QFocusEvent *focusOutEvent) Q_DECL_OVERRIDE;
+ void childEvent(QChildEvent *childEvent) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QMdiSubWindow)
diff --git a/src/widgets/widgets/qmdisubwindow_p.h b/src/widgets/widgets/qmdisubwindow_p.h
index 763f6ba039..f5cb94faea 100644
--- a/src/widgets/widgets/qmdisubwindow_p.h
+++ b/src/widgets/widgets/qmdisubwindow_p.h
@@ -260,7 +260,7 @@ public:
void setFocusWidget();
bool restoreFocus();
void storeFocusWidget();
- void setWindowFlags(Qt::WindowFlags windowFlags);
+ void setWindowFlags(Qt::WindowFlags windowFlags) Q_DECL_OVERRIDE;
void setVisible(WindowStateAction, bool visible = true);
#ifndef QT_NO_ACTION
void setEnabled(WindowStateAction, bool enable = true);
diff --git a/src/widgets/widgets/qmenu.cpp b/src/widgets/widgets/qmenu.cpp
index 5e5126e1e8..7e446fd087 100644
--- a/src/widgets/widgets/qmenu.cpp
+++ b/src/widgets/widgets/qmenu.cpp
@@ -70,6 +70,22 @@
QT_BEGIN_NAMESPACE
QMenu *QMenuPrivate::mouseDown = 0;
+QPointer<QMenu> QMenuPrivate::previousMouseMenu(Q_NULLPTR);
+static void handleEnterLeaveEvents(QPointer<QMenu> *previous_ptr, QMenu *next)
+{
+ QWidget *previous = previous_ptr->data();
+ if (previous != next) {
+ if (previous) {
+ QEvent leaveEvent(QEvent::Leave);
+ QApplication::sendEvent(previous, &leaveEvent);
+ }
+ if (next) {
+ QEvent enterEvent(QEvent::Enter);
+ QApplication::sendEvent(next, &enterEvent);
+ }
+ }
+ *previous_ptr = next;
+}
/* QMenu code */
// internal class used for the torn off popup
@@ -86,7 +102,7 @@ class QTornOffMenu : public QMenu
causedPopup.action = ((QTornOffMenu*)p)->d_func()->causedPopup.action;
causedStack = ((QTornOffMenu*)p)->d_func()->calcCausedStack();
}
- QList<QPointer<QWidget> > calcCausedStack() const { return causedStack; }
+ QList<QPointer<QWidget> > calcCausedStack() const Q_DECL_OVERRIDE { return causedStack; }
QPointer<QMenu> causedMenu;
QList<QPointer<QWidget> > causedStack;
};
@@ -119,7 +135,7 @@ public:
} else if (act->type() == QEvent::ActionRemoved)
removeAction(act->action());
}
- void actionEvent(QActionEvent *e)
+ void actionEvent(QActionEvent *e) Q_DECL_OVERRIDE
{
QMenu::actionEvent(e);
setFixedSize(sizeHint());
@@ -148,6 +164,9 @@ void QMenuPrivate::init()
}
setPlatformMenu(QGuiApplicationPrivate::platformTheme()->createPlatformMenu());
+ sloppyState.initialize(q);
+ delayState.initialize(q);
+ mousePopupDelay = q->style()->styleHint(QStyle::SH_Menu_SubMenuPopupDelay, 0, q);
}
void QMenuPrivate::setPlatformMenu(QPlatformMenu *menu)
@@ -270,7 +289,6 @@ void QMenuPrivate::updateActionRects(const QRect &screen) const
maxIconWidth = 0;
hasCheckableItems = false;
ncols = 1;
- sloppyAction = 0;
for (int i = 0; i < actions.count(); ++i) {
QAction *action = actions.at(i);
@@ -482,21 +500,30 @@ void QMenuPrivate::hideMenu(QMenu *menu)
aboutToHide = false;
blocker.unblock();
#endif // QT_NO_EFFECTS
+ if (activeMenu == menu)
+ activeMenu = 0;
+ menu->d_func()->causedPopup.action = 0;
+ menu->d_func()->causedPopup.widget = 0;
menu->close();
+ if (previousMouseMenu.data() == menu)
+ handleEnterLeaveEvents(&previousMouseMenu, Q_NULLPTR);
}
void QMenuPrivate::popupAction(QAction *action, int delay, bool activateFirst)
{
Q_Q(QMenu);
- if (action && action->isEnabled()) {
- if (!delay)
- q->internalDelayedPopup();
- else if (!menuDelayTimer.isActive() && (!action->menu() || !action->menu()->isVisible()))
- menuDelayTimer.start(delay, q);
- if (activateFirst && action->menu())
- action->menu()->d_func()->setFirstActionActive();
+ if (action) {
+ if (action->isEnabled()) {
+ if (!delay)
+ q->internalDelayedPopup();
+ else if (action->menu() && !action->menu()->isVisible())
+ delayState.start(delay, action);
+ else if (!action->menu())
+ delayState.stop();
+ if (activateFirst && action->menu())
+ action->menu()->d_func()->setFirstActionActive();
+ }
} else if (QMenu *menu = activeMenu) { //hide the current item
- activeMenu = 0;
hideMenu(menu);
}
}
@@ -547,33 +574,32 @@ void QMenuPrivate::setCurrentAction(QAction *action, int popup, SelectionReason
{
Q_Q(QMenu);
tearoffHighlighted = 0;
+
+ if (action
+ && (action->isSeparator()
+ || (!action->isEnabled() && !q->style()->styleHint(QStyle::SH_Menu_AllowActiveAndDisabled, 0, q))))
+ action = Q_NULLPTR;
+
// Reselect the currently active action in case mouse moved over other menu items when
// moving from sub menu action to sub menu (QTBUG-20094).
- if (reason != SelectedFromKeyboard && action == currentAction && !(action && action->menu() && action->menu() != activeMenu)) {
+ if (reason != SelectedFromKeyboard) {
if (QMenu *menu = qobject_cast<QMenu*>(causedPopup.widget)) {
if (causedPopup.action && menu->d_func()->activeMenu == q)
menu->d_func()->setCurrentAction(causedPopup.action, 0, reason, false);
}
- return;
}
if (currentAction)
q->update(actionRect(currentAction));
- sloppyAction = 0;
- if (!sloppyRegion.isEmpty())
- sloppyRegion = QRegion();
QMenu *hideActiveMenu = activeMenu;
-#ifndef QT_NO_STATUSTIP
QAction *previousAction = currentAction;
-#endif
currentAction = action;
if (action) {
if (!action->isSeparator()) {
activateAction(action, QAction::Hover);
if (popup != -1) {
- hideActiveMenu = 0; //will be done "later"
// if the menu is visible then activate the required action,
// otherwise we just mark the action as currentAction
// and activate it when the menu will be popuped.
@@ -596,24 +622,122 @@ void QMenuPrivate::setCurrentAction(QAction *action, int popup, SelectionReason
}
}
}
- } else { //action is a separator
- if (popup != -1)
- hideActiveMenu = 0; //will be done "later"
}
#ifndef QT_NO_STATUSTIP
} else if (previousAction) {
previousAction->d_func()->showStatusText(topCausedWidget(), QString());
#endif
}
- if (hideActiveMenu) {
- activeMenu = 0;
+ if (hideActiveMenu && previousAction != currentAction) {
+ if (popup == -1) {
#ifndef QT_NO_EFFECTS
- // kill any running effect
- qFadeEffect(0);
- qScrollEffect(0);
+ // kill any running effect
+ qFadeEffect(0);
+ qScrollEffect(0);
#endif
- hideMenu(hideActiveMenu);
+ hideMenu(hideActiveMenu);
+ } else if (!currentAction || !currentAction->menu()) {
+ sloppyState.startTimerIfNotRunning();
+ }
+ }
+}
+
+void QMenuSloppyState::reset()
+{
+ m_enabled = false;
+ m_first_mouse = true;
+ m_init_guard = false;
+ m_uni_dir_discarded_count = 0;
+ m_time.stop();
+ m_reset_action = Q_NULLPTR;
+ m_origin_action = Q_NULLPTR;
+ m_action_rect = QRect();
+ m_previous_point = QPointF();
+ if (m_sub_menu) {
+ QMenuPrivate::get(m_sub_menu)->sloppyState.m_parent = Q_NULLPTR;
+ m_sub_menu = Q_NULLPTR;
+ }
+}
+void QMenuSloppyState::enter()
+{
+ QMenuPrivate *menuPriv = QMenuPrivate::get(m_menu);
+
+ if (m_discard_state_when_entering_parent && m_sub_menu == menuPriv->activeMenu) {
+ menuPriv->hideMenu(m_sub_menu);
+ reset();
+ }
+ if (m_parent)
+ m_parent->childEnter();
+}
+
+void QMenuSloppyState::childLeave()
+{
+ if (m_enabled && !QMenuPrivate::get(m_menu)->hasReceievedEnter) {
+ startTimer();
+ if (m_parent)
+ m_parent->childLeave();
+ }
+}
+
+void QMenuSloppyState::setSubMenuPopup(const QRect &actionRect, QAction *resetAction, QMenu *subMenu)
+{
+ m_enabled = true;
+ m_init_guard = true;
+ m_time.stop();
+ m_action_rect = actionRect;
+ m_sub_menu = subMenu;
+ QMenuPrivate::get(subMenu)->sloppyState.m_parent = this;
+ m_reset_action = resetAction;
+ m_origin_action = resetAction;
+}
+
+bool QMenuSloppyState::hasParentActiveDelayTimer() const
+{
+ return m_parent && m_parent->m_menu && QMenuPrivate::get(m_parent->m_menu)->delayState.timer.isActive();
+}
+
+class ResetOnDestroy
+{
+public:
+ ResetOnDestroy(QMenuSloppyState *sloppyState, bool *guard)
+ : toReset(sloppyState)
+ , guard(guard)
+ {
+ *guard = false;
+ }
+
+ ~ResetOnDestroy()
+ {
+ if (!*guard)
+ toReset->reset();
}
+
+ QMenuSloppyState *toReset;
+ bool *guard;
+};
+
+void QMenuSloppyState::timeout()
+{
+ QMenuPrivate *menu_priv = QMenuPrivate::get(m_menu);
+ if (menu_priv->currentAction == m_reset_action
+ && menu_priv->hasReceievedEnter
+ && (menu_priv->currentAction
+ && menu_priv->currentAction->menu() == menu_priv->activeMenu)) {
+ return;
+ }
+
+ ResetOnDestroy resetState(this, &m_init_guard);
+
+ if (hasParentActiveDelayTimer() || !m_menu || !m_menu->isVisible())
+ return;
+
+ if (m_sub_menu)
+ menu_priv->hideMenu(m_sub_menu);
+
+ if (menu_priv->hasReceievedEnter)
+ menu_priv->setCurrentAction(m_reset_action,0);
+ else
+ menu_priv->setCurrentAction(Q_NULLPTR, 0);
}
//return the top causedPopup.widget that is not a QMenu
@@ -964,8 +1088,10 @@ bool QMenuPrivate::mouseEventTaken(QMouseEvent *e)
tearoffHighlighted = 0;
}
- if (q->frameGeometry().contains(e->globalPos())) //otherwise if the event is in our rect we want it..
+ if (q->frameGeometry().contains(e->globalPos())) { //otherwise if the event is in our rect we want it..
+ handleEnterLeaveEvents(&previousMouseMenu, q);
return false;
+ }
for(QWidget *caused = causedPopup.widget; caused;) {
bool passOnEvent = false;
@@ -981,17 +1107,18 @@ bool QMenuPrivate::mouseEventTaken(QMouseEvent *e)
next_widget = m->d_func()->causedPopup.widget;
}
if (passOnEvent) {
+ handleEnterLeaveEvents(&previousMouseMenu,qobject_cast<QMenu *>(caused));
if(e->type() != QEvent::MouseButtonRelease || mouseDown == caused) {
QMouseEvent new_e(e->type(), cpos, caused->mapTo(caused->topLevelWidget(), cpos), e->screenPos(),
e->button(), e->buttons(), e->modifiers());
QGuiApplicationPrivate::setMouseEventSource(&new_e, e->source());
QApplication::sendEvent(caused, &new_e);
return true;
+ }
}
- }
- if (!next_widget)
- break;
caused = next_widget;
+ if (!caused)
+ handleEnterLeaveEvents(&previousMouseMenu, Q_NULLPTR);
}
return false;
}
@@ -2236,6 +2363,8 @@ void QMenu::hideEvent(QHideEvent *)
#endif
d->mouseDown = 0;
d->hasHadMouse = false;
+ if (d->activeMenu)
+ d->hideMenu(d->activeMenu);
d->causedPopup.widget = 0;
d->causedPopup.action = 0;
if (d->scroll)
@@ -2402,7 +2531,7 @@ void QMenu::mouseReleaseEvent(QMouseEvent *e)
#endif
d->activateAction(action, QAction::Trigger);
}
- } else if (d->hasMouseMoved(e->globalPos())) {
+ } else if ((!action || action->isEnabled()) && d->hasMouseMoved(e->globalPos())) {
d->hideUpToMenuBar();
}
}
@@ -2467,8 +2596,8 @@ QMenu::event(QEvent *e)
}
} break;
case QEvent::ContextMenu:
- if(d->menuDelayTimer.isActive()) {
- d->menuDelayTimer.stop();
+ if (d->delayState.timer.isActive()) {
+ d->delayState.stop();
internalDelayedPopup();
}
break;
@@ -2485,6 +2614,7 @@ QMenu::event(QEvent *e)
case QEvent::Show:
d->mouseDown = 0;
d->updateActionRects();
+ d->sloppyState.reset();
if (d->currentAction)
d->popupAction(d->currentAction, 0, false);
break;
@@ -2892,34 +3022,34 @@ void QMenu::mouseMoveEvent(QMouseEvent *e)
Q_D(QMenu);
if (!isVisible() || d->aboutToHide || d->mouseEventTaken(e))
return;
+
d->motions++;
- if (d->motions == 0) // ignore first mouse move event (see enterEvent())
+ if (d->motions == 0)
return;
+
d->hasHadMouse = d->hasHadMouse || rect().contains(e->pos());
QAction *action = d->actionAt(e->pos());
- if (!action || action->isSeparator()) {
+ if ((!action || action->isSeparator()) && !d->sloppyState.enabled()) {
if (d->hasHadMouse
- && d->sloppyDelayTimer == 0 // Keep things as they are while we're moving to the submenu
- && (!d->currentAction || (action && action->isSeparator())
- || !(d->currentAction->menu() && d->currentAction->menu()->isVisible())))
- d->setCurrentAction(0);
+ || (!d->currentAction || !d->currentAction->menu() || !d->currentAction->menu()->isVisible())) {
+ d->setCurrentAction(action);
+ }
return;
- } else if(e->buttons()) {
- d->mouseDown = this;
}
- if (d->sloppyRegion.contains(e->pos())) {
- // If the timer is already running then don't start a new one unless the action is the same
- if (d->sloppyAction != action && d->sloppyDelayTimer != 0) {
- killTimer(d->sloppyDelayTimer);
- d->sloppyDelayTimer = 0;
- }
- if (d->sloppyDelayTimer == 0) {
- d->sloppyAction = action;
- d->sloppyDelayTimer = startTimer(style()->styleHint(QStyle::SH_Menu_SubMenuPopupDelay, 0, this) * 6);
- }
- } else if (action != d->currentAction) {
- d->setCurrentAction(action, style()->styleHint(QStyle::SH_Menu_SubMenuPopupDelay, 0, this));
+
+ if (e->buttons())
+ d->mouseDown = this;
+
+ if (d->activeMenu)
+ d->activeMenu->d_func()->setCurrentAction(0);
+
+ QMenuSloppyState::MouseEventResult sloppyEventResult = d->sloppyState.processMouseEvent(e->localPos(), action, d->currentAction);
+ if (sloppyEventResult == QMenuSloppyState::EventShouldBePropogated) {
+ d->setCurrentAction(action, d->mousePopupDelay);
+ } else if (sloppyEventResult == QMenuSloppyState::EventDiscardsSloppyState) {
+ d->sloppyState.reset();
+ d->hideMenu(d->activeMenu);
}
}
@@ -2928,7 +3058,11 @@ void QMenu::mouseMoveEvent(QMouseEvent *e)
*/
void QMenu::enterEvent(QEvent *)
{
- d_func()->motions = -1; // force us to ignore the generate mouse move in mouseMoveEvent()
+ Q_D(QMenu);
+ d->hasReceievedEnter = true;
+ d->sloppyState.enter();
+ d->sloppyState.startTimer();
+ d->motions = -1; // force us to ignore the generate mouse move in mouseMoveEvent()
}
/*!
@@ -2937,9 +3071,8 @@ void QMenu::enterEvent(QEvent *)
void QMenu::leaveEvent(QEvent *)
{
Q_D(QMenu);
- d->sloppyAction = 0;
- if (!d->sloppyRegion.isEmpty())
- d->sloppyRegion = QRegion();
+ d->hasReceievedEnter = false;
+ d->sloppyState.leave();
if (!d->activeMenu && d->currentAction)
setActiveAction(0);
}
@@ -2955,13 +3088,14 @@ QMenu::timerEvent(QTimerEvent *e)
d->scrollMenu((QMenuPrivate::QMenuScroller::ScrollDirection)d->scroll->scrollDirection);
if (d->scroll->scrollFlags == QMenuPrivate::QMenuScroller::ScrollNone)
d->scroll->scrollTimer.stop();
- } else if(d->menuDelayTimer.timerId() == e->timerId()) {
- d->menuDelayTimer.stop();
+ } else if (d->delayState.timer.timerId() == e->timerId()) {
+ if (d->currentAction && !d->currentAction->menu())
+ return;
+ d->delayState.stop();
+ d->sloppyState.stopTimer();
internalDelayedPopup();
- } else if (d->sloppyDelayTimer == e->timerId()) {
- killTimer(d->sloppyDelayTimer);
- d->sloppyDelayTimer = 0;
- internalSetSloppyAction();
+ } else if (d->sloppyState.isTimerId(e->timerId())) {
+ d->sloppyState.timeout();
} else if(d->searchBufferTimer.timerId() == e->timerId()) {
d->searchBuffer.clear();
}
@@ -3086,23 +3220,13 @@ void QMenu::actionEvent(QActionEvent *e)
/*!
\internal
*/
-void QMenu::internalSetSloppyAction()
-{
- if (d_func()->sloppyAction)
- d_func()->setCurrentAction(d_func()->sloppyAction, 0);
-}
-
-/*!
- \internal
-*/
void QMenu::internalDelayedPopup()
{
Q_D(QMenu);
-
//hide the current item
if (QMenu *menu = d->activeMenu) {
- d->activeMenu = 0;
- d->hideMenu(menu);
+ if (d->activeMenu->menuAction() != d->currentAction)
+ d->hideMenu(menu);
}
if (!d->currentAction || !d->currentAction->isEnabled() || !d->currentAction->menu() ||
@@ -3116,46 +3240,15 @@ void QMenu::internalDelayedPopup()
int subMenuOffset = style()->pixelMetric(QStyle::PM_SubMenuOverlap, 0, this);
const QRect actionRect(d->actionRect(d->currentAction));
- const QSize menuSize(d->activeMenu->sizeHint());
const QPoint rightPos(mapToGlobal(QPoint(actionRect.right() + subMenuOffset + 1, actionRect.top())));
QPoint pos(rightPos);
- //calc sloppy focus buffer
- if (style()->styleHint(QStyle::SH_Menu_SloppySubMenus, 0, this)) {
- QPoint cur = QCursor::pos();
- if (actionRect.contains(mapFromGlobal(cur))) {
- QPoint pts[4];
- pts[0] = QPoint(cur.x(), cur.y() - 2);
- pts[3] = QPoint(cur.x(), cur.y() + 2);
- if (pos.x() >= cur.x()) {
- pts[1] = QPoint(geometry().right(), pos.y());
- pts[2] = QPoint(geometry().right(), pos.y() + menuSize.height());
- } else {
- pts[1] = QPoint(pos.x() + menuSize.width(), pos.y());
- pts[2] = QPoint(pos.x() + menuSize.width(), pos.y() + menuSize.height());
- }
- QPolygon points(4);
- for(int i = 0; i < 4; i++)
- points.setPoint(i, mapFromGlobal(pts[i]));
- d->sloppyRegion = QRegion(points);
- }
- }
-
- //do the popup
d->activeMenu->popup(pos);
+ d->sloppyState.setSubMenuPopup(actionRect, d->currentAction, d->activeMenu);
}
/*!
- \fn void QMenu::addAction(QAction *action)
- \overload
-
- Appends the action \a action to the menu's list of actions.
-
- \sa QMenuBar::addAction(), QWidget::addAction()
-*/
-
-/*!
\fn void QMenu::aboutToHide()
\since 4.2
diff --git a/src/widgets/widgets/qmenu.h b/src/widgets/widgets/qmenu.h
index 937f6e3316..6bc14c7c78 100644
--- a/src/widgets/widgets/qmenu.h
+++ b/src/widgets/widgets/qmenu.h
@@ -72,11 +72,7 @@ public:
explicit QMenu(const QString &title, QWidget *parent = 0);
~QMenu();
-#ifdef Q_NO_USING_KEYWORD
- inline void addAction(QAction *action) { QWidget::addAction(action); }
-#else
using QWidget::addAction;
-#endif
QAction *addAction(const QString &text);
QAction *addAction(const QIcon &icon, const QString &text);
QAction *addAction(const QString &text, const QObject *receiver, const char* member, const QKeySequence &shortcut = 0);
@@ -117,7 +113,7 @@ public:
static QAction *exec(QList<QAction*> actions, const QPoint &pos, QAction *at=0, QWidget *parent=0);
- QSize sizeHint() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
QRect actionGeometry(QAction *) const;
QAction *actionAt(const QPoint &) const;
@@ -157,22 +153,22 @@ Q_SIGNALS:
protected:
int columnCount() const;
- void changeEvent(QEvent *);
- void keyPressEvent(QKeyEvent *);
- void mouseReleaseEvent(QMouseEvent *);
- void mousePressEvent(QMouseEvent *);
- void mouseMoveEvent(QMouseEvent *);
+ void changeEvent(QEvent *) Q_DECL_OVERRIDE;
+ void keyPressEvent(QKeyEvent *) Q_DECL_OVERRIDE;
+ void mouseReleaseEvent(QMouseEvent *) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent *) Q_DECL_OVERRIDE;
+ void mouseMoveEvent(QMouseEvent *) Q_DECL_OVERRIDE;
#ifndef QT_NO_WHEELEVENT
- void wheelEvent(QWheelEvent *);
+ void wheelEvent(QWheelEvent *) Q_DECL_OVERRIDE;
#endif
- void enterEvent(QEvent *);
- void leaveEvent(QEvent *);
- void hideEvent(QHideEvent *);
- void paintEvent(QPaintEvent *);
- void actionEvent(QActionEvent *);
- void timerEvent(QTimerEvent *);
- bool event(QEvent *);
- bool focusNextPrevChild(bool next);
+ void enterEvent(QEvent *) Q_DECL_OVERRIDE;
+ void leaveEvent(QEvent *) Q_DECL_OVERRIDE;
+ void hideEvent(QHideEvent *) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
+ void actionEvent(QActionEvent *) Q_DECL_OVERRIDE;
+ void timerEvent(QTimerEvent *) Q_DECL_OVERRIDE;
+ bool event(QEvent *) Q_DECL_OVERRIDE;
+ bool focusNextPrevChild(bool next) Q_DECL_OVERRIDE;
void initStyleOption(QStyleOptionMenuItem *option, const QAction *action) const;
#ifdef Q_OS_WINCE
@@ -180,7 +176,6 @@ protected:
#endif
private Q_SLOTS:
- void internalSetSloppyAction();
void internalDelayedPopup();
private:
diff --git a/src/widgets/widgets/qmenu_p.h b/src/widgets/widgets/qmenu_p.h
index 4a4518671c..64a728eaba 100644
--- a/src/widgets/widgets/qmenu_p.h
+++ b/src/widgets/widgets/qmenu_p.h
@@ -71,20 +71,230 @@ struct QWceMenuAction {
};
#endif
+template <typename T>
+class QSetValueOnDestroy
+{
+public:
+ QSetValueOnDestroy(T &toSet, T value)
+ : toSet(toSet)
+ , value(value)
+ { }
+
+ ~QSetValueOnDestroy() { toSet = value; }
+private:
+ T &toSet;
+ T value;
+};
+
+class QMenuSloppyState
+{
+ Q_DISABLE_COPY(QMenuSloppyState)
+public:
+ QMenuSloppyState()
+ : m_menu(Q_NULLPTR)
+ , m_enabled(false)
+ , m_uni_directional(false)
+ , m_select_other_actions(false)
+ , m_first_mouse(true)
+ , m_init_guard(false)
+ , m_uni_dir_discarded_count(0)
+ , m_uni_dir_fail_at_count(0)
+ , m_timeout(0)
+ , m_reset_action(Q_NULLPTR)
+ , m_origin_action(Q_NULLPTR)
+ , m_parent(Q_NULLPTR)
+ { }
+
+ ~QMenuSloppyState() { reset(); }
+
+ void initialize(QMenu *menu)
+ {
+ m_menu = menu;
+ m_uni_directional = menu->style()->styleHint(QStyle::SH_Menu_SubMenuUniDirection, 0, menu);
+ m_uni_dir_fail_at_count = menu->style()->styleHint(QStyle::SH_Menu_SubMenuUniDirectionFailCount, 0, menu);
+ m_select_other_actions = menu->style()->styleHint(QStyle::SH_Menu_SubMenuSloppySelectOtherActions, 0 , menu);
+ m_timeout = menu->style()->styleHint(QStyle::SH_Menu_SubMenuSloppyCloseTimeout);
+ m_discard_state_when_entering_parent = menu->style()->styleHint(QStyle::SH_Menu_SubMenuResetWhenReenteringParent);
+ m_dont_start_time_on_leave = menu->style()->styleHint(QStyle::SH_Menu_SubMenuDontStartSloppyOnLeave);
+ reset();
+ }
+
+ void reset();
+ bool enabled() const { return m_enabled; }
+
+ void setResetAction(QAction *action) { m_reset_action = action; }
+
+ enum MouseEventResult {
+ EventIsProcessed,
+ EventShouldBePropogated,
+ EventDiscardsSloppyState
+ };
+
+ void startTimer()
+ {
+ if (m_enabled)
+ m_time.start(m_timeout, m_menu);
+ }
+
+ void startTimerIfNotRunning()
+ {
+ if (!m_time.isActive())
+ startTimer();
+ }
+
+ void stopTimer()
+ {
+ m_time.stop();
+ }
+
+ void enter();
+
+ void childEnter()
+ {
+ stopTimer();
+ if (m_parent)
+ m_parent->childEnter();
+ }
+
+ void leave()
+ {
+ if (m_dont_start_time_on_leave)
+ return;
+ if (m_parent)
+ m_parent->childLeave();
+ startTimer();
+ }
+ void childLeave();
+
+ static float slope(const QPointF &p1, const QPointF &p2)
+ {
+ const QPointF slope = p2 - p1;
+ if (slope.x()== 0)
+ return 9999;
+ return slope.y()/slope.x();
+ }
+
+ bool checkSlope(qreal oldS, qreal newS, bool wantSteeper)
+ {
+ if (wantSteeper)
+ return oldS <= newS;
+ return newS <= oldS;
+ }
+
+ MouseEventResult processMouseEvent(const QPointF &mousePos, QAction *resetAction, QAction *currentAction)
+ {
+ if (m_parent)
+ m_parent->stopTimer();
+
+ if (!m_enabled)
+ return EventShouldBePropogated;
+
+ if (!m_time.isActive())
+ startTimer();
+
+ if (!m_sub_menu) {
+ reset();
+ return EventShouldBePropogated;
+ }
+
+ QSetValueOnDestroy<bool> setFirstMouse(m_first_mouse, false);
+ QSetValueOnDestroy<QPointF> setPreviousPoint(m_previous_point, mousePos);
+
+ if (resetAction && resetAction->isSeparator())
+ m_reset_action = Q_NULLPTR;
+ else {
+ m_reset_action = resetAction;
+ }
+
+ if (m_action_rect.contains(mousePos)) {
+ startTimer();
+ return currentAction == m_menu->menuAction() ? EventIsProcessed : EventShouldBePropogated;
+ }
+
+ if (m_uni_directional && !m_first_mouse && resetAction != m_origin_action) {
+ bool left_to_right = m_menu->layoutDirection() == Qt::LeftToRight;
+ QRect sub_menu_rect = m_sub_menu->geometry();
+ QPoint sub_menu_top =
+ left_to_right? sub_menu_rect.topLeft() : sub_menu_rect.topRight();
+ QPoint sub_menu_bottom =
+ left_to_right? sub_menu_rect.bottomLeft() : sub_menu_rect.bottomRight();
+ qreal prev_slope_top = slope(m_previous_point, sub_menu_top);
+ qreal prev_slope_bottom = slope(m_previous_point, sub_menu_bottom);
+
+ qreal current_slope_top = slope(mousePos, sub_menu_top);
+ qreal current_slope_bottom = slope(mousePos, sub_menu_bottom);
+
+ bool slopeTop = checkSlope(prev_slope_top, current_slope_top, sub_menu_top.y() < mousePos.y());
+ bool slopeBottom = checkSlope(prev_slope_bottom, current_slope_bottom, sub_menu_bottom.y() > mousePos.y());
+ bool rightDirection = false;
+ int mouseDir = m_previous_point.y() - mousePos.y();
+ if (mouseDir >= 0) {
+ rightDirection = rightDirection || slopeTop;
+ }
+ if (mouseDir <= 0) {
+ rightDirection = rightDirection || slopeBottom;
+ }
+
+ if (m_uni_dir_discarded_count >= m_uni_dir_fail_at_count && !rightDirection) {
+ m_uni_dir_discarded_count = 0;
+ return EventDiscardsSloppyState;
+ }
+
+ if (!rightDirection)
+ m_uni_dir_discarded_count++;
+ else
+ m_uni_dir_discarded_count = 0;
+
+ }
+
+ return m_select_other_actions ? EventShouldBePropogated : EventIsProcessed;
+ }
+
+ void setSubMenuPopup(const QRect &actionRect, QAction *resetAction, QMenu *subMenu);
+ bool hasParentActiveDelayTimer() const;
+ void timeout();
+ int timeForTimeout() const { return m_timeout; }
+
+ bool isTimerId(int timerId) const { return m_time.timerId() == timerId; }
+ QMenu *subMenu() const { return m_sub_menu; }
+
+private:
+ QMenu *m_menu;
+ bool m_enabled;
+ bool m_uni_directional;
+ bool m_select_other_actions;
+ bool m_first_mouse;
+ bool m_init_guard;
+ bool m_discard_state_when_entering_parent;
+ bool m_dont_start_time_on_leave;
+ short m_uni_dir_discarded_count;
+ short m_uni_dir_fail_at_count;
+ short m_timeout;
+ QBasicTimer m_time;
+ QAction *m_reset_action;
+ QAction *m_origin_action;
+ QRectF m_action_rect;
+ QPointF m_previous_point;
+ QPointer<QMenu> m_sub_menu;
+ QMenuSloppyState *m_parent;
+};
+
class QMenuPrivate : public QWidgetPrivate
{
Q_DECLARE_PUBLIC(QMenu)
public:
QMenuPrivate() : itemsDirty(0), maxIconWidth(0), tabWidth(0), ncols(0),
collapsibleSeparators(true), toolTipsVisible(false),
- activationRecursionGuard(false), hasHadMouse(0), aboutToHide(0), motions(0),
+ activationRecursionGuard(false), delayedPopupGuard(false),
+ hasReceievedEnter(false),
+ hasHadMouse(0), aboutToHide(0), motions(0),
currentAction(0),
#ifdef QT_KEYPAD_NAVIGATION
selectAction(0),
cancelAction(0),
#endif
scroll(0), eventLoop(0), tearoff(0), tornoff(0), tearoffHighlighted(0),
- hasCheckableItems(0), sloppyDelayTimer(0), sloppyAction(0), doChildEffects(false), platformMenu(0)
+ hasCheckableItems(0), doChildEffects(false), platformMenu(0)
#if defined(Q_OS_WINCE) && !defined(QT_NO_MENUBAR)
,wce_menu(0)
@@ -127,6 +337,8 @@ public:
int getLastVisibleAction() const;
bool activationRecursionGuard;
+ bool delayedPopupGuard;
+ bool hasReceievedEnter;
//selection
static QMenu *mouseDown;
@@ -134,12 +346,39 @@ public:
uint hasHadMouse : 1;
uint aboutToHide : 1;
int motions;
+ int mousePopupDelay;
QAction *currentAction;
#ifdef QT_KEYPAD_NAVIGATION
QAction *selectAction;
QAction *cancelAction;
#endif
- QBasicTimer menuDelayTimer;
+ struct DelayState {
+ DelayState()
+ : parent(0)
+ , action(0)
+ { }
+ void initialize(QMenu *parent)
+ {
+ this->parent = parent;
+ }
+
+ void start(int timeout, QAction *toStartAction)
+ {
+ if (timer.isActive() && toStartAction == action)
+ return;
+ action = toStartAction;
+ timer.start(timeout,parent);
+ }
+ void stop()
+ {
+ action = 0;
+ timer.stop();
+ }
+
+ QMenu *parent;
+ QBasicTimer timer;
+ QAction *action;
+ } delayState;
enum SelectionReason {
SelectedFromKeyboard,
SelectedFromElsewhere
@@ -198,10 +437,7 @@ public:
mutable bool hasCheckableItems;
- //sloppy selection
- int sloppyDelayTimer;
- mutable QAction *sloppyAction;
- QRegion sloppyRegion;
+ QMenuSloppyState sloppyState;
//default action
QPointer<QAction> defaultAction;
@@ -257,6 +493,7 @@ public:
QAction* wceCommands(uint command);
#endif
QPointer<QWidget> noReplayFor;
+ static QPointer<QMenu> previousMouseMenu;
};
#endif // QT_NO_MENU
diff --git a/src/widgets/widgets/qmenubar.cpp b/src/widgets/widgets/qmenubar.cpp
index 619cb64636..54d403fa21 100644
--- a/src/widgets/widgets/qmenubar.cpp
+++ b/src/widgets/widgets/qmenubar.cpp
@@ -69,8 +69,8 @@ class QMenuBarExtension : public QToolButton
public:
explicit QMenuBarExtension(QWidget *parent);
- QSize sizeHint() const;
- void paintEvent(QPaintEvent *);
+ QSize sizeHint() const Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
};
QMenuBarExtension::QMenuBarExtension(QWidget *parent)
@@ -1922,15 +1922,6 @@ QAction *QMenuBar::defaultAction() const
\sa triggered(), QAction::hovered()
*/
-/*!
- \fn void QMenuBar::addAction(QAction *action)
- \overload
-
- Appends the action \a action to the menu bar's list of actions.
-
- \sa QMenu::addAction(), QWidget::addAction(), QWidget::actions()
-*/
-
// for private slots
diff --git a/src/widgets/widgets/qmenubar.h b/src/widgets/widgets/qmenubar.h
index cd2d2cd7aa..936cb22880 100644
--- a/src/widgets/widgets/qmenubar.h
+++ b/src/widgets/widgets/qmenubar.h
@@ -57,11 +57,7 @@ public:
explicit QMenuBar(QWidget *parent = 0);
~QMenuBar();
-#ifdef Q_NO_USING_KEYWORD
- void addAction(QAction *action) { QWidget::addAction(action); }
-#else
using QWidget::addAction;
-#endif
QAction *addAction(const QString &text);
QAction *addAction(const QString &text, const QObject *receiver, const char* member);
diff --git a/src/widgets/widgets/qplaintextedit.h b/src/widgets/widgets/qplaintextedit.h
index 9f67aaa8da..c47da891c8 100644
--- a/src/widgets/widgets/qplaintextedit.h
+++ b/src/widgets/widgets/qplaintextedit.h
@@ -176,7 +176,7 @@ public:
void print(QPagedPaintDevice *printer) const;
int blockCount() const;
- QVariant inputMethodQuery(Qt::InputMethodQuery property) const;
+ QVariant inputMethodQuery(Qt::InputMethodQuery property) const Q_DECL_OVERRIDE;
Q_INVOKABLE QVariant inputMethodQuery(Qt::InputMethodQuery query, QVariant argument) const;
public Q_SLOTS:
@@ -218,43 +218,43 @@ Q_SIGNALS:
void modificationChanged(bool);
protected:
- virtual bool event(QEvent *e);
- virtual void timerEvent(QTimerEvent *e);
- virtual void keyPressEvent(QKeyEvent *e);
- virtual void keyReleaseEvent(QKeyEvent *e);
- virtual void resizeEvent(QResizeEvent *e);
- virtual void paintEvent(QPaintEvent *e);
- virtual void mousePressEvent(QMouseEvent *e);
- virtual void mouseMoveEvent(QMouseEvent *e);
- virtual void mouseReleaseEvent(QMouseEvent *e);
- virtual void mouseDoubleClickEvent(QMouseEvent *e);
- virtual bool focusNextPrevChild(bool next);
+ virtual bool event(QEvent *e) Q_DECL_OVERRIDE;
+ virtual void timerEvent(QTimerEvent *e) Q_DECL_OVERRIDE;
+ virtual void keyPressEvent(QKeyEvent *e) Q_DECL_OVERRIDE;
+ virtual void keyReleaseEvent(QKeyEvent *e) Q_DECL_OVERRIDE;
+ virtual void resizeEvent(QResizeEvent *e) Q_DECL_OVERRIDE;
+ virtual void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE;
+ virtual void mousePressEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
+ virtual void mouseMoveEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
+ virtual void mouseReleaseEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
+ virtual void mouseDoubleClickEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
+ virtual bool focusNextPrevChild(bool next) Q_DECL_OVERRIDE;
#ifndef QT_NO_CONTEXTMENU
- virtual void contextMenuEvent(QContextMenuEvent *e);
+ virtual void contextMenuEvent(QContextMenuEvent *e) Q_DECL_OVERRIDE;
#endif
#ifndef QT_NO_DRAGANDDROP
- virtual void dragEnterEvent(QDragEnterEvent *e);
- virtual void dragLeaveEvent(QDragLeaveEvent *e);
- virtual void dragMoveEvent(QDragMoveEvent *e);
- virtual void dropEvent(QDropEvent *e);
+ virtual void dragEnterEvent(QDragEnterEvent *e) Q_DECL_OVERRIDE;
+ virtual void dragLeaveEvent(QDragLeaveEvent *e) Q_DECL_OVERRIDE;
+ virtual void dragMoveEvent(QDragMoveEvent *e) Q_DECL_OVERRIDE;
+ virtual void dropEvent(QDropEvent *e) Q_DECL_OVERRIDE;
#endif
- virtual void focusInEvent(QFocusEvent *e);
- virtual void focusOutEvent(QFocusEvent *e);
- virtual void showEvent(QShowEvent *);
- virtual void changeEvent(QEvent *e);
+ virtual void focusInEvent(QFocusEvent *e) Q_DECL_OVERRIDE;
+ virtual void focusOutEvent(QFocusEvent *e) Q_DECL_OVERRIDE;
+ virtual void showEvent(QShowEvent *) Q_DECL_OVERRIDE;
+ virtual void changeEvent(QEvent *e) Q_DECL_OVERRIDE;
#ifndef QT_NO_WHEELEVENT
- virtual void wheelEvent(QWheelEvent *e);
+ virtual void wheelEvent(QWheelEvent *e) Q_DECL_OVERRIDE;
#endif
virtual QMimeData *createMimeDataFromSelection() const;
virtual bool canInsertFromMimeData(const QMimeData *source) const;
virtual void insertFromMimeData(const QMimeData *source);
- virtual void inputMethodEvent(QInputMethodEvent *);
+ virtual void inputMethodEvent(QInputMethodEvent *) Q_DECL_OVERRIDE;
QPlainTextEdit(QPlainTextEditPrivate &dd, QWidget *parent);
- virtual void scrollContentsBy(int dx, int dy);
+ virtual void scrollContentsBy(int dx, int dy) Q_DECL_OVERRIDE;
virtual void doSetTextCursor(const QTextCursor &cursor);
QTextBlock firstVisibleBlock() const;
@@ -287,14 +287,14 @@ public:
QPlainTextDocumentLayout(QTextDocument *document);
~QPlainTextDocumentLayout();
- void draw(QPainter *, const PaintContext &);
- int hitTest(const QPointF &, Qt::HitTestAccuracy ) const;
+ void draw(QPainter *, const PaintContext &) Q_DECL_OVERRIDE;
+ int hitTest(const QPointF &, Qt::HitTestAccuracy ) const Q_DECL_OVERRIDE;
- int pageCount() const;
- QSizeF documentSize() const;
+ int pageCount() const Q_DECL_OVERRIDE;
+ QSizeF documentSize() const Q_DECL_OVERRIDE;
- QRectF frameBoundingRect(QTextFrame *) const;
- QRectF blockBoundingRect(const QTextBlock &block) const;
+ QRectF frameBoundingRect(QTextFrame *) const Q_DECL_OVERRIDE;
+ QRectF blockBoundingRect(const QTextBlock &block) const Q_DECL_OVERRIDE;
void ensureBlockLayout(const QTextBlock &block) const;
@@ -304,7 +304,7 @@ public:
void requestUpdate();
protected:
- void documentChanged(int from, int /*charsRemoved*/, int charsAdded);
+ void documentChanged(int from, int /*charsRemoved*/, int charsAdded) Q_DECL_OVERRIDE;
private:
diff --git a/src/widgets/widgets/qplaintextedit_p.h b/src/widgets/widgets/qplaintextedit_p.h
index 6ab8b90a0d..1e74c7b895 100644
--- a/src/widgets/widgets/qplaintextedit_p.h
+++ b/src/widgets/widgets/qplaintextedit_p.h
@@ -72,18 +72,18 @@ public:
QPlainTextEditControl(QPlainTextEdit *parent);
- QMimeData *createMimeDataFromSelection() const;
- bool canInsertFromMimeData(const QMimeData *source) const;
- void insertFromMimeData(const QMimeData *source);
- int hitTest(const QPointF &point, Qt::HitTestAccuracy = Qt::FuzzyHit) const;
- QRectF blockBoundingRect(const QTextBlock &block) const;
+ QMimeData *createMimeDataFromSelection() const Q_DECL_OVERRIDE;
+ bool canInsertFromMimeData(const QMimeData *source) const Q_DECL_OVERRIDE;
+ void insertFromMimeData(const QMimeData *source) Q_DECL_OVERRIDE;
+ int hitTest(const QPointF &point, Qt::HitTestAccuracy = Qt::FuzzyHit) const Q_DECL_OVERRIDE;
+ QRectF blockBoundingRect(const QTextBlock &block) const Q_DECL_OVERRIDE;
inline QRectF cursorRect(const QTextCursor &cursor) const {
QRectF r = QWidgetTextControl::cursorRect(cursor);
r.setLeft(qMax(r.left(), (qreal) 0.));
return r;
}
inline QRectF cursorRect() { return cursorRect(textCursor()); }
- void ensureCursorVisible() {
+ void ensureCursorVisible() Q_DECL_OVERRIDE {
textEdit->ensureCursorVisible();
emit microFocusChanged();
}
@@ -93,7 +93,7 @@ public:
int topBlock;
QTextBlock firstVisibleBlock() const;
- QVariant loadResource(int type, const QUrl &name) {
+ QVariant loadResource(int type, const QUrl &name) Q_DECL_OVERRIDE {
return textEdit->loadResource(type, name);
}
diff --git a/src/widgets/widgets/qprogressbar.cpp b/src/widgets/widgets/qprogressbar.cpp
index 58aec8ee9a..89d2243299 100644
--- a/src/widgets/widgets/qprogressbar.cpp
+++ b/src/widgets/widgets/qprogressbar.cpp
@@ -132,7 +132,7 @@ void QProgressBar::initStyleOption(QStyleOptionProgressBar *option) const
if (QStyleOptionProgressBarV2 *optionV2
= qstyleoption_cast<QStyleOptionProgressBarV2 *>(option)) {
- optionV2->orientation = d->orientation; // ### Qt 5: use State_Horizontal instead
+ optionV2->orientation = d->orientation; // ### Qt 6: remove this member from QStyleOptionProgressBarV2
optionV2->invertedAppearance = d->invertedAppearance;
optionV2->bottomToTop = (d->textDirection == QProgressBar::BottomToTop);
}
@@ -426,7 +426,7 @@ QSize QProgressBar::sizeHint() const
int cw = style()->pixelMetric(QStyle::PM_ProgressBarChunkWidth, &opt, this);
QSize size = QSize(qMax(9, cw) * 7 + fm.width(QLatin1Char('0')) * 4, fm.height() + 8);
if (opt.orientation == Qt::Vertical)
- size.transpose();
+ size = size.transposed();
return style()->sizeFromContents(QStyle::CT_ProgressBar, &opt, size, this);
}
diff --git a/src/widgets/widgets/qprogressbar.h b/src/widgets/widgets/qprogressbar.h
index 2cdcbccdb3..898656f8f4 100644
--- a/src/widgets/widgets/qprogressbar.h
+++ b/src/widgets/widgets/qprogressbar.h
@@ -77,8 +77,8 @@ public:
Qt::Alignment alignment() const;
void setAlignment(Qt::Alignment alignment);
- QSize sizeHint() const;
- QSize minimumSizeHint() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize minimumSizeHint() const Q_DECL_OVERRIDE;
Qt::Orientation orientation() const;
@@ -103,8 +103,8 @@ Q_SIGNALS:
void valueChanged(int value);
protected:
- bool event(QEvent *e);
- void paintEvent(QPaintEvent *);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
void initStyleOption(QStyleOptionProgressBar *option) const;
private:
diff --git a/src/widgets/widgets/qpushbutton.h b/src/widgets/widgets/qpushbutton.h
index ebf66f8ef8..5063651658 100644
--- a/src/widgets/widgets/qpushbutton.h
+++ b/src/widgets/widgets/qpushbutton.h
@@ -57,8 +57,8 @@ public:
QPushButton(const QIcon& icon, const QString &text, QWidget *parent=0);
~QPushButton();
- QSize sizeHint() const;
- QSize minimumSizeHint() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize minimumSizeHint() const Q_DECL_OVERRIDE;
bool autoDefault() const;
void setAutoDefault(bool);
@@ -79,14 +79,14 @@ public Q_SLOTS:
#endif
protected:
- bool event(QEvent *e);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
#ifdef Q_WS_MAC
bool hitButton(const QPoint &pos) const;
#endif // Q_WS_MAC
- void paintEvent(QPaintEvent *);
- void keyPressEvent(QKeyEvent *);
- void focusInEvent(QFocusEvent *);
- void focusOutEvent(QFocusEvent *);
+ void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
+ void keyPressEvent(QKeyEvent *) Q_DECL_OVERRIDE;
+ void focusInEvent(QFocusEvent *) Q_DECL_OVERRIDE;
+ void focusOutEvent(QFocusEvent *) Q_DECL_OVERRIDE;
void initStyleOption(QStyleOptionButton *option) const;
QPushButton(QPushButtonPrivate &dd, QWidget* parent = 0);
diff --git a/src/widgets/widgets/qradiobutton.h b/src/widgets/widgets/qradiobutton.h
index 0bfb0de4e8..beda0e0d38 100644
--- a/src/widgets/widgets/qradiobutton.h
+++ b/src/widgets/widgets/qradiobutton.h
@@ -51,14 +51,14 @@ public:
explicit QRadioButton(const QString &text, QWidget *parent=0);
~QRadioButton();
- QSize sizeHint() const;
- QSize minimumSizeHint() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize minimumSizeHint() const Q_DECL_OVERRIDE;
protected:
- bool event(QEvent *e);
- bool hitButton(const QPoint &) const;
- void paintEvent(QPaintEvent *);
- void mouseMoveEvent(QMouseEvent *);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
+ bool hitButton(const QPoint &) const Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
+ void mouseMoveEvent(QMouseEvent *) Q_DECL_OVERRIDE;
void initStyleOption(QStyleOptionButton *button) const;
diff --git a/src/widgets/widgets/qrubberband.h b/src/widgets/widgets/qrubberband.h
index 7193f69f59..f46d6a8643 100644
--- a/src/widgets/widgets/qrubberband.h
+++ b/src/widgets/widgets/qrubberband.h
@@ -67,12 +67,12 @@ public:
{ resize(s.width(), s.height()); }
protected:
- bool event(QEvent *e);
- void paintEvent(QPaintEvent *);
- void changeEvent(QEvent *);
- void showEvent(QShowEvent *);
- void resizeEvent(QResizeEvent *);
- void moveEvent(QMoveEvent *);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
+ void changeEvent(QEvent *) Q_DECL_OVERRIDE;
+ void showEvent(QShowEvent *) Q_DECL_OVERRIDE;
+ void resizeEvent(QResizeEvent *) Q_DECL_OVERRIDE;
+ void moveEvent(QMoveEvent *) Q_DECL_OVERRIDE;
void initStyleOption(QStyleOptionRubberBand *option) const;
private:
diff --git a/src/widgets/widgets/qscrollarea.h b/src/widgets/widgets/qscrollarea.h
index 568dbc6e4f..3ec9ca14a3 100644
--- a/src/widgets/widgets/qscrollarea.h
+++ b/src/widgets/widgets/qscrollarea.h
@@ -60,9 +60,9 @@ public:
bool widgetResizable() const;
void setWidgetResizable(bool resizable);
- QSize sizeHint() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
- bool focusNextPrevChild(bool next);
+ bool focusNextPrevChild(bool next) Q_DECL_OVERRIDE;
Qt::Alignment alignment() const;
void setAlignment(Qt::Alignment);
@@ -72,10 +72,10 @@ public:
protected:
QScrollArea(QScrollAreaPrivate &dd, QWidget *parent = 0);
- bool event(QEvent *);
- bool eventFilter(QObject *, QEvent *);
- void resizeEvent(QResizeEvent *);
- void scrollContentsBy(int dx, int dy);
+ bool event(QEvent *) Q_DECL_OVERRIDE;
+ bool eventFilter(QObject *, QEvent *) Q_DECL_OVERRIDE;
+ void resizeEvent(QResizeEvent *) Q_DECL_OVERRIDE;
+ void scrollContentsBy(int dx, int dy) Q_DECL_OVERRIDE;
QSize viewportSizeHint() const Q_DECL_OVERRIDE;
diff --git a/src/widgets/widgets/qscrollbar.h b/src/widgets/widgets/qscrollbar.h
index 2b67f04850..992bd511c8 100644
--- a/src/widgets/widgets/qscrollbar.h
+++ b/src/widgets/widgets/qscrollbar.h
@@ -53,21 +53,21 @@ public:
explicit QScrollBar(Qt::Orientation, QWidget *parent=0);
~QScrollBar();
- QSize sizeHint() const;
- bool event(QEvent *event);
+ QSize sizeHint() const Q_DECL_OVERRIDE;
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
protected:
#ifndef QT_NO_WHEELEVENT
- void wheelEvent(QWheelEvent *);
+ void wheelEvent(QWheelEvent *) Q_DECL_OVERRIDE;
#endif
- void paintEvent(QPaintEvent *);
- void mousePressEvent(QMouseEvent *);
- void mouseReleaseEvent(QMouseEvent *);
- void mouseMoveEvent(QMouseEvent *);
- void hideEvent(QHideEvent*);
- void sliderChange(SliderChange change);
+ void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent *) Q_DECL_OVERRIDE;
+ void mouseReleaseEvent(QMouseEvent *) Q_DECL_OVERRIDE;
+ void mouseMoveEvent(QMouseEvent *) Q_DECL_OVERRIDE;
+ void hideEvent(QHideEvent*) Q_DECL_OVERRIDE;
+ void sliderChange(SliderChange change) Q_DECL_OVERRIDE;
#ifndef QT_NO_CONTEXTMENU
- void contextMenuEvent(QContextMenuEvent *);
+ void contextMenuEvent(QContextMenuEvent *) Q_DECL_OVERRIDE;
#endif
void initStyleOption(QStyleOptionSlider *option) const;
diff --git a/src/widgets/widgets/qsizegrip.h b/src/widgets/widgets/qsizegrip.h
index 61b397e2bb..7885d0a2b7 100644
--- a/src/widgets/widgets/qsizegrip.h
+++ b/src/widgets/widgets/qsizegrip.h
@@ -48,19 +48,19 @@ public:
explicit QSizeGrip(QWidget *parent);
~QSizeGrip();
- QSize sizeHint() const;
- void setVisible(bool);
+ QSize sizeHint() const Q_DECL_OVERRIDE;
+ void setVisible(bool) Q_DECL_OVERRIDE;
protected:
- void paintEvent(QPaintEvent *);
- void mousePressEvent(QMouseEvent *);
- void mouseMoveEvent(QMouseEvent *);
- void mouseReleaseEvent(QMouseEvent *mouseEvent);
- void moveEvent(QMoveEvent *moveEvent);
- void showEvent(QShowEvent *showEvent);
- void hideEvent(QHideEvent *hideEvent);
- bool eventFilter(QObject *, QEvent *);
- bool event(QEvent *);
+ void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent *) Q_DECL_OVERRIDE;
+ void mouseMoveEvent(QMouseEvent *) Q_DECL_OVERRIDE;
+ void mouseReleaseEvent(QMouseEvent *mouseEvent) Q_DECL_OVERRIDE;
+ void moveEvent(QMoveEvent *moveEvent) Q_DECL_OVERRIDE;
+ void showEvent(QShowEvent *showEvent) Q_DECL_OVERRIDE;
+ void hideEvent(QHideEvent *hideEvent) Q_DECL_OVERRIDE;
+ bool eventFilter(QObject *, QEvent *) Q_DECL_OVERRIDE;
+ bool event(QEvent *) Q_DECL_OVERRIDE;
public:
diff --git a/src/widgets/widgets/qslider.h b/src/widgets/widgets/qslider.h
index 6d7bf7eee8..66b23e6fa3 100644
--- a/src/widgets/widgets/qslider.h
+++ b/src/widgets/widgets/qslider.h
@@ -66,8 +66,8 @@ public:
~QSlider();
- QSize sizeHint() const;
- QSize minimumSizeHint() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize minimumSizeHint() const Q_DECL_OVERRIDE;
void setTickPosition(TickPosition position);
TickPosition tickPosition() const;
@@ -75,13 +75,13 @@ public:
void setTickInterval(int ti);
int tickInterval() const;
- bool event(QEvent *event);
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
protected:
- void paintEvent(QPaintEvent *ev);
- void mousePressEvent(QMouseEvent *ev);
- void mouseReleaseEvent(QMouseEvent *ev);
- void mouseMoveEvent(QMouseEvent *ev);
+ void paintEvent(QPaintEvent *ev) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent *ev) Q_DECL_OVERRIDE;
+ void mouseReleaseEvent(QMouseEvent *ev) Q_DECL_OVERRIDE;
+ void mouseMoveEvent(QMouseEvent *ev) Q_DECL_OVERRIDE;
void initStyleOption(QStyleOptionSlider *option) const;
diff --git a/src/widgets/widgets/qspinbox.cpp b/src/widgets/widgets/qspinbox.cpp
index e8b22151fa..3fe1218b87 100644
--- a/src/widgets/widgets/qspinbox.cpp
+++ b/src/widgets/widgets/qspinbox.cpp
@@ -58,10 +58,10 @@ class QSpinBoxPrivate : public QAbstractSpinBoxPrivate
Q_DECLARE_PUBLIC(QSpinBox)
public:
QSpinBoxPrivate();
- void emitSignals(EmitPolicy ep, const QVariant &);
+ void emitSignals(EmitPolicy ep, const QVariant &) Q_DECL_OVERRIDE;
- virtual QVariant valueFromText(const QString &n) const;
- virtual QString textFromValue(const QVariant &n) const;
+ virtual QVariant valueFromText(const QString &n) const Q_DECL_OVERRIDE;
+ virtual QString textFromValue(const QVariant &n) const Q_DECL_OVERRIDE;
QVariant validateAndInterpret(QString &input, int &pos,
QValidator::State &state) const;
@@ -79,10 +79,10 @@ class QDoubleSpinBoxPrivate : public QAbstractSpinBoxPrivate
Q_DECLARE_PUBLIC(QDoubleSpinBox)
public:
QDoubleSpinBoxPrivate();
- void emitSignals(EmitPolicy ep, const QVariant &);
+ void emitSignals(EmitPolicy ep, const QVariant &) Q_DECL_OVERRIDE;
- virtual QVariant valueFromText(const QString &n) const;
- virtual QString textFromValue(const QVariant &n) const;
+ virtual QVariant valueFromText(const QString &n) const Q_DECL_OVERRIDE;
+ virtual QString textFromValue(const QVariant &n) const Q_DECL_OVERRIDE;
QVariant validateAndInterpret(QString &input, int &pos,
QValidator::State &state) const;
double round(double input) const;
diff --git a/src/widgets/widgets/qsplashscreen.h b/src/widgets/widgets/qsplashscreen.h
index bb8b359831..41db23a434 100644
--- a/src/widgets/widgets/qsplashscreen.h
+++ b/src/widgets/widgets/qsplashscreen.h
@@ -66,9 +66,9 @@ Q_SIGNALS:
void messageChanged(const QString &message);
protected:
- bool event(QEvent *e);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
virtual void drawContents(QPainter *painter);
- void mousePressEvent(QMouseEvent *);
+ void mousePressEvent(QMouseEvent *) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QSplashScreen)
diff --git a/src/widgets/widgets/qsplitter.h b/src/widgets/widgets/qsplitter.h
index f82c06c3bc..c08682eef2 100644
--- a/src/widgets/widgets/qsplitter.h
+++ b/src/widgets/widgets/qsplitter.h
@@ -77,8 +77,8 @@ public:
bool opaqueResize() const;
void refresh();
- QSize sizeHint() const;
- QSize minimumSizeHint() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize minimumSizeHint() const Q_DECL_OVERRIDE;
QList<int> sizes() const;
void setSizes(const QList<int> &list);
@@ -104,12 +104,12 @@ Q_SIGNALS:
protected:
virtual QSplitterHandle *createHandle();
- void childEvent(QChildEvent *);
+ void childEvent(QChildEvent *) Q_DECL_OVERRIDE;
- bool event(QEvent *);
- void resizeEvent(QResizeEvent *);
+ bool event(QEvent *) Q_DECL_OVERRIDE;
+ void resizeEvent(QResizeEvent *) Q_DECL_OVERRIDE;
- void changeEvent(QEvent *);
+ void changeEvent(QEvent *) Q_DECL_OVERRIDE;
void moveSplitter(int pos, int index);
void setRubberBand(int position);
int closestLegalPosition(int, int);
@@ -138,15 +138,15 @@ public:
bool opaqueResize() const;
QSplitter *splitter() const;
- QSize sizeHint() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
protected:
- void paintEvent(QPaintEvent *);
- void mouseMoveEvent(QMouseEvent *);
- void mousePressEvent(QMouseEvent *);
- void mouseReleaseEvent(QMouseEvent *);
- void resizeEvent(QResizeEvent *);
- bool event(QEvent *);
+ void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
+ void mouseMoveEvent(QMouseEvent *) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent *) Q_DECL_OVERRIDE;
+ void mouseReleaseEvent(QMouseEvent *) Q_DECL_OVERRIDE;
+ void resizeEvent(QResizeEvent *) Q_DECL_OVERRIDE;
+ bool event(QEvent *) Q_DECL_OVERRIDE;
void moveSplitter(int p);
int closestLegalPosition(int p);
diff --git a/src/widgets/widgets/qstackedwidget.h b/src/widgets/widgets/qstackedwidget.h
index af048bc749..71191ba133 100644
--- a/src/widgets/widgets/qstackedwidget.h
+++ b/src/widgets/widgets/qstackedwidget.h
@@ -73,7 +73,7 @@ Q_SIGNALS:
void widgetRemoved(int index);
protected:
- bool event(QEvent *e);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QStackedWidget)
diff --git a/src/widgets/widgets/qstatusbar.h b/src/widgets/widgets/qstatusbar.h
index d24680ab2a..56d45b9001 100644
--- a/src/widgets/widgets/qstatusbar.h
+++ b/src/widgets/widgets/qstatusbar.h
@@ -73,14 +73,14 @@ Q_SIGNALS:
void messageChanged(const QString &text);
protected:
- void showEvent(QShowEvent *);
- void paintEvent(QPaintEvent *);
- void resizeEvent(QResizeEvent *);
+ void showEvent(QShowEvent *) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
+ void resizeEvent(QResizeEvent *) Q_DECL_OVERRIDE;
// ### Qt 6: consider making reformat() and hideOrShow() private
void reformat();
void hideOrShow();
- bool event(QEvent *);
+ bool event(QEvent *) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QStatusBar)
diff --git a/src/widgets/widgets/qtabbar.h b/src/widgets/widgets/qtabbar.h
index bdc9dae07c..5cca289020 100644
--- a/src/widgets/widgets/qtabbar.h
+++ b/src/widgets/widgets/qtabbar.h
@@ -130,8 +130,8 @@ public:
int currentIndex() const;
int count() const;
- QSize sizeHint() const;
- QSize minimumSizeHint() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize minimumSizeHint() const Q_DECL_OVERRIDE;
void setDrawBase(bool drawTheBase);
bool drawBase() const;
@@ -183,20 +183,20 @@ protected:
virtual void tabRemoved(int index);
virtual void tabLayoutChange();
- bool event(QEvent *);
- void resizeEvent(QResizeEvent *);
- void showEvent(QShowEvent *);
- void hideEvent(QHideEvent *);
- void paintEvent(QPaintEvent *);
- void mousePressEvent (QMouseEvent *);
- void mouseMoveEvent (QMouseEvent *);
- void mouseReleaseEvent (QMouseEvent *);
+ bool event(QEvent *) Q_DECL_OVERRIDE;
+ void resizeEvent(QResizeEvent *) Q_DECL_OVERRIDE;
+ void showEvent(QShowEvent *) Q_DECL_OVERRIDE;
+ void hideEvent(QHideEvent *) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
+ void mousePressEvent (QMouseEvent *) Q_DECL_OVERRIDE;
+ void mouseMoveEvent (QMouseEvent *) Q_DECL_OVERRIDE;
+ void mouseReleaseEvent (QMouseEvent *) Q_DECL_OVERRIDE;
#ifndef QT_NO_WHEELEVENT
- void wheelEvent(QWheelEvent *event);
+ void wheelEvent(QWheelEvent *event) Q_DECL_OVERRIDE;
#endif
- void keyPressEvent(QKeyEvent *);
- void changeEvent(QEvent *);
- void timerEvent(QTimerEvent *event);
+ void keyPressEvent(QKeyEvent *) Q_DECL_OVERRIDE;
+ void changeEvent(QEvent *) Q_DECL_OVERRIDE;
+ void timerEvent(QTimerEvent *event) Q_DECL_OVERRIDE;
void initStyleOption(QStyleOptionTab *option, int tabIndex) const;
#ifndef QT_NO_ACCESSIBILITY
diff --git a/src/widgets/widgets/qtabbar_p.h b/src/widgets/widgets/qtabbar_p.h
index b26ad20f1a..9393c94c9e 100644
--- a/src/widgets/widgets/qtabbar_p.h
+++ b/src/widgets/widgets/qtabbar_p.h
@@ -119,9 +119,9 @@ public:
TabBarAnimation(Tab *t, QTabBarPrivate *_priv) : tab(t), priv(_priv)
{ setEasingCurve(QEasingCurve::InOutQuad); }
- void updateCurrentValue(const QVariant &current);
+ void updateCurrentValue(const QVariant &current) Q_DECL_OVERRIDE;
- void updateState(State, State newState);
+ void updateState(State, State newState) Q_DECL_OVERRIDE;
private:
//these are needed for the callbacks
Tab *tab;
@@ -250,12 +250,12 @@ class CloseButton : public QAbstractButton
public:
CloseButton(QWidget *parent = 0);
- QSize sizeHint() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
inline QSize minimumSizeHint() const
{ return sizeHint(); }
- void enterEvent(QEvent *event);
- void leaveEvent(QEvent *event);
- void paintEvent(QPaintEvent *event);
+ void enterEvent(QEvent *event) Q_DECL_OVERRIDE;
+ void leaveEvent(QEvent *event) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
};
diff --git a/src/widgets/widgets/qtabwidget.h b/src/widgets/widgets/qtabwidget.h
index 5d9adc40e5..dc5c49c99c 100644
--- a/src/widgets/widgets/qtabwidget.h
+++ b/src/widgets/widgets/qtabwidget.h
@@ -113,10 +113,10 @@ public:
TabShape tabShape() const;
void setTabShape(TabShape s);
- QSize sizeHint() const;
- QSize minimumSizeHint() const;
- int heightForWidth(int width) const;
- bool hasHeightForWidth() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize minimumSizeHint() const Q_DECL_OVERRIDE;
+ int heightForWidth(int width) const Q_DECL_OVERRIDE;
+ bool hasHeightForWidth() const Q_DECL_OVERRIDE;
void setCornerWidget(QWidget * w, Qt::Corner corner = Qt::TopRightCorner);
QWidget * cornerWidget(Qt::Corner corner = Qt::TopRightCorner) const;
@@ -154,13 +154,13 @@ protected:
virtual void tabInserted(int index);
virtual void tabRemoved(int index);
- void showEvent(QShowEvent *);
- void resizeEvent(QResizeEvent *);
- void keyPressEvent(QKeyEvent *);
- void paintEvent(QPaintEvent *);
+ void showEvent(QShowEvent *) Q_DECL_OVERRIDE;
+ void resizeEvent(QResizeEvent *) Q_DECL_OVERRIDE;
+ void keyPressEvent(QKeyEvent *) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
void setTabBar(QTabBar *);
- void changeEvent(QEvent *);
- bool event(QEvent *);
+ void changeEvent(QEvent *) Q_DECL_OVERRIDE;
+ bool event(QEvent *) Q_DECL_OVERRIDE;
void initStyleOption(QStyleOptionTabWidgetFrame *option) const;
diff --git a/src/widgets/widgets/qtextbrowser.cpp b/src/widgets/widgets/qtextbrowser.cpp
index 1ef2f92804..7a02401dd1 100644
--- a/src/widgets/widgets/qtextbrowser.cpp
+++ b/src/widgets/widgets/qtextbrowser.cpp
@@ -129,7 +129,7 @@ public:
void setSource(const QUrl &url);
// re-imlemented from QTextEditPrivate
- virtual QUrl resolveUrl(const QUrl &url) const;
+ virtual QUrl resolveUrl(const QUrl &url) const Q_DECL_OVERRIDE;
inline QUrl resolveUrl(const QString &url) const
{ return resolveUrl(QUrl(url)); }
diff --git a/src/widgets/widgets/qtextbrowser.h b/src/widgets/widgets/qtextbrowser.h
index d08590cb27..de917d0bf3 100644
--- a/src/widgets/widgets/qtextbrowser.h
+++ b/src/widgets/widgets/qtextbrowser.h
@@ -65,7 +65,7 @@ public:
QStringList searchPaths() const;
void setSearchPaths(const QStringList &paths);
- virtual QVariant loadResource(int type, const QUrl &name);
+ virtual QVariant loadResource(int type, const QUrl &name) Q_DECL_OVERRIDE;
bool isBackwardAvailable() const;
bool isForwardAvailable() const;
@@ -98,14 +98,14 @@ Q_SIGNALS:
void anchorClicked(const QUrl &);
protected:
- bool event(QEvent *e);
- virtual void keyPressEvent(QKeyEvent *ev);
- virtual void mouseMoveEvent(QMouseEvent *ev);
- virtual void mousePressEvent(QMouseEvent *ev);
- virtual void mouseReleaseEvent(QMouseEvent *ev);
- virtual void focusOutEvent(QFocusEvent *ev);
- virtual bool focusNextPrevChild(bool next);
- virtual void paintEvent(QPaintEvent *e);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
+ virtual void keyPressEvent(QKeyEvent *ev) Q_DECL_OVERRIDE;
+ virtual void mouseMoveEvent(QMouseEvent *ev) Q_DECL_OVERRIDE;
+ virtual void mousePressEvent(QMouseEvent *ev) Q_DECL_OVERRIDE;
+ virtual void mouseReleaseEvent(QMouseEvent *ev) Q_DECL_OVERRIDE;
+ virtual void focusOutEvent(QFocusEvent *ev) Q_DECL_OVERRIDE;
+ virtual bool focusNextPrevChild(bool next) Q_DECL_OVERRIDE;
+ virtual void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QTextBrowser)
diff --git a/src/widgets/widgets/qtextedit.cpp b/src/widgets/widgets/qtextedit.cpp
index 7ef864139f..a432a82ec0 100644
--- a/src/widgets/widgets/qtextedit.cpp
+++ b/src/widgets/widgets/qtextedit.cpp
@@ -77,19 +77,19 @@ class QTextEditControl : public QWidgetTextControl
public:
inline QTextEditControl(QObject *parent) : QWidgetTextControl(parent) {}
- virtual QMimeData *createMimeDataFromSelection() const {
+ virtual QMimeData *createMimeDataFromSelection() const Q_DECL_OVERRIDE {
QTextEdit *ed = qobject_cast<QTextEdit *>(parent());
if (!ed)
return QWidgetTextControl::createMimeDataFromSelection();
return ed->createMimeDataFromSelection();
}
- virtual bool canInsertFromMimeData(const QMimeData *source) const {
+ virtual bool canInsertFromMimeData(const QMimeData *source) const Q_DECL_OVERRIDE {
QTextEdit *ed = qobject_cast<QTextEdit *>(parent());
if (!ed)
return QWidgetTextControl::canInsertFromMimeData(source);
return ed->canInsertFromMimeData(source);
}
- virtual void insertFromMimeData(const QMimeData *source) {
+ virtual void insertFromMimeData(const QMimeData *source) Q_DECL_OVERRIDE {
QTextEdit *ed = qobject_cast<QTextEdit *>(parent());
if (!ed)
QWidgetTextControl::insertFromMimeData(source);
diff --git a/src/widgets/widgets/qtextedit.h b/src/widgets/widgets/qtextedit.h
index dc8deea8b6..4c5af67cca 100644
--- a/src/widgets/widgets/qtextedit.h
+++ b/src/widgets/widgets/qtextedit.h
@@ -203,7 +203,7 @@ public:
void print(QPagedPaintDevice *printer) const;
- QVariant inputMethodQuery(Qt::InputMethodQuery property) const;
+ QVariant inputMethodQuery(Qt::InputMethodQuery property) const Q_DECL_OVERRIDE;
Q_INVOKABLE QVariant inputMethodQuery(Qt::InputMethodQuery query, QVariant argument) const;
public Q_SLOTS:
@@ -257,43 +257,43 @@ Q_SIGNALS:
void cursorPositionChanged();
protected:
- virtual bool event(QEvent *e);
- virtual void timerEvent(QTimerEvent *e);
- virtual void keyPressEvent(QKeyEvent *e);
- virtual void keyReleaseEvent(QKeyEvent *e);
- virtual void resizeEvent(QResizeEvent *e);
- virtual void paintEvent(QPaintEvent *e);
- virtual void mousePressEvent(QMouseEvent *e);
- virtual void mouseMoveEvent(QMouseEvent *e);
- virtual void mouseReleaseEvent(QMouseEvent *e);
- virtual void mouseDoubleClickEvent(QMouseEvent *e);
- virtual bool focusNextPrevChild(bool next);
+ virtual bool event(QEvent *e) Q_DECL_OVERRIDE;
+ virtual void timerEvent(QTimerEvent *e) Q_DECL_OVERRIDE;
+ virtual void keyPressEvent(QKeyEvent *e) Q_DECL_OVERRIDE;
+ virtual void keyReleaseEvent(QKeyEvent *e) Q_DECL_OVERRIDE;
+ virtual void resizeEvent(QResizeEvent *e) Q_DECL_OVERRIDE;
+ virtual void paintEvent(QPaintEvent *e) Q_DECL_OVERRIDE;
+ virtual void mousePressEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
+ virtual void mouseMoveEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
+ virtual void mouseReleaseEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
+ virtual void mouseDoubleClickEvent(QMouseEvent *e) Q_DECL_OVERRIDE;
+ virtual bool focusNextPrevChild(bool next) Q_DECL_OVERRIDE;
#ifndef QT_NO_CONTEXTMENU
- virtual void contextMenuEvent(QContextMenuEvent *e);
+ virtual void contextMenuEvent(QContextMenuEvent *e) Q_DECL_OVERRIDE;
#endif
#ifndef QT_NO_DRAGANDDROP
- virtual void dragEnterEvent(QDragEnterEvent *e);
- virtual void dragLeaveEvent(QDragLeaveEvent *e);
- virtual void dragMoveEvent(QDragMoveEvent *e);
- virtual void dropEvent(QDropEvent *e);
+ virtual void dragEnterEvent(QDragEnterEvent *e) Q_DECL_OVERRIDE;
+ virtual void dragLeaveEvent(QDragLeaveEvent *e) Q_DECL_OVERRIDE;
+ virtual void dragMoveEvent(QDragMoveEvent *e) Q_DECL_OVERRIDE;
+ virtual void dropEvent(QDropEvent *e) Q_DECL_OVERRIDE;
#endif
- virtual void focusInEvent(QFocusEvent *e);
- virtual void focusOutEvent(QFocusEvent *e);
- virtual void showEvent(QShowEvent *);
- virtual void changeEvent(QEvent *e);
+ virtual void focusInEvent(QFocusEvent *e) Q_DECL_OVERRIDE;
+ virtual void focusOutEvent(QFocusEvent *e) Q_DECL_OVERRIDE;
+ virtual void showEvent(QShowEvent *) Q_DECL_OVERRIDE;
+ virtual void changeEvent(QEvent *e) Q_DECL_OVERRIDE;
#ifndef QT_NO_WHEELEVENT
- virtual void wheelEvent(QWheelEvent *e);
+ virtual void wheelEvent(QWheelEvent *e) Q_DECL_OVERRIDE;
#endif
virtual QMimeData *createMimeDataFromSelection() const;
virtual bool canInsertFromMimeData(const QMimeData *source) const;
virtual void insertFromMimeData(const QMimeData *source);
- virtual void inputMethodEvent(QInputMethodEvent *);
+ virtual void inputMethodEvent(QInputMethodEvent *) Q_DECL_OVERRIDE;
QTextEdit(QTextEditPrivate &dd, QWidget *parent);
- virtual void scrollContentsBy(int dx, int dy);
+ virtual void scrollContentsBy(int dx, int dy) Q_DECL_OVERRIDE;
virtual void doSetTextCursor(const QTextCursor &cursor);
void zoomInF(float range);
diff --git a/src/widgets/widgets/qtoolbar.cpp b/src/widgets/widgets/qtoolbar.cpp
index 77119a0d7d..c07c3dac8c 100644
--- a/src/widgets/widgets/qtoolbar.cpp
+++ b/src/widgets/widgets/qtoolbar.cpp
@@ -418,15 +418,6 @@ void QToolBarPrivate::plug(const QRect &r)
*/
/*!
- \fn void QToolBar::addAction(QAction *action)
- \overload
-
- Appends the \a action to the toolbar's list of actions.
-
- \sa QMenu::addAction(), QWidget::addAction()
-*/
-
-/*!
\fn void QToolBar::actionTriggered(QAction *action)
This signal is emitted when an action in this toolbar is triggered.
diff --git a/src/widgets/widgets/qtoolbar.h b/src/widgets/widgets/qtoolbar.h
index 6bd1411592..57a69afb74 100644
--- a/src/widgets/widgets/qtoolbar.h
+++ b/src/widgets/widgets/qtoolbar.h
@@ -86,13 +86,7 @@ public:
void clear();
-#ifdef Q_NO_USING_KEYWORD
- inline void addAction(QAction *action)
- { QWidget::addAction(action); }
-#else
using QWidget::addAction;
-#endif
-
QAction *addAction(const QString &text);
QAction *addAction(const QIcon &icon, const QString &text);
QAction *addAction(const QString &text, const QObject *receiver, const char* member);
@@ -135,10 +129,10 @@ Q_SIGNALS:
void visibilityChanged(bool visible);
protected:
- void actionEvent(QActionEvent *event);
- void changeEvent(QEvent *event);
- void paintEvent(QPaintEvent *event);
- bool event(QEvent *event);
+ void actionEvent(QActionEvent *event) Q_DECL_OVERRIDE;
+ void changeEvent(QEvent *event) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *event) Q_DECL_OVERRIDE;
+ bool event(QEvent *event) Q_DECL_OVERRIDE;
void initStyleOption(QStyleOptionToolBar *option) const;
diff --git a/src/widgets/widgets/qtoolbarextension_p.h b/src/widgets/widgets/qtoolbarextension_p.h
index 07e3301ed7..6625419d87 100644
--- a/src/widgets/widgets/qtoolbarextension_p.h
+++ b/src/widgets/widgets/qtoolbarextension_p.h
@@ -58,8 +58,8 @@ class Q_AUTOTEST_EXPORT QToolBarExtension : public QToolButton
public:
explicit QToolBarExtension(QWidget *parent);
- void paintEvent(QPaintEvent *);
- QSize sizeHint() const;
+ void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
public Q_SLOTS:
void setOrientation(Qt::Orientation o);
diff --git a/src/widgets/widgets/qtoolbarlayout_p.h b/src/widgets/widgets/qtoolbarlayout_p.h
index 47857d6802..4cedd2b37a 100644
--- a/src/widgets/widgets/qtoolbarlayout_p.h
+++ b/src/widgets/widgets/qtoolbarlayout_p.h
@@ -61,7 +61,7 @@ class QToolBarItem : public QWidgetItem
{
public:
QToolBarItem(QWidget *widget);
- bool isEmpty() const;
+ bool isEmpty() const Q_DECL_OVERRIDE;
QAction *action;
bool customWidget;
@@ -75,22 +75,22 @@ public:
QToolBarLayout(QWidget *parent = 0);
~QToolBarLayout();
- void addItem(QLayoutItem *item);
- QLayoutItem *itemAt(int index) const;
- QLayoutItem *takeAt(int index);
- int count() const;
+ void addItem(QLayoutItem *item) Q_DECL_OVERRIDE;
+ QLayoutItem *itemAt(int index) const Q_DECL_OVERRIDE;
+ QLayoutItem *takeAt(int index) Q_DECL_OVERRIDE;
+ int count() const Q_DECL_OVERRIDE;
- bool isEmpty() const;
- void invalidate();
- Qt::Orientations expandingDirections() const;
+ bool isEmpty() const Q_DECL_OVERRIDE;
+ void invalidate() Q_DECL_OVERRIDE;
+ Qt::Orientations expandingDirections() const Q_DECL_OVERRIDE;
- void setGeometry(const QRect &r);
- QSize minimumSize() const;
- QSize sizeHint() const;
+ void setGeometry(const QRect &r) Q_DECL_OVERRIDE;
+ QSize minimumSize() const Q_DECL_OVERRIDE;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
void insertAction(int index, QAction *action);
int indexOf(QAction *action) const;
- int indexOf(QWidget *widget) const { return QLayout::indexOf(widget); }
+ int indexOf(QWidget *widget) const Q_DECL_OVERRIDE { return QLayout::indexOf(widget); }
bool layoutActions(const QSize &size);
QSize expandedSize(const QSize &size) const;
diff --git a/src/widgets/widgets/qtoolbarseparator_p.h b/src/widgets/widgets/qtoolbarseparator_p.h
index 3ac46db482..b3f862cefa 100644
--- a/src/widgets/widgets/qtoolbarseparator_p.h
+++ b/src/widgets/widgets/qtoolbarseparator_p.h
@@ -64,9 +64,9 @@ public:
Qt::Orientation orientation() const;
- QSize sizeHint() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
- void paintEvent(QPaintEvent *);
+ void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
void initStyleOption(QStyleOption *option) const;
public Q_SLOTS:
diff --git a/src/widgets/widgets/qtoolbox.cpp b/src/widgets/widgets/qtoolbox.cpp
index 518b975b51..83a158e59e 100644
--- a/src/widgets/widgets/qtoolbox.cpp
+++ b/src/widgets/widgets/qtoolbox.cpp
@@ -65,12 +65,12 @@ public:
inline void setSelected(bool b) { selected = b; update(); }
inline void setIndex(int newIndex) { indexInPage = newIndex; }
- QSize sizeHint() const;
- QSize minimumSizeHint() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize minimumSizeHint() const Q_DECL_OVERRIDE;
protected:
void initStyleOption(QStyleOptionToolBox *opt) const;
- void paintEvent(QPaintEvent *);
+ void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
private:
bool selected;
diff --git a/src/widgets/widgets/qtoolbox.h b/src/widgets/widgets/qtoolbox.h
index 1ea276e8ab..40bbce7d44 100644
--- a/src/widgets/widgets/qtoolbox.h
+++ b/src/widgets/widgets/qtoolbox.h
@@ -89,11 +89,11 @@ Q_SIGNALS:
void currentChanged(int index);
protected:
- bool event(QEvent *e);
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
virtual void itemInserted(int index);
virtual void itemRemoved(int index);
- void showEvent(QShowEvent *e);
- void changeEvent(QEvent *);
+ void showEvent(QShowEvent *e) Q_DECL_OVERRIDE;
+ void changeEvent(QEvent *) Q_DECL_OVERRIDE;
private:
diff --git a/src/widgets/widgets/qtoolbutton.h b/src/widgets/widgets/qtoolbutton.h
index 922ea09abd..5301a8b22b 100644
--- a/src/widgets/widgets/qtoolbutton.h
+++ b/src/widgets/widgets/qtoolbutton.h
@@ -66,8 +66,8 @@ public:
explicit QToolButton(QWidget * parent=0);
~QToolButton();
- QSize sizeHint() const;
- QSize minimumSizeHint() const;
+ QSize sizeHint() const Q_DECL_OVERRIDE;
+ QSize minimumSizeHint() const Q_DECL_OVERRIDE;
Qt::ToolButtonStyle toolButtonStyle() const;
@@ -98,19 +98,19 @@ Q_SIGNALS:
void triggered(QAction *);
protected:
- bool event(QEvent *e);
- void mousePressEvent(QMouseEvent *);
- void mouseReleaseEvent(QMouseEvent *);
- void paintEvent(QPaintEvent *);
- void actionEvent(QActionEvent *);
-
- void enterEvent(QEvent *);
- void leaveEvent(QEvent *);
- void timerEvent(QTimerEvent *);
- void changeEvent(QEvent *);
-
- bool hitButton(const QPoint &pos) const;
- void nextCheckState();
+ bool event(QEvent *e) Q_DECL_OVERRIDE;
+ void mousePressEvent(QMouseEvent *) Q_DECL_OVERRIDE;
+ void mouseReleaseEvent(QMouseEvent *) Q_DECL_OVERRIDE;
+ void paintEvent(QPaintEvent *) Q_DECL_OVERRIDE;
+ void actionEvent(QActionEvent *) Q_DECL_OVERRIDE;
+
+ void enterEvent(QEvent *) Q_DECL_OVERRIDE;
+ void leaveEvent(QEvent *) Q_DECL_OVERRIDE;
+ void timerEvent(QTimerEvent *) Q_DECL_OVERRIDE;
+ void changeEvent(QEvent *) Q_DECL_OVERRIDE;
+
+ bool hitButton(const QPoint &pos) const Q_DECL_OVERRIDE;
+ void nextCheckState() Q_DECL_OVERRIDE;
void initStyleOption(QStyleOptionToolButton *option) const;
private:
diff --git a/src/widgets/widgets/qwidgetlinecontrol_p.h b/src/widgets/widgets/qwidgetlinecontrol_p.h
index 49d9413fc0..1baceb9cc2 100644
--- a/src/widgets/widgets/qwidgetlinecontrol_p.h
+++ b/src/widgets/widgets/qwidgetlinecontrol_p.h
@@ -532,7 +532,7 @@ Q_SIGNALS:
void editFocusChange(bool);
#endif
protected:
- virtual void timerEvent(QTimerEvent *event);
+ virtual void timerEvent(QTimerEvent *event) Q_DECL_OVERRIDE;
private Q_SLOTS:
void _q_clipboardChanged();
diff --git a/src/widgets/widgets/qwidgetresizehandler_p.h b/src/widgets/widgets/qwidgetresizehandler_p.h
index 5b165aa7be..5c9bb50bd4 100644
--- a/src/widgets/widgets/qwidgetresizehandler_p.h
+++ b/src/widgets/widgets/qwidgetresizehandler_p.h
@@ -88,7 +88,7 @@ Q_SIGNALS:
void activate();
protected:
- bool eventFilter(QObject *o, QEvent *e);
+ bool eventFilter(QObject *o, QEvent *e) Q_DECL_OVERRIDE;
void mouseMoveEvent(QMouseEvent *e);
void keyPressEvent(QKeyEvent *e);
diff --git a/src/widgets/widgets/qwidgettextcontrol.cpp b/src/widgets/widgets/qwidgettextcontrol.cpp
index 8c48533a03..eabaa160a0 100644
--- a/src/widgets/widgets/qwidgettextcontrol.cpp
+++ b/src/widgets/widgets/qwidgettextcontrol.cpp
@@ -1312,8 +1312,10 @@ void QWidgetTextControlPrivate::keyPressEvent(QKeyEvent *e)
else if (e == QKeySequence::Delete) {
QTextCursor localCursor = cursor;
localCursor.deleteChar();
- }
- else if (e == QKeySequence::DeleteEndOfWord) {
+ } else if (e == QKeySequence::Backspace) {
+ QTextCursor localCursor = cursor;
+ localCursor.deletePreviousChar();
+ }else if (e == QKeySequence::DeleteEndOfWord) {
if (!cursor.hasSelection())
cursor.movePosition(QTextCursor::NextWord, QTextCursor::KeepAnchor);
cursor.removeSelectedText();
diff --git a/src/widgets/widgets/qwidgettextcontrol_p.h b/src/widgets/widgets/qwidgettextcontrol_p.h
index 949201e8a8..79f4e404a2 100644
--- a/src/widgets/widgets/qwidgettextcontrol_p.h
+++ b/src/widgets/widgets/qwidgettextcontrol_p.h
@@ -242,9 +242,9 @@ public:
bool findNextPrevAnchor(const QTextCursor& from, bool next, QTextCursor& newAnchor);
protected:
- virtual void timerEvent(QTimerEvent *e);
+ virtual void timerEvent(QTimerEvent *e) Q_DECL_OVERRIDE;
- virtual bool event(QEvent *e);
+ virtual bool event(QEvent *e) Q_DECL_OVERRIDE;
private:
Q_DISABLE_COPY(QWidgetTextControl)
@@ -280,9 +280,9 @@ class QTextEditMimeData : public QMimeData
public:
inline QTextEditMimeData(const QTextDocumentFragment &aFragment) : fragment(aFragment) {}
- virtual QStringList formats() const;
+ virtual QStringList formats() const Q_DECL_OVERRIDE;
protected:
- virtual QVariant retrieveData(const QString &mimeType, QVariant::Type type) const;
+ virtual QVariant retrieveData(const QString &mimeType, QVariant::Type type) const Q_DECL_OVERRIDE;
private:
void setup() const;
diff --git a/src/xml/dom/qdom.cpp b/src/xml/dom/qdom.cpp
index 1fcbe607e4..de4c499c11 100644
--- a/src/xml/dom/qdom.cpp
+++ b/src/xml/dom/qdom.cpp
@@ -285,16 +285,16 @@ public:
void init();
// Reimplemented from QDomNodePrivate
- QDomNodePrivate* cloneNode(bool deep = true);
- QDomNodePrivate* insertBefore(QDomNodePrivate* newChild, QDomNodePrivate* refChild);
- QDomNodePrivate* insertAfter(QDomNodePrivate* newChild, QDomNodePrivate* refChild);
- QDomNodePrivate* replaceChild(QDomNodePrivate* newChild, QDomNodePrivate* oldChild);
- QDomNodePrivate* removeChild(QDomNodePrivate* oldChild);
- QDomNodePrivate* appendChild(QDomNodePrivate* newChild);
+ QDomNodePrivate* cloneNode(bool deep = true) Q_DECL_OVERRIDE;
+ QDomNodePrivate* insertBefore(QDomNodePrivate* newChild, QDomNodePrivate* refChild) Q_DECL_OVERRIDE;
+ QDomNodePrivate* insertAfter(QDomNodePrivate* newChild, QDomNodePrivate* refChild) Q_DECL_OVERRIDE;
+ QDomNodePrivate* replaceChild(QDomNodePrivate* newChild, QDomNodePrivate* oldChild) Q_DECL_OVERRIDE;
+ QDomNodePrivate* removeChild(QDomNodePrivate* oldChild) Q_DECL_OVERRIDE;
+ QDomNodePrivate* appendChild(QDomNodePrivate* newChild) Q_DECL_OVERRIDE;
- QDomNode::NodeType nodeType() const { return QDomNode::DocumentTypeNode; }
+ QDomNode::NodeType nodeType() const Q_DECL_OVERRIDE { return QDomNode::DocumentTypeNode; }
- void save(QTextStream& s, int, int) const;
+ void save(QTextStream& s, int, int) const Q_DECL_OVERRIDE;
// Variables
QDomNamedNodeMapPrivate* entities;
@@ -311,8 +311,8 @@ public:
QDomDocumentFragmentPrivate(QDomNodePrivate* n, bool deep);
// Reimplemented from QDomNodePrivate
- virtual QDomNodePrivate* cloneNode(bool deep = true);
- QDomNode::NodeType nodeType() const { return QDomNode::DocumentFragmentNode; }
+ virtual QDomNodePrivate* cloneNode(bool deep = true) Q_DECL_OVERRIDE;
+ QDomNode::NodeType nodeType() const Q_DECL_OVERRIDE { return QDomNode::DocumentFragmentNode; }
};
class QDomCharacterDataPrivate : public QDomNodePrivate
@@ -329,8 +329,8 @@ public:
void replaceData(unsigned long offset, unsigned long count, const QString& arg);
// Reimplemented from QDomNodePrivate
- QDomNode::NodeType nodeType() const { return QDomNode::CharacterDataNode; }
- QDomNodePrivate* cloneNode(bool deep = true);
+ QDomNode::NodeType nodeType() const Q_DECL_OVERRIDE { return QDomNode::CharacterDataNode; }
+ QDomNodePrivate* cloneNode(bool deep = true) Q_DECL_OVERRIDE;
};
class QDomTextPrivate : public QDomCharacterDataPrivate
@@ -342,9 +342,9 @@ public:
QDomTextPrivate* splitText(int offset);
// Reimplemented from QDomNodePrivate
- QDomNodePrivate* cloneNode(bool deep = true);
- QDomNode::NodeType nodeType() const { return QDomNode::TextNode; }
- virtual void save(QTextStream& s, int, int) const;
+ QDomNodePrivate* cloneNode(bool deep = true) Q_DECL_OVERRIDE;
+ QDomNode::NodeType nodeType() const Q_DECL_OVERRIDE { return QDomNode::TextNode; }
+ virtual void save(QTextStream& s, int, int) const Q_DECL_OVERRIDE;
};
class QDomAttrPrivate : public QDomNodePrivate
@@ -357,10 +357,10 @@ public:
bool specified() const;
// Reimplemented from QDomNodePrivate
- void setNodeValue(const QString& v);
- QDomNodePrivate* cloneNode(bool deep = true);
- QDomNode::NodeType nodeType() const { return QDomNode::AttributeNode; }
- virtual void save(QTextStream& s, int, int) const;
+ void setNodeValue(const QString& v) Q_DECL_OVERRIDE;
+ QDomNodePrivate* cloneNode(bool deep = true) Q_DECL_OVERRIDE;
+ QDomNode::NodeType nodeType() const Q_DECL_OVERRIDE { return QDomNode::AttributeNode; }
+ virtual void save(QTextStream& s, int, int) const Q_DECL_OVERRIDE;
// Variables
bool m_specified;
@@ -392,9 +392,9 @@ public:
// Reimplemented from QDomNodePrivate
QDomNamedNodeMapPrivate* attributes() { return m_attr; }
bool hasAttributes() { return (m_attr->length() > 0); }
- QDomNode::NodeType nodeType() const { return QDomNode::ElementNode; }
- QDomNodePrivate* cloneNode(bool deep = true);
- virtual void save(QTextStream& s, int, int) const;
+ QDomNode::NodeType nodeType() const Q_DECL_OVERRIDE { return QDomNode::ElementNode; }
+ QDomNodePrivate* cloneNode(bool deep = true) Q_DECL_OVERRIDE;
+ virtual void save(QTextStream& s, int, int) const Q_DECL_OVERRIDE;
// Variables
QDomNamedNodeMapPrivate* m_attr;
@@ -408,9 +408,9 @@ public:
QDomCommentPrivate(QDomCommentPrivate* n, bool deep);
// Reimplemented from QDomNodePrivate
- QDomNodePrivate* cloneNode(bool deep = true);
- QDomNode::NodeType nodeType() const { return QDomNode::CommentNode; }
- virtual void save(QTextStream& s, int, int) const;
+ QDomNodePrivate* cloneNode(bool deep = true) Q_DECL_OVERRIDE;
+ QDomNode::NodeType nodeType() const Q_DECL_OVERRIDE { return QDomNode::CommentNode; }
+ virtual void save(QTextStream& s, int, int) const Q_DECL_OVERRIDE;
};
class QDomCDATASectionPrivate : public QDomTextPrivate
@@ -420,9 +420,9 @@ public:
QDomCDATASectionPrivate(QDomCDATASectionPrivate* n, bool deep);
// Reimplemented from QDomNodePrivate
- QDomNodePrivate* cloneNode(bool deep = true);
- QDomNode::NodeType nodeType() const { return QDomNode::CDATASectionNode; }
- virtual void save(QTextStream& s, int, int) const;
+ QDomNodePrivate* cloneNode(bool deep = true) Q_DECL_OVERRIDE;
+ QDomNode::NodeType nodeType() const Q_DECL_OVERRIDE { return QDomNode::CDATASectionNode; }
+ virtual void save(QTextStream& s, int, int) const Q_DECL_OVERRIDE;
};
class QDomNotationPrivate : public QDomNodePrivate
@@ -433,9 +433,9 @@ public:
QDomNotationPrivate(QDomNotationPrivate* n, bool deep);
// Reimplemented from QDomNodePrivate
- QDomNodePrivate* cloneNode(bool deep = true);
- QDomNode::NodeType nodeType() const { return QDomNode::NotationNode; }
- virtual void save(QTextStream& s, int, int) const;
+ QDomNodePrivate* cloneNode(bool deep = true) Q_DECL_OVERRIDE;
+ QDomNode::NodeType nodeType() const Q_DECL_OVERRIDE { return QDomNode::NotationNode; }
+ virtual void save(QTextStream& s, int, int) const Q_DECL_OVERRIDE;
// Variables
QString m_sys;
@@ -450,9 +450,9 @@ public:
QDomEntityPrivate(QDomEntityPrivate* n, bool deep);
// Reimplemented from QDomNodePrivate
- QDomNodePrivate* cloneNode(bool deep = true);
- QDomNode::NodeType nodeType() const { return QDomNode::EntityNode; }
- virtual void save(QTextStream& s, int, int) const;
+ QDomNodePrivate* cloneNode(bool deep = true) Q_DECL_OVERRIDE;
+ QDomNode::NodeType nodeType() const Q_DECL_OVERRIDE { return QDomNode::EntityNode; }
+ virtual void save(QTextStream& s, int, int) const Q_DECL_OVERRIDE;
// Variables
QString m_sys;
@@ -467,9 +467,9 @@ public:
QDomEntityReferencePrivate(QDomNodePrivate* n, bool deep);
// Reimplemented from QDomNodePrivate
- QDomNodePrivate* cloneNode(bool deep = true);
- QDomNode::NodeType nodeType() const { return QDomNode::EntityReferenceNode; }
- virtual void save(QTextStream& s, int, int) const;
+ QDomNodePrivate* cloneNode(bool deep = true) Q_DECL_OVERRIDE;
+ QDomNode::NodeType nodeType() const Q_DECL_OVERRIDE { return QDomNode::EntityReferenceNode; }
+ virtual void save(QTextStream& s, int, int) const Q_DECL_OVERRIDE;
};
class QDomProcessingInstructionPrivate : public QDomNodePrivate
@@ -480,9 +480,9 @@ public:
QDomProcessingInstructionPrivate(QDomProcessingInstructionPrivate* n, bool deep);
// Reimplemented from QDomNodePrivate
- QDomNodePrivate* cloneNode(bool deep = true);
- QDomNode::NodeType nodeType() const { return QDomNode::ProcessingInstructionNode; }
- virtual void save(QTextStream& s, int, int) const;
+ QDomNodePrivate* cloneNode(bool deep = true) Q_DECL_OVERRIDE;
+ QDomNode::NodeType nodeType() const Q_DECL_OVERRIDE { return QDomNode::ProcessingInstructionNode; }
+ virtual void save(QTextStream& s, int, int) const Q_DECL_OVERRIDE;
};
class QDomDocumentPrivate : public QDomNodePrivate
@@ -517,9 +517,9 @@ public:
QDomNodePrivate* importNode(const QDomNodePrivate* importedNode, bool deep);
// Reimplemented from QDomNodePrivate
- QDomNodePrivate* cloneNode(bool deep = true);
- QDomNode::NodeType nodeType() const { return QDomNode::DocumentNode; }
- void clear();
+ QDomNodePrivate* cloneNode(bool deep = true) Q_DECL_OVERRIDE;
+ QDomNode::NodeType nodeType() const Q_DECL_OVERRIDE { return QDomNode::DocumentNode; }
+ void clear() Q_DECL_OVERRIDE;
// Variables
QExplicitlySharedDataPointer<QDomImplementationPrivate> impl;
@@ -570,32 +570,32 @@ public:
~QDomHandler();
// content handler
- bool endDocument();
- bool startElement(const QString& nsURI, const QString& localName, const QString& qName, const QXmlAttributes& atts);
- bool endElement(const QString& nsURI, const QString& localName, const QString& qName);
- bool characters(const QString& ch);
- bool processingInstruction(const QString& target, const QString& data);
- bool skippedEntity(const QString& name);
+ bool endDocument() Q_DECL_OVERRIDE;
+ bool startElement(const QString& nsURI, const QString& localName, const QString& qName, const QXmlAttributes& atts) Q_DECL_OVERRIDE;
+ bool endElement(const QString& nsURI, const QString& localName, const QString& qName) Q_DECL_OVERRIDE;
+ bool characters(const QString& ch) Q_DECL_OVERRIDE;
+ bool processingInstruction(const QString& target, const QString& data) Q_DECL_OVERRIDE;
+ bool skippedEntity(const QString& name) Q_DECL_OVERRIDE;
// error handler
- bool fatalError(const QXmlParseException& exception);
+ bool fatalError(const QXmlParseException& exception) Q_DECL_OVERRIDE;
// lexical handler
- bool startCDATA();
- bool endCDATA();
- bool startEntity(const QString &);
- bool endEntity(const QString &);
- bool startDTD(const QString& name, const QString& publicId, const QString& systemId);
- bool comment(const QString& ch);
+ bool startCDATA() Q_DECL_OVERRIDE;
+ bool endCDATA() Q_DECL_OVERRIDE;
+ bool startEntity(const QString &) Q_DECL_OVERRIDE;
+ bool endEntity(const QString &) Q_DECL_OVERRIDE;
+ bool startDTD(const QString& name, const QString& publicId, const QString& systemId) Q_DECL_OVERRIDE;
+ bool comment(const QString& ch) Q_DECL_OVERRIDE;
// decl handler
- bool externalEntityDecl(const QString &name, const QString &publicId, const QString &systemId) ;
+ bool externalEntityDecl(const QString &name, const QString &publicId, const QString &systemId) Q_DECL_OVERRIDE ;
// DTD handler
- bool notationDecl(const QString & name, const QString & publicId, const QString & systemId);
- bool unparsedEntityDecl(const QString &name, const QString &publicId, const QString &systemId, const QString &notationName) ;
+ bool notationDecl(const QString & name, const QString & publicId, const QString & systemId) Q_DECL_OVERRIDE;
+ bool unparsedEntityDecl(const QString &name, const QString &publicId, const QString &systemId, const QString &notationName) Q_DECL_OVERRIDE ;
- void setDocumentLocator(QXmlLocator *locator);
+ void setDocumentLocator(QXmlLocator *locator) Q_DECL_OVERRIDE;
QString errorMsg;
int errorLine;
@@ -7035,6 +7035,9 @@ QDomNodeList QDomDocument::elementsByTagName(const QString& tagname) const
import QDomDocument and QDomDocumentType nodes. In those cases
this function returns a \l{QDomNode::isNull()}{null node}.
+ If \a importedNode is a \l{QDomNode::isNull()}{null node},
+ a null node is returned.
+
If \a deep is true, this function imports not only the node \a
importedNode but its whole subtree; if it is false, only the \a
importedNode is imported. The argument \a deep has no effect on
@@ -7093,6 +7096,8 @@ QDomNodeList QDomDocument::elementsByTagName(const QString& tagname) const
*/
QDomNode QDomDocument::importNode(const QDomNode& importedNode, bool deep)
{
+ if (importedNode.isNull())
+ return QDomNode();
if (!impl)
impl = new QDomDocumentPrivate();
return QDomNode(IMPL->importNode(importedNode.impl, deep));
diff --git a/src/xml/sax/qxml.cpp b/src/xml/sax/qxml.cpp
index 106bdf2dec..a77c70787d 100644
--- a/src/xml/sax/qxml.cpp
+++ b/src/xml/sax/qxml.cpp
@@ -434,11 +434,11 @@ public:
{
}
- int columnNumber() const
+ int columnNumber() const Q_DECL_OVERRIDE
{
return (reader->d_ptr->columnNr == -1 ? -1 : reader->d_ptr->columnNr + 1);
}
- int lineNumber() const
+ int lineNumber() const Q_DECL_OVERRIDE
{
return (reader->d_ptr->lineNr == -1 ? -1 : reader->d_ptr->lineNr + 1);
}
diff --git a/src/xml/sax/qxml.h b/src/xml/sax/qxml.h
index d583388856..4a571194b4 100644
--- a/src/xml/sax/qxml.h
+++ b/src/xml/sax/qxml.h
@@ -229,29 +229,29 @@ public:
QXmlSimpleReader();
virtual ~QXmlSimpleReader();
- bool feature(const QString& name, bool *ok = 0) const;
- void setFeature(const QString& name, bool value);
- bool hasFeature(const QString& name) const;
-
- void* property(const QString& name, bool *ok = 0) const;
- void setProperty(const QString& name, void* value);
- bool hasProperty(const QString& name) const;
-
- void setEntityResolver(QXmlEntityResolver* handler);
- QXmlEntityResolver* entityResolver() const;
- void setDTDHandler(QXmlDTDHandler* handler);
- QXmlDTDHandler* DTDHandler() const;
- void setContentHandler(QXmlContentHandler* handler);
- QXmlContentHandler* contentHandler() const;
- void setErrorHandler(QXmlErrorHandler* handler);
- QXmlErrorHandler* errorHandler() const;
- void setLexicalHandler(QXmlLexicalHandler* handler);
- QXmlLexicalHandler* lexicalHandler() const;
- void setDeclHandler(QXmlDeclHandler* handler);
- QXmlDeclHandler* declHandler() const;
-
- bool parse(const QXmlInputSource& input);
- bool parse(const QXmlInputSource* input);
+ bool feature(const QString& name, bool *ok = 0) const Q_DECL_OVERRIDE;
+ void setFeature(const QString& name, bool value) Q_DECL_OVERRIDE;
+ bool hasFeature(const QString& name) const Q_DECL_OVERRIDE;
+
+ void* property(const QString& name, bool *ok = 0) const Q_DECL_OVERRIDE;
+ void setProperty(const QString& name, void* value) Q_DECL_OVERRIDE;
+ bool hasProperty(const QString& name) const Q_DECL_OVERRIDE;
+
+ void setEntityResolver(QXmlEntityResolver* handler) Q_DECL_OVERRIDE;
+ QXmlEntityResolver* entityResolver() const Q_DECL_OVERRIDE;
+ void setDTDHandler(QXmlDTDHandler* handler) Q_DECL_OVERRIDE;
+ QXmlDTDHandler* DTDHandler() const Q_DECL_OVERRIDE;
+ void setContentHandler(QXmlContentHandler* handler) Q_DECL_OVERRIDE;
+ QXmlContentHandler* contentHandler() const Q_DECL_OVERRIDE;
+ void setErrorHandler(QXmlErrorHandler* handler) Q_DECL_OVERRIDE;
+ QXmlErrorHandler* errorHandler() const Q_DECL_OVERRIDE;
+ void setLexicalHandler(QXmlLexicalHandler* handler) Q_DECL_OVERRIDE;
+ QXmlLexicalHandler* lexicalHandler() const Q_DECL_OVERRIDE;
+ void setDeclHandler(QXmlDeclHandler* handler) Q_DECL_OVERRIDE;
+ QXmlDeclHandler* declHandler() const Q_DECL_OVERRIDE;
+
+ bool parse(const QXmlInputSource& input) Q_DECL_OVERRIDE;
+ bool parse(const QXmlInputSource* input) Q_DECL_OVERRIDE;
virtual bool parse(const QXmlInputSource* input, bool incremental);
virtual bool parseContinue();
@@ -361,40 +361,40 @@ public:
QXmlDefaultHandler();
virtual ~QXmlDefaultHandler();
- void setDocumentLocator(QXmlLocator* locator);
- bool startDocument();
- bool endDocument();
- bool startPrefixMapping(const QString& prefix, const QString& uri);
- bool endPrefixMapping(const QString& prefix);
- bool startElement(const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& atts);
- bool endElement(const QString& namespaceURI, const QString& localName, const QString& qName);
- bool characters(const QString& ch);
- bool ignorableWhitespace(const QString& ch);
- bool processingInstruction(const QString& target, const QString& data);
- bool skippedEntity(const QString& name);
-
- bool warning(const QXmlParseException& exception);
- bool error(const QXmlParseException& exception);
- bool fatalError(const QXmlParseException& exception);
-
- bool notationDecl(const QString& name, const QString& publicId, const QString& systemId);
- bool unparsedEntityDecl(const QString& name, const QString& publicId, const QString& systemId, const QString& notationName);
-
- bool resolveEntity(const QString& publicId, const QString& systemId, QXmlInputSource*& ret);
-
- bool startDTD(const QString& name, const QString& publicId, const QString& systemId);
- bool endDTD();
- bool startEntity(const QString& name);
- bool endEntity(const QString& name);
- bool startCDATA();
- bool endCDATA();
- bool comment(const QString& ch);
-
- bool attributeDecl(const QString& eName, const QString& aName, const QString& type, const QString& valueDefault, const QString& value);
- bool internalEntityDecl(const QString& name, const QString& value);
- bool externalEntityDecl(const QString& name, const QString& publicId, const QString& systemId);
-
- QString errorString() const;
+ void setDocumentLocator(QXmlLocator* locator) Q_DECL_OVERRIDE;
+ bool startDocument() Q_DECL_OVERRIDE;
+ bool endDocument() Q_DECL_OVERRIDE;
+ bool startPrefixMapping(const QString& prefix, const QString& uri) Q_DECL_OVERRIDE;
+ bool endPrefixMapping(const QString& prefix) Q_DECL_OVERRIDE;
+ bool startElement(const QString& namespaceURI, const QString& localName, const QString& qName, const QXmlAttributes& atts) Q_DECL_OVERRIDE;
+ bool endElement(const QString& namespaceURI, const QString& localName, const QString& qName) Q_DECL_OVERRIDE;
+ bool characters(const QString& ch) Q_DECL_OVERRIDE;
+ bool ignorableWhitespace(const QString& ch) Q_DECL_OVERRIDE;
+ bool processingInstruction(const QString& target, const QString& data) Q_DECL_OVERRIDE;
+ bool skippedEntity(const QString& name) Q_DECL_OVERRIDE;
+
+ bool warning(const QXmlParseException& exception) Q_DECL_OVERRIDE;
+ bool error(const QXmlParseException& exception) Q_DECL_OVERRIDE;
+ bool fatalError(const QXmlParseException& exception) Q_DECL_OVERRIDE;
+
+ bool notationDecl(const QString& name, const QString& publicId, const QString& systemId) Q_DECL_OVERRIDE;
+ bool unparsedEntityDecl(const QString& name, const QString& publicId, const QString& systemId, const QString& notationName) Q_DECL_OVERRIDE;
+
+ bool resolveEntity(const QString& publicId, const QString& systemId, QXmlInputSource*& ret) Q_DECL_OVERRIDE;
+
+ bool startDTD(const QString& name, const QString& publicId, const QString& systemId) Q_DECL_OVERRIDE;
+ bool endDTD() Q_DECL_OVERRIDE;
+ bool startEntity(const QString& name) Q_DECL_OVERRIDE;
+ bool endEntity(const QString& name) Q_DECL_OVERRIDE;
+ bool startCDATA() Q_DECL_OVERRIDE;
+ bool endCDATA() Q_DECL_OVERRIDE;
+ bool comment(const QString& ch) Q_DECL_OVERRIDE;
+
+ bool attributeDecl(const QString& eName, const QString& aName, const QString& type, const QString& valueDefault, const QString& value) Q_DECL_OVERRIDE;
+ bool internalEntityDecl(const QString& name, const QString& value) Q_DECL_OVERRIDE;
+ bool externalEntityDecl(const QString& name, const QString& publicId, const QString& systemId) Q_DECL_OVERRIDE;
+
+ QString errorString() const Q_DECL_OVERRIDE;
private:
QXmlDefaultHandlerPrivate *d;