static void chat_text_view_copy_clipboard (EmpathyChatView *view) { GtkTextBuffer *buffer; GtkTextIter start, iter, end; GtkClipboard *clipboard; GdkPixbuf *pixbuf; gunichar c; GtkTextChildAnchor *anchor = NULL; GString *str; GList *list; gboolean ignore_newlines = FALSE; g_return_if_fail (EMPATHY_IS_CHAT_TEXT_VIEW (view)); buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view)); clipboard = gtk_clipboard_get (GDK_SELECTION_CLIPBOARD); if (!gtk_text_buffer_get_selection_bounds (buffer, &start, &end)) return; str = g_string_new (""); for (iter = start; !gtk_text_iter_equal (&iter, &end); gtk_text_iter_forward_char (&iter)) { c = gtk_text_iter_get_char (&iter); /* 0xFFFC is the 'object replacement' unicode character, * it indicates the presence of a pixbuf or a widget. */ if (c == 0xFFFC) { ignore_newlines = FALSE; if ((pixbuf = gtk_text_iter_get_pixbuf (&iter))) { gchar *text; text = g_object_get_data (G_OBJECT(pixbuf), "smiley_str"); if (text) str = g_string_append (str, text); } else if ((anchor = gtk_text_iter_get_child_anchor (&iter))) { gchar *text; list = gtk_text_child_anchor_get_widgets (anchor); if (list) { text = g_object_get_data (G_OBJECT(list->data), "str_obj"); if (text) str = g_string_append (str, text); } g_list_free (list); } } else if (c == '\n') { if (!ignore_newlines) { ignore_newlines = TRUE; str = g_string_append_unichar (str, c); } } else { ignore_newlines = FALSE; str = g_string_append_unichar (str, c); } } gtk_clipboard_set_text (clipboard, str->str, str->len); g_string_free (str, TRUE); }
static gboolean find_anchor (GtkTextIter *iter) { while (gtk_text_iter_forward_char (iter)) { if (gtk_text_iter_get_child_anchor (iter)) return TRUE; } return FALSE; }
void MergeDialog::on_text_buffer_execute() { // Set the OK button sensitive if there are no conflicts anymore. bool conflicts_present = false; GtkTextIter iter; gtk_text_buffer_get_start_iter(textbuffer, &iter); do { if (gtk_text_iter_get_child_anchor(&iter)) { conflicts_present = true; } } while (gtk_text_iter_forward_char(&iter)); gtk_widget_set_sensitive(okbutton, !conflicts_present); }
CAMLprim value ml_gtk_text_iter_get_child_anchor(value ti) { GtkTextChildAnchor *ret = gtk_text_iter_get_child_anchor(GtkTextIter_val(ti)); return Val_option(ret,Val_GtkTextChildAnchor); }
static void attach_widgets (GtkTextView *text_view) { GtkTextIter iter; GtkTextBuffer *buffer; int i; buffer = gtk_text_view_get_buffer (text_view); gtk_text_buffer_get_start_iter (buffer, &iter); i = 0; while (find_anchor (&iter)) { GtkTextChildAnchor *anchor; GtkWidget *widget; anchor = gtk_text_iter_get_child_anchor (&iter); if (i == 0) { widget = gtk_button_new_with_label ("Click Me"); g_signal_connect (widget, "clicked", G_CALLBACK (easter_egg_callback), NULL); } else if (i == 1) { widget = gtk_combo_box_new_text (); gtk_combo_box_append_text (GTK_COMBO_BOX (widget), "Option 1"); gtk_combo_box_append_text (GTK_COMBO_BOX (widget), "Option 2"); gtk_combo_box_append_text (GTK_COMBO_BOX (widget), "Option 3"); } else if (i == 2) { widget = gtk_hscale_new (NULL); gtk_range_set_range (GTK_RANGE (widget), 0, 100); gtk_widget_set_size_request (widget, 70, -1); } else if (i == 3) { gchar *filename = demo_find_file ("floppybuddy.gif", NULL); widget = gtk_image_new_from_file (filename); g_free (filename); } else if (i == 4) { widget = gtk_entry_new (); } else { widget = NULL; /* avoids a compiler warning */ g_assert_not_reached (); } gtk_text_view_add_child_at_anchor (text_view, widget, anchor); gtk_widget_show_all (widget); ++i; } }
static VALUE rg_child_anchor(VALUE self) { GtkTextChildAnchor* anchor = gtk_text_iter_get_child_anchor(_SELF(self)); return anchor ? GOBJ2RVAL(anchor) : Qnil; }