1 /* GTK - The GIMP Toolkit
2 * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Library General Public
6 * License as published by the Free Software Foundation; either
7 * version 2 of the License, or (at your option) any later version.
9 * This library is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
12 * Library General Public License for more details.
14 * You should have received a copy of the GNU Library General Public
15 * License along with this library; if not, write to the
16 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
17 * Boston, MA 02111-1307, USA.
24 #include "gdk/gdkkeysyms.h"
25 #include "gdk/gdki18n.h"
26 #include "gtkeditable.h"
28 #include "gtkselection.h"
29 #include "gtksignal.h"
31 #define MIN_EDITABLE_WIDTH 150
32 #define DRAW_TIMEOUT 20
33 #define INNER_BORDER 2
63 static void gtk_editable_class_init (GtkEditableClass *klass);
64 static void gtk_editable_init (GtkEditable *editable);
65 static void gtk_editable_set_arg (GtkObject *object,
68 static void gtk_editable_get_arg (GtkObject *object,
71 static void gtk_editable_finalize (GtkObject *object);
72 static gint gtk_editable_selection_clear (GtkWidget *widget,
73 GdkEventSelection *event);
74 static void gtk_editable_selection_handler (GtkWidget *widget,
75 GtkSelectionData *selection_data,
77 static void gtk_editable_selection_received (GtkWidget *widget,
78 GtkSelectionData *selection_data);
80 static void gtk_editable_set_selection (GtkEditable *editable,
83 static guint32 gtk_editable_get_event_time (GtkEditable *editable);
85 static void gtk_editable_real_cut_clipboard (GtkEditable *editable);
86 static void gtk_editable_real_copy_clipboard (GtkEditable *editable);
87 static void gtk_editable_real_paste_clipboard (GtkEditable *editable);
88 static void gtk_editable_real_set_editable (GtkEditable *editable,
89 gboolean is_editable);
91 static GtkWidgetClass *parent_class = NULL;
92 static guint editable_signals[LAST_SIGNAL] = { 0 };
93 static GdkAtom ctext_atom = GDK_NONE;
94 static GdkAtom text_atom = GDK_NONE;
95 static GdkAtom clipboard_atom = GDK_NONE;
98 gtk_editable_get_type (void)
100 static GtkType editable_type = 0;
104 GtkTypeInfo editable_info =
107 sizeof (GtkEditable),
108 sizeof (GtkEditableClass),
109 (GtkClassInitFunc) gtk_editable_class_init,
110 (GtkObjectInitFunc) gtk_editable_init,
111 /* reserved_1 */ NULL,
112 /* reserved_2 */ NULL,
113 (GtkClassInitFunc) NULL,
116 editable_type = gtk_type_unique (GTK_TYPE_WIDGET, &editable_info);
119 return editable_type;
123 gtk_editable_class_init (GtkEditableClass *class)
125 GtkObjectClass *object_class;
126 GtkWidgetClass *widget_class;
128 object_class = (GtkObjectClass*) class;
129 widget_class = (GtkWidgetClass*) class;
131 parent_class = gtk_type_class (GTK_TYPE_WIDGET);
133 editable_signals[CHANGED] =
134 gtk_signal_new ("changed",
137 GTK_SIGNAL_OFFSET (GtkEditableClass, changed),
138 gtk_marshal_NONE__NONE,
141 editable_signals[INSERT_TEXT] =
142 gtk_signal_new ("insert_text",
145 GTK_SIGNAL_OFFSET (GtkEditableClass, insert_text),
146 gtk_marshal_NONE__POINTER_INT_POINTER,
153 editable_signals[DELETE_TEXT] =
154 gtk_signal_new ("delete_text",
157 GTK_SIGNAL_OFFSET (GtkEditableClass, delete_text),
158 gtk_marshal_NONE__INT_INT,
164 editable_signals[ACTIVATE] =
165 gtk_signal_new ("activate",
166 GTK_RUN_LAST | GTK_RUN_ACTION,
168 GTK_SIGNAL_OFFSET (GtkEditableClass, activate),
169 gtk_marshal_NONE__NONE,
172 editable_signals[SET_EDITABLE] =
173 gtk_signal_new ("set-editable",
174 GTK_RUN_LAST | GTK_RUN_ACTION,
176 GTK_SIGNAL_OFFSET (GtkEditableClass, set_editable),
177 gtk_marshal_NONE__BOOL,
181 editable_signals[MOVE_CURSOR] =
182 gtk_signal_new ("move_cursor",
183 GTK_RUN_LAST | GTK_RUN_ACTION,
185 GTK_SIGNAL_OFFSET (GtkEditableClass, move_cursor),
186 gtk_marshal_NONE__INT_INT,
191 editable_signals[MOVE_WORD] =
192 gtk_signal_new ("move_word",
193 GTK_RUN_LAST | GTK_RUN_ACTION,
195 GTK_SIGNAL_OFFSET (GtkEditableClass, move_word),
196 gtk_marshal_NONE__INT,
200 editable_signals[MOVE_PAGE] =
201 gtk_signal_new ("move_page",
202 GTK_RUN_LAST | GTK_RUN_ACTION,
204 GTK_SIGNAL_OFFSET (GtkEditableClass, move_page),
205 gtk_marshal_NONE__INT_INT,
210 editable_signals[MOVE_TO_ROW] =
211 gtk_signal_new ("move_to_row",
212 GTK_RUN_LAST | GTK_RUN_ACTION,
214 GTK_SIGNAL_OFFSET (GtkEditableClass, move_to_row),
215 gtk_marshal_NONE__INT,
219 editable_signals[MOVE_TO_COLUMN] =
220 gtk_signal_new ("move_to_column",
221 GTK_RUN_LAST | GTK_RUN_ACTION,
223 GTK_SIGNAL_OFFSET (GtkEditableClass, move_to_column),
224 gtk_marshal_NONE__INT,
228 editable_signals[KILL_CHAR] =
229 gtk_signal_new ("kill_char",
230 GTK_RUN_LAST | GTK_RUN_ACTION,
232 GTK_SIGNAL_OFFSET (GtkEditableClass, kill_char),
233 gtk_marshal_NONE__INT,
237 editable_signals[KILL_WORD] =
238 gtk_signal_new ("kill_word",
239 GTK_RUN_LAST | GTK_RUN_ACTION,
241 GTK_SIGNAL_OFFSET (GtkEditableClass, kill_word),
242 gtk_marshal_NONE__INT,
246 editable_signals[KILL_LINE] =
247 gtk_signal_new ("kill_line",
248 GTK_RUN_LAST | GTK_RUN_ACTION,
250 GTK_SIGNAL_OFFSET (GtkEditableClass, kill_line),
251 gtk_marshal_NONE__INT,
255 editable_signals[CUT_CLIPBOARD] =
256 gtk_signal_new ("cut_clipboard",
257 GTK_RUN_LAST | GTK_RUN_ACTION,
259 GTK_SIGNAL_OFFSET (GtkEditableClass, cut_clipboard),
260 gtk_marshal_NONE__NONE,
263 editable_signals[COPY_CLIPBOARD] =
264 gtk_signal_new ("copy_clipboard",
265 GTK_RUN_LAST | GTK_RUN_ACTION,
267 GTK_SIGNAL_OFFSET (GtkEditableClass, copy_clipboard),
268 gtk_marshal_NONE__NONE,
271 editable_signals[PASTE_CLIPBOARD] =
272 gtk_signal_new ("paste_clipboard",
273 GTK_RUN_LAST | GTK_RUN_ACTION,
275 GTK_SIGNAL_OFFSET (GtkEditableClass, paste_clipboard),
276 gtk_marshal_NONE__NONE,
279 gtk_object_class_add_signals (object_class, editable_signals, LAST_SIGNAL);
281 gtk_object_add_arg_type ("GtkEditable::text_position", GTK_TYPE_INT, GTK_ARG_READWRITE, ARG_TEXT_POSITION);
282 gtk_object_add_arg_type ("GtkEditable::editable", GTK_TYPE_BOOL, GTK_ARG_READWRITE, ARG_EDITABLE);
284 object_class->set_arg = gtk_editable_set_arg;
285 object_class->get_arg = gtk_editable_get_arg;
286 object_class->finalize = gtk_editable_finalize;
288 widget_class->selection_clear_event = gtk_editable_selection_clear;
289 widget_class->selection_received = gtk_editable_selection_received;
291 class->insert_text = NULL;
292 class->delete_text = NULL;
293 class->changed = (void (*) (GtkEditable*)) gtk_widget_queue_draw;
295 class->activate = NULL;
296 class->set_editable = gtk_editable_real_set_editable;
298 class->move_cursor = NULL;
299 class->move_word = NULL;
300 class->move_page = NULL;
301 class->move_to_row = NULL;
302 class->move_to_column = NULL;
304 class->kill_char = NULL;
305 class->kill_word = NULL;
306 class->kill_line = NULL;
308 class->cut_clipboard = gtk_editable_real_cut_clipboard;
309 class->copy_clipboard = gtk_editable_real_copy_clipboard;
310 class->paste_clipboard = gtk_editable_real_paste_clipboard;
312 class->update_text = NULL;
313 class->get_chars = NULL;
314 class->set_selection = NULL;
315 class->set_position = NULL;
319 gtk_editable_set_arg (GtkObject *object,
323 GtkEditable *editable;
325 editable = GTK_EDITABLE (object);
329 case ARG_TEXT_POSITION:
330 gtk_editable_set_position (editable, GTK_VALUE_INT (*arg));
333 gtk_editable_set_editable (editable, GTK_VALUE_BOOL (*arg));
341 gtk_editable_get_arg (GtkObject *object,
345 GtkEditable *editable;
347 editable = GTK_EDITABLE (object);
351 case ARG_TEXT_POSITION:
352 GTK_VALUE_INT (*arg) = editable->current_pos;
355 GTK_VALUE_BOOL (*arg) = editable->editable;
358 arg->type = GTK_TYPE_INVALID;
364 gtk_editable_init (GtkEditable *editable)
366 GTK_WIDGET_SET_FLAGS (editable, GTK_CAN_FOCUS);
368 editable->selection_start_pos = 0;
369 editable->selection_end_pos = 0;
370 editable->has_selection = FALSE;
371 editable->editable = 1;
372 editable->clipboard_text = NULL;
379 clipboard_atom = gdk_atom_intern ("CLIPBOARD", FALSE);
381 gtk_selection_add_handler (GTK_WIDGET(editable), GDK_SELECTION_PRIMARY,
382 GDK_TARGET_STRING, gtk_editable_selection_handler,
384 gtk_selection_add_handler (GTK_WIDGET(editable), clipboard_atom,
385 GDK_TARGET_STRING, gtk_editable_selection_handler,
389 text_atom = gdk_atom_intern ("TEXT", FALSE);
391 gtk_selection_add_handler (GTK_WIDGET(editable), GDK_SELECTION_PRIMARY,
393 gtk_editable_selection_handler,
395 gtk_selection_add_handler (GTK_WIDGET(editable), clipboard_atom,
397 gtk_editable_selection_handler,
401 ctext_atom = gdk_atom_intern ("COMPOUND_TEXT", FALSE);
403 gtk_selection_add_handler (GTK_WIDGET(editable), GDK_SELECTION_PRIMARY,
405 gtk_editable_selection_handler,
407 gtk_selection_add_handler (GTK_WIDGET(editable), clipboard_atom,
409 gtk_editable_selection_handler,
414 gtk_editable_finalize (GtkObject *object)
416 GtkEditable *editable;
418 g_return_if_fail (object != NULL);
419 g_return_if_fail (GTK_IS_EDITABLE (object));
421 editable = GTK_EDITABLE (object);
426 gdk_ic_destroy (editable->ic);
431 (* GTK_OBJECT_CLASS (parent_class)->finalize) (object);
435 gtk_editable_insert_text (GtkEditable *editable,
436 const gchar *new_text,
437 gint new_text_length,
440 GtkEditableClass *klass;
445 g_return_if_fail (editable != NULL);
446 g_return_if_fail (GTK_IS_EDITABLE (editable));
448 klass = GTK_EDITABLE_CLASS (GTK_OBJECT (editable)->klass);
450 if (new_text_length <= 64)
453 text = g_new (gchar, new_text_length);
455 strncpy (text, new_text, new_text_length);
457 gtk_signal_emit (GTK_OBJECT (editable), editable_signals[INSERT_TEXT], text, new_text_length, position);
458 gtk_signal_emit (GTK_OBJECT (editable), editable_signals[CHANGED]);
460 if (new_text_length > 64)
465 gtk_editable_delete_text (GtkEditable *editable,
469 GtkEditableClass *klass;
471 g_return_if_fail (editable != NULL);
472 g_return_if_fail (GTK_IS_EDITABLE (editable));
474 klass = GTK_EDITABLE_CLASS (GTK_OBJECT (editable)->klass);
476 gtk_signal_emit (GTK_OBJECT (editable), editable_signals[DELETE_TEXT], start_pos, end_pos);
477 gtk_signal_emit (GTK_OBJECT (editable), editable_signals[CHANGED]);
481 gtk_editable_update_text (GtkEditable *editable,
485 GtkEditableClass *klass;
487 g_return_if_fail (editable != NULL);
488 g_return_if_fail (GTK_IS_EDITABLE (editable));
490 klass = GTK_EDITABLE_CLASS (GTK_OBJECT (editable)->klass);
492 klass->update_text (editable, start_pos, end_pos);
496 gtk_editable_get_chars (GtkEditable *editable,
500 GtkEditableClass *klass;
502 g_return_val_if_fail (editable != NULL, NULL);
503 g_return_val_if_fail (GTK_IS_EDITABLE (editable), NULL);
505 klass = GTK_EDITABLE_CLASS (GTK_OBJECT (editable)->klass);
507 return klass->get_chars (editable, start, end);
511 gtk_editable_set_selection (GtkEditable *editable,
515 GtkEditableClass *klass;
517 g_return_if_fail (editable != NULL);
518 g_return_if_fail (GTK_IS_EDITABLE (editable));
520 klass = GTK_EDITABLE_CLASS (GTK_OBJECT (editable)->klass);
522 klass->set_selection (editable, start_pos, end_pos);
526 gtk_editable_set_position (GtkEditable *editable,
529 GtkEditableClass *klass;
531 g_return_if_fail (editable != NULL);
532 g_return_if_fail (GTK_IS_EDITABLE (editable));
534 klass = GTK_EDITABLE_CLASS (GTK_OBJECT (editable)->klass);
536 return klass->set_position (editable, position);
540 gtk_editable_get_position (GtkEditable *editable)
542 g_return_val_if_fail (editable != NULL, -1);
543 g_return_val_if_fail (GTK_IS_EDITABLE (editable), -1);
545 return editable->current_pos;
549 gtk_editable_selection_clear (GtkWidget *widget,
550 GdkEventSelection *event)
552 GtkEditable *editable;
554 g_return_val_if_fail (widget != NULL, FALSE);
555 g_return_val_if_fail (GTK_IS_EDITABLE (widget), FALSE);
556 g_return_val_if_fail (event != NULL, FALSE);
558 /* Let the selection handling code know that the selection
559 * has been changed, since we've overriden the default handler */
560 if (!gtk_selection_clear (widget, event))
563 editable = GTK_EDITABLE (widget);
565 if (event->selection == GDK_SELECTION_PRIMARY)
567 if (editable->has_selection)
569 editable->has_selection = FALSE;
570 gtk_editable_update_text (editable, editable->selection_start_pos,
571 editable->selection_end_pos);
574 else if (event->selection == clipboard_atom)
576 g_free (editable->clipboard_text);
577 editable->clipboard_text = NULL;
584 gtk_editable_selection_handler (GtkWidget *widget,
585 GtkSelectionData *selection_data,
588 GtkEditable *editable;
589 gint selection_start_pos;
590 gint selection_end_pos;
595 g_return_if_fail (widget != NULL);
596 g_return_if_fail (GTK_IS_EDITABLE (widget));
598 editable = GTK_EDITABLE (widget);
600 if (selection_data->selection == GDK_SELECTION_PRIMARY)
602 selection_start_pos = MIN (editable->selection_start_pos, editable->selection_end_pos);
603 selection_end_pos = MAX (editable->selection_start_pos, editable->selection_end_pos);
604 str = gtk_editable_get_chars(editable,
607 length = selection_end_pos - selection_start_pos;
611 if (!editable->clipboard_text)
614 str = editable->clipboard_text;
615 length = strlen (editable->clipboard_text);
618 if (selection_data->target == GDK_SELECTION_TYPE_STRING)
620 gtk_selection_data_set (selection_data,
621 GDK_SELECTION_TYPE_STRING,
622 8*sizeof(gchar), (guchar *)str, length);
624 else if (selection_data->target == text_atom ||
625 selection_data->target == ctext_atom)
635 gdk_string_to_compound_text (str, &encoding, &format, &text, &new_length);
636 gtk_selection_data_set (selection_data, encoding, format, text, new_length);
637 gdk_free_compound_text (text);
641 if (str != editable->clipboard_text)
646 gtk_editable_selection_received (GtkWidget *widget,
647 GtkSelectionData *selection_data)
649 GtkEditable *editable;
653 enum {INVALID, STRING, CTEXT} type;
655 g_return_if_fail (widget != NULL);
656 g_return_if_fail (GTK_IS_EDITABLE (widget));
658 editable = GTK_EDITABLE (widget);
660 if (selection_data->type == GDK_TARGET_STRING)
662 else if (selection_data->type == ctext_atom)
667 if (type == INVALID || selection_data->length < 0)
669 /* avoid infinite loop */
670 if (selection_data->target != GDK_TARGET_STRING)
671 gtk_selection_convert (widget, selection_data->selection,
672 GDK_TARGET_STRING, GDK_CURRENT_TIME);
678 if ((editable->selection_start_pos != editable->selection_end_pos) &&
679 (!editable->has_selection ||
680 (selection_data->selection == clipboard_atom)))
684 /* Don't want to call gtk_editable_delete_selection here if we are going
685 * to reclaim the selection to avoid extra server traffic */
686 if (editable->has_selection)
688 gtk_editable_delete_text (editable,
689 MIN (editable->selection_start_pos, editable->selection_end_pos),
690 MAX (editable->selection_start_pos, editable->selection_end_pos));
693 gtk_editable_delete_selection (editable);
696 tmp_pos = old_pos = editable->current_pos;
701 selection_data->data[selection_data->length] = 0;
702 gtk_editable_insert_text (editable, (gchar *)selection_data->data,
703 strlen ((gchar *)selection_data->data),
705 editable->current_pos = tmp_pos;
713 count = gdk_text_property_to_text_list (selection_data->type,
714 selection_data->format,
715 selection_data->data,
716 selection_data->length,
718 for (i=0; i<count; i++)
720 gtk_editable_insert_text (editable, list[i], strlen (list[i]), &tmp_pos);
721 editable->current_pos = tmp_pos;
724 gdk_free_text_list (list);
727 case INVALID: /* quiet compiler */
732 gtk_editable_set_selection (editable, old_pos, editable->current_pos);
736 gtk_editable_delete_selection (GtkEditable *editable)
741 g_return_if_fail (editable != NULL);
742 g_return_if_fail (GTK_IS_EDITABLE (editable));
744 if (!editable->editable)
747 start = editable->selection_start_pos;
748 end = editable->selection_end_pos;
750 editable->selection_start_pos = 0;
751 editable->selection_end_pos = 0;
754 gtk_editable_delete_text (editable, MIN (start, end), MAX (start,end));
756 if (editable->has_selection)
758 editable->has_selection = FALSE;
759 if (gdk_selection_owner_get (GDK_SELECTION_PRIMARY) == GTK_WIDGET (editable)->window)
760 gtk_selection_owner_set (NULL, GDK_SELECTION_PRIMARY, GDK_CURRENT_TIME);
765 gtk_editable_claim_selection (GtkEditable *editable,
769 g_return_if_fail (editable != NULL);
770 g_return_if_fail (GTK_IS_EDITABLE (editable));
771 g_return_if_fail (GTK_WIDGET_REALIZED (editable));
773 editable->has_selection = FALSE;
777 if (gtk_selection_owner_set (GTK_WIDGET(editable), GDK_SELECTION_PRIMARY, time))
778 editable->has_selection = TRUE;
782 if (gdk_selection_owner_get (GDK_SELECTION_PRIMARY) ==
783 GTK_WIDGET(editable)->window)
784 gtk_selection_owner_set (NULL, GDK_SELECTION_PRIMARY, time);
789 gtk_editable_select_region (GtkEditable *editable,
793 g_return_if_fail (editable != NULL);
794 g_return_if_fail (GTK_IS_EDITABLE (editable));
796 if (GTK_WIDGET_REALIZED (editable))
797 gtk_editable_claim_selection (editable, start != end, GDK_CURRENT_TIME);
799 gtk_editable_set_selection (editable, start, end);
802 /* Get the timestamp of the current event. Actually, the only thing
803 * we really care about below is the key event
806 gtk_editable_get_event_time (GtkEditable *editable)
810 event = gtk_get_current_event();
815 case GDK_MOTION_NOTIFY:
816 return event->motion.time;
817 case GDK_BUTTON_PRESS:
818 case GDK_2BUTTON_PRESS:
819 case GDK_3BUTTON_PRESS:
820 case GDK_BUTTON_RELEASE:
821 return event->button.time;
823 case GDK_KEY_RELEASE:
824 return event->key.time;
825 case GDK_ENTER_NOTIFY:
826 case GDK_LEAVE_NOTIFY:
827 return event->crossing.time;
828 case GDK_PROPERTY_NOTIFY:
829 return event->property.time;
830 case GDK_SELECTION_CLEAR:
831 case GDK_SELECTION_REQUEST:
832 case GDK_SELECTION_NOTIFY:
833 return event->selection.time;
834 case GDK_PROXIMITY_IN:
835 case GDK_PROXIMITY_OUT:
836 return event->proximity.time;
837 default: /* use current time */
840 return GDK_CURRENT_TIME;
844 gtk_editable_cut_clipboard (GtkEditable *editable)
846 g_return_if_fail (editable != NULL);
847 g_return_if_fail (GTK_IS_EDITABLE (editable));
849 gtk_signal_emit (GTK_OBJECT (editable), editable_signals[CUT_CLIPBOARD]);
853 gtk_editable_copy_clipboard (GtkEditable *editable)
855 g_return_if_fail (editable != NULL);
856 g_return_if_fail (GTK_IS_EDITABLE (editable));
858 gtk_signal_emit (GTK_OBJECT (editable), editable_signals[COPY_CLIPBOARD]);
862 gtk_editable_paste_clipboard (GtkEditable *editable)
864 g_return_if_fail (editable != NULL);
865 g_return_if_fail (GTK_IS_EDITABLE (editable));
867 gtk_signal_emit (GTK_OBJECT (editable), editable_signals[PASTE_CLIPBOARD]);
871 gtk_editable_set_editable (GtkEditable *editable,
872 gboolean is_editable)
874 g_return_if_fail (editable != NULL);
875 g_return_if_fail (GTK_IS_EDITABLE (editable));
877 gtk_signal_emit (GTK_OBJECT (editable), editable_signals[SET_EDITABLE], is_editable != FALSE);
881 gtk_editable_real_set_editable (GtkEditable *editable,
882 gboolean is_editable)
884 g_return_if_fail (editable != NULL);
885 g_return_if_fail (GTK_IS_EDITABLE (editable));
887 editable->editable = is_editable != FALSE;
888 gtk_widget_queue_draw (GTK_WIDGET (editable));
892 gtk_editable_real_cut_clipboard (GtkEditable *editable)
894 g_return_if_fail (editable != NULL);
895 g_return_if_fail (GTK_IS_EDITABLE (editable));
897 gtk_editable_real_copy_clipboard (editable);
898 gtk_editable_delete_selection (editable);
902 gtk_editable_real_copy_clipboard (GtkEditable *editable)
905 gint selection_start_pos;
906 gint selection_end_pos;
908 g_return_if_fail (editable != NULL);
909 g_return_if_fail (GTK_IS_EDITABLE (editable));
911 time = gtk_editable_get_event_time (editable);
912 selection_start_pos = MIN (editable->selection_start_pos, editable->selection_end_pos);
913 selection_end_pos = MAX (editable->selection_start_pos, editable->selection_end_pos);
915 if (selection_start_pos != selection_end_pos)
917 if (gtk_selection_owner_set (GTK_WIDGET (editable),
920 editable->clipboard_text = gtk_editable_get_chars (editable,
927 gtk_editable_real_paste_clipboard (GtkEditable *editable)
931 g_return_if_fail (editable != NULL);
932 g_return_if_fail (GTK_IS_EDITABLE (editable));
934 time = gtk_editable_get_event_time (editable);
935 if (editable->editable)
936 gtk_selection_convert (GTK_WIDGET(editable),
937 clipboard_atom, ctext_atom, time);
941 gtk_editable_changed (GtkEditable *editable)
943 g_return_if_fail (editable != NULL);
944 g_return_if_fail (GTK_IS_EDITABLE (editable));
946 gtk_signal_emit (GTK_OBJECT (editable), editable_signals[CHANGED]);