pidgin/plugins/gestures/stroke-draw.c

Tue, 07 May 2013 05:04:46 -0400

author
Elliott Sales de Andrade <qulogic@pidgin.im>
date
Tue, 07 May 2013 05:04:46 -0400
changeset 33923
0fcc5635daba
parent 33270
a6493d38dc28
child 35541
12bd3807140b
permissions
-rw-r--r--

Rewrite debug window filter in JS.

Note, this does cause a couple regressions, but they are probably not
that big a deal. First, the JS regular expression syntax is slightly
different. Second, the JS regex API lacks a way to reliably determine
the location of matched groups, so we can't highlight just the groups
and must highlight the entire expression.

I suspect that none of our users ever had to use any fancy regex in the
debug window, and that most of our developers didn't even know it could
be done. So I doubt these regressions will cause much pain.

4390
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
1 /*
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
2 GNOME stroke implementation
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
3 Copyright (c) 2000, 2001 Dan Nicolaescu
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
4 See the file COPYING for distribution information.
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
5 */
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
6
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
7 #include "config.h"
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
8
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
9 #include <unistd.h>
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
10 #include <stdlib.h>
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
11 #include <stdio.h>
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
12 #include <glib.h>
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
13 #include <gtk/gtk.h>
20800
76183d18c059 Fix building the gestures plugin.
Daniel Atallah <datallah@pidgin.im>
parents: 20796
diff changeset
14 #include <gdk/gdkx.h>
4390
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
15
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
16 #include "gstroke.h"
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
17 #include "gstroke-internal.h"
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
18
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
19 #include <X11/Xlib.h>
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
20 #include <X11/Xutil.h>
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
21
33170
ce4447562d64 Add checks for old GTK+2 stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33133
diff changeset
22 #include "gtk3compat.h"
ce4447562d64 Add checks for old GTK+2 stuff.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33133
diff changeset
23
4390
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
24 static void gstroke_invisible_window_init (GtkWidget *widget);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
25 /*FIXME: Maybe these should be put in a structure, and not static...*/
4529
7e59b197d10d [gaim-migrate @ 4807]
Christian Hammond <chipx86@chipx86.com>
parents: 4432
diff changeset
26 static Display * gstroke_disp = NULL;
4390
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
27 static Window gstroke_window;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
28 static GC gstroke_gc;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
29 static int mouse_button = 2;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
30 static gboolean draw_strokes = FALSE;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
31
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
32 #define GSTROKE_TIMEOUT_DURATION 10
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
33
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
34 #define GSTROKE_SIGNALS "gstroke_signals"
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
35
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
36 struct gstroke_func_and_data {
9855
7c63808983ad [gaim-migrate @ 10734]
Mark Doliner <markdoliner@pidgin.im>
parents: 9843
diff changeset
37 void (*func)(GtkWidget *, void *);
7c63808983ad [gaim-migrate @ 10734]
Mark Doliner <markdoliner@pidgin.im>
parents: 9843
diff changeset
38 gpointer data;
4390
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
39 };
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
40
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
41
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
42 /*FIXME: maybe it's better to just make 2 static variables, not a
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
43 structure */
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
44 struct mouse_position {
9855
7c63808983ad [gaim-migrate @ 10734]
Mark Doliner <markdoliner@pidgin.im>
parents: 9843
diff changeset
45 struct s_point last_point;
7c63808983ad [gaim-migrate @ 10734]
Mark Doliner <markdoliner@pidgin.im>
parents: 9843
diff changeset
46 gboolean invalid;
4390
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
47 };
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
48
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
49
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
50 static struct mouse_position last_mouse_position;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
51 static guint timer_id;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
52
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
53 static void gstroke_execute (GtkWidget *widget, const gchar *name);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
54
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
55 static void
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
56 record_stroke_segment (GtkWidget *widget)
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
57 {
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
58 gint x, y;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
59 struct gstroke_metrics *metrics;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
60
9843
4daa0a6b2dd0 [gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents: 8555
diff changeset
61 g_return_if_fail( widget != NULL );
4daa0a6b2dd0 [gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents: 8555
diff changeset
62
4390
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
63 gtk_widget_get_pointer (widget, &x, &y);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
64
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
65 if (last_mouse_position.invalid)
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
66 last_mouse_position.invalid = FALSE;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
67 else if (gstroke_draw_strokes())
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
68 {
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
69 #if 1
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
70 XDrawLine (gstroke_disp, gstroke_window, gstroke_gc,
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
71 last_mouse_position.last_point.x,
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
72 last_mouse_position.last_point.y,
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
73 x, y);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
74 /* XFlush (gstroke_disp); */
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
75 #else
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
76 /* FIXME: this does not work. It will only work if we create a
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
77 corresponding GDK window for stroke_window and draw on
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
78 that... */
30010
2b3e5bbd0492 Prepare Pidgin plugins for GTK+3.0. They're almost GSeal-compliant, except
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 20800
diff changeset
79 gdk_draw_line (gtk_widget_get_window(widget),
2b3e5bbd0492 Prepare Pidgin plugins for GTK+3.0. They're almost GSeal-compliant, except
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 20800
diff changeset
80 widget->style->fg_gc[GTK_STATE_NORMAL],
4390
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
81 last_mouse_position.last_point.x,
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
82 last_mouse_position.last_point.y,
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
83 x,
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
84 y);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
85 #endif
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
86 }
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
87
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
88 if (last_mouse_position.last_point.x != x
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
89 || last_mouse_position.last_point.y != y)
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
90 {
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
91 last_mouse_position.last_point.x = x;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
92 last_mouse_position.last_point.y = y;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
93 metrics = (struct gstroke_metrics *)g_object_get_data(G_OBJECT(widget),
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
94 GSTROKE_METRICS);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
95 _gstroke_record (x, y, metrics);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
96 }
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
97 }
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
98
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
99 static gint
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
100 gstroke_timeout (gpointer data)
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
101 {
9855
7c63808983ad [gaim-migrate @ 10734]
Mark Doliner <markdoliner@pidgin.im>
parents: 9843
diff changeset
102 GtkWidget *widget;
7c63808983ad [gaim-migrate @ 10734]
Mark Doliner <markdoliner@pidgin.im>
parents: 9843
diff changeset
103
7c63808983ad [gaim-migrate @ 10734]
Mark Doliner <markdoliner@pidgin.im>
parents: 9843
diff changeset
104 g_return_val_if_fail(data != NULL, FALSE);
4390
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
105
9855
7c63808983ad [gaim-migrate @ 10734]
Mark Doliner <markdoliner@pidgin.im>
parents: 9843
diff changeset
106 widget = GTK_WIDGET (data);
7c63808983ad [gaim-migrate @ 10734]
Mark Doliner <markdoliner@pidgin.im>
parents: 9843
diff changeset
107 record_stroke_segment (widget);
7c63808983ad [gaim-migrate @ 10734]
Mark Doliner <markdoliner@pidgin.im>
parents: 9843
diff changeset
108
7c63808983ad [gaim-migrate @ 10734]
Mark Doliner <markdoliner@pidgin.im>
parents: 9843
diff changeset
109 return TRUE;
4390
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
110 }
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
111
31294
73607ab89c6f Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents: 30010
diff changeset
112 static void gstroke_cancel(GdkEvent *event)
9843
4daa0a6b2dd0 [gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents: 8555
diff changeset
113 {
4daa0a6b2dd0 [gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents: 8555
diff changeset
114 last_mouse_position.invalid = TRUE;
4daa0a6b2dd0 [gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents: 8555
diff changeset
115
4daa0a6b2dd0 [gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents: 8555
diff changeset
116 if (timer_id > 0)
4daa0a6b2dd0 [gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents: 8555
diff changeset
117 g_source_remove (timer_id);
4daa0a6b2dd0 [gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents: 8555
diff changeset
118
4daa0a6b2dd0 [gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents: 8555
diff changeset
119 timer_id = 0;
4daa0a6b2dd0 [gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents: 8555
diff changeset
120
4daa0a6b2dd0 [gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents: 8555
diff changeset
121 if( event != NULL )
33270
a6493d38dc28 Use GdkDevice instead of keyboard and pointer grabs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33170
diff changeset
122 #if GTK_CHECK_VERSION(3,0,0)
a6493d38dc28 Use GdkDevice instead of keyboard and pointer grabs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33170
diff changeset
123 gdk_device_ungrab(gdk_event_get_device(event), event->button.time);
a6493d38dc28 Use GdkDevice instead of keyboard and pointer grabs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33170
diff changeset
124 #else
9843
4daa0a6b2dd0 [gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents: 8555
diff changeset
125 gdk_pointer_ungrab (event->button.time);
33270
a6493d38dc28 Use GdkDevice instead of keyboard and pointer grabs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33170
diff changeset
126 #endif
9843
4daa0a6b2dd0 [gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents: 8555
diff changeset
127
4daa0a6b2dd0 [gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents: 8555
diff changeset
128 if (gstroke_draw_strokes() && gstroke_disp != NULL) {
4daa0a6b2dd0 [gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents: 8555
diff changeset
129 /* get rid of the invisible stroke window */
4daa0a6b2dd0 [gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents: 8555
diff changeset
130 XUnmapWindow (gstroke_disp, gstroke_window);
4daa0a6b2dd0 [gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents: 8555
diff changeset
131 XFlush (gstroke_disp);
4daa0a6b2dd0 [gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents: 8555
diff changeset
132 }
4daa0a6b2dd0 [gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents: 8555
diff changeset
133
4daa0a6b2dd0 [gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents: 8555
diff changeset
134 }
4daa0a6b2dd0 [gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents: 8555
diff changeset
135
4390
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
136 static gint
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
137 process_event (GtkWidget *widget, GdkEvent *event, gpointer data G_GNUC_UNUSED)
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
138 {
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
139 static GtkWidget *original_widget = NULL;
5861
9311ed5b8492 [gaim-migrate @ 6292]
Christian Hammond <chipx86@chipx86.com>
parents: 5227
diff changeset
140 static GdkCursor *cursor = NULL;
9311ed5b8492 [gaim-migrate @ 6292]
Christian Hammond <chipx86@chipx86.com>
parents: 5227
diff changeset
141
4390
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
142 switch (event->type) {
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
143 case GDK_BUTTON_PRESS:
9843
4daa0a6b2dd0 [gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents: 8555
diff changeset
144 if (event->button.button != gstroke_get_mouse_button()) {
4daa0a6b2dd0 [gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents: 8555
diff changeset
145 /* 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
146 * clicked after the middle button is clicked (but possibly
4daa0a6b2dd0 [gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents: 8555
diff changeset
147 * not released)
4daa0a6b2dd0 [gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents: 8555
diff changeset
148 */
31294
73607ab89c6f Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents: 30010
diff changeset
149 gstroke_cancel(event);
9843
4daa0a6b2dd0 [gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents: 8555
diff changeset
150 original_widget = NULL;
4daa0a6b2dd0 [gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents: 8555
diff changeset
151 break;
4daa0a6b2dd0 [gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents: 8555
diff changeset
152 }
4390
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
153
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
154 original_widget = widget; /* remeber the widget where
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
155 the stroke started */
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
156
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
157 gstroke_invisible_window_init (widget);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
158
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
159 record_stroke_segment (widget);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
160
5861
9311ed5b8492 [gaim-migrate @ 6292]
Christian Hammond <chipx86@chipx86.com>
parents: 5227
diff changeset
161 if (cursor == NULL)
9311ed5b8492 [gaim-migrate @ 6292]
Christian Hammond <chipx86@chipx86.com>
parents: 5227
diff changeset
162 cursor = gdk_cursor_new(GDK_PENCIL);
9311ed5b8492 [gaim-migrate @ 6292]
Christian Hammond <chipx86@chipx86.com>
parents: 5227
diff changeset
163
33270
a6493d38dc28 Use GdkDevice instead of keyboard and pointer grabs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33170
diff changeset
164 #if GTK_CHECK_VERSION(3,0,0)
a6493d38dc28 Use GdkDevice instead of keyboard and pointer grabs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33170
diff changeset
165 gdk_device_grab(gdk_event_get_device(event),
a6493d38dc28 Use GdkDevice instead of keyboard and pointer grabs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33170
diff changeset
166 gtk_widget_get_window(widget), GDK_OWNERSHIP_WINDOW,
a6493d38dc28 Use GdkDevice instead of keyboard and pointer grabs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33170
diff changeset
167 FALSE, GDK_BUTTON_RELEASE_MASK, cursor,
a6493d38dc28 Use GdkDevice instead of keyboard and pointer grabs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33170
diff changeset
168 event->button.time);
a6493d38dc28 Use GdkDevice instead of keyboard and pointer grabs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33170
diff changeset
169 #else
30010
2b3e5bbd0492 Prepare Pidgin plugins for GTK+3.0. They're almost GSeal-compliant, except
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 20800
diff changeset
170 gdk_pointer_grab (gtk_widget_get_window(widget), FALSE,
5861
9311ed5b8492 [gaim-migrate @ 6292]
Christian Hammond <chipx86@chipx86.com>
parents: 5227
diff changeset
171 GDK_BUTTON_RELEASE_MASK, NULL, cursor,
4390
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
172 event->button.time);
33270
a6493d38dc28 Use GdkDevice instead of keyboard and pointer grabs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33170
diff changeset
173 #endif
8555
0f6f88300b00 [gaim-migrate @ 9298]
Nathan Walp <nwalp@pidgin.im>
parents: 7631
diff changeset
174 timer_id = g_timeout_add (GSTROKE_TIMEOUT_DURATION,
4390
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
175 gstroke_timeout, widget);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
176 return TRUE;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
177
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
178 case GDK_BUTTON_RELEASE:
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
179 if ((event->button.button != gstroke_get_mouse_button())
4399
c021f4365b91 [gaim-migrate @ 4668]
Christian Hammond <chipx86@chipx86.com>
parents: 4390
diff changeset
180 || (original_widget == NULL)) {
c021f4365b91 [gaim-migrate @ 4668]
Christian Hammond <chipx86@chipx86.com>
parents: 4390
diff changeset
181
9843
4daa0a6b2dd0 [gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents: 8555
diff changeset
182 /* 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
183 /* We'll just cancel the gesture instead. */
4daa0a6b2dd0 [gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents: 8555
diff changeset
184 gstroke_cancel(event);
4daa0a6b2dd0 [gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents: 8555
diff changeset
185 original_widget = NULL;
4daa0a6b2dd0 [gaim-migrate @ 10721]
Dave West <kat@users.sourceforge.net>
parents: 8555
diff changeset
186 break;
4399
c021f4365b91 [gaim-migrate @ 4668]
Christian Hammond <chipx86@chipx86.com>
parents: 4390
diff changeset
187 }
4390
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
188
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
189 last_mouse_position.invalid = TRUE;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
190 original_widget = NULL;
8555
0f6f88300b00 [gaim-migrate @ 9298]
Nathan Walp <nwalp@pidgin.im>
parents: 7631
diff changeset
191 g_source_remove (timer_id);
33270
a6493d38dc28 Use GdkDevice instead of keyboard and pointer grabs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33170
diff changeset
192 #if GTK_CHECK_VERSION(3,0,0)
a6493d38dc28 Use GdkDevice instead of keyboard and pointer grabs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33170
diff changeset
193 gdk_device_ungrab(gdk_event_get_device(event), event->button.time);
a6493d38dc28 Use GdkDevice instead of keyboard and pointer grabs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33170
diff changeset
194 #else
4390
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
195 gdk_pointer_ungrab (event->button.time);
33270
a6493d38dc28 Use GdkDevice instead of keyboard and pointer grabs.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 33170
diff changeset
196 #endif
4390
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
197 timer_id = 0;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
198
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
199 {
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
200 char result[GSTROKE_MAX_SEQUENCE];
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
201 struct gstroke_metrics *metrics;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
202
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
203 metrics = (struct gstroke_metrics *)g_object_get_data(G_OBJECT (widget),
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
204 GSTROKE_METRICS);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
205 if (gstroke_draw_strokes()) {
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
206 /* get rid of the invisible stroke window */
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
207 XUnmapWindow (gstroke_disp, gstroke_window);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
208 XFlush (gstroke_disp);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
209 }
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
210
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
211 _gstroke_canonical (result, metrics);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
212 gstroke_execute (widget, result);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
213 }
12204
77be85a65fe8 [gaim-migrate @ 14506]
Richard Laager <rlaager@pidgin.im>
parents: 10814
diff changeset
214 return FALSE;
77be85a65fe8 [gaim-migrate @ 14506]
Richard Laager <rlaager@pidgin.im>
parents: 10814
diff changeset
215
4390
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
216 default:
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
217 break;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
218 }
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
219
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
220 return FALSE;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
221 }
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
222
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
223 void
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
224 gstroke_set_draw_strokes(gboolean draw)
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
225 {
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
226 draw_strokes = draw;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
227 }
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
228
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
229 gboolean
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
230 gstroke_draw_strokes(void)
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
231 {
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
232 return draw_strokes;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
233 }
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
234
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
235 void
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
236 gstroke_set_mouse_button(gint button)
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
237 {
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
238 mouse_button = button;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
239 }
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
240
7631
0e9e516bb6c3 [gaim-migrate @ 8255]
Nathan Walp <nwalp@pidgin.im>
parents: 5861
diff changeset
241 guint
4390
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
242 gstroke_get_mouse_button(void)
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
243 {
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
244 return mouse_button;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
245 }
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
246
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
247 void
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
248 gstroke_enable (GtkWidget *widget)
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
249 {
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
250 struct gstroke_metrics*
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
251 metrics = (struct gstroke_metrics *)g_object_get_data(G_OBJECT(widget),
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
252 GSTROKE_METRICS);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
253 if (metrics == NULL)
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
254 {
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
255 metrics = (struct gstroke_metrics *)g_malloc (sizeof
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
256 (struct gstroke_metrics));
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
257 metrics->pointList = NULL;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
258 metrics->min_x = 10000;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
259 metrics->min_y = 10000;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
260 metrics->max_x = 0;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
261 metrics->max_y = 0;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
262 metrics->point_count = 0;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
263
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
264 g_object_set_data(G_OBJECT(widget), GSTROKE_METRICS, metrics);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
265
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
266 g_signal_connect(G_OBJECT(widget), "event",
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
267 G_CALLBACK(process_event), NULL);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
268 }
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
269 else
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
270 _gstroke_init (metrics);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
271
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
272 last_mouse_position.invalid = TRUE;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
273 }
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
274
12667
1677da671689 [gaim-migrate @ 15010]
Richard Laager <rlaager@pidgin.im>
parents: 12204
diff changeset
275 void
1677da671689 [gaim-migrate @ 15010]
Richard Laager <rlaager@pidgin.im>
parents: 12204
diff changeset
276 gstroke_disable(GtkWidget *widget)
1677da671689 [gaim-migrate @ 15010]
Richard Laager <rlaager@pidgin.im>
parents: 12204
diff changeset
277 {
1677da671689 [gaim-migrate @ 15010]
Richard Laager <rlaager@pidgin.im>
parents: 12204
diff changeset
278 g_signal_handlers_disconnect_by_func(G_OBJECT(widget), G_CALLBACK(process_event), NULL);
1677da671689 [gaim-migrate @ 15010]
Richard Laager <rlaager@pidgin.im>
parents: 12204
diff changeset
279 }
1677da671689 [gaim-migrate @ 15010]
Richard Laager <rlaager@pidgin.im>
parents: 12204
diff changeset
280
4390
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
281 guint
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
282 gstroke_signal_connect (GtkWidget *widget,
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
283 const gchar *name,
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
284 void (*func)(GtkWidget *widget, void *data),
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
285 gpointer data)
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
286 {
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
287 struct gstroke_func_and_data *func_and_data;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
288 GHashTable *hash_table =
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
289 (GHashTable*)g_object_get_data(G_OBJECT(widget), GSTROKE_SIGNALS);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
290
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
291 if (!hash_table)
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
292 {
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
293 hash_table = g_hash_table_new (g_str_hash, g_str_equal);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
294 g_object_set_data(G_OBJECT(widget), GSTROKE_SIGNALS,
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
295 (gpointer)hash_table);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
296 }
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
297 func_and_data = g_new (struct gstroke_func_and_data, 1);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
298 func_and_data->func = func;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
299 func_and_data->data = data;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
300 g_hash_table_insert (hash_table, (gpointer)name, (gpointer)func_and_data);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
301 return TRUE;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
302 }
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
303
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
304 static void
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
305 gstroke_execute (GtkWidget *widget, const gchar *name)
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
306 {
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
307
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
308 GHashTable *hash_table =
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
309 (GHashTable*)g_object_get_data(G_OBJECT(widget), GSTROKE_SIGNALS);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
310
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
311 #if 0
15884
4de1981757fc sed -ie 's/gaim/purple/g'
Sean Egan <seanegan@pidgin.im>
parents: 15435
diff changeset
312 purple_debug(PURPLE_DEBUG_MISC, "gestures", "gstroke %s\n", name);
4390
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
313 #endif
31294
73607ab89c6f Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents: 30010
diff changeset
314
4390
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
315 if (hash_table)
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
316 {
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
317 struct gstroke_func_and_data *fd =
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
318 (struct gstroke_func_and_data*)g_hash_table_lookup (hash_table, name);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
319 if (fd)
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
320 (*fd->func)(widget, fd->data);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
321 }
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
322 }
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
323
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
324 void
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
325 gstroke_cleanup (GtkWidget *widget)
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
326 {
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
327 struct gstroke_metrics *metrics;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
328 GHashTable *hash_table =
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
329 (GHashTable*)g_object_get_data(G_OBJECT(widget), GSTROKE_SIGNALS);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
330 if (hash_table)
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
331 /* FIXME: does this delete the elements too? */
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
332 g_hash_table_destroy (hash_table);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
333
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
334 g_object_steal_data(G_OBJECT(widget), GSTROKE_SIGNALS);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
335
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
336 metrics = (struct gstroke_metrics*)g_object_get_data(G_OBJECT(widget),
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
337 GSTROKE_METRICS);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
338 if (metrics)
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
339 g_free (metrics);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
340 g_object_steal_data(G_OBJECT(widget), GSTROKE_METRICS);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
341 }
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
342
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
343
10814
7e17cb56b019 [gaim-migrate @ 12468]
Luke Schierer <lschiere@pidgin.im>
parents: 9855
diff changeset
344 /* This function should be written using GTK+ primitives*/
4390
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
345 static void
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
346 gstroke_invisible_window_init (GtkWidget *widget)
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
347 {
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
348 XSetWindowAttributes w_attr;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
349 XWindowAttributes orig_w_attr;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
350 unsigned long mask, col_border, col_background;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
351 unsigned int border_width;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
352 XSizeHints hints;
30010
2b3e5bbd0492 Prepare Pidgin plugins for GTK+3.0. They're almost GSeal-compliant, except
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 20800
diff changeset
353 Display *disp = GDK_WINDOW_XDISPLAY(gtk_widget_get_window(widget));
33133
9a31f084f259 Fix some merge errors.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32438
diff changeset
354 Window wind = gdk_x11_window_get_xid(gtk_widget_get_window(widget));
4390
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
355 int screen = DefaultScreen (disp);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
356
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
357 if (!gstroke_draw_strokes())
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
358 return;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
359
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
360 gstroke_disp = disp;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
361
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
362 /* X server should save what's underneath */
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
363 XGetWindowAttributes (gstroke_disp, wind, &orig_w_attr);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
364 hints.x = orig_w_attr.x;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
365 hints.y = orig_w_attr.y;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
366 hints.width = orig_w_attr.width;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
367 hints.height = orig_w_attr.height;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
368 mask = CWSaveUnder;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
369 w_attr.save_under = True;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
370
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
371 /* inhibit all the decorations */
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
372 mask |= CWOverrideRedirect;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
373 w_attr.override_redirect = True;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
374
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
375 /* Don't set a background, transparent window */
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
376 mask |= CWBackPixmap;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
377 w_attr.background_pixmap = None;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
378
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
379 /* Default input window look */
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
380 col_background = WhitePixel (gstroke_disp, screen);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
381
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
382 /* no border for the window */
4399
c021f4365b91 [gaim-migrate @ 4668]
Christian Hammond <chipx86@chipx86.com>
parents: 4390
diff changeset
383 #if 0
4390
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
384 border_width = 5;
4399
c021f4365b91 [gaim-migrate @ 4668]
Christian Hammond <chipx86@chipx86.com>
parents: 4390
diff changeset
385 #endif
4390
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
386 border_width = 0;
4399
c021f4365b91 [gaim-migrate @ 4668]
Christian Hammond <chipx86@chipx86.com>
parents: 4390
diff changeset
387
4390
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
388 col_border = BlackPixel (gstroke_disp, screen);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
389
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
390 gstroke_window = XCreateSimpleWindow (gstroke_disp, wind,
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
391 0, 0,
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
392 hints.width - 2 * border_width,
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
393 hints.height - 2 * border_width,
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
394 border_width,
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
395 col_border, col_background);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
396
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
397 gstroke_gc = XCreateGC (gstroke_disp, gstroke_window, 0, NULL);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
398
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
399 XSetFunction (gstroke_disp, gstroke_gc, GXinvert);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
400
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
401 XChangeWindowAttributes (gstroke_disp, gstroke_window, mask, &w_attr);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
402
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
403 XSetLineAttributes (gstroke_disp, gstroke_gc, 2, LineSolid,
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
404 CapButt, JoinMiter);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
405 XMapRaised (gstroke_disp, gstroke_window);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
406
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
407 #if 0
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
408 /*FIXME: is this call really needed? If yes, does it need the real
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
409 argc and argv? */
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
410 hints.flags = PPosition | PSize;
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
411 XSetStandardProperties (gstroke_disp, gstroke_window, "gstroke_test", NULL,
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
412 (Pixmap)NULL, NULL, 0, &hints);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
413
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
414
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
415 /* Receive the close window client message */
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
416 {
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
417 /* FIXME: is this really needed? If yes, something should be done
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
418 with wmdelete...*/
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
419 Atom wmdelete = XInternAtom (gstroke_disp, "WM_DELETE_WINDOW",
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
420 False);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
421 XSetWMProtocols (gstroke_disp, gstroke_window, &wmdelete, True);
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
422 }
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
423 #endif
590cb1708f57 [gaim-migrate @ 4656]
Christian Hammond <chipx86@chipx86.com>
parents:
diff changeset
424 }

mercurial