Thanks. Turns out my code is ok but this actually seems to be a problem of running in xephyr. Not sure why as I've tested widgets in xephyr before without a problem.
However, I just ran qtile from a different tty and the widget behaves as expected. Lost a couple of hours to this today...! On Sunday, 22 November 2020 at 17:39:25 UTC [email protected] wrote: > I think that you should modify self.length instead of self.width. > IIRC self.width is just an info of what the width should be (fixed value > or calculated), but the bar reserves a space of self.length when drawing > its widgets. > Also, I think there is no need to use self.draw(), self.bar.draw redraws > all widgets by calling their draw() method. > > > Le dim. 22 nov. 2020 à 18:31, elParaguayo <[email protected]> a écrit : > >> I'm starting a new widget from scratch and am having some issues. >> >> I need the size to be variable so I'm using bar.CALCULATED for the width >> and then have a calculate_length function to provide the relevant width. >> >> However, it's just not resizing when the width changes. I think this just >> comes down to a lack of understanding about how the different draw >> functions work. >> >> Here's a minimal example that's not working for me: >> >> class WidgetBox(base._Widget): >> orientations = base.ORIENTATION_HORIZONTAL >> defaults = [] >> >> def __init__(self, **config): >> base._Widget.__init__(self, bar.CALCULATED, **config) >> self.add_defaults(WidgetBox.defaults) >> self.box_is_open = False >> >> self.add_callbacks({'Button1': self.open_box}) >> >> def _configure(self, qtile, bar): >> base._Widget._configure(self, qtile, bar) >> >> self.layout = self.drawer.textlayout( >> "*", >> "ffffff", >> "sans", >> 20, >> None, >> markup=True, >> ) >> >> def calculate_length(self): >> if not self.box_is_open: >> return 50 >> else: >> return 100 >> >> def draw(self): >> self.drawer.clear(self.background or self.bar.background) >> self.layout.draw(0, >> int(self.bar.height / 2.0 - >> self.layout.height / 2.0) + 1) >> >> self.drawer.draw(offsetx=self.offsetx, width=self.width) >> >> def open_box(self): >> logger.info("Opening widget box...") >> self.box_is_open = not self.box_is_open >> logger.info("Width: {}".format(self.width)) >> self.draw() >> self.bar.draw() >> >> >> I can see that the width is changed by looking at the logs but the widget >> itself doesn't change size. What have I missed? >> >> Also, is there no way to do code formatting on google groups? monospace >> font? >> >> -- >> You received this message because you are subscribed to the Google Groups >> "qtile-dev" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/qtile-dev/f89df5dd-9b7d-4be0-97a8-903dcce61493n%40googlegroups.com >> >> <https://groups.google.com/d/msgid/qtile-dev/f89df5dd-9b7d-4be0-97a8-903dcce61493n%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > -- You received this message because you are subscribed to the Google Groups "qtile-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/qtile-dev/8094263e-b359-46eb-9ad0-7f58345be8c2n%40googlegroups.com.
