As there was no project news over x-mas, I have a slightly longer one this time. Before I dive into the usual code changes, something else - tadaa - we have a new webpage. The previous page was a mediawiki with a few customizations. Now we use a combo of wordpress-3 and mediawiki. Both use a similar theme (based on the arch linux one). Wordpres gives as news, forum, social-network features and much more. The first days I was suffering a lot from wordpress account creation spam. Luckily this seems to be under control now. The concept and a lot of the work was done by Joe Pea. We both have quite a few more things on the todo list. One of the next items is single sign in for wordpress and mediawiki. Stay tuned.
In the last two month I improved the song-recovery workflow. The recovery is now giving better feedback to the user and we're properly cleaning up afterwards. The machine machine and pattern view do now have almost full undo/redo.
Quite several times already I had to deal with a dialog containing a treeview showing a list of items. The latest example is the song-recovery dialog. Giving such a dialog a nice good initial size is tricky. The treeview usually goes into a scrolled window. By default one can see the headers and maybe one line. Of course one can resize the dialog a bit, but as the line height is not easy to figure it is still not easy. One approach I came up with is to grow the dialog to show all lines until it would exceed a certain limit. The limit would be e.g. half of screen or window height. The code for that is quite simple:
list=gtk_tree_view_new(); g_signal_connect(list,"size-request",G_CALLBACK(on_list_size_request),NULL); ... static void on_list_size_request(GtkWidget *widget,GtkRequisition *requisition,gpointer user_data) { gint max_height=gdk_screen_get_height(gdk_screen_get_default())/2; gint height=2+MIN(requisition->height,max_height);Another thing in gtk that I wonder if it has a better solution is the disposal of popup-menus. The problem is that gtk_menu_popup is not taking ownership of the menu, but there seems to be now event when the menu is done, so that one can unref it. The only solution I can see is the pre- create the menu and ref-sink it. When the entity that owns it is disposed it can destroy and unref it./* make sure the dialog resize without showing a scrollbar until it would * reach half screen height */ gtk_widget_set_size_request(gtk_widget_get_parent(widget),-1,height); }
As we're quite gtk related in this time anyway one more discovery. Listening for key-press-event instead of key- release-event and widgets makes key-repeat work. Have added that to the gtk api docs.
Beside all the things above a couple of bug-fixes went in (make preferences in machines work (e.g. choosing fluidsynth instruments). I did some refactoring on midi controller handling; one can use the pitchwheel now and continuous controllers work better. Finally the dialogs warning about unsaved changes are more user-friendly; they now show the time passed since last saved/created in addition to the timestamp.
50 files changed, 2402 insertions(+), 1183 deletions(-)