comparison plugins/win32/transparency/win2ktrans.c @ 4569:7f2de19d052d

[gaim-migrate @ 4850] Bug fix. Gaim would crash if using the IM convo window slider bars after plugin removal. committer: Tailor Script <tailor@pidgin.im>
author Herman Bloggs <hermanator12002@yahoo.com>
date Tue, 11 Feb 2003 00:58:28 +0000
parents d629e7989a8a
children 864518c3767d
comparison
equal deleted inserted replaced
4568:ddc1f12b52d6 4569:7f2de19d052d
44 /* Transparency plugin configuration */ 44 /* Transparency plugin configuration */
45 #define OPT_WGAIM_IMTRANS 0x00000001 45 #define OPT_WGAIM_IMTRANS 0x00000001
46 #define OPT_WGAIM_SHOW_IMTRANS 0x00000002 46 #define OPT_WGAIM_SHOW_IMTRANS 0x00000002
47 #define OPT_WGAIM_BLTRANS 0x00000004 47 #define OPT_WGAIM_BLTRANS 0x00000004
48 #define OPT_WGAIM_BUDDYWIN_ONTOP 0x00000008 48 #define OPT_WGAIM_BUDDYWIN_ONTOP 0x00000008
49
50 /*
51 * DATA STRUCTS
52 */
53 typedef struct {
54 GtkWidget *win;
55 GtkWidget *slider;
56 } slider_win;
57
49 58
50 /* 59 /*
51 * GLOBALS 60 * GLOBALS
52 */ 61 */
53 G_MODULE_IMPORT GtkWidget *blist; 62 G_MODULE_IMPORT GtkWidget *blist;
128 gtk_widget_show_all(hbox); 137 gtk_widget_show_all(hbox);
129 138
130 return frame; 139 return frame;
131 } 140 }
132 141
142 static slider_win* find_slidwin( GtkWidget *win ) {
143 GList *tmp = window_list;
144
145 while(tmp) {
146 if( ((slider_win*)(tmp->data))->win == win)
147 return (slider_win*)tmp->data;
148 tmp = tmp->next;
149 }
150 return NULL;
151 }
152
133 gboolean win_destroy_cb(GtkWidget *widget, GdkEvent *event, gpointer user_data) { 153 gboolean win_destroy_cb(GtkWidget *widget, GdkEvent *event, gpointer user_data) {
154 slider_win *slidwin=NULL;
134 /* Remove window from the window list */ 155 /* Remove window from the window list */
135 debug_printf("win2ktrans.dll: Conv window destoyed.. removing from list\n"); 156 debug_printf("win2ktrans.dll: Conv window destoyed.. removing from list\n");
136 window_list = g_list_remove(window_list, (gpointer)widget); 157
158 if((slidwin=find_slidwin(widget))) {
159 window_list = g_list_remove(window_list, (gpointer)slidwin);
160 g_free(slidwin);
161 }
137 return FALSE; 162 return FALSE;
138 } 163 }
139 164
140 static void gaim_new_conversation(char *who) { 165 static void gaim_new_conversation(char *who) {
141 GList *wl, *wl1; 166 GList *wl, *wl1;
150 175
151 /* check prefs to see if we want trans */ 176 /* check prefs to see if we want trans */
152 if ((trans_options & OPT_WGAIM_IMTRANS) && 177 if ((trans_options & OPT_WGAIM_IMTRANS) &&
153 (trans_options & OPT_WGAIM_SHOW_IMTRANS)) { 178 (trans_options & OPT_WGAIM_SHOW_IMTRANS)) {
154 /* Look up this window to see if it already has a scroller */ 179 /* Look up this window to see if it already has a scroller */
155 if(!g_list_find(window_list, (gpointer)win)) { 180 if(!find_slidwin(win)) {
156 GtkWidget *slider_box=NULL; 181 GtkWidget *slider_box=NULL;
182 slider_win *slidwin=NULL;
157 183
158 /* Get top vbox */ 184 /* Get top vbox */
159 for ( wl1 = wl = gtk_container_get_children(GTK_CONTAINER(win)); 185 for ( wl1 = wl = gtk_container_get_children(GTK_CONTAINER(win));
160 wl != NULL; 186 wl != NULL;
161 wl = wl->next ) { 187 wl = wl->next ) {
170 196
171 slider_box = wintrans_slider(win); 197 slider_box = wintrans_slider(win);
172 gtk_box_pack_start(GTK_BOX(vbox), 198 gtk_box_pack_start(GTK_BOX(vbox),
173 slider_box, 199 slider_box,
174 FALSE, FALSE, 0); 200 FALSE, FALSE, 0);
175 /* Add window to list, to track that it has a scroller */ 201 /* Add window to list, to track that it has a slider */
176 window_list = g_list_append(window_list, (gpointer)win); 202 slidwin = g_new0( slider_win, 1 );
203 slidwin->win = win;
204 slidwin->slider = slider_box;
205 window_list = g_list_append(window_list, (gpointer)slidwin);
177 /* Set callback to remove window from the list, if the window is destroyed */ 206 /* Set callback to remove window from the list, if the window is destroyed */
178 g_signal_connect(GTK_OBJECT(win), "destroy_event", G_CALLBACK(win_destroy_cb), NULL); 207 g_signal_connect(GTK_OBJECT(win), "destroy_event", G_CALLBACK(win_destroy_cb), NULL);
179 } 208 }
180 else 209 else
181 return; 210 return;
325 return NULL; 354 return NULL;
326 } 355 }
327 356
328 G_MODULE_EXPORT void gaim_plugin_remove() { 357 G_MODULE_EXPORT void gaim_plugin_remove() {
329 debug_printf("Removing win2ktrans.dll plugin\n"); 358 debug_printf("Removing win2ktrans.dll plugin\n");
359
360 /* Remove slider bars */
330 if(window_list) { 361 if(window_list) {
362 GList *tmp=window_list;
363 while(tmp) {
364 slider_win *slidwin = (slider_win*)tmp->data;
365 gtk_widget_destroy(slidwin->slider);
366 set_wintrans_off(slidwin->win);
367 g_free(slidwin);
368 tmp=tmp->next;
369 }
331 g_list_free(window_list); 370 g_list_free(window_list);
332 window_list = NULL; 371 window_list = NULL;
333 } 372 }
334 if(blist) { 373 if(blist) {
335 SetWindowPos(GDK_WINDOW_HWND(blist->window), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE); 374 SetWindowPos(GDK_WINDOW_HWND(blist->window), HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE);