thanks for the explanation and path forward. and so i understand absolutely:
i now have to wrap my app's execution in order to specify the CSS snippet? or can i embed that CSS snippet into the binary itself, executed at execution startup (i.e., internally coded)? obviously i prefer the 2nd since having to specify in two different places how the widgets should look inside a binary app is annoying. and one more question: documentation for gtk_style_context_add_class() indicates i should fetch the context from the widget i am wishing to add the class to. my app has upwards of 50 drawing areas, each contained within a frame. must i fetch a context and add the class for each frame individually, or is there a shorthand method to applying a single context and class to all frames containing my drawing areas? thanks again, richard On Thu, Sep 10, 2015 at 9:28 AM, Emmanuele Bassi <eba...@gmail.com> wrote: > Hi; > > On 10 September 2015 at 15:06, richard boaz <ivor.b...@gmail.com> wrote: > > After some google-reading, it seems that with GTK-3, control of frame >> decorations has been 100% given over to whatever WM is running whatever >> theme. >> > > The WM is not involved in the least. The theme involved is the GTK+ one. > > To be fair, the shadow style was always left to the theme, even in the > GTK+ 2.x days. These days, mapping all possible border size, shadow, and > color combinations to a simple flat enumeration is impossible without > having a combinatorial explosion of values. We have a better way, with CSS, > to express that. > > My first question to the general list is to wonder if anyone has found a >> work-around for this. Investigating the documentation turns up nothing >> obvious in possible alternatives. >> > > You can add your own CSS styling to get the border you wish. > > >> Barring some other way of achieving what's *required *for my app, I'm >> dying to know how this evolution of functionality is a good idea. A bug >> was reported for this (https://bugzilla.gnome.org/show_bug.cgi?id=659926) >> where this has been marked as WONTFIX, since this seems to have been simply >> given over to the theme engine's own nefarious intent. >> > > Please, let's not be overly melodramatic. No need to infer "nefarious" > intents. > > The theme is responsible for the styling of everything you see on the > screen; it makes sense to have the theme in charge of the border of a frame. > > Since it's part of the theme, it also means you can override it with a > custom set of CSS rules, instead of having to patch GTK or your application. > > >> But I don't entirely understand this: the above two plots are generated >> using the same WM on the same box, at exactly the same time, so something >> has obviously changed between GTK-2 and GTK-3, where program control of how >> an app's internal widgets *must* be displayed has simply vanished. >> > > The whole theme system has changed between GTK 2.x and GTK 3.x, so, yes: > you could say that something has changed. > > >> So, how am I supposed to provide a GtkGrid of drawing areas where I'm >> actually able to distinguish to the user the borders between them? >> > > Add a style class to your GtkFrame, using the > gtk_style_context_add_class() API on the GtkStyleContext of your widget, or > by by using the <style><class name=''/></style> stanza in the GtkBuilder > XML, depending on what you use to build your UI. > > When launching your application, create a GtkCssProvider and load a CSS > snippet; something like: > > .my-drawing-area-frame { > border: 1px red; > padding: 6px; > } > > and use gtk_style_context_add_provider_for_screen() to associate the > GtkCssProvider to the default screen. This will ensure that all widgets > with a style class of 'my-drawing-area-frame' will have a red, 1 pixel > border, and a padding of 6 pixels. > > Ciao, > Emmanuele. > > -- > https://www.bassi.io > [@] ebassi [@gmail.com] >
_______________________________________________ gtk-list mailing list gtk-list@gnome.org https://mail.gnome.org/mailman/listinfo/gtk-list