diff options
Diffstat (limited to 'shell/maynard.c')
| -rw-r--r-- | shell/maynard.c | 321 |
1 files changed, 4 insertions, 317 deletions
diff --git a/shell/maynard.c b/shell/maynard.c index 85da0fc..1939e34 100644 --- a/shell/maynard.c +++ b/shell/maynard.c @@ -34,15 +34,12 @@ #include "maynard-resources.h" #include "app-icon.h" -#include "clock.h" #include "favorites.h" -#include "launcher.h" #include "panel.h" -#include "vertical-clock.h" extern char **environ; /* defined by libc */ -#define DEFAULT_BACKGROUND "/usr/share/wallpapers/Hanami/contents/images/3872x2592.jpg" +#define DEFAULT_BACKGROUND "/usr/share/wallpapers/Golden_Ripples/contents/images/1920x1200.jpg" struct element { GtkWidget *window; @@ -61,46 +58,8 @@ struct desktop { struct element *background; struct element *panel; - struct element *launcher_grid; - struct element *clock; - - guint initial_panel_timeout_id; - guint hide_panel_idle_id; - - gboolean grid_visible; - gboolean system_visible; - gboolean volume_visible; }; -static gboolean panel_window_enter_cb (GtkWidget *widget, - GdkEventCrossing *event, struct desktop *desktop); -static gboolean panel_window_leave_cb (GtkWidget *widget, - GdkEventCrossing *event, struct desktop *desktop); - -static gboolean -connect_enter_leave_signals (gpointer data) -{ - struct desktop *desktop = data; - GList *l; - - g_signal_connect (desktop->panel->window, "enter-notify-event", - G_CALLBACK (panel_window_enter_cb), desktop); - g_signal_connect (desktop->panel->window, "leave-notify-event", - G_CALLBACK (panel_window_leave_cb), desktop); - - g_signal_connect (desktop->clock->window, "enter-notify-event", - G_CALLBACK (panel_window_enter_cb), desktop); - 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 G_SOURCE_REMOVE; -} - static void desktop_shell_configure (void *data, struct desktop_shell *desktop_shell, @@ -109,42 +68,14 @@ desktop_shell_configure (void *data, int32_t width, int32_t height) { struct desktop *desktop = data; - int window_height; - int grid_width, grid_height; gtk_widget_set_size_request (desktop->background->window, width, height); - /* TODO: make this height a little nicer */ - window_height = height * MAYNARD_PANEL_HEIGHT_RATIO; gtk_window_resize (GTK_WINDOW (desktop->panel->window), - MAYNARD_PANEL_WIDTH, window_height); - - maynard_launcher_calculate (MAYNARD_LAUNCHER (desktop->launcher_grid->window), - &grid_width, &grid_height, NULL); - gtk_widget_set_size_request (desktop->launcher_grid->window, - grid_width, grid_height); - - shell_helper_move_surface (desktop->helper, desktop->panel->surface, - 0, (height - window_height) / 2); - - gtk_window_resize (GTK_WINDOW (desktop->clock->window), - MAYNARD_CLOCK_WIDTH, MAYNARD_CLOCK_HEIGHT); - - shell_helper_move_surface (desktop->helper, desktop->clock->surface, - MAYNARD_PANEL_WIDTH, (height - window_height) / 2); - - shell_helper_move_surface (desktop->helper, - desktop->launcher_grid->surface, - - grid_width, - ((height - window_height) / 2) + MAYNARD_CLOCK_HEIGHT); + width, MAYNARD_PANEL_HEIGHT); desktop_shell_desktop_ready (desktop->shell); - - /* TODO: why does the panel signal leave on drawing for - * startup? we don't want to have to have this silly - * timeout. */ - g_timeout_add_seconds (1, connect_enter_leave_signals, desktop); } static void @@ -168,238 +99,9 @@ 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 + MAYNARD_PANEL_WIDTH, 0); - } - - desktop->grid_visible = !desktop->grid_visible; -} - -static void -launcher_grid_create (struct desktop *desktop) -{ - struct element *launcher_grid; - GdkWindow *gdk_window; - - launcher_grid = malloc (sizeof *launcher_grid); - memset (launcher_grid, 0, sizeof *launcher_grid); - - launcher_grid->window = maynard_launcher_new (desktop->background->window); - gdk_window = gtk_widget_get_window (launcher_grid->window); - launcher_grid->surface = gdk_wayland_window_get_wl_surface (gdk_window); - - gdk_wayland_window_set_use_custom_surface (gdk_window); - shell_helper_add_surface_to_layer (desktop->helper, - launcher_grid->surface, - desktop->panel->surface); - - 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; -} - -static void -volume_changed_cb (MaynardClock *clock, - gdouble value, - const gchar *icon_name, - struct desktop *desktop) -{ - maynard_panel_set_volume_icon_name ( - MAYNARD_PANEL (desktop->panel->window), icon_name); -} - -static GtkWidget * -clock_create (struct desktop *desktop) -{ - struct element *clock; - GdkWindow *gdk_window; - - clock = malloc (sizeof *clock); - memset (clock, 0, sizeof *clock); - - clock->window = maynard_clock_new (); - - g_signal_connect (clock->window, "volume-changed", - G_CALLBACK (volume_changed_cb), desktop); - - gdk_window = gtk_widget_get_window (clock->window); - clock->surface = gdk_wayland_window_get_wl_surface (gdk_window); - - gdk_wayland_window_set_use_custom_surface (gdk_window); - shell_helper_add_surface_to_layer (desktop->helper, clock->surface, - desktop->panel->surface); - - gtk_widget_show_all (clock->window); - - desktop->clock = clock; -} - -static void -button_toggled_cb (struct desktop *desktop, - gboolean *visible, - gboolean *not_visible) -{ - *visible = !*visible; - *not_visible = FALSE; - - if (desktop->system_visible) - { - maynard_clock_show_section (MAYNARD_CLOCK (desktop->clock->window), - MAYNARD_CLOCK_SECTION_SYSTEM); - maynard_panel_show_previous (MAYNARD_PANEL (desktop->panel->window), - MAYNARD_PANEL_BUTTON_SYSTEM); - } - else if (desktop->volume_visible) - { - maynard_clock_show_section (MAYNARD_CLOCK (desktop->clock->window), - MAYNARD_CLOCK_SECTION_VOLUME); - maynard_panel_show_previous (MAYNARD_PANEL (desktop->panel->window), - MAYNARD_PANEL_BUTTON_VOLUME); - } - else - { - maynard_clock_show_section (MAYNARD_CLOCK (desktop->clock->window), - MAYNARD_CLOCK_SECTION_CLOCK); - maynard_panel_show_previous (MAYNARD_PANEL (desktop->panel->window), - MAYNARD_PANEL_BUTTON_NONE); - } -} - -static void -system_toggled_cb (GtkWidget *widget, - struct desktop *desktop) -{ - button_toggled_cb (desktop, - &desktop->system_visible, - &desktop->volume_visible); -} - -static void -volume_toggled_cb (GtkWidget *widget, - struct desktop *desktop) -{ - button_toggled_cb (desktop, - &desktop->volume_visible, - &desktop->system_visible); -} - -static gboolean -panel_window_enter_cb (GtkWidget *widget, - GdkEventCrossing *event, - struct desktop *desktop) -{ - if (desktop->initial_panel_timeout_id > 0) - { - g_source_remove (desktop->initial_panel_timeout_id); - desktop->initial_panel_timeout_id = 0; - } - - if (desktop->hide_panel_idle_id > 0) - { - g_source_remove (desktop->hide_panel_idle_id); - desktop->hide_panel_idle_id = 0; - return; - } - - shell_helper_slide_surface_back (desktop->helper, - desktop->panel->surface); - shell_helper_slide_surface_back (desktop->helper, - desktop->clock->surface); - - maynard_panel_set_expand (MAYNARD_PANEL (desktop->panel->window), TRUE); - - return FALSE; -} - -static gboolean -leave_panel_idle_cb (gpointer data) -{ - struct desktop *desktop = data; - gint width; - - desktop->hide_panel_idle_id = 0; - - gtk_window_get_size (GTK_WINDOW (desktop->clock->window), - &width, NULL); - - shell_helper_slide_surface (desktop->helper, - desktop->panel->surface, - MAYNARD_VERTICAL_CLOCK_WIDTH - MAYNARD_PANEL_WIDTH, 0); - shell_helper_slide_surface (desktop->helper, - desktop->clock->surface, - MAYNARD_VERTICAL_CLOCK_WIDTH - MAYNARD_PANEL_WIDTH - width, 0); - - maynard_panel_set_expand (MAYNARD_PANEL (desktop->panel->window), FALSE); - - maynard_clock_show_section (MAYNARD_CLOCK (desktop->clock->window), - MAYNARD_CLOCK_SECTION_CLOCK); - maynard_panel_show_previous (MAYNARD_PANEL (desktop->panel->window), - MAYNARD_PANEL_BUTTON_NONE); - desktop->system_visible = FALSE; - desktop->volume_visible = FALSE; - - return G_SOURCE_REMOVE; -} - -static gboolean -panel_window_leave_cb (GtkWidget *widget, - GdkEventCrossing *event, - struct desktop *desktop) -{ - if (desktop->initial_panel_timeout_id > 0) - { - g_source_remove (desktop->initial_panel_timeout_id); - desktop->initial_panel_timeout_id = 0; - } - - 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; -} - -static gboolean -panel_hide_timeout_cb (gpointer data) -{ - struct desktop *desktop = data; - - panel_window_leave_cb (NULL, NULL, desktop); - - return G_SOURCE_REMOVE; -} - -static void favorite_launched_cb (MaynardPanel *panel, struct desktop *desktop) { - if (desktop->grid_visible) - launcher_grid_toggle (desktop->launcher_grid->window, desktop); - - panel_window_leave_cb (NULL, NULL, desktop); } static void @@ -413,18 +115,9 @@ panel_create (struct desktop *desktop) panel->window = maynard_panel_new (); - g_signal_connect (panel->window, "app-menu-toggled", - G_CALLBACK (launcher_grid_toggle), desktop); - g_signal_connect (panel->window, "system-toggled", - G_CALLBACK (system_toggled_cb), desktop); - g_signal_connect (panel->window, "volume-toggled", - G_CALLBACK (volume_toggled_cb), desktop); g_signal_connect (panel->window, "favorite-launched", G_CALLBACK (favorite_launched_cb), desktop); - desktop->initial_panel_timeout_id = - g_timeout_add_seconds (2, panel_hide_timeout_cb, desktop); - /* set it up as the panel */ gdk_window = gtk_widget_get_window (panel->window); gdk_wayland_window_set_use_custom_surface (gdk_window); @@ -433,7 +126,7 @@ panel_create (struct desktop *desktop) desktop_shell_set_user_data (desktop->shell, desktop); desktop_shell_set_panel (desktop->shell, desktop->output, panel->surface); desktop_shell_set_panel_position (desktop->shell, - DESKTOP_SHELL_PANEL_POSITION_LEFT); + DESKTOP_SHELL_PANEL_POSITION_TOP); shell_helper_set_panel (desktop->helper, panel->surface); gtk_widget_show_all (panel->window); @@ -646,18 +339,12 @@ main (int argc, return -1; } - desktop->grid_visible = FALSE; - desktop->system_visible = FALSE; - desktop->volume_visible = FALSE; - css_setup (desktop); background_create (desktop); - /* panel needs to be first so the clock and launcher grid can + /* panel needs to be first so everything else can * be added to its layer */ panel_create (desktop); - clock_create (desktop); - launcher_grid_create (desktop); gtk_main (); |
