// gcc -o net_wm_state_skip_taskbar net_wm_state_skip_taskbar.c -lX11 `pkg-config --cflags --libs gtk+-2.0` #include #include #include #include #include // 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 #include #include 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; }