[PATCH 02/14] tablet-shell: add layout structure on homescreen.

Philipp Brüschweiler blei42 at gmail.com
Tue Aug 21 06:33:43 PDT 2012


On Tue, Aug 21, 2012 at 1:49 PM,  <tecton69 at gmail.com> wrote:
> From: Ning Tang <ning.tang at intel.com>
>
>  It is a base for further operations on layout. Launchers are put in a
>  certain layout.
>
>  Signed-off-by: Ning Tang <tecton69 at gmail.com>
>
> ---
>  clients/tablet-shell.c | 62 +++++++++++++++++++++++++++++++++++++++++++++++---
>  weston-tablet.ini      |  3 ++-
>  2 files changed, 61 insertions(+), 4 deletions(-)
>
> diff --git a/clients/tablet-shell.c b/clients/tablet-shell.c
> index 0a66950..c4ec5e7 100644
> --- a/clients/tablet-shell.c
> +++ b/clients/tablet-shell.c
> @@ -47,6 +47,7 @@ struct homescreen {
>         struct window *window;
>         struct widget *widget;
>         struct wl_list launcher_list;
> +       struct wl_list layout_list;
>  };
>
>  struct lockscreen {
> @@ -54,9 +55,24 @@ struct lockscreen {
>         struct widget *widget;
>  };
>
> +/* container of launchers on background */
> +struct layout {
> +       struct widget *widget;
> +       struct homescreen *homescreen;
> +       struct wl_list launcher_list;
> +       struct wl_list link;
> +       int pressed;
> +       int showing;
> +       int hmargin;
> +       int vmargin;
> +
> +       struct wl_list *layout_list;    /* we need know the number of list */

What do you mean by this comment? The number of layouts/the number of
elements in the list?

> +};
> +
>  struct launcher {
>         struct widget *widget;
>         struct homescreen *homescreen;
> +       struct layout *layout;
>         cairo_surface_t *icon;
>         int focused, pressed;
>         char *path;
> @@ -69,6 +85,7 @@ static char *key_homescreen_background;
>  static char *key_launcher_icon;
>  static char *key_launcher_path;
>  static void launcher_section_done(void *data);
> +static void layout_section_done(void *data);
>
>  static const struct config_key shell_config_keys[] = {
>         { "lockscreen-icon", CONFIG_KEY_STRING, &key_lockscreen_icon },
> @@ -86,7 +103,10 @@ static const struct config_section config_sections[] = {
>           shell_config_keys, ARRAY_LENGTH(shell_config_keys) },
>         { "launcher",
>           launcher_config_keys, ARRAY_LENGTH(launcher_config_keys),
> -         launcher_section_done }
> +         launcher_section_done },
> +       { "layout",
> +         NULL, 0,
> +         layout_section_done }
>  };
>
>  static void
> @@ -240,6 +260,7 @@ homescreen_create(struct tablet *tablet)
>         window_set_title(homescreen->window, "homescreen");
>         widget_set_redraw_handler(homescreen->widget, homescreen_draw);
>
> +       wl_list_init(&homescreen->layout_list);
>         return homescreen;
>  }
>
> @@ -354,7 +375,7 @@ launcher_button_handler(struct widget *widget,
>         if (state == WL_POINTER_BUTTON_STATE_RELEASED) {
>                 launcher_activate(launcher);
>                 launcher->pressed = 0;
> -       } else if (state == WL_POINTER_BUTTON_STATE_PRESSED)
> +       } else if (state == WL_POINTER_BUTTON_STATE_PRESSED)
>                 launcher->pressed = 1;
>  }
>
> @@ -389,6 +410,32 @@ launcher_redraw_handler(struct widget *widget, void *data)
>  }
>
>  static void
> +tablet_shell_add_layout(struct tablet *tablet)
> +{
> +       struct layout *layout;
> +       struct homescreen *homescreen = tablet->homescreen;
> +       struct rectangle allocation;
> +       char *index_image;
> +       widget_get_allocation(homescreen->widget, &allocation);
> +
> +       layout = malloc(sizeof *layout);
> +       memset(layout, 0, sizeof *layout);
> +       wl_list_init(&layout->launcher_list);
> +       layout->widget = widget_add_widget(homescreen->widget, layout);
> +       layout->homescreen = homescreen;
> +       layout->hmargin = 100;
> +       layout->vmargin = 50;
> +       if (wl_list_empty(&homescreen->layout_list)) {
> +               layout->showing = 1;
> +       }
> +
> +       /* let layout know number of layouts */
> +       layout->layout_list = &homescreen->layout_list;
> +
> +       wl_list_insert(homescreen->layout_list.prev, &layout->link);
> +}
> +
> +static void
>  tablet_shell_add_launcher(struct tablet *tablet,
>                           const char *icon, const char *path)
>  {
> @@ -438,6 +485,14 @@ launcher_section_done(void *data)
>  }
>
>  static void
> +layout_section_done(void *data)
> +{
> +       struct tablet *tablet = data;
> +
> +       tablet_shell_add_layout(tablet);
> +}
> +
> +static void
>  global_handler(struct wl_display *display, uint32_t id,
>                 const char *interface, uint32_t version, void *data)
>  {
> @@ -473,8 +528,9 @@ int main(int argc, char *argv[])
>         tablet_shell_set_homescreen(tablet.tablet_shell,
>                         window_get_wl_surface(tablet.homescreen->window));
>         wl_list_init(&tablet.homescreen->launcher_list);
> +       wl_list_init(&tablet.homescreen->layout_list);
>
> -       config_file = config_file_path("weston.ini");
> +       config_file = config_file_path("weston-tablet.ini");
>         parse_config_file(config_file,
>                           config_sections, ARRAY_LENGTH(config_sections),
>                           &tablet);
> diff --git a/weston-tablet.ini b/weston-tablet.ini
> index 9387bab..d38b87a 100644
> --- a/weston-tablet.ini
> +++ b/weston-tablet.ini
> @@ -5,6 +5,7 @@ lockscreen=/usr/share/backgrounds/gnome/Garden.jpg
>  homescreen=/usr/share/backgrounds/gnome/Aqua.jpg
>  animation=zoom
>
> +[layout]
>  [launcher]
>  icon=/usr/share/weston/org.tizen.browser.png
>  path=/home/wayland-packages/weston/clients/simple-egl
> @@ -18,7 +19,7 @@ path=/home/wayland-packages/weston/clients/flower
>  icon=/usr/share/weston/org.tizen.clock.png
>  path=/home/wayland-packages/weston/clients/dnd
>
> -
> +[layout]
>  #=======================================================================================
>  [launcher]
>  icon=/usr/share/weston/org.tizen.efl-calendar.png
> --
> 1.7.11.5
>
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel


More information about the wayland-devel mailing list