diff --git a/gnucash/gnome-search/dialog-search.c b/gnucash/gnome-search/dialog-search.c index ece51d91a0..eebd106606 100644 --- a/gnucash/gnome-search/dialog-search.c +++ b/gnucash/gnome-search/dialog-search.c @@ -716,6 +716,8 @@ attach_element (GtkWidget *element, GNCSearchWindow *sw, int row) data = g_object_get_data (G_OBJECT (element), "data"); + gnc_search_core_type_pass_parent (data->element, GTK_WINDOW(sw->dialog)); + gtk_grid_attach (GTK_GRID (sw->criteria_table), element, 0, row, 1, 1); gtk_widget_set_hexpand (element, TRUE); gtk_widget_set_halign (element, GTK_ALIGN_FILL); @@ -774,6 +776,8 @@ combo_box_changed (GtkComboBox *combo_box, struct _crit_data *data) FALSE, FALSE, 0); } + gnc_search_core_type_pass_parent (data->element, GTK_WINDOW(data->dialog)); + /* Make sure it's visible */ gtk_widget_show_all (data->container); diff --git a/gnucash/gnome-search/search-account.c b/gnucash/gnome-search/search-account.c index faf53f2a5f..429e525ae6 100644 --- a/gnucash/gnome-search/search-account.c +++ b/gnucash/gnome-search/search-account.c @@ -39,6 +39,7 @@ #define d(x) +static void pass_parent (GNCSearchCoreType *fe, gpointer parent); static GNCSearchCoreType *gncs_clone(GNCSearchCoreType *fe); static gboolean gncs_validate (GNCSearchCoreType *fe); static GtkWidget *gncs_get_widget(GNCSearchCoreType *fe); @@ -54,6 +55,7 @@ struct _GNCSearchAccountPrivate { gboolean match_all; GList * selected_accounts; + GtkWindow *parent; }; #define _PRIVATE(o) \ @@ -102,6 +104,7 @@ gnc_search_account_class_init (GNCSearchAccountClass *klass) object_class->finalize = gnc_search_account_finalize; /* override methods */ + gnc_search_core_type->pass_parent = pass_parent; gnc_search_core_type->validate = gncs_validate; gnc_search_core_type->get_widget = gncs_get_widget; gnc_search_core_type->get_predicate = gncs_get_predicate; @@ -170,10 +173,11 @@ gncs_validate (GNCSearchCoreType *fe) g_return_val_if_fail (IS_GNCSEARCH_ACCOUNT (fi), FALSE); priv = _PRIVATE(fi); + if (priv->selected_accounts == NULL && fi->how ) { valid = FALSE; - gnc_error_dialog (NULL, "%s", _("You have not selected any accounts")); + gnc_error_dialog (GTK_WINDOW(priv->parent), "%s", _("You have not selected any accounts")); } /* XXX */ @@ -257,7 +261,7 @@ button_clicked (GtkButton *button, GNCSearchAccount *fi) /* Create the dialog */ dialog = GTK_DIALOG(gtk_dialog_new_with_buttons(_("Select the Accounts to Compare"), - NULL, + GTK_WINDOW(priv->parent), 0, _("_Cancel"), GTK_RESPONSE_CANCEL, _("_OK"), GTK_RESPONSE_OK, @@ -356,3 +360,16 @@ static GNCSearchCoreType *gncs_clone(GNCSearchCoreType *fe) return (GNCSearchCoreType *)se; } + +static void +pass_parent (GNCSearchCoreType *fe, gpointer parent) +{ + GNCSearchAccount *fi = (GNCSearchAccount *)fe; + GNCSearchAccountPrivate *priv; + + g_return_if_fail (fi); + g_return_if_fail (IS_GNCSEARCH_ACCOUNT (fi)); + + priv = _PRIVATE(fi); + priv->parent = GTK_WINDOW(parent); +} diff --git a/gnucash/gnome-search/search-boolean.c b/gnucash/gnome-search/search-boolean.c index a784c1244c..caecd6be5c 100644 --- a/gnucash/gnome-search/search-boolean.c +++ b/gnucash/gnome-search/search-boolean.c @@ -35,6 +35,7 @@ #define d(x) +static void pass_parent (GNCSearchCoreType *fe, gpointer parent); static GNCSearchCoreType *gncs_clone(GNCSearchCoreType *fe); static gboolean gncs_validate (GNCSearchCoreType *fe); static GtkWidget *gncs_get_widget(GNCSearchCoreType *fe); @@ -48,6 +49,7 @@ typedef struct _GNCSearchBooleanPrivate GNCSearchBooleanPrivate; struct _GNCSearchBooleanPrivate { + GtkWindow *parent; gpointer dummy; }; @@ -96,6 +98,7 @@ gnc_search_boolean_class_init (GNCSearchBooleanClass *klass) object_class->finalize = gnc_search_boolean_finalize; /* override methods */ + gnc_search_core_type->pass_parent = pass_parent; gnc_search_core_type->validate = gncs_validate; gnc_search_core_type->get_widget = gncs_get_widget; gnc_search_core_type->get_predicate = gncs_get_predicate; @@ -142,6 +145,19 @@ gnc_search_boolean_set_value (GNCSearchBoolean *fi, gboolean value) fi->value = value; } +static void +pass_parent (GNCSearchCoreType *fe, gpointer parent) +{ + GNCSearchBoolean *fi = (GNCSearchBoolean *)fe; + GNCSearchBooleanPrivate *priv; + + g_return_if_fail (fi); + g_return_if_fail (IS_GNCSEARCH_BOOLEAN (fi)); + + priv = _PRIVATE(fi); + priv->parent = GTK_WINDOW(parent); +} + static gboolean gncs_validate (GNCSearchCoreType *fe) { diff --git a/gnucash/gnome-search/search-core-type.c b/gnucash/gnome-search/search-core-type.c index b9fbb3142f..37424ee166 100644 --- a/gnucash/gnome-search/search-core-type.c +++ b/gnucash/gnome-search/search-core-type.c @@ -149,6 +149,12 @@ gnc_search_core_type_grab_focus (GNCSearchCoreType *fe) GNC_SEARCH_CORE_TYPE_GET_CLASS (fe)->grab_focus (fe); } +void +gnc_search_core_type_pass_parent (GNCSearchCoreType *fe, gpointer parent) +{ + GNC_SEARCH_CORE_TYPE_GET_CLASS (fe)->pass_parent (fe, parent); +} + gboolean gnc_search_core_type_validate (GNCSearchCoreType *fe) { diff --git a/gnucash/gnome-search/search-core-type.h b/gnucash/gnome-search/search-core-type.h index 921bc3af36..4abd8565d5 100644 --- a/gnucash/gnome-search/search-core-type.h +++ b/gnucash/gnome-search/search-core-type.h @@ -46,6 +46,7 @@ typedef struct /* virtual methods */ void (*grab_focus) (GNCSearchCoreType *fe); void (*editable_enters) (GNCSearchCoreType *fe); + void (*pass_parent) (GNCSearchCoreType *fe, gpointer parent); gboolean (*validate) (GNCSearchCoreType *fe); GNCSearchCoreType * (*clone) (GNCSearchCoreType *fe); GtkWidget * (*get_widget) (GNCSearchCoreType *); @@ -64,6 +65,7 @@ GNCSearchCoreType * gnc_search_core_type_new_type_name (const char *type); /* methods */ void gnc_search_core_type_grab_focus (GNCSearchCoreType *fe); void gnc_search_core_type_editable_enters (GNCSearchCoreType *fe); +void gnc_search_core_type_pass_parent (GNCSearchCoreType *fe, gpointer parent); gboolean gnc_search_core_type_validate (GNCSearchCoreType *fe); GNCSearchCoreType * gnc_search_core_type_clone (GNCSearchCoreType *fe); GtkWidget * gnc_search_core_type_get_widget (GNCSearchCoreType *fe); diff --git a/gnucash/gnome-search/search-date.c b/gnucash/gnome-search/search-date.c index 9523c3f25e..af85414dcf 100644 --- a/gnucash/gnome-search/search-date.c +++ b/gnucash/gnome-search/search-date.c @@ -37,6 +37,7 @@ #define d(x) +static void pass_parent (GNCSearchCoreType *fe, gpointer parent); static void editable_enters (GNCSearchCoreType *fe); static void grab_focus (GNCSearchCoreType *fe); static GNCSearchCoreType *gncs_clone(GNCSearchCoreType *fe); @@ -53,6 +54,7 @@ typedef struct _GNCSearchDatePrivate GNCSearchDatePrivate; struct _GNCSearchDatePrivate { GtkWidget *entry; + GtkWindow *parent; }; #define _PRIVATE(o) \ @@ -100,6 +102,7 @@ gnc_search_date_class_init (GNCSearchDateClass *klass) object_class->finalize = gnc_search_date_finalize; /* override methods */ + gnc_search_core_type->pass_parent = pass_parent; gnc_search_core_type->editable_enters = editable_enters; gnc_search_core_type->grab_focus = grab_focus; gnc_search_core_type->validate = gncs_validate; @@ -164,6 +167,19 @@ gnc_search_date_set_how (GNCSearchDate *fi, QofQueryCompare how) fi->how = how; } +static void +pass_parent (GNCSearchCoreType *fe, gpointer parent) +{ + GNCSearchDate *fi = (GNCSearchDate *)fe; + GNCSearchDatePrivate *priv; + + g_return_if_fail (fi); + g_return_if_fail (IS_GNCSEARCH_DATE (fi)); + + priv = _PRIVATE(fi); + priv->parent = GTK_WINDOW(parent); +} + static gboolean gncs_validate (GNCSearchCoreType *fe) { diff --git a/gnucash/gnome-search/search-double.c b/gnucash/gnome-search/search-double.c index e6c45ff507..191b270ea8 100644 --- a/gnucash/gnome-search/search-double.c +++ b/gnucash/gnome-search/search-double.c @@ -36,6 +36,7 @@ #define d(x) +static void pass_parent (GNCSearchCoreType *fe, gpointer parent); static void editable_enters (GNCSearchCoreType *fe); static void grab_focus (GNCSearchCoreType *fe); static GNCSearchCoreType *gncs_clone(GNCSearchCoreType *fe); @@ -53,6 +54,7 @@ struct _GNCSearchDoublePrivate { GtkWidget * entry; GNCAmountEdit *gae; + GtkWindow *parent; }; #define _PRIVATE(o) \ @@ -100,6 +102,7 @@ gnc_search_double_class_init (GNCSearchDoubleClass *klass) object_class->finalize = gnc_search_double_finalize; /* override methods */ + gnc_search_core_type->pass_parent = pass_parent; gnc_search_core_type->editable_enters = editable_enters; gnc_search_core_type->grab_focus = grab_focus; gnc_search_core_type->validate = gncs_validate; @@ -156,6 +159,19 @@ gnc_search_double_set_how (GNCSearchDouble *fi, QofQueryCompare how) fi->how = how; } +static void +pass_parent (GNCSearchCoreType *fe, gpointer parent) +{ + GNCSearchDouble *fi = (GNCSearchDouble *)fe; + GNCSearchDoublePrivate *priv; + + g_return_if_fail (fi); + g_return_if_fail (IS_GNCSEARCH_DOUBLE (fi)); + + priv = _PRIVATE(fi); + priv->parent = GTK_WINDOW(parent); +} + static gboolean gncs_validate (GNCSearchCoreType *fe) { diff --git a/gnucash/gnome-search/search-int64.c b/gnucash/gnome-search/search-int64.c index bc94f616fe..a1c3f7ff7c 100644 --- a/gnucash/gnome-search/search-int64.c +++ b/gnucash/gnome-search/search-int64.c @@ -36,6 +36,7 @@ #define d(x) +static void pass_parent (GNCSearchCoreType *fe, gpointer parent); static void editable_enters (GNCSearchCoreType *fe); static void grab_focus (GNCSearchCoreType *fe); static GNCSearchCoreType *gncs_clone(GNCSearchCoreType *fe); @@ -54,6 +55,7 @@ struct _GNCSearchInt64Private { GtkWidget *entry; GNCAmountEdit *gae; + GtkWindow *parent; }; #define _PRIVATE(o) \ @@ -101,6 +103,7 @@ gnc_search_int64_class_init (GNCSearchInt64Class *klass) object_class->finalize = gnc_search_int64_finalize; /* override methods */ + gnc_search_core_type->pass_parent = pass_parent; gnc_search_core_type->editable_enters = editable_enters; gnc_search_core_type->grab_focus = grab_focus; gnc_search_core_type->validate = gncs_validate; @@ -157,6 +160,19 @@ gnc_search_int64_set_how (GNCSearchInt64 *fi, QofQueryCompare how) fi->how = how; } +static void +pass_parent (GNCSearchCoreType *fe, gpointer parent) +{ + GNCSearchInt64 *fi = (GNCSearchInt64 *)fe; + GNCSearchInt64Private *priv; + + g_return_if_fail (fi); + g_return_if_fail (IS_GNCSEARCH_INT64 (fi)); + + priv = _PRIVATE(fi); + priv->parent = GTK_WINDOW(parent); +} + static gboolean gncs_validate (GNCSearchCoreType *fe) { diff --git a/gnucash/gnome-search/search-numeric.c b/gnucash/gnome-search/search-numeric.c index 582e17c8a8..97d0b4ff06 100644 --- a/gnucash/gnome-search/search-numeric.c +++ b/gnucash/gnome-search/search-numeric.c @@ -36,6 +36,7 @@ #define d(x) +static void pass_parent (GNCSearchCoreType *fe, gpointer parent); static void editable_enters (GNCSearchCoreType *fe); static void grab_focus (GNCSearchCoreType *fe); static GNCSearchCoreType *gncs_clone(GNCSearchCoreType *fe); @@ -54,6 +55,7 @@ struct _GNCSearchNumericPrivate gboolean is_debcred; GtkWidget * entry; GNCAmountEdit *gae; + GtkWindow *parent; }; #define _PRIVATE(o) \ @@ -101,6 +103,7 @@ gnc_search_numeric_class_init (GNCSearchNumericClass *klass) object_class->finalize = gnc_search_numeric_finalize; /* override methods */ + gnc_search_core_type->pass_parent = pass_parent; gnc_search_core_type->editable_enters = editable_enters; gnc_search_core_type->grab_focus = grab_focus; gnc_search_core_type->validate = gncs_validate; @@ -186,6 +189,19 @@ gnc_search_numeric_set_option (GNCSearchNumeric *fi, QofNumericMatch option) fi->option = option; } +static void +pass_parent (GNCSearchCoreType *fe, gpointer parent) +{ + GNCSearchNumeric *fi = (GNCSearchNumeric *)fe; + GNCSearchNumericPrivate *priv; + + g_return_if_fail (fi); + g_return_if_fail (IS_GNCSEARCH_NUMERIC (fi)); + + priv = _PRIVATE(fi); + priv->parent = GTK_WINDOW(parent); +} + static gboolean gncs_validate (GNCSearchCoreType *fe) { diff --git a/gnucash/gnome-search/search-reconciled.c b/gnucash/gnome-search/search-reconciled.c index 2b9ffe6e80..565f377b32 100644 --- a/gnucash/gnome-search/search-reconciled.c +++ b/gnucash/gnome-search/search-reconciled.c @@ -36,6 +36,7 @@ #define d(x) +static void pass_parent (GNCSearchCoreType *fe, gpointer parent); static GNCSearchCoreType *gncs_clone(GNCSearchCoreType *fe); static gboolean gncs_validate (GNCSearchCoreType *fe); static GtkWidget *gncs_get_widget(GNCSearchCoreType *fe); @@ -49,6 +50,7 @@ typedef struct _GNCSearchReconciledPrivate GNCSearchReconciledPrivate; struct _GNCSearchReconciledPrivate { + GtkWindow *parent; gpointer dummy; }; @@ -97,6 +99,7 @@ gnc_search_reconciled_class_init (GNCSearchReconciledClass *klass) object_class->finalize = gnc_search_reconciled_finalize; /* override methods */ + gnc_search_core_type->pass_parent = pass_parent; gnc_search_core_type->validate = gncs_validate; gnc_search_core_type->get_widget = gncs_get_widget; gnc_search_core_type->get_predicate = gncs_get_predicate; @@ -152,6 +155,19 @@ gnc_search_reconciled_set_how (GNCSearchReconciled *fi, QofCharMatch how) fi->how = how; } +static void +pass_parent (GNCSearchCoreType *fe, gpointer parent) +{ + GNCSearchReconciled *fi = (GNCSearchReconciled *)fe; + GNCSearchReconciledPrivate *priv; + + g_return_if_fail (fi); + g_return_if_fail (IS_GNCSEARCH_RECONCILED (fi)); + + priv = _PRIVATE(fi); + priv->parent = GTK_WINDOW(parent); +} + static gboolean gncs_validate (GNCSearchCoreType *fe) { diff --git a/gnucash/gnome-search/search-string.c b/gnucash/gnome-search/search-string.c index 1ba224cbb6..6ccfe4e4b8 100644 --- a/gnucash/gnome-search/search-string.c +++ b/gnucash/gnome-search/search-string.c @@ -38,6 +38,7 @@ #define d(x) static void editable_enters (GNCSearchCoreType *fe); +static void pass_parent (GNCSearchCoreType *fe, gpointer parent); static void grab_focus (GNCSearchCoreType *fe); static GNCSearchCoreType *gncs_clone(GNCSearchCoreType *fe); static gboolean gncs_validate (GNCSearchCoreType *fe); @@ -53,6 +54,7 @@ typedef struct _GNCSearchStringPrivate GNCSearchStringPrivate; struct _GNCSearchStringPrivate { GtkWidget *entry; + GtkWindow *parent; }; #define _PRIVATE(o) \ @@ -101,6 +103,7 @@ gnc_search_string_class_init (GNCSearchStringClass *klass) /* override methods */ gnc_search_core_type->editable_enters = editable_enters; + gnc_search_core_type->pass_parent = pass_parent; gnc_search_core_type->grab_focus = grab_focus; gnc_search_core_type->validate = gncs_validate; gnc_search_core_type->get_widget = gncs_get_widget; @@ -175,15 +178,18 @@ static gboolean gncs_validate (GNCSearchCoreType *fe) { GNCSearchString *fi = (GNCSearchString *)fe; + GNCSearchStringPrivate *priv; gboolean valid = TRUE; g_return_val_if_fail (fi, FALSE); g_return_val_if_fail (IS_GNCSEARCH_STRING (fi), FALSE); + priv = _PRIVATE(fi); + if (!fi->value || *(fi->value) == '\0') { GtkWidget *dialog; - dialog = gtk_message_dialog_new (NULL, + dialog = gtk_message_dialog_new (GTK_WINDOW(priv->parent), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, @@ -221,7 +227,7 @@ gncs_validate (GNCSearchCoreType *fe) fi->value, regmsg); g_free (regmsg); - dialog = gtk_message_dialog_new (NULL, + dialog = gtk_message_dialog_new (GTK_WINDOW(priv->parent), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK, @@ -301,6 +307,19 @@ editable_enters (GNCSearchCoreType *fe) gtk_entry_set_activates_default(GTK_ENTRY (priv->entry), TRUE); } +static void +pass_parent (GNCSearchCoreType *fe, gpointer parent) +{ + GNCSearchString *fi = (GNCSearchString *)fe; + GNCSearchStringPrivate *priv; + + g_return_if_fail (fi); + g_return_if_fail (IS_GNCSEARCH_STRING (fi)); + + priv = _PRIVATE(fi); + priv->parent = GTK_WINDOW(parent); +} + static GtkWidget * gncs_get_widget (GNCSearchCoreType *fe) {