> On Aug 12, 2018, at 12:22 AM, David Cousens <davidcous...@bigpond.com> wrote: > > Hi, > > I raised the above bug as a feature request then I decided to try and tackle > it myself. My concept was to have a popup menu activated by a right click in > the matcher window area from which the user could enable and disable > multiple selection of transactions in the window and elect to assign a > transfer account to a selection of multiple rows. My reason for doing this > is I often have within an imported set of transactions, sets of multiple > transactions which have the same transfer account and processing an import > would be speeded up if these could be selected as a group and the the > transfer account selected and applied to the group. > > I now have a lot of the basic code in place to process a selection and to > create and view a popup menu, activate and disable multiple selection and > process a group of selected rows, partially tested but I have struck a > problem in that the GtkTreeView does not implement Ctrl-click selection in > the API and i am going to have to provide that myself. > > As far as I can see from the code in import-main-matcher.c GnuCash does not > seem to implement anything other than a mouse double click to select a > single row which is processed by the callback initiated by the TreeView > "row-activated" event. I.e. there is no selection by pressing "Enter" while > the focus is on a given row. > > My plan is to detect Ctrl-Left click (implemented) and use that to add rows > to the selection and then initiate the processing of the selection using the > right click (implemented) popup menu. To do this, I have to detect a > GDK_BUTTON_PRESS event and then use the event->state to determine whether > Ctrl is pressed simultaneously (implemented) or whether the third mouse > button has been clicked (implemented) . This however appears to short > circuit the "row-activated" event detection by the GtkTreeView as it detects > the sequence: > GDK_BUTTON_PRESS > GDK_BUTTON_RELEASE > GDK_BUTTON_PRESS > GDK_BUTTON_RELEASE if it occurs within 0.25 s > so I am going to have to provide my own double click detection within the > callback I use to process the initial button press. > > My question is is this. Is what I have outlined above likely to interfere > with any non mouse based selection of transactions for applying a transfer > account and does the approach seem reasonable? I can't see that occurring in > the code for the main matcher, but I am a relative novice in using Gdk and > Gtk so I could be easily missing something. E.g. Up, Down keys to shift the > row focus and Enter to select for example. >
David, Your bravery is admirable, but it takes a lot of study to successfully customize Gtk internals and GtkTreeView is one of Gtk’s most complex features. Fortunately GtkTreeView already has ctrl-click multiple selection and GnuCash has GtkTreeViews using it, for example the account selection in report options. The code for that is in https://github.com/Gnucash/gnucash/blob/maint/gnucash/gnome-utils/gnc-tree-view-account.c <https://github.com/Gnucash/gnucash/blob/maint/gnucash/gnome-utils/gnc-tree-view-account.c>. Regards, John Ralls _______________________________________________ gnucash-devel mailing list gnucash-devel@gnucash.org https://lists.gnucash.org/mailman/listinfo/gnucash-devel