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