Re: ComboBox bg color

On Fri, 10 Oct 2008 20:07:01 +0000
rahed <raherh gmail com> wrote:


I'd like to change a background color of a ComboBox widget. Generally I
do it with modify_bg for EventBox as a parent but with the ComboBox being
a compound widget I am not successful.
I build it with Gtk2::GladeXML.

Is it possible?

As far as I know, it's possible, but tricky and not reliable, because
many users use pixmap based themes( in ~/.gtkrc-2.0) and you need to override the
pixmap for any color change to take effect.

Here are a couple of tricks you might try. This dosn't work perfectly, but you
may get better results playing around with settings.

Usually, the general wisdom is not to mess with a user's themes, but to do it right,
you would make your own custom theme for your app, put it into the app's resource
dir (like ~./app_config_dir) and at the start of your script, disregard the default user
theme, and load your theme just for that app.

# must be before Gtk2 init                                                                
BEGIN { $ENV{GTK2_RC_FILES} = 'gtkrc_myapp' }    #file in same dir as script

Here is how you try to manually adjust....very tricky. Notice how I try
to wipe out any pixmap theme, often dosn't work right.

#! /usr/bin/perl
use warnings;
use strict;
use Gtk2 '-init';
use Glib qw/TRUE FALSE/; 


style "default"

bg_pixmap[NORMAL] = "<none>"
bg_pixmap[INSENSITIVE] = "<none>"
bg_pixmap[ACTIVE] = "<none>"
bg_pixmap[PRELIGHT] = "<none>"

bg[NORMAL] = { 1.0, 1.0, 1.0 }

}class "GtkWidget" style "default"

style "my_combo" {
font_name ="sans 24"
text[NORMAL] = "#FF0000"
base[NORMAL] = "#000000"   

widget "*Combo*" style "my_combo"
#standard window creation, placement, and signal connecting
my $window = Gtk2::Window->new('toplevel');
$window->signal_connect('delete_event' => sub { Gtk2->main_quit; });

#this vbox will return the bulk of the gui
my $vbox = &ret_vbox();

#add and show the vbox

#our main event-loop

sub ret_vbox {

my $vbox = Gtk2::VBox->new(FALSE,5);

        my $cb = Gtk2::ComboBox->new_text;
        $cb->append_text("Select a band:");
        $cb->append_text("Ten Years After");
        $cb->append_text("Bad Finger");
        $cb->append_text("Gravy Train");
        $cb->signal_connect('changed' => \&cb_changed);

my $greyl = Gtk2::Gdk::Color->new (0x9999,0x9999,0x9999);                                 
$cb->modify_bg('normal', $greyl);  

return $vbox;

sub cb_changed {
        my ($cb) = @_;
        print "Right on Man, ".$cb->get_active_text." is a cool band\n"; 


I'm not really a human, but I play one on earth. 

[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]