[evolution] EContactEditor: IM field is focused after editor open



commit c50cad0486bd3b4836a480faa2d4776f12b32393
Author: Milan Crha <mcrha redhat com>
Date:   Tue Apr 29 15:50:31 2014 +0200

    EContactEditor: IM field is focused after editor open
    
    Due to made widget changes in fill_in_all() the focus can change
    from the full name entry elsewhere. Remembering focused widget and
    restoring it at the end of the function makes the editor being
    opened with full name entry instead, as expected.

 addressbook/gui/contact-editor/e-contact-editor.c |   17 +++++++++++++++++
 1 files changed, 17 insertions(+), 0 deletions(-)
---
diff --git a/addressbook/gui/contact-editor/e-contact-editor.c 
b/addressbook/gui/contact-editor/e-contact-editor.c
index 8359e7e..ab75571 100644
--- a/addressbook/gui/contact-editor/e-contact-editor.c
+++ b/addressbook/gui/contact-editor/e-contact-editor.c
@@ -3161,6 +3161,18 @@ sensitize_simple (EContactEditor *editor)
 static void
 fill_in_all (EContactEditor *editor)
 {
+       GtkWidget *focused_widget;
+       gpointer weak_pointer;
+
+       /* Widget changes can cause focus widget change, thus remember the current
+          widget and restore it after the fill is done; some fill operations
+          can delete widgets, like the dyntable, thus do the weak_pointer as well.
+       */
+       focused_widget = gtk_window_get_focus (eab_editor_get_window (EAB_EDITOR (editor)));
+       weak_pointer = focused_widget;
+       if (focused_widget)
+               g_object_add_weak_pointer (G_OBJECT (focused_widget), &weak_pointer);
+
        fill_in_source_field (editor);
        fill_in_simple       (editor);
        fill_in_email        (editor);
@@ -3168,6 +3180,11 @@ fill_in_all (EContactEditor *editor)
        fill_in_sip          (editor);
        fill_in_im           (editor);
        fill_in_address      (editor);
+
+       if (weak_pointer) {
+               g_object_remove_weak_pointer (G_OBJECT (focused_widget), &weak_pointer);
+               gtk_widget_grab_focus (focused_widget);
+       }
 }
 
 static void


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