gimp r26334 - in branches/soc-2008-tagging: . app/widgets



Author: aurisj
Date: Tue Jul 29 17:15:26 2008
New Revision: 26334
URL: http://svn.gnome.org/viewvc/gimp?rev=26334&view=rev

Log:
2008-07-29  Aurimas JuÅka  <aurisj svn gnome org>

	* app/widgets/gimptagentry.[ch]: based on user behaviour track if tags
	should be considered "accepted" (delete operates on jellybeans) or "not
	accepted" (delete operates on characters).



Modified:
   branches/soc-2008-tagging/ChangeLog
   branches/soc-2008-tagging/app/widgets/gimptagentry.c
   branches/soc-2008-tagging/app/widgets/gimptagentry.h

Modified: branches/soc-2008-tagging/app/widgets/gimptagentry.c
==============================================================================
--- branches/soc-2008-tagging/app/widgets/gimptagentry.c	(original)
+++ branches/soc-2008-tagging/app/widgets/gimptagentry.c	Tue Jul 29 17:15:26 2008
@@ -24,6 +24,7 @@
 #include <string.h>
 
 #include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
 
 #include "widgets-types.h"
 
@@ -64,6 +65,9 @@
 static void     gimp_tag_entry_delete_from_cursor        (GtkEntry             *entry,
                                                           GtkDeleteType         delete_type,
                                                           gint                  count);
+static gboolean gimp_tag_entry_key_press                 (GtkWidget            *widget,
+                                                          GdkEventKey          *event,
+                                                          gpointer              user_data);
 static void     gimp_tag_entry_query_tag                 (GimpTagEntry         *entry);
 
 static void     gimp_tag_entry_assign_tags               (GimpTagEntry         *tag_entry);
@@ -129,6 +133,9 @@
   g_signal_connect (entry, "insert-text",
                     G_CALLBACK (gimp_tag_entry_insert_text),
                     NULL);
+  g_signal_connect (entry, "key-press-event",
+                    G_CALLBACK (gimp_tag_entry_key_press),
+                    NULL);
   g_signal_connect (entry, "focus-in-event",
                     G_CALLBACK (gimp_tag_entry_focus_in),
                     NULL);
@@ -213,6 +220,8 @@
     {
       gimp_tag_entry_assign_tags (tag_entry);
     }
+
+  tag_entry->tags_accepted = TRUE;
 }
 
 static void
@@ -663,7 +672,10 @@
                                 GdkEventFocus     *event,
                                 gpointer           user_data)
 {
-  gimp_tag_entry_toggle_desc (GIMP_TAG_ENTRY (widget), TRUE);
+  GimpTagEntry  *tag_entry = GIMP_TAG_ENTRY (widget);
+
+  tag_entry->tags_accepted = TRUE;
+  gimp_tag_entry_toggle_desc (tag_entry, TRUE);
   return FALSE;
 }
 
@@ -782,13 +794,15 @@
 static void
 gimp_tag_entry_backspace (GtkEntry     *entry)
 {
+  GimpTagEntry *tag_entry = GIMP_TAG_ENTRY (entry);
   gint          selection_start;
   gint          selection_end;
 
   gtk_editable_get_selection_bounds (GTK_EDITABLE (entry),
                                      &selection_start, &selection_end);
   if (selection_start == selection_end
-      && selection_start > 0)
+      && selection_start > 0
+      && tag_entry->tags_accepted)
     {
       gtk_editable_set_position (GTK_EDITABLE (entry), selection_start - 1);
     }
@@ -812,12 +826,44 @@
     }
 }
 
+
+static gboolean
+gimp_tag_entry_key_press       (GtkWidget            *widget,
+                                GdkEventKey          *event,
+                                gpointer              user_data)
+{
+  GimpTagEntry         *tag_entry = GIMP_TAG_ENTRY (widget);
+
+  switch (event->keyval)
+    {
+      case GDK_Tab:
+      case GDK_Return:
+      case GDK_Escape:
+      case GDK_comma:
+          tag_entry->tags_accepted = TRUE;
+          break;
+
+      case GDK_BackSpace:
+      case GDK_Delete:
+          break;
+
+      default:
+          tag_entry->tags_accepted = FALSE;
+          break;
+    }
+
+  return FALSE;
+}
+
 static gboolean
 gimp_tag_entry_button_release  (GtkWidget         *widget,
                                 GdkEventButton    *event)
 {
+  GimpTagEntry         *tag_entry = GIMP_TAG_ENTRY (widget);
+
   if (event->button == 1)
     {
+      tag_entry->tags_accepted = TRUE;
       g_idle_add ((GSourceFunc) gimp_tag_entry_try_select_jellybean,
                   widget);
     }
@@ -868,6 +914,11 @@
   gchar        *previous_jellybean;
   gboolean      jellybean_valid = FALSE;
 
+  if (!entry->tags_accepted)
+    {
+      return FALSE;
+    }
+
   gtk_editable_get_selection_bounds (GTK_EDITABLE (entry),
                                      &selection_start, &selection_end);
   if (selection_start != selection_end)

Modified: branches/soc-2008-tagging/app/widgets/gimptagentry.h
==============================================================================
--- branches/soc-2008-tagging/app/widgets/gimptagentry.h	(original)
+++ branches/soc-2008-tagging/app/widgets/gimptagentry.h	Tue Jul 29 17:15:26 2008
@@ -48,6 +48,7 @@
   GimpTagEntryMode              mode;
   gboolean                      description_shown;
   gboolean                      internal_change;
+  gboolean                      tags_accepted;
 };
 
 struct _GimpTagEntryClass



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]