File: cally-clone.c

package info (click to toggle)
clutter-1.0 1.26.4%2Bdfsg-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 34,352 kB
  • sloc: ansic: 128,533; sh: 5,580; xml: 1,641; makefile: 1,613; ruby: 149; perl: 142; sed: 16
file content (132 lines) | stat: -rw-r--r-- 4,326 bytes parent folder | download | duplicates (6)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
/* CALLY - The Clutter Accessibility Implementation Library
 *
 * Copyright (C) 2010 Igalia, S.L.
 *
 * Author: Alejandro PiƱeiro Iglesias <apinheiro@igalia.com>
 *
 * This library 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) any later version.
 *
 * This library 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 this library; if not, write to the
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 * Boston, MA 02111-1307, USA.
 */

/**
 * SECTION:cally-clone
 * @Title: CallyClone
 * @short_description: Implementation of the ATK interfaces for a #ClutterClone
 * @see_also: #ClutterClone
 *
 * #CallyClone implements the required ATK interfaces of #ClutterClone
 *
 * In particular it sets a proper role for the clone, as just a image,
 * as it is the sanest and simplest approach.
 */

/* Design rationale for CallyClone:
 *
 * In the old times, it was just ClutterCloneTexture. So, from a a11y POV
 * CallyCloneTexture was just another image, like ClutterTexture, and if
 * it was a clone was irrevelant. So on cally-0.8, CallyCloneTexture
 * expose a object with role ATK_ROLE_IMAGE. But now, ClutterClone is more
 * general. You can clone any object, including groups, and made things
 * like have one text entry, and a clone with different properties in the
 * same window, updated both at once.
 *
 * The question is if the idea is have a ClutterClone as a "first-class"
 * citizen inside the stage hierarchy (full clone), or it is just supposed
 * to be a mirror image of the original object.
 *
 * In the case of the a11y POV this would mean that if the text changes on
 * the source, the clone should emit as well the text-changing signals.
 *
 * As ClutterClone smartly just paint the same object with different
 * parameters, this would mean that it should be the cally object the one
 * that should replicate the source clutter hierarchy to do that,
 * something that just sound crazy.
 *
 * Taking into account that:
 *
 * - ClutterClone doesn't re-emit mirrored signals from the source 
 *   I think that likely the answer would be "yes, it is just a
 *   mirrored image, not a real full clone".
 *
 * - You can't interact directly with the clone (ie: focus, and so on).
 *   Its basic usage (right now) is clone textures.
 *
 * Any other solution could be overwhelming.
 *
 * I think that the final solution would be that ClutterClone from the
 * a11y POV should still be managed as a image (with the proper properties,
 * position, size, etc.).
 */
#include "config.h"

#include "cally-clone.h"
#include "cally-actor-private.h"

/* AtkObject */
static void                  cally_clone_real_initialize (AtkObject *obj,
                                                          gpointer   data);

G_DEFINE_TYPE (CallyClone, cally_clone, CALLY_TYPE_ACTOR)

static void
cally_clone_class_init (CallyCloneClass *klass)
{
/*   GObjectClass   *gobject_class = G_OBJECT_CLASS (klass); */
  AtkObjectClass *class         = ATK_OBJECT_CLASS (klass);

  class->initialize      = cally_clone_real_initialize;
}

static void
cally_clone_init (CallyClone *clone)
{
  /* nothing to do yet */
}

/**
 * cally_clone_new:
 * @actor: a #ClutterActor
 *
 * Creates a new #CallyClone for the given @actor. @actor must be a
 * #ClutterClone.
 *
 * Return value: the newly created #AtkObject
 *
 * Since: 1.4
 */
AtkObject*
cally_clone_new (ClutterActor *actor)
{
  GObject   *object     = NULL;
  AtkObject *accessible = NULL;

  g_return_val_if_fail (CLUTTER_IS_CLONE (actor), NULL);

  object = g_object_new (CALLY_TYPE_CLONE, NULL);

  accessible = ATK_OBJECT (object);
  atk_object_initialize (accessible, actor);

  return accessible;
}

static void
cally_clone_real_initialize (AtkObject *obj,
                              gpointer   data)
{
  ATK_OBJECT_CLASS (cally_clone_parent_class)->initialize (obj, data);

  obj->role = ATK_ROLE_IMAGE;
}