summaryrefslogtreecommitdiff
path: root/shell/gtk-shell.c
diff options
context:
space:
mode:
authorJonny Lamb <jonny.lamb@collabora.co.uk>2014-03-04 20:32:08 +0100
committerJonny Lamb <jonny.lamb@collabora.co.uk>2014-03-04 20:35:34 +0100
commit9a981d028404f8d776f1c95287e5ac393ad6f4d7 (patch)
tree904223d5aa5f98caafd4736cc36af92ae9d71572 /shell/gtk-shell.c
parent816ffed24b033da36923e9e387d540e5e876a578 (diff)
downloadgraynard-9a981d028404f8d776f1c95287e5ac393ad6f4d7.tar.gz
graynard-9a981d028404f8d776f1c95287e5ac393ad6f4d7.zip
shell: don't hide the panel if the app launcher is showing
Diffstat (limited to 'shell/gtk-shell.c')
-rw-r--r--shell/gtk-shell.c35
1 files changed, 35 insertions, 0 deletions
diff --git a/shell/gtk-shell.c b/shell/gtk-shell.c
index 83c4b4a..cb6d893 100644
--- a/shell/gtk-shell.c
+++ b/shell/gtk-shell.c
@@ -42,6 +42,8 @@ struct desktop {
guint initial_panel_timeout_id;
guint hide_panel_idle_id;
+
+ gboolean grid_visible;
};
static gboolean panel_window_enter_cb (GtkWidget *widget,
@@ -67,6 +69,11 @@ connect_enter_leave_signals (gpointer data)
g_signal_connect (desktop->clock->window, "leave-notify-event",
G_CALLBACK (panel_window_leave_cb), desktop);
+ g_signal_connect (desktop->launcher_grid->window, "enter-notify-event",
+ G_CALLBACK (panel_window_enter_cb), desktop);
+ g_signal_connect (desktop->launcher_grid->window, "leave-notify-event",
+ G_CALLBACK (panel_window_leave_cb), desktop);
+
return FALSE;
}
@@ -141,6 +148,26 @@ static const struct desktop_shell_listener listener = {
};
static void
+launcher_grid_toggle (GtkWidget *widget, struct desktop *desktop)
+{
+ if (desktop->grid_visible) {
+ shell_helper_slide_surface_back(desktop->helper,
+ desktop->launcher_grid->surface);
+ } else {
+ int width;
+
+ gtk_widget_get_size_request (desktop->launcher_grid->window,
+ &width, NULL);
+
+ shell_helper_slide_surface(desktop->helper,
+ desktop->launcher_grid->surface,
+ width + WESTON_GTK_PANEL_WIDTH, 0);
+ }
+
+ desktop->grid_visible = !desktop->grid_visible;
+}
+
+static void
launcher_grid_create (struct desktop *desktop)
{
struct element *launcher_grid;
@@ -153,6 +180,9 @@ launcher_grid_create (struct desktop *desktop)
gdk_window = gtk_widget_get_window(launcher_grid->window);
launcher_grid->surface = gdk_wayland_window_get_wl_surface(gdk_window);
+ g_signal_connect(launcher_grid->window, "app-launched",
+ G_CALLBACK(launcher_grid_toggle), desktop);
+
gtk_widget_show_all(launcher_grid->window);
desktop->launcher_grid = launcher_grid;
@@ -241,6 +271,9 @@ panel_window_leave_cb (GtkWidget *widget,
if (desktop->hide_panel_idle_id > 0)
return;
+ if (desktop->grid_visible)
+ return;
+
desktop->hide_panel_idle_id = g_idle_add (leave_panel_idle_cb, desktop);
return FALSE;
@@ -436,6 +469,8 @@ main(int argc, char *argv[])
while (!desktop->output || !desktop->shell || !desktop->helper)
wl_display_roundtrip (desktop->display);
+ desktop->grid_visible = FALSE;
+
css_setup(desktop);
panel_create(desktop);
clock_create(desktop);