diff --git a/compositor/meego-tablet-shell.c b/compositor/meego-tablet-shell.c index db96eaf3..5a2d0db1 100644 --- a/compositor/meego-tablet-shell.c +++ b/compositor/meego-tablet-shell.c @@ -203,6 +203,9 @@ meego_tablet_shell_attach(struct wlsc_shell *base, struct meego_tablet_shell *shell = container_of(base, struct meego_tablet_shell, shell); + surface->x = 0; + surface->y = 0; + if (surface == shell->lockscreen_surface) { if (shell->state == STATE_STARTING) { wlsc_compositor_fade(shell->compositor, 0.0); @@ -215,14 +218,13 @@ meego_tablet_shell_attach(struct wlsc_shell *base, /* */ } else if (surface == shell->home_surface) { /* */ - } else if (shell->current_client->surface != surface && + } else if (shell->current_client && + shell->current_client->surface != surface && shell->current_client->client == surface->surface.client) { fprintf(stderr, "initial attach from surface %p, client %p\n", surface, surface->surface.client); meego_tablet_shell_set_state(shell, STATE_TASK); shell->current_client->surface = surface; - surface->x = 0; - surface->y = 0; meego_tablet_zoom_run(shell, surface); } } @@ -316,12 +318,33 @@ tablet_shell_set_homescreen(struct wl_client *client, fprintf(stderr, "set home screen\n"); } +static void +meego_tablet_shell_switch_to(struct meego_tablet_shell *shell, + struct wlsc_surface *surface) +{ + struct wlsc_compositor *compositor = shell->compositor; + struct wlsc_input_device *device = + (struct wlsc_input_device *) compositor->input_device; + + wlsc_surface_activate(surface, device, wlsc_compositor_get_time()); + + if (shell->state == STATE_SWITCHER) { + wl_list_remove(&shell->switcher_listener.link); + shell->switcher_surface = NULL; + }; + + if (surface == shell->home_surface) + meego_tablet_shell_set_state(shell, STATE_HOME); + else + meego_tablet_shell_set_state(shell, STATE_TASK); +} + static void tablet_shell_show_grid(struct wl_client *client, struct meego_tablet_shell *shell, struct wl_surface *surface) { - fprintf(stderr, "tablet_shell_show_grid\n"); + meego_tablet_shell_switch_to(shell, (struct wlsc_surface *) surface); } static void @@ -329,7 +352,7 @@ tablet_shell_show_panels(struct wl_client *client, struct meego_tablet_shell *shell, struct wl_surface *surface) { - fprintf(stderr, "tablet_shell_show_panels\n"); + meego_tablet_shell_switch_to(shell, (struct wlsc_surface *) surface); } static void @@ -352,25 +375,13 @@ static void tablet_client_activate(struct wl_client *client, struct meego_tablet_client *tablet_client) { - struct wlsc_compositor *compositor = tablet_client->shell->compositor; struct meego_tablet_shell *shell = tablet_client->shell; - struct wlsc_input_device *device = - (struct wlsc_input_device *) compositor->input_device; - fprintf(stderr, "activate client %s\n", tablet_client->name); shell->current_client = tablet_client; if (!tablet_client->surface) return; - wlsc_surface_activate(tablet_client->surface, device, - wlsc_compositor_get_time()); - - if (shell->state == STATE_SWITCHER) { - wl_list_remove(&shell->switcher_listener.link); - shell->switcher_surface = NULL; - }; - - meego_tablet_shell_set_state(tablet_client->shell, STATE_TASK); + meego_tablet_shell_switch_to(shell, tablet_client->surface); } static const struct meego_tablet_client_interface tablet_client_interface = {