24 #include <glib/gi18n.h> 25 #include <gdk/gdkkeysyms.h> 27 #include "gnc-cell-renderer-text-view.h" 28 #include "gnc-cell-view.h" 30 static GtkCellEditable *gcrtv_start_editing (GtkCellRenderer *cell,
34 const GdkRectangle *background_area,
35 const GdkRectangle *cell_area,
36 GtkCellRendererState flags);
38 #define GNC_CELL_RENDERER_TEXT_VIEW_PATH "gnc-cell-renderer-text-view-path" 42 GtkCellRendererText parent;
48 G_DEFINE_TYPE (GncCellRendererTextView, gnc_cell_renderer_text_view, GTK_TYPE_CELL_RENDERER_TEXT)
51 gnc_cell_renderer_text_view_init (GncCellRendererTextView *
self)
56 gnc_cell_renderer_text_view_finalize (GObject *
object)
58 G_OBJECT_CLASS (gnc_cell_renderer_text_view_parent_class)->finalize (
object);
62 gnc_cell_renderer_text_view_class_init (GncCellRendererTextViewClass *klass)
64 GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
65 GtkCellRendererClass *cell_class = GTK_CELL_RENDERER_CLASS(klass);
67 gobject_class->finalize = gnc_cell_renderer_text_view_finalize;
69 cell_class->start_editing = gcrtv_start_editing;
73 gcrtv_editing_done (GtkCellEditable *editable,
74 GncCellRendererTextView *cell_tv)
79 if (GNC_CELL_VIEW(editable)->focus_out_id > 0)
81 g_signal_handler_disconnect (GNC_CELL_VIEW(editable)->text_view,
82 GNC_CELL_VIEW(editable)->focus_out_id);
83 GNC_CELL_VIEW(editable)->focus_out_id = 0;
86 if (GNC_CELL_VIEW(editable)->populate_popup_id > 0)
88 g_signal_handler_disconnect (GNC_CELL_VIEW(editable)->text_view,
89 GNC_CELL_VIEW(editable)->populate_popup_id);
90 GNC_CELL_VIEW(editable)->populate_popup_id = 0;
93 if (GNC_CELL_VIEW(editable)->editing_canceled)
95 gtk_cell_renderer_stop_editing (GTK_CELL_RENDERER(cell_tv), TRUE);
99 path = g_object_get_data (G_OBJECT(editable),
100 GNC_CELL_RENDERER_TEXT_VIEW_PATH);
102 new_text = gnc_cell_view_get_text (GNC_CELL_VIEW(editable));
104 gtk_cell_editable_remove_widget (GTK_CELL_EDITABLE(editable));
106 g_signal_emit_by_name (cell_tv,
"edited", path, new_text);
112 gcrtv_button_press_event (GtkWidget *widget,
113 GdkEventButton *event,
120 static GtkCellEditable *
121 gcrtv_start_editing (GtkCellRenderer *cell,
125 const GdkRectangle *background_area,
126 const GdkRectangle *cell_area,
127 GtkCellRendererState flags)
129 GncCellRendererTextView *cell_tv = GNC_CELL_RENDERER_TEXT_VIEW(cell);
134 g_object_get (G_OBJECT(cell_tv),
"editable", &iseditable, NULL);
137 if (iseditable == FALSE)
140 editable = g_object_new (GNC_TYPE_CELL_VIEW, NULL);
142 g_signal_connect (editable,
"button-press-event",
143 G_CALLBACK(gcrtv_button_press_event),
146 g_object_get (G_OBJECT(cell),
"text", &text, NULL);
148 gnc_cell_view_set_text (GNC_CELL_VIEW(editable), text);
152 gtk_widget_grab_focus (GTK_WIDGET(editable));
154 g_object_set_data_full (G_OBJECT(editable),
155 GNC_CELL_RENDERER_TEXT_VIEW_PATH,
159 gtk_widget_show (editable);
161 g_signal_connect (editable,
"editing-done", G_CALLBACK(gcrtv_editing_done), cell_tv);
163 cell_tv->editable = editable;
165 g_object_add_weak_pointer (G_OBJECT(cell_tv->editable),
166 (gpointer) &cell_tv->editable);
168 return GTK_CELL_EDITABLE(editable);
172 gnc_cell_renderer_text_view_new (
void)
174 return g_object_new (GNC_TYPE_CELL_RENDERER_TEXT_VIEW, NULL);