Tue, 11 Apr 2023 00:17:15 -0500
Use gtk_widget_set_visible for everything
gtk_widget_show and gtk_widget_hide are deprecated in GTK 4.10. However,
gtk_widget_set_visible has been around forever so we just need to move to that.
I didn't test all of these and there are probably some that can still be
removed, but most of those are in code that is going to get refreshed in the
future so I didn't bother for now.
Testing Done:
I tested the join chat, add chat, and add buddy dialogs, as well as the contact added notification.
Reviewed at https://reviews.imfreedom.org/r/2430/
| 4390 | 1 | /* |
| 2 | GNOME stroke implementation | |
| 3 | Copyright (c) 2000, 2001 Dan Nicolaescu | |
| 4 | See the file COPYING for distribution information. | |
| 5 | */ | |
| 6 | ||
| 7 | #include "config.h" | |
| 8 | ||
|
40669
48dfed6f4f1f
Fix Windows builds and tests
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40497
diff
changeset
|
9 | #ifdef HAVE_UNISTD_H |
| 4390 | 10 | #include <unistd.h> |
|
40669
48dfed6f4f1f
Fix Windows builds and tests
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
40497
diff
changeset
|
11 | #endif |
| 4390 | 12 | #include <stdlib.h> |
| 13 | #include <stdio.h> | |
| 14 | #include <glib.h> | |
| 15 | #include <gtk/gtk.h> | |
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
16 | #include <gdk/gdk.h> |
| 4390 | 17 | |
| 18 | #include "gstroke.h" | |
| 19 | #include "gstroke-internal.h" | |
| 20 | ||
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
21 | static gboolean gstroke_draw_cb(GtkWidget *widget, cairo_t *cr, |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
22 | gpointer user_data); |
| 4390 | 23 | /*FIXME: Maybe these should be put in a structure, and not static...*/ |
| 24 | static int mouse_button = 2; | |
| 25 | static gboolean draw_strokes = FALSE; | |
| 26 | ||
| 27 | #define GSTROKE_TIMEOUT_DURATION 10 | |
| 28 | ||
| 29 | #define GSTROKE_SIGNALS "gstroke_signals" | |
| 30 | ||
| 31 | struct gstroke_func_and_data { | |
|
9855
7c63808983ad
[gaim-migrate @ 10734]
Mark Doliner <markdoliner@pidgin.im>
parents:
9843
diff
changeset
|
32 | void (*func)(GtkWidget *, void *); |
|
7c63808983ad
[gaim-migrate @ 10734]
Mark Doliner <markdoliner@pidgin.im>
parents:
9843
diff
changeset
|
33 | gpointer data; |
| 4390 | 34 | }; |
| 35 | ||
| 36 | ||
| 37 | /*FIXME: maybe it's better to just make 2 static variables, not a | |
| 38 | structure */ | |
| 39 | struct mouse_position { | |
|
9855
7c63808983ad
[gaim-migrate @ 10734]
Mark Doliner <markdoliner@pidgin.im>
parents:
9843
diff
changeset
|
40 | struct s_point last_point; |
|
7c63808983ad
[gaim-migrate @ 10734]
Mark Doliner <markdoliner@pidgin.im>
parents:
9843
diff
changeset
|
41 | gboolean invalid; |
| 4390 | 42 | }; |
| 43 | ||
| 44 | ||
| 45 | static struct mouse_position last_mouse_position; | |
| 46 | static guint timer_id; | |
| 47 | ||
| 48 | static void gstroke_execute (GtkWidget *widget, const gchar *name); | |
| 49 | ||
| 50 | static void | |
|
35541
12bd3807140b
Fix some GTK 3.8 deprecation warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
33270
diff
changeset
|
51 | record_stroke_segment(GtkWidget *widget) |
| 4390 | 52 | { |
|
35541
12bd3807140b
Fix some GTK 3.8 deprecation warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
33270
diff
changeset
|
53 | gint x, y; |
|
12bd3807140b
Fix some GTK 3.8 deprecation warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
33270
diff
changeset
|
54 | struct gstroke_metrics *metrics; |
|
39945
a463a1d03965
Use new GdkSeat API instead of deprecated GdkDevice.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
37997
diff
changeset
|
55 | GdkSeat *seat; |
|
35541
12bd3807140b
Fix some GTK 3.8 deprecation warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
33270
diff
changeset
|
56 | GdkDevice *dev; |
| 4390 | 57 | |
|
35541
12bd3807140b
Fix some GTK 3.8 deprecation warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
33270
diff
changeset
|
58 | g_return_if_fail(widget != NULL); |
|
12bd3807140b
Fix some GTK 3.8 deprecation warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
33270
diff
changeset
|
59 | |
|
39945
a463a1d03965
Use new GdkSeat API instead of deprecated GdkDevice.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
37997
diff
changeset
|
60 | seat = gdk_display_get_default_seat(gtk_widget_get_display(widget)); |
|
a463a1d03965
Use new GdkSeat API instead of deprecated GdkDevice.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
37997
diff
changeset
|
61 | dev = gdk_seat_get_pointer(seat); |
|
35541
12bd3807140b
Fix some GTK 3.8 deprecation warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
33270
diff
changeset
|
62 | gdk_window_get_device_position(gtk_widget_get_window(widget), |
|
12bd3807140b
Fix some GTK 3.8 deprecation warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
33270
diff
changeset
|
63 | dev, &x, &y, NULL); |
| 4390 | 64 | |
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
65 | last_mouse_position.invalid = FALSE; |
|
35541
12bd3807140b
Fix some GTK 3.8 deprecation warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
33270
diff
changeset
|
66 | |
|
12bd3807140b
Fix some GTK 3.8 deprecation warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
33270
diff
changeset
|
67 | if (last_mouse_position.last_point.x != x || |
|
12bd3807140b
Fix some GTK 3.8 deprecation warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
33270
diff
changeset
|
68 | last_mouse_position.last_point.y != y) |
|
12bd3807140b
Fix some GTK 3.8 deprecation warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
33270
diff
changeset
|
69 | { |
|
12bd3807140b
Fix some GTK 3.8 deprecation warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
33270
diff
changeset
|
70 | last_mouse_position.last_point.x = x; |
|
12bd3807140b
Fix some GTK 3.8 deprecation warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
33270
diff
changeset
|
71 | last_mouse_position.last_point.y = y; |
|
12bd3807140b
Fix some GTK 3.8 deprecation warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
33270
diff
changeset
|
72 | metrics = g_object_get_data(G_OBJECT(widget), GSTROKE_METRICS); |
|
12bd3807140b
Fix some GTK 3.8 deprecation warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
33270
diff
changeset
|
73 | _gstroke_record (x, y, metrics); |
|
12bd3807140b
Fix some GTK 3.8 deprecation warnings
Tomasz Wasilczyk <twasilczyk@pidgin.im>
parents:
33270
diff
changeset
|
74 | } |
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
75 | |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
76 | if (gstroke_draw_strokes()) { |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
77 | gtk_widget_queue_draw(widget); |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
78 | } |
| 4390 | 79 | } |
| 80 | ||
| 81 | static gint | |
| 82 | gstroke_timeout (gpointer data) | |
| 83 | { | |
|
9855
7c63808983ad
[gaim-migrate @ 10734]
Mark Doliner <markdoliner@pidgin.im>
parents:
9843
diff
changeset
|
84 | GtkWidget *widget; |
|
7c63808983ad
[gaim-migrate @ 10734]
Mark Doliner <markdoliner@pidgin.im>
parents:
9843
diff
changeset
|
85 | |
|
7c63808983ad
[gaim-migrate @ 10734]
Mark Doliner <markdoliner@pidgin.im>
parents:
9843
diff
changeset
|
86 | g_return_val_if_fail(data != NULL, FALSE); |
| 4390 | 87 | |
|
9855
7c63808983ad
[gaim-migrate @ 10734]
Mark Doliner <markdoliner@pidgin.im>
parents:
9843
diff
changeset
|
88 | widget = GTK_WIDGET (data); |
|
7c63808983ad
[gaim-migrate @ 10734]
Mark Doliner <markdoliner@pidgin.im>
parents:
9843
diff
changeset
|
89 | record_stroke_segment (widget); |
|
7c63808983ad
[gaim-migrate @ 10734]
Mark Doliner <markdoliner@pidgin.im>
parents:
9843
diff
changeset
|
90 | |
|
7c63808983ad
[gaim-migrate @ 10734]
Mark Doliner <markdoliner@pidgin.im>
parents:
9843
diff
changeset
|
91 | return TRUE; |
| 4390 | 92 | } |
| 93 | ||
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
94 | static void |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
95 | gstroke_cancel(GtkWidget *widget, GdkEvent *event) |
|
9843
4daa0a6b2dd0
[gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents:
8555
diff
changeset
|
96 | { |
|
4daa0a6b2dd0
[gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents:
8555
diff
changeset
|
97 | last_mouse_position.invalid = TRUE; |
|
4daa0a6b2dd0
[gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents:
8555
diff
changeset
|
98 | |
|
42175
4185b4043214
Use g_clear_handle_id everywhere
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42172
diff
changeset
|
99 | g_clear_handle_id(&timer_id, g_source_remove); |
|
9843
4daa0a6b2dd0
[gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents:
8555
diff
changeset
|
100 | |
|
39945
a463a1d03965
Use new GdkSeat API instead of deprecated GdkDevice.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
37997
diff
changeset
|
101 | if (event != NULL) { |
|
a463a1d03965
Use new GdkSeat API instead of deprecated GdkDevice.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
37997
diff
changeset
|
102 | gdk_seat_ungrab(gdk_event_get_seat(event)); |
|
a463a1d03965
Use new GdkSeat API instead of deprecated GdkDevice.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
37997
diff
changeset
|
103 | } |
|
9843
4daa0a6b2dd0
[gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents:
8555
diff
changeset
|
104 | |
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
105 | if (gstroke_draw_strokes()) { |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
106 | gtk_widget_queue_draw(widget); |
|
9843
4daa0a6b2dd0
[gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents:
8555
diff
changeset
|
107 | } |
|
4daa0a6b2dd0
[gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents:
8555
diff
changeset
|
108 | } |
|
4daa0a6b2dd0
[gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents:
8555
diff
changeset
|
109 | |
| 4390 | 110 | static gint |
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
111 | process_event(GtkWidget *widget, GdkEvent *event, gpointer data) |
| 4390 | 112 | { |
| 113 | static GtkWidget *original_widget = NULL; | |
|
5861
9311ed5b8492
[gaim-migrate @ 6292]
Christian Hammond <chipx86@chipx86.com>
parents:
5227
diff
changeset
|
114 | static GdkCursor *cursor = NULL; |
|
9311ed5b8492
[gaim-migrate @ 6292]
Christian Hammond <chipx86@chipx86.com>
parents:
5227
diff
changeset
|
115 | |
| 4390 | 116 | switch (event->type) { |
| 117 | case GDK_BUTTON_PRESS: | |
|
9843
4daa0a6b2dd0
[gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents:
8555
diff
changeset
|
118 | if (event->button.button != gstroke_get_mouse_button()) { |
|
4daa0a6b2dd0
[gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents:
8555
diff
changeset
|
119 | /* Similar to the bug below catch when any other button is |
|
4daa0a6b2dd0
[gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents:
8555
diff
changeset
|
120 | * clicked after the middle button is clicked (but possibly |
|
4daa0a6b2dd0
[gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents:
8555
diff
changeset
|
121 | * not released) |
|
4daa0a6b2dd0
[gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents:
8555
diff
changeset
|
122 | */ |
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
123 | gstroke_cancel(widget, event); |
|
9843
4daa0a6b2dd0
[gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents:
8555
diff
changeset
|
124 | original_widget = NULL; |
|
4daa0a6b2dd0
[gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents:
8555
diff
changeset
|
125 | break; |
|
4daa0a6b2dd0
[gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents:
8555
diff
changeset
|
126 | } |
| 4390 | 127 | |
|
41086
631e6cba8635
Fix typos in Pidgin
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
40765
diff
changeset
|
128 | original_widget = widget; /* remember the widget where |
| 4390 | 129 | the stroke started */ |
| 130 | ||
| 131 | record_stroke_segment (widget); | |
| 132 | ||
|
37997
7b62a2153898
Use gdk_cursor_new_for_display over gdk_cursor_new.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
37424
diff
changeset
|
133 | if (cursor == NULL) { |
|
7b62a2153898
Use gdk_cursor_new_for_display over gdk_cursor_new.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
37424
diff
changeset
|
134 | GdkDisplay *display = gtk_widget_get_display(widget); |
|
7b62a2153898
Use gdk_cursor_new_for_display over gdk_cursor_new.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
37424
diff
changeset
|
135 | cursor = gdk_cursor_new_for_display(display, GDK_PENCIL); |
|
7b62a2153898
Use gdk_cursor_new_for_display over gdk_cursor_new.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
37424
diff
changeset
|
136 | } |
|
5861
9311ed5b8492
[gaim-migrate @ 6292]
Christian Hammond <chipx86@chipx86.com>
parents:
5227
diff
changeset
|
137 | |
|
39945
a463a1d03965
Use new GdkSeat API instead of deprecated GdkDevice.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
37997
diff
changeset
|
138 | gdk_seat_grab(gdk_event_get_seat(event), gtk_widget_get_window(widget), |
|
a463a1d03965
Use new GdkSeat API instead of deprecated GdkDevice.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
37997
diff
changeset
|
139 | GDK_SEAT_CAPABILITY_ALL_POINTING, FALSE, cursor, event, |
|
a463a1d03965
Use new GdkSeat API instead of deprecated GdkDevice.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
37997
diff
changeset
|
140 | NULL, NULL); |
| 8555 | 141 | timer_id = g_timeout_add (GSTROKE_TIMEOUT_DURATION, |
| 4390 | 142 | gstroke_timeout, widget); |
| 143 | return TRUE; | |
| 144 | ||
| 145 | case GDK_BUTTON_RELEASE: | |
| 146 | if ((event->button.button != gstroke_get_mouse_button()) | |
|
4399
c021f4365b91
[gaim-migrate @ 4668]
Christian Hammond <chipx86@chipx86.com>
parents:
4390
diff
changeset
|
147 | || (original_widget == NULL)) { |
|
c021f4365b91
[gaim-migrate @ 4668]
Christian Hammond <chipx86@chipx86.com>
parents:
4390
diff
changeset
|
148 | |
|
9843
4daa0a6b2dd0
[gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents:
8555
diff
changeset
|
149 | /* Nice bug when you hold down one button and press another. */ |
|
4daa0a6b2dd0
[gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents:
8555
diff
changeset
|
150 | /* We'll just cancel the gesture instead. */ |
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
151 | gstroke_cancel(widget, event); |
|
9843
4daa0a6b2dd0
[gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents:
8555
diff
changeset
|
152 | original_widget = NULL; |
|
4daa0a6b2dd0
[gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents:
8555
diff
changeset
|
153 | break; |
|
4399
c021f4365b91
[gaim-migrate @ 4668]
Christian Hammond <chipx86@chipx86.com>
parents:
4390
diff
changeset
|
154 | } |
| 4390 | 155 | |
| 156 | last_mouse_position.invalid = TRUE; | |
| 157 | original_widget = NULL; | |
|
42175
4185b4043214
Use g_clear_handle_id everywhere
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
42172
diff
changeset
|
158 | g_clear_handle_id(&timer_id, g_source_remove); |
|
39945
a463a1d03965
Use new GdkSeat API instead of deprecated GdkDevice.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents:
37997
diff
changeset
|
159 | gdk_seat_ungrab(gdk_event_get_seat(event)); |
| 4390 | 160 | |
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
161 | { |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
162 | GtkWidget *history = data; |
| 4390 | 163 | char result[GSTROKE_MAX_SEQUENCE]; |
| 164 | struct gstroke_metrics *metrics; | |
| 165 | ||
| 166 | metrics = (struct gstroke_metrics *)g_object_get_data(G_OBJECT (widget), | |
| 167 | GSTROKE_METRICS); | |
| 168 | if (gstroke_draw_strokes()) { | |
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
169 | gtk_widget_queue_draw(widget); |
| 4390 | 170 | } |
| 171 | ||
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
172 | _gstroke_canonical(result, metrics); |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
173 | gstroke_execute(history, result); |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
174 | } |
|
12204
77be85a65fe8
[gaim-migrate @ 14506]
Richard Laager <rlaager@pidgin.im>
parents:
10814
diff
changeset
|
175 | return FALSE; |
|
77be85a65fe8
[gaim-migrate @ 14506]
Richard Laager <rlaager@pidgin.im>
parents:
10814
diff
changeset
|
176 | |
| 4390 | 177 | default: |
| 178 | break; | |
| 179 | } | |
| 180 | ||
| 181 | return FALSE; | |
| 182 | } | |
| 183 | ||
| 184 | void | |
| 185 | gstroke_set_draw_strokes(gboolean draw) | |
| 186 | { | |
| 187 | draw_strokes = draw; | |
| 188 | } | |
| 189 | ||
| 190 | gboolean | |
| 191 | gstroke_draw_strokes(void) | |
| 192 | { | |
| 193 | return draw_strokes; | |
| 194 | } | |
| 195 | ||
| 196 | void | |
| 197 | gstroke_set_mouse_button(gint button) | |
| 198 | { | |
| 199 | mouse_button = button; | |
| 200 | } | |
| 201 | ||
| 7631 | 202 | guint |
| 4390 | 203 | gstroke_get_mouse_button(void) |
| 204 | { | |
| 205 | return mouse_button; | |
| 206 | } | |
| 207 | ||
| 208 | void | |
| 209 | gstroke_enable (GtkWidget *widget) | |
| 210 | { | |
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
211 | GtkWidget *event = gtk_widget_get_parent(widget); |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
212 | struct gstroke_metrics *metrics = NULL; |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
213 | |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
214 | if (GTK_IS_EVENT_BOX(event)) { |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
215 | metrics = (struct gstroke_metrics *)g_object_get_data(G_OBJECT(event), |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
216 | GSTROKE_METRICS); |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
217 | } |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
218 | |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
219 | if (metrics == NULL) { |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
220 | GtkWidget *parent; |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
221 | |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
222 | metrics = g_new0(struct gstroke_metrics, 1); |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
223 | metrics->pointList = NULL; |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
224 | metrics->min_x = 10000; |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
225 | metrics->min_y = 10000; |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
226 | metrics->max_x = 0; |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
227 | metrics->max_y = 0; |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
228 | metrics->point_count = 0; |
| 4390 | 229 | |
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
230 | event = gtk_event_box_new(); |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
231 | gtk_event_box_set_above_child(GTK_EVENT_BOX(event), TRUE); |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
232 | gtk_widget_set_events(event, GDK_BUTTON_PRESS_MASK | |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
233 | GDK_BUTTON_RELEASE_MASK | |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
234 | GDK_BUTTON2_MOTION_MASK); |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
235 | gtk_widget_set_app_paintable(event, TRUE); |
|
42202
2273647d24b0
Use gtk_widget_set_visible for everything
Gary Kramlich <grim@reaperworld.com>
parents:
42175
diff
changeset
|
236 | gtk_widget_set_visible(event, TRUE); |
| 4390 | 237 | |
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
238 | parent = gtk_widget_get_parent(widget); |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
239 | g_object_ref(widget); |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
240 | gtk_container_remove(GTK_CONTAINER(parent), widget); |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
241 | gtk_container_add(GTK_CONTAINER(event), widget); |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
242 | g_object_unref(widget); |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
243 | gtk_container_add(GTK_CONTAINER(parent), event); |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
244 | |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
245 | g_object_set_data(G_OBJECT(event), GSTROKE_METRICS, metrics); |
| 4390 | 246 | |
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
247 | g_signal_connect(G_OBJECT(event), "event", G_CALLBACK(process_event), |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
248 | widget); |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
249 | g_signal_connect_after(G_OBJECT(event), "draw", |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
250 | G_CALLBACK(gstroke_draw_cb), NULL); |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
251 | } else { |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
252 | _gstroke_init(metrics); |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
253 | } |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
254 | |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
255 | last_mouse_position.invalid = TRUE; |
| 4390 | 256 | } |
| 257 | ||
|
12667
1677da671689
[gaim-migrate @ 15010]
Richard Laager <rlaager@pidgin.im>
parents:
12204
diff
changeset
|
258 | void |
|
1677da671689
[gaim-migrate @ 15010]
Richard Laager <rlaager@pidgin.im>
parents:
12204
diff
changeset
|
259 | gstroke_disable(GtkWidget *widget) |
|
1677da671689
[gaim-migrate @ 15010]
Richard Laager <rlaager@pidgin.im>
parents:
12204
diff
changeset
|
260 | { |
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
261 | GtkWidget *event = gtk_widget_get_parent(widget); |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
262 | |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
263 | g_return_if_fail(GTK_IS_EVENT_BOX(event)); |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
264 | |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
265 | g_signal_handlers_disconnect_by_func(G_OBJECT(event), |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
266 | G_CALLBACK(process_event), widget); |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
267 | g_signal_handlers_disconnect_by_func(G_OBJECT(event), |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
268 | G_CALLBACK(gstroke_draw_cb), NULL); |
|
12667
1677da671689
[gaim-migrate @ 15010]
Richard Laager <rlaager@pidgin.im>
parents:
12204
diff
changeset
|
269 | } |
|
1677da671689
[gaim-migrate @ 15010]
Richard Laager <rlaager@pidgin.im>
parents:
12204
diff
changeset
|
270 | |
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
271 | void |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
272 | gstroke_signal_connect(GtkWidget *widget, const gchar *name, |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
273 | void (*func)(GtkWidget *widget, void *data), |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
274 | gpointer data) |
| 4390 | 275 | { |
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
276 | struct gstroke_func_and_data *func_and_data; |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
277 | GHashTable *hash_table = |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
278 | (GHashTable *)g_object_get_data(G_OBJECT(widget), GSTROKE_SIGNALS); |
| 4390 | 279 | |
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
280 | if (!hash_table) { |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
281 | hash_table = |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
282 | g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
283 | g_object_set_data(G_OBJECT(widget), GSTROKE_SIGNALS, hash_table); |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
284 | } |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
285 | |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
286 | func_and_data = g_new0(struct gstroke_func_and_data, 1); |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
287 | func_and_data->func = func; |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
288 | func_and_data->data = data; |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
289 | g_hash_table_insert(hash_table, g_strdup(name), func_and_data); |
| 4390 | 290 | } |
| 291 | ||
| 292 | static void | |
| 293 | gstroke_execute (GtkWidget *widget, const gchar *name) | |
| 294 | { | |
| 295 | ||
| 296 | GHashTable *hash_table = | |
| 297 | (GHashTable*)g_object_get_data(G_OBJECT(widget), GSTROKE_SIGNALS); | |
| 298 | ||
| 299 | #if 0 | |
|
40765
a5381c20e802
Use specific purple_debug_* functions
Arkadiy Illarionov <qarkai@gmail.com>
parents:
40669
diff
changeset
|
300 | purple_debug_misc("gestures", "gstroke %s", name); |
| 4390 | 301 | #endif |
|
31294
73607ab89c6f
Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents:
30010
diff
changeset
|
302 | |
| 4390 | 303 | if (hash_table) |
| 304 | { | |
| 305 | struct gstroke_func_and_data *fd = | |
| 306 | (struct gstroke_func_and_data*)g_hash_table_lookup (hash_table, name); | |
| 307 | if (fd) | |
| 308 | (*fd->func)(widget, fd->data); | |
| 309 | } | |
| 310 | } | |
| 311 | ||
| 312 | void | |
| 313 | gstroke_cleanup (GtkWidget *widget) | |
| 314 | { | |
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
315 | struct gstroke_metrics *metrics; |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
316 | GHashTable *hash_table = (GHashTable *)g_object_steal_data(G_OBJECT(widget), |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
317 | GSTROKE_SIGNALS); |
|
42172
7c2d151b410d
Use g_clear_* helpers where useful
Elliott Sales de Andrade <quantum.analyst@gmail.com>
parents:
41086
diff
changeset
|
318 | g_clear_pointer(&hash_table, g_hash_table_destroy); |
| 4390 | 319 | |
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
320 | metrics = (struct gstroke_metrics *)g_object_steal_data(G_OBJECT(widget), |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
321 | GSTROKE_METRICS); |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
322 | g_free(metrics); |
| 4390 | 323 | } |
| 324 | ||
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
325 | static gboolean |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
326 | gstroke_draw_cb(GtkWidget *widget, cairo_t *cr, |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
327 | G_GNUC_UNUSED gpointer user_data) |
| 4390 | 328 | { |
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
329 | struct gstroke_metrics *metrics = |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
330 | (struct gstroke_metrics *)g_object_get_data(G_OBJECT(widget), |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
331 | GSTROKE_METRICS); |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
332 | GSList *iter = NULL; |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
333 | p_point point; |
| 4390 | 334 | |
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
335 | if (last_mouse_position.invalid) { |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
336 | return FALSE; |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
337 | } |
| 4390 | 338 | |
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
339 | if (!metrics) { |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
340 | return FALSE; |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
341 | } |
| 4390 | 342 | |
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
343 | iter = metrics->pointList; |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
344 | if (!iter) { |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
345 | return FALSE; |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
346 | } |
| 4390 | 347 | |
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
348 | cairo_save(cr); |
| 4390 | 349 | |
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
350 | cairo_set_line_width(cr, 2.0); |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
351 | cairo_set_dash(cr, NULL, 0, 0.0); |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
352 | cairo_set_line_cap(cr, CAIRO_LINE_CAP_BUTT); |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
353 | cairo_set_line_join(cr, CAIRO_LINE_JOIN_MITER); |
| 4390 | 354 | |
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
355 | point = (p_point)iter->data; |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
356 | iter = iter->next; |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
357 | cairo_move_to(cr, point->x, point->y); |
| 4390 | 358 | |
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
359 | while (iter) { |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
360 | point = (p_point)iter->data; |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
361 | iter = iter->next; |
| 4390 | 362 | |
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
363 | cairo_line_to(cr, point->x, point->y); |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
364 | } |
| 4390 | 365 | |
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
366 | cairo_stroke(cr); |
| 4390 | 367 | |
|
40497
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
368 | cairo_restore(cr); |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
369 | |
|
2f45a03838e9
Fix gestures plugin
Elliott S <quantum.analyst@gmail.com>
parents:
40198
diff
changeset
|
370 | return FALSE; |
| 4390 | 371 | } |