From: Ning Tang <[email protected]>

Add a structure of layout which is between homescreen and launchers.
The configuration of layout is also included.

Signed-off-by: Li Chen          <[email protected]>
Signed-off-by: Yi Yuan          <[email protected]>
Signed-off-by: Ning Tang        <[email protected]>

---
 clients/tablet-shell.c | 67 ++++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 65 insertions(+), 2 deletions(-)

diff --git a/clients/tablet-shell.c b/clients/tablet-shell.c
index 0a66950..f6e3bd2 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,8 +55,27 @@ 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 offset;
+       int last_x;
+       int hmargin;
+       int vmargin;
+       uint32_t click_time;            /* ms */
+       int switching;                  /* 0-no 1-right -1-left*/
+       int s_speed;                    /* switching speed */
+       struct wl_list *layout_list;    /* we need know the number of list */
+};
+
 struct launcher {
        struct widget *widget;
+       struct layout *layout;
        struct homescreen *homescreen;
        cairo_surface_t *icon;
        int focused, pressed;
@@ -69,6 +89,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 +107,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 +264,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;
 }
 
@@ -389,6 +414,36 @@ launcher_redraw_handler(struct widget *widget, void *data)
 }
 
 static void
+tablet_shell_add_layout(struct tablet *tablet)
+{
+       fprintf(stderr, "add layout\n");
+       struct layout *layout;
+       struct homescreen *homescreen = tablet->homescreen;
+       struct rectangle allocation;
+       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;
+       layout->switching = 0;
+       layout->s_speed = 20;
+       if (wl_list_empty(&homescreen->layout_list))
+               layout->showing = 1;
+       else
+               layout->showing = 0;
+       layout->offset = 0;
+
+       /* 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 +493,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)
 {
@@ -472,7 +535,7 @@ int main(int argc, char *argv[])
        tablet.homescreen = homescreen_create(&tablet);
        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");
        parse_config_file(config_file,
-- 
1.7.11.1

_______________________________________________
wayland-devel mailing list
[email protected]
http://lists.freedesktop.org/mailman/listinfo/wayland-devel

Reply via email to