From 78e6e31dbde35a3f3dd4e95f2d8af90de2c17b1f Mon Sep 17 00:00:00 2001 From: Alexei Sorokin Date: Sun, 15 Jan 2017 18:24:34 +0300 Subject: avoid deprecated gdk_window_set_background functions Which are completely broken in GTK+ 3.22. Also remove some redundant separate Gtk2 code. --- src/mate-screensaver-preferences.c | 70 ++++++++++++++++++++++++++------------ 1 file changed, 49 insertions(+), 21 deletions(-) (limited to 'src/mate-screensaver-preferences.c') diff --git a/src/mate-screensaver-preferences.c b/src/mate-screensaver-preferences.c index 5dd0757..e1d167f 100644 --- a/src/mate-screensaver-preferences.c +++ b/src/mate-screensaver-preferences.c @@ -298,22 +298,6 @@ config_set_lock (gboolean lock) g_settings_set_boolean (screensaver_settings, KEY_LOCK, lock); } -static void -preview_clear (GtkWidget *widget) -{ -#if GTK_CHECK_VERSION (3, 0, 0) - GdkRGBA black = { 0.0, 0.0, 0.0, 1.0 }; - - gdk_window_set_background_rgba (gtk_widget_get_window (widget), &black); - gtk_widget_queue_draw (widget); -#else - GdkColor black = { 0, 0x0000, 0x0000, 0x0000 }; - - gtk_widget_modify_bg (widget, GTK_STATE_NORMAL, &black); - gdk_window_clear (gtk_widget_get_window (widget)); -#endif -} - static void job_set_theme (GSJob *job, const char *theme) @@ -337,6 +321,33 @@ job_set_theme (GSJob *job, } } +static gboolean +#if GTK_CHECK_VERSION (3, 0, 0) +preview_on_draw (GtkWidget *widget, + cairo_t *cr) +#else +preview_on_expose_event (GtkWidget *widget, + GdkEventExpose *event) +#endif +{ +#if !GTK_CHECK_VERSION (3, 0, 0) + GdkWindow *window = gtk_widget_get_window (widget); + cairo_t *cr = gdk_cairo_create (window); + +#endif + if (job == NULL || !gs_job_is_running (job)) + { + cairo_set_operator (cr, CAIRO_OPERATOR_OVER); + cairo_set_source_rgb (cr, 0, 0, 0); + cairo_paint (cr); + } + +#if !GTK_CHECK_VERSION (3, 0, 0) + cairo_destroy (cr); +#endif + return FALSE; +} + static void preview_set_theme (GtkWidget *widget, const char *theme, @@ -350,7 +361,7 @@ preview_set_theme (GtkWidget *widget, gs_job_stop (job); } - preview_clear (widget); + gtk_widget_queue_draw (widget); label = GTK_WIDGET (gtk_builder_get_object (builder, "fullscreen_preview_theme_label")); markup = g_markup_printf_escaped ("%s", name); @@ -1170,7 +1181,7 @@ fullscreen_preview_cancelled_cb (GtkWidget *button, gs_job_set_widget (job, preview_area); fullscreen_preview_area = GTK_WIDGET (gtk_builder_get_object (builder, "fullscreen_preview_area")); - preview_clear (fullscreen_preview_area); + gtk_widget_queue_draw (fullscreen_preview_area); fullscreen_preview_window = GTK_WIDGET (gtk_builder_get_object (builder, "fullscreen_preview_window")); gtk_widget_hide (fullscreen_preview_window); @@ -1200,7 +1211,7 @@ fullscreen_preview_start_cb (GtkWidget *widget, gtk_widget_grab_focus (fullscreen_preview_window); fullscreen_preview_area = GTK_WIDGET (gtk_builder_get_object (builder, "fullscreen_preview_area")); - preview_clear (fullscreen_preview_area); + gtk_widget_queue_draw (fullscreen_preview_area); gs_job_set_widget (job, fullscreen_preview_area); } @@ -1553,6 +1564,7 @@ init_capplet (void) GtkWidget *preview_button; GtkWidget *gpm_button; GtkWidget *fullscreen_preview_window; + GtkWidget *fullscreen_preview_area; GtkWidget *fullscreen_preview_previous; GtkWidget *fullscreen_preview_next; GtkWidget *fullscreen_preview_close; @@ -1601,7 +1613,7 @@ init_capplet (void) preview_button = GTK_WIDGET (gtk_builder_get_object (builder, "preview_button")); gpm_button = GTK_WIDGET (gtk_builder_get_object (builder, "gpm_button")); fullscreen_preview_window = GTK_WIDGET (gtk_builder_get_object (builder, "fullscreen_preview_window")); - GTK_WIDGET (gtk_builder_get_object (builder, "fullscreen_preview_area")); + fullscreen_preview_area = GTK_WIDGET (gtk_builder_get_object (builder, "fullscreen_preview_area")); fullscreen_preview_close = GTK_WIDGET (gtk_builder_get_object (builder, "fullscreen_preview_close")); fullscreen_preview_previous = GTK_WIDGET (gtk_builder_get_object (builder, "fullscreen_preview_previous_button")); fullscreen_preview_next = GTK_WIDGET (gtk_builder_get_object (builder, "fullscreen_preview_next_button")); @@ -1673,6 +1685,16 @@ init_capplet (void) gtk_window_set_icon_name (GTK_WINDOW (dialog), "preferences-desktop-screensaver"); gtk_window_set_icon_name (GTK_WINDOW (fullscreen_preview_window), "screensaver"); +#if GTK_CHECK_VERSION (3, 0, 0) + g_signal_connect (fullscreen_preview_area, + "draw", G_CALLBACK (preview_on_draw), + NULL); +#else + g_signal_connect (fullscreen_preview_area, + "expose-event", G_CALLBACK (preview_on_expose_event), + NULL); +#endif + gtk_drag_dest_set (dialog, GTK_DEST_DEFAULT_ALL, drop_types, G_N_ELEMENTS (drop_types), GDK_ACTION_COPY | GDK_ACTION_LINK | GDK_ACTION_MOVE); @@ -1695,7 +1717,13 @@ init_capplet (void) g_strfreev (list); } - preview_clear (preview); +#if GTK_CHECK_VERSION (3, 0, 0) + g_signal_connect (preview, "draw", G_CALLBACK (preview_on_draw), NULL); +#else + g_signal_connect (preview, + "expose-event", G_CALLBACK (preview_on_expose_event), + NULL); +#endif gs_job_set_widget (job, preview); if (check_is_root_user ()) -- cgit v1.2.1