Was panicking until I read that they were only for output, in which case disabling focus is definitely the right thing to do. Hopefully disabling focus will also prevent any visual clicking of the button.
Another option is to use something like a GtkLabel placed inside a GtkFrame (none of which are input widgets and get focus by default).
If you're sticking with a button for display, then because this is quite non-standard and gtk isn't fully aware its for output only, it might be a good idea to set the accessible name/description/role/relationship etc. of the widget so it doesn't confuse anyone using assistive technologies. E.g.:
Code:
AtkObject* atk_butt;
GtkWidget *button, *source;
...
atk_butt=gtk_widget_get_accessible(button);
atk_src=gtk_widget_get_accessible(source);
atk_object_set_description(atk_butt, "Digital output for channel 2");
atk_object_set_role(atk_butt, ATK_ROLE_TEXT);//otherwise the role would still be something like PUSH_BUTTON
atk_object_add_relationship(atk_butt, ATK_RELATION_CONTROLLED_BY, atk_src);
atk_object_add_relationship(atk_src, ATK_RELATION_CONTROLLER_FOR, atk_butt);
Don't know exactly what would best fit your purposes. Have a look at
http://developer.gnome.org/atk/unstable/AtkObject.html for a description of the different roles and relationships (LABEL, LABEL_FOR and LABELLED_BY are the most common ones i have to use - see
http://developer.gnome.org/accessibility-devel-guide/3.0/gad-coding-guidelines.html.en for examples on other cases where it s good to set up atk functions - though personally the _add_relationship function I use above is a much neater way of doing it than their example).