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); }
void empathy_search_bar_hide (EmpathySearchBar *self) { EmpathySearchBarPriv *priv = GET_PRIV (self); empathy_chat_view_highlight (priv->chat_view, "", FALSE); gtk_widget_hide (GTK_WIDGET (self)); /* give the focus back to the focus-chain with the chat view */ gtk_widget_grab_focus (GTK_WIDGET (priv->chat_view)); }
static void log_window_entry_chats_changed_cb (GtkWidget *entry, EmpathyLogWindow *window) { const gchar *str; str = gtk_entry_get_text (GTK_ENTRY (window->entry_chats)); empathy_chat_view_highlight (window->chatview_chats, str); if (str) { empathy_chat_view_find_next (window->chatview_chats, str, TRUE); } }
static void empathy_search_bar_update (EmpathySearchBar *self) { gchar *search; gboolean match_case; EmpathySearchBarPriv *priv = GET_PRIV (self); search = gtk_editable_get_chars (GTK_EDITABLE(priv->search_entry), 0, -1); match_case = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON (priv->search_match_case)); /* highlight & search */ empathy_chat_view_highlight (priv->chat_view, search, match_case); /* update the buttons */ empathy_search_bar_update_buttons (self, search, match_case); g_free (search); }
static void empathy_search_bar_search (EmpathySearchBar *self, gboolean next, gboolean new_search) { gchar *search; gboolean found; gboolean match_case; EmpathySearchBarPriv *priv; priv = GET_PRIV (self); search = gtk_editable_get_chars (GTK_EDITABLE(priv->search_entry), 0, -1); match_case = gtk_toggle_button_get_active ( GTK_TOGGLE_BUTTON (priv->search_match_case)); /* highlight & search */ empathy_chat_view_highlight (priv->chat_view, search, match_case); if (next) { found = empathy_chat_view_find_next (priv->chat_view, search, new_search, match_case); } else { found = empathy_chat_view_find_previous (priv->chat_view, search, new_search, match_case); } /* (don't) display the not found label */ gtk_widget_set_visible (priv->search_not_found, !(found || EMP_STR_EMPTY (search))); /* update the buttons */ empathy_search_bar_update_buttons (self, search, match_case); g_free (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); }