comparison src/gtkblist.c @ 10079:f8e2e8ee9aa0

[gaim-migrate @ 11061] Change 2: Removed the buttons from the buddy list. committer: Tailor Script <tailor@pidgin.im>
author Sean Egan <seanegan@gmail.com>
date Sun, 03 Oct 2004 20:47:58 +0000
parents 2e225cd35615
children 9fdbfe832fac
comparison
equal deleted inserted replaced
10078:436fe70b4d50 10079:f8e2e8ee9aa0
588 static void gtk_blist_show_onlinehelp_cb() 588 static void gtk_blist_show_onlinehelp_cb()
589 { 589 {
590 gaim_notify_uri(NULL, GAIM_WEBSITE "documentation.php"); 590 gaim_notify_uri(NULL, GAIM_WEBSITE "documentation.php");
591 } 591 }
592 592
593 static void gtk_blist_button_im_cb(GtkWidget *w, GtkTreeView *tv)
594 {
595 GtkTreeIter iter;
596 GtkTreeModel *model = gtk_tree_view_get_model(tv);
597 GtkTreeSelection *sel = gtk_tree_view_get_selection(tv);
598
599 if(gtk_tree_selection_get_selected(sel, &model, &iter)){
600 GaimBlistNode *node;
601
602 gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &node, -1);
603 if (GAIM_BLIST_NODE_IS_BUDDY(node)) {
604 gaim_gtkdialogs_im_with_user(((GaimBuddy*)node)->account, ((GaimBuddy*)node)->name);
605 return;
606 } else if(GAIM_BLIST_NODE_IS_CONTACT(node)) {
607 GaimBuddy *buddy =
608 gaim_contact_get_priority_buddy((GaimContact*)node);
609 gaim_gtkdialogs_im_with_user(buddy->account, buddy->name);
610 return;
611 }
612 }
613 gaim_gtkdialogs_im();
614 }
615
616 static void gtk_blist_button_info_cb(GtkWidget *w, GtkTreeView *tv)
617 {
618 GtkTreeIter iter;
619 GtkTreeModel *model = gtk_tree_view_get_model(tv);
620 GtkTreeSelection *sel = gtk_tree_view_get_selection(tv);
621
622 if(gtk_tree_selection_get_selected(sel, &model, &iter)){
623 GaimBlistNode *node;
624
625 gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &node, -1);
626 if (GAIM_BLIST_NODE_IS_BUDDY(node)) {
627 serv_get_info(((GaimBuddy*)node)->account->gc, ((GaimBuddy*)node)->name);
628 return;
629 } else if(GAIM_BLIST_NODE_IS_CONTACT(node)) {
630 GaimBuddy *buddy = gaim_contact_get_priority_buddy((GaimContact*)node);
631 serv_get_info(buddy->account->gc, buddy->name);
632 return;
633 }
634 }
635 gaim_gtkdialogs_info();
636 }
637
638 static void 593 static void
639 do_join_chat(GaimGtkJoinChatData *data) 594 do_join_chat(GaimGtkJoinChatData *data)
640 { 595 {
641 if (data) 596 if (data)
642 { 597 {
892 G_CALLBACK(do_joinchat), data); 847 G_CALLBACK(do_joinchat), data);
893 848
894 g_object_unref(data->sg); 849 g_object_unref(data->sg);
895 850
896 gtk_widget_show_all(data->window); 851 gtk_widget_show_all(data->window);
897 }
898
899 static void gtk_blist_button_chat_cb(GtkWidget *w, GtkTreeView *tv)
900 {
901 GtkTreeIter iter;
902 GtkTreeModel *model = gtk_tree_view_get_model(tv);
903 GtkTreeSelection *sel = gtk_tree_view_get_selection(tv);
904
905 if(gtk_tree_selection_get_selected(sel, &model, &iter)){
906 GaimBlistNode *node;
907
908 gtk_tree_model_get(GTK_TREE_MODEL(gtkblist->treemodel), &iter, NODE_COLUMN, &node, -1);
909 if (GAIM_BLIST_NODE_IS_CHAT(node)) {
910 serv_join_chat(((GaimChat *)node)->account->gc, ((GaimChat *)node)->components);
911 return;
912 }
913 }
914 gaim_gtk_blist_joinchat_show();
915 }
916
917 static void gtk_blist_button_away_cb(GtkWidget *w, gpointer data)
918 {
919 /* FIXME: Status */
920 gtk_menu_popup(GTK_MENU(awaymenu), NULL, NULL, NULL, NULL,
921 1, GDK_CURRENT_TIME);
922 } 852 }
923 853
924 static void gtk_blist_row_expanded_cb(GtkTreeView *tv, GtkTreeIter *iter, GtkTreePath *path, gpointer user_data) { 854 static void gtk_blist_row_expanded_cb(GtkTreeView *tv, GtkTreeIter *iter, GtkTreePath *path, gpointer user_data) {
925 GaimBlistNode *node; 855 GaimBlistNode *node;
926 GValue val = {0,}; 856 GValue val = {0,};
3067 widget = gtk_item_factory_get_widget(gtkblist->ift, N_("/Tools/Room List")); 2997 widget = gtk_item_factory_get_widget(gtkblist->ift, N_("/Tools/Room List"));
3068 gtk_widget_set_sensitive(widget, gaim_gtk_roomlist_is_showable()); 2998 gtk_widget_set_sensitive(widget, gaim_gtk_roomlist_is_showable());
3069 2999
3070 widget = gtk_item_factory_get_widget(gtkblist->ift, N_("/Tools/Privacy")); 3000 widget = gtk_item_factory_get_widget(gtkblist->ift, N_("/Tools/Privacy"));
3071 gtk_widget_set_sensitive(widget, gaim_gtk_privacy_is_showable()); 3001 gtk_widget_set_sensitive(widget, gaim_gtk_privacy_is_showable());
3072
3073 gaim_gtk_blist_update_toolbar();
3074 } 3002 }
3075 3003
3076 3004
3077 static void 3005 static void
3078 plugin_changed_cb(GaimPlugin *p, gpointer *data) 3006 plugin_changed_cb(GaimPlugin *p, gpointer *data)
3169 static void gaim_gtk_blist_show(GaimBuddyList *list) 3097 static void gaim_gtk_blist_show(GaimBuddyList *list)
3170 { 3098 {
3171 GtkCellRenderer *rend; 3099 GtkCellRenderer *rend;
3172 GtkTreeViewColumn *column; 3100 GtkTreeViewColumn *column;
3173 GtkWidget *sw; 3101 GtkWidget *sw;
3174 GtkWidget *button;
3175 GtkSizeGroup *sg;
3176 GtkAccelGroup *accel_group; 3102 GtkAccelGroup *accel_group;
3177 GtkTreeSelection *selection; 3103 GtkTreeSelection *selection;
3178 GtkTargetEntry dte[] = {{"GAIM_BLIST_NODE", GTK_TARGET_SAME_APP, DRAG_ROW}, 3104 GtkTargetEntry dte[] = {{"GAIM_BLIST_NODE", GTK_TARGET_SAME_APP, DRAG_ROW},
3179 {"application/x-im-contact", 0, DRAG_BUDDY}, 3105 {"application/x-im-contact", 0, DRAG_BUDDY},
3180 {"text/x-vcard", 0, DRAG_VCARD }, 3106 {"text/x-vcard", 0, DRAG_VCARD },
3330 /* OK... let's show this bad boy. */ 3256 /* OK... let's show this bad boy. */
3331 gaim_gtk_blist_refresh(list); 3257 gaim_gtk_blist_refresh(list);
3332 gaim_gtk_blist_restore_position(); 3258 gaim_gtk_blist_restore_position();
3333 gtk_widget_show_all(gtkblist->window); 3259 gtk_widget_show_all(gtkblist->window);
3334 3260
3335 /**************************** Button Box **************************************/
3336 /* add this afterwards so it doesn't force up the width of the window */
3337 /* What? Won't GTK dynamically resize the width to accomodate the widgets? */
3338
3339 gtkblist->tooltips = gtk_tooltips_new();
3340
3341 sg = gtk_size_group_new(GTK_SIZE_GROUP_BOTH);
3342 gtkblist->bbox = gtk_hbox_new(TRUE, 0);
3343 gtk_box_pack_start(GTK_BOX(gtkblist->vbox), gtkblist->bbox, FALSE, FALSE, 0);
3344 gtk_widget_show(gtkblist->bbox);
3345
3346 button = gaim_pixbuf_button_from_stock(_("I_M"), GAIM_STOCK_IM, GAIM_BUTTON_VERTICAL);
3347 gtk_box_pack_start(GTK_BOX(gtkblist->bbox), button, FALSE, FALSE, 0);
3348 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
3349 gtk_size_group_add_widget(sg, button);
3350 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(gtk_blist_button_im_cb),
3351 gtkblist->treeview);
3352 gtk_tooltips_set_tip(GTK_TOOLTIPS(gtkblist->tooltips), button, _("Send a message to the selected buddy"), NULL);
3353 g_object_set_data(G_OBJECT(button), "button_name", "im");
3354 gtk_widget_show(button);
3355
3356 button = gaim_pixbuf_button_from_stock(_("Get _Info"), GAIM_STOCK_INFO, GAIM_BUTTON_VERTICAL);
3357 gtk_box_pack_start(GTK_BOX(gtkblist->bbox), button, FALSE, FALSE, 0);
3358 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
3359 gtk_size_group_add_widget(sg, button);
3360 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(gtk_blist_button_info_cb),
3361 gtkblist->treeview);
3362 gtk_tooltips_set_tip(GTK_TOOLTIPS(gtkblist->tooltips), button, _("Get information on the selected buddy"), NULL);
3363 g_object_set_data(G_OBJECT(button), "button_name", "info");
3364 gtk_widget_show(button);
3365
3366 button = gaim_pixbuf_button_from_stock(_("_Chat"), GAIM_STOCK_CHAT, GAIM_BUTTON_VERTICAL);
3367 gtk_box_pack_start(GTK_BOX(gtkblist->bbox), button, FALSE, FALSE, 0);
3368 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
3369 gtk_size_group_add_widget(sg, button);
3370 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(gtk_blist_button_chat_cb), gtkblist->treeview);
3371 gtk_tooltips_set_tip(GTK_TOOLTIPS(gtkblist->tooltips), button, _("Join a chat room"), NULL);
3372 gtk_widget_set_sensitive(button, gaim_gtk_blist_joinchat_is_showable());
3373 g_object_set_data(G_OBJECT(button), "button_name", "chat");
3374 gtk_widget_show(button);
3375
3376 button = gaim_pixbuf_button_from_stock(_("_Away"), GAIM_STOCK_ICON_AWAY, GAIM_BUTTON_VERTICAL);
3377 gtk_box_pack_start(GTK_BOX(gtkblist->bbox), button, FALSE, FALSE, 0);
3378 gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
3379 gtk_size_group_add_widget(sg, button);
3380 g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(gtk_blist_button_away_cb), NULL);
3381 gtk_tooltips_set_tip(GTK_TOOLTIPS(gtkblist->tooltips), button, _("Set an away message"), NULL);
3382 g_object_set_data(G_OBJECT(button), "button_name", "away");
3383 gtk_widget_show(button);
3384
3385 /* this will show the right image/label widgets for us */
3386 gaim_gtk_blist_update_toolbar();
3387
3388 /* start the refresh timer */ 3261 /* start the refresh timer */
3389 if (gaim_prefs_get_bool("/gaim/gtk/blist/show_idle_time") || 3262 if (gaim_prefs_get_bool("/gaim/gtk/blist/show_idle_time") ||
3390 gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons")) { 3263 gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons")) {
3391 3264
3392 gtkblist->refresh_timer = g_timeout_add(30000, 3265 gtkblist->refresh_timer = g_timeout_add(30000,
3393 (GSourceFunc)gaim_gtk_blist_refresh_timer, list); 3266 (GSourceFunc)gaim_gtk_blist_refresh_timer, list);
3394 } 3267 }
3395
3396 /* attach prefs callbacks */
3397 /* for the toolbar buttons */
3398 blist_prefs_callbacks = g_slist_prepend(blist_prefs_callbacks,
3399 GINT_TO_POINTER(
3400 gaim_prefs_connect_callback("/gaim/gtk/blist/button_style",
3401 gaim_gtk_blist_update_toolbar, NULL)));
3402 blist_prefs_callbacks = g_slist_prepend(blist_prefs_callbacks,
3403 GINT_TO_POINTER(
3404 gaim_prefs_connect_callback("/gaim/gtk/blist/show_buttons",
3405 gaim_gtk_blist_update_toolbar, NULL)));
3406 3268
3407 /* things that affect how buddies are displayed */ 3269 /* things that affect how buddies are displayed */
3408 blist_prefs_callbacks = g_slist_prepend(blist_prefs_callbacks, 3270 blist_prefs_callbacks = g_slist_prepend(blist_prefs_callbacks,
3409 GINT_TO_POINTER( 3271 GINT_TO_POINTER(
3410 gaim_prefs_connect_callback("/gaim/gtk/blist/grey_idle_buddies", 3272 gaim_prefs_connect_callback("/gaim/gtk/blist/grey_idle_buddies",
3561 } 3423 }
3562 gtk_tree_path_free(path); 3424 gtk_tree_path_free(path);
3563 return TRUE; 3425 return TRUE;
3564 } 3426 }
3565 3427
3566 static void
3567 gaim_gtk_blist_update_toolbar_icons (GtkWidget *widget, gpointer data)
3568 {
3569 GaimButtonStyle style = gaim_prefs_get_int("/gaim/gtk/blist/button_style");
3570
3571 if (GTK_IS_IMAGE(widget)) {
3572 if (style == GAIM_BUTTON_IMAGE || style == GAIM_BUTTON_TEXT_IMAGE)
3573 gtk_widget_show(widget);
3574 else
3575 gtk_widget_hide(widget);
3576 }
3577 else if (GTK_IS_LABEL(widget)) {
3578 if (style == GAIM_BUTTON_IMAGE)
3579 gtk_widget_hide(widget);
3580 else
3581 gtk_widget_show(widget);
3582 }
3583 else if (GTK_IS_CONTAINER(widget)) {
3584 if (GTK_IS_BUTTON(widget) && !strcmp(g_object_get_data(G_OBJECT(widget), "button_name"), "chat"))
3585 gtk_widget_set_sensitive(widget, gaim_gtk_blist_joinchat_is_showable());
3586 gtk_container_foreach(GTK_CONTAINER(widget),
3587 gaim_gtk_blist_update_toolbar_icons, NULL);
3588 }
3589 }
3590
3591 void gaim_gtk_blist_update_toolbar() {
3592 if (!gtkblist)
3593 return;
3594
3595 if (gaim_prefs_get_int("/gaim/gtk/blist/button_style") == GAIM_BUTTON_NONE)
3596 gtk_widget_hide(gtkblist->bbox);
3597 else {
3598 gtk_container_foreach(GTK_CONTAINER(gtkblist->bbox),
3599 gaim_gtk_blist_update_toolbar_icons, NULL);
3600 gtk_widget_show(gtkblist->bbox);
3601 }
3602 }
3603
3604 static void gaim_gtk_blist_remove(GaimBuddyList *list, GaimBlistNode *node) 3428 static void gaim_gtk_blist_remove(GaimBuddyList *list, GaimBlistNode *node)
3605 { 3429 {
3606 gaim_gtk_blist_hide_node(list, node); 3430 gaim_gtk_blist_hide_node(list, node);
3607 3431
3608 if(node->parent) 3432 if(node->parent)
3980 3804
3981 gtk_widget_destroy(gtkblist->window); 3805 gtk_widget_destroy(gtkblist->window);
3982 3806
3983 gaim_gtk_blist_tooltip_destroy(); 3807 gaim_gtk_blist_tooltip_destroy();
3984 3808
3985 gtk_object_sink(GTK_OBJECT(gtkblist->tooltips));
3986
3987 if (gtkblist->refresh_timer) 3809 if (gtkblist->refresh_timer)
3988 g_source_remove(gtkblist->refresh_timer); 3810 g_source_remove(gtkblist->refresh_timer);
3989 if (gtkblist->timeout) 3811 if (gtkblist->timeout)
3990 g_source_remove(gtkblist->timeout); 3812 g_source_remove(gtkblist->timeout);
3991 3813
3993 gtkblist->timeout = 0; 3815 gtkblist->timeout = 0;
3994 gtkblist->window = gtkblist->vbox = gtkblist->treeview = NULL; 3816 gtkblist->window = gtkblist->vbox = gtkblist->treeview = NULL;
3995 gtkblist->treemodel = NULL; 3817 gtkblist->treemodel = NULL;
3996 gtkblist->idle_column = NULL; 3818 gtkblist->idle_column = NULL;
3997 gtkblist->warning_column = gtkblist->buddy_icon_column = NULL; 3819 gtkblist->warning_column = gtkblist->buddy_icon_column = NULL;
3998 gtkblist->bbox = NULL;
3999 g_object_unref(G_OBJECT(gtkblist->ift)); 3820 g_object_unref(G_OBJECT(gtkblist->ift));
4000 protomenu = NULL; 3821 protomenu = NULL;
4001 pluginmenu = NULL; 3822 pluginmenu = NULL;
4002 awaymenu = NULL; 3823 awaymenu = NULL;
4003 gtkblist = NULL; 3824 gtkblist = NULL;
4730 NULL); 4551 NULL);
4731 4552
4732 /* Initialize prefs */ 4553 /* Initialize prefs */
4733 gaim_prefs_add_none("/gaim/gtk/blist"); 4554 gaim_prefs_add_none("/gaim/gtk/blist");
4734 gaim_prefs_add_bool("/gaim/gtk/blist/auto_expand_contacts", TRUE); 4555 gaim_prefs_add_bool("/gaim/gtk/blist/auto_expand_contacts", TRUE);
4735 gaim_prefs_add_int("/gaim/gtk/blist/button_style", GAIM_BUTTON_TEXT_IMAGE);
4736 gaim_prefs_add_bool("/gaim/gtk/blist/grey_idle_buddies", TRUE); 4556 gaim_prefs_add_bool("/gaim/gtk/blist/grey_idle_buddies", TRUE);
4737 gaim_prefs_add_bool("/gaim/gtk/blist/raise_on_events", FALSE); 4557 gaim_prefs_add_bool("/gaim/gtk/blist/raise_on_events", FALSE);
4738 gaim_prefs_add_bool("/gaim/gtk/blist/show_buddy_icons", TRUE); 4558 gaim_prefs_add_bool("/gaim/gtk/blist/show_buddy_icons", TRUE);
4739 gaim_prefs_add_bool("/gaim/gtk/blist/show_empty_groups", FALSE); 4559 gaim_prefs_add_bool("/gaim/gtk/blist/show_empty_groups", FALSE);
4740 gaim_prefs_add_bool("/gaim/gtk/blist/show_idle_time", TRUE); 4560 gaim_prefs_add_bool("/gaim/gtk/blist/show_idle_time", TRUE);