aboutsummaryrefslogtreecommitdiffstats
path: root/e-util/e-binding.h
diff options
context:
space:
mode:
authorMatthew Barnes <mbarnes@redhat.com>2009-04-24 04:50:54 +0800
committerMatthew Barnes <mbarnes@redhat.com>2009-04-24 04:50:54 +0800
commit0006bfb58ac91bac0768590827bd3dabba72c638 (patch)
treecfac8f30da40622fe1cbc56ce5518911e38e0028 /e-util/e-binding.h
parent6350c087b31b10d8d05b774e1829b3ff80812f90 (diff)
downloadgsoc2013-evolution-0006bfb58ac91bac0768590827bd3dabba72c638.tar
gsoc2013-evolution-0006bfb58ac91bac0768590827bd3dabba72c638.tar.gz
gsoc2013-evolution-0006bfb58ac91bac0768590827bd3dabba72c638.tar.bz2
gsoc2013-evolution-0006bfb58ac91bac0768590827bd3dabba72c638.tar.lz
gsoc2013-evolution-0006bfb58ac91bac0768590827bd3dabba72c638.tar.xz
gsoc2013-evolution-0006bfb58ac91bac0768590827bd3dabba72c638.tar.zst
gsoc2013-evolution-0006bfb58ac91bac0768590827bd3dabba72c638.zip
Bug 577898 – Port ExoBinding to Evolution
Port Xfce's ExoBinding API to Evolution as EBinding. What this does is allow you to bind two GObject properties together such that their values are automatically kept in sync. The API also supports transformation functions, such as boolean inversion. I use this API heavily on the kill-bonobo branch and also in the attachment UI rewrite, so I'm merging this feature early.
Diffstat (limited to 'e-util/e-binding.h')
-rw-r--r--e-util/e-binding.h118
1 files changed, 118 insertions, 0 deletions
diff --git a/e-util/e-binding.h b/e-util/e-binding.h
new file mode 100644
index 0000000000..676093bfad
--- /dev/null
+++ b/e-util/e-binding.h
@@ -0,0 +1,118 @@
+/*
+ * e-binding.h
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) version 3.
+ *
+ * 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
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with the program; if not, see <http://www.gnu.org/licenses/>
+ *
+ *
+ * Copyright (C) 1999-2008 Novell, Inc. (www.novell.com)
+ *
+ */
+
+/* This is a direct rip-off of Xfce's excellent ExoBinding API,
+ * which binds two GObject properties together. ExoBinding was
+ * written by Benedikt Meurer <benny@xfce.org>. */
+
+#ifndef E_BINDING_H
+#define E_BINDING_H
+
+#include <gdk/gdk.h>
+
+G_BEGIN_DECLS
+
+typedef struct _EBinding EBinding;
+typedef struct _EBindingBase EBindingBase;
+typedef struct _EBindingLink EBindingLink;
+typedef struct _EMutualBinding EMutualBinding;
+
+typedef gboolean (*EBindingTransform) (const GValue *src_value,
+ GValue *dst_value,
+ gpointer user_data);
+
+struct _EBindingBase {
+ GDestroyNotify destroy;
+};
+
+struct _EBindingLink {
+ GObject *dst_object;
+ GParamSpec *dst_pspec;
+ gulong dst_handler; /* only set for mutual bindings */
+ gulong handler;
+ EBindingTransform transform;
+ gpointer user_data;
+};
+
+struct _EBinding {
+ /*< private >*/
+ GObject *src_object;
+ EBindingBase base;
+ EBindingLink link;
+};
+
+struct _EMutualBinding {
+ /*< private >*/
+ EBindingBase base;
+ EBindingLink direct;
+ EBindingLink reverse;
+};
+
+EBinding * e_binding_new (GObject *src_object,
+ const gchar *src_property,
+ GObject *dst_object,
+ const gchar *dst_property);
+EBinding * e_binding_new_full (GObject *src_object,
+ const gchar *src_property,
+ GObject *dst_object,
+ const gchar *dst_property,
+ EBindingTransform transform,
+ GDestroyNotify destroy_notify,
+ gpointer user_data);
+EBinding * e_binding_new_with_negation (GObject *src_object,
+ const gchar *src_property,
+ GObject *dst_object,
+ const gchar *dst_property);
+void e_binding_unbind (EBinding *binding);
+
+EMutualBinding *e_mutual_binding_new (GObject *object1,
+ const gchar *property1,
+ GObject *object2,
+ const gchar *property2);
+EMutualBinding *e_mutual_binding_new_full (GObject *object1,
+ const gchar *property1,
+ GObject *object2,
+ const gchar *property2,
+ EBindingTransform transform,
+ EBindingTransform reverse_transform,
+ GDestroyNotify destroy_notify,
+ gpointer user_data);
+EMutualBinding *e_mutual_binding_new_with_negation
+ (GObject *object1,
+ const gchar *property1,
+ GObject *object2,
+ const gchar *property2);
+void e_mutual_binding_unbind (EMutualBinding *binding);
+
+
+/* Useful transformation functions */
+gboolean e_binding_transform_color_to_string
+ (const GValue *src_value,
+ GValue *dst_value,
+ gpointer user_data);
+gboolean e_binding_transform_string_to_color
+ (const GValue *src_value,
+ GValue *dst_value,
+ gpointer user_data);
+
+G_END_DECLS
+
+#endif /* E_BINDING_H */