gnucash maint: Bug 798653 - Schedule Calendar event description pop up window does not track mouse position
Robert Fewell
bobit at code.gnucash.org
Tue Nov 29 10:35:02 EST 2022
Updated via https://github.com/Gnucash/gnucash/commit/df9a6b03 (commit)
from https://github.com/Gnucash/gnucash/commit/98251d59 (commit)
commit df9a6b030933d5c932aaf2e72229268449c4e3f3
Author: Robert Fewell <14uBobIT at gmail.com>
Date: Tue Nov 29 15:27:00 2022 +0000
Bug 798653 - Schedule Calendar event description pop up window does not track mouse position
The reporter was on Ubuntu 22.04.1 LTS which has wayland as the default
display server. When tested on a Fedora 37 VM which was also using
wayland the following message was seen on the terminal window...
Gdk-Message: 15:23:51.862: Window 0x28b0de0 is a temporary window
without parent, application will not be able to position it on screen.
This fix sets the transient parent for the dense calendar pop up.
diff --git a/gnucash/gnome-utils/gnc-dense-cal.c b/gnucash/gnome-utils/gnc-dense-cal.c
index 8ef46cbf9..f65d9aab4 100644
--- a/gnucash/gnome-utils/gnc-dense-cal.c
+++ b/gnucash/gnome-utils/gnc-dense-cal.c
@@ -494,17 +494,20 @@ _gdc_set_cal_min_size_req(GncDenseCal *dcal)
}
GtkWidget*
-gnc_dense_cal_new(void)
+gnc_dense_cal_new (GtkWindow *parent)
{
- GncDenseCal *dcal;
- dcal = g_object_new(GNC_TYPE_DENSE_CAL, NULL);
+ GncDenseCal *dcal = g_object_new (GNC_TYPE_DENSE_CAL, NULL);
+
+ gtk_window_set_transient_for (GTK_WINDOW(dcal->transPopup),
+ GTK_WINDOW(parent));
+
return GTK_WIDGET(dcal);
}
GtkWidget*
-gnc_dense_cal_new_with_model(GncDenseCalModel *model)
+gnc_dense_cal_new_with_model (GtkWindow *parent, GncDenseCalModel *model)
{
- GncDenseCal *cal = GNC_DENSE_CAL(gnc_dense_cal_new());
+ GncDenseCal *cal = GNC_DENSE_CAL(gnc_dense_cal_new (parent));
gnc_dense_cal_set_model(cal, model);
return GTK_WIDGET(cal);
}
diff --git a/gnucash/gnome-utils/gnc-dense-cal.h b/gnucash/gnome-utils/gnc-dense-cal.h
index 2a71fcf6d..a56e5b67a 100644
--- a/gnucash/gnome-utils/gnc-dense-cal.h
+++ b/gnucash/gnome-utils/gnc-dense-cal.h
@@ -117,8 +117,9 @@ typedef struct _gdc_mark_data
GList *ourMarks;
} gdc_mark_data;
-GtkWidget* gnc_dense_cal_new (void);
-GtkWidget* gnc_dense_cal_new_with_model (GncDenseCalModel *model);
+GtkWidget* gnc_dense_cal_new (GtkWindow *parent);
+GtkWidget* gnc_dense_cal_new_with_model (GtkWindow *parent,
+ GncDenseCalModel *model);
GType gnc_dense_cal_get_type (void);
void gnc_dense_cal_set_model(GncDenseCal *cal, GncDenseCalModel *model);
diff --git a/gnucash/gnome/dialog-sx-editor.c b/gnucash/gnome/dialog-sx-editor.c
index 31287efdd..cfe19a712 100644
--- a/gnucash/gnome/dialog-sx-editor.c
+++ b/gnucash/gnome/dialog-sx-editor.c
@@ -1329,7 +1329,8 @@ schedXact_editor_create_freq_sel (GncSxEditorDialog *sxed)
gtk_box_pack_start (GTK_BOX (b), example_cal_scrolled_win, TRUE, TRUE, 0);
sxed->dense_cal_model = gnc_dense_cal_store_new (EX_CAL_NUM_MONTHS * 31);
- sxed->example_cal = GNC_DENSE_CAL (gnc_dense_cal_new_with_model (GNC_DENSE_CAL_MODEL (sxed->dense_cal_model)));
+ sxed->example_cal = GNC_DENSE_CAL(gnc_dense_cal_new_with_model (GTK_WINDOW(sxed->dialog),
+ GNC_DENSE_CAL_MODEL(sxed->dense_cal_model)));
g_assert (sxed->example_cal);
gnc_dense_cal_set_num_months (sxed->example_cal, EX_CAL_NUM_MONTHS);
gnc_dense_cal_set_months_per_col (sxed->example_cal, EX_CAL_MO_PER_COL);
diff --git a/gnucash/gnome/dialog-sx-editor2.c b/gnucash/gnome/dialog-sx-editor2.c
index 6ddb3b3a8..c75403043 100644
--- a/gnucash/gnome/dialog-sx-editor2.c
+++ b/gnucash/gnome/dialog-sx-editor2.c
@@ -1263,7 +1263,8 @@ schedXact_editor_create_freq_sel (GncSxEditorDialog2 *sxed)
b = GTK_BOX(gtk_builder_get_object (sxed->builder, "example_cal_hbox" ));
sxed->dense_cal_model = gnc_dense_cal_store_new (EX_CAL_NUM_MONTHS * 31);
- sxed->example_cal = GNC_DENSE_CAL (gnc_dense_cal_new_with_model (GNC_DENSE_CAL_MODEL (sxed->dense_cal_model)));
+ sxed->example_cal = GNC_DENSE_CAL(gnc_dense_cal_new_with_model (GTK_WINDOW(sxed->dialog),
+ GNC_DENSE_CAL_MODEL (sxed->dense_cal_model)));
g_assert (sxed->example_cal);
gnc_dense_cal_set_num_months (sxed->example_cal, EX_CAL_NUM_MONTHS);
gnc_dense_cal_set_months_per_col( sxed->example_cal, EX_CAL_MO_PER_COL);
diff --git a/gnucash/gnome/dialog-sx-from-trans.c b/gnucash/gnome/dialog-sx-from-trans.c
index 466d12e53..1f9f9f2c8 100644
--- a/gnucash/gnome/dialog-sx-from-trans.c
+++ b/gnucash/gnome/dialog-sx-from-trans.c
@@ -380,7 +380,8 @@ sxftd_init( SXFromTransInfo *sxfti )
w = GTK_WIDGET(gtk_builder_get_object(sxfti->builder, "ex_cal_frame" ));
sxfti->dense_cal_model = gnc_dense_cal_store_new(num_marks);
- sxfti->example_cal = GNC_DENSE_CAL(gnc_dense_cal_new_with_model(GNC_DENSE_CAL_MODEL(sxfti->dense_cal_model)));
+ sxfti->example_cal = GNC_DENSE_CAL(gnc_dense_cal_new_with_model (GTK_WINDOW(sxfti->dialog),
+ GNC_DENSE_CAL_MODEL(sxfti->dense_cal_model)));
g_object_ref_sink(sxfti->example_cal);
g_assert(sxfti->example_cal);
diff --git a/gnucash/gnome/gnc-plugin-page-sx-list.c b/gnucash/gnome/gnc-plugin-page-sx-list.c
index 18ddbb45d..e0920e7b4 100644
--- a/gnucash/gnome/gnc-plugin-page-sx-list.c
+++ b/gnucash/gnome/gnc-plugin-page-sx-list.c
@@ -419,12 +419,15 @@ gnc_plugin_page_sx_list_create_widget (GncPluginPage *plugin_page)
GtkWidget *vbox;
GtkWidget *label;
GtkWidget *swin;
+ GtkWindow *window;
page = GNC_PLUGIN_PAGE_SX_LIST(plugin_page);
priv = GNC_PLUGIN_PAGE_SX_LIST_GET_PRIVATE(page);
if (priv->widget != NULL)
return priv->widget;
+ window = GTK_WINDOW(gnc_plugin_page_get_window (GNC_PLUGIN_PAGE(page)));
+
/* Create Vpaned widget for top level */
widget = gtk_paned_new (GTK_ORIENTATION_VERTICAL);
priv->widget = widget;
@@ -517,7 +520,7 @@ gnc_plugin_page_sx_list_create_widget (GncPluginPage *plugin_page)
{
priv->dense_cal_model = gnc_sx_instance_dense_cal_adapter_new (GNC_SX_INSTANCE_MODEL(priv->instances));
- priv->gdcal = GNC_DENSE_CAL(gnc_dense_cal_new_with_model (GNC_DENSE_CAL_MODEL(priv->dense_cal_model)));
+ priv->gdcal = GNC_DENSE_CAL(gnc_dense_cal_new_with_model (window, GNC_DENSE_CAL_MODEL(priv->dense_cal_model)));
g_object_ref_sink (priv->gdcal);
gnc_dense_cal_set_months_per_col (priv->gdcal, 4);
Summary of changes:
gnucash/gnome-utils/gnc-dense-cal.c | 13 ++++++++-----
gnucash/gnome-utils/gnc-dense-cal.h | 5 +++--
gnucash/gnome/dialog-sx-editor.c | 3 ++-
gnucash/gnome/dialog-sx-editor2.c | 3 ++-
gnucash/gnome/dialog-sx-from-trans.c | 3 ++-
gnucash/gnome/gnc-plugin-page-sx-list.c | 5 ++++-
6 files changed, 21 insertions(+), 11 deletions(-)
More information about the gnucash-changes
mailing list