diff options
Diffstat (limited to 'mate-panel/wayland-backend.c')
-rw-r--r-- | mate-panel/wayland-backend.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/mate-panel/wayland-backend.c b/mate-panel/wayland-backend.c new file mode 100644 index 00000000..0d797f33 --- /dev/null +++ b/mate-panel/wayland-backend.c @@ -0,0 +1,57 @@ +#include <config.h> + +#include <gtk-layer-shell/gtk-layer-shell.h> + +#include "wayland-backend.h" + +void +wayland_panel_toplevel_init (PanelToplevel* toplevel) +{ + GtkWindow* window; + + window = GTK_WINDOW (toplevel); + gtk_layer_init_for_window (window); + gtk_layer_set_layer (window, GTK_LAYER_SHELL_LAYER_TOP); + gtk_layer_set_namespace (window, "panel"); + gtk_layer_auto_exclusive_zone_enable (window); + wayland_panel_toplevel_update_placement (toplevel); +} + +void +wayland_panel_toplevel_update_placement (PanelToplevel* toplevel) +{ + GtkWindow* window; + gboolean expand; + PanelOrientation orientation; + gboolean anchor[GTK_LAYER_SHELL_EDGE_ENTRY_NUMBER]; + + window = GTK_WINDOW (toplevel); + expand = panel_toplevel_get_expand (toplevel); + orientation = panel_toplevel_get_orientation (toplevel); + for (int i = 0; i < GTK_LAYER_SHELL_EDGE_ENTRY_NUMBER; i++) + anchor[i] = expand; + + switch (orientation) { + case PANEL_ORIENTATION_LEFT: + anchor[GTK_LAYER_SHELL_EDGE_LEFT] = TRUE; + anchor[GTK_LAYER_SHELL_EDGE_RIGHT] = FALSE; + break; + case PANEL_ORIENTATION_RIGHT: + anchor[GTK_LAYER_SHELL_EDGE_RIGHT] = TRUE; + anchor[GTK_LAYER_SHELL_EDGE_LEFT] = FALSE; + break; + case PANEL_ORIENTATION_TOP: + anchor[GTK_LAYER_SHELL_EDGE_TOP] = TRUE; + anchor[GTK_LAYER_SHELL_EDGE_BOTTOM] = FALSE; + break; + case PANEL_ORIENTATION_BOTTOM: + anchor[GTK_LAYER_SHELL_EDGE_BOTTOM] = TRUE; + anchor[GTK_LAYER_SHELL_EDGE_TOP] = FALSE; + break; + default: + g_warning ("Invalid panel orientation %d", orientation); + } + + for (int i = 0; i < GTK_LAYER_SHELL_EDGE_ENTRY_NUMBER; i++) + gtk_layer_set_anchor (window, i, anchor[i]); +} |