]> git.0d.be Git - empathy.git/blobdiff - libempathy-gtk/empathy-live-search.c
Use a flat namespace for internal includes
[empathy.git] / libempathy-gtk / empathy-live-search.c
index 968adca770387254263cae7bf44db1b79e42f489..3047612b03c7764fcaa767c9ee37ae289b3b2a82 100644 (file)
  *          Claudio Saavedra <csaavedra@igalia.com>
  */
 
-#include <config.h>
-#include <string.h>
+#include "config.h"
 
-#include <gtk/gtk.h>
-#include <gdk/gdkkeysyms.h>
-
-#include <libempathy/empathy-utils.h>
+#include "empathy-utils.h"
 
 #include "empathy-live-search.h"
 
@@ -73,8 +69,6 @@ stripped_char (gunichar ch)
 {
   gunichar retval = 0;
   GUnicodeType utype;
-  gunichar *decomp;
-  gsize dlen;
 
   utype = g_unichar_type (ch);
 
@@ -114,12 +108,7 @@ stripped_char (gunichar ch)
     case G_UNICODE_SPACE_SEPARATOR:
     default:
       ch = g_unichar_tolower (ch);
-      decomp = g_unicode_canonical_decomposition (ch, &dlen);
-      if (decomp != NULL)
-        {
-          retval = decomp[0];
-          g_free (decomp);
-        }
+      g_unichar_fully_decompose (ch, FALSE, &retval, 1);
     }
 
   return retval;
@@ -271,7 +260,8 @@ live_search_entry_key_pressed_cb (GtkEntry *entry,
 
   /* emit key navigation signal, so other widgets can respond to it properly */
   if (event->keyval == GDK_KEY_Up || event->keyval == GDK_KEY_Down
-      || event->keyval == GDK_KEY_Page_Up || event->keyval == GDK_KEY_Page_Down)
+      || event->keyval == GDK_KEY_Page_Up || event->keyval == GDK_KEY_Page_Down
+      || event->keyval == GDK_KEY_Menu)
      {
        return fire_key_navigation_sig (self, event);
      }
@@ -352,7 +342,8 @@ live_search_key_press_event_cb (GtkWidget *widget,
    * they are needed for navigation in the treeview and are not needed in
    * the search entry */
    if (event->keyval == GDK_KEY_Up || event->keyval == GDK_KEY_Down ||
-       event->keyval == GDK_KEY_Page_Up || event->keyval == GDK_KEY_Page_Down)
+       event->keyval == GDK_KEY_Page_Up || event->keyval == GDK_KEY_Page_Down ||
+       event->keyval == GDK_KEY_Menu)
      return FALSE;
 
    if (event->keyval == GDK_KEY_Home || event->keyval == GDK_KEY_End ||
@@ -364,6 +355,14 @@ live_search_key_press_event_cb (GtkWidget *widget,
          return FALSE;
      }
 
+   /* Don't forward shift keys events as focusing the search entry would
+    * cancel an in-progress editing on a cell renderer (like when renaming a
+    * group). There is no point focusing it anyway as we don't display the
+    * search entry when only a shift key is pressed. */
+   if (event->keyval == GDK_KEY_Shift_L ||
+       event->keyval == GDK_KEY_Shift_R)
+       return FALSE;
+
   /* realize the widget if it is not realized yet */
   gtk_widget_realize (priv->search_entry);
   if (!gtk_widget_has_focus (priv->search_entry))
@@ -496,7 +495,9 @@ live_search_unmap (GtkWidget *widget)
   gtk_widget_hide (widget);
 
   gtk_entry_set_text (GTK_ENTRY (priv->search_entry), "");
-  gtk_widget_grab_focus (priv->hook_widget);
+
+  if (priv->hook_widget != NULL)
+    gtk_widget_grab_focus (priv->hook_widget);
 }
 
 static void