- priv->account_manager = tp_account_manager_dup ();
-
- tp_proxy_prepare_async (priv->account_manager, NULL,
- account_manager_prepared_cb, window);
-
- priv->errors = g_hash_table_new_full (g_direct_hash,
- g_direct_equal,
- g_object_unref,
- NULL);
-
- priv->auths = g_hash_table_new (NULL, NULL);
-
- priv->status_changed_handlers = g_hash_table_new_full (g_direct_hash,
- g_direct_equal,
- NULL,
- NULL);
-
- /* Set up menu */
- roster_window_favorite_chatroom_menu_setup (window);
-
- priv->edit_context = gtk_ui_manager_get_widget (priv->ui_manager,
- "/menubar/edit/edit_context");
- priv->edit_context_separator = gtk_ui_manager_get_widget (
- priv->ui_manager,
- "/menubar/edit/edit_context_separator");
- gtk_widget_hide (priv->edit_context);
- gtk_widget_hide (priv->edit_context_separator);
-
- /* Set up contact list. */
- empathy_status_presets_get_all ();
-
- /* Set up presence chooser */
- priv->presence_chooser = empathy_presence_chooser_new ();
- gtk_widget_show (priv->presence_chooser);
- item = gtk_tool_item_new ();
- gtk_widget_show (GTK_WIDGET (item));
- gtk_widget_set_size_request (priv->presence_chooser, 10, -1);
- gtk_container_add (GTK_CONTAINER (item), priv->presence_chooser);
- gtk_tool_item_set_is_important (item, TRUE);
- gtk_tool_item_set_expand (item, TRUE);
- gtk_toolbar_insert (GTK_TOOLBAR (priv->presence_toolbar), item, -1);
-
- /* Set up the throbber */
- priv->throbber = gtk_spinner_new ();
- gtk_widget_set_size_request (priv->throbber, 16, -1);
- gtk_widget_set_events (priv->throbber, GDK_BUTTON_PRESS_MASK);
- g_signal_connect (priv->throbber, "button-press-event",
- G_CALLBACK (roster_window_throbber_button_press_event_cb),
- window);
- gtk_widget_show (priv->throbber);
-
- item = gtk_tool_item_new ();
- gtk_container_set_border_width (GTK_CONTAINER (item), 6);
- gtk_toolbar_insert (GTK_TOOLBAR (priv->presence_toolbar), item, -1);
- gtk_container_add (GTK_CONTAINER (item), priv->throbber);
- priv->throbber_tool_item = GTK_WIDGET (item);
-
- /* XXX: this class is designed to live for the duration of the program,
- * so it's got a race condition between its signal handlers and its
- * finalization. The class is planned to be removed, so we won't fix
- * this before then. */
- individual_manager = empathy_individual_manager_dup_singleton ();
- priv->individual_store = EMPATHY_INDIVIDUAL_STORE (
- empathy_individual_store_manager_new (individual_manager));
- g_object_unref (individual_manager);
-
- /* For the moment, we disallow Persona drops onto the roster contact list (e.g. from things such as
- * the EmpathyPersonaView in the linking dialogue). No code is hooked up to do anything on a Persona
- * drop, so allowing them would achieve nothing except confusion. */
- priv->individual_view = empathy_individual_view_new (
- priv->individual_store,
- /* EmpathyIndividualViewFeatureFlags */
- EMPATHY_INDIVIDUAL_VIEW_FEATURE_GROUPS_SAVE |
- EMPATHY_INDIVIDUAL_VIEW_FEATURE_GROUPS_RENAME |
- EMPATHY_INDIVIDUAL_VIEW_FEATURE_GROUPS_REMOVE |
- EMPATHY_INDIVIDUAL_VIEW_FEATURE_GROUPS_CHANGE |
- EMPATHY_INDIVIDUAL_VIEW_FEATURE_INDIVIDUAL_REMOVE |
- EMPATHY_INDIVIDUAL_VIEW_FEATURE_INDIVIDUAL_DROP |
- EMPATHY_INDIVIDUAL_VIEW_FEATURE_INDIVIDUAL_DRAG |
- EMPATHY_INDIVIDUAL_VIEW_FEATURE_INDIVIDUAL_TOOLTIP |
- EMPATHY_INDIVIDUAL_VIEW_FEATURE_INDIVIDUAL_CALL |
- EMPATHY_INDIVIDUAL_VIEW_FEATURE_FILE_DROP,
- /* EmpathyIndividualFeatureFlags */
- EMPATHY_INDIVIDUAL_FEATURE_CHAT |
- EMPATHY_INDIVIDUAL_FEATURE_CALL |
- EMPATHY_INDIVIDUAL_FEATURE_EDIT |
- EMPATHY_INDIVIDUAL_FEATURE_INFO |
- EMPATHY_INDIVIDUAL_FEATURE_LINK |
- EMPATHY_INDIVIDUAL_FEATURE_SMS |
- EMPATHY_INDIVIDUAL_FEATURE_CALL_PHONE);
-
- gtk_widget_show (GTK_WIDGET (priv->individual_view));
- gtk_container_add (GTK_CONTAINER (sw),
- GTK_WIDGET (priv->individual_view));
- g_signal_connect (priv->individual_view, "row-activated",
- G_CALLBACK (roster_window_row_activated_cb),
- window);
-
- /* Set up search bar */
- priv->search_bar = empathy_live_search_new (
- GTK_WIDGET (priv->individual_view));
- empathy_individual_view_set_live_search (priv->individual_view,
- EMPATHY_LIVE_SEARCH (priv->search_bar));
- gtk_box_pack_start (GTK_BOX (search_vbox), priv->search_bar,
- FALSE, TRUE, 0);
-
- g_signal_connect_swapped (window, "map",
- G_CALLBACK (gtk_widget_grab_focus), priv->individual_view);
-
- /* Connect to proper signals to check if contact list is empty or not */
- model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->individual_view));
- priv->empty = TRUE;
- g_signal_connect (model, "row-inserted",
- G_CALLBACK (roster_window_row_inserted_cb),
- window);
- g_signal_connect (model, "row-deleted",
- G_CALLBACK (roster_window_row_deleted_cb),
- window);
-
- /* Load user-defined accelerators. */
- roster_window_accels_load ();
-
- /* Set window size. */
- empathy_geometry_bind (GTK_WINDOW (window), GEOMETRY_NAME);
-
- /* bind view_balance_show_in_roster */
- g_settings_bind (priv->gsettings_ui, "show-balance-in-roster",
- priv->view_balance_show_in_roster, "active",
- G_SETTINGS_BIND_DEFAULT);
- g_object_bind_property (priv->view_balance_show_in_roster, "active",
- priv->balance_vbox, "visible",
- G_BINDING_SYNC_CREATE);
-
- /* Enable event handling */
- priv->call_observer = empathy_call_observer_dup_singleton ();
- priv->event_manager = empathy_event_manager_dup_singleton ();
-
- g_signal_connect (priv->event_manager, "event-added",
- G_CALLBACK (roster_window_event_added_cb), window);
- g_signal_connect (priv->event_manager, "event-removed",
- G_CALLBACK (roster_window_event_removed_cb), window);
- g_signal_connect (priv->account_manager, "account-validity-changed",
- G_CALLBACK (roster_window_account_validity_changed_cb),
- window);
- g_signal_connect (priv->account_manager, "account-removed",
- G_CALLBACK (roster_window_account_removed_cb),
- window);
- g_signal_connect (priv->account_manager, "account-disabled",
- G_CALLBACK (roster_window_account_disabled_cb),
- window);
-
- /* Show offline ? */
- show_offline = g_settings_get_boolean (priv->gsettings_ui,
- EMPATHY_PREFS_UI_SHOW_OFFLINE);
- g_signal_connect (priv->gsettings_ui,
- "changed::" EMPATHY_PREFS_UI_SHOW_OFFLINE,
- G_CALLBACK (roster_window_notify_show_offline_cb),
- show_offline_widget);
-
- gtk_toggle_action_set_active (show_offline_widget, show_offline);
-
- /* Show protocol ? */
- g_signal_connect (priv->gsettings_ui,
- "changed::" EMPATHY_PREFS_UI_SHOW_PROTOCOLS,
- G_CALLBACK (roster_window_notify_show_protocols_cb),
- window);
-
- roster_window_notify_show_protocols_cb (priv->gsettings_ui,
- EMPATHY_PREFS_UI_SHOW_PROTOCOLS,
- window);
-
- /* Sort by name / by status ? */
- g_signal_connect (priv->gsettings_contacts,
- "changed::" EMPATHY_PREFS_CONTACTS_SORT_CRITERIUM,
- G_CALLBACK (roster_window_notify_sort_contact_cb),
- window);
-
- roster_window_notify_sort_contact_cb (priv->gsettings_contacts,
- EMPATHY_PREFS_CONTACTS_SORT_CRITERIUM,
- window);
-
- /* Contacts list size */
- g_signal_connect (priv->gsettings_ui,
- "changed::" EMPATHY_PREFS_UI_COMPACT_CONTACT_LIST,
- G_CALLBACK (roster_window_notify_contact_list_size_cb),
- window);
- g_signal_connect (priv->gsettings_ui,
- "changed::" EMPATHY_PREFS_UI_SHOW_AVATARS,
- G_CALLBACK (roster_window_notify_contact_list_size_cb),
- window);
-
- roster_window_notify_contact_list_size_cb (priv->gsettings_ui,
- EMPATHY_PREFS_UI_SHOW_AVATARS,
- window);
+ priv->account_manager = tp_account_manager_dup ();
+
+ tp_proxy_prepare_async (priv->account_manager, NULL,
+ account_manager_prepared_cb, window);
+
+ priv->errors = g_hash_table_new_full (g_direct_hash, g_direct_equal,
+ g_object_unref, NULL);
+
+ priv->auths = g_hash_table_new (NULL, NULL);
+
+ priv->status_changed_handlers = g_hash_table_new_full (g_direct_hash,
+ g_direct_equal, NULL, NULL);
+
+ /* Set up menu */
+ roster_window_favorite_chatroom_menu_setup (window);
+
+ priv->edit_context = gtk_ui_manager_get_widget (priv->ui_manager,
+ "/menubar/edit/edit_context");
+ priv->edit_context_separator = gtk_ui_manager_get_widget (
+ priv->ui_manager,
+ "/menubar/edit/edit_context_separator");
+ gtk_widget_hide (priv->edit_context);
+ gtk_widget_hide (priv->edit_context_separator);
+
+ /* Set up contact list. */
+ empathy_status_presets_get_all ();
+
+ /* Set up presence chooser */
+ priv->presence_chooser = empathy_presence_chooser_new ();
+ gtk_widget_show (priv->presence_chooser);
+ item = gtk_tool_item_new ();
+ gtk_widget_show (GTK_WIDGET (item));
+ gtk_widget_set_size_request (priv->presence_chooser, 10, -1);
+ gtk_container_add (GTK_CONTAINER (item), priv->presence_chooser);
+ gtk_tool_item_set_is_important (item, TRUE);
+ gtk_tool_item_set_expand (item, TRUE);
+ gtk_toolbar_insert (GTK_TOOLBAR (priv->presence_toolbar), item, -1);
+
+ /* Set up the throbber */
+ priv->throbber = gtk_spinner_new ();
+ gtk_widget_set_size_request (priv->throbber, 16, -1);
+ gtk_widget_set_events (priv->throbber, GDK_BUTTON_PRESS_MASK);
+ g_signal_connect (priv->throbber, "button-press-event",
+ G_CALLBACK (roster_window_throbber_button_press_event_cb),
+ window);
+ gtk_widget_show (priv->throbber);
+
+ item = gtk_tool_item_new ();
+ gtk_container_set_border_width (GTK_CONTAINER (item), 6);
+ gtk_toolbar_insert (GTK_TOOLBAR (priv->presence_toolbar), item, -1);
+ gtk_container_add (GTK_CONTAINER (item), priv->throbber);
+ priv->throbber_tool_item = GTK_WIDGET (item);
+
+ /* XXX: this class is designed to live for the duration of the program,
+ * so it's got a race condition between its signal handlers and its
+ * finalization. The class is planned to be removed, so we won't fix
+ * this before then. */
+ individual_manager = empathy_individual_manager_dup_singleton ();
+ priv->individual_store = EMPATHY_INDIVIDUAL_STORE (
+ empathy_individual_store_manager_new (individual_manager));
+ g_object_unref (individual_manager);
+
+ /* For the moment, we disallow Persona drops onto the roster contact list
+ * (e.g. from things such as the EmpathyPersonaView in the linking dialogue).
+ * No code is hooked up to do anything on a Persona drop, so allowing them
+ * would achieve nothing except confusion. */
+ priv->individual_view = empathy_individual_view_new (
+ priv->individual_store,
+ /* EmpathyIndividualViewFeatureFlags */
+ EMPATHY_INDIVIDUAL_VIEW_FEATURE_GROUPS_SAVE |
+ EMPATHY_INDIVIDUAL_VIEW_FEATURE_GROUPS_RENAME |
+ EMPATHY_INDIVIDUAL_VIEW_FEATURE_GROUPS_REMOVE |
+ EMPATHY_INDIVIDUAL_VIEW_FEATURE_GROUPS_CHANGE |
+ EMPATHY_INDIVIDUAL_VIEW_FEATURE_INDIVIDUAL_REMOVE |
+ EMPATHY_INDIVIDUAL_VIEW_FEATURE_INDIVIDUAL_DROP |
+ EMPATHY_INDIVIDUAL_VIEW_FEATURE_INDIVIDUAL_DRAG |
+ EMPATHY_INDIVIDUAL_VIEW_FEATURE_INDIVIDUAL_TOOLTIP |
+ EMPATHY_INDIVIDUAL_VIEW_FEATURE_INDIVIDUAL_CALL |
+ EMPATHY_INDIVIDUAL_VIEW_FEATURE_FILE_DROP,
+ /* EmpathyIndividualFeatureFlags */
+ EMPATHY_INDIVIDUAL_FEATURE_CHAT |
+ EMPATHY_INDIVIDUAL_FEATURE_CALL |
+ EMPATHY_INDIVIDUAL_FEATURE_EDIT |
+ EMPATHY_INDIVIDUAL_FEATURE_INFO |
+ EMPATHY_INDIVIDUAL_FEATURE_LINK |
+ EMPATHY_INDIVIDUAL_FEATURE_SMS |
+ EMPATHY_INDIVIDUAL_FEATURE_CALL_PHONE);
+
+ gtk_widget_show (GTK_WIDGET (priv->individual_view));
+ gtk_container_add (GTK_CONTAINER (sw),
+ GTK_WIDGET (priv->individual_view));
+ g_signal_connect (priv->individual_view, "row-activated",
+ G_CALLBACK (roster_window_row_activated_cb), window);
+
+ /* Set up search bar */
+ priv->search_bar = empathy_live_search_new (
+ GTK_WIDGET (priv->individual_view));
+ empathy_individual_view_set_live_search (priv->individual_view,
+ EMPATHY_LIVE_SEARCH (priv->search_bar));
+ gtk_box_pack_start (GTK_BOX (search_vbox), priv->search_bar,
+ FALSE, TRUE, 0);
+
+ g_signal_connect_swapped (window, "map",
+ G_CALLBACK (gtk_widget_grab_focus), priv->individual_view);
+
+ /* Connect to proper signals to check if contact list is empty or not */
+ model = gtk_tree_view_get_model (GTK_TREE_VIEW (priv->individual_view));
+ priv->empty = TRUE;
+ g_signal_connect (model, "row-inserted",
+ G_CALLBACK (roster_window_row_inserted_cb), window);
+ g_signal_connect (model, "row-deleted",
+ G_CALLBACK (roster_window_row_deleted_cb), window);
+
+ /* Load user-defined accelerators. */
+ roster_window_accels_load ();
+
+ /* Set window size. */
+ empathy_geometry_bind (GTK_WINDOW (window), GEOMETRY_NAME);
+
+ /* bind view_balance_show_in_roster */
+ g_settings_bind (priv->gsettings_ui, "show-balance-in-roster",
+ priv->view_balance_show_in_roster, "active",
+ G_SETTINGS_BIND_DEFAULT);
+ g_object_bind_property (priv->view_balance_show_in_roster, "active",
+ priv->balance_vbox, "visible",
+ G_BINDING_SYNC_CREATE);
+
+ /* Enable event handling */
+ priv->call_observer = empathy_call_observer_dup_singleton ();
+ priv->event_manager = empathy_event_manager_dup_singleton ();
+
+ g_signal_connect (priv->event_manager, "event-added",
+ G_CALLBACK (roster_window_event_added_cb), window);
+ g_signal_connect (priv->event_manager, "event-removed",
+ G_CALLBACK (roster_window_event_removed_cb), window);
+ g_signal_connect (priv->account_manager, "account-validity-changed",
+ G_CALLBACK (roster_window_account_validity_changed_cb), window);
+ g_signal_connect (priv->account_manager, "account-removed",
+ G_CALLBACK (roster_window_account_removed_cb), window);
+ g_signal_connect (priv->account_manager, "account-disabled",
+ G_CALLBACK (roster_window_account_disabled_cb), window);
+
+ /* Show offline ? */
+ show_offline = g_settings_get_boolean (priv->gsettings_ui,
+ EMPATHY_PREFS_UI_SHOW_OFFLINE);
+
+ g_signal_connect (priv->gsettings_ui,
+ "changed::" EMPATHY_PREFS_UI_SHOW_OFFLINE,
+ G_CALLBACK (roster_window_notify_show_offline_cb), show_offline_widget);
+
+ gtk_toggle_action_set_active (show_offline_widget, show_offline);
+
+ /* Show protocol ? */
+ g_signal_connect (priv->gsettings_ui,
+ "changed::" EMPATHY_PREFS_UI_SHOW_PROTOCOLS,
+ G_CALLBACK (roster_window_notify_show_protocols_cb), window);
+
+ roster_window_notify_show_protocols_cb (priv->gsettings_ui,
+ EMPATHY_PREFS_UI_SHOW_PROTOCOLS, window);
+
+ /* Sort by name / by status ? */
+ g_signal_connect (priv->gsettings_contacts,
+ "changed::" EMPATHY_PREFS_CONTACTS_SORT_CRITERIUM,
+ G_CALLBACK (roster_window_notify_sort_contact_cb), window);
+
+ roster_window_notify_sort_contact_cb (priv->gsettings_contacts,
+ EMPATHY_PREFS_CONTACTS_SORT_CRITERIUM, window);
+
+ /* Contacts list size */
+ g_signal_connect (priv->gsettings_ui,
+ "changed::" EMPATHY_PREFS_UI_COMPACT_CONTACT_LIST,
+ G_CALLBACK (roster_window_notify_contact_list_size_cb), window);
+
+ g_signal_connect (priv->gsettings_ui,
+ "changed::" EMPATHY_PREFS_UI_SHOW_AVATARS,
+ G_CALLBACK (roster_window_notify_contact_list_size_cb),
+ window);
+
+ roster_window_notify_contact_list_size_cb (priv->gsettings_ui,
+ EMPATHY_PREFS_UI_SHOW_AVATARS, window);