diff options
-rw-r--r-- | ChangeLog | 9 | ||||
-rw-r--r-- | ChangeLog.pre-2-10 | 9 | ||||
-rw-r--r-- | gtk/gtktextbuffer.c | 18 | ||||
-rw-r--r-- | tests/testtext.c | 34 |
4 files changed, 60 insertions, 10 deletions
@@ -1,6 +1,13 @@ +2006-08-17 Paolo Borelli <pborelli@katamail.com> + + * gtk/gtktextbuffer.c: make sure the has-selection property is + updated when the delection is deleted. Bug #329752 + * tests/testtext.c: add a copy menu item and show how to + update its sensitivity tracking the has-selection property. + 2006-08-17 Michael Emmel <mike.emmel@gmail.com> - * configure.in + * configure.in: Changed to use cairo-directfb.pc bug #351519 2006-08-17 Kristian Rietveld <kris@gtk.org> diff --git a/ChangeLog.pre-2-10 b/ChangeLog.pre-2-10 index af578676ea..79a8fae4b0 100644 --- a/ChangeLog.pre-2-10 +++ b/ChangeLog.pre-2-10 @@ -1,6 +1,13 @@ +2006-08-17 Paolo Borelli <pborelli@katamail.com> + + * gtk/gtktextbuffer.c: make sure the has-selection property is + updated when the delection is deleted. Bug #329752 + * tests/testtext.c: add a copy menu item and show how to + update its sensitivity tracking the has-selection property. + 2006-08-17 Michael Emmel <mike.emmel@gmail.com> - * configure.in + * configure.in: Changed to use cairo-directfb.pc bug #351519 2006-08-17 Kristian Rietveld <kris@gtk.org> diff --git a/gtk/gtktextbuffer.c b/gtk/gtktextbuffer.c index fa7f4980cf..3de0d79208 100644 --- a/gtk/gtktextbuffer.c +++ b/gtk/gtktextbuffer.c @@ -1388,6 +1388,8 @@ gtk_text_buffer_real_delete_range (GtkTextBuffer *buffer, GtkTextIter *start, GtkTextIter *end) { + gboolean has_selection; + g_return_if_fail (GTK_IS_TEXT_BUFFER (buffer)); g_return_if_fail (start != NULL); g_return_if_fail (end != NULL); @@ -1397,6 +1399,13 @@ gtk_text_buffer_real_delete_range (GtkTextBuffer *buffer, /* may have deleted the selection... */ update_selection_clipboards (buffer); + has_selection = gtk_text_buffer_get_selection_bounds (buffer, NULL, NULL); + if (has_selection != buffer->has_selection) + { + buffer->has_selection = has_selection; + g_object_notify (G_OBJECT (buffer), "has-selection"); + } + g_signal_emit (buffer, signals[CHANGED], 0); g_object_notify (G_OBJECT (buffer), "cursor-position"); } @@ -1854,12 +1863,6 @@ gtk_text_buffer_set_mark (GtkTextBuffer *buffer, iter, should_exist); - if (_gtk_text_btree_mark_is_insert (get_btree (buffer), mark) || - _gtk_text_btree_mark_is_selection_bound (get_btree (buffer), mark)) - { - update_selection_clipboards (buffer); - } - _gtk_text_btree_get_iter_at_mark (get_btree (buffer), &location, mark); @@ -2200,7 +2203,6 @@ gtk_text_buffer_select_range (GtkTextBuffer *buffer, gtk_text_buffer_mark_set (buffer, &real_bound, gtk_text_buffer_get_mark (buffer, "selection_bound")); - update_selection_clipboards (buffer); } /* @@ -2306,6 +2308,8 @@ gtk_text_buffer_real_mark_set (GtkTextBuffer *buffer, { gboolean has_selection; + update_selection_clipboards (buffer); + has_selection = gtk_text_buffer_get_selection_bounds (buffer, NULL, NULL); diff --git a/tests/testtext.c b/tests/testtext.c index 27765e165f..5ad9304bca 100644 --- a/tests/testtext.c +++ b/tests/testtext.c @@ -1583,6 +1583,20 @@ dialog_response_callback (GtkWidget *dialog, gint response_id, gpointer data) } static void +do_copy (gpointer callback_data, + guint callback_action, + GtkWidget *widget) +{ + View *view = view_from_widget (widget); + GtkTextBuffer *buffer; + + buffer = view->buffer->buffer; + + gtk_text_buffer_copy_clipboard (buffer, + gtk_clipboard_get (GDK_NONE)); +} + +static void do_search (gpointer callback_data, guint callback_action, GtkWidget *widget) @@ -1918,6 +1932,8 @@ static GtkItemFactoryEntry menu_items[] = { "/File/E_xit", "<control>Q" , do_exit, 0, NULL }, { "/_Edit", NULL, 0, 0, "<Branch>" }, + { "/Edit/Copy", NULL, do_copy, 0, NULL }, + { "/Edit/sep1", NULL, NULL, 0, "<Separator>" }, { "/Edit/Find...", NULL, do_search, 0, NULL }, { "/Edit/Select All", "<control>A", do_select_all, 0, NULL }, @@ -2843,11 +2859,19 @@ line_numbers_expose (GtkWidget *widget, return FALSE; } +static void +selection_changed (GtkTextBuffer *buffer, + GParamSpec *pspec, + GtkWidget *copy_menu) +{ + gtk_widget_set_sensitive (copy_menu, gtk_text_buffer_get_has_selection (buffer)); +} + static View * create_view (Buffer *buffer) { View *view; - + GtkWidget *copy_menu; GtkWidget *sw; GtkWidget *vbox; @@ -2869,6 +2893,14 @@ create_view (Buffer *buffer) gtk_item_factory_create_items (view->item_factory, G_N_ELEMENTS (menu_items), menu_items, view); + /* make the Copy menu item sensitivity update according to the selection */ + copy_menu = gtk_item_factory_get_item (view->item_factory, "<main>/Edit/Copy"); + gtk_widget_set_sensitive (copy_menu, gtk_text_buffer_get_has_selection (view->buffer->buffer)); + g_signal_connect (view->buffer->buffer, + "notify::has-selection", + G_CALLBACK (selection_changed), + copy_menu); + gtk_window_add_accel_group (GTK_WINDOW (view->window), view->accel_group); vbox = gtk_vbox_new (FALSE, 0); |