Re: Proposal: titlebar widgeting specification

2022-08-16 Thread samuel ammonius
On Sun, Aug 14, 2022 at 2:41 AM Mathew Gordon  wrote:

> I really like it, this could also give the ability to have an advanced
> title bar in eg: game programming where it's likely that you aren't
> using a widget kit at all. Maybe if anyone is maintaining a WM they
> could implement something like this into the testing branch?


Can you explain what you mean by advanced? The API I've planned
out so far includes the following widgets:

   1. TbSpacer
   2. TbSeparator
   3. TbLabel
   4. TbIcon
   5. TbButton
   6. TbIconButton
   7. TbCheckBox
   8. TbTextInput
   9. TbSlider
   10. TbComboBox
   11. TbListView
   12. TbMenu


(Sorry for the late reply. I rushed through your message without really
getting it, and I thought you were just saying you liked the idea)


Re: Proposal: titlebar widgeting specification

2022-07-28 Thread notebook

Without having much say, ...


1. Add widgets to the title bar (such as labels, text inputs, buttons, 
checkboxes, combo boxes, etc...) to combine the benefits of CSD and window 
managers


I extremely like this idea!
I would hope that this brings back together window manager windows and the 
current CSD implementations.



 2. Get information about the window manager's appearance to implement CSD 
without off-putting the user


I'm too rookie to judge about the importance of (2)

Regards,
Chris | DarkTrick


On 2022/07/25 5:28, samuel ammonius wrote:

I don't have any rock-solid plan for this specification, I'm just throwing it out there for 
discussion. I'm using the term "window manager" synonymously with "wayland 
compositor" throughout this email. The idea is that window managers could provide an API for 
applications to do either of the following:

 1. Add widgets to the title bar (such as labels, text inputs, buttons, 
checkboxes, combo boxes, etc...) to combine the benefits of CSD and window 
managers
 2. Get information about the window manager's appearance to implement CSD 
without off-putting the user


An API like this could then lead the way for real widgeting toolkits to 
integrate it into their syntax without much contrast. For example, GTK could 
have the headerbar use this API once GNOME's window manager supports this 
specification, or Qt could create a QTitleBar widget with a similar syntax to
QToolBar (including functions like addWidget, addSeparator, and so on). This 
will allow both developers and users to get the best out of what both CSV and 
window managers have to offer, and to be relieved of having to pick one or even 
not getting to choose.

The challenge with creating something like this is that it will have to be very 
well designed if we want to avoid either driving developers crazy or destroying
performance through something like a CSS parser. A design like this is 
possible, but still a challenge. There's a lot of possible ways that the API 
could look, so I'll
give a brief template to get started:

  (This code is going to look horrible on any email clients that don't 
support HTML)  ___

#include #include intmain(intargc,char*argv[]){TitleBar *bar 
=get_titlebar(/* pointer to X11 Window / Wayland shell surface */);TbWidget *checkbox 
=titlebar_add_widget(bar,titlebar_button,"click me!");

 TbWidget*btn =titlebar_add_widget(bar,titlebar_button,"click me!");TbWidget *label 
=titlebar_add_widget(bar,titlebar_label,"<--- click it!!!")titlebar_widget_set_text(label,"<--- 
nevermind, don\'t click it!!!");titlebar_widget_set_tooltip(label,"clicking it will trigger the end of the 
world");titlebar_remove_widget(bar,btn);update_titlebar(bar);sleep(99); /* showtime! */}



This template shows some basic functions that probably wouldn't change much in 
the future. The rest of the implementation could be done in many different ways,
each with their own pros and cons. Here's a few of the questions that would 
need to be answered:

  * *Communication -* How will the API communicate to window managers? One 
option is DBus. Another option could be a standard location for window managers 
to place libraries (eg. /usr/lib/tbwidgets/[openbox].so) which implement the 
specification, but this would require loading those libraries during runtime 
rather than compile time, and I'm not sure if that's even possible.
  * *Layout API -* The possibilities for how apps may want to organize the titlebar in 
different situations is infinite. An app may want to set a maximum and minimum size for 
widgets, may want to use relative or absolute sizing/positioning, may want to hide/shrink 
certain widgets when the titlebar is too small, and so on, so a CSS property-like 
solution would be a bad approach. I think the only way to give users the ability to place 
widgets however they want is to have the user create a function that takes an unsigned 
int parameter for the titlebar's new length, and have a function like 
"titlebar_set_resize_callback(TitleBar *bar, void(*callback)(int));" that the 
user can pass their function to. This callback function could then be called by the 
internal API right before the widgets are rendered whenever the window is resized 
horizontally.
  * *Info detail* - This question applies to the second part of the API as 
mentioned in the introduction. When an app wants to get data about a window 
manager so that it can implement CSD (or maybe even style the app based on the 
appearance of the window manager), what kind of info should be available and 
how should that info be organized? It could get very complicated to offer all 
of this information considering things like gradients, animations, borders, 
shadows, fonts, etc. I don't have any good solutions to this so far.
  o On the topic of how this info will be designed, there would need to be 
a way for apps