void sux_init(SuxModule *sm, gchar *args) { GtkWidget *button, *image; WnckScreen *screen; ShowDesktop *sd; sd = g_new0(ShowDesktop, 1); button = gtk_toggle_button_new(); gtk_widget_show(button); image = gtk_image_new_from_file_scaled(IMG_PREFIX "showdesktop.png", 24, 24); gtk_widget_show(image); gtk_container_add(GTK_CONTAINER(button), image); screen = wnck_screen_get_default(); g_object_set_data(G_OBJECT(screen), "sd", sd); sd->tips = gtk_tooltips_new(); sd->screen = screen; sd->is_showing_desktop = wnck_screen_get_showing_desktop(sd->screen); sd->button = button; update_tooltip(sd); g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(toggle_show_desktop), sd); g_signal_connect(G_OBJECT(screen), "showing_desktop_changed", G_CALLBACK(show_desktop_changed), sd); sm->widget = sd->button; }
static void show_desktop_changed_callback(WnckScreen* screen, ShowDesktopData* sdd) { if (sdd->wnck_screen != NULL) sdd->showing_desktop = wnck_screen_get_showing_desktop(sdd->wnck_screen); update_button_state (sdd); }
static void show_desktop_changed(WnckScreen *screen) { ShowDesktop *sd; sd = (ShowDesktop *) g_object_get_data(G_OBJECT(screen), "sd"); g_signal_handlers_block_by_func(G_OBJECT(screen), G_CALLBACK(show_desktop_changed), NULL); sd->lock = TRUE; sd->is_showing_desktop = wnck_screen_get_showing_desktop(screen); update_button_state(sd, sd->is_showing_desktop); update_tooltip(sd); sd->lock = FALSE; g_signal_handlers_unblock_by_func(G_OBJECT(screen), G_CALLBACK(show_desktop_changed), NULL); }