diff --git a/docs/modules/Custom.md b/docs/modules/Custom.md index 30dbc488..4d9a44b0 100644 --- a/docs/modules/Custom.md +++ b/docs/modules/Custom.md @@ -46,7 +46,7 @@ A container to place nested widgets inside. | Name | Type | Default | Description | |---------------|------------------------------------------------------------|----------------|-------------------------------------------------------------------| | `orientation` | `'horizontal'` or `'vertical'` (shorthand: `'h'` or `'v'`) | `'horizontal'` | Whether child widgets should be horizontally or vertically added. | -| `widgets` | `(Module or Widget)[]` | `[]` | List of widgets to add to this box. | +| `widgets` | `(Module or Widget)[]` | `[]` | List of modules/widgets to add to this box. | #### Label @@ -64,10 +64,11 @@ A clickable button, which can run a command when clicked. > Type `button` -| Name | Type | Default | Description | -|------------|-------------------------------------------------|---------|---------------------------------------------------------------------| -| `label` | [Dynamic String](dynamic-values#dynamic-string) | `null` | Widget text label. Pango markup and embedded scripts are supported. | -| `on_click` | `string [command]` | `null` | Command to execute. More on this [below](#commands). | +| Name | Type | Default | Description | +|------------|-------------------------------------------------|---------|--------------------------------------------------------------------------------------------------| +| `label` | [Dynamic String](dynamic-values#dynamic-string) | `null` | Widget text label. Pango markup and embedded scripts are supported. Ignored if `widgets` is set. | +| `widgets` | `(Module or Widget)[]` | `[]` | List of modules/widgets to add to this button. | +| `on_click` | `string [command]` | `null` | Command to execute. More on this [below](#commands). | #### Image diff --git a/src/modules/custom/button.rs b/src/modules/custom/button.rs index 44a4a6f4..dba683ef 100644 --- a/src/modules/custom/button.rs +++ b/src/modules/custom/button.rs @@ -1,12 +1,12 @@ use gtk::prelude::*; -use gtk::{Button, Label}; +use gtk::{Button, Label, Orientation}; use serde::Deserialize; use crate::dynamic_value::dynamic_string; use crate::modules::PopupButton; use crate::{build, try_send}; -use super::{CustomWidget, CustomWidgetContext, ExecEvent}; +use super::{CustomWidget, CustomWidgetContext, ExecEvent, WidgetConfig}; #[derive(Debug, Deserialize, Clone)] pub struct ButtonWidget { @@ -14,6 +14,7 @@ pub struct ButtonWidget { class: Option, label: Option, on_click: Option, + widgets: Option>, } impl CustomWidget for ButtonWidget { @@ -23,7 +24,15 @@ impl CustomWidget for ButtonWidget { let button = build!(self, Self::Widget); context.popup_buttons.borrow_mut().push(button.clone()); - if let Some(text) = self.label { + if let Some(widgets) = self.widgets { + let container = gtk::Box::new(Orientation::Horizontal, 0); + + for widget in widgets { + widget.widget.add_to(&container, &context, widget.common); + } + + button.add(&container); + } else if let Some(text) = self.label { let label = Label::new(None); label.set_use_markup(true); button.add(&label);