View | Details | Raw Unified
Collapse All | Expand All

(-) branches/gnome-2-22/widgets/misc/e-filter-bar.c (-10 / +31 lines)
 Lines 3889-3907    Link Here 
	if (expr == NULL) {
	if (expr == NULL) {
		uids = camel_folder_get_uids (m->folder);
		uids = camel_folder_get_uids (m->folder);
	} else {
	} else {
		char *tmp_expr = NULL;
		searchuids = uids = camel_folder_search_by_expression (m->folder, expr, &m->base.ex);
		/* If m->changes is not NULL, then it means we are called from folder_changed event,
		/* If m->changes is not NULL, then it means we are called from folder_changed event,
		   thus we will keep the selected message to be sure it doesn't disappear because
		   thus we will keep the selected message to be sure it doesn't disappear because
		   it no longer belong to our search filter. */
		   it no longer belong to our search filter. */
		if (m->changes && m->ml->search && m->ml->cursor_uid) {
		if (m->changes && m->ml->search && m->ml->cursor_uid && uids) {
			tmp_expr = g_strdup_printf ("(or %s (match-all (uid \"%s\")))", expr, m->ml->cursor_uid);
			for (i = 0; i < uids->len; i++) {
			expr = tmp_expr;
				if (g_str_equal (m->ml->cursor_uid, uids->pdata [i]))
		}
					break;
			}
		searchuids = uids = camel_folder_search_by_expression (m->folder, expr, &m->base.ex);
			/* cursor_uid has been filtered out */
			if (i == uids->len) {
				gboolean was_deleted = (camel_folder_get_message_flags (m->folder, m->ml->cursor_uid) & CAMEL_MESSAGE_DELETED) != 0;
				/* I would really like to check for CAMEL_MESSAGE_FOLDER_FLAGGED on a message,
				   so I would know whether it was changed locally, and then just check the changes
				   struct whether change came from the server, but with periodical save it doesn't
				   matter. So here just check whether the file was deleted and we show it based
				   on the flag whether we can view deleted messages or not. */
		g_free (tmp_expr);
				if (!was_deleted || (was_deleted && !m->hidedel))
					g_ptr_array_add (uids, g_strdup (m->ml->cursor_uid));
			}
		}
	}
	}
	if (camel_exception_is_set (&m->base.ex))
	if (camel_exception_is_set (&m->base.ex))
 Lines 4182-4187    Link Here 
	struct _regen_list_msg *m;
	struct _regen_list_msg *m;
	GConfClient *gconf;
	GConfClient *gconf;
	/* report empty search as NULL, not as one/two-space string */
	if (search && (strcmp (search, " ") == 0 || strcmp (search, "  ") == 0))
		search = NULL;
	if (ml->folder == NULL) {
	if (ml->folder == NULL) {
		if (ml->search != search) {
		if (ml->search != search) {
			g_free(ml->search);
			g_free(ml->search);
 Lines 592-599    Link Here 
	ESearchBar *esb = E_SEARCH_BAR (object);
	ESearchBar *esb = E_SEARCH_BAR (object);
	switch (property_id) {
	switch (property_id) {
	case PROP_QUERY:
	case PROP_QUERY: {
		if (efb->current_query) {
		char *text = e_search_bar_get_text (E_SEARCH_BAR (efb));
		/* empty search text means searching turned off */
		if (efb->current_query && text && *text) {
			GString *out = g_string_new ("");
			GString *out = g_string_new ("");
			filter_rule_build_code (efb->current_query, out);
			filter_rule_build_code (efb->current_query, out);
 Lines 602-608    Link Here 
		} else {
		} else {
			g_value_set_string (value, NULL);
			g_value_set_string (value, NULL);
		}
		}
		break;
		g_free (text);
		break; }
	case PROP_STATE: {
	case PROP_STATE: {
		/* FIXME: we should have ESearchBar save its own state to the xmlDocPtr */
		/* FIXME: we should have ESearchBar save its own state to the xmlDocPtr */
		xmlChar *xmlbuf;
		xmlChar *xmlbuf;