Mercurial > pidgin
comparison plugins/ticker/ticker.c @ 4850:b5508e864987
[gaim-migrate @ 5175]
I made the buddy ticker not crash gaim when clizicking on a buddy.
I had to make the ticker pass gaim_conversation_new an account instead
of NULL, so I made the ticker look up the account for the buddy.
This fixes http://sourceforge.net/tracker/index.php?func=detail&aid=707223&group_id=235&atid=100235
committer: Tailor Script <tailor@pidgin.im>
author | Mark Doliner <mark@kingant.net> |
---|---|
date | Fri, 21 Mar 2003 21:48:13 +0000 |
parents | c4c28874ecd3 |
children | b37d7d09ec83 |
comparison
equal
deleted
inserted
replaced
4849:adf9ca39578f | 4850:b5508e864987 |
---|---|
71 | 71 |
72 void | 72 void |
73 BuddyTickerDestroyWindow( GtkWidget *window ) | 73 BuddyTickerDestroyWindow( GtkWidget *window ) |
74 { | 74 { |
75 BuddyTickerClearList(); | 75 BuddyTickerClearList(); |
76 gtk_ticker_stop_scroll( GTK_TICKER( ticker ) ); | 76 gtk_ticker_stop_scroll( GTK_TICKER( ticker ) ); |
77 gtk_widget_destroy( window ); | 77 gtk_widget_destroy( window ); |
78 ticker = tickerwindow = (GtkWidget *) NULL; | 78 ticker = tickerwindow = (GtkWidget *) NULL; |
79 userclose = TRUE; | 79 userclose = TRUE; |
80 } | 80 } |
81 | 81 |
84 | 84 |
85 void | 85 void |
86 BuddyTickerCreateWindow() | 86 BuddyTickerCreateWindow() |
87 { | 87 { |
88 | 88 |
89 if ( tickerwindow != (GtkWidget *) NULL ) | 89 if ( tickerwindow != (GtkWidget *) NULL ) |
90 return; | 90 return; |
91 debug_printf("Making ticker\n"); | 91 debug_printf("Making ticker\n"); |
92 tickerwindow = gtk_window_new (GTK_WINDOW_TOPLEVEL); | 92 tickerwindow = gtk_window_new (GTK_WINDOW_TOPLEVEL); |
93 g_signal_connect (GTK_OBJECT(tickerwindow), "destroy", | 93 g_signal_connect (GTK_OBJECT(tickerwindow), "destroy", |
94 G_CALLBACK (BuddyTickerDestroyWindow), "WM destroy"); | 94 G_CALLBACK (BuddyTickerDestroyWindow), "WM destroy"); |
95 gtk_window_set_title (GTK_WINDOW(tickerwindow), _("Gaim - Buddy Ticker")); | 95 gtk_window_set_title (GTK_WINDOW(tickerwindow), _("Gaim - Buddy Ticker")); |
96 gtk_window_set_role (GTK_WINDOW(tickerwindow), "ticker"); | 96 gtk_window_set_role (GTK_WINDOW(tickerwindow), "ticker"); |
97 gtk_widget_realize(tickerwindow); | 97 gtk_widget_realize(tickerwindow); |
98 | 98 |
99 ticker = gtk_ticker_new(); | 99 ticker = gtk_ticker_new(); |
100 if (!ticker) | 100 if (!ticker) |
101 return; | 101 return; |
102 gtk_ticker_set_spacing( GTK_TICKER( ticker ), 20 ); | 102 gtk_ticker_set_spacing( GTK_TICKER( ticker ), 20 ); |
103 gtk_widget_set_size_request( ticker, 500, -1 ); | 103 gtk_widget_set_size_request( ticker, 500, -1 ); |
104 gtk_container_add( GTK_CONTAINER( tickerwindow ), ticker ); | 104 gtk_container_add( GTK_CONTAINER( tickerwindow ), ticker ); |
105 gtk_ticker_set_interval( GTK_TICKER( ticker ), 500 ); | 105 gtk_ticker_set_interval( GTK_TICKER( ticker ), 500 ); |
106 gtk_ticker_set_scootch( GTK_TICKER( ticker ), 10 ); | 106 gtk_ticker_set_scootch( GTK_TICKER( ticker ), 10 ); |
107 /* Damned egotists | 107 /* Damned egotists |
108 msgw = gtk_label_new( msg ); | 108 msgw = gtk_label_new( msg ); |
109 gtk_ticker_add( GTK_TICKER( ticker ), msgw ); | 109 gtk_ticker_add( GTK_TICKER( ticker ), msgw ); |
110 */ | 110 */ |
111 gtk_ticker_start_scroll( GTK_TICKER( ticker ) ); | 111 gtk_ticker_start_scroll( GTK_TICKER( ticker ) ); |
112 | 112 |
113 g_timeout_add( 60000, BuddyTickerMessageRemove, NULL); | 113 g_timeout_add( 60000, BuddyTickerMessageRemove, NULL); |
114 | 114 |
115 gtk_widget_show_all (ticker); | 115 gtk_widget_show_all (ticker); |
118 | 118 |
119 gint | 119 gint |
120 ButtonPressCallback( GtkWidget *widget, GdkEvent *event, gpointer callback_data ) | 120 ButtonPressCallback( GtkWidget *widget, GdkEvent *event, gpointer callback_data ) |
121 { | 121 { |
122 TickerData *p = (TickerData *) callback_data; | 122 TickerData *p = (TickerData *) callback_data; |
123 gaim_conversation_new(GAIM_CONV_IM, NULL, p->buddy); | 123 struct gaim_buddy_list *gaimbuddylist; |
124 GaimBlistNode *group; | |
125 GaimBlistNode *buddy; | |
126 struct buddy *b = NULL; | |
127 char *norm_name = g_strdup(normalize(p->buddy)); | |
128 | |
129 if (!(gaimbuddylist = gaim_get_blist())) | |
130 return TRUE; | |
131 | |
132 group = gaimbuddylist->root; | |
133 while (group) { | |
134 buddy = group->child; | |
135 while (buddy) { | |
136 if (!gaim_utf8_strcasecmp(normalize(((struct buddy*)buddy)->name), norm_name)) | |
137 b = (struct buddy*)buddy; | |
138 buddy = buddy->next; | |
139 } | |
140 group = group->next; | |
141 } | |
142 g_free(norm_name); | |
143 | |
144 if (b->account) | |
145 gaim_conversation_new(GAIM_CONV_IM, b->account, p->buddy); | |
124 | 146 |
125 return TRUE; | 147 return TRUE; |
126 } | 148 } |
127 | 149 |
128 void | 150 void |
160 | 182 |
161 p->ebox = gtk_event_box_new(); | 183 p->ebox = gtk_event_box_new(); |
162 | 184 |
163 /* click detection */ | 185 /* click detection */ |
164 | 186 |
165 gtk_widget_set_events (p->ebox, GDK_BUTTON_PRESS_MASK); | 187 gtk_widget_set_events (p->ebox, GDK_BUTTON_PRESS_MASK); |
166 g_signal_connect (GTK_OBJECT (p->ebox), "button_press_event", | 188 g_signal_connect (GTK_OBJECT (p->ebox), "button_press_event", |
167 G_CALLBACK(ButtonPressCallback), (gpointer) p); | 189 G_CALLBACK(ButtonPressCallback), (gpointer) p); |
168 | 190 |
169 gtk_box_pack_start_defaults( GTK_BOX( p->hbox ), p->ebox ); | 191 gtk_box_pack_start_defaults( GTK_BOX( p->hbox ), p->ebox ); |
170 gtk_widget_show( p->ebox ); | 192 gtk_widget_show( p->ebox ); |
171 | 193 |
172 if (im_options & OPT_IM_ALIAS_TAB) | 194 if (im_options & OPT_IM_ALIAS_TAB) |
175 p->label = gtk_label_new( name ); | 197 p->label = gtk_label_new( name ); |
176 gtk_container_add( GTK_CONTAINER(p->ebox), p->label ); | 198 gtk_container_add( GTK_CONTAINER(p->ebox), p->label ); |
177 | 199 |
178 gtk_widget_show( p->label ); | 200 gtk_widget_show( p->label ); |
179 | 201 |
180 gtk_widget_show( tickerwindow ); | 202 gtk_widget_show( tickerwindow ); |
181 } | 203 } |
182 | 204 |
183 void | 205 void |
184 BuddyTickerRemoveUser( char *name ) | 206 BuddyTickerRemoveUser( char *name ) |
185 { | 207 { |
349 } | 371 } |
350 */ | 372 */ |
351 } | 373 } |
352 | 374 |
353 void signon_cb(struct gaim_connection *gc, char *who) { | 375 void signon_cb(struct gaim_connection *gc, char *who) { |
354 struct buddy *b = gaim_find_buddy(gc->account, who); | 376 struct buddy *b = gaim_find_buddy(gc->account, who); |
355 const char *xpm = NULL; | 377 const char *xpm = NULL; |
356 | 378 |
357 if (gc->prpl->list_icon) | 379 if (gc->prpl->list_icon) |
358 xpm = gc->prpl->list_icon(b->account, b); | 380 xpm = gc->prpl->list_icon(b->account, b); |
359 | 381 |
360 BuddyTickerAddUser(who, gaim_get_buddy_alias(b), xpm); | 382 BuddyTickerAddUser(who, gaim_get_buddy_alias(b), xpm); |
361 } | 383 } |
371 void buddy_signoff_cb(struct gaim_connection *gc, char *who) { | 393 void buddy_signoff_cb(struct gaim_connection *gc, char *who) { |
372 BuddyTickerRemoveUser(who); | 394 BuddyTickerRemoveUser(who); |
373 } | 395 } |
374 | 396 |
375 void away_cb(struct gaim_connection *gc, char *who) { | 397 void away_cb(struct gaim_connection *gc, char *who) { |
376 struct buddy *b = gaim_find_buddy(gc->account, who); | 398 struct buddy *b = gaim_find_buddy(gc->account, who); |
377 const char *xpm = NULL; | 399 const char *xpm = NULL; |
378 | 400 |
379 if (gc->prpl->list_icon) | 401 if (gc->prpl->list_icon) |
380 xpm = gc->prpl->list_icon(b->account, b); | 402 xpm = gc->prpl->list_icon(b->account, b); |
381 BuddyTickerSetPixmap(who, xpm); | 403 BuddyTickerSetPixmap(who, xpm); |