comparison src/gtkblist.c @ 10178:96a850ab30c8

[gaim-migrate @ 11293] Added a status selector widget and stuck it at the bottom of the blist. Despite conversations regarding this, nobody has done it yet, so here's a basic one that people can build off of. It'll at the very least allow people to figure out what needs fixing with prpls and status (and a lot of fixes are needed!) committer: Tailor Script <tailor@pidgin.im>
author Christian Hammond <chipx86@chipx86.com>
date Sun, 14 Nov 2004 20:15:09 +0000
parents 757a7c088801
children ddf002ce58b6
comparison
equal deleted inserted replaced
10177:82c1322c4b56 10178:96a850ab30c8
47 #include "gtkpounce.h" 47 #include "gtkpounce.h"
48 #include "gtkprefs.h" 48 #include "gtkprefs.h"
49 #include "gtkprivacy.h" 49 #include "gtkprivacy.h"
50 #include "gtkroomlist.h" 50 #include "gtkroomlist.h"
51 #include "gtksound.h" 51 #include "gtksound.h"
52 #include "gtkstatusselector.h"
52 #include "gtkutils.h" 53 #include "gtkutils.h"
53 54
54 #include "gaim.h" 55 #include "gaim.h"
55 56
56 #include <gdk/gdkkeysyms.h> 57 #include <gdk/gdkkeysyms.h>
3088 static void gaim_gtk_blist_show(GaimBuddyList *list) 3089 static void gaim_gtk_blist_show(GaimBuddyList *list)
3089 { 3090 {
3090 void *handle; 3091 void *handle;
3091 GtkCellRenderer *rend; 3092 GtkCellRenderer *rend;
3092 GtkTreeViewColumn *column; 3093 GtkTreeViewColumn *column;
3094 GtkWidget *menu;
3093 GtkWidget *sw; 3095 GtkWidget *sw;
3096 GtkWidget *selector;
3094 GtkAccelGroup *accel_group; 3097 GtkAccelGroup *accel_group;
3095 GtkTreeSelection *selection; 3098 GtkTreeSelection *selection;
3096 GtkTargetEntry dte[] = {{"GAIM_BLIST_NODE", GTK_TARGET_SAME_APP, DRAG_ROW}, 3099 GtkTargetEntry dte[] = {{"GAIM_BLIST_NODE", GTK_TARGET_SAME_APP, DRAG_ROW},
3097 {"application/x-im-contact", 0, DRAG_BUDDY}, 3100 {"application/x-im-contact", 0, DRAG_BUDDY},
3098 {"text/x-vcard", 0, DRAG_VCARD }, 3101 {"text/x-vcard", 0, DRAG_VCARD },
3111 gtkblist->window = gtk_window_new(GTK_WINDOW_TOPLEVEL); 3114 gtkblist->window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
3112 gtk_window_set_role(GTK_WINDOW(gtkblist->window), "buddy_list"); 3115 gtk_window_set_role(GTK_WINDOW(gtkblist->window), "buddy_list");
3113 gtk_window_set_title(GTK_WINDOW(gtkblist->window), _("Buddy List")); 3116 gtk_window_set_title(GTK_WINDOW(gtkblist->window), _("Buddy List"));
3114 3117
3115 gtkblist->vbox = gtk_vbox_new(FALSE, 0); 3118 gtkblist->vbox = gtk_vbox_new(FALSE, 0);
3119 gtk_widget_show(gtkblist->vbox);
3116 gtk_container_add(GTK_CONTAINER(gtkblist->window), gtkblist->vbox); 3120 gtk_container_add(GTK_CONTAINER(gtkblist->window), gtkblist->vbox);
3117 3121
3118 g_signal_connect(G_OBJECT(gtkblist->window), "delete_event", G_CALLBACK(gtk_blist_delete_cb), NULL); 3122 g_signal_connect(G_OBJECT(gtkblist->window), "delete_event", G_CALLBACK(gtk_blist_delete_cb), NULL);
3119 g_signal_connect(G_OBJECT(gtkblist->window), "configure_event", G_CALLBACK(gtk_blist_configure_cb), NULL); 3123 g_signal_connect(G_OBJECT(gtkblist->window), "configure_event", G_CALLBACK(gtk_blist_configure_cb), NULL);
3120 g_signal_connect(G_OBJECT(gtkblist->window), "visibility_notify_event", G_CALLBACK(gtk_blist_visibility_cb), NULL); 3124 g_signal_connect(G_OBJECT(gtkblist->window), "visibility_notify_event", G_CALLBACK(gtk_blist_visibility_cb), NULL);
3131 gtk_item_factory_create_items(gtkblist->ift, sizeof(blist_menu) / sizeof(*blist_menu), 3135 gtk_item_factory_create_items(gtkblist->ift, sizeof(blist_menu) / sizeof(*blist_menu),
3132 blist_menu, NULL); 3136 blist_menu, NULL);
3133 gaim_gtk_load_accels(); 3137 gaim_gtk_load_accels();
3134 g_signal_connect(G_OBJECT(accel_group), "accel-changed", 3138 g_signal_connect(G_OBJECT(accel_group), "accel-changed",
3135 G_CALLBACK(gaim_gtk_save_accels_cb), NULL); 3139 G_CALLBACK(gaim_gtk_save_accels_cb), NULL);
3136 gtk_box_pack_start(GTK_BOX(gtkblist->vbox), gtk_item_factory_get_widget(gtkblist->ift, "<GaimMain>"), FALSE, FALSE, 0); 3140 menu = gtk_item_factory_get_widget(gtkblist->ift, "<GaimMain>");
3141 gtk_widget_show(menu);
3142 gtk_box_pack_start(GTK_BOX(gtkblist->vbox), menu, FALSE, FALSE, 0);
3137 3143
3138 awaymenu = gtk_item_factory_get_widget(gtkblist->ift, N_("/Tools/Away")); 3144 awaymenu = gtk_item_factory_get_widget(gtkblist->ift, N_("/Tools/Away"));
3139 3145
3140 /* FIXME: Status */ 3146 /* FIXME: Status */
3141 #if 0 3147 #if 0
3150 3156
3151 pluginmenu = gtk_item_factory_get_widget(gtkblist->ift, N_("/Tools/Plugin Actions")); 3157 pluginmenu = gtk_item_factory_get_widget(gtkblist->ift, N_("/Tools/Plugin Actions"));
3152 gaim_gtk_blist_update_plugin_actions(); 3158 gaim_gtk_blist_update_plugin_actions();
3153 /****************************** GtkTreeView **********************************/ 3159 /****************************** GtkTreeView **********************************/
3154 sw = gtk_scrolled_window_new(NULL,NULL); 3160 sw = gtk_scrolled_window_new(NULL,NULL);
3161 gtk_widget_show(sw);
3155 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_IN); 3162 gtk_scrolled_window_set_shadow_type (GTK_SCROLLED_WINDOW(sw), GTK_SHADOW_IN);
3156 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); 3163 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(sw), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
3157 3164
3158 gtkblist->treemodel = gtk_tree_store_new(BLIST_COLUMNS, 3165 gtkblist->treemodel = gtk_tree_store_new(BLIST_COLUMNS,
3159 GDK_TYPE_PIXBUF, G_TYPE_BOOLEAN, G_TYPE_STRING, 3166 GDK_TYPE_PIXBUF, G_TYPE_BOOLEAN, G_TYPE_STRING,
3160 G_TYPE_STRING, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_POINTER); 3167 G_TYPE_STRING, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_POINTER);
3161 3168
3162 gtkblist->treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(gtkblist->treemodel)); 3169 gtkblist->treeview = gtk_tree_view_new_with_model(GTK_TREE_MODEL(gtkblist->treemodel));
3170 gtk_widget_show(gtkblist->treeview);
3163 gtk_widget_set_name(gtkblist->treeview, "gaim_gtkblist_treeview"); 3171 gtk_widget_set_name(gtkblist->treeview, "gaim_gtkblist_treeview");
3164 3172
3165 /* Set up selection stuff */ 3173 /* Set up selection stuff */
3166 3174
3167 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(gtkblist->treeview)); 3175 selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(gtkblist->treeview));
3230 gtk_tree_view_set_search_column(GTK_TREE_VIEW(gtkblist->treeview), NAME_COLUMN); 3238 gtk_tree_view_set_search_column(GTK_TREE_VIEW(gtkblist->treeview), NAME_COLUMN);
3231 3239
3232 gtk_box_pack_start(GTK_BOX(gtkblist->vbox), sw, TRUE, TRUE, 0); 3240 gtk_box_pack_start(GTK_BOX(gtkblist->vbox), sw, TRUE, TRUE, 0);
3233 gtk_container_add(GTK_CONTAINER(sw), gtkblist->treeview); 3241 gtk_container_add(GTK_CONTAINER(sw), gtkblist->treeview);
3234 gaim_gtk_blist_update_columns(); 3242 gaim_gtk_blist_update_columns();
3243
3244 selector = gaim_gtk_status_selector_new();
3245 gtk_widget_show(selector);
3246 gtk_box_pack_start(GTK_BOX(gtkblist->vbox), selector, FALSE, TRUE, 0);
3235 3247
3236 /* set the Show Offline Buddies option. must be done 3248 /* set the Show Offline Buddies option. must be done
3237 * after the treeview or faceprint gets mad. -Robot101 3249 * after the treeview or faceprint gets mad. -Robot101
3238 */ 3250 */
3239 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item (gtkblist->ift, N_("/Buddies/Show Offline Buddies"))), 3251 gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(gtk_item_factory_get_item (gtkblist->ift, N_("/Buddies/Show Offline Buddies"))),
3246 gtk_widget_set_sensitive(gtk_item_factory_get_widget(gtkblist->ift, N_("/Tools/Mute Sounds")), FALSE); 3258 gtk_widget_set_sensitive(gtk_item_factory_get_widget(gtkblist->ift, N_("/Tools/Mute Sounds")), FALSE);
3247 3259
3248 /* OK... let's show this bad boy. */ 3260 /* OK... let's show this bad boy. */
3249 gaim_gtk_blist_refresh(list); 3261 gaim_gtk_blist_refresh(list);
3250 gaim_gtk_blist_restore_position(); 3262 gaim_gtk_blist_restore_position();
3251 gtk_widget_show_all(gtkblist->window); 3263 gtk_widget_show(gtkblist->window);
3252 3264
3253 /* start the refresh timer */ 3265 /* start the refresh timer */
3254 if (gaim_prefs_get_bool("/gaim/gtk/blist/show_idle_time") || 3266 if (gaim_prefs_get_bool("/gaim/gtk/blist/show_idle_time") ||
3255 gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons")) { 3267 gaim_prefs_get_bool("/gaim/gtk/blist/show_buddy_icons")) {
3256 3268