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);