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
|
#include <X11/Xatom.h>
#include <gtk/gtk.h>
#include <gdk/gdkx.h>
//
// gcc -Wall -o skip_taskbar_toggle skip_taskbar_toggle.c `pkg-config --cflags --libs gtk+-2.0 glib-2.0`
//
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;
}
|