summaryrefslogtreecommitdiff
path: root/skip_taskbar_toggle.c
blob: 3d06522948bb2ffaf39d354ea4619b9ac8fdf33e (plain)
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;
}