Merge branch 'sizes' into 'master'

Fix resizing

See merge request World/Phosh/squeekboard!580
This commit is contained in:
dcz
2022-11-30 13:10:01 +00:00
2 changed files with 39 additions and 11 deletions

View File

@ -55,6 +55,16 @@ make_widget (struct panel_manager *self)
} }
// Called also from rust
/// Updates the size
void
panel_manager_resize (struct panel_manager *self, uint32_t height)
{
phosh_layer_surface_set_size(self->window, 0, height);
phosh_layer_surface_set_exclusive_zone(self->window, height);
phosh_layer_surface_wl_surface_commit(self->window);
}
// Called from rust // Called from rust
/// Creates a new panel widget /// Creates a new panel widget
void void
@ -89,6 +99,8 @@ panel_manager_request_widget (struct panel_manager *self, struct wl_output *outp
gtk_window_set_title (GTK_WINDOW(self->window), "Squeekboard"); gtk_window_set_title (GTK_WINDOW(self->window), "Squeekboard");
gtk_window_set_icon_name (GTK_WINDOW(self->window), "squeekboard"); gtk_window_set_icon_name (GTK_WINDOW(self->window), "squeekboard");
gtk_window_set_keep_above (GTK_WINDOW(self->window), TRUE); gtk_window_set_keep_above (GTK_WINDOW(self->window), TRUE);
} else {
panel_manager_resize(self, height);
} }
if (!self->widget) { if (!self->widget) {
@ -98,17 +110,6 @@ panel_manager_request_widget (struct panel_manager *self, struct wl_output *outp
gtk_widget_show (GTK_WIDGET(self->window)); gtk_widget_show (GTK_WIDGET(self->window));
} }
// Called from rust
/// Updates the size
void
panel_manager_resize (struct panel_manager *self, uint32_t height)
{
phosh_layer_surface_set_size(self->window, 0, height);
phosh_layer_surface_set_exclusive_zone(self->window, height);
phosh_layer_surface_wl_surface_commit(self->window);
}
struct panel_manager panel_manager_new(EekboardContextService *state, struct submission *submission, struct squeek_state_manager *state_manager, struct squeek_popover *popover) struct panel_manager panel_manager_new(EekboardContextService *state, struct submission *submission, struct squeek_state_manager *state_manager, struct squeek_popover *popover)
{ {
struct panel_manager mgr = { struct panel_manager mgr = {

View File

@ -132,6 +132,10 @@ pub enum Command {
pub struct Manager { pub struct Manager {
panel: c::PanelManager, panel: c::PanelManager,
state: State, state: State,
// This should be part of State, if it ever actually gets unhardcoded.
// It's here because State doesn't need to become more complex
// until this becomes properly used.
debug: bool,
} }
impl Manager { impl Manager {
@ -139,11 +143,16 @@ impl Manager {
Self { Self {
panel, panel,
state: State::Hidden, state: State::Hidden,
debug: false,
} }
} }
// TODO: mabe send the allocated size back to state::State, // TODO: mabe send the allocated size back to state::State,
// to perform layout adjustments // to perform layout adjustments
fn set_configured(&mut self, size: Size) { fn set_configured(&mut self, size: Size) {
if self.debug {
eprintln!("Panel received configure {:?}", &size);
}
self.state = match self.state.clone() { self.state = match self.state.clone() {
State::Hidden => { State::Hidden => {
// This may happen if a hide is scheduled immediately after a show. // This may happen if a hide is scheduled immediately after a show.
@ -166,6 +175,10 @@ impl Manager {
allocated: size, allocated: size,
}, },
}; };
if self.debug {
eprintln!("Panel now {:?}", &self.state);
}
} }
pub fn update(mgr: Wrapped<Manager>, cmd: Command) { pub fn update(mgr: Wrapped<Manager>, cmd: Command) {
@ -174,6 +187,10 @@ impl Manager {
let mgr = mgr.clone_ref(); let mgr = mgr.clone_ref();
let mut mgr = mgr.borrow_mut(); let mut mgr = mgr.borrow_mut();
if mgr.debug {
eprintln!("Panel received {:?}", &cmd);
}
(*mgr).state = match (cmd, mgr.state.clone()) { (*mgr).state = match (cmd, mgr.state.clone()) {
(Command::Hide, State::Hidden) => State::Hidden, (Command::Hide, State::Hidden) => State::Hidden,
(Command::Hide, State::SizeAllocated{..}) => { (Command::Hide, State::SizeAllocated{..}) => {
@ -186,6 +203,9 @@ impl Manager {
}, },
(Command::Show{output, height}, State::Hidden) => { (Command::Show{output, height}, State::Hidden) => {
let height = height.as_scaled_ceiling(); let height = height.as_scaled_ceiling();
if mgr.debug {
eprintln!("Panel requests widget {:?}", (&output.0, &height));
}
unsafe { c::panel_manager_request_widget(mgr.panel, output.0, height, copied); } unsafe { c::panel_manager_request_widget(mgr.panel, output.0, height, copied); }
State::SizeRequested{output, height} State::SizeRequested{output, height}
}, },
@ -210,6 +230,9 @@ impl Manager {
// for the purpose of handling it better somehow. // for the purpose of handling it better somehow.
State::SizeRequested{output: req_output, height: req_height} State::SizeRequested{output: req_output, height: req_height}
} else { } else {
if mgr.debug {
eprintln!("Panel requests widget {:?}", (&output.0, &height));
}
// This looks weird, but should be safe. // This looks weird, but should be safe.
// The stack seems to handle // The stack seems to handle
// configure events on a dead surface. // configure events on a dead surface.
@ -242,6 +265,10 @@ impl Manager {
State::SizeRequested{output, height} State::SizeRequested{output, height}
} }
}, },
};
if mgr.debug {
eprintln!("Panel is now {:?}", &(*mgr).state);
} }
} }
} }