Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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);
}
Ejemplo n.º 4
0
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);
}
Ejemplo n.º 5
0
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;
    }
}
Ejemplo n.º 6
0
static VALUE
rg_child_anchor(VALUE self)
{
    GtkTextChildAnchor* anchor = gtk_text_iter_get_child_anchor(_SELF(self));
    return anchor ? GOBJ2RVAL(anchor) : Qnil;
}