newt 1.0.0.pre1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3836472466affef8783a15165b2e1281b65c29d15d621638ba8e06f816ffb364
4
- data.tar.gz: 639199de30d0e7e88f6a05d7e2d957af06235b4b08f1cc3b86b7f81ab2896ef2
3
+ metadata.gz: cfea6e7753c0686afc0a58ad7f83c8a3e0c364ef7eeeb92e1073106d74b82286
4
+ data.tar.gz: ace1bcde9cc75ea4bd3183b671acea3a2cc2f89062d709195f99665b978e0e01
5
5
  SHA512:
6
- metadata.gz: 4d843ba26cb1bfd186bed6a06474ee928568adac9b207418c29ef7e3f760cfb313e5e01934901106bf4d7f69ea031e31763e536e6b80f1b14ea0075e08391a27
7
- data.tar.gz: a668be2a8be9faeef2b3aa7219140abbf32247b1e4e01e180ee9720bb3f855ecff1c0637e0d064ef92d78cad3e262f86b56317ccc465eb15e89a1505ddf1e0d9
6
+ metadata.gz: 29641680f8695cc982d04735eeb7b02ebbdeca99e1c54972868ac5f6bcd5b328ffba84478611459b99e38f2677f71a0254185a89f0326e6692fbecd148b4d359
7
+ data.tar.gz: 7e3436704b5649ca1c67f8e81077c51c08760f46cd8fc196e3f412a48bbf68c38bf6e7c9e67582282a6670a1fc466d3a74b39d8f76d806899c830fc765bbcb73
data/README.rdoc CHANGED
@@ -21,6 +21,7 @@ See http://github.com/theforeman/ruby-newt/tree/master/examples for usage exampl
21
21
 
22
22
  === From source
23
23
 
24
+ $ gem install rake rake-compiler
24
25
  $ git clone git://github.com/theforeman/ruby-newt
25
26
  $ cd ruby-newt
26
27
  $ gem build newt.gemspec
@@ -28,7 +29,9 @@ See http://github.com/theforeman/ruby-newt/tree/master/examples for usage exampl
28
29
 
29
30
  === Development
30
31
 
31
- $ rake compile
32
+ $ bundle install
33
+ $ bundle exec rake compile
34
+ $ bundle exec rake test
32
35
 
33
36
  == REQUIREMENTS
34
37
 
@@ -77,6 +80,8 @@ programs using the ruby-newt library may need to be changed.
77
80
  modify this hash directly will break.
78
81
  * The various _add_callback_ methods no longer return the previously set
79
82
  callback when called with no parameters.
83
+ * Use +get_current+ instead of +get+ for radiobuttons.
84
+ * Use +set_current+ instead of +set+ for radiobuttons.
80
85
 
81
86
  == AUTHORS
82
87
 
data/examples/test-e.rb CHANGED
@@ -49,7 +49,7 @@ e1 = Newt::Entry.new(12, 6, '', 20, 0)
49
49
  e2 = Newt::Entry.new(12, 7, 'Default', 20, Newt::FLAG_SCROLL)
50
50
  e3 = Newt::Entry.new(12, 8, '', 20, Newt::FLAG_HIDDEN)
51
51
 
52
- cs[0].callback( proc { disableCallback(cs[0], e1) } )
52
+ cs[0].callback( proc { disable_callback(cs[0], e1) } )
53
53
  scale = Newt::Scale.new(3, 14, 32, 100)
54
54
 
55
55
  chklist.set_height(3)
@@ -93,13 +93,17 @@ end
93
93
  Newt::Screen.pop_window
94
94
  Newt::Screen.pop_window
95
95
 
96
+ e1 = e1.get
97
+ e2 = e2.get
98
+ e3 = e3.get
99
+ selected_list = lb.get_selection
100
+
96
101
  Newt::Screen.finish
97
102
 
98
- printf "got string 1: %s\n", e1.get
99
- printf "got string 2: %s\n", e2.get
100
- printf "got string 3: %s\n", e3.get
103
+ printf "got string 1: %s\n", e1
104
+ printf "got string 2: %s\n", e2
105
+ printf "got string 3: %s\n", e3
101
106
 
102
- selected_list = lb.get_selection
103
107
  if selected_list.count > 0
104
108
  print "\nSelected listbox items:\n"
105
109
  selected_list.each do |item|
data/examples/test-j.rb CHANGED
@@ -49,7 +49,7 @@ e1 = Newt::Entry.new(12, 6, '', 20, 0)
49
49
  e2 = Newt::Entry.new(12, 7, 'ɸ½à', 20, Newt::FLAG_SCROLL)
50
50
  e3 = Newt::Entry.new(12, 8, '', 20, Newt::FLAG_HIDDEN)
51
51
 
52
- cs[0].callback( proc { disableCallback(cs[0], e1) } )
52
+ cs[0].callback( proc { disable_callback(cs[0], e1) } )
53
53
  scale = Newt::Scale.new(3, 14, 32, 100)
54
54
 
55
55
  chklist.set_height(3)
@@ -93,13 +93,17 @@ end
93
93
  Newt::Screen.pop_window
94
94
  Newt::Screen.pop_window
95
95
 
96
+ e1 = e1.get
97
+ e2 = e2.get
98
+ e3 = e3.get
99
+ selected_list = lb.get_selection
100
+
96
101
  Newt::Screen.finish
97
102
 
98
- printf "got string 1: %s\n", e1.get
99
- printf "got string 2: %s\n", e2.get
100
- printf "got string 3: %s\n", e3.get
103
+ printf "got string 1: %s\n", e1
104
+ printf "got string 2: %s\n", e2
105
+ printf "got string 3: %s\n", e3
101
106
 
102
- selected_list = lb.get_selection
103
107
  if selected_list.count > 0
104
108
  print "\nSelected listbox items:\n"
105
109
  selected_list.each do |item|
@@ -20,8 +20,14 @@ begin
20
20
  f.add(cb1, cb2, cb3, cb4, cb5, b)
21
21
 
22
22
  f.run
23
+
24
+ cb1 = cb1.get
25
+ cb2 = cb2.get
26
+ cb3 = cb3.get
27
+ cb4 = cb4.get
28
+ cb5 = cb5.get
23
29
  ensure
24
30
  Newt::Screen.finish
25
31
  end
26
32
 
27
- p cb1.get, cb2.get, cb3.get, cb4.get, cb5.get
33
+ p cb1, cb2, cb3, cb4, cb5
@@ -20,8 +20,9 @@ begin
20
20
  f.add(ct, b)
21
21
 
22
22
  f.run
23
+ selection = ct.get_selection
23
24
  ensure
24
25
  Newt::Screen.finish
25
26
  end
26
27
 
27
- p ct.get_selection
28
+ p selection
@@ -18,8 +18,9 @@ begin
18
18
  f.add(ct, b)
19
19
 
20
20
  f.run
21
+ selection = ct.get_selection('a')
21
22
  ensure
22
23
  Newt::Screen.finish
23
24
  end
24
25
 
25
- p ct.get_selection('a')
26
+ p selection
@@ -49,11 +49,15 @@ begin
49
49
  f.add(e1, e2, e3, b)
50
50
 
51
51
  f.run
52
+
53
+ e1 = e1.get
54
+ e2 = e2.get
55
+ e3 = e3.get
52
56
  ensure
53
57
  Newt::Screen.finish
54
58
  end
55
59
 
56
- p e1.get, e2.get, e3.get
60
+ p e1, e2, e3
57
61
  puts
58
62
  puts "$widget = #{$widget}"
59
63
  puts "$data = #{$data}"
@@ -21,6 +21,7 @@ begin
21
21
  f.add(b1, b2, b)
22
22
 
23
23
  rv = f.run
24
+ current = f.get_current
24
25
  ensure
25
26
  Newt::Screen.finish
26
27
  end
@@ -29,7 +30,7 @@ puts rv.inspect
29
30
  puts 'Button1' if rv == b1
30
31
  puts 'Button2' if b2 == rv
31
32
  puts 'Exit' if rv == b
32
- puts 'Exit button is current button' if b == f.get_current
33
+ puts 'Exit button is current button' if b == current
33
34
  puts 'Escape' if rv.reason == Newt::EXIT_HOTKEY && rv.key == ?\e.ord
34
35
  puts 'Timeout' if rv.reason == Newt::EXIT_TIMER
35
36
  puts 'FD Watch' if rv.reason == Newt::EXIT_FDREADY
@@ -25,8 +25,9 @@ begin
25
25
  f.add(l1, b)
26
26
 
27
27
  f.run
28
+ item_count = l1.item_count
28
29
  ensure
29
30
  Newt::Screen.finish
30
31
  end
31
32
 
32
- puts "number of list items = #{l1.item_count}"
33
+ puts "number of list items = #{item_count}"
@@ -16,8 +16,10 @@ begin
16
16
  f.add(rb1, rb2, b)
17
17
 
18
18
  f.run
19
+ current = rb1.get_current
19
20
  ensure
20
21
  Newt::Screen.finish
21
22
  end
22
23
 
23
- puts "selected: #{rb1.get_current}"
24
+ puts "selected: #{current}"
25
+ puts "current == rb1?: #{current == rb1}"
@@ -3,22 +3,12 @@
3
3
  require 'rubygems'
4
4
  require 'newt'
5
5
 
6
- text = ''
7
- width = 0
8
- height = 0
9
-
10
- begin
11
- Newt::Screen.new
12
-
13
- text, width, height = Newt.reflow_text('This is a quite a bit of text. It is 40 ' \
14
- 'columns long, so some wrapping should be ' \
15
- 'done. Did you know that the quick, brown ' \
16
- "fox jumped over the lazy dog?\n\n" \
17
- "In other news, it's pretty important that we " \
18
- 'can properly force a line break.', 40, 5, 5)
19
- ensure
20
- Newt::Screen.finish
21
- end
6
+ text, width, height = Newt.reflow_text('This is a quite a bit of text. It is 40 ' \
7
+ 'columns long, so some wrapping should be ' \
8
+ 'done. Did you know that the quick, brown ' \
9
+ "fox jumped over the lazy dog?\n\n" \
10
+ "In other news, it's pretty important that we " \
11
+ 'can properly force a line break.', 40, 5, 5)
22
12
 
23
13
  p text
24
14
  p width
@@ -26,7 +26,6 @@ f.add(b1, b2, b3, b4)
26
26
  grid.wrapped_window('first window')
27
27
  f.run
28
28
 
29
- # f.destroy
30
29
  Newt::Screen.pop_window
31
30
 
32
31
  flowed_text, text_width, text_height = Newt.reflow_text('This is a quite a bit of text. It is 40 ' \
@@ -58,7 +57,6 @@ f.add(b1, t, b2)
58
57
  f.run
59
58
 
60
59
  Newt::Screen.pop_window
61
- # f.destroy
62
60
 
63
61
  Newt::Screen.win_message('Simple', 'Ok', 'This is a simple message window')
64
62
  result = Newt::Screen.win_choice('Simple', 'Ok', 'Cancel', 'This is a simple choice window')
@@ -6,4 +6,6 @@ dir_config('newt')
6
6
  have_library('slang', 'SLsmg_refresh')
7
7
  have_library('newt', 'newtInit')
8
8
 
9
+ append_cflags(ENV['CFLAGS'])
10
+ append_ldflags(ENV['LDFLAGS'])
9
11
  create_makefile('ruby_newt/ruby_newt')
@@ -6,6 +6,8 @@
6
6
  #include <ruby.h>
7
7
  #include <newt.h>
8
8
 
9
+ static VALUE initialized = Qfalse;
10
+
9
11
  static VALUE mNewt;
10
12
  static VALUE mScreen;
11
13
  static VALUE cWidget;
@@ -29,6 +31,7 @@ static VALUE cGrid;
29
31
  static VALUE rb_ext_sCallback;
30
32
  static struct newtColors newtColors;
31
33
 
34
+ #define PTR2NUM(ptr) (SIZET2NUM((size_t)(ptr)))
32
35
  #define SYMBOL(str) (ID2SYM(rb_intern(str)))
33
36
  #define PROC_CALL (rb_intern("call"))
34
37
  #define RECEIVER(context) (rb_funcall((context), rb_intern("receiver"), 0))
@@ -36,14 +39,20 @@ static struct newtColors newtColors;
36
39
  #define IVAR_COLS (rb_intern("newt_ivar_cols"))
37
40
  #define IVAR_ROWS (rb_intern("newt_ivar_rows"))
38
41
  #define IVAR_FILTER_CALLBACK (rb_intern("newt_ivar_filter_callback"))
39
- #define IVAR_SUSPEND_CALLBACK (rb_intern("newt_ivar_suspend_callback"))
40
- #define IVAR_HELP_CALLBACK (rb_intern("newt_ivar_help_callback"))
41
- #define IVAR_WIDGET_CALLBACK (rb_intern("newt_ivar_widget_callback"))
42
+ #define CVAR_SUSPEND_CALLBACK (rb_intern("newt_cvar_suspend_callback"))
43
+ #define CVAR_HELP_CALLBACK (rb_intern("newt_cvar_help_callback"))
44
+ #define CVAR_WIDGET_CALLBACK (rb_intern("newt_cvar_widget_callback"))
42
45
 
43
46
  #define ARG_ERROR(given, expected) \
44
47
  rb_raise(rb_eArgError, "wrong number of arguments (given %d, expected %s)", \
45
48
  (given), (expected))
46
49
 
50
+ #define INIT_GUARD() do { \
51
+ if (initialized == Qfalse) { \
52
+ rb_raise(rb_eRuntimeError, "libnewt is not initialized"); \
53
+ } \
54
+ } while (0)
55
+
47
56
  #define FLAG_GC_FREE (1 << 0)
48
57
  #define FLAG_ADDED_TO_FORM (1 << 1)
49
58
 
@@ -55,6 +64,12 @@ struct Widget_data_s {
55
64
  int flags;
56
65
  };
57
66
 
67
+ typedef struct rb_newt_ExitStruct_s rb_newt_ExitStruct;
68
+ struct rb_newt_ExitStruct_s {
69
+ struct newtExitStruct es;
70
+ VALUE components;
71
+ };
72
+
58
73
  static void free_widget(void *ptr);
59
74
  static void form_destroy(Widget_data *form);
60
75
 
@@ -76,6 +91,7 @@ static const rb_data_type_t Widget_type = {
76
91
 
77
92
  #define Get_newtComponent(self, component) do { \
78
93
  Widget_data *data; \
94
+ INIT_GUARD(); \
79
95
  Get_Widget_Data((self), data); \
80
96
  (component) = data->co; \
81
97
  } while (0)
@@ -85,6 +101,7 @@ static inline VALUE widget_data_make(VALUE klass, newtComponent co, bool gc_free
85
101
  Widget_data *data;
86
102
  VALUE self = TypedData_Make_Struct(klass, Widget_data, &Widget_type, data);
87
103
  data->self = self;
104
+ data->components = Qnil;
88
105
  data->co = co;
89
106
  data->flags |= gc_free;
90
107
  return self;
@@ -122,6 +139,12 @@ static void form_destroy(Widget_data *form)
122
139
  rb_gc_unregister_address(&form->components);
123
140
  }
124
141
 
142
+ static void rb_newt_es_free(rb_newt_ExitStruct *rb_es)
143
+ {
144
+ rb_gc_unregister_address(&rb_es->components);
145
+ xfree(rb_es);
146
+ }
147
+
125
148
  #define Data_Attach(self, data) do { \
126
149
  VALUE ivar = get_newt_ivar((self)); \
127
150
  rb_ary_push(ivar, (data)); \
@@ -161,23 +184,27 @@ static VALUE rb_ext_ColorSetCustom(VALUE self, VALUE id)
161
184
  return INT2NUM(NEWT_COLORSET_CUSTOM(NUM2INT(id)));
162
185
  }
163
186
 
164
- static VALUE rb_ext_Screen_new()
187
+ static VALUE rb_ext_Screen_Init()
165
188
  {
189
+ if (initialized == Qtrue)
190
+ return Qnil;
191
+
166
192
  newtInit();
167
- newtCls();
168
193
  memcpy(&newtColors, &newtDefaultColorPalette, sizeof(struct newtColors));
194
+ initialized = Qtrue;
169
195
  return Qnil;
170
196
  }
171
197
 
172
- static VALUE rb_ext_Screen_Init()
198
+ static VALUE rb_ext_Screen_new()
173
199
  {
174
- newtInit();
175
- memcpy(&newtColors, &newtDefaultColorPalette, sizeof(struct newtColors));
200
+ rb_ext_Screen_Init();
201
+ newtCls();
176
202
  return Qnil;
177
203
  }
178
204
 
179
205
  static VALUE rb_ext_Screen_Cls()
180
206
  {
207
+ INIT_GUARD();
181
208
  newtCls();
182
209
  return Qnil;
183
210
  }
@@ -185,17 +212,20 @@ static VALUE rb_ext_Screen_Cls()
185
212
  static VALUE rb_ext_Screen_Finished()
186
213
  {
187
214
  newtFinished();
215
+ initialized = Qfalse;
188
216
  return Qnil;
189
217
  }
190
218
 
191
219
  static VALUE rb_ext_Screen_WaitForKey()
192
220
  {
221
+ INIT_GUARD();
193
222
  newtWaitForKey();
194
223
  return Qnil;
195
224
  }
196
225
 
197
226
  static VALUE rb_ext_Screen_ClearKeyBuffer()
198
227
  {
228
+ INIT_GUARD();
199
229
  newtClearKeyBuffer();
200
230
  return Qnil;
201
231
  }
@@ -203,17 +233,20 @@ static VALUE rb_ext_Screen_ClearKeyBuffer()
203
233
  static VALUE rb_ext_Screen_OpenWindow(VALUE self, VALUE left, VALUE top,
204
234
  VALUE width, VALUE height, VALUE title)
205
235
  {
236
+ INIT_GUARD();
206
237
  return INT2NUM(newtOpenWindow(NUM2INT(left), NUM2INT(top), NUM2INT(width),
207
238
  NUM2INT(height), StringValuePtr(title)));
208
239
  }
209
240
 
210
241
  static VALUE rb_ext_Screen_CenteredWindow(VALUE self, VALUE width, VALUE height, VALUE title)
211
242
  {
243
+ INIT_GUARD();
212
244
  return INT2NUM(newtCenteredWindow(NUM2INT(width), NUM2INT(height), StringValuePtr(title)));
213
245
  }
214
246
 
215
247
  static VALUE rb_ext_Screen_PopWindow(VALUE self)
216
248
  {
249
+ INIT_GUARD();
217
250
  newtPopWindow();
218
251
  return Qnil;
219
252
  }
@@ -361,43 +394,50 @@ static VALUE rb_ext_Screen_SetColors(VALUE self, VALUE colors)
361
394
  {
362
395
  Check_Type(colors, T_HASH);
363
396
  rb_hash_foreach(colors, rb_ext_Colors_callback_function, (VALUE) &newtColors);
397
+
398
+ INIT_GUARD();
364
399
  newtSetColors(newtColors);
365
400
  return Qnil;
366
401
  }
367
402
 
368
403
  static VALUE rb_ext_Screen_SetColor(VALUE self, VALUE colorset, VALUE fg, VALUE bg)
369
404
  {
405
+ INIT_GUARD();
370
406
  newtSetColor(NUM2INT(colorset), StringValuePtr(fg), StringValuePtr(bg));
371
407
  return Qnil;
372
408
  }
373
409
 
374
410
  static VALUE rb_ext_Screen_Resume()
375
411
  {
412
+ INIT_GUARD();
376
413
  newtResume();
377
414
  return Qnil;
378
415
  }
379
416
 
380
417
  static VALUE rb_ext_Screen_Suspend()
381
418
  {
419
+ INIT_GUARD();
382
420
  newtSuspend();
383
421
  return Qnil;
384
422
  }
385
423
 
386
424
  static VALUE rb_ext_Screen_Refresh()
387
425
  {
426
+ INIT_GUARD();
388
427
  newtRefresh();
389
428
  return Qnil;
390
429
  }
391
430
 
392
431
  static VALUE rb_ext_Screen_DrawRootText(VALUE self, VALUE col, VALUE row, VALUE text)
393
432
  {
394
-
433
+ INIT_GUARD();
395
434
  newtDrawRootText(NUM2INT(col), NUM2INT(row), StringValuePtr(text));
396
435
  return Qnil;
397
436
  }
398
437
 
399
438
  static VALUE rb_ext_Screen_PushHelpLine(VALUE self, VALUE text)
400
439
  {
440
+ INIT_GUARD();
401
441
  newtPushHelpLine(StringValuePtr(text));
402
442
 
403
443
  return Qnil;
@@ -405,30 +445,35 @@ static VALUE rb_ext_Screen_PushHelpLine(VALUE self, VALUE text)
405
445
 
406
446
  static VALUE rb_ext_Screen_RedrawHelpLine(VALUE self)
407
447
  {
448
+ INIT_GUARD();
408
449
  newtRedrawHelpLine();
409
450
  return Qnil;
410
451
  }
411
452
 
412
453
  static VALUE rb_ext_Screen_PopHelpLine(VALUE self)
413
454
  {
455
+ INIT_GUARD();
414
456
  newtPopHelpLine();
415
457
  return Qnil;
416
458
  }
417
459
 
418
460
  static VALUE rb_ext_Screen_Bell(VALUE self)
419
461
  {
462
+ INIT_GUARD();
420
463
  newtBell();
421
464
  return Qnil;
422
465
  }
423
466
 
424
467
  static VALUE rb_ext_Screen_CursorOff(VALUE self)
425
468
  {
469
+ INIT_GUARD();
426
470
  newtCursorOff();
427
471
  return Qnil;
428
472
  }
429
473
 
430
474
  static VALUE rb_ext_Screen_CursorOn(VALUE self)
431
475
  {
476
+ INIT_GUARD();
432
477
  newtCursorOn();
433
478
  return Qnil;
434
479
  }
@@ -437,12 +482,14 @@ static VALUE rb_ext_Screen_Size(VALUE self)
437
482
  {
438
483
  int cols, rows;
439
484
 
485
+ INIT_GUARD();
440
486
  newtGetScreenSize(&cols, &rows);
441
487
  return rb_ary_new_from_args(2, INT2NUM(cols), INT2NUM(rows));
442
488
  }
443
489
 
444
490
  static VALUE rb_ext_Screen_WinMessage(VALUE self, VALUE title, VALUE button, VALUE text)
445
491
  {
492
+ INIT_GUARD();
446
493
  newtWinMessage(StringValuePtr(title), StringValuePtr(button), StringValuePtr(text));
447
494
  return Qnil;
448
495
  }
@@ -450,6 +497,8 @@ static VALUE rb_ext_Screen_WinMessage(VALUE self, VALUE title, VALUE button, VAL
450
497
  static VALUE rb_ext_Screen_WinChoice(VALUE self, VALUE title, VALUE button1, VALUE button2, VALUE text)
451
498
  {
452
499
  int result;
500
+
501
+ INIT_GUARD();
453
502
  result = newtWinChoice(StringValuePtr(title), StringValuePtr(button1),
454
503
  StringValuePtr(button2), StringValuePtr(text));
455
504
  return INT2NUM(result);
@@ -467,6 +516,7 @@ static VALUE rb_ext_Screen_WinMenu(VALUE self, VALUE args)
467
516
  if (len < 8 || len > 9)
468
517
  ARG_ERROR(len, "8..9");
469
518
 
519
+ INIT_GUARD();
470
520
  title = StringValuePtr(RARRAY_PTR(args)[0]);
471
521
  text = StringValuePtr(RARRAY_PTR(args)[1]);
472
522
  width = NUM2INT(RARRAY_PTR(args)[2]);
@@ -504,6 +554,7 @@ static VALUE rb_ext_Screen_WinEntries(VALUE self, VALUE args)
504
554
  if (len < 8 || len > 9)
505
555
  ARG_ERROR(len, "8..9");
506
556
 
557
+ INIT_GUARD();
507
558
  title = StringValuePtr(RARRAY_PTR(args)[0]);
508
559
  text = StringValuePtr(RARRAY_PTR(args)[1]);
509
560
  width = NUM2INT(RARRAY_PTR(args)[2]);
@@ -555,7 +606,7 @@ void rb_ext_Screen_help_callback_function(newtComponent co, void *data)
555
606
  VALUE context, callback;
556
607
 
557
608
  widget = Make_Widget_Ref(cForm, co);
558
- cb = rb_ivar_get(mScreen, IVAR_HELP_CALLBACK);
609
+ cb = rb_cvar_get(mScreen, CVAR_HELP_CALLBACK);
559
610
  context = RSTRUCT_GET((VALUE) cb, 1);
560
611
  callback = RSTRUCT_GET((VALUE) cb, 2);
561
612
 
@@ -610,19 +661,23 @@ static VALUE rb_ext_Screen_SuspendCallback(int argc, VALUE *argv, VALUE self)
610
661
  if (argc < 1 || argc > 2)
611
662
  ARG_ERROR(argc, "1 or 2");
612
663
 
664
+ INIT_GUARD();
613
665
  if (argc == 2)
614
666
  data = argv[1];
615
667
 
616
668
  cb = rb_struct_new(rb_ext_sCallback, self, rb_binding_new(), argv[0], data, NULL);
617
- rb_ivar_set(self, IVAR_SUSPEND_CALLBACK, cb);
669
+ rb_obj_freeze(cb);
670
+ rb_cvar_set(self, CVAR_SUSPEND_CALLBACK, cb);
618
671
  newtSetSuspendCallback(rb_ext_Screen_suspend_callback_function, (void *) cb);
619
672
  return Qnil;
620
673
  }
621
674
 
622
675
  static VALUE rb_ext_Screen_HelpCallback(VALUE self, VALUE cb)
623
676
  {
677
+ INIT_GUARD();
624
678
  cb = rb_struct_new(rb_ext_sCallback, Qnil, rb_binding_new(), cb, Qnil, NULL);
625
- rb_ivar_set(self, IVAR_HELP_CALLBACK, cb);
679
+ rb_obj_freeze(cb);
680
+ rb_cvar_set(self, CVAR_HELP_CALLBACK, cb);
626
681
  newtSetHelpCallback(rb_ext_Screen_help_callback_function);
627
682
  return Qnil;
628
683
  }
@@ -635,12 +690,14 @@ static VALUE rb_ext_Widget_callback(int argc, VALUE *argv, VALUE self)
635
690
  if (argc < 1 || argc > 2)
636
691
  ARG_ERROR(argc, "1 or 2");
637
692
 
693
+ INIT_GUARD();
638
694
  if (argc == 2)
639
695
  data = argv[1];
640
696
 
641
697
  Get_newtComponent(self, co);
642
698
  cb = rb_struct_new(rb_ext_sCallback, self, rb_binding_new(), argv[0], data, NULL);
643
- rb_ivar_set(self, IVAR_WIDGET_CALLBACK, cb);
699
+ rb_obj_freeze(cb);
700
+ rb_cvar_set(self, CVAR_WIDGET_CALLBACK, cb);
644
701
  newtComponentAddCallback(co, rb_ext_Widget_callback_function, (void *) cb);
645
702
  return Qnil;
646
703
  }
@@ -683,94 +740,117 @@ static VALUE rb_ext_Widget_equal(VALUE self, VALUE obj)
683
740
  if (self == obj) return Qtrue;
684
741
 
685
742
  if (rb_obj_is_kind_of(obj, cWidget) || rb_obj_is_kind_of(obj, cExitStruct)) {
686
- Get_newtComponent(self, co);
743
+ Get_Widget_Data(self, data);
744
+ co = ((Widget_data *) data)->co;
687
745
  if (rb_obj_is_kind_of(obj, cExitStruct)) {
688
- Data_Get_Struct(obj, struct newtExitStruct, data);
689
- if (co == ((struct newtExitStruct *) data)->u.co)
746
+ Data_Get_Struct(obj, rb_newt_ExitStruct, data);
747
+ if (co == (((rb_newt_ExitStruct *) data)->es.u.co))
690
748
  return Qtrue;
691
749
  } else {
692
- Get_newtComponent(obj, cco);
750
+ Get_Widget_Data(obj, data);
751
+ cco = ((Widget_data *) data)->co;
693
752
  if (co == cco) return Qtrue;
694
753
  }
695
754
  }
696
755
  return Qfalse;
697
756
  }
698
757
 
758
+ static VALUE rb_ext_Widget_inspect(VALUE self)
759
+ {
760
+ newtComponent co;
761
+ void *data;
762
+
763
+ VALUE classname = rb_class_name(rb_obj_class(self));
764
+ char *class = StringValuePtr(classname);
765
+
766
+ Get_Widget_Data(self, data);
767
+ co = ((Widget_data *) data)->co;
768
+ return rb_sprintf("#<%s:%p component=%p>", class, (void *) self, co);
769
+ }
770
+
699
771
  static VALUE rb_ext_ExitStruct_reason(VALUE self)
700
772
  {
701
- struct newtExitStruct *es;
773
+ rb_newt_ExitStruct *rb_es;
702
774
 
703
- Data_Get_Struct(self, struct newtExitStruct, es);
704
- return INT2NUM(es->reason);
775
+ Data_Get_Struct(self, rb_newt_ExitStruct, rb_es);
776
+ return INT2NUM(rb_es->es.reason);
705
777
  }
706
778
 
707
779
  static VALUE rb_ext_ExitStruct_watch(VALUE self)
708
780
  {
709
- struct newtExitStruct *es;
781
+ rb_newt_ExitStruct *rb_es;
710
782
 
711
- Data_Get_Struct(self, struct newtExitStruct, es);
712
- if (es->reason == NEWT_EXIT_FDREADY)
713
- return INT2NUM(es->u.watch);
783
+ Data_Get_Struct(self, rb_newt_ExitStruct, rb_es);
784
+ if (rb_es->es.reason == NEWT_EXIT_FDREADY)
785
+ return INT2NUM(rb_es->es.u.watch);
714
786
  else
715
787
  return Qnil;
716
788
  }
717
789
 
718
790
  static VALUE rb_ext_ExitStruct_key(VALUE self)
719
791
  {
720
- struct newtExitStruct *es;
792
+ rb_newt_ExitStruct *rb_es;
721
793
 
722
- Data_Get_Struct(self, struct newtExitStruct, es);
723
- if (es->reason == NEWT_EXIT_HOTKEY)
724
- return INT2NUM(es->u.key);
794
+ Data_Get_Struct(self, rb_newt_ExitStruct, rb_es);
795
+ if (rb_es->es.reason == NEWT_EXIT_HOTKEY)
796
+ return INT2NUM(rb_es->es.u.key);
725
797
  else
726
798
  return Qnil;
727
799
  }
728
800
 
729
801
  static VALUE rb_ext_ExitStruct_component(VALUE self)
730
802
  {
731
- struct newtExitStruct *es;
803
+ rb_newt_ExitStruct *rb_es;
732
804
 
733
- Data_Get_Struct(self, struct newtExitStruct, es);
734
- if (es->reason == NEWT_EXIT_COMPONENT)
735
- return Make_Widget(cWidget, es->u.co);
736
- else
737
- return Qnil;
805
+ Data_Get_Struct(self, rb_newt_ExitStruct, rb_es);
806
+ if (rb_es->es.reason == NEWT_EXIT_COMPONENT) {
807
+ return rb_hash_aref(rb_es->components, PTR2NUM(rb_es->es.u.co));
808
+ } else {
809
+ return Qnil;
810
+ }
738
811
  }
739
812
 
740
813
  static VALUE rb_ext_ExitStruct_equal(VALUE self, VALUE obj)
741
814
  {
742
- struct newtExitStruct *es;
815
+ rb_newt_ExitStruct *rb_es;
743
816
  newtComponent co;
817
+ void *data;
744
818
 
745
819
  if (NIL_P(obj)) return Qfalse;
746
820
  if (self == obj) return Qtrue;
747
821
 
748
822
  /* Compare components for backwards compatibility with newtRunForm(). */
749
823
  if (rb_obj_is_kind_of(obj, cWidget)) {
750
- Data_Get_Struct(self, struct newtExitStruct, es);
751
- Get_newtComponent(obj, co);
752
- if (es->reason == NEWT_EXIT_COMPONENT && es->u.co == co) return Qtrue;
824
+ Data_Get_Struct(self, rb_newt_ExitStruct, rb_es);
825
+ Get_Widget_Data(obj, data);
826
+ co = ((Widget_data *) data)->co;
827
+ if (rb_es->es.reason == NEWT_EXIT_COMPONENT
828
+ && rb_es->es.u.co == co) return Qtrue;
753
829
  }
754
830
  return Qfalse;
755
831
  }
756
832
 
757
833
  static VALUE rb_ext_ExitStruct_inspect(VALUE self)
758
834
  {
759
- struct newtExitStruct *es;
835
+ rb_newt_ExitStruct *rb_es;
760
836
  VALUE classname = rb_class_name(rb_obj_class(self));
761
837
  char *class = StringValuePtr(classname);
762
838
 
763
- Data_Get_Struct(self, struct newtExitStruct, es);
764
- switch(es->reason) {
839
+ Data_Get_Struct(self, rb_newt_ExitStruct, rb_es);
840
+ switch(rb_es->es.reason) {
765
841
  case NEWT_EXIT_HOTKEY:
766
- return rb_sprintf("#<%s reason=%d, key=%d>", class, es->reason, es->u.key);
842
+ return rb_sprintf("#<%s:%p reason=%d, key=%d>", class, (void *) self,
843
+ rb_es->es.reason, rb_es->es.u.key);
767
844
  case NEWT_EXIT_COMPONENT:
768
- return rb_sprintf("#<%s reason=%d, component=%p>", class, es->reason, es->u.co);
845
+ return rb_sprintf("#<%s:%p reason=%d, component=%p>", class, (void *) self,
846
+ rb_es->es.reason, rb_es->es.u.co);
769
847
  case NEWT_EXIT_FDREADY:
770
- return rb_sprintf("#<%s reason=%d, watch=%d>", class, es->reason, es->u.watch);
848
+ return rb_sprintf("#<%s:%p reason=%d, watch=%d>", class, (void *) self,
849
+ rb_es->es.reason, rb_es->es.u.watch);
771
850
  case NEWT_EXIT_TIMER:
772
851
  case NEWT_EXIT_ERROR:
773
- return rb_sprintf("#<%s reason=%d>", class, es->reason);
852
+ return rb_sprintf("#<%s:%p reason=%d>", class, (void *) self,
853
+ rb_es->es.reason);
774
854
  default:
775
855
  return rb_call_super(0, NULL);
776
856
  }
@@ -780,16 +860,17 @@ static VALUE rb_ext_Label_new(VALUE self, VALUE left, VALUE top, VALUE text)
780
860
  {
781
861
  newtComponent co;
782
862
 
863
+ INIT_GUARD();
783
864
  co = newtLabel(NUM2INT(left), NUM2INT(top), StringValuePtr(text));
784
865
  return Make_Widget(self, co);
785
866
  }
786
867
 
787
868
  static VALUE rb_ext_Label_SetText(VALUE self, VALUE text)
788
869
  {
789
- Widget_data *data;
870
+ newtComponent co;
790
871
 
791
- Get_Widget_Data(self, data);
792
- newtLabelSetText(data->co, StringValuePtr(text));
872
+ Get_newtComponent(self, co);
873
+ newtLabelSetText(co, StringValuePtr(text));
793
874
  return Qnil;
794
875
  }
795
876
 
@@ -806,6 +887,7 @@ static VALUE rb_ext_CompactButton_new(VALUE self, VALUE left, VALUE top, VALUE t
806
887
  {
807
888
  newtComponent co;
808
889
 
890
+ INIT_GUARD();
809
891
  co = newtCompactButton(NUM2INT(left), NUM2INT(top), StringValuePtr(text));
810
892
  return Make_Widget(self, co);
811
893
  }
@@ -814,6 +896,7 @@ static VALUE rb_ext_Button_new(VALUE self, VALUE left, VALUE top, VALUE text)
814
896
  {
815
897
  newtComponent co;
816
898
 
899
+ INIT_GUARD();
817
900
  co = newtButton(NUM2INT(left), NUM2INT(top), StringValuePtr(text));
818
901
  return Make_Widget(self, co);
819
902
  }
@@ -827,6 +910,7 @@ static VALUE rb_ext_Checkbox_new(int argc, VALUE *argv, VALUE self)
827
910
  if (argc < 3 || argc > 5)
828
911
  ARG_ERROR(argc, "3..5");
829
912
 
913
+ INIT_GUARD();
830
914
  if (argc > 3 && !NIL_P(argv[3]))
831
915
  defValue = StringValuePtr(argv[3])[0];
832
916
 
@@ -883,6 +967,7 @@ static VALUE rb_ext_RadioButton_new(int argc, VALUE *argv, VALUE self)
883
967
  if (argc < 3 || argc > 5)
884
968
  ARG_ERROR(argc, "3..5");
885
969
 
970
+ INIT_GUARD();
886
971
  if (argc >= 4)
887
972
  is_default = NUM2INT(argv[3]);
888
973
 
@@ -919,7 +1004,9 @@ static VALUE rb_ext_Listbox_new(int argc, VALUE *argv, VALUE self)
919
1004
  if (argc < 3 || argc > 4)
920
1005
  ARG_ERROR(argc, "3..4");
921
1006
 
1007
+ INIT_GUARD();
922
1008
  flags = (argc == 4) ? NUM2INT(argv[3]) : 0;
1009
+
923
1010
  co = newtListbox(NUM2INT(argv[0]), NUM2INT(argv[1]), NUM2INT(argv[2]), flags);
924
1011
  return Make_Widget(self, co);
925
1012
  }
@@ -1091,7 +1178,9 @@ static VALUE rb_ext_CheckboxTree_new(int argc, VALUE *argv, VALUE self)
1091
1178
  if (argc < 3 || argc > 4)
1092
1179
  ARG_ERROR(argc, "3..4");
1093
1180
 
1181
+ INIT_GUARD();
1094
1182
  flags = (argc == 4) ? NUM2INT(argv[3]) : 0;
1183
+
1095
1184
  co = newtCheckboxTree(NUM2INT(argv[0]), NUM2INT(argv[1]), NUM2INT(argv[2]), flags);
1096
1185
  return Make_Widget(self, co);
1097
1186
  }
@@ -1213,11 +1302,13 @@ static VALUE rb_ext_CheckboxTreeMulti_new(int argc, VALUE *argv, VALUE self)
1213
1302
  if (argc < 3 || argc > 5)
1214
1303
  ARG_ERROR(argc, "3..5");
1215
1304
 
1305
+ INIT_GUARD();
1216
1306
  seq = NULL;
1217
1307
  if (argc >= 4 && !NIL_P(argv[3]) && RSTRING_LEN(argv[3]))
1218
1308
  seq = StringValuePtr(argv[3]);
1219
1309
 
1220
1310
  flags = (argc == 5) ? NUM2INT(argv[4]) : 0;
1311
+
1221
1312
  co = newtCheckboxTreeMulti(NUM2INT(argv[0]), NUM2INT(argv[1]), NUM2INT(argv[2]), seq, flags);
1222
1313
  return Make_Widget(self, co);
1223
1314
  }
@@ -1241,7 +1332,9 @@ static VALUE rb_ext_Textbox_new(int argc, VALUE *argv, VALUE self)
1241
1332
  if (argc < 4 || argc > 5)
1242
1333
  ARG_ERROR(argc, "4..5");
1243
1334
 
1335
+ INIT_GUARD();
1244
1336
  flags = (argc == 5) ? NUM2INT(argv[4]) : 0;
1337
+
1245
1338
  co = newtTextbox(NUM2INT(argv[0]), NUM2INT(argv[1]), NUM2INT(argv[2]), NUM2INT(argv[3]), flags);
1246
1339
  return Make_Widget(self, co);
1247
1340
  }
@@ -1289,7 +1382,9 @@ static VALUE rb_ext_TextboxReflowed_new(int argc, VALUE *argv, VALUE self)
1289
1382
  if (argc < 6 || argc > 7)
1290
1383
  ARG_ERROR(argc, "6..7");
1291
1384
 
1385
+ INIT_GUARD();
1292
1386
  flags = (argc == 7) ? NUM2INT(argv[6]) : 0;
1387
+
1293
1388
  co = newtTextboxReflowed(NUM2INT(argv[0]), NUM2INT(argv[1]),
1294
1389
  StringValuePtr(argv[2]), NUM2INT(argv[3]),
1295
1390
  NUM2INT(argv[4]), NUM2INT(argv[5]), flags);
@@ -1306,6 +1401,7 @@ static VALUE rb_ext_Form_new(int argc, VALUE *argv, VALUE self)
1306
1401
  if (argc > 3)
1307
1402
  ARG_ERROR(argc, "0..3");
1308
1403
 
1404
+ INIT_GUARD();
1309
1405
  helpTag = (argc >= 2) ? argv[1] : Qnil;
1310
1406
  flags = (argc == 3) ? NUM2INT(argv[2]) : 0;
1311
1407
 
@@ -1329,9 +1425,10 @@ static VALUE rb_ext_Form_AddComponents(VALUE self, VALUE components)
1329
1425
  VALUE str;
1330
1426
  int i;
1331
1427
 
1428
+ INIT_GUARD();
1332
1429
  Get_Widget_Data(self, form);
1333
- if (RARRAY_LEN(components) > 0 && (void *) form->components == NULL) {
1334
- form->components = rb_ary_new();
1430
+ if (RARRAY_LEN(components) > 0 && form->components == Qnil) {
1431
+ form->components = rb_hash_new();
1335
1432
  rb_gc_register_address(&form->components);
1336
1433
  }
1337
1434
 
@@ -1345,7 +1442,7 @@ static VALUE rb_ext_Form_AddComponents(VALUE self, VALUE components)
1345
1442
 
1346
1443
  co->flags ^= FLAG_GC_FREE;
1347
1444
  co->flags |= FLAG_ADDED_TO_FORM;
1348
- rb_ary_push(form->components, RARRAY_PTR(components)[i]);
1445
+ rb_hash_aset(form->components, PTR2NUM(co->co), RARRAY_PTR(components)[i]);
1349
1446
  newtFormAddComponent(form->co, co->co);
1350
1447
  }
1351
1448
  return Qnil;
@@ -1399,13 +1496,16 @@ static VALUE rb_ext_Form_SetWidth(VALUE self, VALUE width)
1399
1496
 
1400
1497
  static VALUE rb_ext_Form_Run(VALUE self)
1401
1498
  {
1402
- newtComponent form;
1403
- struct newtExitStruct *es;
1499
+ Widget_data *data;
1500
+ rb_newt_ExitStruct *rb_es;
1404
1501
 
1405
- Get_newtComponent(self, form);
1406
- es = ALLOC(struct newtExitStruct);
1407
- newtFormRun(form, es);
1408
- return Data_Wrap_Struct(cExitStruct, 0, xfree, es);
1502
+ INIT_GUARD();
1503
+ Get_Widget_Data(self, data);
1504
+ rb_es = ALLOC(rb_newt_ExitStruct);
1505
+ newtFormRun(data->co, &rb_es->es);
1506
+ rb_es->components = data->components;
1507
+ rb_gc_register_address(&rb_es->components);
1508
+ return Data_Wrap_Struct(cExitStruct, 0, rb_newt_es_free, rb_es);
1409
1509
  }
1410
1510
 
1411
1511
  static VALUE rb_ext_Form_DrawForm(VALUE self)
@@ -1457,7 +1557,9 @@ static VALUE rb_ext_Entry_new(int argc, VALUE *argv, VALUE self)
1457
1557
  if (argc < 4 || argc > 5)
1458
1558
  ARG_ERROR(argc, "4..5");
1459
1559
 
1560
+ INIT_GUARD();
1460
1561
  flags = (argc == 5) ? NUM2INT(argv[4]) : 0;
1562
+
1461
1563
  co = newtEntry(NUM2INT(argv[0]), NUM2INT(argv[1]), StringValuePtr(argv[2]),
1462
1564
  NUM2INT(argv[3]), NULL, flags);
1463
1565
 
@@ -1507,6 +1609,7 @@ static VALUE rb_ext_Entry_SetFilter(int argc, VALUE *argv, VALUE self)
1507
1609
 
1508
1610
  Get_newtComponent(self, co);
1509
1611
  cb = rb_struct_new(rb_ext_sCallback, self, rb_binding_new(), argv[0], data, NULL);
1612
+ rb_obj_freeze(cb);
1510
1613
  rb_ivar_set(self, IVAR_FILTER_CALLBACK, cb);
1511
1614
  newtEntrySetFilter(co, rb_ext_Entry_filter_function, (void *) cb);
1512
1615
  return Qnil;
@@ -1558,6 +1661,7 @@ static VALUE rb_ext_Scale_new(VALUE self, VALUE left, VALUE top, VALUE width, VA
1558
1661
  {
1559
1662
  newtComponent co;
1560
1663
 
1664
+ INIT_GUARD();
1561
1665
  co = newtScale(NUM2INT(left), NUM2INT(top), NUM2INT(width), NUM2INT(fullValue));
1562
1666
  return Make_Widget(self, co);
1563
1667
  }
@@ -1592,6 +1696,7 @@ static VALUE rb_ext_Grid_new(VALUE self, VALUE cols, VALUE rows)
1592
1696
  if (num_cols <= 0 || num_rows <= 0)
1593
1697
  rb_raise(rb_eRuntimeError, "specified number of columns or rows should be greater than 0");
1594
1698
 
1699
+ INIT_GUARD();
1595
1700
  grid = newtCreateGrid(num_cols, num_rows);
1596
1701
  widget = Data_Wrap_Struct(self, 0, 0, grid);
1597
1702
  rb_ivar_set(widget, IVAR_COLS, cols);
@@ -1615,10 +1720,13 @@ static VALUE rb_ext_Grid_SetField(VALUE self, VALUE col, VALUE row, VALUE type,
1615
1720
  if (icol >= cols || irow >= rows)
1616
1721
  rb_raise(rb_eRuntimeError, "attempting to set a field at an invalid position (%d, %d)", icol, irow);
1617
1722
 
1618
- if (itype == NEWT_GRID_SUBGRID)
1723
+ INIT_GUARD();
1724
+ if (itype == NEWT_GRID_SUBGRID) {
1619
1725
  Data_Get_Struct(val, struct grid_s, co);
1620
- else
1621
- Get_newtComponent(val, co);
1726
+ } else {
1727
+ Get_Widget_Data(val, co);
1728
+ co = ((Widget_data *) co)->co;
1729
+ }
1622
1730
 
1623
1731
  Data_Get_Struct(self, struct grid_s, grid);
1624
1732
  newtGridSetField(grid, icol, irow, itype, co, NUM2INT(padLeft),
@@ -1636,6 +1744,7 @@ static VALUE rb_ext_Grid_WrappedWindow(int argc, VALUE *argv, VALUE self)
1636
1744
  if (argc != 1 && argc != 3)
1637
1745
  ARG_ERROR(argc, "1 or 3");
1638
1746
 
1747
+ INIT_GUARD();
1639
1748
  title = StringValuePtr(argv[0]);
1640
1749
  Data_Get_Struct(self, struct grid_s, grid);
1641
1750
  if (argc == 1) {
@@ -1651,6 +1760,7 @@ static VALUE rb_ext_Grid_GetSize(VALUE self)
1651
1760
  newtGrid grid;
1652
1761
  int width, height;
1653
1762
 
1763
+ INIT_GUARD();
1654
1764
  Data_Get_Struct(self, struct grid_s, grid);
1655
1765
  newtGridGetSize(grid, &width, &height);
1656
1766
  return rb_ary_new_from_args(2, INT2NUM(width), INT2NUM(height));
@@ -1658,12 +1768,14 @@ static VALUE rb_ext_Grid_GetSize(VALUE self)
1658
1768
 
1659
1769
  void Init_ruby_newt(){
1660
1770
  mNewt = rb_define_module("Newt");
1771
+ rb_define_module_function(mNewt, "init", rb_ext_Screen_Init, 0);
1772
+ rb_define_module_function(mNewt, "finish", rb_ext_Screen_Finished, 0);
1661
1773
  rb_define_module_function(mNewt, "delay", rb_ext_Delay, 1);
1662
1774
  rb_define_module_function(mNewt, "reflow_text", rb_ext_ReflowText, 4);
1663
1775
 
1664
1776
  mScreen = rb_define_class_under(mNewt, "Screen", rb_cObject);
1665
- rb_define_module_function(mScreen, "new", rb_ext_Screen_new, 0);
1666
1777
  rb_define_module_function(mScreen, "init", rb_ext_Screen_Init, 0);
1778
+ rb_define_module_function(mScreen, "new", rb_ext_Screen_new, 0);
1667
1779
  rb_define_module_function(mScreen, "cls", rb_ext_Screen_Cls, 0);
1668
1780
  rb_define_module_function(mScreen, "finish", rb_ext_Screen_Finished, 0);
1669
1781
  rb_define_module_function(mScreen, "wait_for_key", rb_ext_Screen_WaitForKey, 0);
@@ -1691,7 +1803,7 @@ void Init_ruby_newt(){
1691
1803
  rb_define_module_function(mScreen, "win_menu", rb_ext_Screen_WinMenu, -2);
1692
1804
  rb_define_module_function(mScreen, "win_entries", rb_ext_Screen_WinEntries, -2);
1693
1805
 
1694
- rb_ext_sCallback = rb_struct_define(NULL, "widget", "context", "callback", "data", NULL);
1806
+ rb_ext_sCallback = rb_struct_define("NewtCallback", "widget", "context", "callback", "data", NULL);
1695
1807
 
1696
1808
  cWidget = rb_define_class_under(mNewt, "Widget", rb_cObject);
1697
1809
  rb_define_method(cWidget, "callback", rb_ext_Widget_callback, -1);
@@ -1699,6 +1811,7 @@ void Init_ruby_newt(){
1699
1811
  rb_define_method(cWidget, "get_position", rb_ext_Widget_GetPosition, 0);
1700
1812
  rb_define_method(cWidget, "get_size", rb_ext_Widget_GetSize, 0);
1701
1813
  rb_define_method(cWidget, "==", rb_ext_Widget_equal, 1);
1814
+ rb_define_method(cWidget, "inspect", rb_ext_Widget_inspect, 0);
1702
1815
 
1703
1816
  cCompactButton = rb_define_class_under(mNewt, "CompactButton", cWidget);
1704
1817
  rb_define_singleton_method(cCompactButton, "new", rb_ext_CompactButton_new, 3);
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Newt
2
- VERSION = '1.0.0.pre1'
2
+ VERSION = '1.0.0'
3
3
  end
metadata CHANGED
@@ -1,16 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: newt
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.pre1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Noritsugu Nakamura
8
8
  - Eric Sperano
9
9
  - Lukas Zapletal
10
- autorequire:
10
+ - Robert Gill
11
+ autorequire:
11
12
  bindir: bin
12
13
  cert_chain: []
13
- date: 2019-03-06 00:00:00.000000000 Z
14
+ date: 2022-03-02 00:00:00.000000000 Z
14
15
  dependencies: []
15
16
  description: Ruby bindings for newt TUI library
16
17
  email: foreman-dev@googlegroups.com
@@ -66,7 +67,7 @@ homepage: https://github.com/theforeman/ruby-newt
66
67
  licenses:
67
68
  - MIT
68
69
  metadata: {}
69
- post_install_message:
70
+ post_install_message:
70
71
  rdoc_options: []
71
72
  require_paths:
72
73
  - lib
@@ -78,13 +79,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
78
79
  version: '0'
79
80
  required_rubygems_version: !ruby/object:Gem::Requirement
80
81
  requirements:
81
- - - ">"
82
+ - - ">="
82
83
  - !ruby/object:Gem::Version
83
- version: 1.3.1
84
+ version: '0'
84
85
  requirements: []
85
- rubyforge_project:
86
- rubygems_version: 2.7.6
87
- signing_key:
86
+ rubygems_version: 3.1.6
87
+ signing_key:
88
88
  specification_version: 4
89
89
  summary: Ruby bindings for newt
90
90
  test_files: []