newt 1.0.0.pre1 → 1.0.1

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: 5359a4863477fd0ef9301a39de7f52eec456a006e55c12fe8dbab231f0e46eb4
4
+ data.tar.gz: 563df08ba0b46e638a855a6ce62f17360e054125bd886086294d0ceb05e2f4b7
5
5
  SHA512:
6
- metadata.gz: 4d843ba26cb1bfd186bed6a06474ee928568adac9b207418c29ef7e3f760cfb313e5e01934901106bf4d7f69ea031e31763e536e6b80f1b14ea0075e08391a27
7
- data.tar.gz: a668be2a8be9faeef2b3aa7219140abbf32247b1e4e01e180ee9720bb3f855ecff1c0637e0d064ef92d78cad3e262f86b56317ccc465eb15e89a1505ddf1e0d9
6
+ metadata.gz: bab12bfb6e2bfd73116c94fe7489bee4063351092f900e91648fbb3ec85d128ba67b137d0fc143a725ca2b77633fe25b16918392bd08cab9edee2118c362c8b4
7
+ data.tar.gz: 5950e44aa2201eaff12e0d3725f0ff9f573cd2f3bf829068c660e304544052f17f55695efb731d6d042a63ad99d297f573ac7081d41089819fde4b539a5611d9
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')
@@ -1,9 +1,9 @@
1
1
  require 'mkmf'
2
2
 
3
- dir_config('slang')
4
- dir_config('newt')
3
+ pkg_config('slang')
4
+ pkg_config('libnewt')
5
5
 
6
- have_library('slang', 'SLsmg_refresh')
7
- have_library('newt', 'newtInit')
6
+ append_cflags(ENV['CFLAGS'])
7
+ append_ldflags(ENV['LDFLAGS'])
8
8
 
9
9
  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,21 +31,28 @@ 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))
35
38
  #define IVAR_DATA (rb_intern("newt_ivar_data"))
36
39
  #define IVAR_COLS (rb_intern("newt_ivar_cols"))
37
40
  #define IVAR_ROWS (rb_intern("newt_ivar_rows"))
41
+ #define CVAR_SUSPEND_CALLBACK (rb_intern("newt_cvar_suspend_callback"))
42
+ #define CVAR_HELP_CALLBACK (rb_intern("newt_cvar_help_callback"))
38
43
  #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
44
  #define IVAR_WIDGET_CALLBACK (rb_intern("newt_ivar_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;
@@ -104,6 +121,13 @@ static inline Widget_data *widget_data_get(VALUE self)
104
121
  return data;
105
122
  }
106
123
 
124
+ NORETURN(static VALUE newt_s_alloc(VALUE klass));
125
+ static VALUE newt_s_alloc(VALUE klass)
126
+ {
127
+ rb_raise(rb_eTypeError, "allocator undefined for %"PRIsVALUE, klass);
128
+ UNREACHABLE_RETURN(Qnil);
129
+ }
130
+
107
131
  static void free_widget(void *ptr)
108
132
  {
109
133
  Widget_data *data = (Widget_data *) ptr;
@@ -122,6 +146,12 @@ static void form_destroy(Widget_data *form)
122
146
  rb_gc_unregister_address(&form->components);
123
147
  }
124
148
 
149
+ static void rb_newt_es_free(rb_newt_ExitStruct *rb_es)
150
+ {
151
+ rb_gc_unregister_address(&rb_es->components);
152
+ xfree(rb_es);
153
+ }
154
+
125
155
  #define Data_Attach(self, data) do { \
126
156
  VALUE ivar = get_newt_ivar((self)); \
127
157
  rb_ary_push(ivar, (data)); \
@@ -161,23 +191,27 @@ static VALUE rb_ext_ColorSetCustom(VALUE self, VALUE id)
161
191
  return INT2NUM(NEWT_COLORSET_CUSTOM(NUM2INT(id)));
162
192
  }
163
193
 
164
- static VALUE rb_ext_Screen_new()
194
+ static VALUE rb_ext_Screen_Init()
165
195
  {
196
+ if (initialized == Qtrue)
197
+ return Qnil;
198
+
166
199
  newtInit();
167
- newtCls();
168
200
  memcpy(&newtColors, &newtDefaultColorPalette, sizeof(struct newtColors));
201
+ initialized = Qtrue;
169
202
  return Qnil;
170
203
  }
171
204
 
172
- static VALUE rb_ext_Screen_Init()
205
+ static VALUE rb_ext_Screen_new()
173
206
  {
174
- newtInit();
175
- memcpy(&newtColors, &newtDefaultColorPalette, sizeof(struct newtColors));
207
+ rb_ext_Screen_Init();
208
+ newtCls();
176
209
  return Qnil;
177
210
  }
178
211
 
179
212
  static VALUE rb_ext_Screen_Cls()
180
213
  {
214
+ INIT_GUARD();
181
215
  newtCls();
182
216
  return Qnil;
183
217
  }
@@ -185,17 +219,20 @@ static VALUE rb_ext_Screen_Cls()
185
219
  static VALUE rb_ext_Screen_Finished()
186
220
  {
187
221
  newtFinished();
222
+ initialized = Qfalse;
188
223
  return Qnil;
189
224
  }
190
225
 
191
226
  static VALUE rb_ext_Screen_WaitForKey()
192
227
  {
228
+ INIT_GUARD();
193
229
  newtWaitForKey();
194
230
  return Qnil;
195
231
  }
196
232
 
197
233
  static VALUE rb_ext_Screen_ClearKeyBuffer()
198
234
  {
235
+ INIT_GUARD();
199
236
  newtClearKeyBuffer();
200
237
  return Qnil;
201
238
  }
@@ -203,17 +240,20 @@ static VALUE rb_ext_Screen_ClearKeyBuffer()
203
240
  static VALUE rb_ext_Screen_OpenWindow(VALUE self, VALUE left, VALUE top,
204
241
  VALUE width, VALUE height, VALUE title)
205
242
  {
243
+ INIT_GUARD();
206
244
  return INT2NUM(newtOpenWindow(NUM2INT(left), NUM2INT(top), NUM2INT(width),
207
245
  NUM2INT(height), StringValuePtr(title)));
208
246
  }
209
247
 
210
248
  static VALUE rb_ext_Screen_CenteredWindow(VALUE self, VALUE width, VALUE height, VALUE title)
211
249
  {
250
+ INIT_GUARD();
212
251
  return INT2NUM(newtCenteredWindow(NUM2INT(width), NUM2INT(height), StringValuePtr(title)));
213
252
  }
214
253
 
215
254
  static VALUE rb_ext_Screen_PopWindow(VALUE self)
216
255
  {
256
+ INIT_GUARD();
217
257
  newtPopWindow();
218
258
  return Qnil;
219
259
  }
@@ -361,43 +401,50 @@ static VALUE rb_ext_Screen_SetColors(VALUE self, VALUE colors)
361
401
  {
362
402
  Check_Type(colors, T_HASH);
363
403
  rb_hash_foreach(colors, rb_ext_Colors_callback_function, (VALUE) &newtColors);
404
+
405
+ INIT_GUARD();
364
406
  newtSetColors(newtColors);
365
407
  return Qnil;
366
408
  }
367
409
 
368
410
  static VALUE rb_ext_Screen_SetColor(VALUE self, VALUE colorset, VALUE fg, VALUE bg)
369
411
  {
412
+ INIT_GUARD();
370
413
  newtSetColor(NUM2INT(colorset), StringValuePtr(fg), StringValuePtr(bg));
371
414
  return Qnil;
372
415
  }
373
416
 
374
417
  static VALUE rb_ext_Screen_Resume()
375
418
  {
419
+ INIT_GUARD();
376
420
  newtResume();
377
421
  return Qnil;
378
422
  }
379
423
 
380
424
  static VALUE rb_ext_Screen_Suspend()
381
425
  {
426
+ INIT_GUARD();
382
427
  newtSuspend();
383
428
  return Qnil;
384
429
  }
385
430
 
386
431
  static VALUE rb_ext_Screen_Refresh()
387
432
  {
433
+ INIT_GUARD();
388
434
  newtRefresh();
389
435
  return Qnil;
390
436
  }
391
437
 
392
438
  static VALUE rb_ext_Screen_DrawRootText(VALUE self, VALUE col, VALUE row, VALUE text)
393
439
  {
394
-
440
+ INIT_GUARD();
395
441
  newtDrawRootText(NUM2INT(col), NUM2INT(row), StringValuePtr(text));
396
442
  return Qnil;
397
443
  }
398
444
 
399
445
  static VALUE rb_ext_Screen_PushHelpLine(VALUE self, VALUE text)
400
446
  {
447
+ INIT_GUARD();
401
448
  newtPushHelpLine(StringValuePtr(text));
402
449
 
403
450
  return Qnil;
@@ -405,30 +452,35 @@ static VALUE rb_ext_Screen_PushHelpLine(VALUE self, VALUE text)
405
452
 
406
453
  static VALUE rb_ext_Screen_RedrawHelpLine(VALUE self)
407
454
  {
455
+ INIT_GUARD();
408
456
  newtRedrawHelpLine();
409
457
  return Qnil;
410
458
  }
411
459
 
412
460
  static VALUE rb_ext_Screen_PopHelpLine(VALUE self)
413
461
  {
462
+ INIT_GUARD();
414
463
  newtPopHelpLine();
415
464
  return Qnil;
416
465
  }
417
466
 
418
467
  static VALUE rb_ext_Screen_Bell(VALUE self)
419
468
  {
469
+ INIT_GUARD();
420
470
  newtBell();
421
471
  return Qnil;
422
472
  }
423
473
 
424
474
  static VALUE rb_ext_Screen_CursorOff(VALUE self)
425
475
  {
476
+ INIT_GUARD();
426
477
  newtCursorOff();
427
478
  return Qnil;
428
479
  }
429
480
 
430
481
  static VALUE rb_ext_Screen_CursorOn(VALUE self)
431
482
  {
483
+ INIT_GUARD();
432
484
  newtCursorOn();
433
485
  return Qnil;
434
486
  }
@@ -437,12 +489,14 @@ static VALUE rb_ext_Screen_Size(VALUE self)
437
489
  {
438
490
  int cols, rows;
439
491
 
492
+ INIT_GUARD();
440
493
  newtGetScreenSize(&cols, &rows);
441
494
  return rb_ary_new_from_args(2, INT2NUM(cols), INT2NUM(rows));
442
495
  }
443
496
 
444
497
  static VALUE rb_ext_Screen_WinMessage(VALUE self, VALUE title, VALUE button, VALUE text)
445
498
  {
499
+ INIT_GUARD();
446
500
  newtWinMessage(StringValuePtr(title), StringValuePtr(button), StringValuePtr(text));
447
501
  return Qnil;
448
502
  }
@@ -450,6 +504,8 @@ static VALUE rb_ext_Screen_WinMessage(VALUE self, VALUE title, VALUE button, VAL
450
504
  static VALUE rb_ext_Screen_WinChoice(VALUE self, VALUE title, VALUE button1, VALUE button2, VALUE text)
451
505
  {
452
506
  int result;
507
+
508
+ INIT_GUARD();
453
509
  result = newtWinChoice(StringValuePtr(title), StringValuePtr(button1),
454
510
  StringValuePtr(button2), StringValuePtr(text));
455
511
  return INT2NUM(result);
@@ -467,6 +523,7 @@ static VALUE rb_ext_Screen_WinMenu(VALUE self, VALUE args)
467
523
  if (len < 8 || len > 9)
468
524
  ARG_ERROR(len, "8..9");
469
525
 
526
+ INIT_GUARD();
470
527
  title = StringValuePtr(RARRAY_PTR(args)[0]);
471
528
  text = StringValuePtr(RARRAY_PTR(args)[1]);
472
529
  width = NUM2INT(RARRAY_PTR(args)[2]);
@@ -504,6 +561,7 @@ static VALUE rb_ext_Screen_WinEntries(VALUE self, VALUE args)
504
561
  if (len < 8 || len > 9)
505
562
  ARG_ERROR(len, "8..9");
506
563
 
564
+ INIT_GUARD();
507
565
  title = StringValuePtr(RARRAY_PTR(args)[0]);
508
566
  text = StringValuePtr(RARRAY_PTR(args)[1]);
509
567
  width = NUM2INT(RARRAY_PTR(args)[2]);
@@ -555,7 +613,7 @@ void rb_ext_Screen_help_callback_function(newtComponent co, void *data)
555
613
  VALUE context, callback;
556
614
 
557
615
  widget = Make_Widget_Ref(cForm, co);
558
- cb = rb_ivar_get(mScreen, IVAR_HELP_CALLBACK);
616
+ cb = rb_cvar_get(mScreen, CVAR_HELP_CALLBACK);
559
617
  context = RSTRUCT_GET((VALUE) cb, 1);
560
618
  callback = RSTRUCT_GET((VALUE) cb, 2);
561
619
 
@@ -610,19 +668,23 @@ static VALUE rb_ext_Screen_SuspendCallback(int argc, VALUE *argv, VALUE self)
610
668
  if (argc < 1 || argc > 2)
611
669
  ARG_ERROR(argc, "1 or 2");
612
670
 
671
+ INIT_GUARD();
613
672
  if (argc == 2)
614
673
  data = argv[1];
615
674
 
616
675
  cb = rb_struct_new(rb_ext_sCallback, self, rb_binding_new(), argv[0], data, NULL);
617
- rb_ivar_set(self, IVAR_SUSPEND_CALLBACK, cb);
676
+ rb_obj_freeze(cb);
677
+ rb_cvar_set(self, CVAR_SUSPEND_CALLBACK, cb);
618
678
  newtSetSuspendCallback(rb_ext_Screen_suspend_callback_function, (void *) cb);
619
679
  return Qnil;
620
680
  }
621
681
 
622
682
  static VALUE rb_ext_Screen_HelpCallback(VALUE self, VALUE cb)
623
683
  {
684
+ INIT_GUARD();
624
685
  cb = rb_struct_new(rb_ext_sCallback, Qnil, rb_binding_new(), cb, Qnil, NULL);
625
- rb_ivar_set(self, IVAR_HELP_CALLBACK, cb);
686
+ rb_obj_freeze(cb);
687
+ rb_cvar_set(self, CVAR_HELP_CALLBACK, cb);
626
688
  newtSetHelpCallback(rb_ext_Screen_help_callback_function);
627
689
  return Qnil;
628
690
  }
@@ -635,11 +697,13 @@ static VALUE rb_ext_Widget_callback(int argc, VALUE *argv, VALUE self)
635
697
  if (argc < 1 || argc > 2)
636
698
  ARG_ERROR(argc, "1 or 2");
637
699
 
700
+ INIT_GUARD();
638
701
  if (argc == 2)
639
702
  data = argv[1];
640
703
 
641
704
  Get_newtComponent(self, co);
642
705
  cb = rb_struct_new(rb_ext_sCallback, self, rb_binding_new(), argv[0], data, NULL);
706
+ rb_obj_freeze(cb);
643
707
  rb_ivar_set(self, IVAR_WIDGET_CALLBACK, cb);
644
708
  newtComponentAddCallback(co, rb_ext_Widget_callback_function, (void *) cb);
645
709
  return Qnil;
@@ -683,94 +747,117 @@ static VALUE rb_ext_Widget_equal(VALUE self, VALUE obj)
683
747
  if (self == obj) return Qtrue;
684
748
 
685
749
  if (rb_obj_is_kind_of(obj, cWidget) || rb_obj_is_kind_of(obj, cExitStruct)) {
686
- Get_newtComponent(self, co);
750
+ Get_Widget_Data(self, data);
751
+ co = ((Widget_data *) data)->co;
687
752
  if (rb_obj_is_kind_of(obj, cExitStruct)) {
688
- Data_Get_Struct(obj, struct newtExitStruct, data);
689
- if (co == ((struct newtExitStruct *) data)->u.co)
753
+ Data_Get_Struct(obj, rb_newt_ExitStruct, data);
754
+ if (co == (((rb_newt_ExitStruct *) data)->es.u.co))
690
755
  return Qtrue;
691
756
  } else {
692
- Get_newtComponent(obj, cco);
757
+ Get_Widget_Data(obj, data);
758
+ cco = ((Widget_data *) data)->co;
693
759
  if (co == cco) return Qtrue;
694
760
  }
695
761
  }
696
762
  return Qfalse;
697
763
  }
698
764
 
765
+ static VALUE rb_ext_Widget_inspect(VALUE self)
766
+ {
767
+ newtComponent co;
768
+ void *data;
769
+
770
+ VALUE classname = rb_class_name(rb_obj_class(self));
771
+ char *class = StringValuePtr(classname);
772
+
773
+ Get_Widget_Data(self, data);
774
+ co = ((Widget_data *) data)->co;
775
+ return rb_sprintf("#<%s:%p component=%p>", class, (void *) self, co);
776
+ }
777
+
699
778
  static VALUE rb_ext_ExitStruct_reason(VALUE self)
700
779
  {
701
- struct newtExitStruct *es;
780
+ rb_newt_ExitStruct *rb_es;
702
781
 
703
- Data_Get_Struct(self, struct newtExitStruct, es);
704
- return INT2NUM(es->reason);
782
+ Data_Get_Struct(self, rb_newt_ExitStruct, rb_es);
783
+ return INT2NUM(rb_es->es.reason);
705
784
  }
706
785
 
707
786
  static VALUE rb_ext_ExitStruct_watch(VALUE self)
708
787
  {
709
- struct newtExitStruct *es;
788
+ rb_newt_ExitStruct *rb_es;
710
789
 
711
- Data_Get_Struct(self, struct newtExitStruct, es);
712
- if (es->reason == NEWT_EXIT_FDREADY)
713
- return INT2NUM(es->u.watch);
790
+ Data_Get_Struct(self, rb_newt_ExitStruct, rb_es);
791
+ if (rb_es->es.reason == NEWT_EXIT_FDREADY)
792
+ return INT2NUM(rb_es->es.u.watch);
714
793
  else
715
794
  return Qnil;
716
795
  }
717
796
 
718
797
  static VALUE rb_ext_ExitStruct_key(VALUE self)
719
798
  {
720
- struct newtExitStruct *es;
799
+ rb_newt_ExitStruct *rb_es;
721
800
 
722
- Data_Get_Struct(self, struct newtExitStruct, es);
723
- if (es->reason == NEWT_EXIT_HOTKEY)
724
- return INT2NUM(es->u.key);
801
+ Data_Get_Struct(self, rb_newt_ExitStruct, rb_es);
802
+ if (rb_es->es.reason == NEWT_EXIT_HOTKEY)
803
+ return INT2NUM(rb_es->es.u.key);
725
804
  else
726
805
  return Qnil;
727
806
  }
728
807
 
729
808
  static VALUE rb_ext_ExitStruct_component(VALUE self)
730
809
  {
731
- struct newtExitStruct *es;
810
+ rb_newt_ExitStruct *rb_es;
732
811
 
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;
812
+ Data_Get_Struct(self, rb_newt_ExitStruct, rb_es);
813
+ if (rb_es->es.reason == NEWT_EXIT_COMPONENT) {
814
+ return rb_hash_aref(rb_es->components, PTR2NUM(rb_es->es.u.co));
815
+ } else {
816
+ return Qnil;
817
+ }
738
818
  }
739
819
 
740
820
  static VALUE rb_ext_ExitStruct_equal(VALUE self, VALUE obj)
741
821
  {
742
- struct newtExitStruct *es;
822
+ rb_newt_ExitStruct *rb_es;
743
823
  newtComponent co;
824
+ void *data;
744
825
 
745
826
  if (NIL_P(obj)) return Qfalse;
746
827
  if (self == obj) return Qtrue;
747
828
 
748
829
  /* Compare components for backwards compatibility with newtRunForm(). */
749
830
  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;
831
+ Data_Get_Struct(self, rb_newt_ExitStruct, rb_es);
832
+ Get_Widget_Data(obj, data);
833
+ co = ((Widget_data *) data)->co;
834
+ if (rb_es->es.reason == NEWT_EXIT_COMPONENT
835
+ && rb_es->es.u.co == co) return Qtrue;
753
836
  }
754
837
  return Qfalse;
755
838
  }
756
839
 
757
840
  static VALUE rb_ext_ExitStruct_inspect(VALUE self)
758
841
  {
759
- struct newtExitStruct *es;
842
+ rb_newt_ExitStruct *rb_es;
760
843
  VALUE classname = rb_class_name(rb_obj_class(self));
761
844
  char *class = StringValuePtr(classname);
762
845
 
763
- Data_Get_Struct(self, struct newtExitStruct, es);
764
- switch(es->reason) {
846
+ Data_Get_Struct(self, rb_newt_ExitStruct, rb_es);
847
+ switch(rb_es->es.reason) {
765
848
  case NEWT_EXIT_HOTKEY:
766
- return rb_sprintf("#<%s reason=%d, key=%d>", class, es->reason, es->u.key);
849
+ return rb_sprintf("#<%s:%p reason=%d, key=%d>", class, (void *) self,
850
+ rb_es->es.reason, rb_es->es.u.key);
767
851
  case NEWT_EXIT_COMPONENT:
768
- return rb_sprintf("#<%s reason=%d, component=%p>", class, es->reason, es->u.co);
852
+ return rb_sprintf("#<%s:%p reason=%d, component=%p>", class, (void *) self,
853
+ rb_es->es.reason, rb_es->es.u.co);
769
854
  case NEWT_EXIT_FDREADY:
770
- return rb_sprintf("#<%s reason=%d, watch=%d>", class, es->reason, es->u.watch);
855
+ return rb_sprintf("#<%s:%p reason=%d, watch=%d>", class, (void *) self,
856
+ rb_es->es.reason, rb_es->es.u.watch);
771
857
  case NEWT_EXIT_TIMER:
772
858
  case NEWT_EXIT_ERROR:
773
- return rb_sprintf("#<%s reason=%d>", class, es->reason);
859
+ return rb_sprintf("#<%s:%p reason=%d>", class, (void *) self,
860
+ rb_es->es.reason);
774
861
  default:
775
862
  return rb_call_super(0, NULL);
776
863
  }
@@ -780,16 +867,17 @@ static VALUE rb_ext_Label_new(VALUE self, VALUE left, VALUE top, VALUE text)
780
867
  {
781
868
  newtComponent co;
782
869
 
870
+ INIT_GUARD();
783
871
  co = newtLabel(NUM2INT(left), NUM2INT(top), StringValuePtr(text));
784
872
  return Make_Widget(self, co);
785
873
  }
786
874
 
787
875
  static VALUE rb_ext_Label_SetText(VALUE self, VALUE text)
788
876
  {
789
- Widget_data *data;
877
+ newtComponent co;
790
878
 
791
- Get_Widget_Data(self, data);
792
- newtLabelSetText(data->co, StringValuePtr(text));
879
+ Get_newtComponent(self, co);
880
+ newtLabelSetText(co, StringValuePtr(text));
793
881
  return Qnil;
794
882
  }
795
883
 
@@ -806,6 +894,7 @@ static VALUE rb_ext_CompactButton_new(VALUE self, VALUE left, VALUE top, VALUE t
806
894
  {
807
895
  newtComponent co;
808
896
 
897
+ INIT_GUARD();
809
898
  co = newtCompactButton(NUM2INT(left), NUM2INT(top), StringValuePtr(text));
810
899
  return Make_Widget(self, co);
811
900
  }
@@ -814,6 +903,7 @@ static VALUE rb_ext_Button_new(VALUE self, VALUE left, VALUE top, VALUE text)
814
903
  {
815
904
  newtComponent co;
816
905
 
906
+ INIT_GUARD();
817
907
  co = newtButton(NUM2INT(left), NUM2INT(top), StringValuePtr(text));
818
908
  return Make_Widget(self, co);
819
909
  }
@@ -827,6 +917,7 @@ static VALUE rb_ext_Checkbox_new(int argc, VALUE *argv, VALUE self)
827
917
  if (argc < 3 || argc > 5)
828
918
  ARG_ERROR(argc, "3..5");
829
919
 
920
+ INIT_GUARD();
830
921
  if (argc > 3 && !NIL_P(argv[3]))
831
922
  defValue = StringValuePtr(argv[3])[0];
832
923
 
@@ -883,6 +974,7 @@ static VALUE rb_ext_RadioButton_new(int argc, VALUE *argv, VALUE self)
883
974
  if (argc < 3 || argc > 5)
884
975
  ARG_ERROR(argc, "3..5");
885
976
 
977
+ INIT_GUARD();
886
978
  if (argc >= 4)
887
979
  is_default = NUM2INT(argv[3]);
888
980
 
@@ -919,7 +1011,9 @@ static VALUE rb_ext_Listbox_new(int argc, VALUE *argv, VALUE self)
919
1011
  if (argc < 3 || argc > 4)
920
1012
  ARG_ERROR(argc, "3..4");
921
1013
 
1014
+ INIT_GUARD();
922
1015
  flags = (argc == 4) ? NUM2INT(argv[3]) : 0;
1016
+
923
1017
  co = newtListbox(NUM2INT(argv[0]), NUM2INT(argv[1]), NUM2INT(argv[2]), flags);
924
1018
  return Make_Widget(self, co);
925
1019
  }
@@ -1091,7 +1185,9 @@ static VALUE rb_ext_CheckboxTree_new(int argc, VALUE *argv, VALUE self)
1091
1185
  if (argc < 3 || argc > 4)
1092
1186
  ARG_ERROR(argc, "3..4");
1093
1187
 
1188
+ INIT_GUARD();
1094
1189
  flags = (argc == 4) ? NUM2INT(argv[3]) : 0;
1190
+
1095
1191
  co = newtCheckboxTree(NUM2INT(argv[0]), NUM2INT(argv[1]), NUM2INT(argv[2]), flags);
1096
1192
  return Make_Widget(self, co);
1097
1193
  }
@@ -1213,11 +1309,13 @@ static VALUE rb_ext_CheckboxTreeMulti_new(int argc, VALUE *argv, VALUE self)
1213
1309
  if (argc < 3 || argc > 5)
1214
1310
  ARG_ERROR(argc, "3..5");
1215
1311
 
1312
+ INIT_GUARD();
1216
1313
  seq = NULL;
1217
1314
  if (argc >= 4 && !NIL_P(argv[3]) && RSTRING_LEN(argv[3]))
1218
1315
  seq = StringValuePtr(argv[3]);
1219
1316
 
1220
1317
  flags = (argc == 5) ? NUM2INT(argv[4]) : 0;
1318
+
1221
1319
  co = newtCheckboxTreeMulti(NUM2INT(argv[0]), NUM2INT(argv[1]), NUM2INT(argv[2]), seq, flags);
1222
1320
  return Make_Widget(self, co);
1223
1321
  }
@@ -1241,7 +1339,9 @@ static VALUE rb_ext_Textbox_new(int argc, VALUE *argv, VALUE self)
1241
1339
  if (argc < 4 || argc > 5)
1242
1340
  ARG_ERROR(argc, "4..5");
1243
1341
 
1342
+ INIT_GUARD();
1244
1343
  flags = (argc == 5) ? NUM2INT(argv[4]) : 0;
1344
+
1245
1345
  co = newtTextbox(NUM2INT(argv[0]), NUM2INT(argv[1]), NUM2INT(argv[2]), NUM2INT(argv[3]), flags);
1246
1346
  return Make_Widget(self, co);
1247
1347
  }
@@ -1289,7 +1389,9 @@ static VALUE rb_ext_TextboxReflowed_new(int argc, VALUE *argv, VALUE self)
1289
1389
  if (argc < 6 || argc > 7)
1290
1390
  ARG_ERROR(argc, "6..7");
1291
1391
 
1392
+ INIT_GUARD();
1292
1393
  flags = (argc == 7) ? NUM2INT(argv[6]) : 0;
1394
+
1293
1395
  co = newtTextboxReflowed(NUM2INT(argv[0]), NUM2INT(argv[1]),
1294
1396
  StringValuePtr(argv[2]), NUM2INT(argv[3]),
1295
1397
  NUM2INT(argv[4]), NUM2INT(argv[5]), flags);
@@ -1306,6 +1408,7 @@ static VALUE rb_ext_Form_new(int argc, VALUE *argv, VALUE self)
1306
1408
  if (argc > 3)
1307
1409
  ARG_ERROR(argc, "0..3");
1308
1410
 
1411
+ INIT_GUARD();
1309
1412
  helpTag = (argc >= 2) ? argv[1] : Qnil;
1310
1413
  flags = (argc == 3) ? NUM2INT(argv[2]) : 0;
1311
1414
 
@@ -1329,9 +1432,10 @@ static VALUE rb_ext_Form_AddComponents(VALUE self, VALUE components)
1329
1432
  VALUE str;
1330
1433
  int i;
1331
1434
 
1435
+ INIT_GUARD();
1332
1436
  Get_Widget_Data(self, form);
1333
- if (RARRAY_LEN(components) > 0 && (void *) form->components == NULL) {
1334
- form->components = rb_ary_new();
1437
+ if (RARRAY_LEN(components) > 0 && form->components == Qnil) {
1438
+ form->components = rb_hash_new();
1335
1439
  rb_gc_register_address(&form->components);
1336
1440
  }
1337
1441
 
@@ -1345,7 +1449,7 @@ static VALUE rb_ext_Form_AddComponents(VALUE self, VALUE components)
1345
1449
 
1346
1450
  co->flags ^= FLAG_GC_FREE;
1347
1451
  co->flags |= FLAG_ADDED_TO_FORM;
1348
- rb_ary_push(form->components, RARRAY_PTR(components)[i]);
1452
+ rb_hash_aset(form->components, PTR2NUM(co->co), RARRAY_PTR(components)[i]);
1349
1453
  newtFormAddComponent(form->co, co->co);
1350
1454
  }
1351
1455
  return Qnil;
@@ -1399,13 +1503,16 @@ static VALUE rb_ext_Form_SetWidth(VALUE self, VALUE width)
1399
1503
 
1400
1504
  static VALUE rb_ext_Form_Run(VALUE self)
1401
1505
  {
1402
- newtComponent form;
1403
- struct newtExitStruct *es;
1506
+ Widget_data *data;
1507
+ rb_newt_ExitStruct *rb_es;
1404
1508
 
1405
- Get_newtComponent(self, form);
1406
- es = ALLOC(struct newtExitStruct);
1407
- newtFormRun(form, es);
1408
- return Data_Wrap_Struct(cExitStruct, 0, xfree, es);
1509
+ INIT_GUARD();
1510
+ Get_Widget_Data(self, data);
1511
+ rb_es = ALLOC(rb_newt_ExitStruct);
1512
+ newtFormRun(data->co, &rb_es->es);
1513
+ rb_es->components = data->components;
1514
+ rb_gc_register_address(&rb_es->components);
1515
+ return Data_Wrap_Struct(cExitStruct, 0, rb_newt_es_free, rb_es);
1409
1516
  }
1410
1517
 
1411
1518
  static VALUE rb_ext_Form_DrawForm(VALUE self)
@@ -1457,7 +1564,9 @@ static VALUE rb_ext_Entry_new(int argc, VALUE *argv, VALUE self)
1457
1564
  if (argc < 4 || argc > 5)
1458
1565
  ARG_ERROR(argc, "4..5");
1459
1566
 
1567
+ INIT_GUARD();
1460
1568
  flags = (argc == 5) ? NUM2INT(argv[4]) : 0;
1569
+
1461
1570
  co = newtEntry(NUM2INT(argv[0]), NUM2INT(argv[1]), StringValuePtr(argv[2]),
1462
1571
  NUM2INT(argv[3]), NULL, flags);
1463
1572
 
@@ -1507,6 +1616,7 @@ static VALUE rb_ext_Entry_SetFilter(int argc, VALUE *argv, VALUE self)
1507
1616
 
1508
1617
  Get_newtComponent(self, co);
1509
1618
  cb = rb_struct_new(rb_ext_sCallback, self, rb_binding_new(), argv[0], data, NULL);
1619
+ rb_obj_freeze(cb);
1510
1620
  rb_ivar_set(self, IVAR_FILTER_CALLBACK, cb);
1511
1621
  newtEntrySetFilter(co, rb_ext_Entry_filter_function, (void *) cb);
1512
1622
  return Qnil;
@@ -1558,6 +1668,7 @@ static VALUE rb_ext_Scale_new(VALUE self, VALUE left, VALUE top, VALUE width, VA
1558
1668
  {
1559
1669
  newtComponent co;
1560
1670
 
1671
+ INIT_GUARD();
1561
1672
  co = newtScale(NUM2INT(left), NUM2INT(top), NUM2INT(width), NUM2INT(fullValue));
1562
1673
  return Make_Widget(self, co);
1563
1674
  }
@@ -1592,6 +1703,7 @@ static VALUE rb_ext_Grid_new(VALUE self, VALUE cols, VALUE rows)
1592
1703
  if (num_cols <= 0 || num_rows <= 0)
1593
1704
  rb_raise(rb_eRuntimeError, "specified number of columns or rows should be greater than 0");
1594
1705
 
1706
+ INIT_GUARD();
1595
1707
  grid = newtCreateGrid(num_cols, num_rows);
1596
1708
  widget = Data_Wrap_Struct(self, 0, 0, grid);
1597
1709
  rb_ivar_set(widget, IVAR_COLS, cols);
@@ -1615,10 +1727,13 @@ static VALUE rb_ext_Grid_SetField(VALUE self, VALUE col, VALUE row, VALUE type,
1615
1727
  if (icol >= cols || irow >= rows)
1616
1728
  rb_raise(rb_eRuntimeError, "attempting to set a field at an invalid position (%d, %d)", icol, irow);
1617
1729
 
1618
- if (itype == NEWT_GRID_SUBGRID)
1730
+ INIT_GUARD();
1731
+ if (itype == NEWT_GRID_SUBGRID) {
1619
1732
  Data_Get_Struct(val, struct grid_s, co);
1620
- else
1621
- Get_newtComponent(val, co);
1733
+ } else {
1734
+ Get_Widget_Data(val, co);
1735
+ co = ((Widget_data *) co)->co;
1736
+ }
1622
1737
 
1623
1738
  Data_Get_Struct(self, struct grid_s, grid);
1624
1739
  newtGridSetField(grid, icol, irow, itype, co, NUM2INT(padLeft),
@@ -1636,6 +1751,7 @@ static VALUE rb_ext_Grid_WrappedWindow(int argc, VALUE *argv, VALUE self)
1636
1751
  if (argc != 1 && argc != 3)
1637
1752
  ARG_ERROR(argc, "1 or 3");
1638
1753
 
1754
+ INIT_GUARD();
1639
1755
  title = StringValuePtr(argv[0]);
1640
1756
  Data_Get_Struct(self, struct grid_s, grid);
1641
1757
  if (argc == 1) {
@@ -1651,6 +1767,7 @@ static VALUE rb_ext_Grid_GetSize(VALUE self)
1651
1767
  newtGrid grid;
1652
1768
  int width, height;
1653
1769
 
1770
+ INIT_GUARD();
1654
1771
  Data_Get_Struct(self, struct grid_s, grid);
1655
1772
  newtGridGetSize(grid, &width, &height);
1656
1773
  return rb_ary_new_from_args(2, INT2NUM(width), INT2NUM(height));
@@ -1658,12 +1775,15 @@ static VALUE rb_ext_Grid_GetSize(VALUE self)
1658
1775
 
1659
1776
  void Init_ruby_newt(){
1660
1777
  mNewt = rb_define_module("Newt");
1778
+ rb_define_module_function(mNewt, "init", rb_ext_Screen_Init, 0);
1779
+ rb_define_module_function(mNewt, "finish", rb_ext_Screen_Finished, 0);
1661
1780
  rb_define_module_function(mNewt, "delay", rb_ext_Delay, 1);
1662
1781
  rb_define_module_function(mNewt, "reflow_text", rb_ext_ReflowText, 4);
1663
1782
 
1664
1783
  mScreen = rb_define_class_under(mNewt, "Screen", rb_cObject);
1665
- rb_define_module_function(mScreen, "new", rb_ext_Screen_new, 0);
1784
+ rb_define_alloc_func(mScreen, newt_s_alloc);
1666
1785
  rb_define_module_function(mScreen, "init", rb_ext_Screen_Init, 0);
1786
+ rb_define_module_function(mScreen, "new", rb_ext_Screen_new, 0);
1667
1787
  rb_define_module_function(mScreen, "cls", rb_ext_Screen_Cls, 0);
1668
1788
  rb_define_module_function(mScreen, "finish", rb_ext_Screen_Finished, 0);
1669
1789
  rb_define_module_function(mScreen, "wait_for_key", rb_ext_Screen_WaitForKey, 0);
@@ -1691,14 +1811,16 @@ void Init_ruby_newt(){
1691
1811
  rb_define_module_function(mScreen, "win_menu", rb_ext_Screen_WinMenu, -2);
1692
1812
  rb_define_module_function(mScreen, "win_entries", rb_ext_Screen_WinEntries, -2);
1693
1813
 
1694
- rb_ext_sCallback = rb_struct_define(NULL, "widget", "context", "callback", "data", NULL);
1814
+ rb_ext_sCallback = rb_struct_define("NewtCallback", "widget", "context", "callback", "data", NULL);
1695
1815
 
1696
1816
  cWidget = rb_define_class_under(mNewt, "Widget", rb_cObject);
1817
+ rb_define_alloc_func(cWidget, newt_s_alloc);
1697
1818
  rb_define_method(cWidget, "callback", rb_ext_Widget_callback, -1);
1698
1819
  rb_define_method(cWidget, "takes_focus", rb_ext_Widget_takesFocus, 1);
1699
1820
  rb_define_method(cWidget, "get_position", rb_ext_Widget_GetPosition, 0);
1700
1821
  rb_define_method(cWidget, "get_size", rb_ext_Widget_GetSize, 0);
1701
1822
  rb_define_method(cWidget, "==", rb_ext_Widget_equal, 1);
1823
+ rb_define_method(cWidget, "inspect", rb_ext_Widget_inspect, 0);
1702
1824
 
1703
1825
  cCompactButton = rb_define_class_under(mNewt, "CompactButton", cWidget);
1704
1826
  rb_define_singleton_method(cCompactButton, "new", rb_ext_CompactButton_new, 3);
@@ -1782,6 +1904,7 @@ void Init_ruby_newt(){
1782
1904
  rb_define_method(cForm, "watch_fd", rb_ext_Form_WatchFd, 2);
1783
1905
 
1784
1906
  cExitStruct = rb_define_class_under(cForm, "ExitStruct", rb_cObject);
1907
+ rb_define_alloc_func(cExitStruct, newt_s_alloc);
1785
1908
  rb_define_private_method(rb_singleton_class(cExitStruct), "new", NULL, 0);
1786
1909
  rb_define_method(cExitStruct, "reason", rb_ext_ExitStruct_reason, 0);
1787
1910
  rb_define_method(cExitStruct, "watch", rb_ext_ExitStruct_watch, 0);
data/lib/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Newt
2
- VERSION = '1.0.0.pre1'
2
+ VERSION = '1.0.1'
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.1
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: 2024-05-23 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.5.9
87
+ signing_key:
88
88
  specification_version: 4
89
89
  summary: Ruby bindings for newt
90
90
  test_files: []