Script para trocar o papel de parede do fluxbox em GTK

Publicado por eu 23/04/2008

[ Hits: 6.047 ]

Download fluxpaper.c




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).

  



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

Imprimindo uma arvore graficamente

BINCON 10

É 32 ou 64 bits?

Jogo Final Fight - Haggar (com gráficos)

Fibbonacci com Memoization - O(n)


  

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 removido 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.

[6] Comentário enviado por removido em 06/03/2016 - 01:51h

Pode ser necessária uma re-escrita por causa da transição GTK+2 para GTK+3. Basta saber se houve mudança.

----------------------------------------------------------------------------------------------------------------
http://24.media.tumblr.com/tumblr_m62bwpSi291qdlh1io1_250.gif

# apt-get purge systemd (não é prá digitar isso!)

Encryption works. Properly implemented strong crypto systems are one of the few things that you can rely on. Unfortunately, endpoint security is so terrifically weak that NSA can frequently find ways around it. — Edward Snowden


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts