diff options
| author | Gerd Moellmann | 2000-03-05 14:31:04 +0000 |
|---|---|---|
| committer | Gerd Moellmann | 2000-03-05 14:31:04 +0000 |
| commit | a17063b5b48cccd364665382a910c0fcadb9d075 (patch) | |
| tree | 8757117ce0ecbc2df1f8ab4fea06d6440929912f | |
| parent | 23b4d91d7c8788238ae5b36bee2c1e05ee5c4f43 (diff) | |
| download | emacs-a17063b5b48cccd364665382a910c0fcadb9d075.tar.gz emacs-a17063b5b48cccd364665382a910c0fcadb9d075.zip | |
(lw_modify_all_widgets): Return non-zero if widget
tree was changed.
(merge_widget_value): Add parameter CHANGE_P. Set *CHANGE_P
to 1 if a change occurs.
| -rw-r--r-- | lwlib/lwlib.c | 67 |
1 files changed, 58 insertions, 9 deletions
diff --git a/lwlib/lwlib.c b/lwlib/lwlib.c index 3709b2b070a..328fdf88c5f 100644 --- a/lwlib/lwlib.c +++ b/lwlib/lwlib.c | |||
| @@ -74,10 +74,48 @@ char *lwlib_toolkit_type = "motif"; | |||
| 74 | #else | 74 | #else |
| 75 | char *lwlib_toolkit_type = "lucid"; | 75 | char *lwlib_toolkit_type = "lucid"; |
| 76 | #endif | 76 | #endif |
| 77 | /* Forward declarations */ | ||
| 78 | static void | ||
| 79 | instantiate_widget_instance (/* widget_instance* instance */); | ||
| 80 | 77 | ||
| 78 | #if defined __STDC__ | ||
| 79 | #define P_(x) x | ||
| 80 | #else | ||
| 81 | #define P_(x) () | ||
| 82 | #endif | ||
| 83 | |||
| 84 | static widget_value *merge_widget_value P_ ((widget_value *, | ||
| 85 | widget_value *, | ||
| 86 | int, int *)); | ||
| 87 | static void instantiate_widget_instance P_ ((widget_instance *)); | ||
| 88 | static int my_strcasecmp P_ ((char *, char *)); | ||
| 89 | static void safe_free_str P_ ((char *)); | ||
| 90 | static void free_widget_value_tree P_ ((widget_value *)); | ||
| 91 | static widget_value *copy_widget_value_tree P_ ((widget_value *, | ||
| 92 | change_type)); | ||
| 93 | static widget_info *allocate_widget_info P_ ((char *, char *, LWLIB_ID, | ||
| 94 | widget_value *, | ||
| 95 | lw_callback, lw_callback, | ||
| 96 | lw_callback, lw_callback)); | ||
| 97 | static void free_widget_info P_ ((widget_info *)); | ||
| 98 | static void mark_widget_destroyed P_ ((Widget, XtPointer, XtPointer)); | ||
| 99 | static widget_instance *allocate_widget_instance P_ ((widget_info *, | ||
| 100 | Widget, Boolean)); | ||
| 101 | static void free_widget_instance P_ ((widget_instance *)); | ||
| 102 | static widget_info *get_widget_info P_ ((LWLIB_ID, Boolean)); | ||
| 103 | static widget_instance *get_widget_instance P_ ((Widget, Boolean)); | ||
| 104 | static widget_instance *find_instance P_ ((LWLIB_ID, Widget, Boolean)); | ||
| 105 | static Boolean safe_strcmp P_ ((char *, char *)); | ||
| 106 | static Widget name_to_widget P_ ((widget_instance *, char *)); | ||
| 107 | static void set_one_value P_ ((widget_instance *, widget_value *, Boolean)); | ||
| 108 | static void update_one_widget_instance P_ ((widget_instance *, Boolean)); | ||
| 109 | static void update_all_widget_values P_ ((widget_info *, Boolean)); | ||
| 110 | static void initialize_widget_instance P_ ((widget_instance *)); | ||
| 111 | static widget_creation_function find_in_table P_ ((char *, widget_creation_entry *)); | ||
| 112 | static Boolean dialog_spec_p P_ ((char *)); | ||
| 113 | static void instantiate_widget_instance P_ ((widget_instance *)); | ||
| 114 | static void destroy_one_instance P_ ((widget_instance *)); | ||
| 115 | static void lw_pop_all_widgets P_ ((LWLIB_ID, Boolean)); | ||
| 116 | static Boolean get_one_value P_ ((widget_instance *, widget_value *)); | ||
| 117 | static void show_one_widget_busy P_ ((Widget, Boolean)); | ||
| 118 | |||
| 81 | void | 119 | void |
| 82 | lwlib_memset (address, value, length) | 120 | lwlib_memset (address, value, length) |
| 83 | char *address; | 121 | char *address; |
| @@ -455,10 +493,11 @@ safe_strcmp (s1, s2) | |||
| 455 | 493 | ||
| 456 | 494 | ||
| 457 | static widget_value * | 495 | static widget_value * |
| 458 | merge_widget_value (val1, val2, level) | 496 | merge_widget_value (val1, val2, level, change_p) |
| 459 | widget_value* val1; | 497 | widget_value* val1; |
| 460 | widget_value* val2; | 498 | widget_value* val2; |
| 461 | int level; | 499 | int level; |
| 500 | int *change_p; | ||
| 462 | { | 501 | { |
| 463 | change_type change, this_one_change; | 502 | change_type change, this_one_change; |
| 464 | widget_value* merged_next; | 503 | widget_value* merged_next; |
| @@ -467,12 +506,16 @@ merge_widget_value (val1, val2, level) | |||
| 467 | if (!val1) | 506 | if (!val1) |
| 468 | { | 507 | { |
| 469 | if (val2) | 508 | if (val2) |
| 470 | return copy_widget_value_tree (val2, STRUCTURAL_CHANGE); | 509 | { |
| 510 | *change_p = 1; | ||
| 511 | return copy_widget_value_tree (val2, STRUCTURAL_CHANGE); | ||
| 512 | } | ||
| 471 | else | 513 | else |
| 472 | return NULL; | 514 | return NULL; |
| 473 | } | 515 | } |
| 474 | if (!val2) | 516 | if (!val2) |
| 475 | { | 517 | { |
| 518 | *change_p = 1; | ||
| 476 | free_widget_value_tree (val1); | 519 | free_widget_value_tree (val1); |
| 477 | return NULL; | 520 | return NULL; |
| 478 | } | 521 | } |
| @@ -543,7 +586,8 @@ merge_widget_value (val1, val2, level) | |||
| 543 | if (level > 0) | 586 | if (level > 0) |
| 544 | { | 587 | { |
| 545 | merged_contents = | 588 | merged_contents = |
| 546 | merge_widget_value (val1->contents, val2->contents, level - 1); | 589 | merge_widget_value (val1->contents, val2->contents, level - 1, |
| 590 | change_p); | ||
| 547 | 591 | ||
| 548 | if (val1->contents && !merged_contents) | 592 | if (val1->contents && !merged_contents) |
| 549 | { | 593 | { |
| @@ -573,7 +617,7 @@ merge_widget_value (val1, val2, level) | |||
| 573 | 617 | ||
| 574 | this_one_change = change; | 618 | this_one_change = change; |
| 575 | 619 | ||
| 576 | merged_next = merge_widget_value (val1->next, val2->next, level); | 620 | merged_next = merge_widget_value (val1->next, val2->next, level, change_p); |
| 577 | 621 | ||
| 578 | if (val1->next && !merged_next) | 622 | if (val1->next && !merged_next) |
| 579 | { | 623 | { |
| @@ -596,6 +640,7 @@ merge_widget_value (val1, val2, level) | |||
| 596 | 640 | ||
| 597 | if (change > NO_CHANGE && val1->toolkit_data) | 641 | if (change > NO_CHANGE && val1->toolkit_data) |
| 598 | { | 642 | { |
| 643 | *change_p = 1; | ||
| 599 | if (val1->free_toolkit_data) | 644 | if (val1->free_toolkit_data) |
| 600 | XtFree (val1->toolkit_data); | 645 | XtFree (val1->toolkit_data); |
| 601 | val1->toolkit_data = NULL; | 646 | val1->toolkit_data = NULL; |
| @@ -692,7 +737,7 @@ update_all_widget_values (info, deep_p) | |||
| 692 | val->change = NO_CHANGE; | 737 | val->change = NO_CHANGE; |
| 693 | } | 738 | } |
| 694 | 739 | ||
| 695 | void | 740 | int |
| 696 | lw_modify_all_widgets (id, val, deep_p) | 741 | lw_modify_all_widgets (id, val, deep_p) |
| 697 | LWLIB_ID id; | 742 | LWLIB_ID id; |
| 698 | widget_value* val; | 743 | widget_value* val; |
| @@ -705,6 +750,7 @@ lw_modify_all_widgets (id, val, deep_p) | |||
| 705 | widget_value* prev; | 750 | widget_value* prev; |
| 706 | widget_value* next; | 751 | widget_value* next; |
| 707 | int found; | 752 | int found; |
| 753 | int change_p = 0; | ||
| 708 | 754 | ||
| 709 | if (!info) | 755 | if (!info) |
| 710 | return; | 756 | return; |
| @@ -720,7 +766,8 @@ lw_modify_all_widgets (id, val, deep_p) | |||
| 720 | found = True; | 766 | found = True; |
| 721 | next = cur->next; | 767 | next = cur->next; |
| 722 | cur->next = NULL; | 768 | cur->next = NULL; |
| 723 | cur = merge_widget_value (cur, new_val, deep_p ? 1000 : 1); | 769 | cur = merge_widget_value (cur, new_val, deep_p ? 1000 : 1, |
| 770 | &change_p); | ||
| 724 | if (prev) | 771 | if (prev) |
| 725 | prev->next = cur ? cur : next; | 772 | prev->next = cur ? cur : next; |
| 726 | else | 773 | else |
| @@ -736,11 +783,13 @@ lw_modify_all_widgets (id, val, deep_p) | |||
| 736 | prev->next = copy_widget_value_tree (new_val, STRUCTURAL_CHANGE); | 783 | prev->next = copy_widget_value_tree (new_val, STRUCTURAL_CHANGE); |
| 737 | else | 784 | else |
| 738 | info->val = copy_widget_value_tree (new_val, STRUCTURAL_CHANGE); | 785 | info->val = copy_widget_value_tree (new_val, STRUCTURAL_CHANGE); |
| 786 | change_p = 1; | ||
| 739 | } | 787 | } |
| 740 | new_val->next = next_new_val; | 788 | new_val->next = next_new_val; |
| 741 | } | 789 | } |
| 742 | 790 | ||
| 743 | update_all_widget_values (info, deep_p); | 791 | update_all_widget_values (info, deep_p); |
| 792 | return change_p; | ||
| 744 | } | 793 | } |
| 745 | 794 | ||
| 746 | 795 | ||