mirror of
https://github.com/JakeStanger/ironbar.git
synced 2024-11-25 10:53:56 +03:00
feat(tray): add direction
option
This commit is contained in:
parent
d2adecb935
commit
b037a55fb7
@ -6,7 +6,10 @@ Displays a fully interactive icon tray using the KDE `libappindicator` protocol.
|
||||
|
||||
> Type: `tray`
|
||||
|
||||
***This module provides no configuration options.***
|
||||
|
||||
| Name | Type | Default | Description |
|
||||
|-------------|----------|-----------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------|
|
||||
| `direction` | `string` | `left_to_right` if bar is horizontal, `top_to_bottom` otherwise | Direction to display the tray items. Possible values: `top_to_bottom`, `bottom_to_top`, `left_to_right`, `right_to_left` |
|
||||
|
||||
<details>
|
||||
<summary>JSON</summary>
|
||||
@ -15,7 +18,8 @@ Displays a fully interactive icon tray using the KDE `libappindicator` protocol.
|
||||
{
|
||||
"end": [
|
||||
{
|
||||
"type": "tray"
|
||||
"type": "tray",
|
||||
"direction": "top_to_bottom"
|
||||
}
|
||||
]
|
||||
}
|
||||
@ -29,6 +33,7 @@ Displays a fully interactive icon tray using the KDE `libappindicator` protocol.
|
||||
```toml
|
||||
[[end]]
|
||||
type = "tray"
|
||||
direction = "top_to_bottom"
|
||||
```
|
||||
|
||||
</details>
|
||||
@ -39,6 +44,7 @@ type = "tray"
|
||||
```yaml
|
||||
end:
|
||||
- type: "tray"
|
||||
direction: "top_to_bottom"
|
||||
```
|
||||
|
||||
</details>
|
||||
@ -49,7 +55,10 @@ end:
|
||||
```corn
|
||||
{
|
||||
end = [
|
||||
{ type = "tray" }
|
||||
{
|
||||
type = "tray"
|
||||
direction = "top_to_bottom"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
@ -63,4 +72,4 @@ end:
|
||||
| `.tray` | Tray widget box |
|
||||
| `.tray .item` | Tray icon button |
|
||||
|
||||
For more information on styling, please see the [styling guide](styling-guide).
|
||||
For more information on styling, please see the [styling guide](styling-guide).
|
||||
|
@ -8,7 +8,7 @@ use crate::modules::tray::diff::get_diffs;
|
||||
use crate::modules::{Module, ModuleInfo, ModuleParts, ModuleUpdateEvent, WidgetContext};
|
||||
use crate::{glib_recv, spawn};
|
||||
use color_eyre::Result;
|
||||
use gtk::prelude::*;
|
||||
use gtk::{prelude::*, PackDirection};
|
||||
use gtk::{IconTheme, MenuBar};
|
||||
use interface::TrayMenu;
|
||||
use serde::Deserialize;
|
||||
@ -18,10 +18,28 @@ use tokio::sync::mpsc;
|
||||
|
||||
#[derive(Debug, Deserialize, Clone)]
|
||||
pub struct TrayModule {
|
||||
#[serde(default, deserialize_with = "deserialize_orientation")]
|
||||
pub direction: Option<PackDirection>,
|
||||
#[serde(flatten)]
|
||||
pub common: Option<CommonConfig>,
|
||||
}
|
||||
|
||||
fn deserialize_orientation<'de, D>(deserializer: D) -> Result<Option<PackDirection>, D::Error>
|
||||
where
|
||||
D: serde::Deserializer<'de>,
|
||||
{
|
||||
let value = Option::<String>::deserialize(deserializer)?;
|
||||
value
|
||||
.map(|v| match v.as_str() {
|
||||
"left_to_right" => Ok(PackDirection::Ltr),
|
||||
"right_to_left" => Ok(PackDirection::Rtl),
|
||||
"top_to_bottom" => Ok(PackDirection::Ttb),
|
||||
"bottom_to_top" => Ok(PackDirection::Btt),
|
||||
_ => Err(serde::de::Error::custom("invalid value for orientation")),
|
||||
})
|
||||
.transpose()
|
||||
}
|
||||
|
||||
impl Module<MenuBar> for TrayModule {
|
||||
type SendMessage = NotifierItemMessage;
|
||||
type ReceiveMessage = NotifierItemCommand;
|
||||
@ -70,6 +88,17 @@ impl Module<MenuBar> for TrayModule {
|
||||
) -> Result<ModuleParts<MenuBar>> {
|
||||
let container = MenuBar::new();
|
||||
|
||||
let direction = self.direction.unwrap_or(
|
||||
if info.bar_position.get_orientation() == gtk::Orientation::Vertical {
|
||||
PackDirection::Ttb
|
||||
} else {
|
||||
PackDirection::Ltr
|
||||
},
|
||||
);
|
||||
|
||||
container.set_pack_direction(direction);
|
||||
container.set_child_pack_direction(direction);
|
||||
|
||||
{
|
||||
let container = container.clone();
|
||||
let mut menus = HashMap::new();
|
||||
|
Loading…
Reference in New Issue
Block a user