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