This is the mail archive of the cygwin-apps mailing list for the Cygwin project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH setup] Make sure that fatal error messages are visible


On 12/20/2017 12:09 PM, Ken Brown wrote:
On 12/20/2017 11:19 AM, Jon Turney wrote:
On 19/12/2017 00:53, Ken Brown wrote:
The message box produced by TOPLEVEL_CATCH could be hidden by whatever
window was previously being displayed, so that setup appeared to hang.
Fix this by giving fatal error message boxes type MB_SETFOREGROUND.

This is good as far as it goes, but is kind of working around the fact that fatal() is being called with an NULL owner HWND.

This is not idea because I guess it means that propsheet window is still activate-able when this messagebox is displayed (MB_APPMODAL doesn't apply)?

It turns out that MB_SYSTEMMODAL did the job.  I tried MB_APPLMODAL and MB_TASKMODAL also, but both of those still allowed me to activate the propsheet window.

I just discovered that MB_SYSTEMMODAL doesn't prevent activation of the propsheet in all circumstances. I tried the following: I created a corrupt local package in the local cache and then tried to reinstall the package. This led to an exception thrown by check_for_cached(), which normally would be caught by do_download_thread(). But I disabled that as follows:

--- a/download.cc
+++ b/download.cc
@@ -278,8 +278,8 @@ do_download_thread (HINSTANCE h, HWND owner)
          catch (Exception * e)
            {
              // We know what to do with these..
-             if (e->errNo() == APPERR_CORRUPT_PACKAGE)
-               fatal (owner, IDS_CORRUPT_PACKAGE, pkg.name.c_str());
+             // if (e->errNo() == APPERR_CORRUPT_PACKAGE)
+ // fatal (owner, IDS_CORRUPT_PACKAGE, pkg.name.c_str());
              // Unexpected exception.
              throw e;
            }

As I result the exception was caught by the TOPLEVEL_CATCH for the download thread. When the fatal message box was shown, I was still able to interact with the download progress reporting window. Fortunately, the only available button there was 'Cancel', so no harm was done.

In spite of this, MB_SYSTEMMODAL is still the best option I've been able to come up with.

Ken


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]