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;
}
Example #2
0
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);
}