summaryrefslogtreecommitdiff
path: root/libre/abiword/fix_crash_saving_pdf.patch
blob: 6dd78c7f92454a6dad194785557c5b3c46671b64 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
--- abiword/trunk/src/text/fmt/gtk/fv_UnixSelectionHandles.cpp	2013/12/23 03:20:34	33661
+++ abiword/trunk/src/text/fmt/gtk/fv_UnixSelectionHandles.cpp	2013/12/28 02:04:39	33662
@@ -36,42 +36,60 @@
 
 	mode = _fv_text_handle_get_mode (handle);
 
-	if (pos == FV_TEXT_HANDLE_POSITION_SELECTION_START)
+	if (pos == FV_TEXT_HANDLE_POSITION_SELECTION_START) {
 		handles->updateSelectionStart ((UT_sint32)x, (UT_sint32)y);
+        }
 	else {
-		if (mode == FV_TEXT_HANDLE_MODE_SELECTION)
+		if (mode == FV_TEXT_HANDLE_MODE_SELECTION) {
 			handles->updateSelectionEnd ((UT_sint32)x, (UT_sint32)y);
-                else
+                }
+                else {
 			handles->updateCursor((UT_sint32)x, (UT_sint32)y);
+                }
 	}
 }
 
 FV_UnixSelectionHandles::FV_UnixSelectionHandles(FV_View *view, FV_Selection selection)
 	: FV_SelectionHandles (view, selection)
+	, m_text_handle(NULL)
 {
 	XAP_Frame * pFrame = static_cast<XAP_Frame*>(m_pView->getParentData());
-	XAP_UnixFrameImpl * pFrameImpl =static_cast<XAP_UnixFrameImpl *>( pFrame->getFrameImpl());
-	GtkWidget * pWidget = pFrameImpl->getViewWidget();
-
-	m_text_handle = _fv_text_handle_new (pWidget);
-        _fv_text_handle_set_relative_to (m_text_handle,
-                                         gtk_widget_get_window (pWidget));
-        g_signal_connect (m_text_handle, "handle-dragged",
-                          G_CALLBACK(handle_dragged_cb), this);
+	// When saving to PDF (and printing) we don't have a frame
+	// See bug 13586
+	if (pFrame) {
+		XAP_UnixFrameImpl * pFrameImpl = static_cast<XAP_UnixFrameImpl *>(pFrame->getFrameImpl());
+		GtkWidget * pWidget = pFrameImpl->getViewWidget();
+
+		m_text_handle = _fv_text_handle_new (pWidget);
+		_fv_text_handle_set_relative_to (m_text_handle,
+						 gtk_widget_get_window (pWidget));
+		g_signal_connect (m_text_handle, "handle-dragged",
+				  G_CALLBACK(handle_dragged_cb), this);
+	}
 }
 
 FV_UnixSelectionHandles::~FV_UnixSelectionHandles()
 {
+	if(!m_text_handle) {
+		return;
+	}
 	g_object_unref (m_text_handle);
 }
 
 void FV_UnixSelectionHandles::hide()
 {
+	if(!m_text_handle) {
+		return;
+	}
 	_fv_text_handle_set_mode (m_text_handle, FV_TEXT_HANDLE_MODE_NONE);
 }
 
 void FV_UnixSelectionHandles::setCursorCoords(UT_sint32 x, UT_sint32 y, UT_uint32 height, bool visible)
 {
+	if(!m_text_handle) {
+		return;
+	}
+
 	GdkRectangle rect;
 
 	_fv_text_handle_set_mode(m_text_handle, FV_TEXT_HANDLE_MODE_CURSOR);
@@ -92,6 +110,10 @@
 void FV_UnixSelectionHandles::setSelectionCoords(UT_sint32 start_x, UT_sint32 start_y, UT_uint32 start_height, bool start_visible,
                                                  UT_sint32 end_x, UT_sint32 end_y, UT_uint32 end_height, bool end_visible)
 {
+	if(!m_text_handle) {
+		return;
+	}
+
 	GdkRectangle rect;
 
 	_fv_text_handle_set_mode(m_text_handle, FV_TEXT_HANDLE_MODE_SELECTION);