Accepting request 481368 from GNOME:Factory
Update to 3.24.0 (forwarded request 481283 from dimstar) OBS-URL: https://build.opensuse.org/request/show/481368 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/evolution?expand=0&rev=194
This commit is contained in:
commit
3711cb92c1
@ -1,3 +0,0 @@
|
|||||||
version https://git-lfs.github.com/spec/v1
|
|
||||||
oid sha256:e2f111f6c59fdd1fd2e5ea43aa7e081327285c336fadb1c0f6a912487001b1f0
|
|
||||||
size 12287328
|
|
3
evolution-3.24.0.tar.xz
Normal file
3
evolution-3.24.0.tar.xz
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:50813222ecf5593b526fedb7b88748df9d58f3417d6c999f59d6f420e80c8514
|
||||||
|
size 12123644
|
@ -1,548 +0,0 @@
|
|||||||
From cffd6b51eca9fecd39a760c07da526d8ea4b98c4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Mike Gorse <mgorse@suse.com>
|
|
||||||
Date: Wed, 11 Jan 2017 19:56:48 +0100
|
|
||||||
Subject: [PATCH] Bug 774494 - ENameSelectorDialog slow with large address
|
|
||||||
books
|
|
||||||
|
|
||||||
Wait until contacts are fetched before attaching a GtkTreeModelSort.
|
|
||||||
Similarly, when changing the view during a search, detach the
|
|
||||||
GtkTreeModelSort while updating the tree view, and use a hash table
|
|
||||||
to temporarily store contacts, as this speeds up searching.
|
|
||||||
|
|
||||||
Also, in ETreeModelStore, add a cache to optimize
|
|
||||||
generated_offset_to_child_offset to avoid needing to iterate through the
|
|
||||||
whole list to count rows when a value is needed.
|
|
||||||
---
|
|
||||||
src/e-util/e-contact-store.c | 81 ++++++++++++++++++++++++++++++++----
|
|
||||||
src/e-util/e-contact-store.h | 4 ++
|
|
||||||
src/e-util/e-name-selector-dialog.c | 83 ++++++++++++++++++++++++++++---------
|
|
||||||
src/e-util/e-tree-model-generator.c | 75 +++++++++++++++++++++++++++------
|
|
||||||
4 files changed, 202 insertions(+), 41 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/e-util/e-contact-store.c b/src/e-util/e-contact-store.c
|
|
||||||
index f81ffca..56c2b51 100644
|
|
||||||
--- a/src/e-util/e-contact-store.c
|
|
||||||
+++ b/src/e-util/e-contact-store.c
|
|
||||||
@@ -51,6 +51,8 @@ struct _EContactStorePrivate {
|
|
||||||
enum {
|
|
||||||
START_CLIENT_VIEW,
|
|
||||||
STOP_CLIENT_VIEW,
|
|
||||||
+ START_UPDATE,
|
|
||||||
+ STOP_UPDATE,
|
|
||||||
LAST_SIGNAL
|
|
||||||
};
|
|
||||||
|
|
||||||
@@ -182,6 +184,26 @@ e_contact_store_class_init (EContactStoreClass *class)
|
|
||||||
g_cclosure_marshal_VOID__OBJECT,
|
|
||||||
G_TYPE_NONE, 1,
|
|
||||||
E_TYPE_BOOK_CLIENT_VIEW);
|
|
||||||
+
|
|
||||||
+ signals[START_UPDATE] = g_signal_new (
|
|
||||||
+ "start-update",
|
|
||||||
+ G_OBJECT_CLASS_TYPE (object_class),
|
|
||||||
+ G_SIGNAL_RUN_LAST,
|
|
||||||
+ G_STRUCT_OFFSET (EContactStoreClass, start_update),
|
|
||||||
+ NULL, NULL,
|
|
||||||
+ g_cclosure_marshal_VOID__OBJECT,
|
|
||||||
+ G_TYPE_NONE, 1,
|
|
||||||
+ E_TYPE_BOOK_CLIENT_VIEW);
|
|
||||||
+
|
|
||||||
+ signals[STOP_UPDATE] = g_signal_new (
|
|
||||||
+ "stop-update",
|
|
||||||
+ G_OBJECT_CLASS_TYPE (object_class),
|
|
||||||
+ G_SIGNAL_RUN_LAST,
|
|
||||||
+ G_STRUCT_OFFSET (EContactStoreClass, stop_update),
|
|
||||||
+ NULL, NULL,
|
|
||||||
+ g_cclosure_marshal_VOID__OBJECT,
|
|
||||||
+ G_TYPE_NONE, 1,
|
|
||||||
+ E_TYPE_BOOK_CLIENT_VIEW);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
@@ -435,6 +457,42 @@ find_contact_by_view_and_uid (EContactStore *contact_store,
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static GHashTable *
|
|
||||||
+get_contact_hash (EContactStore *contact_store,
|
|
||||||
+ EBookClientView *find_view)
|
|
||||||
+{
|
|
||||||
+ GArray *array;
|
|
||||||
+ ContactSource *source;
|
|
||||||
+ GPtrArray *contacts;
|
|
||||||
+ gint source_index;
|
|
||||||
+ gint ii;
|
|
||||||
+ GHashTable *hash;
|
|
||||||
+
|
|
||||||
+ source_index = find_contact_source_by_view (contact_store, find_view);
|
|
||||||
+ if (source_index < 0)
|
|
||||||
+ return NULL;
|
|
||||||
+
|
|
||||||
+ array = contact_store->priv->contact_sources;
|
|
||||||
+ source = &g_array_index (array, ContactSource, source_index);
|
|
||||||
+
|
|
||||||
+ if (find_view == source->client_view)
|
|
||||||
+ contacts = source->contacts; /* Current view */
|
|
||||||
+ else
|
|
||||||
+ contacts = source->contacts_pending; /* Pending view */
|
|
||||||
+
|
|
||||||
+ hash = g_hash_table_new (g_str_hash, g_str_equal);
|
|
||||||
+
|
|
||||||
+ for (ii = 0; ii < contacts->len; ii++) {
|
|
||||||
+ EContact *contact = g_ptr_array_index (contacts, ii);
|
|
||||||
+ const gchar *uid = e_contact_get_const (contact, E_CONTACT_UID);
|
|
||||||
+
|
|
||||||
+ if (uid)
|
|
||||||
+ g_hash_table_insert (hash, (gpointer) uid, GINT_TO_POINTER (ii));
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ return hash;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static gint
|
|
||||||
find_contact_by_uid (EContactStore *contact_store,
|
|
||||||
const gchar *find_uid)
|
|
||||||
@@ -647,6 +705,7 @@ view_complete (EContactStore *contact_store,
|
|
||||||
ContactSource *source;
|
|
||||||
gint offset;
|
|
||||||
gint i;
|
|
||||||
+ GHashTable *hash;
|
|
||||||
|
|
||||||
if (!find_contact_source_details_by_view (contact_store, client_view, &source, &offset)) {
|
|
||||||
g_warning ("EContactStore got 'complete' signal from unknown EBookClientView!");
|
|
||||||
@@ -662,18 +721,17 @@ view_complete (EContactStore *contact_store,
|
|
||||||
g_return_if_fail (client_view == source->client_view_pending);
|
|
||||||
|
|
||||||
/* However, if it was a pending view, calculate and emit the differences between that
|
|
||||||
- * and the current view, and move the pending view up to current.
|
|
||||||
- *
|
|
||||||
- * This is O(m * n), and can be sped up with a temporary hash table if needed. */
|
|
||||||
+ * and the current view, and move the pending view up to current. */
|
|
||||||
+
|
|
||||||
+ g_signal_emit (contact_store, signals[START_UPDATE], 0, client_view);
|
|
||||||
|
|
||||||
/* Deletions */
|
|
||||||
+ hash = get_contact_hash (contact_store, source->client_view_pending);
|
|
||||||
for (i = 0; i < source->contacts->len; i++) {
|
|
||||||
EContact *old_contact = g_ptr_array_index (source->contacts, i);
|
|
||||||
const gchar *old_uid = e_contact_get_const (old_contact, E_CONTACT_UID);
|
|
||||||
- gint result;
|
|
||||||
|
|
||||||
- result = find_contact_by_view_and_uid (contact_store, source->client_view_pending, old_uid);
|
|
||||||
- if (result < 0) {
|
|
||||||
+ if (!g_hash_table_contains (hash, old_uid)) {
|
|
||||||
/* Contact is not in new view; removed */
|
|
||||||
g_object_unref (old_contact);
|
|
||||||
g_ptr_array_remove_index (source->contacts, i);
|
|
||||||
@@ -681,15 +739,15 @@ view_complete (EContactStore *contact_store,
|
|
||||||
i--; /* Stay in place */
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+ g_hash_table_unref (hash);
|
|
||||||
|
|
||||||
/* Insertions */
|
|
||||||
+ hash = get_contact_hash (contact_store, source->client_view);
|
|
||||||
for (i = 0; i < source->contacts_pending->len; i++) {
|
|
||||||
EContact *new_contact = g_ptr_array_index (source->contacts_pending, i);
|
|
||||||
const gchar *new_uid = e_contact_get_const (new_contact, E_CONTACT_UID);
|
|
||||||
- gint result;
|
|
||||||
|
|
||||||
- result = find_contact_by_view_and_uid (contact_store, source->client_view, new_uid);
|
|
||||||
- if (result < 0) {
|
|
||||||
+ if (!g_hash_table_contains (hash, new_uid)) {
|
|
||||||
/* Contact is not in old view; inserted */
|
|
||||||
g_ptr_array_add (source->contacts, new_contact);
|
|
||||||
row_inserted (contact_store, offset + source->contacts->len - 1);
|
|
||||||
@@ -698,6 +756,9 @@ view_complete (EContactStore *contact_store,
|
|
||||||
g_object_unref (new_contact);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+ g_hash_table_unref (hash);
|
|
||||||
+
|
|
||||||
+ g_signal_emit (contact_store, signals[STOP_UPDATE], 0, client_view);
|
|
||||||
|
|
||||||
/* Move pending view up to current */
|
|
||||||
stop_view (contact_store, source->client_view);
|
|
||||||
@@ -805,6 +866,7 @@ clear_contact_source (EContactStore *contact_store,
|
|
||||||
GtkTreePath *path = gtk_tree_path_new ();
|
|
||||||
gint i;
|
|
||||||
|
|
||||||
+ g_signal_emit (contact_store, signals[START_UPDATE], 0, source->client_view);
|
|
||||||
gtk_tree_path_append_index (path, source->contacts->len);
|
|
||||||
|
|
||||||
for (i = source->contacts->len - 1; i >= 0; i--) {
|
|
||||||
@@ -818,6 +880,7 @@ clear_contact_source (EContactStore *contact_store,
|
|
||||||
}
|
|
||||||
|
|
||||||
gtk_tree_path_free (path);
|
|
||||||
+ g_signal_emit (contact_store, signals[STOP_UPDATE], 0, source->client_view);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Free main and pending views, clear cached contacts */
|
|
||||||
diff --git a/src/e-util/e-contact-store.h b/src/e-util/e-contact-store.h
|
|
||||||
index f6a5ead..4d25f7a 100644
|
|
||||||
--- a/src/e-util/e-contact-store.h
|
|
||||||
+++ b/src/e-util/e-contact-store.h
|
|
||||||
@@ -67,6 +67,10 @@ struct _EContactStoreClass {
|
|
||||||
EBookClientView *client_view);
|
|
||||||
void (*stop_client_view) (EContactStore *contact_store,
|
|
||||||
EBookClientView *client_view);
|
|
||||||
+ void (*start_update) (EContactStore *contact_store,
|
|
||||||
+ EBookClientView *client_view);
|
|
||||||
+ void (*stop_update) (EContactStore *contact_store,
|
|
||||||
+ EBookClientView *client_view);
|
|
||||||
};
|
|
||||||
|
|
||||||
GType e_contact_store_get_type (void) G_GNUC_CONST;
|
|
||||||
diff --git a/src/e-util/e-name-selector-dialog.c b/src/e-util/e-name-selector-dialog.c
|
|
||||||
index f2db4d7..30e39fa 100644
|
|
||||||
--- a/src/e-util/e-name-selector-dialog.c
|
|
||||||
+++ b/src/e-util/e-name-selector-dialog.c
|
|
||||||
@@ -746,6 +746,44 @@ add_destination (ENameSelectorModel *name_selector_model,
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
+disable_sort (ENameSelectorDialog *dialog)
|
|
||||||
+{
|
|
||||||
+ if (dialog->priv->contact_sort) {
|
|
||||||
+ g_object_unref (dialog->priv->contact_sort);
|
|
||||||
+ dialog->priv->contact_sort = NULL;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ gtk_tree_view_set_model (
|
|
||||||
+ dialog->priv->contact_view,
|
|
||||||
+ NULL);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void
|
|
||||||
+enable_sort (ENameSelectorDialog *dialog)
|
|
||||||
+{
|
|
||||||
+ ETreeModelGenerator *contact_filter;
|
|
||||||
+
|
|
||||||
+ /* Get contact store and its filter wrapper */
|
|
||||||
+ contact_filter = e_name_selector_model_peek_contact_filter (
|
|
||||||
+ dialog->priv->name_selector_model);
|
|
||||||
+
|
|
||||||
+ /* Create sorting model on top of filter, assign it to view */
|
|
||||||
+ if (!dialog->priv->contact_sort) {
|
|
||||||
+ dialog->priv->contact_sort = GTK_TREE_MODEL_SORT (
|
|
||||||
+ gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (contact_filter)));
|
|
||||||
+
|
|
||||||
+ /* sort on full name as we display full name in name selector dialog */
|
|
||||||
+ gtk_tree_sortable_set_sort_column_id (
|
|
||||||
+ GTK_TREE_SORTABLE (dialog->priv->contact_sort),
|
|
||||||
+ E_CONTACT_FULL_NAME, GTK_SORT_ASCENDING);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ gtk_tree_view_set_model (
|
|
||||||
+ dialog->priv->contact_view,
|
|
||||||
+ GTK_TREE_MODEL (dialog->priv->contact_sort));
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void
|
|
||||||
remove_books (ENameSelectorDialog *name_selector_dialog)
|
|
||||||
{
|
|
||||||
EContactStore *contact_store;
|
|
||||||
@@ -771,8 +809,11 @@ remove_books (ENameSelectorDialog *name_selector_dialog)
|
|
||||||
g_object_unref (name_selector_dialog->priv->cancellable);
|
|
||||||
name_selector_dialog->priv->cancellable = NULL;
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ disable_sort (name_selector_dialog);
|
|
||||||
}
|
|
||||||
|
|
||||||
+
|
|
||||||
/* ------------------ *
|
|
||||||
* Section management *
|
|
||||||
* ------------------ */
|
|
||||||
@@ -1134,6 +1175,8 @@ view_complete (EBookClientView *view,
|
|
||||||
ENameSelectorDialog *dialog)
|
|
||||||
{
|
|
||||||
view_progress (view, -1, NULL, dialog);
|
|
||||||
+
|
|
||||||
+ enable_sort (dialog);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
@@ -1160,6 +1203,22 @@ stop_client_view_cb (EContactStore *store,
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
+start_update_cb (EContactStore *store,
|
|
||||||
+ EBookClientView *client_view,
|
|
||||||
+ ENameSelectorDialog *name_selector_dialog)
|
|
||||||
+{
|
|
||||||
+ disable_sort (name_selector_dialog);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void
|
|
||||||
+stop_update_cb (EContactStore *store,
|
|
||||||
+ EBookClientView *client_view,
|
|
||||||
+ ENameSelectorDialog *name_selector_dialog)
|
|
||||||
+{
|
|
||||||
+ enable_sort (name_selector_dialog);
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static void
|
|
||||||
name_selector_dialog_get_client_cb (GObject *source_object,
|
|
||||||
GAsyncResult *result,
|
|
||||||
gpointer user_data)
|
|
||||||
@@ -1589,7 +1648,6 @@ transfer_button_clicked (ENameSelectorDialog *name_selector_dialog,
|
|
||||||
static void
|
|
||||||
setup_name_selector_model (ENameSelectorDialog *name_selector_dialog)
|
|
||||||
{
|
|
||||||
- ETreeModelGenerator *contact_filter;
|
|
||||||
EContactStore *contact_store;
|
|
||||||
GList *new_sections;
|
|
||||||
GList *l;
|
|
||||||
@@ -1625,29 +1683,12 @@ setup_name_selector_model (ENameSelectorDialog *name_selector_dialog)
|
|
||||||
name_selector_dialog->priv->name_selector_model, "section-removed",
|
|
||||||
G_CALLBACK (model_section_removed), name_selector_dialog);
|
|
||||||
|
|
||||||
- /* Get contact store and its filter wrapper */
|
|
||||||
-
|
|
||||||
- contact_filter = e_name_selector_model_peek_contact_filter (
|
|
||||||
- name_selector_dialog->priv->name_selector_model);
|
|
||||||
-
|
|
||||||
- /* Create sorting model on top of filter, assign it to view */
|
|
||||||
-
|
|
||||||
- name_selector_dialog->priv->contact_sort = GTK_TREE_MODEL_SORT (
|
|
||||||
- gtk_tree_model_sort_new_with_model (GTK_TREE_MODEL (contact_filter)));
|
|
||||||
-
|
|
||||||
- /* sort on full name as we display full name in name selector dialog */
|
|
||||||
- gtk_tree_sortable_set_sort_column_id (
|
|
||||||
- GTK_TREE_SORTABLE (name_selector_dialog->priv->contact_sort),
|
|
||||||
- E_CONTACT_FULL_NAME, GTK_SORT_ASCENDING);
|
|
||||||
-
|
|
||||||
- gtk_tree_view_set_model (
|
|
||||||
- name_selector_dialog->priv->contact_view,
|
|
||||||
- GTK_TREE_MODEL (name_selector_dialog->priv->contact_sort));
|
|
||||||
-
|
|
||||||
contact_store = e_name_selector_model_peek_contact_store (name_selector_dialog->priv->name_selector_model);
|
|
||||||
if (contact_store) {
|
|
||||||
g_signal_connect (contact_store, "start-client-view", G_CALLBACK (start_client_view_cb), name_selector_dialog);
|
|
||||||
g_signal_connect (contact_store, "stop-client-view", G_CALLBACK (stop_client_view_cb), name_selector_dialog);
|
|
||||||
+ g_signal_connect (contact_store, "start-update", G_CALLBACK (start_update_cb), name_selector_dialog);
|
|
||||||
+ g_signal_connect (contact_store, "stop-update", G_CALLBACK (stop_update_cb), name_selector_dialog);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Make sure UI is consistent */
|
|
||||||
@@ -1684,6 +1725,8 @@ shutdown_name_selector_model (ENameSelectorDialog *name_selector_dialog)
|
|
||||||
if (contact_store) {
|
|
||||||
g_signal_handlers_disconnect_by_func (contact_store, start_client_view_cb, name_selector_dialog);
|
|
||||||
g_signal_handlers_disconnect_by_func (contact_store, stop_client_view_cb, name_selector_dialog);
|
|
||||||
+ g_signal_handlers_disconnect_by_func (contact_store, start_update_cb, name_selector_dialog);
|
|
||||||
+ g_signal_handlers_disconnect_by_func (contact_store, stop_update_cb, name_selector_dialog);
|
|
||||||
}
|
|
||||||
|
|
||||||
g_signal_handlers_disconnect_matched (
|
|
||||||
diff --git a/src/e-util/e-tree-model-generator.c b/src/e-util/e-tree-model-generator.c
|
|
||||||
index b8fe4a3..ec49712 100644
|
|
||||||
--- a/src/e-util/e-tree-model-generator.c
|
|
||||||
+++ b/src/e-util/e-tree-model-generator.c
|
|
||||||
@@ -56,8 +56,14 @@ struct _ETreeModelGeneratorPrivate {
|
|
||||||
|
|
||||||
ETreeModelGeneratorModifyFunc modify_func;
|
|
||||||
gpointer modify_func_data;
|
|
||||||
+ GSList *offset_cache;
|
|
||||||
};
|
|
||||||
|
|
||||||
+typedef struct {
|
|
||||||
+ gint offset;
|
|
||||||
+ gint index;
|
|
||||||
+} CacheItem;
|
|
||||||
+
|
|
||||||
static void e_tree_model_generator_tree_model_init (GtkTreeModelIface *iface);
|
|
||||||
|
|
||||||
G_DEFINE_TYPE_WITH_CODE (
|
|
||||||
@@ -192,6 +198,8 @@ tree_model_generator_finalize (GObject *object)
|
|
||||||
if (tree_model_generator->priv->root_nodes)
|
|
||||||
release_node_map (tree_model_generator->priv->root_nodes);
|
|
||||||
|
|
||||||
+ g_slist_free_full (tree_model_generator->priv->offset_cache, g_free);
|
|
||||||
+
|
|
||||||
/* Chain up to parent's finalize() method. */
|
|
||||||
G_OBJECT_CLASS (e_tree_model_generator_parent_class)->finalize (object);
|
|
||||||
}
|
|
||||||
@@ -300,15 +308,44 @@ row_changed (ETreeModelGenerator *tree_model_generator,
|
|
||||||
static gint
|
|
||||||
generated_offset_to_child_offset (GArray *group,
|
|
||||||
gint offset,
|
|
||||||
- gint *internal_offset)
|
|
||||||
+ gint *internal_offset,
|
|
||||||
+ GSList **cache_p)
|
|
||||||
{
|
|
||||||
gboolean success = FALSE;
|
|
||||||
gint accum_offset = 0;
|
|
||||||
gint i;
|
|
||||||
+ GSList *cache, *cache_last;
|
|
||||||
+ gint last_cached_offset;
|
|
||||||
+
|
|
||||||
+ i = 0;
|
|
||||||
+ cache = *cache_p;
|
|
||||||
+ cache_last = NULL;
|
|
||||||
+ last_cached_offset = 0;
|
|
||||||
+ for (; cache; cache = cache->next) {
|
|
||||||
+ CacheItem *item = cache->data;
|
|
||||||
+ cache_last = cache;
|
|
||||||
+ last_cached_offset = item->offset;
|
|
||||||
+ if (item->offset <= offset) {
|
|
||||||
+ i = item->index;
|
|
||||||
+ accum_offset = item->offset;
|
|
||||||
+ } else
|
|
||||||
+ break;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
- for (i = 0; i < group->len; i++) {
|
|
||||||
+ for (; i < group->len; i++) {
|
|
||||||
Node *node = &g_array_index (group, Node, i);
|
|
||||||
|
|
||||||
+ if (accum_offset - last_cached_offset > 500) {
|
|
||||||
+ CacheItem *item = g_malloc (sizeof (CacheItem));
|
|
||||||
+ item->offset = accum_offset;
|
|
||||||
+ item->index = i;
|
|
||||||
+ last_cached_offset = accum_offset;
|
|
||||||
+ if (cache_last)
|
|
||||||
+ cache_last = g_slist_last (g_slist_append (cache_last, item));
|
|
||||||
+ else
|
|
||||||
+ *cache_p = cache_last = g_slist_append (NULL, item);
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
accum_offset += node->n_generated;
|
|
||||||
if (accum_offset > offset) {
|
|
||||||
accum_offset -= node->n_generated;
|
|
||||||
@@ -395,6 +432,9 @@ build_node_map (ETreeModelGenerator *tree_model_generator,
|
|
||||||
GtkTreeIter iter;
|
|
||||||
gboolean result;
|
|
||||||
|
|
||||||
+ g_slist_free_full (tree_model_generator->priv->offset_cache, g_free);
|
|
||||||
+ tree_model_generator->priv->offset_cache = NULL;
|
|
||||||
+
|
|
||||||
if (parent_iter)
|
|
||||||
result = gtk_tree_model_iter_children (tree_model_generator->priv->child_model, &iter, parent_iter);
|
|
||||||
else
|
|
||||||
@@ -519,6 +559,9 @@ create_node_at_child_path (ETreeModelGenerator *tree_model_generator,
|
|
||||||
|
|
||||||
append_node (group);
|
|
||||||
|
|
||||||
+ g_slist_free_full (tree_model_generator->priv->offset_cache, g_free);
|
|
||||||
+ tree_model_generator->priv->offset_cache = NULL;
|
|
||||||
+
|
|
||||||
if (group->len - 1 - index > 0) {
|
|
||||||
gint i;
|
|
||||||
|
|
||||||
@@ -587,6 +630,9 @@ delete_node_at_child_path (ETreeModelGenerator *tree_model_generator,
|
|
||||||
Node *node;
|
|
||||||
gint i;
|
|
||||||
|
|
||||||
+ g_slist_free_full (tree_model_generator->priv->offset_cache, g_free);
|
|
||||||
+ tree_model_generator->priv->offset_cache = NULL;
|
|
||||||
+
|
|
||||||
parent_path = gtk_tree_path_copy (path);
|
|
||||||
gtk_tree_path_up (parent_path);
|
|
||||||
node = get_node_by_child_path (tree_model_generator, parent_path, &parent_group);
|
|
||||||
@@ -658,6 +704,11 @@ child_row_changed (ETreeModelGenerator *tree_model_generator,
|
|
||||||
gtk_tree_path_next (generated_path);
|
|
||||||
}
|
|
||||||
|
|
||||||
+ if (n_generated != node->n_generated) {
|
|
||||||
+ g_slist_free_full (tree_model_generator->priv->offset_cache, g_free);
|
|
||||||
+ tree_model_generator->priv->offset_cache = NULL;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
for (; i < node->n_generated; ) {
|
|
||||||
node->n_generated--;
|
|
||||||
row_deleted (tree_model_generator, generated_path);
|
|
||||||
@@ -946,7 +997,7 @@ e_tree_model_generator_convert_path_to_child_path (ETreeModelGenerator *tree_mod
|
|
||||||
}
|
|
||||||
|
|
||||||
index = gtk_tree_path_get_indices (generator_path)[depth];
|
|
||||||
- child_index = generated_offset_to_child_offset (group, index, NULL);
|
|
||||||
+ child_index = generated_offset_to_child_offset (group, index, NULL, &tree_model_generator->priv->offset_cache);
|
|
||||||
node = &g_array_index (group, Node, child_index);
|
|
||||||
group = node->child_nodes;
|
|
||||||
|
|
||||||
@@ -985,7 +1036,7 @@ e_tree_model_generator_convert_iter_to_child_iter (ETreeModelGenerator *tree_mod
|
|
||||||
path = gtk_tree_path_new ();
|
|
||||||
ITER_GET (generator_iter, &group, &index);
|
|
||||||
|
|
||||||
- index = generated_offset_to_child_offset (group, index, &internal_offset);
|
|
||||||
+ index = generated_offset_to_child_offset (group, index, &internal_offset, &tree_model_generator->priv->offset_cache);
|
|
||||||
gtk_tree_path_prepend_index (path, index);
|
|
||||||
|
|
||||||
while (group) {
|
|
||||||
@@ -1066,7 +1117,7 @@ e_tree_model_generator_get_iter (GtkTreeModel *tree_model,
|
|
||||||
gint child_index;
|
|
||||||
|
|
||||||
index = gtk_tree_path_get_indices (path)[depth];
|
|
||||||
- child_index = generated_offset_to_child_offset (group, index, NULL);
|
|
||||||
+ child_index = generated_offset_to_child_offset (group, index, NULL, &tree_model_generator->priv->offset_cache);
|
|
||||||
if (child_index < 0)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
@@ -1103,7 +1154,7 @@ e_tree_model_generator_get_path (GtkTreeModel *tree_model,
|
|
||||||
* lists, not sure about trees. */
|
|
||||||
|
|
||||||
gtk_tree_path_prepend_index (path, index);
|
|
||||||
- index = generated_offset_to_child_offset (group, index, NULL);
|
|
||||||
+ index = generated_offset_to_child_offset (group, index, NULL, &tree_model_generator->priv->offset_cache);
|
|
||||||
|
|
||||||
while (group) {
|
|
||||||
Node *node = &g_array_index (group, Node, index);
|
|
||||||
@@ -1135,7 +1186,7 @@ e_tree_model_generator_iter_next (GtkTreeModel *tree_model,
|
|
||||||
g_return_val_if_fail (ITER_IS_VALID (tree_model_generator, iter), FALSE);
|
|
||||||
|
|
||||||
ITER_GET (iter, &group, &index);
|
|
||||||
- child_index = generated_offset_to_child_offset (group, index, &internal_offset);
|
|
||||||
+ child_index = generated_offset_to_child_offset (group, index, &internal_offset, &tree_model_generator->priv->offset_cache);
|
|
||||||
node = &g_array_index (group, Node, child_index);
|
|
||||||
|
|
||||||
if (internal_offset + 1 < node->n_generated ||
|
|
||||||
@@ -1169,7 +1220,7 @@ e_tree_model_generator_iter_children (GtkTreeModel *tree_model,
|
|
||||||
}
|
|
||||||
|
|
||||||
ITER_GET (parent, &group, &index);
|
|
||||||
- index = generated_offset_to_child_offset (group, index, NULL);
|
|
||||||
+ index = generated_offset_to_child_offset (group, index, NULL, &tree_model_generator->priv->offset_cache);
|
|
||||||
if (index < 0)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
@@ -1205,7 +1256,7 @@ e_tree_model_generator_iter_has_child (GtkTreeModel *tree_model,
|
|
||||||
}
|
|
||||||
|
|
||||||
ITER_GET (iter, &group, &index);
|
|
||||||
- index = generated_offset_to_child_offset (group, index, NULL);
|
|
||||||
+ index = generated_offset_to_child_offset (group, index, NULL, &tree_model_generator->priv->offset_cache);
|
|
||||||
if (index < 0)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
@@ -1236,7 +1287,7 @@ e_tree_model_generator_iter_n_children (GtkTreeModel *tree_model,
|
|
||||||
count_generated_nodes (tree_model_generator->priv->root_nodes) : 0;
|
|
||||||
|
|
||||||
ITER_GET (iter, &group, &index);
|
|
||||||
- index = generated_offset_to_child_offset (group, index, NULL);
|
|
||||||
+ index = generated_offset_to_child_offset (group, index, NULL, &tree_model_generator->priv->offset_cache);
|
|
||||||
if (index < 0)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
@@ -1273,7 +1324,7 @@ e_tree_model_generator_iter_nth_child (GtkTreeModel *tree_model,
|
|
||||||
}
|
|
||||||
|
|
||||||
ITER_GET (parent, &group, &index);
|
|
||||||
- index = generated_offset_to_child_offset (group, index, NULL);
|
|
||||||
+ index = generated_offset_to_child_offset (group, index, NULL, &tree_model_generator->priv->offset_cache);
|
|
||||||
if (index < 0)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
@@ -1303,7 +1354,7 @@ e_tree_model_generator_iter_parent (GtkTreeModel *tree_model,
|
|
||||||
g_return_val_if_fail (ITER_IS_VALID (tree_model_generator, iter), FALSE);
|
|
||||||
|
|
||||||
ITER_GET (child, &group, &index);
|
|
||||||
- index = generated_offset_to_child_offset (group, index, NULL);
|
|
||||||
+ index = generated_offset_to_child_offset (group, index, NULL, &tree_model_generator->priv->offset_cache);
|
|
||||||
if (index < 0)
|
|
||||||
return FALSE;
|
|
||||||
|
|
||||||
--
|
|
||||||
2.6.6
|
|
||||||
|
|
@ -1,3 +1,186 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Mar 20 11:54:39 UTC 2017 - dimstar@opensuse.org
|
||||||
|
|
||||||
|
- Update to version 3.24.0:
|
||||||
|
+ Updated translations.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Mar 13 10:44:25 UTC 2017 - dimstar@opensuse.org
|
||||||
|
|
||||||
|
- Update to version 3.23.92:
|
||||||
|
+ e_msg_composer_setup_with_message: Doesn't use
|
||||||
|
override_alias_name/_address.
|
||||||
|
+ Fix various editor's unit tests.
|
||||||
|
+ Don't preserve 'Preformatted' format if moving an empty block
|
||||||
|
out of the quoted content.
|
||||||
|
+ Possible crash while refreshing spellcheck.
|
||||||
|
+ Print the history stack after removing item from it.
|
||||||
|
+ History could be saved twice if inserting HTML content.
|
||||||
|
+ Print current EEditorWebExtension method if CAMEL_DEBUG is
|
||||||
|
active.
|
||||||
|
+ Bugs fixed: bgo#778541, bgo#779156, bgo#779687, bgo#779688,
|
||||||
|
bgo#779738, bgo#779746.
|
||||||
|
+ Updated translations.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon Feb 27 12:40:23 UTC 2017 - zaitor@opensuse.org
|
||||||
|
|
||||||
|
- Update to version 3.23.91:
|
||||||
|
+ [EWeekdayChooser] Selected days drawn with incorrect color.
|
||||||
|
+ Bugs fixed: bgo#778642, bgo#779042.
|
||||||
|
+ Updated translations.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Feb 15 11:47:36 UTC 2017 - dimstar@opensuse.org
|
||||||
|
|
||||||
|
- Update to version 3.23.90:
|
||||||
|
+ Reference a link where Google calendars to synchronize can be
|
||||||
|
enabled.
|
||||||
|
+ Previous signatures with images not sent properly.
|
||||||
|
+ A minor translatable string change.
|
||||||
|
+ Fix few memory leaks.
|
||||||
|
+ e-editor-dom-functions: Do not override variable name from
|
||||||
|
parent block.
|
||||||
|
+ Bugs fixed: bgo#733336, bgo#747751, bgo#773038, bgo#775656,
|
||||||
|
bgo#776391, bgo#777207, bgo#777208, bgo#777267, bgo#777373,
|
||||||
|
bgo#777766, bgo#777818, bgo#777974, bgo#778036, bgo#778062,
|
||||||
|
bgo#778180, bgo#778223, bgo#778231, bgo#778347.
|
||||||
|
+ Updated translations.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Feb 15 03:23:04 UTC 2017 - dimstar@opensuse.org
|
||||||
|
|
||||||
|
- Update to version 3.23.4:
|
||||||
|
+ Fix a crash when deleting a meeting without DTEND.
|
||||||
|
+ Fix a use-after-free after editor's WebKitWebProcess crash.
|
||||||
|
+ Resave .ui files with latest glade and bump gtk+ requirement to
|
||||||
|
3.10.
|
||||||
|
+ Attached meeting invitations not shown properly.
|
||||||
|
+ Crash on paste of a vCard into a message composer body.
|
||||||
|
+ "Insert text file" sensitive to HTML-significant characters.
|
||||||
|
+ EWeekView could write out of rows_per_day array.
|
||||||
|
+ Replace deprecated icalproperty_remove_parameter() with
|
||||||
|
icalproperty_remove_parameter_by_kind().
|
||||||
|
+ Replace deprecated icaltime_from_timet() with
|
||||||
|
icaltime_from_timet_with_zone().
|
||||||
|
+ Show available server tags (aka possible Labels) in Folder
|
||||||
|
Properties.
|
||||||
|
+ Fix few memory leaks.
|
||||||
|
+ Use a single WebProcess for test-html-editor-units by default.
|
||||||
|
+ Fix few memory leaks when converting composer text to plain
|
||||||
|
text.
|
||||||
|
+ Avoid a (rather rare) crash under message-list.c::build_tree().
|
||||||
|
+ Destroy associated activity before Folder Properties dialog is
|
||||||
|
shown.
|
||||||
|
+ Bugs fixes: bgo#489466, bgo#773316, bgo#773419, bgo#773548,
|
||||||
|
bgo#774494, bgo#776044, bgo#776194, bgo#776224, bgo#776243,
|
||||||
|
bgo#776415, bgo#776563, bgo#776584, bgo#776803, bgo#776813,
|
||||||
|
bgo#776958, bgo#776969, bgo#777071, bgo#777141.
|
||||||
|
+ Updated translations.
|
||||||
|
- Drop evolution-contact-list-performance.patch: fixed upstream.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Feb 15 03:23:03 UTC 2017 - dimstar@opensuse.org
|
||||||
|
|
||||||
|
- Update to version 3.23.3:
|
||||||
|
+ Remove leftover EWebViewClass::create_plugin_widget().
|
||||||
|
+ Message list not always scrolled to the cursor position on
|
||||||
|
folder enter ][.
|
||||||
|
+ Spell GNOME Calendar correctly (Piotr Drąg)
|
||||||
|
+ Ensure mail_session_get_cache/config/data_dir() return existing
|
||||||
|
directories.
|
||||||
|
+ Process the WebView's context menu actions synchronously.
|
||||||
|
+ Handle CAMEL_PROVIDER_CONF_LABEL option.
|
||||||
|
+ Fix formatting.
|
||||||
|
+ Fix various issues with clipboard content handling.
|
||||||
|
+ Fix the EHTMLEditor's update-actions signal.
|
||||||
|
+ EEditorWebExtension: Use-after-free when restoring the inline
|
||||||
|
images.
|
||||||
|
+ EEditorDOMFunctions: Critical warning and possible crash when
|
||||||
|
we cannot append the end node for spell checking.
|
||||||
|
+ Copy action is no available in EWebView's context menu.
|
||||||
|
+ Prefer user's value of WEBKIT_DISABLE_COMPOSITING_MODE.
|
||||||
|
+ Correct some backup/restore translatable strings.
|
||||||
|
+ Add a Confirmation option 'prompt-on-composer-mode-switch' into
|
||||||
|
Preferences.
|
||||||
|
+ Let the Control + C shortcut behave the same way as
|
||||||
|
Control + Shift (Tomas Popela)
|
||||||
|
+ Prefer text/plain in plain text mode if using
|
||||||
|
'Paste Quotation'.
|
||||||
|
+ Added translator's comment and 'mode' versus 'format' for
|
||||||
|
composer changes.
|
||||||
|
+ Make glib_mkenums() files depend on the source enum file.
|
||||||
|
+ Bugs fixed: bgo#764802, bgo#767228, bgo#774164, bgo#774211,
|
||||||
|
bgo#774377, bgo#774691, bgo#774924, bgo#774958, bgo#775042,
|
||||||
|
bgo#775075, bgo#775214, bgo#775268, bgo#775363, bgo#775370,
|
||||||
|
bgo#775395, bgo#775397, bgo#775565, bgo#775598, bgo#775656,
|
||||||
|
bgo#775691, bgo#775704.
|
||||||
|
+ Updated translations.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Feb 15 03:23:02 UTC 2017 - dimstar@opensuse.org
|
||||||
|
|
||||||
|
- Update to version 3.23.2:
|
||||||
|
+ Tests are expecting the font-family attribute on BODY.
|
||||||
|
+ Skip the tests that are known to fail.
|
||||||
|
+ Extra quoted character on the end of the quoted PRE element if
|
||||||
|
it ends with BR element.
|
||||||
|
+ Renew spell-check only in viewport and not in the whole
|
||||||
|
document.
|
||||||
|
+ Editor is not marked as changed after some operations.
|
||||||
|
+ Fix possible crash (use-after-free) under mail_send_receive().
|
||||||
|
+ Correct gtkdoc-scan --ignore-headers argument value.
|
||||||
|
+ Update gtk-doc sgml input files.
|
||||||
|
+ Return RPATH linker flags back to evolution-shell.pc.in.
|
||||||
|
+ Do not require C++ compiler, when not used.
|
||||||
|
+ Ensure CMAKE_SKIP_RPATH is OFF, the RPATH is used here.
|
||||||
|
+ Message list not always scrolled to the cursor position on
|
||||||
|
folder enter.
|
||||||
|
+ Messages could not be sometimes quoted correctly.
|
||||||
|
+ Reflect spellchecking UI changes in user documentation.
|
||||||
|
+ Bugs fixed: bgo#739955, bgo#764065, bgo#769573, bgo#770926,
|
||||||
|
bgo#771821, bgo#772947, bgo#773236, bgo#773494, bgo#773659,
|
||||||
|
bgo#773864, bgo#774067, bgo#774156, bgo#774521, bgo#774681.
|
||||||
|
+ Updated translations.
|
||||||
|
- Drop evolution-rpaths.patch: fixed upstream.
|
||||||
|
- No longer pass -DCMAKE_SKIP_RPATH=ON to cmake: upstream corrected
|
||||||
|
the build system to take care of this.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Feb 15 03:23:02 UTC 2017 - dimstar@opensuse.org
|
||||||
|
|
||||||
|
- Add evolution-rpaths.patch: Do not store an rpath in libraries
|
||||||
|
that do not link anything private (bgo#774681).
|
||||||
|
- Pass -DCMAKE_SKIP_RPATH=OFF to cmake: evolution relies on rpath
|
||||||
|
being set. Future versions take care of this by setting the
|
||||||
|
appropriate flag in CMakeLists.txt.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Wed Feb 15 03:23:01 UTC 2017 - dimstar@opensuse.org
|
||||||
|
|
||||||
|
- Update to version 3.23.1:
|
||||||
|
+ Change "Compose Message" Desktop Action to disambiguate it from
|
||||||
|
titles.
|
||||||
|
+ Convert from autotools to CMake.
|
||||||
|
+ Require as hard dependency some dependencies.
|
||||||
|
+ Extend error messages in FindLDAP.cmake.
|
||||||
|
+ Reorganize directory structure.
|
||||||
|
+ Add a helper script for a 'dist' target.
|
||||||
|
+ Rename SHARE_INSTALL_DIR to SHARE_INSTALL_PREFIX.
|
||||||
|
+ Place private libevolutiontestsettings.so into a
|
||||||
|
test-gio-modules subdirectory.
|
||||||
|
+ Do not use camel_folder_set_message_flags() in
|
||||||
|
message-list::on_click().
|
||||||
|
+ Do not quote compiler/linker flags.
|
||||||
|
+ Fix a crash when replying to all recipients.
|
||||||
|
+ Add an option to (not) have reminder notification dialog always
|
||||||
|
on top.
|
||||||
|
+ Add options to select Memo/Task Lists for Reminder
|
||||||
|
notifications.
|
||||||
|
+ Hard-break `make dist` when there are uncommitted changes.
|
||||||
|
+ Bugs fixed: bgo#772175, bgo#336195, bgo#605416.
|
||||||
|
+ Updated translations.
|
||||||
|
|
||||||
-------------------------------------------------------------------
|
-------------------------------------------------------------------
|
||||||
Mon Feb 13 12:56:06 UTC 2017 - zaitor@opensuse.org
|
Mon Feb 13 12:56:06 UTC 2017 - zaitor@opensuse.org
|
||||||
|
|
||||||
|
@ -23,8 +23,8 @@
|
|||||||
|
|
||||||
Name: evolution
|
Name: evolution
|
||||||
# This should be updated upon major version changes; it should match BASE_VERSION as defined in configure.in.
|
# This should be updated upon major version changes; it should match BASE_VERSION as defined in configure.in.
|
||||||
%define evolution_base_version 3.22
|
%define evolution_base_version 3.24
|
||||||
Version: 3.22.5
|
Version: 3.24.0
|
||||||
Release: 0
|
Release: 0
|
||||||
# _version needs to be %{version} stripped to major.minor.micro only...
|
# _version needs to be %{version} stripped to major.minor.micro only...
|
||||||
%define _version %(echo %{version} | grep -E -o '[0-9]+\.[0-9]+\.[0-9]+')
|
%define _version %(echo %{version} | grep -E -o '[0-9]+\.[0-9]+\.[0-9]+')
|
||||||
@ -34,14 +34,14 @@ Summary: The Integrated GNOME Mail, Calendar, and Address Book Suite
|
|||||||
License: LGPL-2.0 and LGPL-3.0
|
License: LGPL-2.0 and LGPL-3.0
|
||||||
Group: Productivity/Networking/Email/Clients
|
Group: Productivity/Networking/Email/Clients
|
||||||
Url: http://wiki.gnome.org/Apps/Evolution/
|
Url: http://wiki.gnome.org/Apps/Evolution/
|
||||||
Source0: http://download.gnome.org/sources/evolution/3.22/%{name}-%{version}.tar.xz
|
Source0: http://download.gnome.org/sources/evolution/3.24/%{name}-%{version}.tar.xz
|
||||||
# PATCH-FIX-UPSTREAM evolution-contact-list-performance.patch bgo#774494 bsc#990206 mgorse@suse.com -- improve performance with very large contact lists.
|
|
||||||
Patch0: evolution-contact-list-performance.patch
|
|
||||||
# The icon we rely on is from adwaita-icon-theme
|
# The icon we rely on is from adwaita-icon-theme
|
||||||
BuildRequires: adwaita-icon-theme
|
BuildRequires: adwaita-icon-theme
|
||||||
BuildRequires: bison
|
BuildRequires: bison
|
||||||
BuildRequires: bogofilter
|
BuildRequires: bogofilter
|
||||||
|
BuildRequires: cmake
|
||||||
BuildRequires: fdupes
|
BuildRequires: fdupes
|
||||||
|
BuildRequires: gcc-c++
|
||||||
BuildRequires: openldap2-devel
|
BuildRequires: openldap2-devel
|
||||||
%if %{need_autogen}
|
%if %{need_autogen}
|
||||||
BuildRequires: gnome-common
|
BuildRequires: gnome-common
|
||||||
@ -165,33 +165,24 @@ to develop applications that require these.
|
|||||||
%lang_package
|
%lang_package
|
||||||
%prep
|
%prep
|
||||||
%setup -q
|
%setup -q
|
||||||
%patch0 -p2
|
|
||||||
%if !0%{?is_opensuse}
|
%if !0%{?is_opensuse}
|
||||||
translation-update-upstream
|
translation-update-upstream
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%if %{need_autogen}
|
%cmake \
|
||||||
NOCONFIGURE=1 gnome-autogen.sh
|
-DLIBEXEC_INSTALL_DIR=%{_libexecdir} \
|
||||||
%endif
|
-DENABLE_YTNEF=OFF \
|
||||||
%{configure} \
|
-DWITH_GLADE_CATALOG=ON \
|
||||||
--with-openldap=yes \
|
-DENABLE_GTK_DOC=ON \
|
||||||
--enable-nss=yes \
|
|
||||||
--enable-smime=yes \
|
|
||||||
--with-glade-catalog \
|
|
||||||
%if !%{use_gtkimageview}
|
%if !%{use_gtkimageview}
|
||||||
--disable-image-inline \
|
%nil
|
||||||
%endif
|
%endif
|
||||||
--disable-static \
|
%nil
|
||||||
# Processing the files in help uses _lots_ of memory, so running that part in parallel is bad.
|
|
||||||
pushd help
|
|
||||||
make
|
|
||||||
popd
|
|
||||||
make %{?_smp_flags}
|
make %{?_smp_flags}
|
||||||
|
|
||||||
%install
|
%install
|
||||||
%{makeinstall}
|
%cmake_install
|
||||||
find %{buildroot} -name '*.la' -type f -delete -print
|
|
||||||
# Office is okay upstream, but we want the menu item to appear in Internet
|
# Office is okay upstream, but we want the menu item to appear in Internet
|
||||||
grep -q "^Categories=.*Office" %{buildroot}%{_datadir}/applications/evolution.desktop
|
grep -q "^Categories=.*Office" %{buildroot}%{_datadir}/applications/evolution.desktop
|
||||||
%suse_update_desktop_file -r -G "Mail and Calendar" evolution GNOME GTK Network Email Calendar ContactManagement
|
%suse_update_desktop_file -r -G "Mail and Calendar" evolution GNOME GTK Network Email Calendar ContactManagement
|
||||||
@ -230,9 +221,9 @@ grep -q "^Categories=.*Office" %{buildroot}%{_datadir}/applications/evolution.de
|
|||||||
# despite the plugins being split in their own packages, the schema must be present in any case
|
# despite the plugins being split in their own packages, the schema must be present in any case
|
||||||
%{_datadir}/glib-2.0/schemas/org.gnome.evolution.bogofilter.gschema.xml
|
%{_datadir}/glib-2.0/schemas/org.gnome.evolution.bogofilter.gschema.xml
|
||||||
%{_datadir}/glib-2.0/schemas/org.gnome.evolution.spamassassin.gschema.xml
|
%{_datadir}/glib-2.0/schemas/org.gnome.evolution.spamassassin.gschema.xml
|
||||||
%dir %{_libdir}/evolution
|
%dir %{_libdir}/evolution/
|
||||||
%dir %{_libdir}/evolution/*
|
|
||||||
%{_libdir}/evolution/*.so
|
%{_libdir}/evolution/*.so
|
||||||
|
%dir %{_libdir}/evolution/modules
|
||||||
%{_libdir}/evolution/modules/module-addressbook.so
|
%{_libdir}/evolution/modules/module-addressbook.so
|
||||||
%{_libdir}/evolution/modules/module-backup-restore.so
|
%{_libdir}/evolution/modules/module-backup-restore.so
|
||||||
%{_libdir}/evolution/modules/module-book-config-google.so
|
%{_libdir}/evolution/modules/module-book-config-google.so
|
||||||
@ -248,6 +239,7 @@ grep -q "^Categories=.*Office" %{buildroot}%{_datadir}/applications/evolution.de
|
|||||||
%{_libdir}/evolution/modules/module-calendar.so
|
%{_libdir}/evolution/modules/module-calendar.so
|
||||||
%{_datadir}/glib-2.0/schemas/org.gnome.evolution.calendar.gschema.xml
|
%{_datadir}/glib-2.0/schemas/org.gnome.evolution.calendar.gschema.xml
|
||||||
%{_libdir}/evolution/modules/module-composer-autosave.so
|
%{_libdir}/evolution/modules/module-composer-autosave.so
|
||||||
|
%{_libdir}/evolution/modules/module-composer-to-meeting.so
|
||||||
%{_libdir}/evolution/modules/module-contact-photos.so
|
%{_libdir}/evolution/modules/module-contact-photos.so
|
||||||
%{_libdir}/evolution/modules/module-gravatar.so
|
%{_libdir}/evolution/modules/module-gravatar.so
|
||||||
%{_libdir}/evolution/modules/module-itip-formatter.so
|
%{_libdir}/evolution/modules/module-itip-formatter.so
|
||||||
@ -268,6 +260,7 @@ grep -q "^Categories=.*Office" %{buildroot}%{_datadir}/applications/evolution.de
|
|||||||
%{_libdir}/evolution/modules/module-webkit-editor.so
|
%{_libdir}/evolution/modules/module-webkit-editor.so
|
||||||
%{_libdir}/evolution/modules/module-webkit-inspector.so
|
%{_libdir}/evolution/modules/module-webkit-inspector.so
|
||||||
%{_datadir}/glib-2.0/schemas/org.gnome.evolution.addressbook.gschema.xml
|
%{_datadir}/glib-2.0/schemas/org.gnome.evolution.addressbook.gschema.xml
|
||||||
|
%dir %{_libdir}/evolution/plugins
|
||||||
%{_libdir}/evolution/plugins/*-email-custom-header.*
|
%{_libdir}/evolution/plugins/*-email-custom-header.*
|
||||||
%{_datadir}/glib-2.0/schemas/org.gnome.evolution.plugin.email-custom-header.gschema.xml
|
%{_datadir}/glib-2.0/schemas/org.gnome.evolution.plugin.email-custom-header.gschema.xml
|
||||||
%{_libdir}/evolution/plugins/*-evolution-attachment-reminder.*
|
%{_libdir}/evolution/plugins/*-evolution-attachment-reminder.*
|
||||||
@ -293,15 +286,15 @@ grep -q "^Categories=.*Office" %{buildroot}%{_datadir}/applications/evolution.de
|
|||||||
%{_libdir}/evolution/plugins/*-save-calendar.*
|
%{_libdir}/evolution/plugins/*-save-calendar.*
|
||||||
%{_libdir}/evolution/plugins/*-templates.*
|
%{_libdir}/evolution/plugins/*-templates.*
|
||||||
%{_datadir}/glib-2.0/schemas/org.gnome.evolution.plugin.templates.gschema.xml
|
%{_datadir}/glib-2.0/schemas/org.gnome.evolution.plugin.templates.gschema.xml
|
||||||
%{_libdir}/evolution/web-extensions/libedomutils*
|
|
||||||
%{_libdir}/evolution/web-extensions/libewebextension.so
|
|
||||||
%{_libdir}/evolution/web-extensions/libmoduleitipformatterwebextension.so
|
|
||||||
%dir %{_libdir}/evolution/web-extensions/webkit-editor
|
|
||||||
%{_libdir}/evolution/web-extensions/webkit-editor/libewebkiteditorwebextension.so
|
|
||||||
%{_libdir}/evolution/test-gio-modules/libevolutiontestsettings.so
|
|
||||||
%dir %{_libexecdir}/evolution
|
%dir %{_libexecdir}/evolution
|
||||||
%{_libexecdir}/evolution/evolution-*
|
%{_libexecdir}/evolution/evolution-alarm-notify
|
||||||
|
%{_libexecdir}/evolution/evolution-backup
|
||||||
%{_libexecdir}/evolution/killev
|
%{_libexecdir}/evolution/killev
|
||||||
|
%dir %{_libdir}/evolution/web-extensions
|
||||||
|
%{_libdir}/evolution/web-extensions/libewebextension.so
|
||||||
|
%{_libdir}/evolution/web-extensions/module-itip-formatter-webextension.so
|
||||||
|
%dir %{_libdir}/evolution/web-extensions/webkit-editor
|
||||||
|
%{_libdir}/evolution/web-extensions/webkit-editor/module-webkit-editor-webextension.so
|
||||||
%{_sysconfdir}/xdg/autostart/evolution-alarm-notify.desktop
|
%{_sysconfdir}/xdg/autostart/evolution-alarm-notify.desktop
|
||||||
|
|
||||||
%files lang -f evolution-%evolution_base_version.lang
|
%files lang -f evolution-%evolution_base_version.lang
|
||||||
|
Loading…
Reference in New Issue
Block a user