Thu, 16 Feb 2006 23:02:56 +0000
[gaim-migrate @ 15669]
There was an attempt to make each Jabber resource have its own conversation
window, which wasn't working, and instead sending outgoing messages to the
wrong resource. Different conversations with each resource breaks the whole
"Send to" one-window-per-person metaphor, so I just changed the behavior to
send messages to whichever resources last messaged you. Perhaps later, when
we're not in a freeze, we can consider an API that allows prpls to populate
the Send To menu themselves, letting you easily switch what resource you're
chatting with in the same window
|
11218
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
1 | #include <assert.h> |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
2 | #include <stdio.h> |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
3 | #include <GL/gl.h> |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
4 | #include <GL/glu.h> |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
5 | #include "cc_gtk_gl.h" |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
6 | #include "util.h" |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
7 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
8 | static GdkGLConfig *glconfig = NULL; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
9 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
10 | /** |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
11 | * Resets the OpenGL viewport stuff on widget reconfiguration (resize, |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
12 | * reposition) |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
13 | * @param widget widget that got reconfigured |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
14 | * @param event the configuration event |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
15 | * @param data unused |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
16 | * @return FALSE to propagate other handlers |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
17 | */ |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
18 | static gboolean configure_event(GtkWidget *widget, GdkEventConfigure *event, |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
19 | void *data); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
20 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
21 | /** |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
22 | * Maps the widget to the screen. |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
23 | * @param widget widget that got mapped |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
24 | * @param event the map event |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
25 | * @param data draw info struct |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
26 | * @return FALSE to propagate other handlers |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
27 | */ |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
28 | static gboolean map_event(GtkWidget *widget, GdkEventAny *event, void *data); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
29 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
30 | /** |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
31 | * Unmaps the widget from the screen. |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
32 | * @param widget widget that got unmapped |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
33 | * @param event the configuration event |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
34 | * @param data draw info struct |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
35 | * @return FALSE to propagate other handlers |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
36 | */ |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
37 | static gboolean unmap_event(GtkWidget *widget, GdkEventAny *event, void *data); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
38 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
39 | /** |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
40 | * Respond to widget visibility change. |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
41 | * @param widget widget whose visibility changed |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
42 | * @param event the visibility event |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
43 | * @param data draw info struct |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
44 | * @return FALSE to propagate other handlers |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
45 | */ |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
46 | static gboolean visibility_notify_event(GtkWidget *widget, |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
47 | GdkEventVisibility *event, void *data); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
48 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
49 | /** |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
50 | * Add a glib timer to periodically draw the widget. |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
51 | * @param widget widget we're drawing |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
52 | * @param info draw info struct |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
53 | */ |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
54 | static void widget_draw_timer_add(GtkWidget *widget, struct draw_info *info); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
55 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
56 | /** |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
57 | * Remove glib timer that was drawing this widget. |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
58 | * @param widget widget we're drawing |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
59 | * @param info draw info struct |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
60 | */ |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
61 | static void widget_draw_timer_remove(GtkWidget *widget, struct draw_info *info); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
62 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
63 | /** |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
64 | * Periodically invalidates gtk gl widget and tells GTK to redraw |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
65 | * @param widget widget we're drawing |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
66 | */ |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
67 | static gboolean widget_draw_timer(GtkWidget *widget); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
68 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
69 | /** |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
70 | * Cleanup widget stuff when it's getting destroyed. |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
71 | * @param widget widget that got destroyed |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
72 | * @param data draw info struct |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
73 | */ |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
74 | static void destroy_event(GtkWidget *widget, struct draw_info *data); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
75 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
76 | int cc_init_gtk_gl() |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
77 | { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
78 | if (glconfig) |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
79 | return 0; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
80 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
81 | /* configure OpenGL */ |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
82 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
83 | glconfig = gdk_gl_config_new_by_mode(GDK_GL_MODE_RGB | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
84 | GDK_GL_MODE_DEPTH | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
85 | GDK_GL_MODE_DOUBLE); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
86 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
87 | if (glconfig == NULL) { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
88 | Debug("*** Cannot find the double-buffered visual.\n"); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
89 | Debug("*** Trying single-buffered visual.\n"); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
90 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
91 | /* Try single-buffered visual */ |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
92 | glconfig = gdk_gl_config_new_by_mode(GDK_GL_MODE_RGB | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
93 | GDK_GL_MODE_DEPTH); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
94 | if (glconfig == NULL) { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
95 | Debug("*** No appropriate OpenGL-capable visual " |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
96 | "found.\n"); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
97 | return 1; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
98 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
99 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
100 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
101 | return 0; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
102 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
103 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
104 | void cc_new_gl_window(gl_init_func init, gl_config_func config, |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
105 | gl_draw_func draw, struct draw_info *data, |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
106 | struct window_box *ret) |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
107 | { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
108 | GtkWidget *window; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
109 | GtkWidget *vbox; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
110 | GtkWidget *drawing_area; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
111 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
112 | window = gtk_window_new(GTK_WINDOW_TOPLEVEL); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
113 | gtk_container_set_reallocate_redraws(GTK_CONTAINER(window), TRUE); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
114 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
115 | vbox = gtk_vbox_new(FALSE, 0); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
116 | gtk_container_add(GTK_CONTAINER(window), vbox); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
117 | gtk_widget_show(vbox); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
118 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
119 | if (!data) { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
120 | data = (struct draw_info*)malloc(sizeof(*data)); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
121 | assert(data); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
122 | memset(data, 0, sizeof(*data)); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
123 | data->timeout = TRUE; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
124 | data->delay_ms = DEFAULT_FRAME_DELAY; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
125 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
126 | drawing_area = cc_new_gl_area(init, config, draw, data); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
127 | gtk_box_pack_start(GTK_BOX(vbox), drawing_area, TRUE, TRUE, 0); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
128 | gtk_widget_show(drawing_area); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
129 | ret->window = window; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
130 | ret->vbox = vbox; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
131 | ret->draw_area = drawing_area; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
132 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
133 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
134 | GtkWidget *cc_new_gl_area(gl_init_func init, gl_config_func config, |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
135 | gl_draw_func draw, struct draw_info *data) |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
136 | { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
137 | GtkWidget *drawing_area; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
138 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
139 | assert(data); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
140 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
141 | drawing_area = gtk_drawing_area_new(); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
142 | assert(drawing_area); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
143 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
144 | assert(gtk_widget_set_gl_capability(drawing_area, glconfig, NULL, FALSE, |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
145 | GDK_GL_RGBA_TYPE)); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
146 | gtk_widget_add_events (drawing_area, GDK_VISIBILITY_NOTIFY_MASK); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
147 | if (init) { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
148 | g_signal_connect_after(G_OBJECT(drawing_area), "realize", |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
149 | G_CALLBACK(init), data->data); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
150 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
151 | if (config) { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
152 | g_signal_connect(G_OBJECT(drawing_area), "configure_event", |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
153 | G_CALLBACK(config), NULL); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
154 | } else { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
155 | g_signal_connect(G_OBJECT(drawing_area), "configure_event", |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
156 | G_CALLBACK(configure_event), NULL); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
157 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
158 | if (draw) { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
159 | g_signal_connect(G_OBJECT(drawing_area), "expose_event", |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
160 | G_CALLBACK(draw), data->data); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
161 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
162 | g_signal_connect(G_OBJECT(drawing_area), "map_event", |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
163 | G_CALLBACK(map_event), data); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
164 | g_signal_connect(G_OBJECT(drawing_area), "unmap_event", |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
165 | G_CALLBACK(unmap_event), data); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
166 | g_signal_connect(G_OBJECT(drawing_area), "visibility_notify_event", |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
167 | G_CALLBACK(visibility_notify_event), data); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
168 | g_signal_connect(G_OBJECT(drawing_area), "destroy", |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
169 | G_CALLBACK(destroy_event), data); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
170 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
171 | return drawing_area; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
172 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
173 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
174 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
175 | static gboolean configure_event(GtkWidget *widget, |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
176 | GdkEventConfigure *event, void *data) |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
177 | { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
178 | GdkGLContext *glcontext = gtk_widget_get_gl_context(widget); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
179 | GdkGLDrawable *gldrawable = gtk_widget_get_gl_drawable(widget); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
180 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
181 | GLfloat w = widget->allocation.width; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
182 | GLfloat h = widget->allocation.height; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
183 | GLfloat aspect; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
184 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
185 | // Debug("configuring\n"); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
186 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
187 | /*** OpenGL BEGIN ***/ |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
188 | if (!gdk_gl_drawable_gl_begin(gldrawable, glcontext)) |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
189 | return FALSE; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
190 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
191 | glViewport(0, 0, w, h); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
192 | glMatrixMode(GL_PROJECTION); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
193 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
194 | glLoadIdentity(); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
195 | if (w > h) { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
196 | aspect = w / h; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
197 | glFrustum(-aspect, aspect, -1.0, 1.0, 2.0, 60.0); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
198 | } else { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
199 | aspect = h / w; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
200 | glFrustum(-1.0, 1.0, -aspect, aspect, 2.0, 60.0); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
201 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
202 | glMatrixMode(GL_MODELVIEW); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
203 | glLoadIdentity(); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
204 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
205 | gdk_gl_drawable_gl_end(gldrawable); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
206 | /*** OpenGL END ***/ |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
207 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
208 | return FALSE; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
209 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
210 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
211 | static int map_event(GtkWidget *widget, GdkEventAny *event, void *data) |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
212 | { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
213 | struct draw_info *info = (struct draw_info*)data; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
214 | Debug("map\n"); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
215 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
216 | if (info->timeout) { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
217 | widget_draw_timer_add(widget, info); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
218 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
219 | return FALSE; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
220 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
221 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
222 | static int unmap_event(GtkWidget *widget, GdkEventAny *event, void *data) |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
223 | { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
224 | struct draw_info *info = (struct draw_info*)data; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
225 | Debug("unmap\n"); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
226 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
227 | if (info->timeout) { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
228 | widget_draw_timer_remove(widget, info); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
229 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
230 | return FALSE; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
231 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
232 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
233 | static int visibility_notify_event(GtkWidget *widget, GdkEventVisibility *event, |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
234 | void *data) |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
235 | { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
236 | struct draw_info *info = (struct draw_info*)data; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
237 | Debug("visibility\n"); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
238 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
239 | if (event->state == GDK_VISIBILITY_FULLY_OBSCURED) { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
240 | Debug("obscured\n"); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
241 | if (info->timeout) { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
242 | widget_draw_timer_remove(widget, info); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
243 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
244 | } else { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
245 | Debug("visible\n"); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
246 | if (info->timeout) { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
247 | widget_draw_timer_add(widget, info); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
248 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
249 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
250 | return FALSE; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
251 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
252 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
253 | static void widget_draw_timer_add(GtkWidget *widget, struct draw_info *info) |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
254 | { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
255 | if (!info->timer_id) { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
256 | info->timer_id = g_timeout_add(info->delay_ms, |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
257 | (GSourceFunc)widget_draw_timer, widget); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
258 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
259 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
260 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
261 | static void widget_draw_timer_remove(GtkWidget *widget, struct draw_info *info) |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
262 | { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
263 | if (info->timer_id) { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
264 | g_source_remove(info->timer_id); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
265 | info->timer_id = 0; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
266 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
267 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
268 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
269 | static gboolean widget_draw_timer(GtkWidget *widget) |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
270 | { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
271 | /* invalidate the window */ |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
272 | gdk_window_invalidate_rect (widget->window, &widget->allocation, FALSE); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
273 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
274 | /* tell gtk to update it _now_ */ |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
275 | gdk_window_process_updates (widget->window, FALSE); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
276 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
277 | return TRUE; |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
278 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
279 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
280 | static void destroy_event(GtkWidget *widget, struct draw_info *data) |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
281 | { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
282 | Debug("destroying widget\n"); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
283 | |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
284 | if (data) { |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
285 | widget_draw_timer_remove(widget, data); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
286 | free(data); |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
287 | } |
|
886e6862af56
[gaim-migrate @ 13350]
Charlie Stockman <chuckleberry@users.sourceforge.net>
parents:
diff
changeset
|
288 | } |