← Back to team overview

ayatana-commits team mailing list archive

[Branch ~indicator-applet-developers/indicator-me/trunk] Rev 105: some improvements

 

------------------------------------------------------------
revno: 105
committer: David Barth <david.barth@xxxxxxxxxxxxx>
branch nick: indicator-me.entry
timestamp: Fri 2010-09-10 23:07:08 +0200
message:
  some improvements
modified:
  src/indicator-me.c


--
lp:indicator-me
https://code.launchpad.net/~indicator-applet-developers/indicator-me/trunk

Your team ayatana-commits is subscribed to branch lp:indicator-me.
To unsubscribe from this branch go to https://code.launchpad.net/~indicator-applet-developers/indicator-me/trunk/+edit-subscription
=== modified file 'src/indicator-me.c'
--- src/indicator-me.c	2010-09-10 07:29:03 +0000
+++ src/indicator-me.c	2010-09-10 21:07:08 +0000
@@ -254,21 +254,33 @@
 }
 
 static void
+entry_hint_set_shown (GtkWidget *widget, gboolean flag)
+{
+  g_object_set (G_OBJECT (widget),
+                DBUSMENU_ENTRY_MENUITEM_PROP_HINT "_shown",
+                flag, NULL);
+}
+
+static void
 entry_maybe_show_hint (GtkEntry *entry)
 {
   g_return_if_fail (GTK_IS_ENTRY (entry));
 
-  const gchar *hint = g_object_get_data (G_OBJECT (entry), DBUSMENU_ENTRY_MENUITEM_PROP_HINT);
-
+  const gchar *hint = g_object_get_data (G_OBJECT (entry),
+                                         DBUSMENU_ENTRY_MENUITEM_PROP_HINT);
   if (gtk_entry_get_text_length (entry) > 0 ||
-      GTK_WIDGET_HAS_FOCUS (entry))
+      GTK_WIDGET_HAS_FOCUS (entry)) {
+    entry_hint_set_shown (GTK_WIDGET (entry), FALSE);
     return;
+  }
 
   gtk_entry_set_text (entry, hint);
 
 	GtkStyle *style = gtk_widget_get_style (GTK_WIDGET (entry));
   GdkColor *color = &style->text[GTK_STATE_INSENSITIVE];
   gtk_widget_modify_text (GTK_WIDGET (entry), GTK_STATE_NORMAL, color);
+
+  entry_hint_set_shown (GTK_WIDGET (entry), TRUE);
 }
 
 
@@ -282,24 +294,35 @@
 }
 
 static gboolean
-entry_focus_in_cb (GtkWidget *widget, GdkEventFocus *event)
+entry_hint_is_shown (GtkWidget *widget)
 {
-  // GtkEntry *entry = GTK_ENTRY (widget);
-
-  g_debug ("%s", __func__);
-
-  return FALSE;
+  gboolean shown = FALSE;
+  g_object_get (G_OBJECT (widget),
+                DBUSMENU_ENTRY_MENUITEM_PROP_HINT "_shown",
+                &shown, NULL);
+  return shown;
 }
 
 static gboolean
-entry_focus_out_cb (GtkWidget *widget, GdkEventFocus *event)
+entry_focus_grab_cb (GtkWidget *widget, GdkEventFocus *event)
 {
   GtkEntry *entry = GTK_ENTRY (widget);
+  GtkSettings *settings = gtk_widget_get_settings (GTK_WIDGET (entry));
+  gboolean select_on_focus;
+
+  g_object_get (settings, "gtk-entry-select-on-focus", &select_on_focus, NULL);
 
   g_debug ("%s", __func__);
 
+  if (entry_hint_is_shown (GTK_WIDGET (entry)))
+    /* override select-on-focus */
+    g_object_set (settings, "gtk-entry-select-on-focus", FALSE, NULL);
+
   entry_maybe_show_hint (entry);
 
+  if (entry_hint_is_shown (GTK_WIDGET (entry)))
+    g_object_set (settings, "gtk-entry-select-on-focus", select_on_focus, NULL);
+
   return FALSE;
 }
 
@@ -351,6 +374,12 @@
 	gtk_entry_set_width_chars (entry, 23); /* set some nice aspect ratio for the menu */
   gtk_entry_set_max_length (entry, 140); /* enforce current gwibber limit */
 
+  /* override select-on-focus */
+  GtkSettings *settings = gtk_widget_get_settings (GTK_WIDGET (entry));
+  g_object_set (settings, "gtk-entry-select-on-focus", FALSE, NULL);
+
+  entry_hint_set_shown (GTK_WIDGET (entry), FALSE);
+
   ido_entry = ido;
 
 #if 0
@@ -373,10 +402,7 @@
 	g_signal_connect (GTK_ENTRY (entry), "activate", G_CALLBACK (entry_activate_cb), newitem);
 
   g_signal_connect (entry,
-                    "focus-in-event", G_CALLBACK (entry_focus_in_cb),
-                    entry);
-  g_signal_connect (entry,
-                    "focus-out-event", G_CALLBACK (entry_focus_out_cb),
+                    "grab-focus", G_CALLBACK (entry_focus_grab_cb),
                     entry);
 
 	return TRUE;