Linux slogan
Visite também: Segurança Linux · BR-Linux.org · Dicas-L · Doode · NoticiasLinux · SoftwareLivre.org · UnderLinux



» Screenshot
» Login
Login:
Senha:

Se você ainda não possui uma conta, clique aqui.

Esqueci minha senha



Scripts

Linux user

Publicado por eu em 23/04/2008    [ 3788 hits ]

Login: cdvdt, 105955 pontos

Download:


Descrição

Script para trocar o papel de parede do fluxbox em GTK.

É aconselhável que você tenha instalado um wallpapersettler como esetroot e para compilar é preciso ter o pacote libgtk2.0-dev instalado (para ubuntu use: sudo apt-get install libgtk2.0-dev).


[ Download: fluxpaper.c ]   [ Enviar nova versão ]

[ Esconder código-fonte ]

#include <gtk/gtk.h>
#include <stdlib.h>

GtkWidget *entry;
GtkWidget *combo;

void conc (char *meu_buf, char *string)
{
   int i,j;
   for (i=0;meu_buf[i]!=0;i++);
   for (j=0;string[j]!=0;j++) meu_buf[i+j]=string[j];
   meu_buf[i+j]=0;
}

char opc (char *meu_buf)
{
   char c;
   if (meu_buf[0]=='F') c='f';
   if (meu_buf[0]=='C') c='c';
   if (meu_buf[0]=='A') c='t';
   if (meu_buf[0]=='M') c='a';
   return c;
}


static void callback( GtkWidget *widget,
                      gpointer   data )
{
   g_print ("Hello again - %s was pressed\n", (gchar *) data);
}

static void callback2( GtkWidget *widget,
                      gpointer   data )
{
   char meu_buf[80]="fbsetbg -", op[3]={'{FONTE}',' ','{FONTE}'};
   op[0]=opc(gtk_entry_get_text (GTK_ENTRY (GTK_COMBO (combo)->entry)));
   conc(meu_buf,op);
   conc(meu_buf,gtk_entry_get_text (GTK_ENTRY (entry)));
   system (meu_buf);
}

static gboolean delete_event( GtkWidget *widget,
                              GdkEvent  *event,
                              gpointer   data )
{
   gtk_main_quit ();
   return FALSE;
}

static void file_ok_sel( GtkWidget        *w,
                         GtkFileSelection *fs )
{
   gtk_entry_set_text (GTK_ENTRY (entry), gtk_file_selection_get_filename (GTK_FILE_SELECTION (fs)));
}

static void file( GtkWidget *widget,
                      gpointer   data )
{
   GtkWidget *filew;
    
   filew = gtk_file_selection_new ("File selection");
    
   g_signal_connect_swapped (G_OBJECT (filew),
                         "destroy", G_CALLBACK (gtk_widget_destroy),
               G_OBJECT (filew));

   g_signal_connect (G_OBJECT (GTK_FILE_SELECTION (filew)->ok_button),
            "clicked", G_CALLBACK (file_ok_sel), (gpointer) filew);
   g_signal_connect_swapped (G_OBJECT (GTK_FILE_SELECTION (filew)->ok_button),
                         "clicked", G_CALLBACK (gtk_widget_destroy),
               G_OBJECT (filew));
    

   g_signal_connect_swapped (G_OBJECT (GTK_FILE_SELECTION (filew)->cancel_button),
                         "clicked", G_CALLBACK (gtk_widget_destroy),
               G_OBJECT (filew));
    
   gtk_file_selection_set_filename (GTK_FILE_SELECTION(filew),
                 "penguin.png");
    
   gtk_widget_show (filew);
}


int main( int   argc,
          char *argv[] )
{
   GtkWidget *window;
   GtkWidget *label;
   GtkWidget *image;
   GtkWidget *rmenu;
   GtkWidget *button;
   GtkWidget *vbox1, *hbox1;
   GList *glist = NULL;

   gtk_init (&argc, &argv);

   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);

   gtk_window_set_title (GTK_WINDOW (window), "FluxPaper 0.1");

   g_signal_connect (G_OBJECT (window), "delete_event",
         G_CALLBACK (delete_event), NULL);

   gtk_container_set_border_width (GTK_CONTAINER (window), 10);

   vbox1 = gtk_vbox_new (FALSE, 0);

   gtk_container_add (GTK_CONTAINER (window), vbox1);

   gtk_widget_show (vbox1);

   hbox1 = gtk_hbox_new (FALSE, 0);

   gtk_container_add (GTK_CONTAINER (vbox1), hbox1);

   label = gtk_label_new ("Arquivo: ");
    
   gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);

   gtk_box_pack_start (GTK_BOX(hbox1), label, FALSE, TRUE, 0);

   gtk_widget_show (label);

   entry = gtk_entry_new();

   gtk_box_pack_start (GTK_BOX(hbox1), entry, TRUE, TRUE, 0);

   gtk_widget_show (entry);

   button = gtk_button_new_from_stock (GTK_STOCK_OPEN);

   g_signal_connect (G_OBJECT (button), "clicked",
            G_CALLBACK (file), (gpointer) "button 2");

   gtk_box_pack_start(GTK_BOX (hbox1), button, TRUE, TRUE, 0);

   gtk_widget_show (button);

   gtk_widget_show (hbox1);

   hbox1 = gtk_hbox_new (FALSE, 0);

   gtk_container_add (GTK_CONTAINER (vbox1), hbox1);

   label = gtk_label_new ("Estilo: ");
    
   gtk_label_set_justify (GTK_LABEL (label), GTK_JUSTIFY_LEFT);

   gtk_box_pack_start (GTK_BOX(hbox1), label, FALSE, TRUE, 0);

   gtk_widget_show (label);

   combo = gtk_combo_new();

   glist = g_list_append (glist, "Fullscreen");
   glist = g_list_append (glist, "Centralizado");
   glist = g_list_append (glist, "Ajustado");
   glist = g_list_append (glist, "Maximizado");

   gtk_combo_set_popdown_strings (GTK_COMBO (combo), glist);

   gtk_combo_set_use_arrows (GTK_COMBO (combo),
                                      TRUE);

   gtk_box_pack_start (GTK_BOX(hbox1), combo, FALSE, TRUE, 0);

   gtk_widget_show (combo);

   gtk_widget_show (hbox1);

   hbox1 = gtk_hbox_new (FALSE, 0);

   gtk_container_add (GTK_CONTAINER (vbox1), hbox1);

   button = gtk_button_new_from_stock (GTK_STOCK_OK);

   g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(callback2), (gpointer) "button 3");

   g_signal_connect_swapped (G_OBJECT (button), "clicked",
               G_CALLBACK (delete_event),
                              G_OBJECT (window));

   gtk_box_pack_end (GTK_BOX(hbox1), button, FALSE, FALSE, 2);

   gtk_widget_show (button);

   button = gtk_button_new_from_stock (GTK_STOCK_APPLY);

   g_signal_connect (G_OBJECT(button), "clicked", G_CALLBACK(callback2), (gpointer) "button 3");

   gtk_box_pack_end (GTK_BOX(hbox1), button, FALSE, FALSE, 2);

   gtk_widget_show (button);

   button = gtk_button_new_from_stock (GTK_STOCK_CANCEL);

   g_signal_connect_swapped (G_OBJECT (button), "clicked",
               G_CALLBACK (delete_event),
                              G_OBJECT (window));

   gtk_box_pack_end (GTK_BOX(hbox1), button, FALSE, FALSE, 2);

   gtk_widget_show (button);

   gtk_widget_show (hbox1);

   gtk_widget_show (window);

   gtk_main ();

    return 0;
}



Scripts recomendados
   Script Linux recomendado C/C++
   Script Linux recomendado Função "Partição de Inteiros" Recursiva SEM Tabela Estática em C
   Script Linux recomendado Árvore binária AVL
   Script Linux recomendado QuickSort Genérico
   Script Linux recomendado Jogo defutebol simples (com gráficos)

Comentários
[1] Comentário enviado por edirlf em 25/04/2008 - 20:14h:

pucha cara.. legal seu script, mas.. como faço pra compilar ele.
tentei com:

gcc -o teste teste.c -Wall -g `gtk-config --cflags --libs`

mas não funcionou aqui.

se puder me ajudar, meu muito obrigado.
falows.


[2] Comentário enviado por SMarcell em 28/04/2008 - 12:38h:

Pô! Parece legal esse seu programa. Vou testá-lo!

Uma outra alternativa para setar wallpaper no Fluxbox, é atráves dum shell script que criei e que seta os papeis de parede de forma aleatória e em tempo real.

Link para o script:
http://www.slackbr.org/forum/viewtopic.php?f=45&t=16269

Falou!!!


[3] Comentário enviado por cdvdt em 28/04/2008 - 18:53h:

SMarcell eu ja fiz um desses também
tenta assim: gcc teste.c -o teste `pkg-config --cflags gtk+-2.0 pkg-config --libs gtk+-2.0`
eu to trabalhando numa versão completa (lembra o seletor do kde) que eu pretendo disponibilizar em GPL


[4] Comentário enviado por Listeiro 037 em 07/07/2012 - 23:44h:

Está compilando com um monte de warnings, mas está rodando.

file:35:41: warning: character constant too long for its type
file: In function ‘callback2’:
file:35: warning: overflow in implicit constant conversion
file:35:55: warning: character constant too long for its type
file:35: warning: overflow in implicit constant conversion
file:36: warning: passing argument 1 of ‘opc’ discards qualifiers from pointer target type
file:15: note: expected ‘char *’ but argument is of type ‘const gchar *’
file:38: warning: passing argument 2 of ‘conc’ discards qualifiers from pointer target type
file:7: note: expected ‘char *’ but argument is of type ‘const gchar *’


Estou sem Fluxbox no momento para testar se a troca é feita.


[5] Comentário enviado por cdvdt em 07/07/2012 - 23:53h:

Listeiro 037, se me lembro bem é assim mesmo, eu trabalhei mais o código e disponibilizei em GPL no sourceforge, está com o nome fluxpaper. Esse projeto me levou ao desenvolvimento de outro software, o anypaper, com mais opções de customização. Tenho planos para outras otimizações.



Contribuir com comentário


  
Para executar esta ação você precisa estar logado no site, caso contrário, tudo o que for digitado será perdido.
Responsável pelo site: Fábio Berbert de Paula - Conteúdo distribuído sob licença GNU FDL
Site hospedado por:

Viva o Linux

A maior comunidade Linux da América Latina! Artigos, dicas, tutoriais, fórum, scripts e muito mais. Ideal para quem busca auto-ajuda em Linux.