[PATCH v2] shell: show input panel on configure, if activated
Philipp Brüschweiler
blei42 at gmail.com
Fri Aug 10 01:46:56 PDT 2012
---
src/shell.c | 30 ++++++++++++++++++------------
1 Datei geändert, 18 Zeilen hinzugefügt(+), 12 Zeilen entfernt(-)
diff --git a/src/shell.c b/src/shell.c
index 9c8a8a9..5d4fb41 100644
--- a/src/shell.c
+++ b/src/shell.c
@@ -2520,13 +2520,22 @@ unlock(struct wl_listener *listener, void *data)
}
static void
+show_input_panel(struct desktop_shell *shell, struct weston_surface *surface)
+{
+ wl_list_insert(&shell->input_panel_layer.surface_list,
+ &surface->layer_link);
+ weston_surface_assign_output(surface);
+ weston_surface_damage(surface);
+ weston_slide_run(surface, surface->geometry.height, 0, NULL, NULL);
+}
+
+static void
show_input_panels(struct wl_listener *listener, void *data)
{
struct desktop_shell *shell =
container_of(listener, struct desktop_shell,
show_input_panel_listener);
struct input_panel_surface *surface, *next;
- struct weston_surface *ws;
shell->showing_input_panels = true;
@@ -2534,14 +2543,8 @@ show_input_panels(struct wl_listener *listener, void *data)
&shell->input_panel_layer.link);
wl_list_for_each_safe(surface, next,
- &shell->input_panel.surfaces, link) {
- ws = surface->surface;
- wl_list_insert(&shell->input_panel_layer.surface_list,
- &ws->layer_link);
- weston_surface_assign_output(ws);
- weston_surface_damage(ws);
- weston_slide_run(ws, ws->geometry.height, 0, NULL, NULL);
- }
+ &shell->input_panel.surfaces, link)
+ show_input_panel(shell, surface->surface);
}
static void
@@ -2905,17 +2908,20 @@ static void
input_panel_configure(struct weston_surface *surface, int32_t sx, int32_t sy)
{
struct weston_mode *mode = surface->output->current;
+ struct desktop_shell *shell = surface->private;
+
GLfloat x = (mode->width - surface->buffer->width) / 2;
GLfloat y = mode->height - surface->buffer->height;
- /* Don't map the input panel here, wait for
- * show_input_panels signal. */
-
weston_surface_configure(surface,
surface->output->x + x,
surface->output->y + y,
surface->buffer->width,
surface->buffer->height);
+
+ if (shell->showing_input_panels &&
+ (!surface->layer_link.next || wl_list_empty(&surface->layer_link)))
+ show_input_panel(shell, surface);
}
static void
--
1.7.11.4
More information about the wayland-devel
mailing list