diff options
-rw-r--r-- | libempathy-gtk/empathy-contact-list-view.c | 16 | ||||
-rw-r--r-- | src/empathy-chat-window.c | 19 |
2 files changed, 22 insertions, 13 deletions
diff --git a/libempathy-gtk/empathy-contact-list-view.c b/libempathy-gtk/empathy-contact-list-view.c index 0dc5cba14..0a9b260f8 100644 --- a/libempathy-gtk/empathy-contact-list-view.c +++ b/libempathy-gtk/empathy-contact-list-view.c @@ -65,6 +65,7 @@ typedef struct { EmpathyContactListFeatureFlags list_features; EmpathyContactFeatureFlags contact_features; GtkWidget *tooltip_widget; + GtkTargetList *file_targets; } EmpathyContactListViewPriv; typedef struct { @@ -417,7 +418,6 @@ contact_list_view_drag_motion (GtkWidget *widget, { EmpathyContactListViewPriv *priv; GtkTreeModel *model; - static GtkTargetList *file_targets = NULL; GdkAtom target; GtkTreeIter iter; static DragMotionData *dm = NULL; @@ -430,11 +430,6 @@ contact_list_view_drag_motion (GtkWidget *widget, priv = GET_PRIV (EMPATHY_CONTACT_LIST_VIEW (widget)); model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget)); - if (file_targets == NULL) { - file_targets = gtk_target_list_new (drag_types_dest_file, - G_N_ELEMENTS (drag_types_dest_file)); - } - is_row = gtk_tree_view_get_path_at_pos (GTK_TREE_VIEW (widget), x, y, @@ -460,7 +455,7 @@ contact_list_view_drag_motion (GtkWidget *widget, gtk_tree_view_set_drag_dest_row (GTK_TREE_VIEW (widget), NULL, 0); return FALSE; } - target = gtk_drag_dest_find_target (widget, context, file_targets); + target = gtk_drag_dest_find_target (widget, context, priv->file_targets); gtk_tree_model_get_iter (model, &iter, path); if (target == GDK_NONE) { @@ -1266,6 +1261,9 @@ contact_list_view_finalize (GObject *object) if (priv->tooltip_widget) { gtk_widget_destroy (priv->tooltip_widget); } + if (priv->file_targets) { + gtk_target_list_unref (priv->file_targets); + } G_OBJECT_CLASS (empathy_contact_list_view_parent_class)->finalize (object); } @@ -1396,6 +1394,10 @@ empathy_contact_list_view_init (EmpathyContactListView *view) empathy_contact_list_store_row_separator_func, NULL, NULL); + /* Set up drag target lists. */ + priv->file_targets = gtk_target_list_new (drag_types_dest_file, + G_N_ELEMENTS (drag_types_dest_file)); + /* Connect to tree view signals rather than override. */ g_signal_connect (view, "button-press-event", G_CALLBACK (contact_list_view_button_press_event_cb), diff --git a/src/empathy-chat-window.c b/src/empathy-chat-window.c index a6bd5f259..cd2aeaffe 100644 --- a/src/empathy-chat-window.c +++ b/src/empathy-chat-window.c @@ -80,6 +80,8 @@ typedef struct { NotifyNotification *notification; NotificationData *notification_data; + GtkTargetList *move_targets; + /* Menu items. */ GtkUIManager *ui_manager; GtkAction *menu_conv_insert_smiley; @@ -1335,15 +1337,12 @@ chat_window_drag_motion (GtkWidget *widget, guint time, EmpathyChatWindow *window) { - static GtkTargetList *list = NULL; GdkAtom target; + EmpathyChatWindowPriv *priv; - if (list == NULL) { - list = gtk_target_list_new (drag_types_dest_move, - G_N_ELEMENTS (drag_types_dest_move)); - } + priv = GET_PRIV (window); - target = gtk_drag_dest_find_target (widget, context, list); + target = gtk_drag_dest_find_target (widget, context, priv->move_targets); /* If target != GDK_NONE, this target type is a type we should move instead of copy. That's a notebook tab. Other drag types, such as files or contacts, use copy. @@ -1518,6 +1517,10 @@ chat_window_finalize (GObject *object) } } + if (priv->move_targets) { + gtk_target_list_unref (priv->move_targets); + } + chat_windows = g_list_remove (chat_windows, window); gtk_widget_destroy (priv->dialog); @@ -1629,6 +1632,10 @@ empathy_chat_window_init (EmpathyChatWindow *window) g_object_unref (accel_group); + /* Set up drag target lists */ + priv->move_targets = gtk_target_list_new (drag_types_dest_move, + G_N_ELEMENTS (drag_types_dest_move)); + /* Set up smiley menu */ smiley_manager = empathy_smiley_manager_dup_singleton (); submenu = empathy_smiley_menu_new (smiley_manager, |