File 0001-Fix-wxPrintDialog-when-used-directly-see-16821.patch of Package wxWidgets-3_0

From a2f1bc1fdec222f3be7b7c5745ebc52c3c85a51c Mon Sep 17 00:00:00 2001
From: Paul Cornett <paulcor@users.noreply.github.com>
Date: Mon, 11 May 2015 10:14:34 -0700
Subject: [PATCH] Fix wxPrintDialog when used directly, see #16821

---
 src/gtk/print.cpp | 25 +++++++++++++++++++------
 1 file changed, 19 insertions(+), 6 deletions(-)

diff --git a/src/gtk/print.cpp b/src/gtk/print.cpp
index 2d70a1b..675a3ea 100644
--- a/src/gtk/print.cpp
+++ b/src/gtk/print.cpp
@@ -32,7 +32,6 @@
 #include "wx/fontutil.h"
 #include "wx/dynlib.h"
 #include "wx/paper.h"
-#include "wx/scopeguard.h"
 #include "wx/modalhook.h"
 
 #include <gtk/gtk.h>
@@ -612,6 +611,11 @@ wxGtkPrintDialog::wxGtkPrintDialog( wxWindow *parent, wxPrintDialogData *data )
 
     m_parent = parent;
     SetShowDialog(true);
+
+    const wxPrintData& printData = m_printDialogData.GetPrintData();
+    wxGtkPrintNativeData* native =
+        static_cast<wxGtkPrintNativeData*>(printData.GetNativeData());
+    native->SetPrintJob(gtk_print_operation_new());
 }
 
 wxGtkPrintDialog::wxGtkPrintDialog( wxWindow *parent, wxPrintData *data )
@@ -625,11 +629,22 @@ wxGtkPrintDialog::wxGtkPrintDialog( wxWindow *parent, wxPrintData *data )
 
     m_parent = parent;
     SetShowDialog(true);
+
+    const wxPrintData& printData = m_printDialogData.GetPrintData();
+    wxGtkPrintNativeData* native =
+        static_cast<wxGtkPrintNativeData*>(printData.GetNativeData());
+    native->SetPrintJob(gtk_print_operation_new());
 }
 
 
 wxGtkPrintDialog::~wxGtkPrintDialog()
 {
+    const wxPrintData& printData = m_printDialogData.GetPrintData();
+    wxGtkPrintNativeData* native =
+        static_cast<wxGtkPrintNativeData*>(printData.GetNativeData());
+    GtkPrintOperation* printOp = native->GetPrintJob();
+    g_object_unref(printOp);
+    native->SetPrintJob(NULL);
 }
 
 // This is called even if we actually don't want the dialog to appear.
@@ -921,10 +936,9 @@ bool wxGtkPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt )
     wxPrintData printdata = GetPrintDialogData().GetPrintData();
     wxGtkPrintNativeData *native = (wxGtkPrintNativeData*) printdata.GetNativeData();
 
-    wxGtkObject<GtkPrintOperation> printOp(gtk_print_operation_new());
-    native->SetPrintJob(printOp);
-    wxON_BLOCK_EXIT_OBJ1(*native, wxGtkPrintNativeData::SetPrintJob,
-                         static_cast<GtkPrintOperation*>(NULL));
+    // wxGtkPrintDialog needs to be created first as it creates the PrintOp
+    wxGtkPrintDialog dialog(parent, &m_printDialogData);
+    GtkPrintOperation* printOp = native->GetPrintJob();
 
     wxPrinterToGtkData dataToSend;
     dataToSend.printer = this;
@@ -937,7 +951,6 @@ bool wxGtkPrinter::Print(wxWindow *parent, wxPrintout *printout, bool prompt )
 
     // This is used to setup the DC and
     // show the dialog if desired
-    wxGtkPrintDialog dialog( parent, &m_printDialogData );
     dialog.SetPrintDC(m_dc);
     dialog.SetShowDialog(prompt);
 
-- 
2.7.0

openSUSE Build Service is sponsored by