24 #include <glib/gi18n.h> 25 #include <gdk/gdkkeysyms.h> 28 #include "gnc-cell-view.h" 30 static void gnc_cell_view_editable_init (GtkCellEditableIface *iface);
32 static void gnc_cell_view_set_property (GObject *
object,
37 static void gnc_cell_view_get_property (GObject *
object,
44 PROP_EDITING_CANCELED,
48 G_IMPLEMENT_INTERFACE (GTK_TYPE_CELL_EDITABLE,
49 gnc_cell_view_editable_init))
52 gnc_cell_view_dispose (GObject *gobject)
54 if (GNC_CELL_VIEW(gobject)->tooltip_id > 0)
56 g_source_remove (GNC_CELL_VIEW(gobject)->tooltip_id);
57 GNC_CELL_VIEW(gobject)->tooltip_id = 0;
59 G_OBJECT_CLASS (gnc_cell_view_parent_class)->dispose (gobject);
63 gnc_cell_view_init (GncCellView *cv)
65 cv->editing_canceled = FALSE;
67 cv->text_view = g_object_new (GTK_TYPE_TEXT_VIEW,
"accepts-tab", FALSE, NULL);
68 cv->buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW(cv->text_view));
70 gtk_text_view_set_left_margin (GTK_TEXT_VIEW(cv->text_view), 2);
71 gtk_text_view_set_right_margin (GTK_TEXT_VIEW(cv->text_view), 2);
73 gtk_widget_set_tooltip_text (GTK_WIDGET(cv->text_view),
74 _(
"Use Shift combined with Return or Keypad Enter to finish editing"));
76 gtk_container_add (GTK_CONTAINER(cv), GTK_WIDGET(cv->text_view));
77 gtk_widget_show (cv->text_view);
80 cv->populate_popup_id = 0;
83 gtk_widget_set_can_focus (GTK_WIDGET(cv->text_view), TRUE);
84 gtk_widget_add_events (GTK_WIDGET(cv), GDK_KEY_PRESS_MASK);
85 gtk_widget_add_events (GTK_WIDGET(cv), GDK_KEY_RELEASE_MASK);
89 gnc_cell_view_class_init (GncCellViewClass *klass)
91 GObjectClass *gobject_class = G_OBJECT_CLASS(klass);
93 gobject_class->dispose = gnc_cell_view_dispose;
95 gobject_class->set_property = gnc_cell_view_set_property;
96 gobject_class->get_property = gnc_cell_view_get_property;
98 g_object_class_override_property (gobject_class,
99 PROP_EDITING_CANCELED,
104 gnc_cell_view_set_property (GObject *
object,
109 GncCellView *cv = GNC_CELL_VIEW(
object);
113 case PROP_EDITING_CANCELED:
114 cv->editing_canceled = g_value_get_boolean (value);
118 G_OBJECT_WARN_INVALID_PROPERTY_ID(
object, param_id, pspec);
124 gnc_cell_view_get_property (GObject *
object,
129 GncCellView *cv = GNC_CELL_VIEW(
object);
133 case PROP_EDITING_CANCELED:
134 g_value_set_boolean (value, cv->editing_canceled);
138 G_OBJECT_WARN_INVALID_PROPERTY_ID(
object, param_id, pspec);
144 gtk_cell_editable_key_press_event (GtkTextView *text_view,
145 GdkEventKey *key_event,
148 if (key_event->keyval == GDK_KEY_Escape)
150 cv->editing_canceled = TRUE;
152 gtk_cell_editable_editing_done (GTK_CELL_EDITABLE(cv));
153 gtk_cell_editable_remove_widget (GTK_CELL_EDITABLE(cv));
157 if ((key_event->keyval == GDK_KEY_Return || key_event->keyval == GDK_KEY_KP_Enter)
158 && (key_event->state & GDK_SHIFT_MASK))
160 gtk_cell_editable_editing_done (GTK_CELL_EDITABLE(cv));
167 gcv_popup_unmap (GtkMenu *menu, GncCellView *cv)
169 cv->in_popup_menu = FALSE;
173 gcv_populate_popup (GtkTextView *text_view,
177 cv->in_popup_menu = TRUE;
178 g_signal_connect (popup,
"unmap",
179 G_CALLBACK (gcv_popup_unmap), cv);
183 gcv_focus_out_event (GtkWidget *widget, GdkEvent *event, GncCellView *cv)
185 if (cv->in_popup_menu)
188 cv->editing_canceled = TRUE;
190 if (cv->focus_out_id > 0)
192 g_signal_handler_disconnect (cv->text_view, cv->focus_out_id);
193 cv->focus_out_id = 0;
195 if (cv->populate_popup_id > 0)
197 g_signal_handler_disconnect (cv->text_view, cv->populate_popup_id);
198 cv->populate_popup_id = 0;
200 gtk_cell_editable_editing_done (GTK_CELL_EDITABLE(cv));
201 gtk_cell_editable_remove_widget (GTK_CELL_EDITABLE(cv));
207 gcv_remove_tooltip (GncCellView *cv)
209 if (cv->tooltip_id > 0)
211 gtk_widget_set_tooltip_text (GTK_WIDGET(cv->text_view), NULL);
218 gcv_start_editing (GtkCellEditable *cell_editable,
221 GncCellView *cv = GNC_CELL_VIEW(cell_editable);
222 GtkTextIter siter, eiter;
225 cv->tooltip_id = g_timeout_add (5000, (GSourceFunc) gcv_remove_tooltip, cv);
227 gtk_text_buffer_get_bounds (cv->buffer, &siter, &eiter);
228 gtk_text_buffer_select_range (cv->buffer, &eiter, &siter);
230 gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW(cv->text_view), TRUE);
232 gtk_widget_grab_focus (GTK_WIDGET(cv->text_view));
234 g_signal_connect (G_OBJECT(cv->text_view),
"key_press_event",
235 G_CALLBACK(gtk_cell_editable_key_press_event), cv);
237 cv->focus_out_id = g_signal_connect (G_OBJECT(cv->text_view),
239 G_CALLBACK(gcv_focus_out_event), cv);
241 cv->populate_popup_id = g_signal_connect (G_OBJECT(cv->text_view),
243 G_CALLBACK(gcv_populate_popup),
248 gnc_cell_view_editable_init (GtkCellEditableIface *iface)
250 iface->start_editing = gcv_start_editing;
254 gnc_cell_view_set_text (GncCellView *cv,
const gchar *text)
256 g_return_if_fail (GNC_IS_CELL_VIEW(cv));
258 gtk_text_buffer_set_text (cv->buffer,
264 gnc_cell_view_get_text (GncCellView *cv)
266 GtkTextIter siter, eiter;
268 g_return_val_if_fail (GNC_IS_CELL_VIEW(cv), NULL);
270 gtk_text_buffer_get_bounds (cv->buffer, &siter, &eiter);
272 return gtk_text_buffer_get_text (cv->buffer, &siter, &eiter, TRUE);
G_DEFINE_TYPE_WITH_CODE(GncMainWindow, gnc_main_window, GTK_TYPE_APPLICATION_WINDOW, G_IMPLEMENT_INTERFACE(GNC_TYPE_WINDOW, gnc_window_main_window_init)) static guint main_window_signals[LAST_SIGNAL]
A holding place for all the signals generated by the main window code.