qtbindings 4.6.3.4 → 4.8.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. data/KNOWN_ISSUES.txt +19 -5
  2. data/README.txt +119 -93
  3. data/Rakefile +28 -27
  4. data/examples/desktop/systray/window.rb +43 -47
  5. data/examples/draganddrop/dropsite/dropsitewidget.rb +10 -9
  6. data/examples/mainwindows/mdi/mainwindow.rb +4 -4
  7. data/examples/network/broadcastsender/sender.rb +3 -1
  8. data/examples/qtscribble/scribble.rb +270 -0
  9. data/examples/ruboids/LICENSE.txt +58 -0
  10. data/examples/run_all.rb +1 -0
  11. data/examples/textedit/textedit.rb +150 -0
  12. data/examples/widgets/scribble/scribblearea.rb +19 -19
  13. data/ext/cmake/modules/BasicFindPackageVersion.cmake.in +30 -0
  14. data/ext/cmake/modules/FindLibraryWithDebug.cmake +113 -0
  15. data/ext/cmake/modules/FindPhonon.cmake +71 -0
  16. data/ext/cmake/modules/FindQImageBlitz.cmake +51 -0
  17. data/ext/cmake/modules/FindRuby.cmake +17 -17
  18. data/ext/cmake/modules/MacroOptionalFindPackage.cmake +6 -26
  19. data/ext/cmake/modules/MacroWriteBasicCMakeVersionFile.cmake +22 -0
  20. data/ext/cmake/modules/SmokeConfig.cmake.in +109 -0
  21. data/ext/generator/cmake/BasicFindPackageVersion.cmake.in +30 -0
  22. data/ext/generator/cmake/CMakeLists.txt +24 -0
  23. data/ext/generator/cmake/FindLibraryWithDebug.cmake +113 -0
  24. data/ext/generator/cmake/FindPhonon.cmake +71 -0
  25. data/ext/generator/cmake/FindQImageBlitz.cmake +51 -0
  26. data/ext/generator/cmake/FindQScintilla.cmake +57 -0
  27. data/ext/generator/cmake/FindQwt5.cmake +104 -0
  28. data/ext/generator/cmake/HandleImportedTargetsInCMakeRequiredLibraries.cmake +85 -0
  29. data/ext/generator/cmake/MacroLogFeature.cmake +146 -0
  30. data/ext/generator/cmake/MacroOptionalAddBindings.cmake +47 -0
  31. data/ext/generator/cmake/MacroOptionalFindPackage.cmake +28 -0
  32. data/ext/generator/cmake/MacroWriteBasicCMakeVersionFile.cmake +22 -0
  33. data/ext/generator/cmake/SmokeConfig.cmake.in +109 -0
  34. data/ext/generator/config.h +25 -0
  35. data/ext/generator/generatorpreprocessor.cpp +60 -41
  36. data/ext/generator/generators/dump/CMakeLists.txt +5 -0
  37. data/ext/generator/generators/smoke/CMakeLists.txt +5 -0
  38. data/ext/generator/generators/smoke/globals.h +3 -1
  39. data/ext/generator/generators/smoke/helpers.cpp +21 -2
  40. data/ext/generator/generators/smoke/writeSmokeDataFile.cpp +26 -1
  41. data/ext/generator/main.cpp +5 -1
  42. data/ext/generator/options.cpp +1 -0
  43. data/ext/generator/options.h +1 -0
  44. data/ext/generator/parser/CMakeLists.txt +10 -1
  45. data/ext/generator/parser/parser.cpp +6 -6
  46. data/ext/generator/parser/parser.h +2 -12
  47. data/ext/generator/parser/parsesession.cpp +1 -0
  48. data/ext/generator/parser/rpp/CMakeLists.txt +6 -0
  49. data/ext/generator/parser/rpp/chartools.cpp +3 -3
  50. data/ext/generator/parser/rpp/chartools.h +3 -1
  51. data/ext/generator/parser/rpp/pp-scanner.cpp +2 -1
  52. data/ext/generator/parser/rpp/tests/CMakeLists.txt +4 -0
  53. data/ext/generator/parser/tests/CMakeLists.txt +16 -0
  54. data/ext/generator/smoke.h +557 -0
  55. data/ext/generator/smokegen_string.h +43 -0
  56. data/ext/generator/type.cpp +15 -6
  57. data/ext/generator/type_compiler.cpp +2 -0
  58. data/ext/ruby/qtruby/src/qtruby.cpp +147 -143
  59. data/ext/ruby/qttest/qttesthandlers.cpp +1 -0
  60. data/ext/smoke/qtcore/QtGuess.txt +23 -25
  61. data/ext/smoke/qtcore/smokeconfig.xml +1 -0
  62. data/ext/smoke/qtdbus/smokeconfig.xml +2 -0
  63. data/ext/smoke/qtgui/smokeconfig.xml +14 -4
  64. data/ext/smoke/qthelp/smokeconfig.xml +1 -0
  65. data/ext/smoke/qtmultimedia/smokeconfig.xml +1 -0
  66. data/ext/smoke/qtnetwork/smokeconfig.xml +2 -0
  67. data/ext/smoke/qtopengl/smokeconfig.xml +1 -0
  68. data/ext/smoke/qtsql/smokeconfig.xml +1 -0
  69. data/ext/smoke/qtsvg/smokeconfig.xml +1 -0
  70. data/ext/smoke/qtwebkit/smokeconfig.xml +3 -0
  71. data/extconf.rb +37 -23
  72. data/lib/Qt/qtruby4.rb +4 -4
  73. data/lib/Qt4.rb +1 -1
  74. data/lib/qtbindings_version.rb +2 -2
  75. metadata +50 -40
@@ -0,0 +1,43 @@
1
+ // smokegen uses this file instead of /usr/include/string.h because
2
+ // it chokes on some of gcc's language additions.
3
+
4
+ #ifndef _STRING_H
5
+ #define _STRING_H 1
6
+
7
+ #include <stddef.h>
8
+
9
+ void *memccpy(void *, const void *, int, size_t);
10
+
11
+ void *memchr(const void *, int, size_t);
12
+ int memcmp(const void *, const void *, size_t);
13
+ void *memcpy(void *, const void *, size_t);
14
+ void *memmove(void *, const void *, size_t);
15
+ void *memset(void *, int, size_t);
16
+ char *strcat(char *, const char *);
17
+ char *strchr(const char *, int);
18
+ int strcmp(const char *, const char *);
19
+ int strcoll(const char *, const char *);
20
+ char *strcpy(char *, const char *);
21
+ size_t strcspn(const char *, const char *);
22
+
23
+ char *strdup(const char *);
24
+
25
+ char *strerror(int);
26
+
27
+ int *strerror_r(int, char *, size_t);
28
+
29
+ size_t strlen(const char *);
30
+ char *strncat(char *, const char *, size_t);
31
+ int strncmp(const char *, const char *, size_t);
32
+ char *strncpy(char *, const char *, size_t);
33
+ char *strpbrk(const char *, const char *);
34
+ char *strrchr(const char *, int);
35
+ size_t strspn(const char *, const char *);
36
+ char *strstr(const char *, const char *);
37
+ char *strtok(char *, const char *);
38
+
39
+ char *strtok_r(char *, const char *, char **);
40
+
41
+ size_t strxfrm(char *, const char *, size_t);
42
+
43
+ #endif // _STRING_H
@@ -17,6 +17,7 @@
17
17
  */
18
18
 
19
19
  #include "type.h"
20
+ #include "options.h"
20
21
 
21
22
  QHash<QString, Class> classes;
22
23
  QHash<QString, Typedef> typedefs;
@@ -104,11 +105,12 @@ Type* Type::registerType(const Type& type)
104
105
  Type Typedef::resolve() const {
105
106
  bool isRef = false, isConst = false, isVolatile = false;
106
107
  QList<bool> pointerDepth;
107
- const Type* t = this->type();
108
- for (int i = 0; i < t->pointerDepth(); i++) {
109
- pointerDepth.append(t->isConstPointer(i));
110
- }
111
- while (t->getTypedef()) {
108
+
109
+ // not pretty, but safe. 'this' (without const) will never be returned or modified from here on.
110
+ const Type tmp(const_cast<Typedef*>(this));
111
+ const Type* t = &tmp;
112
+
113
+ while (t->getTypedef() && !ParserOptions::notToBeResolved.contains(t->getTypedef()->name())) {
112
114
  if (!isRef) isRef = t->isRef();
113
115
  if (!isConst) isConst = t->isConst();
114
116
  if (!isVolatile) isVolatile = t->isVolatile();
@@ -118,10 +120,17 @@ Type Typedef::resolve() const {
118
120
  }
119
121
  }
120
122
  Type ret = *t;
123
+
124
+ // not fully resolved -> erase the typedef pointer and only set a name
125
+ if (ret.getTypedef()) {
126
+ ret.setName(ret.getTypedef()->name());
127
+ ret.setTypedef(0);
128
+ }
129
+
121
130
  if (isRef) ret.setIsRef(true);
122
131
  if (isConst) ret.setIsConst(true);
123
132
  if (isVolatile) ret.setIsVolatile(true);
124
-
133
+
125
134
  ret.setPointerDepth(pointerDepth.count());
126
135
  for (int i = 0; i < pointerDepth.count(); i++) {
127
136
  ret.setIsConstPointer(i, pointerDepth[i]);
@@ -191,6 +191,8 @@ void TypeCompiler::visitParameterDeclaration(ParameterDeclarationAST* node)
191
191
 
192
192
  void TypeCompiler::visitPtrOperator(PtrOperatorAST* node)
193
193
  {
194
+ if ( ! m_session->token_stream ) return;
195
+ if ( ! token_text(m_session->token_stream->kind(node->op)) ) return;
194
196
  if (token_text(m_session->token_stream->kind(node->op))[0] == '*') {
195
197
  QPair<bool, bool> cv = m_visitor->parseCv(node->cv);
196
198
  pointerDepth.append(cv.first);
@@ -15,28 +15,28 @@
15
15
  * *
16
16
  ***************************************************************************/
17
17
 
18
- #include <QtCore/qabstractitemmodel.h>
18
+ #include <QtCore/qabstractitemmodel.h>
19
19
  #include <QtCore/qglobal.h>
20
20
  #include <QtCore/qhash.h>
21
- #include <QtCore/qline.h>
21
+ #include <QtCore/qline.h>
22
22
  #include <QtCore/qmetaobject.h>
23
23
  #include <QtCore/qobject.h>
24
- #include <QtCore/qrect.h>
24
+ #include <QtCore/qrect.h>
25
25
  #include <QtCore/qregexp.h>
26
26
  #include <QtCore/qstring.h>
27
27
  #include <QtCore/qvariant.h>
28
28
  #include <QtGui/qapplication.h>
29
- #include <QtGui/qbitmap.h>
30
- #include <QtGui/qcolor.h>
29
+ #include <QtGui/qbitmap.h>
30
+ #include <QtGui/qcolor.h>
31
31
  #include <QtGui/qcursor.h>
32
- #include <QtGui/qfont.h>
33
- #include <QtGui/qicon.h>
32
+ #include <QtGui/qfont.h>
33
+ #include <QtGui/qicon.h>
34
34
  #include <QtGui/qitemselectionmodel.h>
35
- #include <QtGui/qpalette.h>
36
- #include <QtGui/qpen.h>
37
- #include <QtGui/qpixmap.h>
38
- #include <QtGui/qpolygon.h>
39
- #include <QtGui/qtextformat.h>
35
+ #include <QtGui/qpalette.h>
36
+ #include <QtGui/qpen.h>
37
+ #include <QtGui/qpixmap.h>
38
+ #include <QtGui/qpolygon.h>
39
+ #include <QtGui/qtextformat.h>
40
40
  #include <QtGui/qwidget.h>
41
41
 
42
42
  #ifdef QT_QTDBUS
@@ -107,28 +107,28 @@ inspectProperty(QMetaProperty property, const char * name, QVariant & value)
107
107
  QMetaEnum e = property.enumerator();
108
108
  return QString(" %1=%2::%3").arg(name).arg(e.scope()).arg(e.valueToKey(value.toInt()));
109
109
  }
110
-
110
+
111
111
  switch (value.type()) {
112
112
  case QVariant::String:
113
113
  {
114
114
  if (value.toString().isNull()) {
115
- return QString(" %1=nil").arg(name);
115
+ return QString(" %1=nil").arg(name);
116
116
  } else {
117
117
  return QString(" %1=%2").arg(name).arg(value.toString());
118
118
  }
119
119
  }
120
-
120
+
121
121
  case QVariant::Bool:
122
122
  {
123
123
  QString rubyName;
124
124
  QRegExp name_re("^(is|has)(.)(.*)");
125
-
125
+
126
126
  if (name_re.indexIn(name) != -1) {
127
127
  rubyName = name_re.cap(2).toLower() + name_re.cap(3) + "?";
128
128
  } else {
129
129
  rubyName = name;
130
130
  }
131
-
131
+
132
132
  return QString(" %1=%2").arg(rubyName).arg(value.toString());
133
133
  }
134
134
 
@@ -137,18 +137,18 @@ inspectProperty(QMetaProperty property, const char * name, QVariant & value)
137
137
  QColor c = value.value<QColor>();
138
138
  return QString(" %1=#<Qt::Color:0x0 %2>").arg(name).arg(c.name());
139
139
  }
140
-
140
+
141
141
  case QVariant::Cursor:
142
142
  {
143
143
  QCursor c = value.value<QCursor>();
144
144
  return QString(" %1=#<Qt::Cursor:0x0 shape=%2>").arg(name).arg(c.shape());
145
145
  }
146
-
146
+
147
147
  case QVariant::Double:
148
148
  {
149
149
  return QString(" %1=%2").arg(name).arg(value.toDouble());
150
150
  }
151
-
151
+
152
152
  case QVariant::Font:
153
153
  {
154
154
  QFont f = value.value<QFont>();
@@ -162,7 +162,7 @@ inspectProperty(QMetaProperty property, const char * name, QVariant & value)
162
162
  .arg(f.underline() ? "true" : "false")
163
163
  .arg(f.strikeOut() ? "true" : "false");
164
164
  }
165
-
165
+
166
166
  case QVariant::Line:
167
167
  {
168
168
  QLine l = value.toLine();
@@ -173,7 +173,7 @@ inspectProperty(QMetaProperty property, const char * name, QVariant & value)
173
173
  .arg(l.x2())
174
174
  .arg(l.y2());
175
175
  }
176
-
176
+
177
177
  case QVariant::LineF:
178
178
  {
179
179
  QLineF l = value.toLineF();
@@ -184,19 +184,19 @@ inspectProperty(QMetaProperty property, const char * name, QVariant & value)
184
184
  .arg(l.x2())
185
185
  .arg(l.y2());
186
186
  }
187
-
187
+
188
188
  case QVariant::Point:
189
189
  {
190
190
  QPoint p = value.toPoint();
191
191
  return QString(" %1=#<Qt::Point:0x0 x=%2, y=%3>").arg(name).arg(p.x()).arg(p.y());
192
192
  }
193
-
193
+
194
194
  case QVariant::PointF:
195
195
  {
196
196
  QPointF p = value.toPointF();
197
197
  return QString(" %1=#<Qt::PointF:0x0 x=%2, y=%3>").arg(name).arg(p.x()).arg(p.y());
198
198
  }
199
-
199
+
200
200
  case QVariant::Rect:
201
201
  {
202
202
  QRect r = value.toRect();
@@ -204,7 +204,7 @@ inspectProperty(QMetaProperty property, const char * name, QVariant & value)
204
204
  .arg(name)
205
205
  .arg(r.left()).arg(r.right()).arg(r.top()).arg(r.bottom());
206
206
  }
207
-
207
+
208
208
  case QVariant::RectF:
209
209
  {
210
210
  QRectF r = value.toRectF();
@@ -212,23 +212,23 @@ inspectProperty(QMetaProperty property, const char * name, QVariant & value)
212
212
  .arg(name)
213
213
  .arg(r.left()).arg(r.right()).arg(r.top()).arg(r.bottom());
214
214
  }
215
-
215
+
216
216
  case QVariant::Size:
217
217
  {
218
218
  QSize s = value.toSize();
219
219
  return QString(" %1=#<Qt::Size:0x0 width=%2, height=%3>")
220
- .arg(name)
220
+ .arg(name)
221
221
  .arg(s.width()).arg(s.height());
222
222
  }
223
-
223
+
224
224
  case QVariant::SizeF:
225
225
  {
226
226
  QSizeF s = value.toSizeF();
227
227
  return QString(" %1=#<Qt::SizeF:0x0 width=%2, height=%3>")
228
- .arg(name)
228
+ .arg(name)
229
229
  .arg(s.width()).arg(s.height());
230
230
  }
231
-
231
+
232
232
  case QVariant::SizePolicy:
233
233
  {
234
234
  QSizePolicy s = value.value<QSizePolicy>();
@@ -237,7 +237,7 @@ inspectProperty(QMetaProperty property, const char * name, QVariant & value)
237
237
  .arg(s.horizontalPolicy())
238
238
  .arg(s.verticalPolicy());
239
239
  }
240
-
240
+
241
241
  case QVariant::Brush:
242
242
  // case QVariant::ColorGroup:
243
243
  case QVariant::Image:
@@ -247,7 +247,7 @@ inspectProperty(QMetaProperty property, const char * name, QVariant & value)
247
247
  {
248
248
  return QString(" %1=#<Qt::%2:0x0>").arg(name).arg(value.typeName() + 1);
249
249
  }
250
-
250
+
251
251
  default:
252
252
  return QString(" %1=%2").arg(name)
253
253
  .arg((value.isNull() || value.toString().isNull()) ? "nil" : value.toString() );
@@ -265,31 +265,31 @@ inspect_qobject(VALUE self)
265
265
  if (TYPE(self) != T_DATA) {
266
266
  return Qnil;
267
267
  }
268
-
268
+
269
269
  // Start with #<Qt::HBoxLayout:0x30139030> from the original inspect() call
270
270
  // Drop the closing '>'
271
- VALUE inspect_str = rb_call_super(0, 0);
271
+ VALUE inspect_str = rb_call_super(0, 0);
272
272
  rb_str_resize(inspect_str, RSTRING_LEN(inspect_str) - 1);
273
-
273
+
274
274
  smokeruby_object * o = 0;
275
- Data_Get_Struct(self, smokeruby_object, o);
275
+ Data_Get_Struct(self, smokeruby_object, o);
276
276
  QObject * qobject = (QObject *) o->smoke->cast(o->ptr, o->classId, o->smoke->idClass("QObject").index);
277
-
277
+
278
278
  QString value_list;
279
279
  value_list.append(QString(" objectName=\"%1\"").arg(qobject->objectName()));
280
-
280
+
281
281
  if (qobject->isWidgetType()) {
282
282
  QWidget * w = (QWidget *) qobject;
283
283
  value_list.append(QString(", x=%1, y=%2, width=%3, height=%4")
284
284
  .arg(w->x())
285
285
  .arg(w->y())
286
286
  .arg(w->width())
287
- .arg(w->height()) );
287
+ .arg(w->height()) );
288
288
  }
289
-
289
+
290
290
  value_list.append(">");
291
291
  rb_str_cat2(inspect_str, value_list.toLatin1());
292
-
292
+
293
293
  return inspect_str;
294
294
  }
295
295
 
@@ -308,31 +308,31 @@ pretty_print_qobject(VALUE self, VALUE pp)
308
308
  if (TYPE(self) != T_DATA) {
309
309
  return Qnil;
310
310
  }
311
-
311
+
312
312
  // Start with #<Qt::HBoxLayout:0x30139030>
313
313
  // Drop the closing '>'
314
- VALUE inspect_str = rb_funcall(self, rb_intern("to_s"), 0, 0);
314
+ VALUE inspect_str = rb_funcall(self, rb_intern("to_s"), 0, 0);
315
315
  rb_str_resize(inspect_str, RSTRING_LEN(inspect_str) - 1);
316
316
  rb_funcall(pp, rb_intern("text"), 1, inspect_str);
317
317
  rb_funcall(pp, rb_intern("breakable"), 0);
318
-
318
+
319
319
  smokeruby_object * o = 0;
320
- Data_Get_Struct(self, smokeruby_object, o);
320
+ Data_Get_Struct(self, smokeruby_object, o);
321
321
  QObject * qobject = (QObject *) o->smoke->cast(o->ptr, o->classId, o->smoke->idClass("QObject").index);
322
-
323
- QString value_list;
324
-
322
+
323
+ QString value_list;
324
+
325
325
  if (qobject->parent() != 0) {
326
326
  QString parentInspectString;
327
327
  VALUE obj = getPointerObject(qobject->parent());
328
328
  if (obj != Qnil) {
329
- VALUE parent_inspect_str = rb_funcall(obj, rb_intern("to_s"), 0, 0);
329
+ VALUE parent_inspect_str = rb_funcall(obj, rb_intern("to_s"), 0, 0);
330
330
  rb_str_resize(parent_inspect_str, RSTRING_LEN(parent_inspect_str) - 1);
331
331
  parentInspectString = StringValuePtr(parent_inspect_str);
332
332
  } else {
333
333
  parentInspectString.sprintf("#<%s:0x0", qobject->parent()->metaObject()->className());
334
334
  }
335
-
335
+
336
336
  if (qobject->parent()->isWidgetType()) {
337
337
  QWidget * w = (QWidget *) qobject->parent();
338
338
  value_list = QString(" parent=%1 objectName=\"%2\", x=%3, y=%4, width=%5, height=%6>,\n")
@@ -347,24 +347,24 @@ pretty_print_qobject(VALUE self, VALUE pp)
347
347
  .arg(parentInspectString)
348
348
  .arg(qobject->parent()->objectName());
349
349
  }
350
-
350
+
351
351
  rb_funcall(pp, rb_intern("text"), 1, rb_str_new2(value_list.toLatin1()));
352
352
  }
353
-
353
+
354
354
  if (qobject->children().count() != 0) {
355
355
  value_list = QString(" children=Array (%1 element(s)),\n")
356
356
  .arg(qobject->children().count());
357
357
  rb_funcall(pp, rb_intern("text"), 1, rb_str_new2(value_list.toLatin1()));
358
358
  }
359
-
359
+
360
360
  value_list = QString(" metaObject=#<Qt::MetaObject:0x0");
361
361
  value_list.append(QString(" className=%1").arg(qobject->metaObject()->className()));
362
-
362
+
363
363
  if (qobject->metaObject()->superClass() != 0) {
364
364
  value_list.append( QString(", superClass=#<Qt::MetaObject:0x0 className=%1>")
365
365
  .arg(qobject->metaObject()->superClass()->className()) );
366
- }
367
-
366
+ }
367
+
368
368
  value_list.append(">,\n");
369
369
  rb_funcall(pp, rb_intern("text"), 1, rb_str_new2(value_list.toLatin1()));
370
370
 
@@ -383,7 +383,7 @@ pretty_print_qobject(VALUE self, VALUE pp)
383
383
  }
384
384
 
385
385
  rb_funcall(pp, rb_intern("text"), 1, rb_str_new2(">"));
386
-
386
+
387
387
  return self;
388
388
  }
389
389
 
@@ -470,9 +470,9 @@ qabstract_item_model_data(int argc, VALUE * argv, VALUE self)
470
470
  }
471
471
 
472
472
 
473
- smokeruby_object * result = alloc_smokeruby_object( true,
474
- o->smoke,
475
- o->smoke->findClass("QVariant").index,
473
+ smokeruby_object * result = alloc_smokeruby_object( true,
474
+ o->smoke,
475
+ o->smoke->findClass("QVariant").index,
476
476
  new QVariant(value) );
477
477
  return set_obj_info("Qt::Variant", result);
478
478
  }
@@ -492,7 +492,7 @@ qabstract_item_model_setdata(int argc, VALUE * argv, VALUE self)
492
492
  }
493
493
 
494
494
  if (argc == 3) {
495
- return (model->setData( *modelIndex,
495
+ return (model->setData( *modelIndex,
496
496
  *variant,
497
497
  NUM2INT(rb_funcall(argv[2], rb_intern("to_i"), 0)) ) ? Qtrue : Qfalse);
498
498
  }
@@ -624,7 +624,7 @@ qimage_scan_line(VALUE self, VALUE ix)
624
624
  return rb_str_new((const char *) bytes, image->bytesPerLine());
625
625
  }
626
626
 
627
- #ifdef QT_QTDBUS
627
+ #ifdef QT_QTDBUS
628
628
  static VALUE
629
629
  qdbusargument_endarraywrite(VALUE self)
630
630
  {
@@ -795,9 +795,9 @@ qabstractitemmodel_createindex(int argc, VALUE * argv, VALUE self)
795
795
  stack[3].s_voidp = (void*) argv[2];
796
796
  }
797
797
  (*fn)(m.method, o->ptr, stack);
798
- smokeruby_object * result = alloc_smokeruby_object( true,
799
- o->smoke,
800
- o->smoke->idClass("QModelIndex").index,
798
+ smokeruby_object * result = alloc_smokeruby_object( true,
799
+ o->smoke,
800
+ o->smoke->idClass("QModelIndex").index,
801
801
  stack[0].s_voidp );
802
802
 
803
803
  return set_obj_info("Qt::ModelIndex", result);
@@ -826,9 +826,9 @@ qitemselection_at(VALUE self, VALUE i)
826
826
  QItemSelection * item = (QItemSelection *) o->ptr;
827
827
  QItemSelectionRange range = item->at(NUM2INT(i));
828
828
 
829
- smokeruby_object * result = alloc_smokeruby_object( true,
830
- o->smoke,
831
- o->smoke->idClass("QItemSelectionRange").index,
829
+ smokeruby_object * result = alloc_smokeruby_object( true,
830
+ o->smoke,
831
+ o->smoke->idClass("QItemSelectionRange").index,
832
832
  new QItemSelectionRange(range) );
833
833
 
834
834
  return set_obj_info("Qt::ItemSelectionRange", result);
@@ -851,7 +851,7 @@ metaObject(VALUE self)
851
851
 
852
852
  /* This shouldn't be needed, but kalyptus doesn't generate a staticMetaObject
853
853
  method for QObject::staticMetaObject, although it does for all the other
854
- classes, and it isn't obvious what the problem with it is.
854
+ classes, and it isn't obvious what the problem with it is.
855
855
  So add this as a hack to work round the bug.
856
856
  */
857
857
  static VALUE
@@ -859,9 +859,9 @@ qobject_staticmetaobject(VALUE /*klass*/)
859
859
  {
860
860
  QMetaObject * meta = new QMetaObject(QObject::staticMetaObject);
861
861
 
862
- smokeruby_object * m = alloc_smokeruby_object( true,
863
- qtcore_Smoke,
864
- qtcore_Smoke->idClass("QMetaObject").index,
862
+ smokeruby_object * m = alloc_smokeruby_object( true,
863
+ qtcore_Smoke,
864
+ qtcore_Smoke->idClass("QMetaObject").index,
865
865
  meta );
866
866
 
867
867
  VALUE obj = set_obj_info("Qt::MetaObject", m);
@@ -880,9 +880,9 @@ cast_object_to(VALUE /*self*/, VALUE object, VALUE new_klass)
880
880
  rb_raise(rb_eArgError, "unable to find class \"%s\" to cast to\n", StringValuePtr(new_klassname));
881
881
  }
882
882
 
883
- smokeruby_object * o_cast = alloc_smokeruby_object( o->allocated,
884
- cast_to_id->smoke,
885
- (int) cast_to_id->index,
883
+ smokeruby_object * o_cast = alloc_smokeruby_object( o->allocated,
884
+ cast_to_id->smoke,
885
+ (int) cast_to_id->index,
886
886
  o->smoke->cast(o->ptr, o->classId, (int) cast_to_id->index) );
887
887
 
888
888
  VALUE obj = Data_Wrap_Struct(new_klass, smokeruby_mark, smokeruby_free, (void *) o_cast);
@@ -915,9 +915,9 @@ qobject_qt_metacast(VALUE self, VALUE klass)
915
915
  return Qnil;
916
916
  }
917
917
 
918
- smokeruby_object * o_cast = alloc_smokeruby_object( o->allocated,
919
- mi->smoke,
920
- (int) mi->index,
918
+ smokeruby_object * o_cast = alloc_smokeruby_object( o->allocated,
919
+ mi->smoke,
920
+ (int) mi->index,
921
921
  ret );
922
922
 
923
923
  VALUE obj = Data_Wrap_Struct(klass, smokeruby_mark, smokeruby_free, (void *) o_cast);
@@ -940,11 +940,11 @@ qsignalmapper_mapping(int argc, VALUE * argv, VALUE self)
940
940
  i = -i; // turn into ambiguousMethodList index
941
941
  while (meth.smoke->ambiguousMethodList[i] != 0) {
942
942
  if ( ( qstrcmp( meth.smoke->types[meth.smoke->argumentList[meth.smoke->methods[meth.smoke->ambiguousMethodList[i]].args]].name,
943
- "QObject*" ) == 0
943
+ "QObject*" ) == 0
944
944
  && Smoke::isDerivedFrom(a->smoke->classes[a->classId].className, "QObject")
945
945
  && !Smoke::isDerivedFrom(a->smoke->classes[a->classId].className, "QWidget") )
946
946
  || ( qstrcmp( meth.smoke->types[meth.smoke->argumentList[meth.smoke->methods[meth.smoke->ambiguousMethodList[i]].args]].name,
947
- "QWidget*" ) == 0
947
+ "QWidget*" ) == 0
948
948
  && Smoke::isDerivedFrom(a->smoke->classes[a->classId].className, "QWidget") ) )
949
949
  {
950
950
  _current_method.smoke = meth.smoke;
@@ -976,11 +976,11 @@ qsignalmapper_set_mapping(int argc, VALUE * argv, VALUE self)
976
976
  i = -i; // turn into ambiguousMethodList index
977
977
  while (meth.smoke->ambiguousMethodList[i] != 0) {
978
978
  if ( ( qstrcmp( meth.smoke->types[meth.smoke->argumentList[meth.smoke->methods[meth.smoke->ambiguousMethodList[i]].args + 1]].name,
979
- "QObject*" ) == 0
979
+ "QObject*" ) == 0
980
980
  && Smoke::isDerivedFrom(a->smoke->classes[a->classId].className, "QObject")
981
981
  && !Smoke::isDerivedFrom(a->smoke->classes[a->classId].className, "QWidget") )
982
982
  || ( qstrcmp( meth.smoke->types[meth.smoke->argumentList[meth.smoke->methods[meth.smoke->ambiguousMethodList[i]].args + 1]].name,
983
- "QWidget*" ) == 0
983
+ "QWidget*" ) == 0
984
984
  && Smoke::isDerivedFrom(a->smoke->classes[a->classId].className, "QWidget") ) )
985
985
  {
986
986
  _current_method.smoke = meth.smoke;
@@ -1036,7 +1036,7 @@ qvariant_value(VALUE /*self*/, VALUE variant_value_klass, VALUE variant_value)
1036
1036
 
1037
1037
  if (variant->userType() == rObject_typeId) {
1038
1038
  return *(VALUE*) variant->data();
1039
- #ifdef QT_QTDBUS
1039
+ #ifdef QT_QTDBUS
1040
1040
  } else if (variant->userType() == qMetaTypeId<QDBusObjectPath>()) {
1041
1041
  QString s = qVariantValue<QDBusObjectPath>(*variant).path();
1042
1042
  return rb_str_new2(s.toLatin1());
@@ -1140,7 +1140,7 @@ qvariant_from_value(int argc, VALUE * argv, VALUE self)
1140
1140
  if (argc == 2) {
1141
1141
  Smoke::ModuleIndex nameId = Smoke::NullModuleIndex;
1142
1142
  const char *typeName = StringValuePtr(argv[1]);
1143
-
1143
+
1144
1144
  if (TYPE(argv[0]) == T_DATA) {
1145
1145
  nameId = qtcore_Smoke->idMethodName("QVariant#");
1146
1146
  } else if (TYPE(argv[0]) == T_ARRAY || qstrcmp(typeName, "long long") == 0 || qstrcmp(typeName, "unsigned long long") == 0) {
@@ -1233,7 +1233,7 @@ static Smoke::Index new_qvariant_qmap = 0;
1233
1233
  QtRuby::MethodCall c(qtcore_Smoke, _current_method.index, self, argv, argc-1);
1234
1234
  c.next();
1235
1235
  return *(c.var());
1236
- } else if ( argc == 1
1236
+ } else if ( argc == 1
1237
1237
  && TYPE(argv[0]) == T_ARRAY
1238
1238
  && RARRAY_LEN(argv[0]) > 0
1239
1239
  && TYPE(rb_ary_entry(argv[0], 0)) != T_STRING )
@@ -1282,7 +1282,7 @@ initialize_qt(int argc, VALUE * argv, VALUE self)
1282
1282
  {
1283
1283
  VALUE retval = Qnil;
1284
1284
  VALUE temp_obj;
1285
-
1285
+
1286
1286
  if (TYPE(self) == T_DATA) {
1287
1287
  // If a ruby block was passed then run that now
1288
1288
  if (rb_block_given_p()) {
@@ -1301,12 +1301,12 @@ initialize_qt(int argc, VALUE * argv, VALUE self)
1301
1301
  temp_stack[1] = constructor_name;
1302
1302
  temp_stack[2] = klass;
1303
1303
  temp_stack[3] = self;
1304
-
1304
+
1305
1305
  for (int count = 0; count < argc; count++) {
1306
1306
  temp_stack[count+4] = argv[count];
1307
1307
  }
1308
1308
 
1309
- {
1309
+ {
1310
1310
  QByteArray * mcid = find_cached_selector(argc+4, temp_stack, klass, rb_class2name(klass));
1311
1311
 
1312
1312
  if (_current_method.index == -1) {
@@ -1322,7 +1322,7 @@ initialize_qt(int argc, VALUE * argv, VALUE self)
1322
1322
  // Another longjmp here..
1323
1323
  rb_raise(rb_eArgError, "unresolved constructor call %s\n", rb_class2name(klass));
1324
1324
  }
1325
-
1325
+
1326
1326
  {
1327
1327
  // Allocate the MethodCall within a C block. Otherwise, because the continue_new_instance()
1328
1328
  // call below will longjmp out, it wouldn't give C++ an opportunity to clean up
@@ -1330,13 +1330,13 @@ initialize_qt(int argc, VALUE * argv, VALUE self)
1330
1330
  c.next();
1331
1331
  temp_obj = *(c.var());
1332
1332
  }
1333
-
1333
+
1334
1334
  smokeruby_object * p = 0;
1335
1335
  Data_Get_Struct(temp_obj, smokeruby_object, p);
1336
1336
 
1337
- smokeruby_object * o = alloc_smokeruby_object( true,
1338
- p->smoke,
1339
- p->classId,
1337
+ smokeruby_object * o = alloc_smokeruby_object( true,
1338
+ p->smoke,
1339
+ p->classId,
1340
1340
  p->ptr );
1341
1341
  p->ptr = 0;
1342
1342
  p->allocated = false;
@@ -1361,7 +1361,7 @@ new_qt(int argc, VALUE * argv, VALUE klass)
1361
1361
 
1362
1362
  VALUE result = rb_funcall2(qt_internal_module, rb_intern("try_initialize"), argc+1, temp_stack);
1363
1363
  rb_obj_call_init(result, argc, argv);
1364
-
1364
+
1365
1365
  return result;
1366
1366
  }
1367
1367
 
@@ -1375,7 +1375,7 @@ qapplication_argv(VALUE /*self*/)
1375
1375
  for (int index = 1; index < qApp->argc(); index++) {
1376
1376
  rb_ary_push(result, rb_str_new2(qApp->argv()[index]));
1377
1377
  }
1378
-
1378
+
1379
1379
  return result;
1380
1380
  }
1381
1381
 
@@ -1439,8 +1439,8 @@ qt_metacall(int /*argc*/, VALUE * argv, VALUE self)
1439
1439
  {
1440
1440
  // Arguments: QMetaObject::Call _c, int id, void ** _o
1441
1441
  QMetaObject::Call _c = (QMetaObject::Call) NUM2INT( rb_funcall( qt_internal_module,
1442
- rb_intern("get_qinteger"),
1443
- 1,
1442
+ rb_intern("get_qinteger"),
1443
+ 1,
1444
1444
  argv[0] ) );
1445
1445
  int id = NUM2INT(argv[1]);
1446
1446
  void ** _o = 0;
@@ -1467,7 +1467,7 @@ qt_metacall(int /*argc*/, VALUE * argv, VALUE self)
1467
1467
  }
1468
1468
  } else {
1469
1469
  // Should never happen..
1470
- rb_raise(rb_eRuntimeError, "Cannot find %s::qt_metacall() method\n",
1470
+ rb_raise(rb_eRuntimeError, "Cannot find %s::qt_metacall() method\n",
1471
1471
  o->smoke->classes[o->classId].className );
1472
1472
  }
1473
1473
 
@@ -1506,7 +1506,7 @@ static QRegExp * rx = 0;
1506
1506
  QtRuby::InvokeSlot slot(self, rb_intern(name.toLatin1()), mocArgs, _o);
1507
1507
  slot.next();
1508
1508
  }
1509
-
1509
+
1510
1510
  return INT2NUM(id - count);
1511
1511
  }
1512
1512
 
@@ -1586,7 +1586,7 @@ getIsa(VALUE /*self*/, VALUE classId)
1586
1586
  return parents_list;
1587
1587
  }
1588
1588
 
1589
- // Return the class name of a QObject. Note that the name will be in the
1589
+ // Return the class name of a QObject. Note that the name will be in the
1590
1590
  // form of Qt::Widget rather than QWidget. Is this a bug or a feature?
1591
1591
  static VALUE
1592
1592
  class_name(VALUE self)
@@ -1615,7 +1615,7 @@ inherits_qobject(int argc, VALUE * argv, VALUE /*self*/)
1615
1615
  }
1616
1616
 
1617
1617
  /* Adapted from the internal function qt_qFindChildren() in qobject.cpp */
1618
- static void
1618
+ static void
1619
1619
  rb_qFindChildren_helper(VALUE parent, const QString &name, VALUE re,
1620
1620
  const QMetaObject &mo, VALUE list)
1621
1621
  {
@@ -1627,7 +1627,7 @@ rb_qFindChildren_helper(VALUE parent, const QString &name, VALUE re,
1627
1627
  rv = RARRAY_PTR(children)[i];
1628
1628
  smokeruby_object *o = value_obj_info(rv);
1629
1629
  QObject * obj = (QObject *) o->smoke->cast(o->ptr, o->classId, o->smoke->idClass("QObject").index);
1630
-
1630
+
1631
1631
  // The original code had 'if (mo.cast(obj))' as a test, but it doesn't work here
1632
1632
  if (obj->qt_metacast(mo.className()) != 0) {
1633
1633
  if (re != Qnil) {
@@ -1665,7 +1665,7 @@ find_qobject_children(int argc, VALUE *argv, VALUE self)
1665
1665
  re = argv[1];
1666
1666
  }
1667
1667
  }
1668
-
1668
+
1669
1669
  VALUE metaObject = rb_funcall(argv[0], rb_intern("staticMetaObject"), 0);
1670
1670
  smokeruby_object *o = value_obj_info(metaObject);
1671
1671
  QMetaObject * mo = (QMetaObject*) o->ptr;
@@ -1708,7 +1708,7 @@ find_qobject_child(int argc, VALUE *argv, VALUE self)
1708
1708
  if (argc == 2) {
1709
1709
  name = QString::fromLatin1(StringValuePtr(argv[1]));
1710
1710
  }
1711
-
1711
+
1712
1712
  VALUE metaObject = rb_funcall(argv[0], rb_intern("staticMetaObject"), 0);
1713
1713
  smokeruby_object *o = value_obj_info(metaObject);
1714
1714
  QMetaObject * mo = (QMetaObject*) o->ptr;
@@ -1762,7 +1762,7 @@ isEnum(VALUE /*self*/, VALUE enumName_value)
1762
1762
  break;
1763
1763
  }
1764
1764
  }
1765
- return typeId > 0
1765
+ return typeId > 0
1766
1766
  && ( (s->types[typeId].flags & Smoke::tf_elem) == Smoke::t_enum
1767
1767
  || (s->types[typeId].flags & Smoke::tf_elem) == Smoke::t_ulong
1768
1768
  || (s->types[typeId].flags & Smoke::tf_elem) == Smoke::t_long
@@ -1794,12 +1794,16 @@ classid2name(VALUE /*self*/, VALUE mi_value)
1794
1794
  static VALUE
1795
1795
  find_pclassid(VALUE /*self*/, VALUE p_value)
1796
1796
  {
1797
+ if (NIL_P(p_value)) {
1798
+ return rb_funcall(moduleindex_class, rb_intern("new"), 2, 0, 0);
1799
+ }
1800
+
1797
1801
  char *p = StringValuePtr(p_value);
1798
1802
  Smoke::ModuleIndex *r = classcache.value(QByteArray(p));
1799
1803
  if (r != 0) {
1800
1804
  return rb_funcall(moduleindex_class, rb_intern("new"), 2, INT2NUM(smokeList.indexOf(r->smoke)), INT2NUM(r->index));
1801
1805
  } else {
1802
- return rb_funcall(moduleindex_class, rb_intern("new"), 2, 0, 0);
1806
+ return rb_funcall(moduleindex_class, rb_intern("new"), 2, Qnil, Qnil);
1803
1807
  }
1804
1808
  }
1805
1809
 
@@ -1809,8 +1813,8 @@ get_value_type(VALUE /*self*/, VALUE ruby_value)
1809
1813
  return rb_str_new2(value_to_type_flag(ruby_value));
1810
1814
  }
1811
1815
 
1812
- static QMetaObject*
1813
- parent_meta_object(VALUE obj)
1816
+ static QMetaObject*
1817
+ parent_meta_object(VALUE obj)
1814
1818
  {
1815
1819
  smokeruby_object* o = value_obj_info(obj);
1816
1820
  Smoke::ModuleIndex nameId = o->smoke->idMethodName("metaObject");
@@ -1849,13 +1853,13 @@ make_metaObject(VALUE /*self*/, VALUE obj, VALUE parentMeta, VALUE stringdata_va
1849
1853
  uint * data = new uint[count];
1850
1854
 
1851
1855
  memcpy( (void *) stringdata, RSTRING_PTR(stringdata_value), RSTRING_LEN(stringdata_value) );
1852
-
1856
+
1853
1857
  for (long i = 0; i < count; i++) {
1854
1858
  VALUE rv = rb_ary_entry(data_value, i);
1855
1859
  data[i] = NUM2UINT(rv);
1856
1860
  }
1857
-
1858
- QMetaObject ob = {
1861
+
1862
+ QMetaObject ob = {
1859
1863
  { superdata, stringdata, data, 0 }
1860
1864
  } ;
1861
1865
 
@@ -1864,7 +1868,7 @@ make_metaObject(VALUE /*self*/, VALUE obj, VALUE parentMeta, VALUE stringdata_va
1864
1868
 
1865
1869
  #ifdef DEBUG
1866
1870
  printf("make_metaObject() superdata: %p %s\n", meta->d.superdata, superdata->className());
1867
-
1871
+
1868
1872
  printf(
1869
1873
  " // content:\n"
1870
1874
  " %d, // revision\n"
@@ -1873,7 +1877,7 @@ make_metaObject(VALUE /*self*/, VALUE obj, VALUE parentMeta, VALUE stringdata_va
1873
1877
  " %d, %d, // methods\n"
1874
1878
  " %d, %d, // properties\n"
1875
1879
  " %d, %d, // enums/sets\n",
1876
- data[0], data[1], data[2], data[3],
1880
+ data[0], data[1], data[2], data[3],
1877
1881
  data[4], data[5], data[6], data[7], data[8], data[9]);
1878
1882
 
1879
1883
  int s = data[3];
@@ -1893,22 +1897,22 @@ make_metaObject(VALUE /*self*/, VALUE obj, VALUE parentMeta, VALUE stringdata_va
1893
1897
  if (signal_headings && (data[s + (j * 5) + 4] & 0x04) != 0) {
1894
1898
  printf("\n // signals: signature, parameters, type, tag, flags\n");
1895
1899
  signal_headings = false;
1896
- }
1900
+ }
1897
1901
 
1898
1902
  if (slot_headings && (data[s + (j * 5) + 4] & 0x08) != 0) {
1899
1903
  printf("\n // slots: signature, parameters, type, tag, flags\n");
1900
1904
  slot_headings = false;
1901
1905
  }
1902
1906
 
1903
- printf(" %d, %d, %d, %d, 0x%2.2x\n",
1904
- data[s + (j * 5)], data[s + (j * 5) + 1], data[s + (j * 5) + 2],
1907
+ printf(" %d, %d, %d, %d, 0x%2.2x\n",
1908
+ data[s + (j * 5)], data[s + (j * 5) + 1], data[s + (j * 5) + 2],
1905
1909
  data[s + (j * 5) + 3], data[s + (j * 5) + 4]);
1906
1910
  }
1907
1911
 
1908
1912
  s += (data[4] * 5);
1909
1913
  for (uint j = 0; j < data[6]; j++) {
1910
1914
  printf("\n // properties: name, type, flags\n");
1911
- printf(" %d, %d, 0x%8.8x\n",
1915
+ printf(" %d, %d, 0x%8.8x\n",
1912
1916
  data[s + (j * 3)], data[s + (j * 3) + 1], data[s + (j * 3) + 2]);
1913
1917
  }
1914
1918
 
@@ -1935,9 +1939,9 @@ make_metaObject(VALUE /*self*/, VALUE obj, VALUE parentMeta, VALUE stringdata_va
1935
1939
  printf("\"\n\n");
1936
1940
 
1937
1941
  #endif
1938
- smokeruby_object * m = alloc_smokeruby_object( true,
1939
- qtcore_Smoke,
1940
- qtcore_Smoke->idClass("QMetaObject").index,
1942
+ smokeruby_object * m = alloc_smokeruby_object( true,
1943
+ qtcore_Smoke,
1944
+ qtcore_Smoke->idClass("QMetaObject").index,
1941
1945
  meta );
1942
1946
 
1943
1947
  return Data_Wrap_Struct(qmetaobject_class, smokeruby_mark, smokeruby_free, m);
@@ -1969,7 +1973,7 @@ dispose(VALUE self)
1969
1973
 
1970
1974
  const char *className = o->smoke->classes[o->classId].className;
1971
1975
  if(do_debug & qtdb_gc) printf("Deleting (%s*)%p\n", className, o->ptr);
1972
-
1976
+
1973
1977
  unmapPointer(o, o->classId, 0);
1974
1978
  object_count--;
1975
1979
 
@@ -1988,7 +1992,7 @@ dispose(VALUE self)
1988
1992
  delete[] methodName;
1989
1993
  o->ptr = 0;
1990
1994
  o->allocated = false;
1991
-
1995
+
1992
1996
  return Qnil;
1993
1997
  }
1994
1998
 
@@ -2030,7 +2034,7 @@ findClass(VALUE /*self*/, VALUE name_value)
2030
2034
  // char *name = StringValuePtr(name_value);
2031
2035
  // return INT2NUM(qtcore_Smoke->idMethodName(name).index);
2032
2036
  // }
2033
- //
2037
+ //
2034
2038
  // static VALUE
2035
2039
  // idMethod(VALUE /*self*/, VALUE idclass_value, VALUE idmethodname_value)
2036
2040
  // {
@@ -2140,14 +2144,14 @@ getClassList(VALUE /*self*/)
2140
2144
  if (qtsvg_Smoke->classes[i].className && !qtsvg_Smoke->classes[i].external)
2141
2145
  rb_ary_push(class_list, rb_str_new2(qtsvg_Smoke->classes[i].className));
2142
2146
  }
2143
-
2147
+
2144
2148
  #ifdef QT_QTDBUS
2145
2149
  for (int i = 1; i <= qtdbus_Smoke->numClasses; i++) {
2146
2150
  if (qtdbus_Smoke->classes[i].className && !qtdbus_Smoke->classes[i].external)
2147
2151
  rb_ary_push(class_list, rb_str_new2(qtdbus_Smoke->classes[i].className));
2148
2152
  }
2149
2153
  #endif
2150
-
2154
+
2151
2155
  return class_list;
2152
2156
  }
2153
2157
 
@@ -2161,13 +2165,13 @@ create_qobject_class(VALUE /*self*/, VALUE package_value, VALUE module_value)
2161
2165
  VALUE value_moduleName = rb_funcall(module_value, rb_intern("name"), 0);
2162
2166
  const char *moduleName = strdup(StringValuePtr(value_moduleName));
2163
2167
  VALUE klass = module_value;
2164
-
2168
+
2165
2169
  QString packageName(package);
2166
2170
 
2167
2171
  foreach(QString s, packageName.mid(strlen(moduleName) + 2).split("::")) {
2168
2172
  klass = rb_define_class_under(klass, (const char*) s.toLatin1(), qt_base_class);
2169
2173
  }
2170
-
2174
+
2171
2175
  if (packageName == "Qt::Application" || packageName == "Qt::CoreApplication" ) {
2172
2176
  rb_define_method(klass, "ARGV", (VALUE (*) (...)) qapplication_argv, 0);
2173
2177
  } else if (packageName == "Qt::Object") {
@@ -2190,7 +2194,7 @@ create_qobject_class(VALUE /*self*/, VALUE package_value, VALUE module_value)
2190
2194
  rb_define_method(qtablemodel_class, "remove_rows", (VALUE (*) (...)) qabstract_item_model_removerows, -1);
2191
2195
  rb_define_method(qtablemodel_class, "removeColumns", (VALUE (*) (...)) qabstract_item_model_removecolumns, -1);
2192
2196
  rb_define_method(qtablemodel_class, "remove_columns", (VALUE (*) (...)) qabstract_item_model_removecolumns, -1);
2193
-
2197
+
2194
2198
  qlistmodel_class = rb_define_class_under(qt_module, "ListModel", klass);
2195
2199
  rb_define_method(qlistmodel_class, "rowCount", (VALUE (*) (...)) qabstract_item_model_rowcount, -1);
2196
2200
  rb_define_method(qlistmodel_class, "row_count", (VALUE (*) (...)) qabstract_item_model_rowcount, -1);
@@ -2216,7 +2220,7 @@ create_qobject_class(VALUE /*self*/, VALUE package_value, VALUE module_value)
2216
2220
  rb_define_singleton_method(klass, "singleShot", (VALUE (*) (...)) qtimer_single_shot, -1);
2217
2221
  rb_define_singleton_method(klass, "single_shot", (VALUE (*) (...)) qtimer_single_shot, -1);
2218
2222
  }
2219
-
2223
+
2220
2224
 
2221
2225
  rb_define_method(klass, "qobject_cast", (VALUE (*) (...)) qobject_qt_metacast, 1);
2222
2226
  rb_define_method(klass, "inspect", (VALUE (*) (...)) inspect_qobject, 0);
@@ -2226,10 +2230,10 @@ create_qobject_class(VALUE /*self*/, VALUE package_value, VALUE module_value)
2226
2230
  rb_define_method(klass, "inherits", (VALUE (*) (...)) inherits_qobject, -1);
2227
2231
  rb_define_method(klass, "findChildren", (VALUE (*) (...)) find_qobject_children, -1);
2228
2232
  rb_define_method(klass, "find_children", (VALUE (*) (...)) find_qobject_children, -1);
2229
- rb_define_method(klass, "findChild", (VALUE (*) (...)) find_qobject_child, -1);
2230
- rb_define_method(klass, "find_child", (VALUE (*) (...)) find_qobject_child, -1);
2231
- rb_define_method(klass, "connect", (VALUE (*) (...)) qobject_connect, -1);
2232
- rb_define_singleton_method(klass, "connect", (VALUE (*) (...)) qobject_connect, -1);
2233
+ rb_define_method(klass, "findChild", (VALUE (*) (...)) find_qobject_child, -1);
2234
+ rb_define_method(klass, "find_child", (VALUE (*) (...)) find_qobject_child, -1);
2235
+ rb_define_method(klass, "connect", (VALUE (*) (...)) qobject_connect, -1);
2236
+ rb_define_singleton_method(klass, "connect", (VALUE (*) (...)) qobject_connect, -1);
2233
2237
 
2234
2238
  foreach(QtRubyModule m, qtruby_modules.values()) {
2235
2239
  if (m.class_created)
@@ -2358,11 +2362,11 @@ Init_qtruby4()
2358
2362
  init_qtopengl_Smoke();
2359
2363
  init_qtnetwork_Smoke();
2360
2364
  init_qtsvg_Smoke();
2361
- #ifdef QT_QTDBUS
2365
+ #ifdef QT_QTDBUS
2362
2366
  init_qtdbus_Smoke();
2363
2367
  #endif
2364
2368
  install_handlers(Qt_handlers);
2365
-
2369
+
2366
2370
  INIT_BINDING(qtcore)
2367
2371
  INIT_BINDING(qtgui)
2368
2372
  INIT_BINDING(qtxml)
@@ -2370,7 +2374,7 @@ Init_qtruby4()
2370
2374
  INIT_BINDING(qtopengl)
2371
2375
  INIT_BINDING(qtnetwork)
2372
2376
  INIT_BINDING(qtsvg)
2373
- #ifdef QT_QTDBUS
2377
+ #ifdef QT_QTDBUS
2374
2378
  INIT_BINDING(qtdbus)
2375
2379
  #endif
2376
2380
 
@@ -2397,7 +2401,7 @@ Init_qtruby4()
2397
2401
 
2398
2402
  rb_define_method(qt_base_class, "qVariantValue", (VALUE (*) (...)) qvariant_value, 2);
2399
2403
  rb_define_method(qt_base_class, "qVariantFromValue", (VALUE (*) (...)) qvariant_from_value, -1);
2400
-
2404
+
2401
2405
  rb_define_method(rb_cObject, "qDebug", (VALUE (*) (...)) qdebug, 1);
2402
2406
  rb_define_method(rb_cObject, "qFatal", (VALUE (*) (...)) qfatal, 1);
2403
2407
  rb_define_method(rb_cObject, "qWarning", (VALUE (*) (...)) qwarning, 1);
@@ -2439,9 +2443,9 @@ Init_qtruby4()
2439
2443
  rb_define_module_function(qt_module, "dynamic_cast", (VALUE (*) (...)) cast_object_to, 2);
2440
2444
  rb_define_module_function(qt_internal_module, "kross2smoke", (VALUE (*) (...)) kross2smoke, 2);
2441
2445
  rb_define_module_function(qt_internal_module, "set_qtruby_embedded", (VALUE (*) (...)) set_qtruby_embedded_wrapped, 1);
2442
-
2446
+
2443
2447
  rb_define_module_function(qt_internal_module, "application_terminated=", (VALUE (*) (...)) set_application_terminated, 1);
2444
-
2448
+
2445
2449
  rb_define_module_function(qt_module, "version", (VALUE (*) (...)) version, 0);
2446
2450
  rb_define_module_function(qt_module, "qtruby_version", (VALUE (*) (...)) qtruby_version, 0);
2447
2451
 
@@ -2450,9 +2454,9 @@ Init_qtruby4()
2450
2454
 
2451
2455
  // A problem has been found with QtRuby when it is run with Ruby 1.9.1
2452
2456
  // and GC.stess is true.
2453
- // In the smokeruby_mark() function called during garbage collection,
2454
- // any virtual methods which are called on the instances being checked
2455
- // could have overriden by Ruby methods. So the Wt::Ruby runtime uses
2457
+ // In the smokeruby_mark() function called during garbage collection,
2458
+ // any virtual methods which are called on the instances being checked
2459
+ // could have overriden by Ruby methods. So the Wt::Ruby runtime uses
2456
2460
  // 'respond_to()' to find out whether they have been overriden.
2457
2461
  // However, this involves calling 'rb_intern()' on the method name,
2458
2462
  // which means memory could be allocated, giving an error when running under