src/gtkblist.c

changeset 10087
e5b80a38939d
parent 10079
d4eaff5517fb
child 10118
3e672eabe428
equal deleted inserted replaced
10086:c74a09688dff 10087:e5b80a38939d
436 return FALSE; 436 return FALSE;
437 } 437 }
438 438
439 /**************** END WEIRD DROP SHADOW STUFF ***********************************/ 439 /**************** END WEIRD DROP SHADOW STUFF ***********************************/
440 #endif 440 #endif
441
442 static GSList *blist_prefs_callbacks = NULL;
443 441
444 /*************************************************** 442 /***************************************************
445 * Callbacks * 443 * Callbacks *
446 ***************************************************/ 444 ***************************************************/
447 445
3094 gaim_gtk_blist_sort_method_set(val); 3092 gaim_gtk_blist_sort_method_set(val);
3095 } 3093 }
3096 3094
3097 static void gaim_gtk_blist_show(GaimBuddyList *list) 3095 static void gaim_gtk_blist_show(GaimBuddyList *list)
3098 { 3096 {
3097 void *handle;
3099 GtkCellRenderer *rend; 3098 GtkCellRenderer *rend;
3100 GtkTreeViewColumn *column; 3099 GtkTreeViewColumn *column;
3101 GtkWidget *sw; 3100 GtkWidget *sw;
3102 GtkAccelGroup *accel_group; 3101 GtkAccelGroup *accel_group;
3103 GtkTreeSelection *selection; 3102 GtkTreeSelection *selection;
3182 GDK_ACTION_COPY); 3181 GDK_ACTION_COPY);
3183 gtk_tree_view_enable_model_drag_dest(GTK_TREE_VIEW(gtkblist->treeview), 3182 gtk_tree_view_enable_model_drag_dest(GTK_TREE_VIEW(gtkblist->treeview),
3184 dte, 5, 3183 dte, 5,
3185 GDK_ACTION_COPY | GDK_ACTION_MOVE); 3184 GDK_ACTION_COPY | GDK_ACTION_MOVE);
3186 3185
3187 g_signal_connect(G_OBJECT(gtkblist->treeview), "drag-data-received", G_CALLBACK(gaim_gtk_blist_drag_data_rcv_cb), NULL); 3186 g_signal_connect(G_OBJECT(gtkblist->treeview), "drag-data-received", G_CALLBACK(gaim_gtk_blist_drag_data_rcv_cb), NULL);
3188 g_signal_connect(G_OBJECT(gtkblist->treeview), "drag-data-get", G_CALLBACK(gaim_gtk_blist_drag_data_get_cb), NULL); 3187 g_signal_connect(G_OBJECT(gtkblist->treeview), "drag-data-get", G_CALLBACK(gaim_gtk_blist_drag_data_get_cb), NULL);
3189 3188
3190 /* Tooltips */ 3189 /* Tooltips */
3191 g_signal_connect(G_OBJECT(gtkblist->treeview), "motion-notify-event", G_CALLBACK(gaim_gtk_blist_motion_cb), NULL); 3190 g_signal_connect(G_OBJECT(gtkblist->treeview), "motion-notify-event", G_CALLBACK(gaim_gtk_blist_motion_cb), NULL);
3192 g_signal_connect(G_OBJECT(gtkblist->treeview), "leave-notify-event", G_CALLBACK(gaim_gtk_blist_leave_cb), NULL); 3191 g_signal_connect(G_OBJECT(gtkblist->treeview), "leave-notify-event", G_CALLBACK(gaim_gtk_blist_leave_cb), NULL);
3264 3263
3265 gtkblist->refresh_timer = g_timeout_add(30000, 3264 gtkblist->refresh_timer = g_timeout_add(30000,
3266 (GSourceFunc)gaim_gtk_blist_refresh_timer, list); 3265 (GSourceFunc)gaim_gtk_blist_refresh_timer, list);
3267 } 3266 }
3268 3267
3268 handle = gaim_gtk_blist_get_handle();
3269
3269 /* things that affect how buddies are displayed */ 3270 /* things that affect how buddies are displayed */
3270 blist_prefs_callbacks = g_slist_prepend(blist_prefs_callbacks, 3271 gaim_prefs_connect_callback(handle, "/gaim/gtk/blist/grey_idle_buddies",
3271 GINT_TO_POINTER( 3272 _prefs_change_redo_list, NULL);
3272 gaim_prefs_connect_callback("/gaim/gtk/blist/grey_idle_buddies", 3273 gaim_prefs_connect_callback(handle, "/gaim/gtk/blist/show_buddy_icons",
3273 _prefs_change_redo_list, NULL))); 3274 _prefs_change_redo_list, NULL);
3274 blist_prefs_callbacks = g_slist_prepend(blist_prefs_callbacks, 3275 gaim_prefs_connect_callback(handle, "/gaim/gtk/blist/show_warning_level",
3275 GINT_TO_POINTER( 3276 _prefs_change_redo_list, NULL);
3276 gaim_prefs_connect_callback("/gaim/gtk/blist/show_buddy_icons", 3277 gaim_prefs_connect_callback(handle, "/gaim/gtk/blist/show_idle_time",
3277 _prefs_change_redo_list, NULL))); 3278 _prefs_change_redo_list, NULL);
3278 blist_prefs_callbacks = g_slist_prepend(blist_prefs_callbacks, 3279 gaim_prefs_connect_callback(handle, "/gaim/gtk/blist/show_empty_groups",
3279 GINT_TO_POINTER( 3280 _prefs_change_redo_list, NULL);
3280 gaim_prefs_connect_callback("/gaim/gtk/blist/show_warning_level", 3281 gaim_prefs_connect_callback(handle, "/gaim/gtk/blist/show_offline_buddies",
3281 _prefs_change_redo_list, NULL))); 3282 _prefs_change_redo_list, NULL);
3282 blist_prefs_callbacks = g_slist_prepend(blist_prefs_callbacks,
3283 GINT_TO_POINTER(
3284 gaim_prefs_connect_callback("/gaim/gtk/blist/show_idle_time",
3285 _prefs_change_redo_list, NULL)));
3286 blist_prefs_callbacks = g_slist_prepend(blist_prefs_callbacks,
3287 GINT_TO_POINTER(
3288 gaim_prefs_connect_callback("/gaim/gtk/blist/show_empty_groups",
3289 _prefs_change_redo_list, NULL)));
3290 blist_prefs_callbacks = g_slist_prepend(blist_prefs_callbacks,
3291 GINT_TO_POINTER(
3292 gaim_prefs_connect_callback("/gaim/gtk/blist/show_offline_buddies",
3293 _prefs_change_redo_list, NULL)));
3294 3283
3295 /* sorting */ 3284 /* sorting */
3296 blist_prefs_callbacks = g_slist_prepend(blist_prefs_callbacks, 3285 gaim_prefs_connect_callback(handle, "/gaim/gtk/blist/sort_type",
3297 GINT_TO_POINTER( 3286 _prefs_change_sort_method, NULL);
3298 gaim_prefs_connect_callback("/gaim/gtk/blist/sort_type",
3299 _prefs_change_sort_method, NULL)));
3300 3287
3301 /* things that affect what columns are displayed */ 3288 /* things that affect what columns are displayed */
3302 blist_prefs_callbacks = g_slist_prepend(blist_prefs_callbacks, 3289 gaim_prefs_connect_callback(handle, "/gaim/gtk/blist/show_buddy_icons",
3303 GINT_TO_POINTER( 3290 gaim_gtk_blist_update_columns, NULL);
3304 gaim_prefs_connect_callback("/gaim/gtk/blist/show_buddy_icons", 3291 gaim_prefs_connect_callback(handle, "/gaim/gtk/blist/show_idle_time",
3305 gaim_gtk_blist_update_columns, NULL))); 3292 gaim_gtk_blist_update_columns, NULL);
3306 blist_prefs_callbacks = g_slist_prepend(blist_prefs_callbacks, 3293 gaim_prefs_connect_callback(handle, "/gaim/gtk/blist/show_warning_level",
3307 GINT_TO_POINTER( 3294 gaim_gtk_blist_update_columns, NULL);
3308 gaim_prefs_connect_callback("/gaim/gtk/blist/show_idle_time",
3309 gaim_gtk_blist_update_columns, NULL)));
3310 blist_prefs_callbacks = g_slist_prepend(blist_prefs_callbacks,
3311 GINT_TO_POINTER(
3312 gaim_prefs_connect_callback("/gaim/gtk/blist/show_warning_level",
3313 gaim_gtk_blist_update_columns, NULL)));
3314 3295
3315 /* menus */ 3296 /* menus */
3316 blist_prefs_callbacks = g_slist_prepend(blist_prefs_callbacks, 3297 gaim_prefs_connect_callback(handle, "/gaim/gtk/sound/mute",
3317 GINT_TO_POINTER( 3298 gaim_gtk_blist_mute_pref_cb, NULL);
3318 gaim_prefs_connect_callback("/gaim/gtk/sound/mute", 3299 gaim_prefs_connect_callback(handle, "/gaim/gtk/sound/method",
3319 gaim_gtk_blist_mute_pref_cb, NULL))); 3300 gaim_gtk_blist_sound_method_pref_cb, NULL);
3320 blist_prefs_callbacks = g_slist_prepend(blist_prefs_callbacks,
3321 GINT_TO_POINTER(
3322 gaim_prefs_connect_callback("/gaim/gtk/sound/method",
3323 gaim_gtk_blist_sound_method_pref_cb, NULL)));
3324 3301
3325 /* Setup some gaim signal handlers. */ 3302 /* Setup some gaim signal handlers. */
3326 gaim_signal_connect(gaim_connections_get_handle(), "signed-on", 3303 gaim_signal_connect(gaim_connections_get_handle(), "signed-on",
3327 gtkblist, GAIM_CALLBACK(sign_on_off_cb), list); 3304 gtkblist, GAIM_CALLBACK(sign_on_off_cb), list);
3328 gaim_signal_connect(gaim_connections_get_handle(), "signed-off", 3305 gaim_signal_connect(gaim_connections_get_handle(), "signed-off",
3332 gtkblist, GAIM_CALLBACK(plugin_changed_cb), NULL); 3309 gtkblist, GAIM_CALLBACK(plugin_changed_cb), NULL);
3333 gaim_signal_connect(gaim_plugins_get_handle(), "plugin-unload", 3310 gaim_signal_connect(gaim_plugins_get_handle(), "plugin-unload",
3334 gtkblist, GAIM_CALLBACK(plugin_changed_cb), NULL); 3311 gtkblist, GAIM_CALLBACK(plugin_changed_cb), NULL);
3335 3312
3336 /* emit our created signal */ 3313 /* emit our created signal */
3337 gaim_signal_emit(gaim_gtk_blist_get_handle(), "gtkblist-created", list); 3314 gaim_signal_emit(handle, "gtkblist-created", list);
3338 } 3315 }
3339 3316
3340 /* XXX: does this need fixing? */ 3317 /* XXX: does this need fixing? */
3341 static void redo_buddy_list(GaimBuddyList *list, gboolean remove) 3318 static void redo_buddy_list(GaimBuddyList *list, gboolean remove)
3342 { 3319 {
3821 protomenu = NULL; 3798 protomenu = NULL;
3822 pluginmenu = NULL; 3799 pluginmenu = NULL;
3823 awaymenu = NULL; 3800 awaymenu = NULL;
3824 gtkblist = NULL; 3801 gtkblist = NULL;
3825 3802
3826 while(blist_prefs_callbacks) { 3803 gaim_prefs_disconnect_by_handle(gaim_gtk_blist_get_handle());
3827 gaim_prefs_disconnect_callback(GPOINTER_TO_INT(blist_prefs_callbacks->data));
3828 blist_prefs_callbacks = g_slist_remove(blist_prefs_callbacks, blist_prefs_callbacks->data);
3829 }
3830 } 3804 }
3831 3805
3832 static void gaim_gtk_blist_set_visible(GaimBuddyList *list, gboolean show) 3806 static void gaim_gtk_blist_set_visible(GaimBuddyList *list, gboolean show)
3833 { 3807 {
3834 if (!(gtkblist && gtkblist->window)) 3808 if (!(gtkblist && gtkblist->window))

mercurial