| 55 static void |
55 static void |
| 56 record_stroke_segment(GtkWidget *widget) |
56 record_stroke_segment(GtkWidget *widget) |
| 57 { |
57 { |
| 58 gint x, y; |
58 gint x, y; |
| 59 struct gstroke_metrics *metrics; |
59 struct gstroke_metrics *metrics; |
| 60 GdkDeviceManager *devmgr; |
60 GdkSeat *seat; |
| 61 GdkDevice *dev; |
61 GdkDevice *dev; |
| 62 |
62 |
| 63 g_return_if_fail(widget != NULL); |
63 g_return_if_fail(widget != NULL); |
| 64 |
64 |
| 65 devmgr = gdk_display_get_device_manager(gtk_widget_get_display(widget)); |
65 seat = gdk_display_get_default_seat(gtk_widget_get_display(widget)); |
| 66 dev = gdk_device_manager_get_client_pointer(devmgr); |
66 dev = gdk_seat_get_pointer(seat); |
| 67 gdk_window_get_device_position(gtk_widget_get_window(widget), |
67 gdk_window_get_device_position(gtk_widget_get_window(widget), |
| 68 dev, &x, &y, NULL); |
68 dev, &x, &y, NULL); |
| 69 |
69 |
| 70 if (last_mouse_position.invalid) |
70 if (last_mouse_position.invalid) |
| 71 last_mouse_position.invalid = FALSE; |
71 last_mouse_position.invalid = FALSE; |
| 116 if (timer_id > 0) |
116 if (timer_id > 0) |
| 117 g_source_remove (timer_id); |
117 g_source_remove (timer_id); |
| 118 |
118 |
| 119 timer_id = 0; |
119 timer_id = 0; |
| 120 |
120 |
| 121 if( event != NULL ) |
121 if (event != NULL) { |
| 122 gdk_device_ungrab(gdk_event_get_device(event), event->button.time); |
122 gdk_seat_ungrab(gdk_event_get_seat(event)); |
| |
123 } |
| 123 |
124 |
| 124 if (gstroke_draw_strokes() && gstroke_disp != NULL) { |
125 if (gstroke_draw_strokes() && gstroke_disp != NULL) { |
| 125 /* get rid of the invisible stroke window */ |
126 /* get rid of the invisible stroke window */ |
| 126 XUnmapWindow (gstroke_disp, gstroke_window); |
127 XUnmapWindow (gstroke_disp, gstroke_window); |
| 127 XFlush (gstroke_disp); |
128 XFlush (gstroke_disp); |
| 157 if (cursor == NULL) { |
158 if (cursor == NULL) { |
| 158 GdkDisplay *display = gtk_widget_get_display(widget); |
159 GdkDisplay *display = gtk_widget_get_display(widget); |
| 159 cursor = gdk_cursor_new_for_display(display, GDK_PENCIL); |
160 cursor = gdk_cursor_new_for_display(display, GDK_PENCIL); |
| 160 } |
161 } |
| 161 |
162 |
| 162 gdk_device_grab(gdk_event_get_device(event), |
163 gdk_seat_grab(gdk_event_get_seat(event), gtk_widget_get_window(widget), |
| 163 gtk_widget_get_window(widget), GDK_OWNERSHIP_WINDOW, |
164 GDK_SEAT_CAPABILITY_ALL_POINTING, FALSE, cursor, event, |
| 164 FALSE, GDK_BUTTON_RELEASE_MASK, cursor, |
165 NULL, NULL); |
| 165 event->button.time); |
|
| 166 timer_id = g_timeout_add (GSTROKE_TIMEOUT_DURATION, |
166 timer_id = g_timeout_add (GSTROKE_TIMEOUT_DURATION, |
| 167 gstroke_timeout, widget); |
167 gstroke_timeout, widget); |
| 168 return TRUE; |
168 return TRUE; |
| 169 |
169 |
| 170 case GDK_BUTTON_RELEASE: |
170 case GDK_BUTTON_RELEASE: |
| 179 } |
179 } |
| 180 |
180 |
| 181 last_mouse_position.invalid = TRUE; |
181 last_mouse_position.invalid = TRUE; |
| 182 original_widget = NULL; |
182 original_widget = NULL; |
| 183 g_source_remove (timer_id); |
183 g_source_remove (timer_id); |
| 184 gdk_device_ungrab(gdk_event_get_device(event), event->button.time); |
184 gdk_seat_ungrab(gdk_event_get_seat(event)); |
| 185 timer_id = 0; |
185 timer_id = 0; |
| 186 |
186 |
| 187 { |
187 { |
| 188 char result[GSTROKE_MAX_SEQUENCE]; |
188 char result[GSTROKE_MAX_SEQUENCE]; |
| 189 struct gstroke_metrics *metrics; |
189 struct gstroke_metrics *metrics; |