tIncorrect handling of WM_CLOSE under Win32 fixed. - vaccinewars - be a doctor and try to vaccinate the world
 (HTM) git clone git://src.adamsgaard.dk/vaccinewars
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit a907da82b3c3524cd5c05a189fb87a60b8aa6d96
 (DIR) parent 720fcc153eaa520911edd6763d282fe9341e6962
 (HTM) Author: Ben Webb <ben@salilab.org>
       Date:   Sun,  3 Mar 2002 20:27:45 +0000
       
       Incorrect handling of WM_CLOSE under Win32 fixed.
       
       
       Diffstat:
         M ChangeLog                           |       3 +++
         M src/gtkport/clist.c                 |       7 ++++---
         M src/gtkport/gtkport.c               |      44 ++++++++++++++++++++-----------
         M src/gtkport/gtkport.h               |       2 +-
       
       4 files changed, 36 insertions(+), 20 deletions(-)
       ---
 (DIR) diff --git a/ChangeLog b/ChangeLog
       t@@ -1,4 +1,7 @@
        cvs
       +    - Incorrect handling of WM_CLOSE under Win32 fixed
       +
       +1.5.4   03-03-2002
            - Basic configuration file editor added to GTK+ client
            - Annoying flashing on closure of modal windows in Win32 fixed
            - Win32 client now uses "proper" dialog boxes (i.e. without a window menu)
 (DIR) diff --git a/src/gtkport/clist.c b/src/gtkport/clist.c
       t@@ -39,7 +39,7 @@ static void gtk_clist_size_request(GtkWidget *widget,
        static void gtk_clist_set_size(GtkWidget *widget,
                                       GtkAllocation *allocation);
        static gboolean gtk_clist_wndproc(GtkWidget *widget, UINT msg, WPARAM wParam,
       -                                  LPARAM lParam);
       +                                  LPARAM lParam, gboolean *dodef);
        static void gtk_clist_realize(GtkWidget *widget);
        static void gtk_clist_show(GtkWidget *widget);
        static void gtk_clist_hide(GtkWidget *widget);
       t@@ -70,7 +70,7 @@ static GtkClass GtkCListClass = {
        };
        
        gboolean gtk_clist_wndproc(GtkWidget *widget, UINT msg, WPARAM wParam,
       -                           LPARAM lParam)
       +                           LPARAM lParam, gboolean *dodef)
        {
          LPDRAWITEMSTRUCT lpdis;
          HD_NOTIFY FAR *phdr;
       t@@ -103,7 +103,8 @@ gboolean gtk_clist_wndproc(GtkWidget *widget, UINT msg, WPARAM wParam,
            }
            break;
          }
       -  return TRUE;
       +
       +  return FALSE;
        }
        
        void gtk_clist_set_size(GtkWidget *widget, GtkAllocation *allocation)
 (DIR) diff --git a/src/gtkport/gtkport.c b/src/gtkport/gtkport.c
       t@@ -89,7 +89,7 @@ static void gtk_window_destroy(GtkWidget *widget);
        static void gtk_window_set_menu(GtkWindow *window, GtkMenuBar *menu_bar);
        static GtkWidget *gtk_window_get_menu_ID(GtkWindow *window, gint ID);
        static gboolean gtk_window_wndproc(GtkWidget *widget, UINT msg, WPARAM wParam,
       -                                   LPARAM lParam);
       +                                   LPARAM lParam, gboolean *dodef);
        static void gtk_table_destroy(GtkWidget *widget);
        static void gtk_table_size_request(GtkWidget *widget,
                                           GtkRequisition *requisition);
       t@@ -885,7 +885,7 @@ LRESULT CALLBACK GtkSepProc(HWND hwnd, UINT msg, UINT wParam, LONG lParam)
        }
        
        gboolean gtk_window_wndproc(GtkWidget *widget, UINT msg, WPARAM wParam,
       -                            LPARAM lParam)
       +                            LPARAM lParam, gboolean *dodef)
        {
          RECT rect;
          GtkAllocation alloc;
       t@@ -925,6 +925,7 @@ gboolean gtk_window_wndproc(GtkWidget *widget, UINT msg, WPARAM wParam,
          case WM_CLOSE:
            gtk_signal_emit(GTK_OBJECT(widget), "delete_event",
                            &event, &signal_return);
       +    *dodef = FALSE;
            return TRUE;
          case WM_COMMAND:
            if (HIWORD(wParam) == 0 || HIWORD(wParam) == 1) {
       t@@ -936,10 +937,12 @@ gboolean gtk_window_wndproc(GtkWidget *widget, UINT msg, WPARAM wParam,
            }
            break;
          }
       -  return TRUE;
       +
       +  return FALSE;
        }
        
       -static BOOL HandleWinMessage(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
       +static BOOL HandleWinMessage(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam,
       +                             gboolean *dodef)
        {
          GtkWidget *widget;
          GtkClass *klass;
       t@@ -949,6 +952,9 @@ static BOOL HandleWinMessage(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
          LPDRAWITEMSTRUCT lpdis;
          HD_NOTIFY FAR *phdr;
          NMHDR *nmhdr;
       +  gboolean retval = FALSE;
       +
       +  *dodef = TRUE;
        
          if (customWndProc
              && CallWindowProc(customWndProc, hwnd, msg, wParam, lParam))
       t@@ -956,8 +962,8 @@ static BOOL HandleWinMessage(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
        
          widget = GTK_WIDGET(GetWindowLong(hwnd, GWL_USERDATA));
          if (widget && (klass = GTK_OBJECT(widget)->klass)
       -      && klass->wndproc && !klass->wndproc(widget, msg, wParam, lParam)) {
       -    return FALSE;
       +      && klass->wndproc) {
       +    retval = klass->wndproc(widget, msg, wParam, lParam, dodef);
          }
        
          switch (msg) {
       t@@ -965,8 +971,8 @@ static BOOL HandleWinMessage(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
            if ((lpdis = (LPDRAWITEMSTRUCT)lParam)
                && (widget = GTK_WIDGET(GetWindowLong(lpdis->hwndItem, GWL_USERDATA)))
                && (klass = GTK_OBJECT(widget)->klass)
       -        && klass->wndproc && !klass->wndproc(widget, msg, wParam, lParam)) {
       -      return FALSE;
       +        && klass->wndproc) {
       +      retval = klass->wndproc(widget, msg, wParam, lParam, dodef);
            }
            break;
          case WM_MEASUREITEM:
       t@@ -984,8 +990,8 @@ static BOOL HandleWinMessage(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
            widget = GTK_WIDGET(GetWindowLong((HWND)lParam, GWL_USERDATA));
            klass = NULL;
            if (widget && (klass = GTK_OBJECT(widget)->klass)
       -        && klass->wndproc && !klass->wndproc(widget, msg, wParam, lParam)) {
       -      return FALSE;
       +        && klass->wndproc) {
       +      retval = klass->wndproc(widget, msg, wParam, lParam, dodef);
            }
        
            if (lParam && klass == &GtkOptionMenuClass &&
       t@@ -1004,8 +1010,8 @@ static BOOL HandleWinMessage(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
        
            widget = GTK_WIDGET(GetWindowLong(nmhdr->hwndFrom, GWL_USERDATA));
            if (widget && (klass = GTK_OBJECT(widget)->klass)
       -        && klass->wndproc && !klass->wndproc(widget, msg, wParam, lParam)) {
       -      return FALSE;
       +        && klass->wndproc) {
       +      retval = klass->wndproc(widget, msg, wParam, lParam, dodef);
            }
        
            if (widget && nmhdr->code == TCN_SELCHANGE) {
       t@@ -1027,24 +1033,30 @@ static BOOL HandleWinMessage(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
            DispatchTimeoutEvent((UINT)wParam);
            return FALSE;
          }
       -  return FALSE;
       +
       +  return retval;
        }
        
        LRESULT CALLBACK MainWndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
        {
       -  if (!HandleWinMessage(hwnd, msg, wParam, lParam)) {
       +  gboolean retval, dodef = TRUE;
       +
       +  retval = HandleWinMessage(hwnd, msg, wParam, lParam, &dodef);
       +  if (dodef) {
            return DefWindowProc(hwnd, msg, wParam, lParam);
          } else {
       -    return TRUE;
       +    return retval;
          }
        }
        
        BOOL APIENTRY MainDlgProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
        {
       +  gboolean dodef;
       +
          if (msg == WM_INITDIALOG) {
            return TRUE;
          } else {
       -    return HandleWinMessage(hwnd, msg, wParam, lParam);
       +    return HandleWinMessage(hwnd, msg, wParam, lParam, &dodef);
          }
        }
        
 (DIR) diff --git a/src/gtkport/gtkport.h b/src/gtkport/gtkport.h
       t@@ -157,7 +157,7 @@ struct _GtkSignalType {
        };
        
        typedef gboolean (*GtkWndProc) (GtkWidget *widget, UINT msg,
       -                                WPARAM wParam, LPARAM lParam);
       +                                WPARAM wParam, LPARAM lParam, gboolean *dodef);
        
        struct _GtkClass {
          gchar *Name;