From 18ea5194b357dbd14dd724eb32013af8031a50be Mon Sep 17 00:00:00 2001 From: Michael Terry Date: Tue, 29 Mar 2011 11:17:52 -0400 Subject: treat locations dialog not as a modal dialog, but rather one that can be dismissed by interacting with the main dialog --- data/datetime-dialog.ui | 1 - src/datetime-prefs-locations.c | 4 +--- src/datetime-prefs-locations.h | 2 +- src/datetime-prefs.c | 20 ++++++++++++++++++-- 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/data/datetime-dialog.ui b/data/datetime-dialog.ui index ead11d1..f150765 100644 --- a/data/datetime-dialog.ui +++ b/data/datetime-dialog.ui @@ -10,7 +10,6 @@ False Locations - True 300 200 True diff --git a/src/datetime-prefs-locations.c b/src/datetime-prefs-locations.c index d13f95a..5dd13e8 100644 --- a/src/datetime-prefs-locations.c +++ b/src/datetime-prefs-locations.c @@ -309,7 +309,7 @@ selection_changed (GtkTreeSelection * selection, GtkWidget * remove_button) } GtkWidget * -datetime_setup_locations_dialog (GtkWindow * parent, CcTimezoneMap * map) +datetime_setup_locations_dialog (CcTimezoneMap * map) { GError * error = NULL; GtkBuilder * builder = gtk_builder_new (); @@ -375,8 +375,6 @@ datetime_setup_locations_dialog (GtkWindow * parent, CcTimezoneMap * map) g_object_set_data (G_OBJECT (dlg), "time-id", GINT_TO_POINTER(time_id)); update_times (dlg); - gtk_window_set_transient_for (GTK_WINDOW (dlg), parent); - #undef WIG g_object_unref (conf); diff --git a/src/datetime-prefs-locations.h b/src/datetime-prefs-locations.h index 1760567..e312894 100644 --- a/src/datetime-prefs-locations.h +++ b/src/datetime-prefs-locations.h @@ -28,7 +28,7 @@ with this program. If not, see . G_BEGIN_DECLS -GtkWidget * datetime_setup_locations_dialog (GtkWindow * parent, CcTimezoneMap * map); +GtkWidget * datetime_setup_locations_dialog (CcTimezoneMap * map); G_END_DECLS diff --git a/src/datetime-prefs.c b/src/datetime-prefs.c index fbc88f2..5a6fd91 100644 --- a/src/datetime-prefs.c +++ b/src/datetime-prefs.c @@ -53,6 +53,7 @@ GtkWidget * date_spin = NULL; guint save_time_id = 0; gboolean user_edited_time = FALSE; gboolean changing_time = FALSE; +GtkWidget * loc_dlg = NULL; /* Turns the boolean property into a string gsettings */ static GVariant * @@ -494,11 +495,26 @@ setup_time_spinners (GtkWidget * time, GtkWidget * date) update_spinners (); } +static void +hide_locations () +{ + if (loc_dlg != NULL) + gtk_widget_destroy (loc_dlg); +} + static void show_locations (GtkWidget * button, GtkWidget * dlg) { - GtkWidget * locationsDlg = datetime_setup_locations_dialog (GTK_WINDOW (dlg), tzmap); - gtk_widget_show_all (locationsDlg); + if (loc_dlg == NULL) { + loc_dlg = datetime_setup_locations_dialog (tzmap); + gtk_window_set_transient_for (GTK_WINDOW (loc_dlg), GTK_WINDOW (dlg)); + g_signal_connect (loc_dlg, "destroy", G_CALLBACK (gtk_widget_destroyed), &loc_dlg); + g_signal_connect (dlg, "focus-in-event", G_CALLBACK (hide_locations), NULL); + gtk_widget_show_all (loc_dlg); + } + else { + gtk_window_present_with_time (GTK_WINDOW (loc_dlg), gtk_get_current_event_time ()); + } } static gboolean -- cgit v1.2.3