From: Fernando Nasser <fnasser@redhat.com>
To: insight@sources.redhat.com, "Martin M. Hunt" <hunt@redhat.com>
Subject: Modal Dialogs lose grab when comboboxes are used
Date: Wed, 18 Sep 2002 13:50:00 -0000 [thread overview]
Message-ID: <3D88E72F.3040406@redhat.com> (raw)
[-- Attachment #1: Type: text/plain, Size: 1245 bytes --]
This happened in another application and I just checked and we also suffer from
the same problem.
When we create a modal dialog we usually have a local grab that prevents the
user to meddle with the main window (and others) before we dismiss the modal
one. We use this for preferences, target selection, attaching a target...
things that we cannot proceed before they are settled.
The problem is that if these dialogs have a combobox and the combobox is
expanded, a global grab is used by the combobox so that it is unposted
regardless of where in the desktop you click (Tk menus do the same).
Unfortunately once you grab the focus, any previous grab is lost (unless you
take care of saving and restoring it, what the combobox doesn't seem to be doing).
This problem is common to the iwidgets:combobox and our own libgui combobox.
I have a possible fix to libgui that seems to solve our problem. Maybe Martin
can double check that for us.
Here is the CL (patch attached):
* library/combobox.tcl (build): New variable to save grabs.
(widgetProc): Save and restore previous grabs.
--
Fernando Nasser
Red Hat - Toronto E-Mail: fnasser@redhat.com
2323 Yonge Street, Suite #300
Toronto, Ontario M4P 2C9
[-- Attachment #2: COMBOBOX.PATCH --]
[-- Type: text/plain, Size: 1518 bytes --]
Index: library/combobox.tcl
===================================================================
RCS file: /cvs/src/src/libgui/library/combobox.tcl,v
retrieving revision 1.2
diff -c -p -r1.2 combobox.tcl
*** library/combobox.tcl 8 Sep 2001 22:34:46 -0000 1.2
--- library/combobox.tcl 18 Sep 2002 20:40:49 -0000
*************** proc ::combobox::build {w args } {
*** 106,111 ****
--- 106,112 ----
variable options
variable oldValue
variable ignoreTrace
+ variable grablist
variable this
array set widgets {}
*************** proc ::combobox::doInternalWidgetCommand
*** 677,682 ****
--- 678,684 ----
proc ::combobox::widgetProc {w command args} {
upvar ::combobox::${w}::widgets widgets
upvar ::combobox::${w}::options options
+ upvar ::combobox::${w}::grablist grablist
# this is just shorthand notation...
set doWidgetCommand \
*************** proc ::combobox::widgetProc {w command a
*** 787,792 ****
--- 789,795 ----
# *gasp* do a global grab!!! Mom always told not to
# do things like this... :-)
+ set grablist [grab current]
grab -global $widgets(this)
# fake the listbox into thinking it has focus
*************** proc ::combobox::widgetProc {w command a
*** 802,807 ****
--- 805,813 ----
}
# hides the listbox
grab release $widgets(this)
+ foreach grabitem $grablist {
+ grab set $grabitem
+ }
$widgets(button) configure -relief raised
wm withdraw $widgets(popup)
next reply other threads:[~2002-09-18 20:50 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2002-09-18 13:50 Fernando Nasser [this message]
2002-09-18 14:52 ` Fernando Nasser
2002-09-20 10:39 ` Fernando Nasser
2002-09-24 20:16 ` Martin M. Hunt
2002-09-24 22:04 ` Fernando Nasser
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=3D88E72F.3040406@redhat.com \
--to=fnasser@redhat.com \
--cc=hunt@redhat.com \
--cc=insight@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).