static void got_messages_for_date_cb (GObject *manager, GAsyncResult *result, gpointer user_data) { EmpathyLogWindow *window = user_data; GList *messages; GList *l; gboolean can_do_previous; gboolean can_do_next; GError *error = NULL; if (log_window == NULL) return; if (!tpl_log_manager_get_messages_for_date_finish (TPL_LOG_MANAGER (manager), result, &messages, &error)) { DEBUG ("Unable to retrieve messages for the selected date: %s. Aborting", error->message); empathy_chat_view_append_event (window->chatview_find, "Unable to retrieve messages for the selected date"); g_error_free (error); return; } for (l = messages; l; l = l->next) { EmpathyMessage *message; g_assert (TPL_IS_ENTRY (l->data)); message = empathy_message_from_tpl_log_entry (l->data); g_object_unref (l->data); empathy_chat_view_append_message (window->chatview_find, message); g_object_unref (message); } g_list_free (messages); /* Scroll to the most recent messages */ empathy_chat_view_scroll (window->chatview_find, TRUE); /* Highlight and find messages */ empathy_chat_view_highlight (window->chatview_find, window->last_find, FALSE); empathy_chat_view_find_next (window->chatview_find, window->last_find, TRUE, FALSE); empathy_chat_view_find_abilities (window->chatview_find, window->last_find, FALSE, &can_do_previous, &can_do_next); gtk_widget_set_sensitive (window->button_previous, can_do_previous); gtk_widget_set_sensitive (window->button_next, can_do_next); gtk_widget_set_sensitive (window->button_find, FALSE); }
static void log_window_button_previous_clicked_cb (GtkWidget *widget, EmpathyLogWindow *window) { if (window->last_find) { gboolean can_do_previous; gboolean can_do_next; empathy_chat_view_find_previous (window->chatview_find, window->last_find, FALSE); empathy_chat_view_find_abilities (window->chatview_find, window->last_find, &can_do_previous, &can_do_next); gtk_widget_set_sensitive (window->button_previous, can_do_previous); gtk_widget_set_sensitive (window->button_next, can_do_next); } }
static void empathy_search_bar_update_buttons (EmpathySearchBar *self, gchar *search, gboolean match_case) { gboolean can_go_forward = FALSE; gboolean can_go_backward = FALSE; EmpathySearchBarPriv* priv = GET_PRIV (self); /* update previous / next buttons */ empathy_chat_view_find_abilities (priv->chat_view, search, match_case, &can_go_backward, &can_go_forward); gtk_widget_set_sensitive (priv->search_previous, can_go_backward && !EMP_STR_EMPTY (search)); gtk_widget_set_sensitive (priv->search_next, can_go_forward && !EMP_STR_EMPTY (search)); }
static void log_window_find_changed_cb (GtkTreeSelection *selection, EmpathyLogWindow *window) { GtkTreeView *view; GtkTreeModel *model; GtkTreeIter iter; EmpathyAccount *account; gchar *chat_id; gboolean is_chatroom; gchar *date; EmpathyMessage *message; GList *messages; GList *l; gboolean can_do_previous; gboolean can_do_next; /* Get selected information */ view = GTK_TREE_VIEW (window->treeview_find); model = gtk_tree_view_get_model (view); if (!gtk_tree_selection_get_selected (selection, NULL, &iter)) { gtk_widget_set_sensitive (window->button_previous, FALSE); gtk_widget_set_sensitive (window->button_next, FALSE); empathy_chat_view_clear (window->chatview_find); return; } gtk_widget_set_sensitive (window->button_previous, TRUE); gtk_widget_set_sensitive (window->button_next, TRUE); gtk_tree_model_get (model, &iter, COL_FIND_ACCOUNT, &account, COL_FIND_CHAT_ID, &chat_id, COL_FIND_IS_CHATROOM, &is_chatroom, COL_FIND_DATE, &date, -1); /* Clear all current messages shown in the textview */ empathy_chat_view_clear (window->chatview_find); /* Turn off scrolling temporarily */ empathy_chat_view_scroll (window->chatview_find, FALSE); /* Get messages */ messages = empathy_log_manager_get_messages_for_date (window->log_manager, account, chat_id, is_chatroom, date); g_object_unref (account); g_free (date); g_free (chat_id); for (l = messages; l; l = l->next) { message = l->data; empathy_chat_view_append_message (window->chatview_find, message); g_object_unref (message); } g_list_free (messages); /* Scroll to the most recent messages */ empathy_chat_view_scroll (window->chatview_find, TRUE); /* Highlight and find messages */ empathy_chat_view_highlight (window->chatview_find, window->last_find); empathy_chat_view_find_next (window->chatview_find, window->last_find, TRUE); empathy_chat_view_find_abilities (window->chatview_find, window->last_find, &can_do_previous, &can_do_next); gtk_widget_set_sensitive (window->button_previous, can_do_previous); gtk_widget_set_sensitive (window->button_next, can_do_next); gtk_widget_set_sensitive (window->button_find, FALSE); }