Skip to content

Commit

Permalink
Merge Bob Fewell's 'gnc-edit-changes' into master.
Browse files Browse the repository at this point in the history
  • Loading branch information
jralls committed May 24, 2020
2 parents 3036b72 + fafb3ef commit 608e700
Show file tree
Hide file tree
Showing 6 changed files with 70 additions and 31 deletions.
19 changes: 13 additions & 6 deletions gnucash/register/register-gnome/combocell-gnome.c
Expand Up @@ -641,7 +641,7 @@ gnc_combo_cell_modify_verify (BasicCell* _cell,
*cursor_position += change_chars;
box_str = match_str;
}
else
else if (cell->shared_store)
{
// No start-of-name match, try type-ahead search, we match any substring of the full account name.
GtkListStore *store = cell->shared_store;
Expand All @@ -655,7 +655,7 @@ gnc_combo_cell_modify_verify (BasicCell* _cell,

if (match_str == NULL)
{
if (gnc_item_list_using_temp (box->item_list))
if (cell->shared_store && gnc_item_list_using_temp (box->item_list))
{
block_list_signals (cell); //Prevent recursion
gnc_item_list_set_temp_store (box->item_list, NULL);
Expand All @@ -666,6 +666,8 @@ gnc_combo_cell_modify_verify (BasicCell* _cell,
block_list_signals (cell);
gnc_item_list_select (box->item_list, NULL);
unblock_list_signals (cell);
*cursor_position = *start_selection = newval_chars;
*end_selection = -1;
return;
}

Expand Down Expand Up @@ -902,7 +904,8 @@ popup_get_height (G_GNUC_UNUSED GtkWidget* widget,
int count, height;

count = gnc_item_list_num_entries (box->item_list);
height = count * row_height;
height = count * (gnc_item_list_get_cell_height (box->item_list) + 2);

if (height < space_available)
{
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrollwin),
Expand Down Expand Up @@ -980,9 +983,13 @@ gnc_combo_cell_enter (BasicCell* bcell,
popup_get_width, box);

block_list_signals (cell);
// Clear the temp store to ensure we don't start in type-ahead mode.
gnc_item_list_set_temp_store (box->item_list, NULL);
gtk_list_store_clear (box->tmp_store);

if (cell->shared_store && gnc_item_list_using_temp (box->item_list))
{
// Clear the temp store to ensure we don't start in type-ahead mode.
gnc_item_list_set_temp_store (box->item_list, NULL);
gtk_list_store_clear (box->tmp_store);
}
gnc_item_list_select (box->item_list, bcell->value);
unblock_list_signals (cell);

Expand Down
2 changes: 2 additions & 0 deletions gnucash/register/register-gnome/gnucash-date-picker.c
Expand Up @@ -125,6 +125,8 @@ gnc_date_picker_class_init (GNCDatePickerClass *date_picker_class)

object_class = G_OBJECT_CLASS (date_picker_class);

gtk_widget_class_set_css_name (GTK_WIDGET_CLASS(date_picker_class), "gnc-id-date-picker");

gnc_date_picker_signals[DATE_SELECTED] =
g_signal_new("date_selected",
G_TYPE_FROM_CLASS(object_class),
Expand Down
47 changes: 30 additions & 17 deletions gnucash/register/register-gnome/gnucash-item-edit.c
Expand Up @@ -61,7 +61,7 @@ enum
static GtkBoxClass *gnc_item_edit_parent_class;

static GtkToggleButtonClass *gnc_item_edit_tb_parent_class;
static void gnc_item_edit_destroying(GtkWidget *this, gpointer data);
static void gnc_item_edit_destroying (GtkWidget *this, gpointer data);
static void
gnc_item_edit_tb_init (GncItemEditTb *item_edit_tb)
{
Expand Down Expand Up @@ -848,7 +848,6 @@ gnc_item_edit_new (GnucashSheet *sheet)
GtkBorder padding;
GtkBorder margin;
GtkBorder border;
GtkWidget *vb = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
GncItemEdit *item_edit =
g_object_new (GNC_TYPE_ITEM_EDIT,
"sheet", sheet,
Expand Down Expand Up @@ -904,23 +903,20 @@ gnc_item_edit_new (GnucashSheet *sheet)
gtk_container_add(GTK_CONTAINER(item_edit->popup_toggle.ebox),
item_edit->popup_toggle.tbutton);

/* The button needs to be packed into a vertical box so that the height and position
* can be controlled in earlier than Gtk3.20 versions */
gtk_box_pack_start (GTK_BOX(vb), item_edit->popup_toggle.ebox,
FALSE, FALSE, 0);

gtk_box_pack_start (GTK_BOX(item_edit), vb, FALSE, FALSE, 0);
gtk_box_pack_start (GTK_BOX(item_edit), item_edit->popup_toggle.ebox, FALSE, FALSE, 0);
gtk_widget_show_all(GTK_WIDGET(item_edit));
g_signal_connect(G_OBJECT(item_edit), "destroy",
G_CALLBACK(gnc_item_edit_destroying), NULL);
return GTK_WIDGET(item_edit);
}

static void
gnc_item_edit_destroying(GtkWidget *item_edit, gpointer data)
gnc_item_edit_destroying (GtkWidget *item_edit, gpointer data)
{
g_signal_handler_disconnect (GNC_ITEM_EDIT (item_edit)->popup_item,
GNC_ITEM_EDIT (item_edit)->popup_height_signal_id);
if (GNC_ITEM_EDIT (item_edit)->popup_height_signal_id > 0)
g_signal_handler_disconnect (GNC_ITEM_EDIT (item_edit)->popup_item,
GNC_ITEM_EDIT (item_edit)->popup_height_signal_id);

while (g_idle_remove_by_data((gpointer)item_edit))
continue;
}
Expand Down Expand Up @@ -1012,13 +1008,11 @@ gnc_item_edit_show_popup (GncItemEdit *item_edit)

// Lets check popup height is the true height
item_edit->popup_returned_height = popup_h;
if (!item_edit->popup_height_signal_id)
item_edit->popup_height_signal_id =
g_signal_connect_after (item_edit->popup_item, "size-allocate",
G_CALLBACK(check_popup_height_is_true),
item_edit);

gtk_widget_set_size_request (item_edit->popup_item, popup_w - 1, popup_h);
if (popup_h == popup_max_height)
gtk_widget_set_size_request (item_edit->popup_item, popup_w - 1, popup_h);
else
gtk_widget_set_size_request (item_edit->popup_item, popup_w - 1, -1);

toggle = GTK_TOGGLE_BUTTON(item_edit->popup_toggle.tbutton);

Expand Down Expand Up @@ -1087,6 +1081,7 @@ gnc_item_edit_hide_popup (GncItemEdit *item_edit)
gtk_widget_grab_focus (GTK_WIDGET (item_edit->sheet));
}


void
gnc_item_edit_set_popup (GncItemEdit *item_edit,
GtkWidget *popup_item,
Expand All @@ -1102,6 +1097,24 @@ gnc_item_edit_set_popup (GncItemEdit *item_edit,
if (item_edit->is_popup)
gnc_item_edit_hide_popup (item_edit);

/* setup size-allocate callback for popup_item height, done here as
item_edit is constant and popup_item changes per cell */
if (popup_item)
{
item_edit->popup_height_signal_id = g_signal_connect_after (
popup_item, "size-allocate",
G_CALLBACK(check_popup_height_is_true),
item_edit);
}
else
{
if (GNC_ITEM_EDIT (item_edit)->popup_height_signal_id > 0)
{
g_signal_handler_disconnect (item_edit->popup_item, item_edit->popup_height_signal_id);
item_edit->popup_height_signal_id = 0;
}
}

item_edit->is_popup = popup_item != NULL;

item_edit->popup_item = popup_item;
Expand Down
28 changes: 21 additions & 7 deletions gnucash/register/register-gnome/gnucash-item-list.c
Expand Up @@ -283,6 +283,7 @@ gnc_item_list_init (GncItemList* item_list)
item_list->tree_view = NULL;
item_list->list_store = NULL;
item_list->temp_store = NULL;
item_list->cell_height = 0;
}


Expand Down Expand Up @@ -385,6 +386,7 @@ gnc_item_list_class_init (GncItemListClass* item_list_class)

gnc_item_list_parent_class = g_type_class_peek_parent (item_list_class);

gtk_widget_class_set_css_name (GTK_WIDGET_CLASS(item_list_class), "gnc-id-sheet-list");

gnc_item_list_signals[SELECT_ITEM] =
g_signal_new ("select_item",
Expand Down Expand Up @@ -474,11 +476,25 @@ tree_view_selection_changed (GtkTreeSelection* selection,
g_free (string);
}


gint
gnc_item_list_get_cell_height (GncItemList *item_list)
{

gint min_height, nat_height;
gtk_cell_renderer_get_preferred_height (item_list->renderer,
GTK_WIDGET(item_list->tree_view),
&min_height,
&nat_height);

return min_height;
}


GtkWidget*
gnc_item_list_new (GtkListStore* list_store)
{
GtkWidget* tree_view;
GtkCellRenderer* renderer;
GtkTreeViewColumn* column;

GncItemList* item_list =
Expand Down Expand Up @@ -508,9 +524,9 @@ gnc_item_list_new (GtkListStore* list_store)
gtk_tree_sortable_set_sort_column_id (GTK_TREE_SORTABLE (list_store),
0, GTK_SORT_ASCENDING);

renderer = gtk_cell_renderer_text_new();
item_list->renderer = gtk_cell_renderer_text_new();
column = gtk_tree_view_column_new_with_attributes (_ ("List"),
renderer,
item_list->renderer,
"text", 0,
NULL);
gtk_tree_view_append_column (GTK_TREE_VIEW (tree_view), column);
Expand All @@ -526,11 +542,9 @@ gnc_item_list_new (GtkListStore* list_store)
g_signal_connect (G_OBJECT (tree_view), "key_press_event",
G_CALLBACK (gnc_item_list_key_event), item_list);

g_signal_connect (G_OBJECT (gtk_tree_view_get_selection (GTK_TREE_VIEW (
tree_view))), "changed",
g_signal_connect (G_OBJECT (gtk_tree_view_get_selection (
GTK_TREE_VIEW (tree_view))), "changed",
G_CALLBACK (tree_view_selection_changed), item_list);

return GTK_WIDGET (item_list);
}


4 changes: 4 additions & 0 deletions gnucash/register/register-gnome/gnucash-item-list.h
Expand Up @@ -45,6 +45,8 @@ typedef struct
GtkScrolledWindow* scrollwin;
GtkListStore *list_store; /* Contains the list items */
GtkListStore *temp_store; /* Temporary store for typeahead select */
GtkCellRenderer *renderer;
gint cell_height;
} GncItemList;

typedef struct
Expand All @@ -69,6 +71,8 @@ GtkWidget *gnc_item_list_new (GtkListStore *shared_store);

gint gnc_item_list_num_entries (GncItemList *item_list);

gint gnc_item_list_get_cell_height (GncItemList *item_list);

void gnc_item_list_clear (GncItemList *item_list);

void gnc_item_list_append (GncItemList *item_list, const char *string);
Expand Down
1 change: 0 additions & 1 deletion po/POTFILES.in
Expand Up @@ -391,7 +391,6 @@ gnucash/register/register-gnome/gnucash-header.c
gnucash/register/register-gnome/gnucash-item-edit.c
gnucash/register/register-gnome/gnucash-item-list.c
gnucash/register/register-gnome/gnucash-register.c
gnucash/register/register-gnome/gnucash-scrolled-window.c
gnucash/register/register-gnome/gnucash-sheet.c
gnucash/register/register-gnome/gnucash-sheet-private.c
gnucash/register/register-gnome/gnucash-style.c
Expand Down

0 comments on commit 608e700

Please sign in to comment.