diff --git a/gnucash/gnome/dialog-sx-editor.c b/gnucash/gnome/dialog-sx-editor.c index f8144effed..92fd507ec6 100644 --- a/gnucash/gnome/dialog-sx-editor.c +++ b/gnucash/gnome/dialog-sx-editor.c @@ -1128,6 +1128,30 @@ sxed_delete_event (GtkWidget *widget, GdkEvent *event, gpointer ud) return FALSE; } +static gboolean +focus_idle_callback(gpointer user_data) +{ + GNCLedgerDisplay *ledger_display = (GNCLedgerDisplay *)user_data; + + if (ledger_display) + gnc_ledger_display_refresh(ledger_display); + + return FALSE; +} + +static void +on_notebook_switch_page(GtkNotebook *notebook, GtkWidget *page, + guint page_num, gpointer user_data) +{ + GtkWidget *current_page = gtk_notebook_get_nth_page(notebook, page_num); + if (current_page && page_num == 2) + { + GncSxEditorDialog *sxed = (GncSxEditorDialog *)user_data; + + // Wait until Gtk is idle to refresh the display. + g_idle_add (focus_idle_callback, sxed->ledger); + } +} /************************************* * Create the Schedule Editor Dialog * @@ -1239,6 +1263,9 @@ gnc_ui_scheduled_xaction_editor_dialog_create (GtkWindow *parent, g_signal_connect (sxed->dialog, "destroy", G_CALLBACK (scheduledxaction_editor_dialog_destroy), sxed); + g_signal_connect (sxed->notebook, "switch-page", + G_CALLBACK(on_notebook_switch_page), + sxed); for (i = 0; widgets[i].name; i++) { diff --git a/gnucash/gnome/gnc-plugin-page-register.cpp b/gnucash/gnome/gnc-plugin-page-register.cpp index b5f5fcf494..856f567bee 100644 --- a/gnucash/gnome/gnc-plugin-page-register.cpp +++ b/gnucash/gnome/gnc-plugin-page-register.cpp @@ -3654,6 +3654,17 @@ gnc_plugin_page_register_cmd_cut (GSimpleAction *simple, ENTER ("(action %p, page %p)", simple, page); priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE (page); + + GtkWidget *widget = gtk_window_get_focus(GTK_WINDOW (priv->gsr->window)); + const char *name = gtk_widget_get_name(widget); + if (strcmp(name, "GnucashSheet") != 0) + { + gtk_editable_cut_clipboard( GTK_EDITABLE(widget)); + LEAVE("Not cut from GnucashSheet"); + + return; + } + gnucash_register_cut_clipboard (priv->gsr->reg); LEAVE (""); } @@ -3671,6 +3682,17 @@ gnc_plugin_page_register_cmd_copy (GSimpleAction *simple, ENTER ("(action %p, page %p)", simple, page); priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE (page); + + GtkWidget *widget = gtk_window_get_focus(GTK_WINDOW (priv->gsr->window)); + const char *name = gtk_widget_get_name(widget); + if (strcmp(name, "GnucashSheet") != 0) + { + gtk_editable_copy_clipboard( GTK_EDITABLE(widget)); + LEAVE("Not copied from GnucashSheet"); + + return; + } + gnucash_register_copy_clipboard (priv->gsr->reg); LEAVE (""); } @@ -3688,6 +3710,17 @@ gnc_plugin_page_register_cmd_paste (GSimpleAction *simple, ENTER ("(action %p, page %p)", simple, page); priv = GNC_PLUGIN_PAGE_REGISTER_GET_PRIVATE (page); + + GtkWidget *widget = gtk_window_get_focus(GTK_WINDOW (priv->gsr->window)); + const char *name = gtk_widget_get_name(widget); + if (strcmp(name, "GnucashSheet") != 0) + { + gtk_editable_paste_clipboard( GTK_EDITABLE(widget)); + LEAVE("Not pasted to GnucashSheet"); + + return; + } + gnucash_register_paste_clipboard (priv->gsr->reg); LEAVE (""); } diff --git a/gnucash/register/register-gnome/gnucash-item-edit.c b/gnucash/register/register-gnome/gnucash-item-edit.c index ee96f3d716..33faab3967 100644 --- a/gnucash/register/register-gnome/gnucash-item-edit.c +++ b/gnucash/register/register-gnome/gnucash-item-edit.c @@ -852,6 +852,10 @@ button_press_cb (GtkWidget *widget, GdkEventButton *event, gpointer *pointer) } return TRUE; } + + if (!gtk_widget_has_focus (GTK_WIDGET(sheet))) + gtk_widget_grab_focus (GTK_WIDGET(sheet)); + return FALSE; }