mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Bug 798147 - Accounts Page Notes entry crash
There were a couple of places that a value was being used after it had been freed so they were fixed.
This commit is contained in:
parent
27435b1038
commit
8b79002a75
@ -89,6 +89,8 @@ gcrtv_editing_done (GtkCellEditable *editable,
|
||||
|
||||
new_text = gnc_cell_view_get_text (GNC_CELL_VIEW(editable));
|
||||
|
||||
gtk_cell_editable_remove_widget (GTK_CELL_EDITABLE(editable));
|
||||
|
||||
g_signal_emit_by_name (cell_tv, "edited", path, new_text);
|
||||
}
|
||||
|
||||
|
@ -53,9 +53,14 @@ G_DEFINE_TYPE_WITH_CODE (GncCellView, gnc_cell_view, GTK_TYPE_EVENT_BOX,
|
||||
gnc_cell_view_editable_init))
|
||||
|
||||
static void
|
||||
gnc_cell_view_finalize (GObject *gobject)
|
||||
gnc_cell_view_dispose (GObject *gobject)
|
||||
{
|
||||
G_OBJECT_CLASS (gnc_cell_view_parent_class)->finalize (gobject);
|
||||
if (GNC_CELL_VIEW(gobject)->tooltip_id > 0)
|
||||
{
|
||||
g_source_remove (GNC_CELL_VIEW(gobject)->tooltip_id);
|
||||
GNC_CELL_VIEW(gobject)->tooltip_id = 0;
|
||||
}
|
||||
G_OBJECT_CLASS (gnc_cell_view_parent_class)->dispose (gobject);
|
||||
}
|
||||
|
||||
static void
|
||||
@ -75,6 +80,9 @@ gnc_cell_view_init (GncCellView *cv)
|
||||
gtk_container_add (GTK_CONTAINER(cv), GTK_WIDGET(cv->text_view));
|
||||
gtk_widget_show (cv->text_view);
|
||||
|
||||
cv->focus_out_id = 0;
|
||||
cv->tooltip_id = 0;
|
||||
|
||||
gtk_widget_set_can_focus (GTK_WIDGET(cv->text_view), TRUE);
|
||||
gtk_widget_add_events (GTK_WIDGET(cv), GDK_KEY_PRESS_MASK);
|
||||
gtk_widget_add_events (GTK_WIDGET(cv), GDK_KEY_RELEASE_MASK);
|
||||
@ -86,7 +94,7 @@ gnc_cell_view_class_init (GncCellViewClass *klass)
|
||||
GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
|
||||
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS(klass);
|
||||
|
||||
gobject_class->finalize = gnc_cell_view_finalize;
|
||||
gobject_class->dispose = gnc_cell_view_dispose;
|
||||
|
||||
gobject_class->set_property = gnc_cell_view_set_property;
|
||||
gobject_class->get_property = gnc_cell_view_get_property;
|
||||
@ -144,11 +152,9 @@ gtk_cell_editable_key_press_event (GtkTextView *text_view,
|
||||
if (key_event->keyval == GDK_KEY_Escape)
|
||||
{
|
||||
cv->editing_canceled = TRUE;
|
||||
|
||||
gtk_cell_editable_editing_done (GTK_CELL_EDITABLE(cv));
|
||||
|
||||
if (GTK_IS_CELL_EDITABLE(cv))
|
||||
gtk_cell_editable_remove_widget (GTK_CELL_EDITABLE(cv));
|
||||
|
||||
gtk_cell_editable_remove_widget (GTK_CELL_EDITABLE(cv));
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
@ -156,10 +162,6 @@ gtk_cell_editable_key_press_event (GtkTextView *text_view,
|
||||
&& (key_event->state & GDK_SHIFT_MASK))
|
||||
{
|
||||
gtk_cell_editable_editing_done (GTK_CELL_EDITABLE(cv));
|
||||
|
||||
if (GTK_IS_CELL_EDITABLE(cv))
|
||||
gtk_cell_editable_remove_widget (GTK_CELL_EDITABLE(cv));
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
return FALSE;
|
||||
@ -184,8 +186,11 @@ gcv_focus_out_event (GtkWidget *widget, GdkEvent *event, GncCellView *cv)
|
||||
static gboolean
|
||||
gcv_remove_tooltip (GncCellView *cv)
|
||||
{
|
||||
if (GTK_IS_WIDGET(cv->text_view))
|
||||
if (cv->tooltip_id > 0)
|
||||
{
|
||||
gtk_widget_set_tooltip_text (GTK_WIDGET(cv->text_view), NULL);
|
||||
cv->tooltip_id = 0;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
@ -196,8 +201,8 @@ gcv_start_editing (GtkCellEditable *cell_editable,
|
||||
GncCellView *cv = GNC_CELL_VIEW(cell_editable);
|
||||
GtkTextIter siter, eiter;
|
||||
|
||||
// Remove the text_view tooltip after 5secs
|
||||
g_timeout_add (5000, (GSourceFunc) gcv_remove_tooltip, cv);
|
||||
// Remove the text_view tooltip after 5secs to stop it recuring
|
||||
cv->tooltip_id = g_timeout_add (5000, (GSourceFunc) gcv_remove_tooltip, cv);
|
||||
|
||||
gtk_text_buffer_get_bounds (cv->buffer, &siter, &eiter);
|
||||
gtk_text_buffer_select_range (cv->buffer, &eiter, &siter);
|
||||
|
@ -43,6 +43,7 @@ struct _GncCellView
|
||||
GtkTextBuffer *buffer;
|
||||
|
||||
gulong focus_out_id;
|
||||
guint tooltip_id;
|
||||
gboolean editing_canceled;
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user