X-Git-Url: https://git.0d.be/?p=empathy.git;a=blobdiff_plain;f=libempathy-gtk%2Fempathy-individual-view.c;h=90618997d36e1295c2f388681b341a235fd24315;hp=3cd1500a8b496d3ff4fb4f0a4ca14fb4d637d1e2;hb=6048958136681930af236460e9cb159b5267c4d0;hpb=5bb2c1c62a06e682ab48d530cae5f9614a90a75e diff --git a/libempathy-gtk/empathy-individual-view.c b/libempathy-gtk/empathy-individual-view.c index 3cd1500a..90618997 100644 --- a/libempathy-gtk/empathy-individual-view.c +++ b/libempathy-gtk/empathy-individual-view.c @@ -46,7 +46,7 @@ #include "empathy-individual-view.h" #include "empathy-individual-menu.h" #include "empathy-individual-store.h" -#include "empathy-contact-dialogs.h" +#include "empathy-individual-edit-dialog.h" #include "empathy-individual-dialogs.h" #include "empathy-images.h" #include "empathy-linking-dialog.h" @@ -219,8 +219,10 @@ individual_view_query_tooltip_cb (EmpathyIndividualView *view, EMPATHY_INDIVIDUAL_WIDGET_SHOW_CLIENT_TYPES); gtk_container_set_border_width (GTK_CONTAINER (priv->tooltip_widget), 8); g_object_ref (priv->tooltip_widget); - g_signal_connect (priv->tooltip_widget, "destroy", - G_CALLBACK (individual_view_tooltip_destroy_cb), view); + + tp_g_signal_connect_object (priv->tooltip_widget, "destroy", + G_CALLBACK (individual_view_tooltip_destroy_cb), view, 0); + gtk_widget_show (priv->tooltip_widget); } else @@ -890,6 +892,12 @@ individual_view_drag_end (GtkWidget *widget, gtk_tree_row_reference_free (priv->drag_row); priv->drag_row = NULL; } + + if (priv->auto_scroll_timeout_id != 0) + { + g_source_remove (priv->auto_scroll_timeout_id); + priv->auto_scroll_timeout_id = 0; + } } static gboolean @@ -988,7 +996,6 @@ individual_view_key_press_event_cb (EmpathyIndividualView *view, g_idle_add (individual_view_popup_menu_idle_cb, data); } else if (event->keyval == GDK_KEY_F2) { FolksIndividual *individual; - EmpathyContact *contact; g_return_val_if_fail (EMPATHY_IS_INDIVIDUAL_VIEW (view), FALSE); @@ -996,15 +1003,9 @@ individual_view_key_press_event_cb (EmpathyIndividualView *view, if (individual == NULL) return FALSE; - contact = empathy_contact_dup_from_folks_individual (individual); - if (contact == NULL) { - g_object_unref (individual); - return FALSE; - } - empathy_contact_edit_dialog_show (contact, NULL); + empathy_individual_edit_dialog_show (individual, NULL); g_object_unref (individual); - g_object_unref (contact); } return FALSE; @@ -1080,12 +1081,12 @@ individual_view_call_activated_cb (EmpathyCellRendererActivatable *cell, shell = GTK_MENU_SHELL (menu); /* audio */ - item = empathy_individual_audio_call_menu_item_new (individual, NULL); + item = empathy_individual_audio_call_menu_item_new (individual); gtk_menu_shell_append (shell, item); gtk_widget_show (item); /* video */ - item = empathy_individual_video_call_menu_item_new (individual, NULL); + item = empathy_individual_video_call_menu_item_new (individual); gtk_menu_shell_append (shell, item); gtk_widget_show (item); @@ -1642,54 +1643,6 @@ individual_view_row_has_child_toggled_cb (GtkTreeModel *model, g_free (name); } -/* FIXME: This is a workaround for bgo#621076 */ -static void -individual_view_verify_group_visibility (EmpathyIndividualView *view, - GtkTreePath *path) -{ - EmpathyIndividualViewPriv *priv = GET_PRIV (view); - GtkTreeModel *model; - GtkTreePath *parent_path; - GtkTreeIter parent_iter; - - if (gtk_tree_path_get_depth (path) < 2) - return; - - /* A group row is visible if and only if at least one if its child is visible. - * So when a row is inserted/deleted/changed in the base model, that could - * modify the visibility of its parent in the filter model. - */ - - model = GTK_TREE_MODEL (priv->store); - parent_path = gtk_tree_path_copy (path); - gtk_tree_path_up (parent_path); - if (gtk_tree_model_get_iter (model, &parent_iter, parent_path)) - { - /* This tells the filter to verify the visibility of that row, and - * show/hide it if necessary */ - gtk_tree_model_row_changed (GTK_TREE_MODEL (priv->store), - parent_path, &parent_iter); - } - gtk_tree_path_free (parent_path); -} - -static void -individual_view_store_row_changed_cb (GtkTreeModel *model, - GtkTreePath *path, - GtkTreeIter *iter, - EmpathyIndividualView *view) -{ - individual_view_verify_group_visibility (view, path); -} - -static void -individual_view_store_row_deleted_cb (GtkTreeModel *model, - GtkTreePath *path, - EmpathyIndividualView *view) -{ - individual_view_verify_group_visibility (view, path); -} - static gboolean individual_view_is_visible_individual (EmpathyIndividualView *self, FolksIndividual *individual, @@ -1820,14 +1773,6 @@ individual_view_filter_visible_func (GtkTreeModel *model, g_object_unref (individual); g_free (group); - /* FIXME: Work around bgo#626552/bgo#621076 */ - if (visible) - { - GtkTreePath *path = gtk_tree_model_get_path (model, iter); - individual_view_verify_group_visibility (self, path); - gtk_tree_path_free (path); - } - return visible; } @@ -2650,7 +2595,8 @@ empathy_individual_view_get_individual_menu (EmpathyIndividualView *view) } g_clear_object (&iter); - menu = empathy_individual_menu_new (individual, priv->individual_features); + menu = empathy_individual_menu_new (individual, priv->individual_features, + priv->store); /* Remove contact */ if ((priv->view_features & @@ -2824,11 +2770,6 @@ empathy_individual_view_set_store (EmpathyIndividualView *self, /* Destroy the old filter and remove the old store */ if (priv->store != NULL) { - g_signal_handlers_disconnect_by_func (priv->store, - individual_view_store_row_changed_cb, self); - g_signal_handlers_disconnect_by_func (priv->store, - individual_view_store_row_deleted_cb, self); - g_signal_handlers_disconnect_by_func (priv->filter, individual_view_row_has_child_toggled_cb, self); @@ -2855,13 +2796,6 @@ empathy_individual_view_set_store (EmpathyIndividualView *self, G_CALLBACK (individual_view_row_has_child_toggled_cb), self); gtk_tree_view_set_model (GTK_TREE_VIEW (self), GTK_TREE_MODEL (priv->filter)); - - tp_g_signal_connect_object (priv->store, "row-changed", - G_CALLBACK (individual_view_store_row_changed_cb), self, 0); - tp_g_signal_connect_object (priv->store, "row-inserted", - G_CALLBACK (individual_view_store_row_changed_cb), self, 0); - tp_g_signal_connect_object (priv->store, "row-deleted", - G_CALLBACK (individual_view_store_row_deleted_cb), self, 0); } }