newt 1.0.0.pre1 → 1.0.1

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.
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: []