unofficial mirror of bug-gnu-emacs@gnu.org 
 help / color / mirror / code / Atom feed
From: martin rudalics <rudalics@gmx.at>
To: Eli Zaretskii <eliz@gnu.org>
Cc: 11732@debbugs.gnu.org, mhatta@gmail.com
Subject: bug#11732: Follow-up to bug#11732
Date: Sat, 30 Jun 2018 10:06:57 +0200	[thread overview]
Message-ID: <5B373A21.9050407@gmx.at> (raw)
In-Reply-To: <83fu16nepn.fsf@gnu.org>

 > Will do, just not today.
 >
 >>   > +	  SetWindowPos (dialog, HWND_TOPMOST, 0, 0, 0, 0,
 >>   > +			SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE
 >>   > +			| SWP_NOOWNERZORDER);
 >>   > +	  SetWindowPos (FRAME_W32_WINDOW (SELECTED_FRAME ()),
 >>   > +			dialog, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);
 >>
 >> What was the more or less precise rationale for this unless it was
 >> pure experimenting (in particular the SWP_NOACTIVATE in the first
 >> call)?
 >
 > SWP_NOACTIVATE was just a copy-paste from similar calls elsewhere.
 > The rationale for the code was to tell windows to put the frame from
 > which the file-selection dialog popped behind the dialog.

IMO these two calls are not entirely kosher - after all the dialog box
is in the topmost group and the selected frame not.  So some other
application that interrupts the dialog might mess things up.  Anyway,
I would try moving the SWP_NOACTIVATE from the dialog to the selected
frame call like

	  SetWindowPos (dialog, HWND_TOPMOST, 0, 0, 0, 0,
			SWP_NOMOVE | SWP_NOSIZE | SWP_NOOWNERZORDER);
	  SetWindowPos (FRAME_W32_WINDOW (SELECTED_FRAME ()),
			dialog, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE
			| SWP_NOACTIVATE);

Note that I can't test it because nothing is broken here in the first
place.

 > If
 > w32_dialog_in_progress is meant to do that, I don't understand how it
 > does that; can you explain?

All w32_dialog_in_progress does is moving frames from and to the
topmost group.  I don't like putting frames in the topmost group - but
if one doesn't use child frames and wants a support frame on top of a
normal frame, setting just the z-order is not enough: You run into an
eternal loop where Emacs tries to put the support frame above the
normal one and Windows immediately reverses that because I obviously
want the normal frame to retain focus.

 > (Btw, as long as we are discussing this: the above-suspended value of
 > the z-group frame parameter appears to be completely undocumented.)

Conceptually, users should never see it: It is set only during
dialogs.  But if you think it should be documented I'll do that.

 > Below.  It's possible I've put the code in the wrong WM_* message, but
 > I'm really stabbing in the dark in these matters.
 >
 >> In w32_dialog_in_progress I tried to solve a relatively simple
 >> problem: When a frame is in the TOPMOST group and I start a dialog,
 >> that frame would obscure the dialog box.  So I temporarily remove the
 >> frame from the TOPMOST group and move it back when the dialog ends.
 >
 > Can you show me some Lisp to try this situation?
 >
 > Here's the patch I used with the font-selection dialog:

 > +  if (msg == WM_NOTIFY)
 > +    {
 > +      SetWindowPos (hdlg, HWND_NOTOPMOST, 0, 0, 0, 0,
 > +		    SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE
 > +		    | SWP_NOOWNERZORDER);

The HWND_NOTOPMOST doesn't look good - dialog boxes should be topmost.
Could you try with

static UINT_PTR CALLBACK
font_dialog_callback (HWND hdlg, UINT msg, WPARAM wParam, LPARAM lParam)
{
   static HWND cf_hwnd;

   if (msg == WM_INITDIALOG)
     cf_hwnd = ((CHOOSEFONT *)lParam)->hwndOwner;

   if (msg == WM_NOTIFY)
     {
       SetWindowPos (hdlg, HWND_TOPMOST, 0, 0, 0, 0,
		    SWP_NOMOVE | SWP_NOSIZE | SWP_NOOWNERZORDER);
       SetWindowPos (cf_hwnd, hdlg, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE
		    | SWP_NOACTIVATE);
     }
   return 0;
}

It doesn't show any strange effects here, at least.

martin





  reply	other threads:[~2018-06-30  8:06 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-06-18  5:20 bug#11732: 24.1; Microsoft IME Japanese input problem xavier.dahan
2015-02-17 10:26 ` Fujii Hironori
2015-02-18 15:17   ` Eli Zaretskii
2015-02-19  2:03     ` Fujii Hironori
2015-02-19  6:44       ` Eli Zaretskii
     [not found]         ` <CALus1PmqiC8TnQTfcpVFD5ObjqbK_4hkOczRKmG1=+mkWXUHWQ@mail.gmail.com>
2015-02-19 11:44           ` Eli Zaretskii
2015-03-06 20:29             ` Eli Zaretskii
2015-03-06 22:37               ` Fujii Hironori
2015-03-07 10:53                 ` Eli Zaretskii
2015-03-09  2:13               ` Fujii Hironori
2015-03-09 16:30                 ` Eli Zaretskii
2018-06-26  9:10 ` bug#11732: Follow-up to bug#11732 Masayuki Hatta
2018-06-27 15:54   ` Eli Zaretskii
2018-06-28  8:04     ` martin rudalics
2018-06-28 10:13       ` Masayuki Hatta
2018-06-28 12:25         ` martin rudalics
2018-06-28 13:09           ` Eli Zaretskii
2018-06-28 10:11     ` Masayuki Hatta
2018-06-28 13:28       ` Eli Zaretskii
2018-06-28 19:17         ` Noam Postavsky
2018-06-28 19:24           ` Eli Zaretskii
2018-06-29  7:39             ` Masayuki Hatta
2018-06-29  8:43               ` martin rudalics
2018-06-29  8:59                 ` Eli Zaretskii
2018-06-30  3:14                 ` Masayuki Hatta
2018-06-30  7:46                   ` Eli Zaretskii
2018-06-30  8:30                     ` Masayuki Hatta
2018-06-29  8:56               ` Eli Zaretskii
2018-06-29  8:43     ` martin rudalics
2018-06-29  9:07       ` Eli Zaretskii
2018-06-30  8:06         ` martin rudalics [this message]
2018-06-30 11:32           ` Eli Zaretskii
2018-06-30 12:51             ` martin rudalics
2018-06-30 13:21               ` Eli Zaretskii
2018-07-01  9:00                 ` martin rudalics
2018-07-01 14:29                   ` Eli Zaretskii
2018-07-03  8:29                     ` martin rudalics
2018-07-03 18:50                       ` Eli Zaretskii
2018-07-07  7:45                         ` Tak Kunihiro
2018-07-07 10:00                           ` Eli Zaretskii
2018-07-07 10:21                             ` martin rudalics
2018-07-07 11:32                               ` Eli Zaretskii
2018-07-01 14:34             ` Eli Zaretskii

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

  List information: https://www.gnu.org/software/emacs/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5B373A21.9050407@gmx.at \
    --to=rudalics@gmx.at \
    --cc=11732@debbugs.gnu.org \
    --cc=eliz@gnu.org \
    --cc=mhatta@gmail.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.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

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).