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<XAP_UnixFrame *>(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.")
