Index: src/wp/ap/unix/ap_UnixDialog_PageSetup.cpp =================================================================== RCS file: /cvsroot/abi/src/wp/ap/unix/ap_UnixDialog_PageSetup.cpp,v retrieving revision 1.11 diff -u -r1.11 ap_UnixDialog_PageSetup.cpp --- src/wp/ap/unix/ap_UnixDialog_PageSetup.cpp 2001/11/04 23:26:11 1.11 +++ src/wp/ap/unix/ap_UnixDialog_PageSetup.cpp 2001/11/28 20:43:27 @@ -229,9 +229,6 @@ return; } - setAnswer (a_OK); - - setPageSize (fp); setMarginUnits (last_margin_unit); setPageUnits (last_page_unit); @@ -245,7 +242,19 @@ setMarginHeader (gtk_spin_button_get_value_as_float (GTK_SPIN_BUTTON (m_spinMarginHeader))); setMarginFooter (gtk_spin_button_get_value_as_float (GTK_SPIN_BUTTON (m_spinMarginFooter))); - gtk_main_quit(); + // The window will only close (on an OK click) if the margins + // fit inside the paper size. + if ( validatePageSettings() ) { + setAnswer (a_OK); + + gtk_main_quit(); + } + else { + // "The margins selected are too large to fit on the page." + m_pFrame->showMessageBox(AP_STRING_ID_DLG_PageSetup_ErrBigMargins, + XAP_Dialog_MessageBox::b_O, + XAP_Dialog_MessageBox::a_OK); + } } void AP_UnixDialog_PageSetup::event_Cancel (void) @@ -374,6 +383,8 @@ UT_ASSERT(mainWindow); connectFocus(GTK_WIDGET(mainWindow), pFrame); + + m_pFrame = pFrame; // To center the dialog, we need the frame of its parent. XAP_UnixFrame * pUnixFrame = static_cast(pFrame); Index: src/wp/ap/unix/ap_UnixDialog_PageSetup.h =================================================================== RCS file: /cvsroot/abi/src/wp/ap/unix/ap_UnixDialog_PageSetup.h,v retrieving revision 1.2 diff -u -r1.2 ap_UnixDialog_PageSetup.h --- src/wp/ap/unix/ap_UnixDialog_PageSetup.h 2001/01/31 05:35:27 1.2 +++ src/wp/ap/unix/ap_UnixDialog_PageSetup.h 2001/11/28 20:43:27 @@ -69,6 +69,8 @@ GtkWidget * m_spinMarginRight; GtkWidget * m_spinMarginHeader; GtkWidget * m_spinMarginFooter; + + XAP_Frame * m_pFrame; }; #endif // AP_UnixDialog_PageSetup_H Index: src/wp/ap/xp/ap_Dialog_PageSetup.cpp =================================================================== RCS file: /cvsroot/abi/src/wp/ap/xp/ap_Dialog_PageSetup.cpp,v retrieving revision 1.3 diff -u -r1.3 ap_Dialog_PageSetup.cpp --- src/wp/ap/xp/ap_Dialog_PageSetup.cpp 2001/02/05 05:21:01 1.3 +++ src/wp/ap/xp/ap_Dialog_PageSetup.cpp 2001/11/28 20:43:27 @@ -47,6 +47,11 @@ } +bool AP_Dialog_PageSetup::validatePageSettings(void) const +{ + if ( (m_MarginLeft + m_MarginRight >= m_PageSize.Width(m_PageUnits)) || + (m_MarginTop + m_MarginBottom >= m_PageSize.Height(m_PageUnits)) ) + return false; - - + return true; +} Index: src/wp/ap/xp/ap_Dialog_PageSetup.h =================================================================== RCS file: /cvsroot/abi/src/wp/ap/xp/ap_Dialog_PageSetup.h,v retrieving revision 1.3 diff -u -r1.3 ap_Dialog_PageSetup.h --- src/wp/ap/xp/ap_Dialog_PageSetup.h 2001/01/31 05:35:27 1.3 +++ src/wp/ap/xp/ap_Dialog_PageSetup.h 2001/11/28 20:43:28 @@ -59,6 +59,8 @@ // this should only get used by decendant classes inline void setAnswer (tAnswer answer) {m_answer = answer;} + bool validatePageSettings(void) const; + private: AP_Dialog_PageSetup::tAnswer m_answer; Index: src/wp/ap/xp/ap_String_Id.h =================================================================== RCS file: /cvsroot/abi/src/wp/ap/xp/ap_String_Id.h,v retrieving revision 1.126 diff -u -r1.126 ap_String_Id.h --- src/wp/ap/xp/ap_String_Id.h 2001/11/27 21:00:40 1.126 +++ src/wp/ap/xp/ap_String_Id.h 2001/11/28 20:43:30 @@ -505,6 +505,7 @@ dcl(DLG_PageSetup_Left, "&Left:") dcl(DLG_PageSetup_Right, "&Right:") dcl(DLG_PageSetup_Margin, "&Margin") +dcl(DLG_PageSetup_ErrBigMargins, "The margins selected are too large to fit on the page.") dcl(MSG_DirectionModeChg, "You have changed the direction mode.") dcl(MSG_DefaultDirectionChg,"You have changed the default direction.")