mirror of
https://github.com/swaywm/sway.git
synced 2024-11-10 20:44:01 +01:00
583ceff6f6
This allows swaybar to become visible when the mode changes (to any mode other than the default). swaybar will be hidden again when the modifier is pressed and released or when switching back to the default mode. This also applies the same logic to visible by urgency to hide swaybar when the modifier is pressed and released. These changes are to match i3's behavior.
115 lines
2.8 KiB
C
115 lines
2.8 KiB
C
#ifndef _SWAYBAR_BAR_H
|
|
#define _SWAYBAR_BAR_H
|
|
#include <wayland-client.h>
|
|
#include "config.h"
|
|
#include "input.h"
|
|
#include "pool-buffer.h"
|
|
#include "wlr-layer-shell-unstable-v1-client-protocol.h"
|
|
#include "xdg-output-unstable-v1-client-protocol.h"
|
|
|
|
struct swaybar_config;
|
|
struct swaybar_output;
|
|
#if HAVE_TRAY
|
|
struct swaybar_tray;
|
|
#endif
|
|
struct swaybar_workspace;
|
|
struct loop;
|
|
|
|
struct swaybar {
|
|
char *id;
|
|
char *mode;
|
|
bool mode_pango_markup;
|
|
|
|
// only relevant when bar is in "hide" mode
|
|
bool visible_by_modifier;
|
|
bool visible_by_urgency;
|
|
bool visible_by_mode;
|
|
bool visible;
|
|
|
|
struct wl_display *display;
|
|
struct wl_compositor *compositor;
|
|
struct zwlr_layer_shell_v1 *layer_shell;
|
|
struct zxdg_output_manager_v1 *xdg_output_manager;
|
|
struct wl_shm *shm;
|
|
struct wl_seat *seat;
|
|
|
|
struct swaybar_config *config;
|
|
struct swaybar_pointer pointer;
|
|
struct swaybar_touch touch;
|
|
struct status_line *status;
|
|
|
|
struct loop *eventloop;
|
|
|
|
int ipc_event_socketfd;
|
|
int ipc_socketfd;
|
|
|
|
struct wl_list outputs; // swaybar_output::link
|
|
|
|
#if HAVE_TRAY
|
|
struct swaybar_tray *tray;
|
|
#endif
|
|
|
|
bool running;
|
|
};
|
|
|
|
struct swaybar_output {
|
|
struct wl_list link; // swaybar::outputs
|
|
struct swaybar *bar;
|
|
struct wl_output *output;
|
|
struct zxdg_output_v1 *xdg_output;
|
|
struct wl_surface *surface;
|
|
struct zwlr_layer_surface_v1 *layer_surface;
|
|
struct wl_region *input_region;
|
|
uint32_t wl_name;
|
|
|
|
struct wl_list workspaces; // swaybar_workspace::link
|
|
struct wl_list hotspots; // swaybar_hotspot::link
|
|
|
|
char *name;
|
|
char *identifier;
|
|
bool focused;
|
|
|
|
uint32_t width, height;
|
|
int32_t scale;
|
|
enum wl_output_subpixel subpixel;
|
|
struct pool_buffer buffers[2];
|
|
struct pool_buffer *current_buffer;
|
|
bool dirty;
|
|
bool frame_scheduled;
|
|
|
|
uint32_t output_height, output_width, output_x, output_y;
|
|
};
|
|
|
|
struct swaybar_workspace {
|
|
struct wl_list link; // swaybar_output::workspaces
|
|
int num;
|
|
char *name;
|
|
char *label;
|
|
bool focused;
|
|
bool visible;
|
|
bool urgent;
|
|
};
|
|
|
|
bool bar_setup(struct swaybar *bar, const char *socket_path);
|
|
void bar_run(struct swaybar *bar);
|
|
void bar_teardown(struct swaybar *bar);
|
|
|
|
void set_bar_dirty(struct swaybar *bar);
|
|
|
|
/*
|
|
* Determines whether the bar should be visible and changes it to be so.
|
|
* If the current visibility of the bar is the different to what it should be,
|
|
* then it adds or destroys the layer surface as required,
|
|
* as well as sending the cont or stop signal to the status command.
|
|
* If the current visibility of the bar is already what it should be,
|
|
* then this function is a no-op, unless moving_layer is true, which occurs
|
|
* when the bar changes from "hide" to "dock" mode or vice versa, and the bar
|
|
* needs to be destroyed and re-added in order to change its layer.
|
|
*
|
|
* Returns true if the bar is now visible, otherwise false.
|
|
*/
|
|
bool determine_bar_visibility(struct swaybar *bar, bool moving_layer);
|
|
void free_workspaces(struct wl_list *list);
|
|
|
|
#endif
|