Commit f24a67ab authored by Maurits Rijk's avatar Maurits Rijk
Browse files

Applied patch from Jeroen Lamain to Lighting plug-in (working on #52896) and...

Applied patch from Jeroen Lamain to Lighting plug-in (working on #52896) and lots of changes to replace deprecated GtkList widget by GtkTreeView in GIMPressionist code.
parent d7e22851
2002-12-17 Maurits Rijk <lpeek.mrijk@consunet.nl>
* plug-ins/gimpressionist/Presets/*: changed all \010 in strings by
\012 so that the g_strcompress/g_strescape pair now works correctly.
* plug-ins/gimpressionist/sizemap.c
* plug-ins/gimpressionist/orientmap.c: reordered Apply/Cancel/Ok
buttons in dialogs.
* plug-ins/gimpressionist/presets.c
* plug-ins/gimpressionist/paper.c
* plug-ins/gimpressionist/brush.c
* plug-ins/gimpressionist/gimpressionist.[ch]: replace deprecated
GtkList by GtkTreeView widgets.
2002-12-17 Maurits Rijk <lpeek.mrijk@consunet.nl
* plug-ins/Lighting/lighting_ui.[ch]
* plug-ins/Lighting/lighting_preview.c: applied patch from Jeroen
Lamain. Dragging of lightsource is more smoothly now plus you can
now also drag directional lights.
2002-12-17 Nathan Summers <rock@gimp.org>
 
* libgimp/gimpbrushmenu.c
......
This diff is collapsed.
......@@ -37,20 +37,23 @@ extern guint left_button_pressed;
extern GtkWidget * spin_pos_x;
extern GtkWidget * spin_pos_y;
extern GtkWidget * spin_pos_z;
extern GtkWidget * spin_dir_x;
extern GtkWidget * spin_dir_y;
extern GtkWidget * spin_dir_z;
/* Externally visible functions */
void draw_preview_image (gint recompute);
void update_preview_image(void);
gint preview_events (GtkWidget *area,
GdkEvent *event);
void draw_preview_image (gint recompute);
void interactive_preview_callback (GtkWidget *widget);
gint check_marker_hit (gint xpos,
gint ypos);
void update_light (gint xpos,
gint ypos);
gint preview_events (GtkWidget *area,
GdkEvent *event);
void preview_callback (GtkWidget *widget);
gint check_marker_hit (gint xpos,
gint ypos);
void update_light (gint xpos,
gint ypos);
#endif /* __LIGHTING_PREVIEW_H__ */
......@@ -87,9 +87,6 @@ static void toggleenvironment_update (GtkWidget *widget,
static void lightmenu_callback (GtkWidget *widget,
gpointer data);
static void interactive_preview_timer_callback( void );
static void apply_callback (GtkWidget *widget);
static gint bumpmap_constrain (gint32 image_id,
......@@ -160,7 +157,7 @@ togglebump_update (GtkWidget *widget,
gtk_label_new (_("Bumpmap")));
}
else
{
{
gtk_notebook_remove_page (options_note_book, bump_page_pos);
if (bump_page_pos < env_page_pos)
env_page_pos--;
......@@ -225,7 +222,7 @@ lightmenu_callback (GtkWidget *widget,
gtk_widget_hide (dirlightwid);
}
update_preview_image();
interactive_preview_callback(NULL);
}
......@@ -295,9 +292,9 @@ bumpmap_constrain (gint32 image_id,
return TRUE;
return ((gimp_drawable_width (drawable_id) ==
gimp_drawable_width (mapvals.drawable_id)) &&
(gimp_drawable_height (drawable_id) ==
gimp_drawable_height (mapvals.drawable_id)));
gimp_drawable_width (mapvals.drawable_id)) &&
(gimp_drawable_height (drawable_id) ==
gimp_drawable_height (mapvals.drawable_id)));
}
static void
......@@ -497,7 +494,6 @@ create_light_page (void)
GtkWidget *table;
GtkWidget *optionmenu;
GtkWidget *colorbutton;
GtkWidget *spinbutton;
GtkObject *adj;
page = gtk_vbox_new (FALSE, 4);
......@@ -543,7 +539,7 @@ create_light_page (void)
G_CALLBACK (gimp_color_button_get_color),
&mapvals.lightsource.color);
g_signal_connect(G_OBJECT(colorbutton), "color_changed",
G_CALLBACK (update_preview_image),
G_CALLBACK (interactive_preview_callback),
NULL);
gimp_table_attach_aligned (GTK_TABLE (table), 0, 1,
_("Lig_ht Color:"), 1.0, 0.5,
......@@ -577,7 +573,7 @@ create_light_page (void)
&mapvals.lightsource.position.x);
g_signal_connect(G_OBJECT(adj), "value_changed",
G_CALLBACK (update_preview_image),
G_CALLBACK (interactive_preview_callback),
NULL);
gimp_help_set_help_data ( spin_pos_x,
......@@ -593,7 +589,7 @@ create_light_page (void)
G_CALLBACK (gimp_double_adjustment_update),
&mapvals.lightsource.position.y);
g_signal_connect(G_OBJECT(adj), "value_changed",
G_CALLBACK (update_preview_image),
G_CALLBACK (interactive_preview_callback),
NULL);
......@@ -610,7 +606,7 @@ create_light_page (void)
G_CALLBACK (gimp_double_adjustment_update),
&mapvals.lightsource.position.z);
g_signal_connect(G_OBJECT(adj), "value_changed",
G_CALLBACK (update_preview_image),
G_CALLBACK (interactive_preview_callback),
NULL);
gimp_help_set_help_data ( spin_pos_z,
......@@ -630,50 +626,50 @@ create_light_page (void)
gtk_container_add (GTK_CONTAINER (dirlightwid), table);
gtk_widget_show (table);
spinbutton = gimp_spin_button_new (&adj, mapvals.lightsource.direction.x,
spin_dir_x = gimp_spin_button_new (&adj, mapvals.lightsource.direction.x,
-1.0, 1.0, 0.01, 0.1, 1.0, 0.0, 2);
gimp_table_attach_aligned (GTK_TABLE (table), 0, 0,
_("X:"), 1.0, 0.5,
spinbutton, 1, TRUE);
spin_dir_x, 1, TRUE);
g_signal_connect (G_OBJECT (adj), "value_changed",
G_CALLBACK (gimp_double_adjustment_update),
&mapvals.lightsource.direction.x);
g_signal_connect(G_OBJECT(adj), "value_changed",
G_CALLBACK (update_preview_image),
G_CALLBACK (interactive_preview_callback),
NULL);
gimp_help_set_help_data (spinbutton,
gimp_help_set_help_data (spin_dir_x,
_("Light source X direction in XYZ space"), NULL);
spinbutton = gimp_spin_button_new (&adj, mapvals.lightsource.direction.y,
spin_dir_y = gimp_spin_button_new (&adj, mapvals.lightsource.direction.y,
-1.0, 1.0, 0.01, 0.1, 1.0, 0.0, 2);
gimp_table_attach_aligned (GTK_TABLE (table), 0, 1,
_("Y:"), 1.0, 0.5,
spinbutton, 1, TRUE);
spin_dir_y, 1, TRUE);
g_signal_connect (G_OBJECT (adj), "value_changed",
G_CALLBACK (gimp_double_adjustment_update),
&mapvals.lightsource.direction.y);
g_signal_connect(G_OBJECT(adj), "value_changed",
G_CALLBACK (update_preview_image),
G_CALLBACK (interactive_preview_callback),
NULL);
gimp_help_set_help_data (spinbutton,
gimp_help_set_help_data (spin_dir_y,
_("Light source Y direction in XYZ space"), NULL);
spinbutton = gimp_spin_button_new (&adj, mapvals.lightsource.direction.z,
spin_dir_z = gimp_spin_button_new (&adj, mapvals.lightsource.direction.z,
-1.0, 1.0, 0.01, 0.1, 1.0, 0.0, 2);
gimp_table_attach_aligned (GTK_TABLE (table), 0, 2,
_("Z:"), 1.0, 0.5,
spinbutton, 1, TRUE);
spin_dir_z, 1, TRUE);
g_signal_connect (G_OBJECT (adj), "value_changed",
G_CALLBACK (gimp_double_adjustment_update),
&mapvals.lightsource.direction.z);
g_signal_connect(G_OBJECT(adj), "value_changed",
G_CALLBACK (update_preview_image),
G_CALLBACK (interactive_preview_callback),
NULL);
gimp_help_set_help_data (spinbutton,
gimp_help_set_help_data (spin_dir_z,
_("Light source Z direction in XYZ space"), NULL);
gtk_widget_show (page);
......@@ -729,7 +725,7 @@ create_material_page (void)
G_CALLBACK (gimp_double_adjustment_update),
&mapvals.material.ambient_int);
g_signal_connect(G_OBJECT(adj), "value_changed",
G_CALLBACK (update_preview_image),
G_CALLBACK (interactive_preview_callback),
NULL);
gtk_widget_show (spinbutton);
......@@ -759,7 +755,7 @@ create_material_page (void)
G_CALLBACK (gimp_double_adjustment_update),
&mapvals.material.diffuse_int);
g_signal_connect(G_OBJECT(adj), "value_changed",
G_CALLBACK (update_preview_image),
G_CALLBACK (interactive_preview_callback),
NULL);
gtk_widget_show (spinbutton);
......@@ -802,6 +798,11 @@ create_material_page (void)
g_signal_connect (G_OBJECT (adj), "value_changed",
G_CALLBACK (gimp_double_adjustment_update),
&mapvals.material.diffuse_ref);
g_signal_connect(G_OBJECT(adj), "value_changed",
G_CALLBACK (interactive_preview_callback),
NULL);
gtk_widget_show (spinbutton);
gtk_label_set_mnemonic_widget (GTK_LABEL (label), spinbutton);
......@@ -828,6 +829,11 @@ create_material_page (void)
g_signal_connect (G_OBJECT (adj), "value_changed",
G_CALLBACK (gimp_double_adjustment_update),
&mapvals.material.specular_ref);
g_signal_connect(G_OBJECT(adj), "value_changed",
G_CALLBACK (interactive_preview_callback),
NULL);
gtk_widget_show (spinbutton);
gtk_label_set_mnemonic_widget (GTK_LABEL (label), spinbutton);
......@@ -854,6 +860,10 @@ create_material_page (void)
g_signal_connect (G_OBJECT (adj), "value_changed",
G_CALLBACK (gimp_double_adjustment_update),
&mapvals.material.highlight);
g_signal_connect(G_OBJECT(adj), "value_changed",
G_CALLBACK(interactive_preview_callback),
NULL);
gtk_widget_show (spinbutton);
gtk_label_set_mnemonic_widget (GTK_LABEL (label), spinbutton);
......@@ -924,18 +934,15 @@ create_bump_page (void)
_("Bumpm_ap Image:"), 1.0, 0.5,
optionmenu, 1, TRUE);
optionmenu =
gimp_option_menu_new2 (FALSE,
G_CALLBACK (mapmenu2_callback),
&mapvals.bumpmaptype,
(gpointer) mapvals.bumpmaptype,
_("Linear"), (gpointer) LINEAR_MAP, NULL,
_("Logarithmic"), (gpointer) LOGARITHMIC_MAP, NULL,
_("Sinusoidal"), (gpointer) SINUSOIDAL_MAP, NULL,
_("Spherical"), (gpointer) SPHERICAL_MAP, NULL,
NULL);
optionmenu = gimp_option_menu_new2 (FALSE,
G_CALLBACK (mapmenu2_callback),
&mapvals.bumpmaptype,
(gpointer) mapvals.bumpmaptype,
_("Linear"), (gpointer) LINEAR_MAP, NULL,
_("Logarithmic"), (gpointer) LOGARITHMIC_MAP, NULL,
_("Sinusoidal"), (gpointer) SINUSOIDAL_MAP, NULL,
_("Spherical"), (gpointer) SPHERICAL_MAP, NULL,
NULL);
gimp_table_attach_aligned (GTK_TABLE (table), 0, 1,
_("Cu_rve:"), 1.0, 0.5,
optionmenu, 1, TRUE);
......@@ -1196,7 +1203,7 @@ main_dialog (GimpDrawable *drawable)
G_CALLBACK (gimp_toggle_button_update),
&mapvals.interactive_preview);
g_signal_connect(G_OBJECT(toggle), "toggled",
G_CALLBACK (update_preview_image),
G_CALLBACK (interactive_preview_callback),
NULL);
......@@ -1217,7 +1224,6 @@ main_dialog (GimpDrawable *drawable)
create_main_notebook (main_hbox);
gtk_widget_show (appwin);
{
GdkCursor *newcursor;
......
Preset
desc=Simulates the Apply Canvas\010plugin, by just adding a\010paper relief to the image.
desc=Simulates the Apply Canvas\012plugin, by just adding a\012paper relief to the image.
orientnum=1
orientfirst=0.000000
orientlast=0.000000
......
Preset
desc=Huge spheres! Tileable,\010might be suitable as a\010background somewhere.
desc=Huge spheres! Tileable,\012might be suitable as a\012background somewhere.
orientnum=1
orientfirst=0.000000
orientlast=60.000000
......
Preset
desc=Turns the image into a layer\010of small pebbles.
desc=Turns the image into a layer\012of small pebbles.
orientnum=1
orientfirst=47.790001
orientlast=0.000000
......
Preset
desc=Sends a horde of maggots\010to gnaw at your image.
desc=Sends a horde of maggots\012to gnaw at your image.
orientnum=30
orientfirst=0.000000
orientlast=360.000000
......
Preset
desc=Quite close to the original\010Cryptiq-plugins effect.
desc=Quite close to the original\012Cryptiq-plugins effect.
orientnum=1
orientfirst=0.000000
orientlast=0.000000
......
Preset
desc=Very rough moss-like\010texture. Works quite well\010for tileable backgrounds\010and other textures.
desc=Very rough moss-like\012texture. Works quite well\012for tileable backgrounds\012and other textures.
orientnum=21
orientfirst=31.860001
orientlast=180.220001
......
Preset
desc=Rough paint-on-rock\010sort of texture. Good for\010tileable backgrounds.
desc=Rough paint-on-rock\012sort of texture. Good for\012tileable backgrounds.
orientnum=30
orientfirst=0.000000
orientlast=360.000000
......
Preset
desc=Plain oil-painting. Good for\010big pictures, as much of\010the details are lost.
desc=Plain oil-painting. Good for\012big pictures, as much of\012the details are lost.
orientnum=30
orientfirst=70.089996
orientlast=360.000000
......
Preset
desc=Looks like a mixture between\010a spiderweb and a smashed\010window.
desc=Looks like a mixture between\012a spiderweb and a smashed\012window.
orientnum=17
orientfirst=15.930000
orientlast=360.000000
......
Preset
desc=The image looks like it is made\010up of small pieces of straw\010or chips of wood. Tilable.
desc=The image looks like it is made\012up of small pieces of straw\012or chips of wood. Tileable.
orientnum=30
orientfirst=41.419998
orientlast=360.000000
......
Preset
desc=Makes the image look like\010some sort of woven quilt\010or rug, or something in that\010direction.
desc=Makes the image look like\012some sort of woven quilt\012or rug, or something in that\012direction.
orientnum=4
orientfirst=9.560000
orientlast=360.000000
......
......@@ -33,6 +33,7 @@ static GtkWidget *brushprev = NULL;
GtkObject *brushreliefadjust = NULL;
GtkObject *brushaspectadjust = NULL;
GtkObject *brushgammaadjust = NULL;
static GtkListStore *brushstore;
GtkWidget *brushdrawablemenu = NULL;
static GtkWidget *brushemptyitem;
......@@ -50,7 +51,7 @@ static gboolean colorfile(char *fn)
return fn && strstr(fn, ".ppm");
}
void brushdmenuselect(gint32 id, gpointer data)
static void brushdmenuselect(gint32 id, gpointer data)
{
GimpPixelRgn src_rgn;
guchar *src_row;
......@@ -65,8 +66,8 @@ void brushdmenuselect(gint32 id, gpointer data)
if(brushfile == 2) return; /* Not finished GUI-building yet */
if(brushfile) {
unselectall(brushlist);
if (brushfile) {
/* unselectall(brushlist); */
if(GTK_IS_WIDGET(presetsavebutton))
gtk_widget_set_sensitive(GTK_WIDGET(presetsavebutton), FALSE);
}
......@@ -157,17 +158,15 @@ void dummybrushdmenuselect(GtkWidget *w, gpointer data)
updatebrushprev(NULL);
}
void destroy_window (GtkWidget *widget, GtkWidget **window)
static void destroy_window (GtkWidget *widget, GtkWidget **window)
{
*window = NULL;
}
void brushlistrefresh(void)
static void brushlistrefresh(void)
{
GtkWidget *list = brushlist;
int n = g_list_length(GTK_LIST(list)->children);
gtk_list_clear_items(GTK_LIST(list), 0, n);
readdirintolist("Brushes", list, NULL);
gtk_list_store_clear (brushstore);
readdirintolist("Brushes", brushlist, NULL);
}
void savebrush_ok(GtkWidget *w, GtkFileSelection *fs, gpointer data)
......@@ -199,14 +198,11 @@ void savebrush(GtkWidget *wg, gpointer data)
gtk_file_selection_set_filename(GTK_FILE_SELECTION(window), path);
g_signal_connect (G_OBJECT(window), "destroy",
G_CALLBACK (destroy_window),
g_signal_connect (G_OBJECT(window), "destroy", G_CALLBACK (destroy_window),
&window);
g_signal_connect (G_OBJECT(GTK_FILE_SELECTION(window)->ok_button),
"clicked",
G_CALLBACK (savebrush_ok),
window);
"clicked", G_CALLBACK (savebrush_ok), window);
g_signal_connect_swapped (G_OBJECT(GTK_FILE_SELECTION(window)->cancel_button),
"clicked",
......@@ -217,7 +213,7 @@ void savebrush(GtkWidget *wg, gpointer data)
return;
}
gint validdrawable(gint32 imageid, gint32 drawableid, gpointer data)
static gboolean validdrawable(gint32 imageid, gint32 drawableid, gpointer data)
{
if(drawableid == -1) return TRUE;
return (gimp_drawable_is_rgb(drawableid) || gimp_drawable_is_gray(drawableid));
......@@ -300,13 +296,11 @@ void updatebrushprev(char *fn)
static gboolean brushdontupdate = FALSE;
void selectbrush(GtkWidget *wg, GtkWidget *p)
static void selectbrush(GtkTreeSelection *selection, gpointer data)
{
GList *h;
GtkWidget *tmpw;
char *l;
static char *oldl = NULL;
static char fname[200];
GtkTreeIter iter;
GtkTreeModel *model;
char fname[200];
if (brushdontupdate) return;
......@@ -315,50 +309,47 @@ void selectbrush(GtkWidget *wg, GtkWidget *p)
return;
}
/* Argh! Doesn't work! WHY!? :-( */
/*
gtk_menu_set_active(GTK_MENU(brushdrawablemenu),0);
gtk_menu_item_select(GTK_MENU_ITEM(brushemptyitem));
gtk_widget_draw_default(brushdrawablemenu);
gtk_widget_bite_me(brushdrawablemenu);
*/
if(!p) return;
h = GTK_LIST(p)->selection;
if(!h) return;
tmpw = h->data;
if(!tmpw) return;
l = (gchar *) gtk_label_get_text(GTK_LABEL(GTK_BIN(tmpw)->child));
if (oldl && strcmp(oldl, l)) {
brushdontupdate = TRUE;
gtk_adjustment_set_value(GTK_ADJUSTMENT(brushgammaadjust), 1.0);
gtk_adjustment_set_value(GTK_ADJUSTMENT(brushaspectadjust), 0.0);
brushdontupdate = FALSE;
}
oldl = l;
if (gtk_tree_selection_get_selected (selection, &model, &iter))
{
gchar *brush;
gtk_tree_model_get (model, &iter, 0, &brush, -1);
brushdontupdate = TRUE;
gtk_adjustment_set_value(GTK_ADJUSTMENT(brushgammaadjust), 1.0);
gtk_adjustment_set_value(GTK_ADJUSTMENT(brushaspectadjust), 0.0);
brushdontupdate = FALSE;
sprintf(fname, "Brushes/%s", l);
strcpy(pcvals.selectedbrush, fname);
sprintf(fname, "Brushes/%s", brush);
strcpy(pcvals.selectedbrush, fname);
updatebrushprev(fname);
updatebrushprev(fname);
g_free (brush);
}
}
static void selectbrushfile(GtkWidget *wg, GtkWidget *p)
static void selectbrushfile(GtkTreeSelection *selection, gpointer data)
{
brushfile = 1;
if(GTK_IS_WIDGET(presetsavebutton))
gtk_widget_set_sensitive(GTK_WIDGET(presetsavebutton), TRUE);
selectbrush(wg,p);
gtk_widget_set_sensitive (presetsavebutton, TRUE);
selectbrush (selection, NULL);
}
static void brushaspectadjust_cb(GtkWidget *w, gpointer data)
{
gimp_double_adjustment_update (GTK_ADJUSTMENT(w), data);
updatebrushprev (pcvals.selectedbrush);
}
void create_brushpage(GtkNotebook *notebook)
{
GtkWidget *box1, *box2, *box3, *thispage;
GtkWidget *scrolled_win, *list;
GtkWidget *view;
GtkWidget *tmpw, *table;
GtkWidget *dmenu;
GtkWidget *label;
GtkTreeSelection *selection;
label = gtk_label_new_with_mnemonic (_("_Brush"));
......@@ -370,22 +361,10 @@ void create_brushpage(GtkNotebook *notebook)
gtk_box_pack_start(GTK_BOX(thispage), box1, TRUE,TRUE,0);
gtk_widget_show (box1);
scrolled_win = gtk_scrolled_window_new (NULL, NULL);
gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win),
GTK_POLICY_AUTOMATIC,
GTK_POLICY_AUTOMATIC);
gtk_box_pack_start (GTK_BOX (box1), scrolled_win, FALSE, FALSE, 0);
gtk_widget_show (scrolled_win);
gtk_widget_set_size_request(scrolled_win, 150,-1);
brushlist = list = gtk_list_new ();
gtk_list_set_selection_mode (GTK_LIST (list), GTK_SELECTION_BROWSE);
gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win),
list);
gtk_widget_show (list);
readdirintolist("Brushes", list, pcvals.selectedbrush);
view = createonecolumnlist (box1, selectbrushfile);
brushlist = view;
brushstore = GTK_LIST_STORE (gtk_tree_view_get_model (GTK_TREE_VIEW (view)));
selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (view));
box2 = gtk_vbox_new (FALSE, 0);
gtk_box_pack_start(GTK_BOX(box1), box2,FALSE,FALSE,0);
......@@ -405,16 +384,17 @@ void create_brushpage(GtkNotebook *notebook)
gtk_box_pack_start(GTK_BOX(box2), tmpw,FALSE,FALSE,0);
gtk_widget_show (tmpw);
brushgammaadjust = gtk_adjustment_new(pcvals.brushgamma, 0.5, 3.0, 0.1, 0.1, 1.0);
brushgammaadjust = gtk_adjustment_new(pcvals.brushgamma, 0.5, 3.0, 0.1,
0.1, 1.0);
tmpw = gtk_hscale_new(GTK_ADJUSTMENT(brushgammaadjust));
gtk_widget_set_size_request (GTK_WIDGET(tmpw), 100, 30);
gtk_scale_set_draw_value (GTK_SCALE (tmpw), FALSE);
gtk_scale_set_digits(GTK_SCALE (tmpw), 2);
gtk_box_pack_start (GTK_BOX (box2), tmpw, FALSE, FALSE, 0);
gtk_widget_show (tmpw);
g_signal_connect(G_OBJECT(brushgammaadjust), "value_changed",
G_CALLBACK(selectbrush),
list);
g_signal_connect_swapped (G_OBJECT(brushgammaadjust), "value_changed",
G_CALLBACK(updatebrushprev), pcvals.selectedbrush);
gtk_tooltips_set_tip(GTK_TOOLTIPS(tooltips), tmpw, _("Changes the gamma (brightness) of the selected brush"), NULL);
box1 = gtk_hbox_new (FALSE, 0);
......@@ -469,8 +449,7 @@ void create_brushpage(GtkNotebook *notebook)
_("Specifies the aspect ratio of the brush"),
NULL);
g_signal_connect (brushaspectadjust, "value_changed",
G_CALLBACK (gimp_double_adjustment_update),
&pcvals.brushaspect);
G_CALLBACK (brushaspectadjust_cb), &pcvals.brushaspect);
brushreliefadjust =
gimp_scale_entry_new (GTK_TABLE(table), 0, 1,
......@@ -484,12 +463,8 @@ void create_brushpage(GtkNotebook *notebook)
G_CALLBACK (gimp_double_adjustment_update),
&pcvals.brushrelief);
g_signal_connect (G_OBJECT(list), "selection_changed",