Bug 798025 - SLR Value entry not tied to location

When you enter a value in the SLR tree view, the cell renderer text
entry box gets the focus ready for keyboard entry. In this state, the
tree view can be scrolled underneath by the mouse wheel or using the
vertical scrollbar, the row is still high lighted but still may be
confusing.

This commit disables the scrolling while an entry has focus and also
disables the horizontal scroll bar to be more effective.
This commit is contained in:
Robert Fewell 2023-11-16 10:11:30 +00:00
parent 78ab605e91
commit af48ab7cc2
2 changed files with 35 additions and 3 deletions

View File

@ -909,6 +909,20 @@ instance_state_changed_cb (GtkCellRendererText *cell,
gnc_sx_instance_model_change_instance_state (dialog->editing_model->instances, inst, new_state);
}
static void
control_scroll_bars (GncSxSinceLastRunDialog *dialog)
{
GtkWidget *sw = gtk_widget_get_parent (GTK_WIDGET(dialog->instance_view));
GtkWidget *vsbar = gtk_scrolled_window_get_vscrollbar (GTK_SCROLLED_WINDOW(sw));
gboolean enable = TRUE;
if (dialog->temp_ce)
enable = FALSE;
gtk_widget_set_sensitive (vsbar, enable);
gtk_widget_set_visible (vsbar, enable);
}
static void
variable_value_changed_cb (GtkCellRendererText *cell,
const gchar *path,
@ -925,6 +939,7 @@ variable_value_changed_cb (GtkCellRendererText *cell,
DEBUG ("variable to [%s] at path [%s]", value, path);
dialog->temp_ce = NULL;
control_scroll_bars (dialog);
if (!gtk_tree_model_get_iter (GTK_TREE_MODEL(dialog->editing_model), &tree_iter, model_path))
{
@ -972,6 +987,7 @@ variable_value_start_changed_cb (GtkCellRenderer *renderer, GtkCellEditable *edi
{
GncSxSinceLastRunDialog *dialog = user_data;
dialog->temp_ce = editable;
control_scroll_bars (dialog);
}
static void
@ -979,6 +995,7 @@ variable_value_cancel_changed_cb (GtkCellRenderer *renderer, gpointer user_data)
{
GncSxSinceLastRunDialog *dialog = user_data;
dialog->temp_ce = NULL;
control_scroll_bars (dialog);
}
static gint
@ -1100,7 +1117,18 @@ finish_editing_before_ok_cb (GtkWidget *button, GdkEvent *event,
dialog->temp_ce = NULL;
return FALSE;
}
}
static gboolean
scroll_event (GtkWidget *widget, GdkEventScroll *event, gpointer user_data)
{
GncSxSinceLastRunDialog *dialog = user_data;
if (dialog->temp_ce)
return TRUE;
else
return FALSE;
}
GncSxSinceLastRunDialog*
gnc_ui_sx_since_last_run_dialog (GtkWindow *parent, GncSxInstanceModel *sx_instances, GList *auto_created_txn_guids)
@ -1150,6 +1178,9 @@ gnc_ui_sx_since_last_run_dialog (GtkWindow *parent, GncSxInstanceModel *sx_insta
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE(sort_model),
sort_column, sort_type);
g_signal_connect (G_OBJECT(dialog->instance_view), "scroll-event",
G_CALLBACK(scroll_event), dialog);
renderer = gtk_cell_renderer_text_new ();
col = gtk_tree_view_column_new_with_attributes (_("Transaction"), renderer,
"text", SLR_MODEL_COL_NAME,
@ -1197,7 +1228,7 @@ gnc_ui_sx_since_last_run_dialog (GtkWindow *parent, GncSxInstanceModel *sx_insta
"sensitive", SLR_MODEL_COL_INSTANCE_STATE_SENSITIVITY,
NULL);
gtk_tree_view_append_column (dialog->instance_view, col);
gtk_tree_view_column_set_resizable (col, TRUE);
gtk_tree_view_column_set_resizable (col, FALSE);
renderer = gtk_cell_renderer_text_new ();
g_object_set (G_OBJECT(renderer),

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.38.2 -->
<!-- Generated with glade 3.40.0 -->
<interface>
<requires lib="gtk+" version="3.22"/>
<object class="GtkDialog" id="account_deletion_dialog">
@ -1554,6 +1554,7 @@
<property name="visible">True</property>
<property name="can-focus">True</property>
<property name="vexpand">True</property>
<property name="hscrollbar-policy">never</property>
<property name="shadow-type">in</property>
<child>
<object class="GtkTreeView" id="instance_view">