comparison src/gtkblist.c @ 10087:9fdbfe832fac

[gaim-migrate @ 11098] gaim_prefs_connect_callback() now takes a handle that can be used to disconnect the callbacks later on. The callback id's remain, so people can still use those if they want, although I'm not sure if there's any need for them any more. I also switched the order for initializing the prefs subsystem and statically compiled protocol plugins so that prpl prefs can work for statically compiled prpls. committer: Tailor Script <tailor@pidgin.im>
author Stu Tomlinson <stu@nosnilmot.com>
date Tue, 12 Oct 2004 00:49:19 +0000
parents f8e2e8ee9aa0
children ab8e8069b71e
comparison
equal deleted inserted replaced
10086:6cd2b467e303 10087:9fdbfe832fac
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))