aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--addressbook/gui/contact-editor/e-contact-editor.c17
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 8359e7e0b7..ab7557188b 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