comparison src/gtkstatusbox.c @ 11756:f54c680d835c

[gaim-migrate @ 14047] So. This fixes the status box on Gtk 2.2. Honestly, I'm not sure why or how. It appears that trying to use the status box itself as the widget to pass to gtk_widget_render_icon() causes things to get horribly confused or corrupted, with some very bizarre side effects that I never really managed to debug. (I assume it's somehow related to the fact that this code is all being called from within the status box's own init function). So I just used the status box's vbox instead, and bingo, it no longer lists "Available" a billion times in the dropdown. I've been trying to nail this issue on and off since the day the status box landed in CVS. I'm pleased to have it working now, but also annoyed it took so long and isn't really understandable. I wonder how much is broken on Gtk 2.0 now? committer: Tailor Script <tailor@pidgin.im>
author Stu Tomlinson <stu@nosnilmot.com>
date Sun, 23 Oct 2005 17:12:52 +0000
parents 50496ebef401
children 7584d802f0ac
comparison
equal deleted inserted replaced
11755:50496ebef401 11756:f54c680d835c
273 gtk_list_store_clear(status_box->dropdown_store); 273 gtk_list_store_clear(status_box->dropdown_store);
274 274
275 account = GTK_GAIM_STATUS_BOX(status_box)->account; 275 account = GTK_GAIM_STATUS_BOX(status_box)->account;
276 if (account == NULL) 276 if (account == NULL)
277 { 277 {
278 pixbuf = gtk_widget_render_icon (GTK_WIDGET(status_box), GAIM_STOCK_STATUS_ONLINE, 278 pixbuf = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_ONLINE,
279 icon_size, "GtkGaimStatusBox"); 279 icon_size, "GtkGaimStatusBox");
280 pixbuf2 = gtk_widget_render_icon (GTK_WIDGET(status_box), GAIM_STOCK_STATUS_AWAY, 280 pixbuf2 = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_AWAY,
281 icon_size, "GtkGaimStatusBox"); 281 icon_size, "GtkGaimStatusBox");
282 pixbuf3 = gtk_widget_render_icon (GTK_WIDGET(status_box), GAIM_STOCK_STATUS_OFFLINE, 282 pixbuf3 = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_OFFLINE,
283 icon_size, "GtkGaimStatusBox"); 283 icon_size, "GtkGaimStatusBox");
284 pixbuf4 = gtk_widget_render_icon (GTK_WIDGET(status_box), GAIM_STOCK_STATUS_INVISIBLE, 284 pixbuf4 = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_INVISIBLE,
285 icon_size, "GtkGaimStatusBox"); 285 icon_size, "GtkGaimStatusBox");
286 /* hacks */ 286 /* hacks */
287 gtk_gaim_status_box_add(GTK_GAIM_STATUS_BOX(status_box), GAIM_STATUS_AVAILABLE, pixbuf, _("Available"), NULL); 287 gtk_gaim_status_box_add(GTK_GAIM_STATUS_BOX(status_box), GAIM_STATUS_AVAILABLE, pixbuf, _("Available"), NULL);
288 gtk_gaim_status_box_add(GTK_GAIM_STATUS_BOX(status_box), GAIM_STATUS_AWAY, pixbuf2, _("Away"), NULL); 288 gtk_gaim_status_box_add(GTK_GAIM_STATUS_BOX(status_box), GAIM_STATUS_AWAY, pixbuf2, _("Away"), NULL);
289 gtk_gaim_status_box_add(GTK_GAIM_STATUS_BOX(status_box), GAIM_STATUS_HIDDEN, pixbuf4, _("Invisible"), NULL); 289 gtk_gaim_status_box_add(GTK_GAIM_STATUS_BOX(status_box), GAIM_STATUS_HIDDEN, pixbuf4, _("Invisible"), NULL);
387 text_rend = gtk_cell_renderer_text_new(); 387 text_rend = gtk_cell_renderer_text_new();
388 icon_rend = gtk_cell_renderer_pixbuf_new(); 388 icon_rend = gtk_cell_renderer_pixbuf_new();
389 icon_size = gtk_icon_size_from_name(GAIM_ICON_SIZE_STATUS); 389 icon_size = gtk_icon_size_from_name(GAIM_ICON_SIZE_STATUS);
390 390
391 status_box->imhtml_visible = FALSE; 391 status_box->imhtml_visible = FALSE;
392 status_box->error_pixbuf = gtk_widget_render_icon (GTK_WIDGET(status_box), GAIM_STOCK_STATUS_OFFLINE,
393 icon_size, "GtkGaimStatusBox");
394 status_box->connecting_index = 0;
395 status_box->connecting_pixbufs[0] = gtk_widget_render_icon (GTK_WIDGET(status_box), GAIM_STOCK_STATUS_CONNECT0,
396 icon_size, "GtkGaimStatusBox");
397 status_box->connecting_pixbufs[1] = gtk_widget_render_icon (GTK_WIDGET(status_box), GAIM_STOCK_STATUS_CONNECT1,
398 icon_size, "GtkGaimStatusBox");
399 status_box->connecting_pixbufs[2] = gtk_widget_render_icon (GTK_WIDGET(status_box), GAIM_STOCK_STATUS_CONNECT2,
400 icon_size, "GtkGaimStatusBox");
401 status_box->connecting_pixbufs[3] = gtk_widget_render_icon (GTK_WIDGET(status_box), GAIM_STOCK_STATUS_CONNECT3,
402 icon_size, "GtkGaimStatusBox");
403
404 status_box->typing_index = 0;
405 status_box->typing_pixbufs[0] = gtk_widget_render_icon (GTK_WIDGET(status_box), GAIM_STOCK_STATUS_TYPING0,
406 icon_size, "GtkGaimStatusBox");
407 status_box->typing_pixbufs[1] = gtk_widget_render_icon (GTK_WIDGET(status_box), GAIM_STOCK_STATUS_TYPING1,
408 icon_size, "GtkGaimStatusBox");
409 status_box->typing_pixbufs[2] = gtk_widget_render_icon (GTK_WIDGET(status_box), GAIM_STOCK_STATUS_TYPING2,
410 icon_size, "GtkGaimStatusBox");
411 status_box->typing_pixbufs[3] = gtk_widget_render_icon (GTK_WIDGET(status_box), GAIM_STOCK_STATUS_TYPING3,
412 icon_size, "GtkGaimStatusBox");
413 status_box->connecting = FALSE; 392 status_box->connecting = FALSE;
414 status_box->typing = FALSE; 393 status_box->typing = FALSE;
415 status_box->title = NULL; 394 status_box->title = NULL;
416 status_box->pixbuf = NULL; 395 status_box->pixbuf = NULL;
417 status_box->cell_view = gtk_cell_view_new(); 396 status_box->cell_view = gtk_cell_view_new();
456 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(status_box->sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); 435 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(status_box->sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
457 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(status_box->sw), GTK_SHADOW_IN); 436 gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(status_box->sw), GTK_SHADOW_IN);
458 gtk_container_add(GTK_CONTAINER(status_box->sw), status_box->imhtml); 437 gtk_container_add(GTK_CONTAINER(status_box->sw), status_box->imhtml);
459 gtk_box_pack_start(GTK_BOX(status_box->vbox), status_box->sw, TRUE, TRUE, 0); 438 gtk_box_pack_start(GTK_BOX(status_box->vbox), status_box->sw, TRUE, TRUE, 0);
460 439
440 status_box->error_pixbuf = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_OFFLINE,
441 icon_size, "GtkGaimStatusBox");
442 status_box->connecting_index = 0;
443 status_box->connecting_pixbufs[0] = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_CONNECT0,
444 icon_size, "GtkGaimStatusBox");
445 status_box->connecting_pixbufs[1] = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_CONNECT1,
446 icon_size, "GtkGaimStatusBox");
447 status_box->connecting_pixbufs[2] = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_CONNECT2,
448 icon_size, "GtkGaimStatusBox");
449 status_box->connecting_pixbufs[3] = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_CONNECT3,
450 icon_size, "GtkGaimStatusBox");
451
452 status_box->typing_index = 0;
453 status_box->typing_pixbufs[0] = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_TYPING0,
454 icon_size, "GtkGaimStatusBox");
455 status_box->typing_pixbufs[1] = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_TYPING1,
456 icon_size, "GtkGaimStatusBox");
457 status_box->typing_pixbufs[2] = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_TYPING2,
458 icon_size, "GtkGaimStatusBox");
459 status_box->typing_pixbufs[3] = gtk_widget_render_icon (GTK_WIDGET(status_box->vbox), GAIM_STOCK_STATUS_TYPING3,
460 icon_size, "GtkGaimStatusBox");
461
461 gtk_gaim_status_box_regenerate(status_box); 462 gtk_gaim_status_box_regenerate(status_box);
462 } 463 }
463 464
464 465
465 static void 466 static void
571 } 572 }
572 573
573 void 574 void
574 gtk_gaim_status_box_add_separator(GtkGaimStatusBox *status_box) 575 gtk_gaim_status_box_add_separator(GtkGaimStatusBox *status_box)
575 { 576 {
577 /* Don't do anything unless GTK actually supports
578 * gtk_combo_box_set_row_separator_func */
579 #if GTK_CHECK_VERSION(2,6,0)
576 GtkTreeIter iter; 580 GtkTreeIter iter;
577 581
578 gtk_list_store_append(status_box->dropdown_store, &iter); 582 gtk_list_store_append(status_box->dropdown_store, &iter);
579 gtk_list_store_set(status_box->dropdown_store, &iter, 583 gtk_list_store_set(status_box->dropdown_store, &iter,
580 TYPE_COLUMN, GTK_GAIM_STATUS_BOX_TYPE_SEPARATOR, 584 TYPE_COLUMN, GTK_GAIM_STATUS_BOX_TYPE_SEPARATOR,
581 -1); 585 -1);
586 #endif
582 } 587 }
583 588
584 void 589 void
585 gtk_gaim_status_box_set_error(GtkGaimStatusBox *status_box, const gchar *error) 590 gtk_gaim_status_box_set_error(GtkGaimStatusBox *status_box, const gchar *error)
586 { 591 {