Ejemplo n.º 1
0
static gboolean
chat_text_view_event_cb (EmpathyChatTextView *view,
			 GdkEventMotion      *event,
			 GtkTextTag          *tag)
{
	static GdkCursor  *hand = NULL;
	static GdkCursor  *beam = NULL;
	GtkTextWindowType  type;
	GtkTextIter        iter;
	GdkWindow         *win;
	gint               x, y, buf_x, buf_y;
	
	type = gtk_text_view_get_window_type (GTK_TEXT_VIEW (view),
					      event->window);
	
	if (type != GTK_TEXT_WINDOW_TEXT) {
		return FALSE;
	}
	
	/* Get where the pointer really is. */
	win = gtk_text_view_get_window (GTK_TEXT_VIEW (view), type);
	if (!win) {
		return FALSE;
	}
	
	gdk_window_get_pointer (win, &x, &y, NULL);
	
	/* Get the iter where the cursor is at */
	gtk_text_view_window_to_buffer_coords (GTK_TEXT_VIEW (view), type,
					       x, y,
					       &buf_x, &buf_y);
	
	gtk_text_view_get_iter_at_location (GTK_TEXT_VIEW (view),
					    &iter,
					    buf_x, buf_y);
	
	if (gtk_text_iter_has_tag (&iter, tag)) {
		if (!hand) {
			hand = gdk_cursor_new (GDK_HAND2);
			beam = gdk_cursor_new (GDK_XTERM);
		}
		gdk_window_set_cursor (win, hand);
	} else {
		if (!beam) {
			beam = gdk_cursor_new (GDK_XTERM);
		}
		gdk_window_set_cursor (win, beam);
	}
	
	return FALSE;
}
Ejemplo n.º 2
0
static gboolean cb_button_press_event(GtkWidget *view, GdkEventButton *event)
{
	GtkTextIter iter, start, end;
	gint x, y;
	
	GtkTextBuffer *buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(view));
	
	if ((event->button) == 3 && (event->type == GDK_BUTTON_PRESS)) {
		gtk_text_view_window_to_buffer_coords(GTK_TEXT_VIEW(view),
			gtk_text_view_get_window_type(GTK_TEXT_VIEW(view), event->window),
			(gint)event->x, (gint)event->y, &x, &y);
		gtk_text_view_get_iter_at_location(GTK_TEXT_VIEW(view), &iter, x, y);
		gtk_text_buffer_get_selection_bounds(buffer, &start, &end);
		if (!gtk_text_iter_in_range(&iter, &start, &end))
			gtk_text_buffer_place_cursor(buffer, &iter);
	}
	
	return FALSE;
}
Ejemplo n.º 3
0
static VALUE
textview_get_window_type(VALUE self, VALUE gdkwin)
{
    return GENUM2RVAL(gtk_text_view_get_window_type(_SELF(self), RVAL2GOBJ(gdkwin)), 
                      GTK_TYPE_TEXT_WINDOW_TYPE);
}