Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 48 additions & 0 deletions api/lua/pinnacle/grpc/defs.lua
Original file line number Diff line number Diff line change
Expand Up @@ -1194,9 +1194,19 @@ local pinnacle_v1_Backend = {
---@class pinnacle.window.v1.MoveGrabRequest
---@field button integer?

---@class pinnacle.window.v1.TouchMoveGrabRequest
---@field finger_id integer?

---@class pinnacle.window.v1.TouchMoveGrabResponse

---@class pinnacle.window.v1.ResizeGrabRequest
---@field button integer?

---@class pinnacle.window.v1.TouchResizeGrabRequest
---@field finger_id integer?

---@class pinnacle.window.v1.TouchResizeGrabResponse

---@class pinnacle.window.v1.SwapRequest
---@field window_id integer?
---@field target_id integer?
Expand Down Expand Up @@ -1572,7 +1582,11 @@ pinnacle.window.v1.RaiseRequest = {}
pinnacle.window.v1.LowerRequest = {}
pinnacle.window.v1.LowerResponse = {}
pinnacle.window.v1.MoveGrabRequest = {}
pinnacle.window.v1.TouchMoveGrabRequest = {}
pinnacle.window.v1.TouchMoveGrabResponse = {}
pinnacle.window.v1.ResizeGrabRequest = {}
pinnacle.window.v1.TouchResizeGrabRequest = {}
pinnacle.window.v1.TouchResizeGrabResponse = {}
pinnacle.window.v1.SwapRequest = {}
pinnacle.window.v1.SwapResponse = {}
pinnacle.window.v1.WindowRuleRequest = {}
Expand Down Expand Up @@ -3031,6 +3045,40 @@ pinnacle.window.v1.WindowService.ResizeGrab.response = ".google.protobuf.Empty"
function Client:pinnacle_window_v1_WindowService_ResizeGrab(data)
return self:unary_request(pinnacle.window.v1.WindowService.ResizeGrab, data)
end
pinnacle.window.v1.WindowService.TouchMoveGrab = {}
pinnacle.window.v1.WindowService.TouchMoveGrab.service = "pinnacle.window.v1.WindowService"
pinnacle.window.v1.WindowService.TouchMoveGrab.method = "TouchMoveGrab"
pinnacle.window.v1.WindowService.TouchMoveGrab.request = ".pinnacle.window.v1.TouchMoveGrabRequest"
pinnacle.window.v1.WindowService.TouchMoveGrab.response = ".pinnacle.window.v1.TouchMoveGrabResponse"

---Performs a unary request.
---
---@nodiscard
---
---@param data pinnacle.window.v1.TouchMoveGrabRequest
---
---@return pinnacle.window.v1.TouchMoveGrabResponse | nil response
---@return string | nil error An error string, if any
function Client:pinnacle_window_v1_WindowService_TouchMoveGrab(data)
return self:unary_request(pinnacle.window.v1.WindowService.TouchMoveGrab, data)
end
pinnacle.window.v1.WindowService.TouchResizeGrab = {}
pinnacle.window.v1.WindowService.TouchResizeGrab.service = "pinnacle.window.v1.WindowService"
pinnacle.window.v1.WindowService.TouchResizeGrab.method = "TouchResizeGrab"
pinnacle.window.v1.WindowService.TouchResizeGrab.request = ".pinnacle.window.v1.TouchResizeGrabRequest"
pinnacle.window.v1.WindowService.TouchResizeGrab.response = ".pinnacle.window.v1.TouchResizeGrabResponse"

---Performs a unary request.
---
---@nodiscard
---
---@param data pinnacle.window.v1.TouchResizeGrabRequest
---
---@return pinnacle.window.v1.TouchResizeGrabResponse | nil response
---@return string | nil error An error string, if any
function Client:pinnacle_window_v1_WindowService_TouchResizeGrab(data)
return self:unary_request(pinnacle.window.v1.WindowService.TouchResizeGrab, data)
end
pinnacle.window.v1.WindowService.Swap = {}
pinnacle.window.v1.WindowService.Swap.service = "pinnacle.window.v1.WindowService"
pinnacle.window.v1.WindowService.Swap.method = "Swap"
Expand Down
20 changes: 20 additions & 0 deletions api/lua/pinnacle/window.lua
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,26 @@ function window.begin_resize(button)
end
end

---Begins moving this window using the specified touch slot.
---@param finger_id integer
function window.begin_touch_move(finger_id)
local _, err = client:pinnacle_window_v1_WindowService_TouchMoveGrab({ finger_id = finger_id })

if err then
log.error(err)
end
end

---Begins moving this window using the specified touch slot.
---@param finger_id integer
function window.begin_touch_resize(finger_id)
local _, err = client:pinnacle_window_v1_WindowService_TouchResizeGrab({ finger_id = finger_id })

if err then
log.error(err)
end
end

---A window's current layout mode.
---@alias pinnacle.window.LayoutMode
---| "tiled" The window is tiled.
Expand Down
12 changes: 12 additions & 0 deletions api/protobuf/pinnacle/window/v1/window.proto
Original file line number Diff line number Diff line change
Expand Up @@ -183,10 +183,20 @@ message MoveGrabRequest {
uint32 button = 1;
}

message TouchMoveGrabRequest {
uint32 finger_id = 1;
}
message TouchMoveGrabResponse {}

message ResizeGrabRequest {
uint32 button = 1;
}

message TouchResizeGrabRequest {
uint32 finger_id = 1;
}
message TouchResizeGrabResponse {}

message SwapRequest {
uint32 window_id = 1;
uint32 target_id = 2;
Expand Down Expand Up @@ -244,6 +254,8 @@ service WindowService {
rpc Lower(LowerRequest) returns (LowerResponse);
rpc MoveGrab(MoveGrabRequest) returns (google.protobuf.Empty);
rpc ResizeGrab(ResizeGrabRequest) returns (google.protobuf.Empty);
rpc TouchMoveGrab(TouchMoveGrabRequest) returns (TouchMoveGrabResponse);
rpc TouchResizeGrab(TouchResizeGrabRequest) returns (TouchResizeGrabResponse);
rpc Swap(SwapRequest) returns (SwapResponse);

rpc WindowRule(stream WindowRuleRequest) returns (stream WindowRuleResponse);
Expand Down
26 changes: 25 additions & 1 deletion api/rust/src/window.rs
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ use pinnacle_api_defs::pinnacle::{
MoveToTagRequest, RaiseRequest, ResizeGrabRequest, ResizeTileRequest,
SetDecorationModeRequest, SetFloatingRequest, SetFocusedRequest, SetFullscreenRequest,
SetGeometryRequest, SetMaximizedRequest, SetTagRequest, SetTagsRequest,
SetVrrDemandRequest, SwapRequest,
SetVrrDemandRequest, SwapRequest, TouchMoveGrabRequest, TouchResizeGrabRequest,
},
},
};
Expand Down Expand Up @@ -142,6 +142,30 @@ pub fn begin_resize(button: MouseButton) {
.unwrap();
}

/// Begins a touch-driven interactive window move.
///
/// This will start moving the window under the given finger until it's lifted.
///
/// `finger_id` should correspond to the finger that triggered this function to be called.
pub fn begin_touch_move(finger_id: u32) {
Client::window()
.touch_move_grab(TouchMoveGrabRequest { finger_id })
.block_on_tokio()
.unwrap();
}

/// Begins a touch-driven interactive window resize.
///
/// This will start resizing the window under the given finger until it's lifted.
///
/// `finger_id` should correspond to the finger that triggered this function to be called.
pub fn begin_touch_resize(finger_id: u32) {
Client::window()
.touch_resize_grab(TouchResizeGrabRequest { finger_id })
.block_on_tokio()
.unwrap();
}

/// Connects to a [`WindowSignal`].
///
/// # Examples
Expand Down
41 changes: 41 additions & 0 deletions snowcap/api/lua/snowcap/grpc/defs.lua
Original file line number Diff line number Diff line change
Expand Up @@ -825,6 +825,7 @@ local snowcap_popup_v1_PopupEvent_Focus = {
---@field input_region snowcap.widget.v1.InputRegion?
---@field mouse_area snowcap.widget.v1.MouseArea?
---@field text_input snowcap.widget.v1.TextInput?
---@field touch_area snowcap.widget.v1.TouchArea?

---@class snowcap.widget.v1.Text
---@field text string?
Expand Down Expand Up @@ -1045,6 +1046,39 @@ local snowcap_popup_v1_PopupEvent_Focus = {
---@field submit google.protobuf.Empty?
---@field paste string?

---@class snowcap.widget.v1.TouchArea
---@field child snowcap.widget.v1.WidgetDef?
---@field widget_id integer?
---@field on_down boolean?
---@field on_up boolean?
---@field on_enter boolean?
---@field on_move boolean?
---@field on_exit boolean?
---@field on_cancel boolean?

---@class snowcap.widget.v1.TouchArea.Event
---@field down snowcap.widget.v1.TouchArea.DownEvent?
---@field up snowcap.widget.v1.TouchArea.Finger?
---@field enter snowcap.widget.v1.TouchArea.Finger?
---@field move snowcap.widget.v1.TouchArea.MoveEvent?
---@field exit snowcap.widget.v1.TouchArea.Finger?
---@field cancel snowcap.widget.v1.TouchArea.Finger?

---@class snowcap.widget.v1.TouchArea.Finger
---@field id integer?

---@class snowcap.widget.v1.TouchArea.Point
---@field x number?
---@field y number?

---@class snowcap.widget.v1.TouchArea.DownEvent
---@field finger snowcap.widget.v1.TouchArea.Finger?
---@field point snowcap.widget.v1.TouchArea.Point?

---@class snowcap.widget.v1.TouchArea.MoveEvent
---@field finger snowcap.widget.v1.TouchArea.Finger?
---@field point snowcap.widget.v1.TouchArea.Point?

---@class snowcap.widget.v1.GetWidgetEventsRequest
---@field layer_id integer?
---@field decoration_id integer?
Expand All @@ -1055,6 +1089,7 @@ local snowcap_popup_v1_PopupEvent_Focus = {
---@field button snowcap.widget.v1.Button.Event?
---@field mouse_area snowcap.widget.v1.MouseArea.Event?
---@field text_input snowcap.widget.v1.TextInput.Event?
---@field touch_area snowcap.widget.v1.TouchArea.Event?

---@class snowcap.widget.v1.GetWidgetEventsResponse
---@field widget_events snowcap.widget.v1.WidgetEvent[]?
Expand Down Expand Up @@ -1469,6 +1504,12 @@ snowcap.widget.v1.TextInput.Icon = {}
snowcap.widget.v1.TextInput.Style = {}
snowcap.widget.v1.TextInput.Style.Inner = {}
snowcap.widget.v1.TextInput.Event = {}
snowcap.widget.v1.TouchArea = {}
snowcap.widget.v1.TouchArea.Event = {}
snowcap.widget.v1.TouchArea.Finger = {}
snowcap.widget.v1.TouchArea.Point = {}
snowcap.widget.v1.TouchArea.DownEvent = {}
snowcap.widget.v1.TouchArea.MoveEvent = {}
snowcap.widget.v1.GetWidgetEventsRequest = {}
snowcap.widget.v1.WidgetEvent = {}
snowcap.widget.v1.GetWidgetEventsResponse = {}
Expand Down
Loading
Loading