pidgin/gtkutils.c

changeset 17235
f04fc9bbb90b
parent 17234
6e430db9b926
child 17236
4bd0f7e562e7
equal deleted inserted replaced
17234:6e430db9b926 17235:f04fc9bbb90b
438 static gpointer 438 static gpointer
439 aop_option_menu_get_selected(GtkWidget *optmenu, GtkWidget **p_item) 439 aop_option_menu_get_selected(GtkWidget *optmenu, GtkWidget **p_item)
440 { 440 {
441 GtkWidget *menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(optmenu)); 441 GtkWidget *menu = gtk_option_menu_get_menu(GTK_OPTION_MENU(optmenu));
442 GtkWidget *item = gtk_menu_get_active(GTK_MENU(menu)); 442 GtkWidget *item = gtk_menu_get_active(GTK_MENU(menu));
443 if (NULL != p_item) 443 if (p_item)
444 (*p_item) = item; 444 (*p_item) = item;
445 return g_object_get_data(G_OBJECT(item), "aop_per_item_data"); 445 return g_object_get_data(G_OBJECT(item), "aop_per_item_data");
446 } 446 }
447 447
448 static void 448 static void
468 468
469 item = g_object_new(GTK_TYPE_MENU_ITEM, "visible", TRUE, NULL); 469 item = g_object_new(GTK_TYPE_MENU_ITEM, "visible", TRUE, NULL);
470 hbox = g_object_new(GTK_TYPE_HBOX, "visible", TRUE, "homogeneous", FALSE, "spacing", 4, NULL); 470 hbox = g_object_new(GTK_TYPE_HBOX, "visible", TRUE, "homogeneous", FALSE, "spacing", 4, NULL);
471 471
472 /* Create the image */ 472 /* Create the image */
473 if (NULL == pixbuf) 473 if (pixbuf)
474 image = g_object_new(GTK_TYPE_IMAGE, "visible", TRUE, NULL); 474 image = g_object_new(GTK_TYPE_IMAGE, "visible", TRUE, NULL);
475 else 475 else
476 image = g_object_new(GTK_TYPE_IMAGE, "visible", TRUE, "pixbuf", pixbuf, NULL); 476 image = g_object_new(GTK_TYPE_IMAGE, "visible", TRUE, "pixbuf", pixbuf, NULL);
477 477
478 if (NULL != sg) 478 if (sg)
479 gtk_size_group_add_widget(sg, image); 479 gtk_size_group_add_widget(sg, image);
480 480
481 /* Create the label */ 481 /* Create the label */
482 label = g_object_new(GTK_TYPE_LABEL, "visible", TRUE, "justify", GTK_JUSTIFY_LEFT, "xalign", (gdouble)0.0, "yalign", (gdouble)0.5, "label", lbl, NULL); 482 label = g_object_new(GTK_TYPE_LABEL, "visible", TRUE, "justify", GTK_JUSTIFY_LEFT, "xalign", (gdouble)0.0, "yalign", (gdouble)0.5, "label", lbl, NULL);
483 483
511 } 511 }
512 512
513 static void 513 static void
514 aop_option_menu_replace_menu(GtkWidget *optmenu, AOP_MENU *new_aop_menu) 514 aop_option_menu_replace_menu(GtkWidget *optmenu, AOP_MENU *new_aop_menu)
515 { 515 {
516 if (NULL != gtk_option_menu_get_menu(GTK_OPTION_MENU(optmenu))) 516 if (gtk_option_menu_get_menu(GTK_OPTION_MENU(optmenu)))
517 gtk_option_menu_remove_menu(GTK_OPTION_MENU(optmenu)); 517 gtk_option_menu_remove_menu(GTK_OPTION_MENU(optmenu));
518 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), new_aop_menu->menu); 518 gtk_option_menu_set_menu(GTK_OPTION_MENU(optmenu), new_aop_menu->menu);
519 if (-1 != new_aop_menu->default_item) 519 if (new_aop_menu->default_item != -1)
520 gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), new_aop_menu->default_item); 520 gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), new_aop_menu->default_item);
521 g_object_set_data_full(G_OBJECT(optmenu), "aop_menu", new_aop_menu, (GDestroyNotify)g_free); 521 g_object_set_data_full(G_OBJECT(optmenu), "aop_menu", new_aop_menu, (GDestroyNotify)g_free);
522 } 522 }
523 523
524 static void 524 static void
526 { 526 {
527 guint idx; 527 guint idx;
528 GList *llItr = NULL; 528 GList *llItr = NULL;
529 529
530 for (idx = 0, llItr = GTK_MENU_SHELL(gtk_option_menu_get_menu(GTK_OPTION_MENU (optmenu)))->children; 530 for (idx = 0, llItr = GTK_MENU_SHELL(gtk_option_menu_get_menu(GTK_OPTION_MENU (optmenu)))->children;
531 llItr != NULL; 531 llItr != NULL;
532 llItr = llItr->next, idx++) 532 llItr = llItr->next, idx++)
533 {
533 if (data == g_object_get_data(G_OBJECT(llItr->data), "aop_per_item_data")) 534 if (data == g_object_get_data(G_OBJECT(llItr->data), "aop_per_item_data"))
534 { 535 {
535 gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), idx); 536 gtk_option_menu_set_history(GTK_OPTION_MENU(optmenu), idx);
536 break; 537 break;
537 } 538 }
539 }
538 } 540 }
539 541
540 static GdkPixbuf * 542 static GdkPixbuf *
541 get_prpl_pixbuf(PurplePluginProtocolInfo *prpl_info) 543 get_prpl_pixbuf(PurplePluginProtocolInfo *prpl_info)
542 { 544 {
544 GdkPixbuf *pixbuf = NULL; 546 GdkPixbuf *pixbuf = NULL;
545 char *filename; 547 char *filename;
546 char buf[256]; 548 char buf[256];
547 549
548 proto_name = prpl_info->list_icon(NULL, NULL); 550 proto_name = prpl_info->list_icon(NULL, NULL);
549 if (NULL == proto_name) return NULL; 551 g_return_val_if_fail(proto_name != NULL, NULL);
550 552
551 g_snprintf(buf, sizeof(buf), "%s.png", proto_name); 553 g_snprintf(buf, sizeof(buf), "%s.png", proto_name);
552 filename = g_build_filename(DATADIR, "pixmaps", "pidgin", "protocols", "16", buf, NULL); 554 filename = g_build_filename(DATADIR, "pixmaps", "pidgin", "protocols", "16", buf, NULL);
553 pixbuf = gdk_pixbuf_new_from_file(filename, NULL); 555 pixbuf = gdk_pixbuf_new_from_file(filename, NULL);
554 g_free(filename); 556 g_free(filename);
580 p = p->next, i++) { 582 p = p->next, i++) {
581 583
582 plugin = (PurplePlugin *)p->data; 584 plugin = (PurplePlugin *)p->data;
583 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(plugin); 585 prpl_info = PURPLE_PLUGIN_PROTOCOL_INFO(plugin);
584 586
585 if (NULL != gtalk_name && strcmp(gtalk_name, plugin->info->name) < 0) { 587 if (gtalk_name && strcmp(gtalk_name, plugin->info->name) < 0)
588 {
586 char *filename = g_build_filename(DATADIR, "pixmaps", "pidgin", "protocols", 589 char *filename = g_build_filename(DATADIR, "pixmaps", "pidgin", "protocols",
587 "16", "google-talk.png", NULL); 590 "16", "google-talk.png", NULL);
588 pixbuf = gdk_pixbuf_new_from_file(filename, NULL); 591 pixbuf = gdk_pixbuf_new_from_file(filename, NULL);
589 g_free(filename); 592 g_free(filename);
590 593
591 gtk_menu_shell_append(GTK_MENU_SHELL(aop_menu->menu), 594 gtk_menu_shell_append(GTK_MENU_SHELL(aop_menu->menu),
592 aop_menu_item_new(sg, pixbuf, gtalk_name, "prpl-jabber")); 595 aop_menu_item_new(sg, pixbuf, gtalk_name, "prpl-jabber"));
593 596
594 if (NULL != pixbuf) 597 if (pixbuf)
595 g_object_unref(pixbuf); 598 g_object_unref(pixbuf);
596 599
597 gtalk_name = NULL; 600 gtalk_name = NULL;
598 } 601 }
599 602
600 pixbuf = get_prpl_pixbuf(prpl_info); 603 pixbuf = get_prpl_pixbuf(prpl_info);
601 604
602 gtk_menu_shell_append(GTK_MENU_SHELL(aop_menu->menu), 605 gtk_menu_shell_append(GTK_MENU_SHELL(aop_menu->menu),
603 aop_menu_item_new(sg, pixbuf, plugin->info->name, plugin->info->id)); 606 aop_menu_item_new(sg, pixbuf, plugin->info->name, plugin->info->id));
604 if (NULL != pixbuf) 607 if (pixbuf)
605 g_object_unref(pixbuf); 608 g_object_unref(pixbuf);
606 609
607 if (default_proto_id != NULL && !strcmp(plugin->info->id, default_proto_id)) 610 if (default_proto_id != NULL && !strcmp(plugin->info->id, default_proto_id))
608 aop_menu->default_item = i; 611 aop_menu->default_item = i;
609 } 612 }
694 } 697 }
695 698
696 gtk_menu_shell_append(GTK_MENU_SHELL(aop_menu->menu), 699 gtk_menu_shell_append(GTK_MENU_SHELL(aop_menu->menu),
697 aop_menu_item_new(sg, pixbuf, buf, account)); 700 aop_menu_item_new(sg, pixbuf, buf, account));
698 701
699 if (NULL != pixbuf) 702 if (pixbuf)
700 g_object_unref(pixbuf); 703 g_object_unref(pixbuf);
701 704
702 if (default_account != NULL && account == default_account) 705 if (default_account != NULL && account == default_account)
703 aop_menu->default_item = i; 706 aop_menu->default_item = i;
704 } 707 }

mercurial