all repos — tint2 @ 2e49b66ac2385943fdd68592da7825d93b630e6e

fork of the tint2 desktop panel for my custom setup - only minimized windows across all desktops for the taskbar

src/systray/systraybar.h (raw)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
/**************************************************************************
* Copyright (C) 2009 thierry lorthiois (lorthiois@bbsoft.fr)
*
* systraybar
* systray implementation come from 'docker-1.5' by Ben Jansens,
* and from systray/xembed specification (freedesktop.org).
*
**************************************************************************/

#ifndef SYSTRAYBAR_H
#define SYSTRAYBAR_H

#include "common.h"
#include "area.h"
#include "timer.h"
#include <X11/extensions/Xdamage.h>

// XEMBED messages
#define XEMBED_EMBEDDED_NOTIFY 0
// Flags for _XEMBED_INFO
#define XEMBED_MAPPED (1 << 0)

typedef enum SystraySortMethod {
	SYSTRAY_SORT_ASCENDING = 0,
	SYSTRAY_SORT_DESCENDING,
	SYSTRAY_SORT_LEFT2RIGHT,
	SYSTRAY_SORT_RIGHT2LEFT,
} SystraySortMethod;

typedef struct {
	// always start with area
	Area area;

	GSList *list_icons;
	SystraySortMethod sort;
	int alpha, saturation, brightness;
	int icon_size, icons_per_column, icons_per_row, margin;
} Systray;

typedef struct {
	// The actual tray icon window (created by the application)
	Window win;
	// The parent window created by tint2 to embed the icon
	Window parent;
	int x, y;
	int width, height;
	int depth;
	gboolean reparented;
	gboolean embedded;
	// Process PID or zero.
	int pid;
	// A number that is incremented for each new icon, used to sort them by the order in which they were created.
	int chrono;
	// Name of the tray icon window.
	char *name;
	// Members used for rendering
	struct timespec time_last_render;
	int num_fast_renders;
	timeout *render_timeout;
	// Members used for resizing
	int bad_size_counter;
	struct timespec time_last_resize;
	timeout *resize_timeout;
	// Icon contents if we are compositing the icon, otherwise null
	Imlib_Image image;
	// XDamage
	Damage damage;
} TrayWindow;

// net_sel_win != None when protocol started
extern Window net_sel_win;
extern Systray systray;
extern gboolean refresh_systray;
extern gboolean systray_enabled;
extern int systray_max_icon_size;
extern int systray_monitor;
extern gboolean systray_profile;

// default global data
void default_systray();

// freed memory
void cleanup_systray();

// initialize protocol and panel position
void init_systray();
void init_systray_panel(void *p);

void draw_systray(void *obj, cairo_t *c);
gboolean resize_systray(void *obj);
void on_change_systray(void *obj);
gboolean systray_on_monitor(int i_monitor, int num_panels);

// systray protocol
// many tray icon doesn't manage stop/restart of the systray manager
void start_net();
void stop_net();
void net_message(XClientMessageEvent *e);

gboolean add_icon(Window id);
gboolean reparent_icon(TrayWindow *traywin);
gboolean embed_icon(TrayWindow *traywin);
void remove_icon(TrayWindow *traywin);

void refresh_systray_icons();
void systray_render_icon(void *t);
gboolean request_embed_icon(TrayWindow *traywin);
void systray_resize_request_event(TrayWindow *traywin, XEvent *e);
gboolean request_embed_icon(TrayWindow *traywin);
void systray_reconfigure_event(TrayWindow *traywin, XEvent *e);
void systray_property_notify(TrayWindow *traywin, XEvent *e);
void systray_destroy_event(TrayWindow *traywin);
void kde_update_icons();

TrayWindow *systray_find_icon(Window win);

#endif