From 722f92d0119241f99d1bf2628293acf7a1b7907a Mon Sep 17 00:00:00 2001 From: Ell Date: Sun, 27 May 2018 11:34:58 -0400 Subject: [PATCH] app: add GimpCancelable interface ... which provides a method for canceling an operation managed by an object. --- app/core/Makefile.am | 2 ++ app/core/core-types.h | 1 + app/core/gimpcancelable.c | 72 +++++++++++++++++++++++++++++++++++++++ app/core/gimpcancelable.h | 47 +++++++++++++++++++++++++ 4 files changed, 122 insertions(+) create mode 100644 app/core/gimpcancelable.c create mode 100644 app/core/gimpcancelable.h diff --git a/app/core/Makefile.am b/app/core/Makefile.am index 7b8f524959..c06d71e8fe 100644 --- a/app/core/Makefile.am +++ b/app/core/Makefile.am @@ -117,6 +117,8 @@ libappcore_a_sources = \ gimpbrushpipe-load.h \ gimpbuffer.c \ gimpbuffer.h \ + gimpcancelable.c \ + gimpcancelable.h \ gimpchannel.c \ gimpchannel.h \ gimpchannel-combine.c \ diff --git a/app/core/core-types.h b/app/core/core-types.h index bbda2209b5..0580d1d775 100644 --- a/app/core/core-types.h +++ b/app/core/core-types.h @@ -198,6 +198,7 @@ typedef struct _GimpTreeHandler GimpTreeHandler; /* interfaces */ +typedef struct _GimpCancelable GimpCancelable; /* dummy typedef */ typedef struct _GimpPickable GimpPickable; /* dummy typedef */ typedef struct _GimpProgress GimpProgress; /* dummy typedef */ typedef struct _GimpProjectable GimpProjectable; /* dummy typedef */ diff --git a/app/core/gimpcancelable.c b/app/core/gimpcancelable.c new file mode 100644 index 0000000000..905a10c79e --- /dev/null +++ b/app/core/gimpcancelable.c @@ -0,0 +1,72 @@ +/* GIMP - The GNU Image Manipulation Program + * Copyright (C) 1995 Spencer Kimball and Peter Mattis + * + * gimpcancelable.c + * Copyright (C) 2018 Ell + * + * 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 . + */ + + +#include "config.h" + +#include +#include + +#include "core-types.h" + +#include "gimpcancelable.h" +#include "gimpmarshal.h" + + +enum +{ + CANCEL, + LAST_SIGNAL +}; + + +G_DEFINE_INTERFACE (GimpCancelable, gimp_cancelable, G_TYPE_OBJECT) + + +static guint cancelable_signals[LAST_SIGNAL] = { 0 }; + + +/* private functions */ + + +static void +gimp_cancelable_default_init (GimpCancelableInterface *iface) +{ + cancelable_signals[CANCEL] = + g_signal_new ("cancel", + G_TYPE_FROM_CLASS (iface), + G_SIGNAL_RUN_FIRST, + G_STRUCT_OFFSET (GimpCancelableInterface, cancel), + NULL, NULL, + gimp_marshal_VOID__VOID, + G_TYPE_NONE, 0); +} + + +/* public functions */ + + +void +gimp_cancelable_cancel (GimpCancelable *cancelable) +{ + g_return_if_fail (GIMP_IS_CANCELABLE (cancelable)); + + g_signal_emit (cancelable, cancelable_signals[CANCEL], 0); +} diff --git a/app/core/gimpcancelable.h b/app/core/gimpcancelable.h new file mode 100644 index 0000000000..864f833c59 --- /dev/null +++ b/app/core/gimpcancelable.h @@ -0,0 +1,47 @@ +/* GIMP - The GNU Image Manipulation Program + * Copyright (C) 1995-1997 Spencer Kimball and Peter Mattis + * + * gimpcancelable.h + * Copyright (C) 2018 Ell + * + * 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 . + */ + +#ifndef __GIMP_CANCELABLE_H__ +#define __GIMP_CANCELABLE_H__ + + +#define GIMP_TYPE_CANCELABLE (gimp_cancelable_get_type ()) +#define GIMP_IS_CANCELABLE(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GIMP_TYPE_CANCELABLE)) +#define GIMP_CANCELABLE(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GIMP_TYPE_CANCELABLE, GimpCancelable)) +#define GIMP_CANCELABLE_GET_INTERFACE(obj) (G_TYPE_INSTANCE_GET_INTERFACE ((obj), GIMP_TYPE_CANCELABLE, GimpCancelableInterface)) + + +typedef struct _GimpCancelableInterface GimpCancelableInterface; + +struct _GimpCancelableInterface +{ + GTypeInterface base_iface; + + /* signals */ + void (* cancel) (GimpCancelable *cancelable); +}; + + +GType gimp_cancelable_get_type (void) G_GNUC_CONST; + +void gimp_cancelable_cancel (GimpCancelable *cancelable); + + +#endif /* __GIMP_CANCELABLE_H__ */