bfcfabee2b
As well as ignoring scroll events on status elements when click_events is enabled. Previously, using the scroll wheel on a workspace button would switch to that workspace instead of scrolling through them. Clicks and scrolling on status elements would always be processed by swaybar, too. So in case you were using scrolling as volume control on a status item, swaybar would additionally scroll through your workspaces.
103 lines
1.9 KiB
C
103 lines
1.9 KiB
C
#ifndef _SWAYBAR_BAR_H
|
|
#define _SWAYBAR_BAR_H
|
|
#include <wayland-client.h>
|
|
#include "pool-buffer.h"
|
|
|
|
struct swaybar_config;
|
|
struct swaybar_output;
|
|
struct swaybar_workspace;
|
|
|
|
struct swaybar_pointer {
|
|
struct wl_pointer *pointer;
|
|
struct wl_cursor_theme *cursor_theme;
|
|
struct wl_cursor_image *cursor_image;
|
|
struct wl_surface *cursor_surface;
|
|
struct swaybar_output *current;
|
|
int x, y;
|
|
};
|
|
|
|
enum x11_button {
|
|
NONE,
|
|
LEFT,
|
|
MIDDLE,
|
|
RIGHT,
|
|
SCROLL_UP,
|
|
SCROLL_DOWN,
|
|
SCROLL_LEFT,
|
|
SCROLL_RIGHT,
|
|
BACK,
|
|
FORWARD,
|
|
};
|
|
|
|
enum hotspot_event_handling {
|
|
HOTSPOT_IGNORE,
|
|
HOTSPOT_PROCESS,
|
|
};
|
|
|
|
struct swaybar_hotspot {
|
|
struct wl_list link;
|
|
int x, y, width, height;
|
|
enum hotspot_event_handling (*callback)(struct swaybar_output *output,
|
|
int x, int y, enum x11_button button, void *data);
|
|
void (*destroy)(void *data);
|
|
void *data;
|
|
};
|
|
|
|
struct swaybar {
|
|
struct wl_display *display;
|
|
struct wl_compositor *compositor;
|
|
struct zwlr_layer_shell_v1 *layer_shell;
|
|
struct wl_shm *shm;
|
|
struct wl_seat *seat;
|
|
|
|
struct swaybar_config *config;
|
|
struct swaybar_output *focused_output;
|
|
struct swaybar_pointer pointer;
|
|
struct status_line *status;
|
|
|
|
int ipc_event_socketfd;
|
|
int ipc_socketfd;
|
|
|
|
struct wl_list outputs;
|
|
};
|
|
|
|
struct swaybar_output {
|
|
struct wl_list link;
|
|
struct swaybar *bar;
|
|
struct wl_output *output;
|
|
struct wl_surface *surface;
|
|
struct zwlr_layer_surface_v1 *layer_surface;
|
|
uint32_t wl_name;
|
|
|
|
struct wl_list workspaces;
|
|
struct wl_list hotspots;
|
|
|
|
char *name;
|
|
size_t index;
|
|
bool focused;
|
|
|
|
uint32_t width, height;
|
|
int32_t scale;
|
|
struct pool_buffer buffers[2];
|
|
struct pool_buffer *current_buffer;
|
|
};
|
|
|
|
struct swaybar_workspace {
|
|
struct wl_list link;
|
|
int num;
|
|
char *name;
|
|
bool focused;
|
|
bool visible;
|
|
bool urgent;
|
|
};
|
|
|
|
void bar_setup(struct swaybar *bar,
|
|
const char *socket_path,
|
|
const char *bar_id);
|
|
void bar_run(struct swaybar *bar);
|
|
void bar_teardown(struct swaybar *bar);
|
|
|
|
void free_workspaces(struct wl_list *list);
|
|
|
|
#endif
|