gtk_container_add(GTK_CONTAINER(fs->window), fs->imd->widget);
- /* set background to black */
- if (BLACK_BACKGROUND)
+ if (user_specified_window_background)
{
- image_background_set_black(fs->imd, TRUE);
+ image_background_set_color(fs->imd, &window_background_color);
}
image_set_delay_flip(fs->imd, fullscreen_clean_flip);
#define FULL_SCREEN_HIDE_MOUSE_DELAY 3000
#define FULL_SCREEN_BUSY_MOUSE_DELAY 200
-#define BLACK_BACKGROUND 1
FullScreenData *fullscreen_start(GtkWidget *window, ImageWindow *imd,
gint place_dialogs_under_mouse = FALSE;
-gint black_window_background = FALSE;
+gint user_specified_window_background = FALSE;
+GdkColor window_background_color = {0, 0, 0, 0};
gint fullscreen_screen = -1;
gint fullscreen_clean_flip = FALSE;
extern gint mousewheel_scrolls;
extern gint enable_in_place_rename;
-extern gint black_window_background;
+extern gint user_specified_window_background;
+extern GdkColor window_background_color;
extern gint fullscreen_screen;
extern gint fullscreen_clean_flip;
g_object_set(G_OBJECT(imd->pr), "window_fit", allow_sync, NULL);
}
-void image_background_set_black(ImageWindow *imd, gint black)
-{
- pixbuf_renderer_set_black((PixbufRenderer *)imd->pr, black);
-}
-
void image_background_set_color(ImageWindow *imd, GdkColor *color)
{
pixbuf_renderer_set_color((PixbufRenderer *)imd->pr, color);
void image_top_window_set_sync(ImageWindow *imd, gint allow_sync);
/* background of image */
-void image_background_set_black(ImageWindow *imd, gint black);
void image_background_set_color(ImageWindow *imd, GdkColor *color);
/* color profiles */
vw->imd = image_new(FALSE);
- if (black_window_background) image_background_set_black(vw->imd, TRUE);
+ image_background_set_color(vw->imd, user_specified_window_background ? &window_background_color : NULL);
image_attach_window(vw->imd, vw->window, NULL, "Geeqie", TRUE);
ViewWindow *vw = work->data;
work = work->next;
- image_background_set_black(vw->imd, black_window_background);
+ image_background_set_color(vw->imd, user_specified_window_background ? &window_background_color : NULL);
}
}
{
LayoutWindow *lw = work->data;
work = work->next;
-
- if (lw->image) image_background_set_black(lw->image, black_window_background);
+
+ if (!lw->image) continue;
+ image_background_set_color(lw->image, user_specified_window_background ? &window_background_color : NULL);
}
}
gtk_widget_ref(lw->split_images[i]->widget);
- if (black_window_background) image_background_set_black(lw->split_images[i], TRUE);
+ image_background_set_color(lw->split_images[i], user_specified_window_background ? &window_background_color : NULL);
image_auto_refresh(lw->split_images[i], 0);
widget = GTK_WIDGET(pr);
- style = gtk_style_copy(gtk_widget_get_style(widget));
- g_object_ref(G_OBJECT(style));
-
- if (color)
- {
+ if (color) {
GdkColor *slot;
+ style = gtk_style_copy(gtk_widget_get_style(widget));
slot = &style->bg[GTK_STATE_NORMAL];
slot->red = color->red;
slot->green = color->green;
slot->blue = color->blue;
}
+ else {
+ style = gtk_style_copy(gtk_widget_get_default_style());
+ }
gtk_widget_set_style(widget, style);
- g_object_unref(G_OBJECT(style));
if (GTK_WIDGET_VISIBLE(widget)) pr_border_clear(pr);
}
-void pixbuf_renderer_set_black(PixbufRenderer *pr, gint black)
-{
- GdkColor color = { 0, 0, 0, 0};
-
- pixbuf_renderer_set_color(pr, &color);
-}
-
/*
*-------------------------------------------------------------------
gint pixbuf_renderer_get_virtual_rect(PixbufRenderer *pr, GdkRectangle *rect);
/* background color */
-
void pixbuf_renderer_set_color(PixbufRenderer *pr, GdkColor *color);
-void pixbuf_renderer_set_black(PixbufRenderer *pr, gint black);
/* overlay */
static gint enable_read_ahead_c;
-static gint black_window_background_c;
+static gint user_specified_window_background_c;
+static GdkColor window_background_color_c;
static gint fullscreen_screen_c;
static gint fullscreen_clean_flip_c;
enable_read_ahead = enable_read_ahead_c;
- if (black_window_background != black_window_background_c)
+ if (user_specified_window_background != user_specified_window_background_c
+ || !gdk_color_equal(&window_background_color, &window_background_color_c))
{
- black_window_background = black_window_background_c;
-
+ user_specified_window_background = user_specified_window_background_c;
+ window_background_color = window_background_color_c;
layout_colors_update();
view_window_colors_update();
}
group = pref_group_new(vbox, FALSE, _("Appearance"), GTK_ORIENTATION_VERTICAL);
- pref_checkbox_new_int(group, _("Black background"),
- black_window_background, &black_window_background_c);
+ pref_checkbox_new_int(group, _("User specified background color"),
+ user_specified_window_background, &user_specified_window_background_c);
+
+ pref_colorbutton_new(group, _("Background color"), &window_background_color,
+ G_CALLBACK(pref_background_color_set_cb), &window_background_color_c);
group = pref_group_new(vbox, FALSE, _("Convenience"), GTK_ORIENTATION_VERTICAL);
return text;
}
+static void write_color_option(FILE *f, gchar *label, GdkColor *color)
+{
+ if (color)
+ {
+ gchar *colorstring = gdk_color_to_string (color);
+
+ fprintf(f,"%s: \"%s\"\n", label, colorstring);
+ g_free(colorstring);
+ }
+ else
+ fprintf(f,"%s: \n", label);
+}
+
+static GdkColor *read_color_option(FILE *f, gchar *option, gchar *label, gchar *value, GdkColor *color)
+{
+ if (strcasecmp(option, label) == 0)
+ {
+ gdk_color_parse(quoted_value(value), color);
+ }
+ return color;
+}
+
+
static void write_int_option(FILE *f, gchar *label, gint n)
{
fprintf(f,"%s: %d\n\n", label, n);
write_bool_option(f, "display_dialogs_under_mouse", place_dialogs_under_mouse);
- write_bool_option(f, "black_window_background", black_window_background);
+ write_bool_option(f, "user_specified_window_background", user_specified_window_background);
+ write_color_option(f, "window_background_color", &window_background_color);
write_int_option(f, "fullscreen_screen", fullscreen_screen);
write_bool_option(f, "fullscreen_clean_flip", fullscreen_clean_flip);
place_dialogs_under_mouse = read_bool_option(f, option,
"display_dialogs_under_mouse", value, place_dialogs_under_mouse);
- black_window_background = read_bool_option(f, option,
- "black_window_background", value, black_window_background);
+ user_specified_window_background = read_bool_option(f, option,
+ "user_specified_window_background", value, user_specified_window_background);
+ read_color_option(f, option,
+ "window_background_color", value, &window_background_color);
fullscreen_screen = read_int_option(f, option,
"fullscreen_screen", value, fullscreen_screen);
}
+void pref_background_color_set_cb(GtkWidget *widget, gpointer data)
+{
+ GdkColor *color = data;
+
+ gtk_color_button_get_color(GTK_COLOR_BUTTON(widget), color);
+}
+
+GtkWidget *pref_colorbutton_new(GtkWidget *parent_box,
+ const gchar *title, const GdkColor *color,
+ GCallback func, gpointer data)
+{
+ GtkWidget *button;
+
+ if (color)
+ {
+ button = gtk_color_button_new_with_color(color);
+ }
+ else
+ {
+ button = gtk_color_button_new();
+ }
+
+ if (func) g_signal_connect(G_OBJECT(button), "color-set", func, data);
+
+ if (title)
+ {
+ GtkWidget *label;
+ GtkWidget *hbox;
+
+ gtk_color_button_set_title(GTK_COLOR_BUTTON(button), title);
+ label = gtk_label_new(title);
+
+ hbox = gtk_hbox_new(TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(parent_box), hbox, TRUE, TRUE, 0);
+
+ gtk_box_pack_start(GTK_BOX(hbox), label, TRUE, TRUE, 0);
+ gtk_box_pack_start(GTK_BOX(hbox), button, TRUE, TRUE, 0);
+
+ gtk_widget_show_all(hbox);
+ }
+ else
+ {
+ gtk_widget_show(button);
+ }
+
+ return button;
+}
gint pref_list_string_get(const gchar *group, const gchar *key, const gchar **result);
+void pref_background_color_set_cb(GtkWidget *widget, gpointer data);
+GtkWidget *pref_colorbutton_new(GtkWidget *parent_box,
+ const gchar *title, const GdkColor *color,
+ GCallback func, gpointer data);
+
+
#endif