2 * Copyright (C) 2009 Nokia Corporation, all rights reserved.
6 #include "modest-wp-text-view.h"
9 #define MODEST_WP_TEXT_VIEW_DRAG_THRESHOLD 16.0
11 G_DEFINE_TYPE (ModestWpTextView, modest_wp_text_view, WP_TYPE_TEXT_VIEW);
13 #define MODEST_WP_TEXT_VIEW_GET_PRIVATE(obj) \
14 (G_TYPE_INSTANCE_GET_PRIVATE ((obj), \
15 MODEST_TYPE_WP_TEXT_VIEW, ModestWpTextViewPrivate));
17 typedef struct _ModestWpTextViewPrivate ModestWpTextViewPrivate;
19 struct _ModestWpTextViewPrivate
21 gdouble x; /* tap x position */
22 gdouble y; /* tap y position */
26 modest_wp_text_view_new (void)
28 GtkWidget *entry = g_object_new (MODEST_TYPE_WP_TEXT_VIEW, NULL);
34 modest_wp_text_view_button_press_event (GtkWidget *widget,
35 GdkEventButton *event)
37 ModestWpTextViewPrivate *priv = MODEST_WP_TEXT_VIEW_GET_PRIVATE (widget);
39 if (GTK_TEXT_VIEW (widget)->editable &&
40 hildon_gtk_im_context_filter_event (GTK_TEXT_VIEW (widget)->im_context, (GdkEvent*)event)) {
41 GTK_TEXT_VIEW (widget)->need_im_reset = TRUE;
45 if (event->button == 1 && event->type == GDK_BUTTON_PRESS) {
56 modest_wp_text_view_button_release_event (GtkWidget *widget,
57 GdkEventButton *event)
59 GtkTextView *text_view = GTK_TEXT_VIEW (widget);
60 ModestWpTextViewPrivate *priv = MODEST_WP_TEXT_VIEW_GET_PRIVATE (widget);
64 if (text_view->editable &&
65 hildon_gtk_im_context_filter_event (text_view->im_context, (GdkEvent*)event)) {
66 text_view->need_im_reset = TRUE;
70 if (event->button == 1 && event->type == GDK_BUTTON_RELEASE) {
71 if (fabs (priv->x - event->x) < MODEST_WP_TEXT_VIEW_DRAG_THRESHOLD &&
72 fabs (priv->y - event->y) < MODEST_WP_TEXT_VIEW_DRAG_THRESHOLD) {
73 GtkTextWindowType window_type;
74 GtkTextBuffer *buffer;
76 window_type = gtk_text_view_get_window_type (text_view, event->window);
77 gtk_text_view_window_to_buffer_coords (text_view,
81 gtk_text_view_get_iter_at_location (text_view, &iter, x, y);
82 buffer = gtk_text_view_get_buffer (text_view);
83 if (gtk_text_buffer_get_char_count (buffer))
84 gtk_text_buffer_place_cursor (buffer, &iter);
86 gtk_widget_grab_focus (GTK_WIDGET (text_view));
95 modest_wp_text_view_finalize (GObject *object)
97 if (G_OBJECT_CLASS (modest_wp_text_view_parent_class)->finalize)
98 G_OBJECT_CLASS (modest_wp_text_view_parent_class)->finalize (object);
102 modest_wp_text_view_class_init (ModestWpTextViewClass *klass)
104 GObjectClass *gobject_class = (GObjectClass *)klass;
105 GtkWidgetClass *widget_class = (GtkWidgetClass *)klass;
107 gobject_class->finalize = modest_wp_text_view_finalize;
108 widget_class->motion_notify_event = NULL;
109 widget_class->button_press_event = modest_wp_text_view_button_press_event;
110 widget_class->button_release_event = modest_wp_text_view_button_release_event;
112 g_type_class_add_private (klass, sizeof (ModestWpTextViewPrivate));
116 modest_wp_text_view_init (ModestWpTextView *self)