[beast: 6/9] BST: store Bse::ItemH inside bst_param_proxy
- From: Tim Janik <timj src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [beast: 6/9] BST: store Bse::ItemH inside bst_param_proxy
- Date: Sat, 30 Sep 2017 21:00:31 +0000 (UTC)
commit ea52c289653efc8817ea268674f7e27015e6fef4
Author: Tim Janik <timj gnu org>
Date: Fri Sep 29 02:00:42 2017 +0200
BST: store Bse::ItemH inside bst_param_proxy
Signed-off-by: Tim Janik <timj gnu org>
beast-gtk/bstparam.cc | 105 +++++++++++++++++++++++++++++-------------------
beast-gtk/bstparam.hh | 5 +-
2 files changed, 66 insertions(+), 44 deletions(-)
---
diff --git a/beast-gtk/bstparam.cc b/beast-gtk/bstparam.cc
index cfa9fe6..81240b6 100644
--- a/beast-gtk/bstparam.cc
+++ b/beast-gtk/bstparam.cc
@@ -209,19 +209,18 @@ static void
proxy_binding_set_value (GxkParam *param,
const GValue *value)
{
- SfiProxy proxy = param->bdata[0].v_long;
- if (proxy)
- sfi_glue_proxy_set_property (proxy, param->pspec->name, value);
+ Bse::ItemH *itemp = (Bse::ItemH*) param->bdata[0].v_pointer, &item = *itemp;
+ if (item)
+ sfi_glue_proxy_set_property (item.proxy_id(), param->pspec->name, value);
}
static void
-proxy_binding_get_value (GxkParam *param,
- GValue *value)
+proxy_binding_get_value (GxkParam *param, GValue *value)
{
- SfiProxy proxy = param->bdata[0].v_long;
- if (proxy)
+ Bse::ItemH *itemp = (Bse::ItemH*) param->bdata[0].v_pointer, &item = *itemp;
+ if (item)
{
- const GValue *cvalue = sfi_glue_proxy_get_property (proxy, param->pspec->name);
+ const GValue *cvalue = sfi_glue_proxy_get_property (item.proxy_id(), param->pspec->name);
if (cvalue)
g_value_transform (cvalue, value);
else
@@ -232,32 +231,33 @@ proxy_binding_get_value (GxkParam *param,
}
static void
-proxy_binding_weakref (gpointer data,
- SfiProxy junk)
+proxy_binding_weakref (gpointer data, SfiProxy junk)
{
GxkParam *param = (GxkParam*) data;
- param->bdata[0].v_long = 0;
- param->bdata[1].v_long = 0; /* already disconnected */
+ Bse::ItemH *itemp = (Bse::ItemH*) param->bdata[0].v_pointer;
+ param->bdata[0].v_pointer = NULL;
+ param->bdata[1].v_long = 0; /* already disconnected */
+ delete itemp;
}
static void
proxy_binding_destroy (GxkParam *param)
{
- SfiProxy proxy = param->bdata[0].v_long;
- if (proxy)
+ Bse::ItemH *itemp = (Bse::ItemH*) param->bdata[0].v_pointer;
+ if (param->bdata[1].v_long)
{
- sfi_glue_signal_disconnect (proxy, param->bdata[1].v_long);
- sfi_glue_proxy_weak_unref (proxy, proxy_binding_weakref, param);
- param->bdata[0].v_long = 0;
- param->bdata[1].v_long = 0;
+ sfi_glue_signal_disconnect (itemp->proxy_id(), param->bdata[1].v_long);
+ sfi_glue_proxy_weak_unref (itemp->proxy_id(), proxy_binding_weakref, param);
}
+ param->bdata[0].v_pointer = NULL;
+ param->bdata[1].v_long = 0;
+ delete itemp;
}
static void
proxy_binding_start_grouping (GxkParam *param)
{
- SfiProxy proxy = param->bdata[0].v_long;
- Bse::ItemH item = Bse::ItemH::down_cast (bse_server.from_proxy (proxy));
+ Bse::ItemH *itemp = (Bse::ItemH*) param->bdata[0].v_pointer, &item = *itemp;
if (item)
item.group_undo (string_format ("Modify %s", g_param_spec_get_nick (param->pspec)));
}
@@ -265,20 +265,19 @@ proxy_binding_start_grouping (GxkParam *param)
static void
proxy_binding_stop_grouping (GxkParam *param)
{
- SfiProxy proxy = param->bdata[0].v_long;
- Bse::ItemH item = Bse::ItemH::down_cast (bse_server.from_proxy (proxy));
- if (proxy)
+ Bse::ItemH *itemp = (Bse::ItemH*) param->bdata[0].v_pointer, &item = *itemp;
+ if (item)
item.ungroup_undo();
}
static gboolean
proxy_binding_check_writable (GxkParam *param)
{
- SfiProxy proxy = param->bdata[0].v_long;
- if (proxy)
- return Bse::ItemH::down_cast (bse_server.from_proxy (proxy)).editable_property (param->pspec->name);
+ Bse::ItemH *itemp = (Bse::ItemH*) param->bdata[0].v_pointer, &item = *itemp;
+ if (item)
+ return item.editable_property (param->pspec->name);
else
- return FALSE;
+ return false;
}
static GxkParamBinding proxy_binding = {
@@ -293,41 +292,63 @@ static GxkParamBinding proxy_binding = {
};
GxkParam*
-bst_param_new_proxy (GParamSpec *pspec,
- SfiProxy proxy)
+bst_param_new_proxy (GParamSpec *pspec, SfiProxy proxy)
{
- GxkParam *param = gxk_param_new (pspec, &proxy_binding, (gpointer) FALSE);
+ GxkParam *param = gxk_param_new (pspec, &proxy_binding, NULL);
bst_param_set_proxy (param, proxy);
gxk_param_set_size_group (param, param_size_group);
return param;
}
void
-bst_param_set_proxy (GxkParam *param,
- SfiProxy proxy)
+bst_param_set_item (GxkParam *param, Bse::ItemH item)
{
assert_return (GXK_IS_PARAM (param));
assert_return (param->binding == &proxy_binding);
- proxy_binding_destroy (param);
- param->bdata[0].v_long = proxy;
- if (proxy)
+ if (param->bdata[0].v_pointer)
+ proxy_binding_destroy (param);
+ param->bdata[0].v_pointer = new Bse::ItemH (item);
+ if (item)
{
gchar *sig = g_strconcat ("property-notify::", param->pspec->name, NULL);
- param->bdata[1].v_long = sfi_glue_signal_connect_swapped (proxy, sig, (void*) gxk_param_update, param);
+ param->bdata[1].v_long = sfi_glue_signal_connect_swapped (item.proxy_id(), sig, (void*)
gxk_param_update, param);
g_free (sig);
- sfi_glue_proxy_weak_ref (proxy, proxy_binding_weakref, param);
+ sfi_glue_proxy_weak_ref (item.proxy_id(), proxy_binding_weakref, param);
}
}
-SfiProxy
-bst_param_get_proxy (GxkParam *param)
+void
+bst_param_set_proxy (GxkParam *param, SfiProxy proxy)
{
- assert_return (GXK_IS_PARAM (param), 0);
+ assert_return (GXK_IS_PARAM (param));
+ Bse::ItemH item;
+ if (proxy)
+ {
+ item = Bse::ItemH::down_cast (bse_server.from_proxy (proxy));
+ assert_return (item != NULL);
+ }
+ bst_param_set_item (param, item);
+}
+Bse::ItemH
+bst_param_get_item (GxkParam *param)
+{
+ Bse::ItemH item;
+ assert_return (GXK_IS_PARAM (param), item);
if (param->binding == &proxy_binding)
- return param->bdata[0].v_long;
- return 0;
+ {
+ Bse::ItemH *itemp = (Bse::ItemH*) param->bdata[0].v_pointer;
+ item = *itemp;
+ }
+ return item;
+}
+
+SfiProxy
+bst_param_get_proxy (GxkParam *param)
+{
+ Bse::ItemH item = bst_param_get_item (param);
+ return item ? item.proxy_id() : 0;
}
bool
diff --git a/beast-gtk/bstparam.hh b/beast-gtk/bstparam.hh
index ed20c6e..a3953cd 100644
--- a/beast-gtk/bstparam.hh
+++ b/beast-gtk/bstparam.hh
@@ -34,8 +34,9 @@ GxkParam* bst_param_new_object (GParamSpec *pspec, /* gxk_p
/* --- SfiProxy parameters --- */
GxkParam* bst_param_new_proxy (GParamSpec *pspec,
SfiProxy proxy);
-void bst_param_set_proxy (GxkParam *param,
- SfiProxy proxy);
+void bst_param_set_item (GxkParam *param, Bse::ItemH item);
+void bst_param_set_proxy (GxkParam *param, SfiProxy proxy);
+Bse::ItemH bst_param_get_item (GxkParam *param);
SfiProxy bst_param_get_proxy (GxkParam *param);
bool bst_param_is_proxy (GxkParam *param);
SfiProxy bst_item_seq_list_match (GSList *proxy_seq_slist, /* bstparam-proxy.cc */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]