[gnome-calendar] manager: Move threading functions to utils
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-calendar] manager: Move threading functions to utils
- Date: Mon, 29 Apr 2019 20:11:46 +0000 (UTC)
commit 907b71635b7a5e929f5770c07db1a45b320fdf57
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Fri Apr 26 19:47:24 2019 -0300
manager: Move threading functions to utils
src/gcal-manager.c | 88 ++----------------------------------
src/meson.build | 1 +
src/utils/gcal-thread-utils.c | 101 ++++++++++++++++++++++++++++++++++++++++++
src/utils/gcal-thread-utils.h | 33 ++++++++++++++
src/utils/gcal-utils.h | 1 +
5 files changed, 139 insertions(+), 85 deletions(-)
---
diff --git a/src/gcal-manager.c b/src/gcal-manager.c
index c3e79bfb..0d782f24 100644
--- a/src/gcal-manager.c
+++ b/src/gcal-manager.c
@@ -115,88 +115,6 @@ enum
static guint signals[NUM_SIGNALS] = { 0, };
static GParamSpec *properties[NUM_PROPS] = { NULL, };
-/* -- start: threading related code provided by Milan Crha */
-typedef struct {
- EThreadJobFunc func;
- gpointer user_data;
- GDestroyNotify free_user_data;
-
- GCancellable *cancellable;
- GError *error;
-} ThreadJobData;
-
-static void
-thread_job_data_free (gpointer ptr)
-{
- ThreadJobData *tjd = ptr;
-
- if (tjd != NULL)
- {
- /* This should go to UI with more info/description,
- * if it is not G_IOI_ERROR_CANCELLED */
- if (tjd->error != NULL && !g_error_matches (tjd->error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
- g_warning ("Job failed: %s\n", tjd->error->message);
-
- if (tjd->free_user_data != NULL)
- tjd->free_user_data (tjd->user_data);
-
- g_clear_object (&tjd->cancellable);
- g_clear_error (&tjd->error);
- g_free (tjd);
- }
-}
-
-static gpointer
-thread_job_thread (gpointer user_data)
-{
- ThreadJobData *tjd = user_data;
-
- g_return_val_if_fail (tjd != NULL, NULL);
-
- if (tjd->func != NULL)
- tjd->func (tjd->user_data, tjd->cancellable, &tjd->error);
-
- thread_job_data_free (tjd);
-
- return g_thread_self ();
-}
-
-static GCancellable*
-submit_thread_job (EThreadJobFunc func,
- gpointer user_data,
- GDestroyNotify free_user_data)
-{
- ThreadJobData *tjd;
- GThread *thread;
- GCancellable *cancellable;
-
- cancellable = g_cancellable_new ();
-
- tjd = g_new0 (ThreadJobData, 1);
- tjd->func = func;
- tjd->user_data = user_data;
- tjd->free_user_data = free_user_data;
- /* user should be able to cancel this cancellable somehow */
- tjd->cancellable = g_object_ref (cancellable);
- tjd->error = NULL;
-
- thread = g_thread_try_new (NULL,
- thread_job_thread, tjd,
- &tjd->error);
- if (thread != NULL)
- {
- g_thread_unref (thread);
- }
- else
- {
- thread_job_data_free (tjd);
- g_clear_object (&cancellable);
- }
-
- return cancellable;
-}
-/* -- end: threading related code provided by Milan Crha -- */
-
static void
free_async_ops_data (AsyncOpsData *data)
{
@@ -1027,7 +945,7 @@ gcal_manager_setup_shell_search (GcalManager *self,
if (self->shell_search_data_model)
return;
- self->shell_search_data_model = e_cal_data_model_new (submit_thread_job);
+ self->shell_search_data_model = e_cal_data_model_new (gcal_thread_submit_job);
g_signal_connect_swapped (self->shell_search_data_model,
"view-state-changed",
G_CALLBACK (model_state_changed),
@@ -1902,8 +1820,8 @@ gcal_manager_startup (GcalManager *self)
g_signal_connect_swapped (self->source_registry, "source-changed", G_CALLBACK (source_changed), self);
/* create data model */
- self->e_data_model = e_cal_data_model_new (submit_thread_job);
- self->search_data_model = e_cal_data_model_new (submit_thread_job);
+ self->e_data_model = e_cal_data_model_new (gcal_thread_submit_job);
+ self->search_data_model = e_cal_data_model_new (gcal_thread_submit_job);
e_cal_data_model_set_expand_recurrences (self->e_data_model, TRUE);
e_cal_data_model_set_timezone (self->e_data_model, e_cal_util_get_system_timezone ());
diff --git a/src/meson.build b/src/meson.build
index d7ddc6de..eefa81d3 100644
--- a/src/meson.build
+++ b/src/meson.build
@@ -22,6 +22,7 @@ gcal_deps = [
sources = files(
'search/gcal-search-button.c',
'utils/gcal-date-time-utils.c',
+ 'utils/gcal-thread-utils.c',
'utils/gcal-utils.c',
'views/gcal-month-cell.c',
'views/gcal-month-popover.c',
diff --git a/src/utils/gcal-thread-utils.c b/src/utils/gcal-thread-utils.c
new file mode 100644
index 00000000..2a940ab0
--- /dev/null
+++ b/src/utils/gcal-thread-utils.c
@@ -0,0 +1,101 @@
+/* gcal-thread-utils.c
+ *
+ * Copyright 2019 Georges Basile Stavracas Neto <georges stavracas gmail com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+
+#include "gcal-thread-utils.h"
+
+/* Code kindly provided by Milan Crha */
+
+typedef struct {
+ EThreadJobFunc func;
+ gpointer user_data;
+ GDestroyNotify free_user_data;
+
+ GCancellable *cancellable;
+ GError *error;
+} ThreadJobData;
+
+static void
+thread_job_data_free (gpointer ptr)
+{
+ ThreadJobData *tjd = ptr;
+
+ if (tjd != NULL)
+ {
+ /* This should go to UI with more info/description,
+ * if it is not G_IOI_ERROR_CANCELLED */
+ if (tjd->error != NULL && !g_error_matches (tjd->error, G_IO_ERROR, G_IO_ERROR_CANCELLED))
+ g_warning ("Job failed: %s\n", tjd->error->message);
+
+ if (tjd->free_user_data != NULL)
+ tjd->free_user_data (tjd->user_data);
+
+ g_clear_object (&tjd->cancellable);
+ g_clear_error (&tjd->error);
+ g_free (tjd);
+ }
+}
+
+static gpointer
+thread_job_thread (gpointer user_data)
+{
+ ThreadJobData *tjd = user_data;
+
+ g_return_val_if_fail (tjd != NULL, NULL);
+
+ if (tjd->func != NULL)
+ tjd->func (tjd->user_data, tjd->cancellable, &tjd->error);
+
+ thread_job_data_free (tjd);
+
+ return g_thread_self ();
+}
+
+GCancellable*
+gcal_thread_submit_job (EThreadJobFunc func,
+ gpointer user_data,
+ GDestroyNotify free_user_data)
+{
+ ThreadJobData *tjd;
+ GThread *thread;
+ GCancellable *cancellable;
+
+ cancellable = g_cancellable_new ();
+
+ tjd = g_new0 (ThreadJobData, 1);
+ tjd->func = func;
+ tjd->user_data = user_data;
+ tjd->free_user_data = free_user_data;
+ /* user should be able to cancel this cancellable somehow */
+ tjd->cancellable = g_object_ref (cancellable);
+ tjd->error = NULL;
+
+ thread = g_thread_try_new (NULL, thread_job_thread, tjd, &tjd->error);
+ if (thread != NULL)
+ {
+ g_thread_unref (thread);
+ }
+ else
+ {
+ thread_job_data_free (tjd);
+ g_clear_object (&cancellable);
+ }
+
+ return cancellable;
+}
diff --git a/src/utils/gcal-thread-utils.h b/src/utils/gcal-thread-utils.h
new file mode 100644
index 00000000..646b7885
--- /dev/null
+++ b/src/utils/gcal-thread-utils.h
@@ -0,0 +1,33 @@
+/* gcal-thread-utils.h
+ *
+ * Copyright 2019 Georges Basile Stavracas Neto <georges stavracas gmail com>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * SPDX-License-Identifier: GPL-3.0-or-later
+ */
+
+#pragma once
+
+#include "e-cal-data-model.h"
+
+#include <gio/gio.h>
+
+G_BEGIN_DECLS
+
+GCancellable* gcal_thread_submit_job (EThreadJobFunc func,
+ gpointer user_data,
+ GDestroyNotify free_user_data);
+
+G_END_DECLS
diff --git a/src/utils/gcal-utils.h b/src/utils/gcal-utils.h
index fb831430..5f8427bf 100644
--- a/src/utils/gcal-utils.h
+++ b/src/utils/gcal-utils.h
@@ -20,6 +20,7 @@
#define __GCAL_UTILS_H__
#include "gcal-date-time-utils.h"
+#include "gcal-thread-utils.h"
#include "gcal-manager.h"
#include <gtk/gtk.h>
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]