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.
This commit is contained in:
Robert Fewell 2022-11-29 15:27:00 +00:00
parent 98251d59a6
commit df9a6b0309
6 changed files with 21 additions and 11 deletions

View File

@ -494,17 +494,20 @@ _gdc_set_cal_min_size_req(GncDenseCal *dcal)
} }
GtkWidget* GtkWidget*
gnc_dense_cal_new(void) gnc_dense_cal_new (GtkWindow *parent)
{ {
GncDenseCal *dcal; GncDenseCal *dcal = g_object_new (GNC_TYPE_DENSE_CAL, NULL);
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); return GTK_WIDGET(dcal);
} }
GtkWidget* 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); gnc_dense_cal_set_model(cal, model);
return GTK_WIDGET(cal); return GTK_WIDGET(cal);
} }

View File

@ -117,8 +117,9 @@ typedef struct _gdc_mark_data
GList *ourMarks; GList *ourMarks;
} gdc_mark_data; } gdc_mark_data;
GtkWidget* gnc_dense_cal_new (void); GtkWidget* gnc_dense_cal_new (GtkWindow *parent);
GtkWidget* gnc_dense_cal_new_with_model (GncDenseCalModel *model); GtkWidget* gnc_dense_cal_new_with_model (GtkWindow *parent,
GncDenseCalModel *model);
GType gnc_dense_cal_get_type (void); GType gnc_dense_cal_get_type (void);
void gnc_dense_cal_set_model(GncDenseCal *cal, GncDenseCalModel *model); void gnc_dense_cal_set_model(GncDenseCal *cal, GncDenseCalModel *model);

View File

@ -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); 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->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); g_assert (sxed->example_cal);
gnc_dense_cal_set_num_months (sxed->example_cal, EX_CAL_NUM_MONTHS); 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); gnc_dense_cal_set_months_per_col (sxed->example_cal, EX_CAL_MO_PER_COL);

View File

@ -1263,7 +1263,8 @@ schedXact_editor_create_freq_sel (GncSxEditorDialog2 *sxed)
b = GTK_BOX(gtk_builder_get_object (sxed->builder, "example_cal_hbox" )); 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->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); g_assert (sxed->example_cal);
gnc_dense_cal_set_num_months (sxed->example_cal, EX_CAL_NUM_MONTHS); 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); gnc_dense_cal_set_months_per_col( sxed->example_cal, EX_CAL_MO_PER_COL);

View File

@ -380,7 +380,8 @@ sxftd_init( SXFromTransInfo *sxfti )
w = GTK_WIDGET(gtk_builder_get_object(sxfti->builder, "ex_cal_frame" )); w = GTK_WIDGET(gtk_builder_get_object(sxfti->builder, "ex_cal_frame" ));
sxfti->dense_cal_model = gnc_dense_cal_store_new(num_marks); 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_object_ref_sink(sxfti->example_cal);
g_assert(sxfti->example_cal); g_assert(sxfti->example_cal);

View File

@ -419,12 +419,15 @@ gnc_plugin_page_sx_list_create_widget (GncPluginPage *plugin_page)
GtkWidget *vbox; GtkWidget *vbox;
GtkWidget *label; GtkWidget *label;
GtkWidget *swin; GtkWidget *swin;
GtkWindow *window;
page = GNC_PLUGIN_PAGE_SX_LIST(plugin_page); page = GNC_PLUGIN_PAGE_SX_LIST(plugin_page);
priv = GNC_PLUGIN_PAGE_SX_LIST_GET_PRIVATE(page); priv = GNC_PLUGIN_PAGE_SX_LIST_GET_PRIVATE(page);
if (priv->widget != NULL) if (priv->widget != NULL)
return priv->widget; return priv->widget;
window = GTK_WINDOW(gnc_plugin_page_get_window (GNC_PLUGIN_PAGE(page)));
/* Create Vpaned widget for top level */ /* Create Vpaned widget for top level */
widget = gtk_paned_new (GTK_ORIENTATION_VERTICAL); widget = gtk_paned_new (GTK_ORIENTATION_VERTICAL);
priv->widget = widget; 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->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); g_object_ref_sink (priv->gdcal);
gnc_dense_cal_set_months_per_col (priv->gdcal, 4); gnc_dense_cal_set_months_per_col (priv->gdcal, 4);