r21886 - gnucash/branches/2.4 - [Bug #667900] no clipboard editing in Release 2.4.9
John Ralls
jralls at code.gnucash.org
Wed Jan 25 01:04:30 EST 2012
Author: jralls
Date: 2012-01-25 01:04:30 -0500 (Wed, 25 Jan 2012)
New Revision: 21886
Trac: http://svn.gnucash.org/trac/changeset/21886
Modified:
gnucash/branches/2.4/packaging/win32/defaults.sh
gnucash/branches/2.4/src/register/register-gnome/gnucash-item-edit.c
Log:
[Bug #667900] no clipboard editing in Release 2.4.9
Update Gtk+ to 2.24.8 for Windows, to pick up da756d51 (win32: fix gdk clipboard).
Rewrite gnc_item_edit_cut_copy_clipboard and gnc_item_edit_paste_clipboard to use gtk_clipboard functions instead of the lower level gtk_selection functions.
Modified: gnucash/branches/2.4/packaging/win32/defaults.sh
===================================================================
--- gnucash/branches/2.4/packaging/win32/defaults.sh 2012-01-24 14:00:00 UTC (rev 21885)
+++ gnucash/branches/2.4/packaging/win32/defaults.sh 2012-01-25 06:04:30 UTC (rev 21886)
@@ -260,7 +260,7 @@
set_default GLIB_DEV_URL "$GNOME_WIN32_URL/glib/2.28/glib-dev_2.28.1-1_win32.zip"
set_default GNOME_VFS_URL "$GNOME_WIN32_URL/gnome-vfs/2.24/gnome-vfs_2.24.1-1_win32.zip"
set_default GNOME_VFS_DEV_URL "$GNOME_WIN32_URL/gnome-vfs/2.24/gnome-vfs-dev_2.24.1-1_win32.zip"
-GTK_VERSION="2.24.0"
+GTK_VERSION="2.24.8"
set_default GTK_URL "$GNOME_WIN32_URL/gtk+/2.24/gtk+_${GTK_VERSION}-1_win32.zip"
set_default GTK_DEV_URL "$GNOME_WIN32_URL/gtk+/2.24/gtk+-dev_${GTK_VERSION}-1_win32.zip"
set_default GTK_DOC_URL "$GNOME_MIRROR/sources/gtk-doc/1.13/gtk-doc-1.13.tar.bz2"
Modified: gnucash/branches/2.4/src/register/register-gnome/gnucash-item-edit.c
===================================================================
--- gnucash/branches/2.4/src/register/register-gnome/gnucash-item-edit.c 2012-01-24 14:00:00 UTC (rev 21885)
+++ gnucash/branches/2.4/src/register/register-gnome/gnucash-item-edit.c 2012-01-25 06:04:30 UTC (rev 21886)
@@ -59,7 +59,6 @@
TARGET_UTF8_STRING,
TARGET_STRING,
TARGET_TEXT,
- TARGET_COMPOUND_TEXT
};
static GnomeCanvasItemClass *gnc_item_edit_parent_class;
@@ -831,6 +830,7 @@
gnc_item_edit_cut_copy_clipboard (GncItemEdit *item_edit, guint32 time, gboolean cut)
{
GtkEditable *editable;
+ GtkClipboard *clipboard;
gint start_sel, end_sel;
gchar *clip;
@@ -842,16 +842,14 @@
if (!gtk_editable_get_selection_bounds (editable, &start_sel, &end_sel))
return;
- g_free(item_edit->clipboard);
+ clipboard = gtk_widget_get_clipboard (GTK_WIDGET (editable),
+ clipboard_atom);
+ g_return_if_fail (clipboard != NULL);
+ g_return_if_fail (GTK_IS_CLIPBOARD (clipboard));
+ clip = gtk_editable_get_chars (editable, start_sel, end_sel);
+ gtk_clipboard_set_text (clipboard, clip, -1);
+ g_free (clip);
- if (gtk_selection_owner_set (GTK_WIDGET(item_edit->sheet),
- clipboard_atom, time))
- clip = gtk_editable_get_chars (editable, start_sel, end_sel);
- else
- clip = NULL;
-
- item_edit->clipboard = clip;
-
if (!cut)
return;
@@ -873,17 +871,49 @@
gnc_item_edit_cut_copy_clipboard(item_edit, time, FALSE);
}
+static void
+paste_received (GtkClipboard *clipboard, const gchar *text, gpointer data)
+{
+ GtkEditable *editable = GTK_EDITABLE (data);
+ gboolean reselect = FALSE;
+ gint old_pos, tmp_pos;
+ gint start_sel, end_sel;
+ if (text == NULL)
+ return;
+ if (gtk_editable_get_selection_bounds (editable, &start_sel, &end_sel))
+ {
+ reselect = TRUE;
+ gtk_editable_delete_text (editable, start_sel, end_sel);
+ }
+
+ tmp_pos = old_pos = gtk_editable_get_position (editable);
+
+ gtk_editable_insert_text (editable, text, -1, &tmp_pos);
+ gtk_editable_set_position (editable, tmp_pos);
+
+ if (!reselect)
+ return;
+
+ gtk_editable_select_region (editable, old_pos,
+ gtk_editable_get_position (editable));
+
+}
+
void
gnc_item_edit_paste_clipboard (GncItemEdit *item_edit, guint32 time)
{
+ GtkClipboard *clipboard;
g_return_if_fail(item_edit != NULL);
g_return_if_fail(GNC_IS_ITEM_EDIT(item_edit));
- gtk_selection_convert(GTK_WIDGET(item_edit->sheet),
- clipboard_atom,
- gdk_atom_intern("UTF8_STRING", FALSE),
- time);
+ clipboard = gtk_widget_get_clipboard (GTK_WIDGET (item_edit->sheet),
+ clipboard_atom);
+
+ g_return_if_fail (clipboard != NULL);
+ g_return_if_fail (GTK_IS_CLIPBOARD (clipboard));
+
+ gtk_clipboard_request_text (clipboard, paste_received, item_edit->editor);
}
@@ -1202,7 +1232,6 @@
static const GtkTargetEntry targets[] =
{
{ "UTF8_STRING", 0, TARGET_UTF8_STRING },
- { "COMPOUND_TEXT", 0, TARGET_COMPOUND_TEXT },
{ "TEXT", 0, TARGET_TEXT },
{ "STRING", 0, TARGET_STRING },
};
@@ -1505,6 +1534,7 @@
gint start_pos;
gint end_pos;
+ GdkAtom selection = selection_data->selection;
gchar *str;
gint length;
@@ -1514,7 +1544,7 @@
editable = GTK_EDITABLE (item_edit->editor);
- if (selection_data->selection == GDK_SELECTION_PRIMARY)
+ if (selection == GDK_SELECTION_PRIMARY)
{
gtk_editable_get_selection_bounds (editable, &start_pos, &end_pos);
More information about the gnucash-changes
mailing list