[evolution/evolution-3-12] EContactEditor: IM field is focused after editor open



commit 9828525e7c5e8ebb47d9bc5026c0a057eafec72b
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 e6d93ae..a455292 100644
--- a/addressbook/gui/contact-editor/e-contact-editor.c
+++ b/addressbook/gui/contact-editor/e-contact-editor.c
@@ -3096,12 +3096,29 @@ 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);
        fill_in_phone        (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]