cally/text: Use macros for subclassing boilerplate
Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3387>
This commit is contained in:
parent
cdcf32620a
commit
56023e3110
@ -168,7 +168,7 @@ static int _cally_misc_get_index_at_point (ClutterText *clutter
|
|||||||
gint y,
|
gint y,
|
||||||
AtkCoordType coords);
|
AtkCoordType coords);
|
||||||
|
|
||||||
struct _CallyTextPrivate
|
typedef struct _CallyTextPrivate
|
||||||
{
|
{
|
||||||
/* Cached ClutterText values*/
|
/* Cached ClutterText values*/
|
||||||
gint cursor_position;
|
gint cursor_position;
|
||||||
@ -187,7 +187,7 @@ struct _CallyTextPrivate
|
|||||||
|
|
||||||
/* action */
|
/* action */
|
||||||
guint activate_action_id;
|
guint activate_action_id;
|
||||||
};
|
} CallyTextPrivate;
|
||||||
|
|
||||||
G_DEFINE_TYPE_WITH_CODE (CallyText,
|
G_DEFINE_TYPE_WITH_CODE (CallyText,
|
||||||
cally_text,
|
cally_text,
|
||||||
@ -218,8 +218,6 @@ cally_text_init (CallyText *cally_text)
|
|||||||
{
|
{
|
||||||
CallyTextPrivate *priv = cally_text_get_instance_private (cally_text);
|
CallyTextPrivate *priv = cally_text_get_instance_private (cally_text);
|
||||||
|
|
||||||
cally_text->priv = priv;
|
|
||||||
|
|
||||||
priv->cursor_position = 0;
|
priv->cursor_position = 0;
|
||||||
priv->selection_bound = 0;
|
priv->selection_bound = 0;
|
||||||
|
|
||||||
@ -239,11 +237,13 @@ static void
|
|||||||
cally_text_finalize (GObject *obj)
|
cally_text_finalize (GObject *obj)
|
||||||
{
|
{
|
||||||
CallyText *cally_text = CALLY_TEXT (obj);
|
CallyText *cally_text = CALLY_TEXT (obj);
|
||||||
|
CallyTextPrivate *priv =
|
||||||
|
cally_text_get_instance_private (cally_text);
|
||||||
|
|
||||||
/* g_object_unref (cally_text->priv->textutil); */
|
/* g_object_unref (priv->textutil); */
|
||||||
/* cally_text->priv->textutil = NULL; */
|
/* priv->textutil = NULL; */
|
||||||
|
|
||||||
g_clear_handle_id (&cally_text->priv->insert_idle_handler, g_source_remove);
|
g_clear_handle_id (&priv->insert_idle_handler, g_source_remove);
|
||||||
|
|
||||||
G_OBJECT_CLASS (cally_text_parent_class)->finalize (obj);
|
G_OBJECT_CLASS (cally_text_parent_class)->finalize (obj);
|
||||||
}
|
}
|
||||||
@ -281,16 +281,18 @@ cally_text_real_initialize(AtkObject *obj,
|
|||||||
{
|
{
|
||||||
ClutterText *clutter_text = NULL;
|
ClutterText *clutter_text = NULL;
|
||||||
CallyText *cally_text = NULL;
|
CallyText *cally_text = NULL;
|
||||||
|
CallyTextPrivate *priv;
|
||||||
|
|
||||||
ATK_OBJECT_CLASS (cally_text_parent_class)->initialize (obj, data);
|
ATK_OBJECT_CLASS (cally_text_parent_class)->initialize (obj, data);
|
||||||
|
|
||||||
g_return_if_fail (CLUTTER_TEXT (data));
|
g_return_if_fail (CLUTTER_TEXT (data));
|
||||||
|
|
||||||
cally_text = CALLY_TEXT (obj);
|
cally_text = CALLY_TEXT (obj);
|
||||||
|
priv = cally_text_get_instance_private (cally_text);
|
||||||
clutter_text = CLUTTER_TEXT (data);
|
clutter_text = CLUTTER_TEXT (data);
|
||||||
|
|
||||||
cally_text->priv->cursor_position = clutter_text_get_cursor_position (clutter_text);
|
priv->cursor_position = clutter_text_get_cursor_position (clutter_text);
|
||||||
cally_text->priv->selection_bound = clutter_text_get_selection_bound (clutter_text);
|
priv->selection_bound = clutter_text_get_selection_bound (clutter_text);
|
||||||
|
|
||||||
g_signal_connect (clutter_text, "insert-text",
|
g_signal_connect (clutter_text, "insert-text",
|
||||||
G_CALLBACK (_cally_text_insert_text_cb),
|
G_CALLBACK (_cally_text_insert_text_cb),
|
||||||
@ -1536,6 +1538,7 @@ _cally_text_delete_text_cb (ClutterText *clutter_text,
|
|||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
CallyText *cally_text = NULL;
|
CallyText *cally_text = NULL;
|
||||||
|
CallyTextPrivate *priv;
|
||||||
|
|
||||||
g_return_if_fail (CALLY_IS_TEXT (data));
|
g_return_if_fail (CALLY_IS_TEXT (data));
|
||||||
|
|
||||||
@ -1544,12 +1547,13 @@ _cally_text_delete_text_cb (ClutterText *clutter_text,
|
|||||||
return;
|
return;
|
||||||
|
|
||||||
cally_text = CALLY_TEXT (data);
|
cally_text = CALLY_TEXT (data);
|
||||||
|
priv = cally_text_get_instance_private (cally_text);
|
||||||
|
|
||||||
if (!cally_text->priv->signal_name_delete)
|
if (!priv->signal_name_delete)
|
||||||
{
|
{
|
||||||
cally_text->priv->signal_name_delete = "text_changed::delete";
|
priv->signal_name_delete = "text_changed::delete";
|
||||||
cally_text->priv->position_delete = start_pos;
|
priv->position_delete = start_pos;
|
||||||
cally_text->priv->length_delete = end_pos - start_pos;
|
priv->length_delete = end_pos - start_pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
_notify_delete (cally_text);
|
_notify_delete (cally_text);
|
||||||
@ -1563,25 +1567,27 @@ _cally_text_insert_text_cb (ClutterText *clutter_text,
|
|||||||
gpointer data)
|
gpointer data)
|
||||||
{
|
{
|
||||||
CallyText *cally_text = NULL;
|
CallyText *cally_text = NULL;
|
||||||
|
CallyTextPrivate *priv;
|
||||||
|
|
||||||
g_return_if_fail (CALLY_IS_TEXT (data));
|
g_return_if_fail (CALLY_IS_TEXT (data));
|
||||||
|
|
||||||
cally_text = CALLY_TEXT (data);
|
cally_text = CALLY_TEXT (data);
|
||||||
|
priv = cally_text_get_instance_private (cally_text);
|
||||||
|
|
||||||
if (!cally_text->priv->signal_name_insert)
|
if (!priv->signal_name_insert)
|
||||||
{
|
{
|
||||||
cally_text->priv->signal_name_insert = "text_changed::insert";
|
priv->signal_name_insert = "text_changed::insert";
|
||||||
cally_text->priv->position_insert = *position;
|
priv->position_insert = *position;
|
||||||
cally_text->priv->length_insert = g_utf8_strlen (new_text, new_text_length);
|
priv->length_insert = g_utf8_strlen (new_text, new_text_length);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* The signal will be emitted when the cursor position is updated,
|
* The signal will be emitted when the cursor position is updated,
|
||||||
* or in an idle handler if it not updated.
|
* or in an idle handler if it not updated.
|
||||||
*/
|
*/
|
||||||
if (cally_text->priv->insert_idle_handler == 0)
|
if (priv->insert_idle_handler == 0)
|
||||||
cally_text->priv->insert_idle_handler = clutter_threads_add_idle (_idle_notify_insert,
|
priv->insert_idle_handler = clutter_threads_add_idle (_idle_notify_insert,
|
||||||
cally_text);
|
cally_text);
|
||||||
}
|
}
|
||||||
|
|
||||||
/***** atkeditabletext.h ******/
|
/***** atkeditabletext.h ******/
|
||||||
@ -1713,20 +1719,22 @@ cally_text_notify_clutter (GObject *obj,
|
|||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
_check_for_selection_change (CallyText *cally_text,
|
_check_for_selection_change (CallyText *cally_text,
|
||||||
ClutterText *clutter_text)
|
ClutterText *clutter_text)
|
||||||
{
|
{
|
||||||
gboolean ret_val = FALSE;
|
gboolean ret_val = FALSE;
|
||||||
gint clutter_pos = -1;
|
gint clutter_pos = -1;
|
||||||
gint clutter_bound = -1;
|
gint clutter_bound = -1;
|
||||||
|
CallyTextPrivate *priv =
|
||||||
|
cally_text_get_instance_private (cally_text);
|
||||||
|
|
||||||
clutter_pos = clutter_text_get_cursor_position (clutter_text);
|
clutter_pos = clutter_text_get_cursor_position (clutter_text);
|
||||||
clutter_bound = clutter_text_get_selection_bound (clutter_text);
|
clutter_bound = clutter_text_get_selection_bound (clutter_text);
|
||||||
|
|
||||||
if (clutter_pos != clutter_bound)
|
if (clutter_pos != clutter_bound)
|
||||||
{
|
{
|
||||||
if (clutter_pos != cally_text->priv->cursor_position ||
|
if (clutter_pos != priv->cursor_position ||
|
||||||
clutter_bound != cally_text->priv->selection_bound)
|
clutter_bound != priv->selection_bound)
|
||||||
/*
|
/*
|
||||||
* This check is here as this function can be called for
|
* This check is here as this function can be called for
|
||||||
* notification of selection_bound and current_pos. The
|
* notification of selection_bound and current_pos. The
|
||||||
@ -1739,11 +1747,11 @@ _check_for_selection_change (CallyText *cally_text,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* We had a selection */
|
/* We had a selection */
|
||||||
ret_val = (cally_text->priv->cursor_position != cally_text->priv->selection_bound);
|
ret_val = (priv->cursor_position != priv->selection_bound);
|
||||||
}
|
}
|
||||||
|
|
||||||
cally_text->priv->cursor_position = clutter_pos;
|
priv->cursor_position = clutter_pos;
|
||||||
cally_text->priv->selection_bound = clutter_bound;
|
priv->selection_bound = clutter_bound;
|
||||||
|
|
||||||
return ret_val;
|
return ret_val;
|
||||||
}
|
}
|
||||||
@ -1751,10 +1759,11 @@ _check_for_selection_change (CallyText *cally_text,
|
|||||||
static gboolean
|
static gboolean
|
||||||
_idle_notify_insert (gpointer data)
|
_idle_notify_insert (gpointer data)
|
||||||
{
|
{
|
||||||
CallyText *cally_text = NULL;
|
CallyText *cally_text = CALLY_TEXT (data);
|
||||||
|
CallyTextPrivate *priv =
|
||||||
|
cally_text_get_instance_private (cally_text);
|
||||||
|
|
||||||
cally_text = CALLY_TEXT (data);
|
priv->insert_idle_handler = 0;
|
||||||
cally_text->priv->insert_idle_handler = 0;
|
|
||||||
|
|
||||||
_notify_insert (cally_text);
|
_notify_insert (cally_text);
|
||||||
|
|
||||||
@ -1764,26 +1773,30 @@ _idle_notify_insert (gpointer data)
|
|||||||
static void
|
static void
|
||||||
_notify_insert (CallyText *cally_text)
|
_notify_insert (CallyText *cally_text)
|
||||||
{
|
{
|
||||||
if (cally_text->priv->signal_name_insert)
|
CallyTextPrivate *priv =
|
||||||
|
cally_text_get_instance_private (cally_text);
|
||||||
|
if (priv->signal_name_insert)
|
||||||
{
|
{
|
||||||
g_signal_emit_by_name (cally_text,
|
g_signal_emit_by_name (cally_text,
|
||||||
cally_text->priv->signal_name_insert,
|
priv->signal_name_insert,
|
||||||
cally_text->priv->position_insert,
|
priv->position_insert,
|
||||||
cally_text->priv->length_insert);
|
priv->length_insert);
|
||||||
cally_text->priv->signal_name_insert = NULL;
|
priv->signal_name_insert = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
_notify_delete (CallyText *cally_text)
|
_notify_delete (CallyText *cally_text)
|
||||||
{
|
{
|
||||||
if (cally_text->priv->signal_name_delete)
|
CallyTextPrivate *priv =
|
||||||
|
cally_text_get_instance_private (cally_text);
|
||||||
|
if (priv->signal_name_delete)
|
||||||
{
|
{
|
||||||
g_signal_emit_by_name (cally_text,
|
g_signal_emit_by_name (cally_text,
|
||||||
cally_text->priv->signal_name_delete,
|
priv->signal_name_delete,
|
||||||
cally_text->priv->position_delete,
|
priv->position_delete,
|
||||||
cally_text->priv->length_delete);
|
priv->length_delete);
|
||||||
cally_text->priv->signal_name_delete = NULL;
|
priv->signal_name_delete = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/* atkaction */
|
/* atkaction */
|
||||||
@ -1802,25 +1815,26 @@ static void
|
|||||||
_check_activate_action (CallyText *cally_text,
|
_check_activate_action (CallyText *cally_text,
|
||||||
ClutterText *clutter_text)
|
ClutterText *clutter_text)
|
||||||
{
|
{
|
||||||
|
CallyTextPrivate *priv =
|
||||||
|
cally_text_get_instance_private (cally_text);
|
||||||
if (clutter_text_get_activatable (clutter_text))
|
if (clutter_text_get_activatable (clutter_text))
|
||||||
{
|
{
|
||||||
if (cally_text->priv->activate_action_id != 0)
|
if (priv->activate_action_id != 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
cally_text->priv->activate_action_id = cally_actor_add_action (CALLY_ACTOR (cally_text),
|
priv->activate_action_id = cally_actor_add_action (CALLY_ACTOR (cally_text),
|
||||||
"activate", NULL, NULL,
|
"activate", NULL, NULL,
|
||||||
_cally_text_activate_action);
|
_cally_text_activate_action);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (cally_text->priv->activate_action_id == 0)
|
if (priv->activate_action_id == 0)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (cally_actor_remove_action (CALLY_ACTOR (cally_text),
|
if (cally_actor_remove_action (CALLY_ACTOR (cally_text),
|
||||||
cally_text->priv->activate_action_id))
|
priv->activate_action_id))
|
||||||
{
|
{
|
||||||
cally_text->priv->activate_action_id = 0;
|
priv->activate_action_id = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -30,23 +30,16 @@
|
|||||||
G_BEGIN_DECLS
|
G_BEGIN_DECLS
|
||||||
|
|
||||||
#define CALLY_TYPE_TEXT (cally_text_get_type ())
|
#define CALLY_TYPE_TEXT (cally_text_get_type ())
|
||||||
#define CALLY_TEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), CALLY_TYPE_TEXT, CallyText))
|
|
||||||
#define CALLY_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), CALLY_TYPE_TEXT, CallyTextClass))
|
|
||||||
#define CALLY_IS_TEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), CALLY_TYPE_TEXT))
|
|
||||||
#define CALLY_IS_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), CALLY_TYPE_TEXT))
|
|
||||||
#define CALLY_TEXT_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), CALLY_TYPE_TEXT, CallyTextClass))
|
|
||||||
|
|
||||||
typedef struct _CallyText CallyText;
|
CLUTTER_EXPORT
|
||||||
typedef struct _CallyTextClass CallyTextClass;
|
G_DECLARE_DERIVABLE_TYPE (CallyText,
|
||||||
typedef struct _CallyTextPrivate CallyTextPrivate;
|
cally_text,
|
||||||
|
CALLY,
|
||||||
|
TEXT,
|
||||||
|
CallyActor)
|
||||||
|
|
||||||
struct _CallyText
|
typedef struct _CallyText CallyText;
|
||||||
{
|
typedef struct _CallyTextClass CallyTextClass;
|
||||||
/*< private >*/
|
|
||||||
CallyActor parent;
|
|
||||||
|
|
||||||
CallyTextPrivate *priv;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct _CallyTextClass
|
struct _CallyTextClass
|
||||||
{
|
{
|
||||||
@ -54,8 +47,6 @@ struct _CallyTextClass
|
|||||||
CallyActorClass parent_class;
|
CallyActorClass parent_class;
|
||||||
};
|
};
|
||||||
|
|
||||||
CLUTTER_EXPORT
|
|
||||||
GType cally_text_get_type (void) G_GNUC_CONST;
|
|
||||||
CLUTTER_EXPORT
|
CLUTTER_EXPORT
|
||||||
AtkObject* cally_text_new (ClutterActor *actor);
|
AtkObject* cally_text_new (ClutterActor *actor);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user