+<2001-10-09 Bill Haneman <bill.haneman@sun.com>
+ * libspi/text.c, editabletext.c:
+ Added new assertions to all casts of bonobo-objects from
+ CORBA servants, to prevent Text API calls on non-text objects.
+ Changed suspect casts of int-pointer types, so that we
+ always send a valid CORBA_long pointer to the CORBA APIs that use
+ in/out long parameters. We then have to copy from the CORBA_long
+ into the regular long or int for return to the C bindings, or
+ vice-versa when returning parameters from ATK calls to the bonobo wrappers.
+
+ * cspi/spi_text.c:
+ * libspi/deviceeventcontroller.c:
+ Cleaned these sources up.
+ * idl/Text.idl:
+ Changed return type for getCharacterAtOffset to
+ CORBA_unsigned_long, to allow for 32-bit characters.
+
+
<2001-10-08 Bill Haneman <bill.haneman@sun.com>
* util/Makefile.am:
long offset,
TEXT_BOUNDARY_TYPE type,
long *startOffset, long *endOffset);
-char
+unsigned long
AccessibleText_getCharacterAtOffset (AccessibleText *obj,
long offset);
long *startOffset,
long *endOffset)
{
- return (char *)
+ CORBA_long retStartOffset, retEndOffset;
+ char *retval;
+ retval = (char *)
Accessibility_Text_getAttributes (*obj,
(CORBA_long) offset,
- (CORBA_long *) startOffset,
- (CORBA_long *) endOffset, &ev);
+ &retStartOffset,
+ &retEndOffset,
+ &ev);
+ *startOffset = (long) retStartOffset;
+ *endOffset = (long) retEndOffset;
+ return retval;
}
TEXT_BOUNDARY_TYPE type,
long *startOffset, long *endOffset)
{
- return (char *)
+ char *retval;
+ CORBA_long retStartOffset, retEndOffset;
+ retval = (char *)
Accessibility_Text_getTextBeforeOffset (*obj,
- (CORBA_long) offset, (Accessibility_TEXT_BOUNDARY_TYPE) type,
- (CORBA_long *) startOffset, (CORBA_long *) endOffset,
- &ev);
+ (CORBA_long) offset, (Accessibility_TEXT_BOUNDARY_TYPE) type,
+ &retStartOffset, &retEndOffset,
+ &ev);
+ *startOffset = (long) retStartOffset;
+ *endOffset = (long) retEndOffset;
+ return retval;
}
TEXT_BOUNDARY_TYPE type,
long *startOffset, long *endOffset)
{
- return (char *)
+ char *retval;
+ CORBA_long retStartOffset, retEndOffset;
+ retval = (char *)
Accessibility_Text_getTextAfterOffset (*obj,
(CORBA_long) offset, (Accessibility_TEXT_BOUNDARY_TYPE) type,
- (CORBA_long *) startOffset, (CORBA_long *) endOffset,
+ &retStartOffset, &retEndOffset,
&ev);
+ *startOffset = (long) retStartOffset;
+ *endOffset = (long) retEndOffset;
+ return retval;
}
-char
+unsigned long
AccessibleText_getCharacterAtOffset (AccessibleText *obj,
long offset)
{
- return (char)
+ return (unsigned long)
Accessibility_Text_getCharacterAtOffset (*obj,
(CORBA_long) offset, &ev);
}
long *height,
AccessibleCoordType type)
{
+ CORBA_long retX, retY, retWidth, retHeight;
Accessibility_Text_getCharacterExtents (*obj,
(CORBA_long) offset,
- (CORBA_long *) x,
- (CORBA_long *) y,
- (CORBA_long *) width,
- (CORBA_long *) height,
+ &retX,
+ &retY,
+ &retWidth,
+ &retHeight,
(CORBA_short) type, &ev);
+ *x = (long) retX;
+ *y = (long) retY;
+ *width = (long) retWidth;
+ *height = (long) retHeight;
}
long selectionNum, long *startOffset,
long *endOffset)
{
+ CORBA_long retStartOffset, retEndOffset;
Accessibility_Text_getSelection (*obj,
(CORBA_long) selectionNum,
- (CORBA_long *) startOffset,
- (CORBA_long *) endOffset, &ev);
+ &retStartOffset, &retEndOffset, &ev);
+
+ *startOffset = (long) retStartOffset;
+ *endOffset = (long) retEndOffset;
}
Accessibility_Text_setSelection (*obj,
(CORBA_long) selectionNum,
(CORBA_long) startOffset,
- (CORBA_long) endOffset, &ev);
+ (CORBA_long) endOffset, &ev);
}
out long startOffset, out long endOffset);
string getTextAfterOffset (in long offset, in TEXT_BOUNDARY_TYPE type,
out long startOffset, out long endOffset);
- wchar getCharacterAtOffset (in long offset); /* could be string instead,
- * to allow unicode chars > 16 bits
- */
+ unsigned long getCharacterAtOffset (in long offset); /* long instead of wchar,
+ * to allow unicode chars > 16 bits
+ */
/* void getRowColAtOffset (in long offset, out long row, out long column); */
string getAttributes (in long offset,
out long startOffset, out long endOffset);
out long startOffset, out long endOffset);
string getTextAfterOffset (in long offset, in TEXT_BOUNDARY_TYPE type,
out long startOffset, out long endOffset);
- wchar getCharacterAtOffset (in long offset); /* could be string instead,
- * to allow unicode chars > 16 bits
- */
+ unsigned long getCharacterAtOffset (in long offset); /* long instead of wchar,
+ * to allow unicode chars > 16 bits
+ */
/* void getRowColAtOffset (in long offset, out long row, out long column); */
string getAttributes (in long offset,
out long startOffset, out long endOffset);
if (!mask_ptr->refcount)
{
controller->keymask_list = g_list_remove (controller->keymask_list, mask_ptr);
- ; /* release any key grabs that are in place for this key mask */
+ ; /* TODO: release any key grabs that are in place for this key mask */
}
break;
case DEVICE_TYPE_MOUSE:
const CORBA_long endPos,
CORBA_Environment * ev)
{
+ EditableText *editable;
+ BonoboObject *obj;
+ obj = (bonobo_object_from_servant (_servant));
+ g_return_if_fail (IS_EDITABLE_TEXT (obj));
+ editable = EDITABLE_TEXT(bonobo_object_from_servant (_servant));
+ g_return_if_fail (ATK_IS_EDITABLE_TEXT ( (TEXT (obj))->atko));
+
g_print ("setRunAttributes not implemented.\n");
}
const CORBA_char * newContents,
CORBA_Environment * ev)
{
- EditableText *editable = EDITABLE_TEXT(bonobo_object_from_servant (_servant));
+ EditableText *editable;
+ BonoboObject *obj;
+ obj = (bonobo_object_from_servant (_servant));
+ g_return_if_fail (IS_EDITABLE_TEXT (obj));
+ editable = EDITABLE_TEXT(bonobo_object_from_servant (_servant));
+ g_return_if_fail (ATK_IS_EDITABLE_TEXT ( (TEXT (obj))->atko));
+
atk_editable_text_set_text_contents (ATK_EDITABLE_TEXT( TEXT (editable)->atko),
(gchar *) newContents);
}
const CORBA_long length,
CORBA_Environment * ev)
{
- EditableText *editable = EDITABLE_TEXT (bonobo_object_from_servant(_servant));
+ EditableText *editable;
+ BonoboObject *obj;
+ obj = (bonobo_object_from_servant (_servant));
+ g_return_if_fail (IS_EDITABLE_TEXT (obj));
+ editable = EDITABLE_TEXT(bonobo_object_from_servant (_servant));
+ g_return_if_fail (ATK_IS_EDITABLE_TEXT ( (TEXT (obj))->atko));
+
atk_editable_text_insert_text (ATK_EDITABLE_TEXT( TEXT (editable)->atko),
(gchar *) text,
(gint) length,
const CORBA_long startPos, const CORBA_long endPos,
CORBA_Environment * ev)
{
- EditableText *editable = EDITABLE_TEXT (bonobo_object_from_servant(_servant));
+ EditableText *editable;
+ BonoboObject *obj;
+ obj = (bonobo_object_from_servant (_servant));
+ g_return_if_fail (IS_EDITABLE_TEXT (obj));
+ editable = EDITABLE_TEXT(bonobo_object_from_servant (_servant));
+ g_return_if_fail (ATK_IS_EDITABLE_TEXT ( (TEXT (obj))->atko));
+
atk_editable_text_copy_text (ATK_EDITABLE_TEXT( TEXT(editable)->atko),
(gint) startPos, (gint) endPos);
}
const CORBA_long startPos, const CORBA_long endPos,
CORBA_Environment * ev)
{
- EditableText *editable = EDITABLE_TEXT (bonobo_object_from_servant(_servant));
+ EditableText *editable;
+ BonoboObject *obj;
+ obj = (bonobo_object_from_servant (_servant));
+ g_return_if_fail (IS_EDITABLE_TEXT (obj));
+ editable = EDITABLE_TEXT(bonobo_object_from_servant (_servant));
+ g_return_if_fail (ATK_IS_EDITABLE_TEXT ( (TEXT (obj))->atko));
+
atk_editable_text_cut_text (ATK_EDITABLE_TEXT(TEXT (editable)->atko),
(gint) startPos, (gint) endPos);
}
const CORBA_long startPos, const CORBA_long endPos,
CORBA_Environment * ev)
{
- EditableText *editable = EDITABLE_TEXT (bonobo_object_from_servant(_servant));
+ EditableText *editable;
+ BonoboObject *obj;
+ obj = (bonobo_object_from_servant (_servant));
+ g_return_if_fail (IS_EDITABLE_TEXT (obj));
+ editable = EDITABLE_TEXT(bonobo_object_from_servant (_servant));
+ g_return_if_fail (ATK_IS_EDITABLE_TEXT ( (TEXT (obj))->atko));
+
atk_editable_text_delete_text (ATK_EDITABLE_TEXT( TEXT(editable)->atko),
(gint) startPos, (gint) endPos);
}
impl_pasteText (PortableServer_Servant _servant,
const CORBA_long position, CORBA_Environment * ev)
{
- EditableText *editable = EDITABLE_TEXT (bonobo_object_from_servant(_servant));
+ EditableText *editable;
+ BonoboObject *obj;
+ obj = (bonobo_object_from_servant (_servant));
+ g_return_if_fail (IS_EDITABLE_TEXT (obj));
+ editable = EDITABLE_TEXT(bonobo_object_from_servant (_servant));
+ g_return_if_fail (ATK_IS_EDITABLE_TEXT ( (TEXT (obj))->atko));
+
atk_editable_text_paste_text (ATK_EDITABLE_TEXT( TEXT(editable)->atko), position);
}
#define EDITABLE_TEXT_TYPE (editable_text_get_type ())
#define EDITABLE_TEXT(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EDITABLE_TEXT_TYPE, EditableText))
#define EDITABLE_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST((klass), EDITABLE_TEXT_TYPE, EditableText))
-#define IS_EDITABLE_TEXT(obj) (G_TYPE_CHECK__INSTANCE_TYPE ((obj), EDITABLE_TEXT_TYPE))
+#define IS_EDITABLE_TEXT(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), EDITABLE_TEXT_TYPE))
#define IS_EDITABLE_TEXT_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), EDITABLE_TEXT_TYPE))
typedef struct _EditableText EditableText;
CORBA_long * startOffset,
CORBA_long * endOffset,
CORBA_Environment * ev);
-static CORBA_wchar
+
+static CORBA_unsigned_long
impl_getCharacterAtOffset (PortableServer_Servant _servant,
const CORBA_long offset,
CORBA_Environment * ev);
const CORBA_long endOffset,
CORBA_Environment * ev)
{
- Text *text = TEXT (bonobo_object_from_servant (_servant));
+ Text *text;
gchar *txt;
CORBA_char *rv;
-
+ BonoboObject *obj;
+
+ obj = (bonobo_object_from_servant (_servant));
+ g_return_val_if_fail (IS_TEXT (obj), (CORBA_char *)"");
+ text = TEXT (obj);
+ g_return_val_if_fail (ATK_IS_TEXT (text->atko), (CORBA_char *)"");
+
txt = atk_text_get_text (ATK_TEXT(text->atko),
(gint) startOffset, (gint) endOffset);
if (txt)
CORBA_long * endOffset,
CORBA_Environment * ev)
{
- Text *text = TEXT (bonobo_object_from_servant (_servant));
+ Text *text;
gchar *txt;
CORBA_char *rv;
+ gint intStartOffset, intEndOffset;
+ BonoboObject *obj;
-
+ obj = (bonobo_object_from_servant (_servant));
+ g_return_val_if_fail (IS_TEXT (obj), (CORBA_char *)"");
+ text = TEXT (obj);
+ g_return_val_if_fail (ATK_IS_TEXT (text->atko), (CORBA_char *)"");
+
txt = atk_text_get_text_after_offset (ATK_TEXT(text->atko),
(gint) offset, (AtkTextBoundary) type,
- (gint *) startOffset, (gint *) endOffset);
+ &intStartOffset, &intEndOffset);
+ *startOffset = (CORBA_long) intStartOffset;
+ *endOffset = (CORBA_long) intEndOffset;
+
if (txt)
{
rv = CORBA_string_dup (txt);
CORBA_char *txt;
CORBA_char *rv;
gint intStartOffset, intEndOffset;
-
BonoboObject *obj;
- fprintf (stderr, "getting bonobo-object from text servant\n");
+
obj = (bonobo_object_from_servant (_servant));
-
- g_return_val_if_fail (IS_TEXT (bonobo_object_from_servant (_servant)), (CORBA_char *)"");
- g_return_val_if_fail (ATK_IS_TEXT (text->atko), (CORBA_char *)"");
+ g_return_val_if_fail (IS_TEXT (obj), (CORBA_char *)"");
+ text = TEXT (obj);
+ g_return_val_if_fail (ATK_IS_TEXT (text->atko), (CORBA_char *)"");
+
txt = (CORBA_char *) atk_text_get_text_at_offset (ATK_TEXT (text->atko),
(gint) offset, (AtkTextBoundary) type,
&intStartOffset, &intEndOffset);
}
-
-static CORBA_wchar
+static CORBA_unsigned_long
impl_getCharacterAtOffset (PortableServer_Servant _servant,
const CORBA_long offset,
CORBA_Environment * ev)
{
- Text *text = TEXT (bonobo_object_from_servant (_servant));
- return (CORBA_wchar)
+ Text *text;
+ BonoboObject *obj;
+ obj = (bonobo_object_from_servant (_servant));
+
+ g_return_val_if_fail (IS_TEXT (obj), (CORBA_unsigned_long)0);
+ text = TEXT (obj);
+ g_return_val_if_fail (ATK_IS_TEXT (text->atko), (CORBA_unsigned_long)0);
+
+ return (CORBA_unsigned_long)
atk_text_get_character_at_offset (ATK_TEXT(text->atko), (gint) offset);
}
CORBA_long * endOffset,
CORBA_Environment * ev)
{
- Text *text = TEXT (bonobo_object_from_servant (_servant));
+ Text *text;
gchar *txt;
CORBA_char *rv;
+ gint intStartOffset, intEndOffset;
+ BonoboObject *obj;
+
+ obj = (bonobo_object_from_servant (_servant));
+ g_return_val_if_fail (IS_TEXT (obj), (CORBA_char *)"");
+ text = TEXT (obj);
+ g_return_val_if_fail (ATK_IS_TEXT (text->atko), (CORBA_char *)"");
txt = atk_text_get_text_before_offset (ATK_TEXT(text->atko),
(gint) offset, (AtkTextBoundary) type,
- (gint *) startOffset, (gint *) endOffset);
+ &intStartOffset, &intEndOffset);
+ *startOffset = (CORBA_long) intStartOffset;
+ *endOffset = (CORBA_long) intEndOffset;
+
if (txt)
{
rv = CORBA_string_dup (txt);
impl__get_caretOffset (PortableServer_Servant _servant,
CORBA_Environment * ev)
{
- Text *text = TEXT (bonobo_object_from_servant (_servant));
+ Text *text;
+ BonoboObject *obj;
+
+ obj = (bonobo_object_from_servant (_servant));
+ g_return_val_if_fail (IS_TEXT (obj), (CORBA_long)-1);
+ text = TEXT (obj);
+ g_return_val_if_fail (ATK_IS_TEXT (text->atko), (CORBA_long)-1);
+
return (CORBA_long)
atk_text_get_caret_offset (ATK_TEXT(text->atko));
}
CORBA_long * endOffset,
CORBA_Environment * ev)
{
- Text *text = TEXT (bonobo_object_from_servant (_servant));
- g_print ("getAttributes not implemented.\n");
-}
+ Text *text;
+ BonoboObject *obj;
+ obj = (bonobo_object_from_servant (_servant));
+ g_return_val_if_fail (IS_TEXT (obj), (CORBA_char *)"");
+ text = TEXT (obj);
+ g_return_val_if_fail (ATK_IS_TEXT (text->atko), (CORBA_char *)"");
+ g_print ("getAttributes not yet implemented.\n");
+}
static void
impl_getCharacterExtents (PortableServer_Servant _servant,
const CORBA_short coordType,
CORBA_Environment * ev)
{
- Text *text = TEXT (bonobo_object_from_servant (_servant));
+ Text *text;
+ BonoboObject *obj;
+
+ obj = (bonobo_object_from_servant (_servant));
+ g_return_if_fail (IS_TEXT (obj));
+ text = TEXT (obj);
+ g_return_if_fail (ATK_IS_TEXT (text->atko));
+
atk_text_get_character_extents (ATK_TEXT(text->atko), (gint) offset,
(gint *) x, (gint *) y, (gint *) width, (gint *) height,
(AtkCoordType) coordType);
impl__get_characterCount (PortableServer_Servant _servant,
CORBA_Environment * ev)
{
- Text *text = TEXT (bonobo_object_from_servant (_servant));
+ Text *text;
+ BonoboObject *obj;
+
+ obj = (bonobo_object_from_servant (_servant));
+ g_return_val_if_fail (IS_TEXT (obj), (CORBA_long)0);
+ text = TEXT (obj);
+
return (CORBA_long)
atk_text_get_character_count (ATK_TEXT(text->atko));
}
const CORBA_short coordType,
CORBA_Environment * ev)
{
- Text *text = TEXT (bonobo_object_from_servant (_servant));
+ Text *text;
+ BonoboObject *obj;
+
+ obj = (bonobo_object_from_servant (_servant));
+ g_return_val_if_fail (IS_TEXT (obj), (CORBA_long)-1);
+ text = TEXT (obj);
+
return (CORBA_long)
atk_text_get_offset_at_point (ATK_TEXT(text->atko),
(gint) x, (gint) y, (AtkCoordType) coordType);
impl_getNSelections (PortableServer_Servant _servant,
CORBA_Environment * ev)
{
- Text *text = TEXT (bonobo_object_from_servant (_servant));
+ Text *text;
+ BonoboObject *obj;
+
+ obj = (bonobo_object_from_servant (_servant));
+ g_return_val_if_fail (IS_TEXT (obj), (CORBA_long)0);
+ text = TEXT (obj);
+
return (CORBA_long)
atk_text_get_n_selections (ATK_TEXT(text->atko));
}
CORBA_long * startOffset, CORBA_long * endOffset,
CORBA_Environment * ev)
{
- Text *text = TEXT (bonobo_object_from_servant (_servant));
+ Text *text;
+ BonoboObject *obj;
+
+ obj = (bonobo_object_from_servant (_servant));
+ g_return_if_fail (IS_TEXT (obj));
+ text = TEXT (obj);
+
atk_text_get_selection (ATK_TEXT(text->atko), (gint) selectionNum,
(gint *) startOffset, (gint *) endOffset);
}
const CORBA_long endOffset,
CORBA_Environment * ev)
{
- Text *text = TEXT (bonobo_object_from_servant (_servant));
+ Text *text;
+ BonoboObject *obj;
+
+ obj = (bonobo_object_from_servant (_servant));
+ g_return_val_if_fail (IS_TEXT (obj), (CORBA_boolean)FALSE);
+ text = TEXT (obj);
+
return (CORBA_boolean)
atk_text_add_selection (ATK_TEXT(text->atko),
(gint) startOffset, (gint) endOffset);
const CORBA_long selectionNum,
CORBA_Environment * ev)
{
- Text *text = TEXT (bonobo_object_from_servant (_servant));
+ Text *text;
+ BonoboObject *obj;
+
+ obj = (bonobo_object_from_servant (_servant));
+ g_return_val_if_fail (IS_TEXT (obj), (CORBA_boolean)FALSE);
+ text = TEXT (obj);
+
return (CORBA_boolean)
atk_text_remove_selection (ATK_TEXT(text->atko), (gint) selectionNum);
}
const CORBA_long endOffset,
CORBA_Environment * ev)
{
- Text *text = TEXT (bonobo_object_from_servant (_servant));
+ Text *text;
+ BonoboObject *obj;
+
+ obj = (bonobo_object_from_servant (_servant));
+ g_return_val_if_fail (IS_TEXT (obj), (CORBA_boolean)FALSE);
+ text = TEXT (obj);
+
return (CORBA_boolean)
atk_text_set_selection (ATK_TEXT(text->atko),
(gint) selectionNum, (gint) startOffset, (gint) endOffset);
const CORBA_long value,
CORBA_Environment * ev)
{
- Text *text = TEXT (bonobo_object_from_servant (_servant));
+ Text *text;
+ BonoboObject *obj;
+
+ obj = (bonobo_object_from_servant (_servant));
+ g_return_val_if_fail (IS_TEXT (obj), (CORBA_boolean)FALSE);
+ text = TEXT (obj);
+
return (CORBA_boolean)
atk_text_set_caret_offset (ATK_TEXT(text->atko), (gint) value);
}
const CORBA_long offset, CORBA_long * row,
CORBA_long * column, CORBA_Environment * ev)
{
- Text *text = TEXT (bonobo_object_from_servant (_servant));
+ Text *text;
+ BonoboObject *obj;
+
+ obj = (bonobo_object_from_servant (_servant));
+ g_return_if_fail (IS_TEXT (obj));
+ text = TEXT (obj);
+
+ g_print ("getRowColAtOffset not yet implemented\n");
}
if (!mask_ptr->refcount)
{
controller->keymask_list = g_list_remove (controller->keymask_list, mask_ptr);
- ; /* release any key grabs that are in place for this key mask */
+ ; /* TODO: release any key grabs that are in place for this key mask */
}
break;
case DEVICE_TYPE_MOUSE:
gdk_window_resize (window->window, magnifier->mag_data->mag_width, magnifier->mag_data->mag_height);
magnifier->mag_data->output_window = window;
if (global_options.fullscreen) gdk_window_stick (window->window);
- gtk_window_set_decorated(window, FALSE);
+ gtk_window_set_decorated(GTK_WINDOW (window), FALSE);
gdk_window_set_functions(window->window, 0);
gdk_window_raise(window->window);