From bcee9a4b257ce971c31a08620b8838fff52dda42 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Kristian=20H=C3=B8gsberg?= Date: Wed, 12 Oct 2011 00:36:16 -0400 Subject: [PATCH] desktop-shell: Add beginning of pop-up menu to panel --- clients/desktop-shell.c | 21 +++++++++++++++++++++ clients/window.c | 6 ++++++ clients/window.h | 2 ++ 3 files changed, 29 insertions(+) diff --git a/clients/desktop-shell.c b/clients/desktop-shell.c index 496d0d1..7ad6f02 100644 --- a/clients/desktop-shell.c +++ b/clients/desktop-shell.c @@ -46,6 +46,7 @@ struct desktop { struct panel { struct window *window; + struct window *menu; }; struct panel_item { @@ -67,6 +68,21 @@ sigchild_handler(int s) } static void +show_menu(struct panel *panel, struct input *input) +{ + int32_t x, y, width = 200, height = 200; + struct display *display; + + input_get_position(input, &x, &y); + display = window_get_display(panel->window); + panel->menu = window_create_transient(display, panel->window, + x - 10, y - 10, width, height); + + window_draw(panel->menu); + window_flush(panel->menu); +} + +static void panel_activate_item(struct panel *panel, struct panel_item *item) { pid_t pid; @@ -164,6 +180,11 @@ panel_button_handler(struct window *window, window_schedule_redraw(panel->window); if (state == 0) panel_activate_item(panel, pi); + } else if (button == BTN_RIGHT) { + if (state) + show_menu(panel, input); + else + window_destroy(panel->menu); } } diff --git a/clients/window.c b/clients/window.c index 3bb4cb7..57e27b8 100644 --- a/clients/window.c +++ b/clients/window.c @@ -862,6 +862,12 @@ window_resize_cairo_window_surface(struct window *window) } #endif +struct display * +window_get_display(struct window *window) +{ + return window->display; +} + void window_create_surface(struct window *window) { diff --git a/clients/window.h b/clients/window.h index 6a4ce9f..290c6b9 100644 --- a/clients/window.h +++ b/clients/window.h @@ -179,6 +179,8 @@ window_for_each_item(struct window *window, item_func_t func, void *data); struct item * window_get_focus_item(struct window *window); +struct display * +window_get_display(struct window *window); void window_move(struct window *window, struct input *input, uint32_t time); -- 2.7.4