In particular, create a valid GtkPrintOperation object instead of using an
uninitialized pointer to it in wxGtkPrintDialog::ShowModal(), resulting in
crashes or, at best, GTK errors.
Closes #12483.
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65828
c3d73ce0-8a6f-49c7-b76d-
6d57e0e08775
GtkPrintSettings* GetPrintConfig() { return m_config; }
void SetPrintConfig( GtkPrintSettings * config );
GtkPrintSettings* GetPrintConfig() { return m_config; }
void SetPrintConfig( GtkPrintSettings * config );
- void SetPrintJob( GtkPrintOperation *job ) { m_job = job; }
GtkPrintOperation* GetPrintJob() { return m_job; }
GtkPrintContext *GetPrintContext() { return m_context; }
GtkPrintOperation* GetPrintJob() { return m_job; }
GtkPrintContext *GetPrintContext() { return m_context; }
wxGtkPrintNativeData::wxGtkPrintNativeData()
{
m_config = gtk_print_settings_new();
wxGtkPrintNativeData::wxGtkPrintNativeData()
{
m_config = gtk_print_settings_new();
+ m_job = gtk_print_operation_new();
+ m_context = NULL;
}
wxGtkPrintNativeData::~wxGtkPrintNativeData()
{
}
wxGtkPrintNativeData::~wxGtkPrintNativeData()
{
- g_object_unref (m_config);
+ g_object_unref(m_job);
+ g_object_unref(m_config);
}
// Convert datas stored in m_config to a wxPrintData.
}
// Convert datas stored in m_config to a wxPrintData.
gtk_print_settings_set_page_ranges (settings, range, 1);
}
gtk_print_settings_set_page_ranges (settings, range, 1);
}
+ GtkPrintOperation * const printOp = native->GetPrintJob();
+
// If the settings are OK, we restore it.
if (settings != NULL)
// If the settings are OK, we restore it.
if (settings != NULL)
- gtk_print_operation_set_print_settings (native->GetPrintJob(), settings);
- gtk_print_operation_set_default_page_setup (native->GetPrintJob(), native->GetPageSetupFromSettings(settings));
+ gtk_print_operation_set_print_settings (printOp, settings);
+ gtk_print_operation_set_default_page_setup (printOp, native->GetPageSetupFromSettings(settings));
// Show the dialog if needed.
GError* gError = NULL;
if (GetShowDialog())
// Show the dialog if needed.
GError* gError = NULL;
if (GetShowDialog())
- response = gtk_print_operation_run (native->GetPrintJob(), GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, GTK_WINDOW(gtk_widget_get_toplevel(m_parent->m_widget) ), &gError);
+ response = gtk_print_operation_run (printOp, GTK_PRINT_OPERATION_ACTION_PRINT_DIALOG, GTK_WINDOW(gtk_widget_get_toplevel(m_parent->m_widget) ), &gError);
- response = gtk_print_operation_run (native->GetPrintJob(), GTK_PRINT_OPERATION_ACTION_PRINT, GTK_WINDOW(gtk_widget_get_toplevel(m_parent->m_widget)), &gError);
+ response = gtk_print_operation_run (printOp, GTK_PRINT_OPERATION_ACTION_PRINT, GTK_WINDOW(gtk_widget_get_toplevel(m_parent->m_widget)), &gError);
// Does everything went well?
if (response == GTK_PRINT_OPERATION_RESULT_CANCEL)
// Does everything went well?
if (response == GTK_PRINT_OPERATION_RESULT_CANCEL)
}
// Now get the settings and save it.
}
// Now get the settings and save it.
- GtkPrintSettings* newSettings = gtk_print_operation_get_print_settings (native->GetPrintJob());
+ GtkPrintSettings* newSettings = gtk_print_operation_get_print_settings(printOp);
native->SetPrintConfig(newSettings);
data.ConvertFromNative();
native->SetPrintConfig(newSettings);
data.ConvertFromNative();
wxPrintData printdata = GetPrintDialogData().GetPrintData();
wxGtkPrintNativeData *native = (wxGtkPrintNativeData*) printdata.GetNativeData();
wxPrintData printdata = GetPrintDialogData().GetPrintData();
wxGtkPrintNativeData *native = (wxGtkPrintNativeData*) printdata.GetNativeData();
- GtkPrintOperation *printOp = gtk_print_operation_new ();
-
- native->SetPrintJob( printOp );
+ GtkPrintOperation * const printOp = native->GetPrintJob();
wxPrinterToGtkData dataToSend;
dataToSend.printer = this;
wxPrinterToGtkData dataToSend;
dataToSend.printer = this;
wxFAIL_MSG(_("The print dialog returned an error."));
}
wxFAIL_MSG(_("The print dialog returned an error."));
}
- g_object_unref (printOp);
-
return (sm_lastError == wxPRINTER_NO_ERROR);
}
return (sm_lastError == wxPRINTER_NO_ERROR);
}