From: Mo DeJong <supermo@bayarea.net>
To: insight@sources.redhat.com
Cc: sourcenav@sources.redhat.com
Subject: Re: Patch to get rid of error when closing last window
Date: Tue, 19 Feb 2002 20:27:00 -0000 [thread overview]
Message-ID: <20020219151830.7598809d.supermo@bayarea.net> (raw)
In-Reply-To: <20020208144412.288bb411.supermo@bayarea.net>
Hi all.
Here is a patch that fixes a problem in Source-Navigator related to closing
of the last main window. The bug was caused by a problem in Itk where
a component in an Itk megawidget would not get destroyed if it was not a
child of the hull. The attached patch fixes the problem and adds test cases
to Itk for the areas that were changed.
This patch has already been submitted to the Itk maintainers at SF. Michael
McLennan's comment on the patch is as follows:
This patch looks good. If you want to apply it to CVS, you have my blessing
and my thanks.
cheers
Mo DeJong
2002-02-19 Mo DeJong <supermo@bayarea.net>
* itk/library/Toplevel.itk (destructor):
* itk/library/Widget.itk (destructor): Remove the
hull component after destroying the hull.
Destroy any component that still exists after
destroying the hull since it must have been
created outside the hull.
* itk/tests/toplevel.test:
* itk/tests/widget.test: Test that a component
outside the hull is destroyed when the mega-widget
is destroyed.
Index: itk/library/Toplevel.itk
===================================================================
RCS file: /cvs/src/src/itcl/itk/library/Toplevel.itk,v
retrieving revision 1.1.1.2
diff -u -r1.1.1.2 Toplevel.itk
--- Toplevel.itk 2001/09/09 19:49:05 1.1.1.2
+++ Toplevel.itk 2002/02/19 23:05:11
@@ -63,6 +63,12 @@
}
destroy $itk_hull
}
+ itk_component delete hull
+
+ # Any remaining components must be outside the hull
+ foreach component [component] {
+ destroy [component $component]
+ }
}
itk_option define -title title Title "" {
Index: itk/library/Widget.itk
===================================================================
RCS file: /cvs/src/src/itcl/itk/library/Widget.itk,v
retrieving revision 1.1.1.2
diff -u -r1.1.1.2 Widget.itk
--- Widget.itk 2001/09/09 19:49:05 1.1.1.2
+++ Widget.itk 2002/02/19 23:05:11
@@ -64,6 +64,12 @@
}
destroy $itk_hull
}
+ itk_component delete hull
+
+ # Any remaining components must be outside the hull
+ foreach component [component] {
+ destroy [component $component]
+ }
}
private variable itk_hull ""
Index: itk/tests/toplevel.test
===================================================================
RCS file: /cvs/src/src/itcl/itk/tests/toplevel.test,v
retrieving revision 1.1.1.2
diff -u -r1.1.1.2 toplevel.test
--- toplevel.test 2001/09/09 19:49:06 1.1.1.2
+++ toplevel.test 2002/02/19 23:05:11
@@ -79,6 +79,45 @@
itcl::find objects .testToplevel*
} {}
+test toplevel-1.7 {when an mega-widget object is deleted, its window and any
+ components are destroyed } {
+ TestToplevel .delme
+ set label [.delme component test1]
+ itcl::delete object .delme
+ list [winfo exists .delme] [winfo exists $label]
+} {0 0}
+
+test toplevel-1.8 {when a mega-widget object is deleted, its window and any
+ components are destroyed (even if in another window) } {
+ itcl::class ButtonTop {
+ inherit itk::Toplevel
+
+ constructor {args} {
+ eval itk_initialize $args
+
+ itk_component add button {
+ button $itk_option(-container).b -text Button
+ } {}
+ pack $itk_component(button)
+ }
+
+ itk_option define -container container Container {}
+ }
+
+ toplevel .t1
+ ButtonTop .t2 -container .t1
+
+ set button [.t2 component button]
+
+ itcl::delete object .t2
+
+ set result [list $button [winfo exists $button]]
+
+ itcl::delete class ButtonTop
+
+ set result
+} {.t1.b 0}
+
# ----------------------------------------------------------------------
# Clean up
# ----------------------------------------------------------------------
Index: itk/tests/widget.test
===================================================================
RCS file: /cvs/src/src/itcl/itk/tests/widget.test,v
retrieving revision 1.1.1.2
diff -u -1 -r1.1.1.2 widget.test
--- widget.test 2001/09/09 19:49:06 1.1.1.2
+++ widget.test 2002/02/19 23:06:23
@@ -267,2 +267,38 @@
+test widget-1.27 {when a mega-widget object is deleted, its window and any
+ components are destroyed (even if in another window) } {
+ itcl::class ButtonWidget {
+ inherit itk::Widget
+
+ constructor {args} {
+ eval itk_initialize $args
+
+ itk_component add button {
+ button $itk_option(-container).b -text Button
+ } {}
+ pack $itk_component(button)
+ }
+
+ itk_option define -container container Container {}
+ }
+
+ toplevel .t1
+ frame .t1.f
+ ButtonWidget .t1.bw -container .t1.f
+
+ pack .t1.f
+ pack .t1.bw
+
+ set button [.t1.bw component button]
+
+ itcl::delete object .t1.bw
+
+ set result [list $button [winfo exists $button]]
+
+ itcl::delete class ButtonWidget
+
+ set result
+} {.t1.f.b 0}
+
+
# ----------------------------------------------------------------------
next prev parent reply other threads:[~2002-02-19 23:19 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-02-12 16:49 Mo DeJong
2002-02-12 17:15 ` Ian Roxborough
2002-02-13 1:51 ` Mo DeJong
2002-02-19 20:27 ` Mo DeJong [this message]
2002-02-21 20:34 ` Ian Roxborough
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20020219151830.7598809d.supermo@bayarea.net \
--to=supermo@bayarea.net \
--cc=insight@sources.redhat.com \
--cc=sourcenav@sources.redhat.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).