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
|
// gcc -o net_wm_state_skip_taskbar net_wm_state_skip_taskbar.c -lX11 `pkg-config --cflags --libs gtk+-2.0`
#include <X11/X.h>
#include <X11/Xlib.h>
#include <X11/Xatom.h>
#include <assert.h>
#include <stdio.h>
// gcc net_wm_state_skip_taskbar.c -lX11
//
// test case for _NET_WM_STATE_SKIP_TASKBAR
//
#if 0
int main()
{
// Open the display
Display *dpy = XOpenDisplay(NULL);
assert(dpy);
// Get some colors
int blackColor = BlackPixel(dpy, DefaultScreen(dpy));
int whiteColor = WhitePixel(dpy, DefaultScreen(dpy));
// Create the window
Window w = XCreateSimpleWindow(dpy, DefaultRootWindow(dpy), 0, 0, 200, 100, 0, blackColor, blackColor);
// Set the properties
Atom skip_taskbar = XInternAtom(dpy, "_NET_WM_STATE_SKIP_TASKBAR",False);
Atom net_wm_state = XInternAtom(dpy, "_NET_WM_STATE",False);
// Map the window
XMapWindow(dpy, w);
XFlush(dpy);
XChangeProperty(dpy, w, net_wm_state, XA_ATOM, 32,
PropModeAppend, (unsigned char *)&skip_taskbar, 1);
XFlush(dpy);
// Wait for ever
while (1)
{
sleep(1);
}
}
#endif
//
// gcc -Wall -o skip_taskbar net_wm_state_skip_taskbar.c `pkg-config --cflags --libs gtk+-2.0 glib-2.0`
//
#include <glib/gprintf.h>
#include <gtk/gtk.h>
#include <gdk/gdkx.h>
GtkWidget *main_window;
static void toggle_prop( GtkWidget *widget,
gpointer data )
{
static Bool toggle = TRUE;
Display *dpy = GDK_DISPLAY();
Window w = GDK_WINDOW_XWINDOW(main_window->window);
Atom skip_taskbar = XInternAtom(dpy, "_NET_WM_STATE_SKIP_TASKBAR",False);
Atom net_wm_state = XInternAtom(dpy, "_NET_WM_STATE",False);
if (toggle)
{
XChangeProperty(dpy, w, net_wm_state, XA_ATOM, 32, PropModeReplace, (unsigned char *)&skip_taskbar, 1);
}
else
{
XDeleteProperty(dpy, w, net_wm_state);
}
toggle = !toggle;
XFlush(dpy);
}
static void destroy( GtkWidget *widget,
gpointer data )
{
gtk_main_quit ();
}
int main( int argc,
char *argv[] )
{
GtkWidget *button;
gtk_init (&argc, &argv);
main_window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
gtk_window_set_decorated (GTK_WINDOW(main_window), TRUE);
g_signal_connect (G_OBJECT (main_window), "destroy",
G_CALLBACK (destroy), NULL);
gtk_container_set_border_width (GTK_CONTAINER (main_window), 10);
button = gtk_button_new_with_label ("Toggle");
g_signal_connect (G_OBJECT (button), "clicked",
G_CALLBACK (toggle_prop), NULL);
gtk_container_add (GTK_CONTAINER (main_window), button);
gtk_widget_show (button);
gtk_widget_show (main_window);
gtk_main ();
return 0;
}
|