[Gnucash-changes] r14322 - gnucash/trunk - Use UTF8_STRING for
copy/pastes,
as it's at least 4 whole characters better than just "STRING".
Joshua Sled
jsled at cvs.gnucash.org
Sun Jun 4 17:43:46 EDT 2006
Author: jsled
Date: 2006-06-04 17:43:45 -0400 (Sun, 04 Jun 2006)
New Revision: 14322
Trac: http://svn.gnucash.org/trac/changeset/14322
Modified:
gnucash/trunk/ChangeLog
gnucash/trunk/src/register/register-gnome/gnucash-item-edit.c
Log:
Use UTF8_STRING for copy/pastes, as it's at least 4 whole characters better than just "STRING".
Modified: gnucash/trunk/ChangeLog
===================================================================
--- gnucash/trunk/ChangeLog 2006-06-04 21:02:26 UTC (rev 14321)
+++ gnucash/trunk/ChangeLog 2006-06-04 21:43:45 UTC (rev 14322)
@@ -6,6 +6,13 @@
2006-06-04 Joshua Sled <jsled at asynchronous.org>
+ * src/register/register-gnome/gnucash-item-edit.c (gnc_item_edit_selection_received)
+ (gnc_item_edit_selection_get, gnc_item_edit_paste_clipboard)
+ (gnc_item_edit_paste_primary, gnc_item_edit_new): Use the
+ selection type UTF8_STRING for copy/paste rather than the combination
+ of COMPOUND_TEXT, TEXT and STRING, as the LCD STRING is inadequate
+ for interesting characters, and it is what the rest of GTK does.
+
* src/register/register-gnome/gnucash-item-edit.c
(gnc_item_edit_selection_get),
(gnc_item_edit_selection_received): Handle selections more
Modified: gnucash/trunk/src/register/register-gnome/gnucash-item-edit.c
===================================================================
--- gnucash/trunk/src/register/register-gnome/gnucash-item-edit.c 2006-06-04 21:02:26 UTC (rev 14321)
+++ gnucash/trunk/src/register/register-gnome/gnucash-item-edit.c 2006-06-04 21:43:45 UTC (rev 14322)
@@ -54,6 +54,7 @@
/* values for selection info */
enum {
+ TARGET_UTF8_STRING,
TARGET_STRING,
TARGET_TEXT,
TARGET_COMPOUND_TEXT
@@ -61,7 +62,6 @@
static GnomeCanvasItemClass *gnc_item_edit_parent_class;
static GdkAtom clipboard_atom = GDK_NONE;
-static GdkAtom ctext_atom = GDK_NONE;
typedef struct _TextDrawInfo TextDrawInfo;
@@ -810,7 +810,6 @@
gnc_item_edit_cut_copy_clipboard(item_edit, time, TRUE);
}
-
void
gnc_item_edit_copy_clipboard (GncItemEdit *item_edit, guint32 time)
{
@@ -824,11 +823,10 @@
g_return_if_fail(item_edit != NULL);
g_return_if_fail(GNC_IS_ITEM_EDIT(item_edit));
- if (ctext_atom == GDK_NONE)
- ctext_atom = gdk_atom_intern ("COMPOUND_TEXT", FALSE);
-
gtk_selection_convert(GTK_WIDGET(item_edit->sheet),
- clipboard_atom, ctext_atom, time);
+ clipboard_atom,
+ gdk_atom_intern("UTF8_STRING", FALSE),
+ time);
}
@@ -838,11 +836,10 @@
g_return_if_fail(item_edit != NULL);
g_return_if_fail(GNC_IS_ITEM_EDIT(item_edit));
- if (ctext_atom == GDK_NONE)
- ctext_atom = gdk_atom_intern ("COMPOUND_TEXT", FALSE);
-
gtk_selection_convert(GTK_WIDGET(item_edit->sheet),
- GDK_SELECTION_PRIMARY, ctext_atom, time);
+ GDK_SELECTION_PRIMARY,
+ gdk_atom_intern("UTF8_STRING", FALSE),
+ time);
}
@@ -1142,9 +1139,10 @@
gnc_item_edit_new (GnomeCanvasGroup *parent, GnucashSheet *sheet, GtkWidget *entry)
{
static const GtkTargetEntry targets[] = {
- { "STRING", 0, TARGET_STRING },
+ { "UTF8_STRING", 0, TARGET_UTF8_STRING },
+ { "COMPOUND_TEXT", 0, TARGET_COMPOUND_TEXT },
{ "TEXT", 0, TARGET_TEXT },
- { "COMPOUND_TEXT", 0, TARGET_COMPOUND_TEXT }
+ { "STRING", 0, TARGET_STRING },
};
static const gint n_targets = sizeof(targets) / sizeof(targets[0]);
@@ -1461,44 +1459,16 @@
str = gtk_editable_get_chars(editable, start_pos, end_pos);
}
else /* CLIPBOARD */
+ {
str = item_edit->clipboard;
+ }
if (str == NULL)
return;
length = strlen(str);
-
- if (info == TARGET_STRING)
- {
- gtk_selection_data_set (selection_data,
- GDK_SELECTION_TYPE_STRING,
- 8 * sizeof(gchar), (guchar *) str,
- length);
- }
- else if ((info == TARGET_TEXT) || (info == TARGET_COMPOUND_TEXT))
- {
- guchar *text;
- gchar c;
- GdkAtom encoding;
- gint format;
- gint new_length;
+ gtk_selection_data_set_text(selection_data, str, length);
- c = str[length];
- str[length] = '\0';
-
- gdk_utf8_to_compound_text(str, &encoding, &format,
- &text, &new_length);
- // for some reason, format is set to '0', which makes GTK
- // complain. -- jsled
- format = 8;
- gtk_selection_data_set(selection_data, encoding,
- format, text, new_length);
-
- gdk_free_compound_text(text);
-
- str[length] = c;
- }
-
if (str != item_edit->clipboard)
g_free(str);
}
@@ -1514,20 +1484,22 @@
gint old_pos;
gint tmp_pos;
gint start_sel, end_sel;
- enum {INVALID, STRING, CTEXT} type;
+ enum {INVALID, CTEXT} type;
g_return_if_fail(item_edit != NULL);
g_return_if_fail(GNC_IS_ITEM_EDIT(item_edit));
editable = GTK_EDITABLE(item_edit->editor);
- if (selection_data->type == GDK_TARGET_STRING)
+ /* @fixme: this should implement the fallback logic from
+ * gtkclipboard.c:request_text_received_func. It'd be nice to have a
+ * good way to test the various request types. :( --jsled **/
+
+ if (selection_data->type == GDK_TARGET_STRING
+ || selection_data->type == gdk_atom_intern("UTF8_STRING", FALSE)
+ || selection_data->type == gdk_atom_intern("COMPOUND_TEXT", FALSE)
+ || selection_data->type == gdk_atom_intern("TEXT", FALSE))
{
- type = STRING;
- }
- else if (selection_data->type == gdk_atom_intern("COMPOUND_TEXT", FALSE)
- || selection_data->type == gdk_atom_intern("TEXT", FALSE))
- {
type = CTEXT;
}
else
@@ -1559,45 +1531,19 @@
tmp_pos = old_pos = gtk_editable_get_position (editable);
- switch (type)
{
- case STRING:
- selection_data->data[selection_data->length] = 0;
-
- gtk_editable_insert_text
- (editable, (gchar *) selection_data->data,
- strlen((gchar *)selection_data->data),
- &tmp_pos);
-
+ guchar *sel = gtk_selection_data_get_text(selection_data);
+
+ if (sel)
+ {
+ gtk_editable_insert_text(editable,
+ sel, strlen(sel),
+ &tmp_pos);
gtk_editable_set_position(editable, tmp_pos);
- break;
- case CTEXT: {
- gchar **list;
- gint count;
- gint i;
-
- count = gdk_text_property_to_utf8_list
- (selection_data->type, selection_data->format,
- selection_data->data, selection_data->length,
- &list);
-
- for (i = 0; i < count; i++)
- {
- gtk_editable_insert_text(editable,
- list[i],
- strlen(list[i]),
- &tmp_pos);
- gtk_editable_set_position(editable, tmp_pos);
- }
-
- if (count > 0)
- gdk_free_text_list(list);
+ g_free(sel);
}
- break;
- case INVALID: /* quiet compiler */
- break;
}
-
+
if (!reselect)
return;
More information about the gnucash-changes
mailing list