summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>2021-11-09 12:12:23 -0300
committerGeorges Basile Stavracas Neto <georges.stavracas@gmail.com>2021-12-14 22:34:21 -0300
commitd9d670328b9ce527851773586131a0c9f96582cd (patch)
tree95e829eca85a90ddbff9b859453cb36eeb176a5e
parentddf6ca99528a9d7289565838b45b6dd6d26e2ca1 (diff)
downloadgnome-control-center-d9d670328b9ce527851773586131a0c9f96582cd.tar.gz
background: Port to GTK4
CcBackgroundPreview required some layout changes, but overall a pretty easy port.
-rw-r--r--meson.build1
-rw-r--r--panels/background/cc-background-chooser.c114
-rw-r--r--panels/background/cc-background-chooser.ui31
-rw-r--r--panels/background/cc-background-item.c21
-rw-r--r--panels/background/cc-background-item.h2
-rw-r--r--panels/background/cc-background-panel.ui16
-rw-r--r--panels/background/cc-background-preview.c110
-rw-r--r--panels/background/cc-background-preview.h2
-rw-r--r--panels/background/cc-background-preview.ui71
-rw-r--r--panels/background/meson.build6
-rw-r--r--panels/background/preview.css2
-rw-r--r--panels/meson.build2
-rw-r--r--shell/cc-panel-loader.c4
13 files changed, 154 insertions, 228 deletions
diff --git a/meson.build b/meson.build
index 69a9c68b4..af30e4ec3 100644
--- a/meson.build
+++ b/meson.build
@@ -114,6 +114,7 @@ gdk_pixbuf_dep = dependency('gdk-pixbuf-2.0', version: '>= 2.23.0')
gio_dep = dependency('gio-2.0')
glib_dep = dependency('glib-2.0', version: '>= 2.68.0')
gnome_desktop_dep = dependency('gnome-desktop-4')
+gnome_bg_dep = dependency('gnome-bg-4')
gnome_settings_dep = dependency('gnome-settings-daemon', version: '>= 3.27.90')
goa_dep = dependency('goa-1.0', version: goa_req_version)
gsettings_desktop_dep = dependency('gsettings-desktop-schemas', version: '>= 40.alpha')
diff --git a/panels/background/cc-background-chooser.c b/panels/background/cc-background-chooser.c
index 04fd85c47..14a812410 100644
--- a/panels/background/cc-background-chooser.c
+++ b/panels/background/cc-background-chooser.c
@@ -92,7 +92,7 @@ create_widget_func (gpointer model_item,
CcBackgroundItem *item;
GtkWidget *overlay;
GtkWidget *child;
- GtkWidget *image;
+ GtkWidget *picture;
GtkWidget *icon;
GtkWidget *button = NULL;
BgSource *source;
@@ -104,10 +104,10 @@ create_widget_func (gpointer model_item,
bg_source_get_thumbnail_width (source),
bg_source_get_thumbnail_height (source),
bg_source_get_scale_factor (source));
- image = gtk_image_new_from_gicon (G_ICON (pixbuf), GTK_ICON_SIZE_DIALOG);
- gtk_widget_show (image);
+ picture = gtk_picture_new_for_pixbuf (pixbuf);
+ gtk_picture_set_can_shrink (GTK_PICTURE (picture), FALSE);
- icon = gtk_image_new_from_icon_name("slideshow-emblem", GTK_ICON_SIZE_BUTTON);
+ icon = gtk_image_new_from_icon_name ("slideshow-emblem");
gtk_image_set_pixel_size (GTK_IMAGE (icon), 16);
gtk_widget_set_margin_start (icon, 8);
gtk_widget_set_margin_end (icon, 8);
@@ -116,22 +116,20 @@ create_widget_func (gpointer model_item,
gtk_widget_set_halign (icon, GTK_ALIGN_END);
gtk_widget_set_valign (icon, GTK_ALIGN_END);
gtk_widget_set_visible (icon, cc_background_item_changes_with_time (item));
- gtk_style_context_add_class (gtk_widget_get_style_context (icon), "slideshow-emblem");
-
+ gtk_widget_add_css_class (icon, "slideshow-emblem");
if (BG_IS_RECENT_SOURCE (source))
{
- button = gtk_button_new_from_icon_name ("window-close-symbolic", GTK_ICON_SIZE_BUTTON);
+ button = gtk_button_new_from_icon_name ("window-close-symbolic");
gtk_widget_set_halign (button, GTK_ALIGN_END);
gtk_widget_set_valign (button, GTK_ALIGN_START);
gtk_widget_set_margin_start (icon, 6);
gtk_widget_set_margin_end (icon, 6);
gtk_widget_set_margin_top (icon, 6);
gtk_widget_set_margin_bottom (icon, 6);
- gtk_widget_show (button);
- gtk_style_context_add_class (gtk_widget_get_style_context (button), "osd");
- gtk_style_context_add_class (gtk_widget_get_style_context (button), "remove-button");
+ gtk_widget_add_css_class (button, "osd");
+ gtk_widget_add_css_class (button, "remove-button");
g_signal_connect (button,
"clicked",
@@ -140,17 +138,15 @@ create_widget_func (gpointer model_item,
}
overlay = gtk_overlay_new ();
- gtk_container_add (GTK_CONTAINER (overlay), image);
+ gtk_overlay_set_child (GTK_OVERLAY (overlay), picture);
gtk_overlay_add_overlay (GTK_OVERLAY (overlay), icon);
if (button)
gtk_overlay_add_overlay (GTK_OVERLAY (overlay), button);
- gtk_widget_show (overlay);
- child = gtk_flow_box_child_new();
+ child = gtk_flow_box_child_new ();
gtk_widget_set_halign (child, GTK_ALIGN_CENTER);
gtk_widget_set_valign (child, GTK_ALIGN_CENTER);
- gtk_container_add (GTK_CONTAINER (child), overlay);
- gtk_widget_show (child);
+ gtk_flow_box_child_set_child (GTK_FLOW_BOX_CHILD (child), overlay);
g_object_set_data_full (G_OBJECT (child), "item", g_object_ref (item), g_object_unref);
@@ -218,67 +214,20 @@ on_file_chooser_response_cb (GtkDialog *filechooser,
{
if (response == GTK_RESPONSE_ACCEPT)
{
- g_autoptr(GSList) filenames = NULL;
- GSList *l;
+ g_autoptr(GListModel) files = NULL;
+ guint i;
- filenames = gtk_file_chooser_get_filenames (GTK_FILE_CHOOSER (filechooser));
- for (l = filenames; l != NULL; l = l->next)
+ files = gtk_file_chooser_get_files (GTK_FILE_CHOOSER (filechooser));
+ for (i = 0; i < g_list_model_get_n_items (files); i++)
{
- g_autofree gchar *filename = l->data;
+ g_autoptr(GFile) file = g_list_model_get_item (files, i);
+ g_autofree gchar *filename = g_file_get_path (file);
bg_recent_source_add_file (self->recent_source, filename);
}
}
- gtk_widget_destroy (GTK_WIDGET (filechooser));
-}
-
-static void
-on_file_chooser_selection_changed_cb (GtkFileChooser *chooser,
- GnomeDesktopThumbnailFactory *thumbnail_factory)
-{
- g_autofree gchar *uri = NULL;
-
- uri = gtk_file_chooser_get_uri (chooser);
-
- if (uri)
- {
- g_autoptr(GFileInfo) file_info = NULL;
- g_autoptr(GdkPixbuf) pixbuf = NULL;
- g_autofree gchar *mime_type = NULL;
- g_autoptr(GFile) file = NULL;
- GtkWidget *preview;
-
- preview = gtk_file_chooser_get_preview_widget (chooser);
-
- file = g_file_new_for_uri (uri);
- file_info = g_file_query_info (file,
- "standard::*",
- G_FILE_QUERY_INFO_NONE,
- NULL,
- NULL);
-
- if (file_info && g_file_info_get_file_type (file_info) != G_FILE_TYPE_DIRECTORY)
- mime_type = g_strdup (g_file_info_get_content_type (file_info));
-
- if (mime_type)
- {
- pixbuf = gnome_desktop_thumbnail_factory_generate_thumbnail (thumbnail_factory,
- uri,
- mime_type);
- }
-
- gtk_dialog_set_response_sensitive (GTK_DIALOG (chooser),
- GTK_RESPONSE_ACCEPT,
- pixbuf != NULL);
-
- if (pixbuf)
- gtk_image_set_from_pixbuf (GTK_IMAGE (preview), pixbuf);
- else
- gtk_image_set_from_icon_name (GTK_IMAGE (preview), "dialog-question", GTK_ICON_SIZE_DIALOG);
- }
-
- gtk_file_chooser_set_preview_widget_active (chooser, TRUE);
+ gtk_window_destroy (GTK_WINDOW (filechooser));
}
/* GObject overrides */
@@ -332,15 +281,14 @@ cc_background_chooser_init (CcBackgroundChooser *self)
void
cc_background_chooser_select_file (CcBackgroundChooser *self)
{
- g_autoptr(GnomeDesktopThumbnailFactory) factory = NULL;
+ g_autoptr(GFile) pictures_folder = NULL;
GtkFileFilter *filter;
GtkWidget *filechooser;
GtkWindow *toplevel;
- GtkWidget *preview;
g_return_if_fail (CC_IS_BACKGROUND_CHOOSER (self));
- toplevel = (GtkWindow*) gtk_widget_get_toplevel (GTK_WIDGET (self));
+ toplevel = (GtkWindow*) gtk_widget_get_native (GTK_WIDGET (self));
filechooser = gtk_file_chooser_dialog_new (_("Select a picture"),
toplevel,
GTK_FILE_CHOOSER_ACTION_OPEN,
@@ -349,30 +297,14 @@ cc_background_chooser_select_file (CcBackgroundChooser *self)
NULL);
gtk_window_set_modal (GTK_WINDOW (filechooser), TRUE);
- preview = gtk_image_new ();
- gtk_widget_set_size_request (preview, 154, -1);
- gtk_file_chooser_set_preview_widget (GTK_FILE_CHOOSER (filechooser), preview);
- gtk_file_chooser_set_use_preview_label (GTK_FILE_CHOOSER (filechooser), FALSE);
- gtk_file_chooser_set_select_multiple (GTK_FILE_CHOOSER (filechooser), TRUE);
- gtk_widget_show (preview);
-
- factory = gnome_desktop_thumbnail_factory_new (GNOME_DESKTOP_THUMBNAIL_SIZE_LARGE);
- g_signal_connect_after (filechooser,
- "selection-changed",
- G_CALLBACK (on_file_chooser_selection_changed_cb),
- factory);
-
- g_object_set_data_full (G_OBJECT (filechooser),
- "factory",
- g_object_ref (factory),
- g_object_unref);
-
filter = gtk_file_filter_new ();
gtk_file_filter_add_pixbuf_formats (filter);
gtk_file_chooser_set_filter (GTK_FILE_CHOOSER (filechooser), filter);
+ pictures_folder = g_file_new_for_path (g_get_user_special_dir (G_USER_DIRECTORY_PICTURES));
gtk_file_chooser_set_current_folder (GTK_FILE_CHOOSER (filechooser),
- g_get_user_special_dir (G_USER_DIRECTORY_PICTURES));
+ pictures_folder,
+ NULL);
g_signal_connect_object (filechooser,
"response",
diff --git a/panels/background/cc-background-chooser.ui b/panels/background/cc-background-chooser.ui
index aa7da281a..1609d4cab 100644
--- a/panels/background/cc-background-chooser.ui
+++ b/panels/background/cc-background-chooser.ui
@@ -1,31 +1,24 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<template class="CcBackgroundChooser" parent="GtkBox">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkSeparator">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
</object>
</child>
<child>
<object class="GtkScrolledWindow">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="expand">True</property>
- <property name="shadow-type">none</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
<property name="hscrollbar-policy">never</property>
<property name="vscrollbar-policy">automatic</property>
<child>
<object class="GtkBox">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
<property name="orientation">vertical</property>
- <property name="expand">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
<style>
<class name="view" />
</style>
@@ -33,15 +26,15 @@
<!-- Recent -->
<child>
<object class="GtkBox" id="recent_box">
- <property name="visible">True</property>
- <property name="can-focus">True</property>
<property name="orientation">vertical</property>
<property name="halign">center</property>
<child>
<object class="GtkFlowBox" id="recent_flowbox">
- <property name="visible">True</property>
- <property name="margin">12</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin-top">12</property>
+ <property name="margin-bottom">12</property>
<property name="column-spacing">12</property>
<property name="row-spacing">12</property>
<property name="homogeneous">True</property>
@@ -56,8 +49,6 @@
<child>
<object class="GtkSeparator">
- <property name="visible">True</property>
- <property name="can-focus">True</property>
<property name="margin-top">12</property>
<property name="margin-bottom">12</property>
</object>
@@ -68,8 +59,10 @@
<child>
<object class="GtkFlowBox" id="flowbox">
- <property name="visible">True</property>
- <property name="margin">12</property>
+ <property name="margin-start">12</property>
+ <property name="margin-end">12</property>
+ <property name="margin-top">12</property>
+ <property name="margin-bottom">12</property>
<property name="column-spacing">12</property>
<property name="row-spacing">12</property>
<property name="homogeneous">True</property>
diff --git a/panels/background/cc-background-item.c b/panels/background/cc-background-item.c
index cb6bea28d..b69a9d940 100644
--- a/panels/background/cc-background-item.c
+++ b/panels/background/cc-background-item.c
@@ -26,7 +26,7 @@
#include <gio/gio.h>
#include <glib/gi18n-lib.h>
-#include <libgnome-desktop/gnome-bg.h>
+#include <gnome-bg/gnome-bg.h>
#include <gdesktop-enums.h>
#include "cc-background-item.h"
@@ -156,11 +156,7 @@ render_at_size (GnomeBG *bg,
GdkPixbuf *pixbuf;
pixbuf = gdk_pixbuf_new (GDK_COLORSPACE_RGB, FALSE, 8, width, height);
-#ifdef GNOME_DESKTOP_BG_API_BREAK
gnome_bg_draw (bg, pixbuf);
-#else
- gnome_bg_draw (bg, pixbuf, gdk_screen_get_default (), FALSE);
-#endif
return pixbuf;
}
@@ -200,17 +196,28 @@ cc_background_item_get_frame_thumbnail (CcBackgroundItem *item,
*/
pixbuf = render_at_size (item->bg, width, height);
} else {
+ g_autoptr(GdkMonitor) monitor = NULL;
+ GdkDisplay *display;
+ GListModel *monitors;
+ GdkRectangle monitor_layout;
+
+
+ display = gdk_display_get_default ();
+ monitors = gdk_display_get_monitors (display);
+ monitor = g_list_model_get_item (monitors, 0);
+ gdk_monitor_get_geometry (monitor, &monitor_layout);
+
if (frame >= 0) {
pixbuf = gnome_bg_create_frame_thumbnail (item->bg,
thumbs,
- gdk_screen_get_default (),
+ &monitor_layout,
width,
height,
frame);
} else {
pixbuf = gnome_bg_create_thumbnail (item->bg,
thumbs,
- gdk_screen_get_default (),
+ &monitor_layout,
width,
height);
}
diff --git a/panels/background/cc-background-item.h b/panels/background/cc-background-item.h
index b7b8df628..9832d1e04 100644
--- a/panels/background/cc-background-item.h
+++ b/panels/background/cc-background-item.h
@@ -23,7 +23,7 @@
#include <gdk-pixbuf/gdk-pixbuf.h>
#include <libgnome-desktop/gnome-desktop-thumbnail.h>
#include <gdesktop-enums.h>
-#include <libgnome-desktop/gnome-bg.h>
+#include <gnome-bg/gnome-bg.h>
G_BEGIN_DECLS
diff --git a/panels/background/cc-background-panel.ui b/panels/background/cc-background-panel.ui
index 7b5c3d385..392decb12 100644
--- a/panels/background/cc-background-panel.ui
+++ b/panels/background/cc-background-panel.ui
@@ -2,23 +2,17 @@
<interface>
<!-- interface-requires gtk+ 3.0 -->
<template class="CcBackgroundPanel" parent="CcPanel">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
<child>
<object class="GtkBox">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
<property name="orientation">vertical</property>
<child>
- <object class="HdyClamp">
+ <object class="AdwClamp">
<property name="visible">1</property>
<property name="maximum_size">300</property>
<property name="tightening_threshold">200</property>
<child>
<object class="GtkBox">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
<property name="spacing">24</property>
<property name="margin-start">12</property>
<property name="margin-end">12</property>
@@ -27,8 +21,6 @@
<property name="hexpand">True</property>
<child>
<object class="CcBackgroundPreview" id="desktop_preview">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
<property name="valign">center</property>
</object>
</child>
@@ -39,9 +31,8 @@
<child>
<object class="CcBackgroundChooser" id="background_chooser">
- <property name="visible">True</property>
- <property name="can_focus">False</property>
- <property name="expand">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
<signal name="background-chosen" handler="on_chooser_background_chosen_cb" object="CcBackgroundPanel" swapped="yes" />
</object>
</child>
@@ -51,7 +42,6 @@
<!-- Header button -->
<object class="GtkButton" id="add_picture_button">
- <property name="visible">True</property>
<property name="label" translatable="yes">Add Picture…</property>
<signal name="clicked" handler="on_add_picture_button_clicked_cb" object="CcBackgroundPanel" swapped="yes" />
</object>
diff --git a/panels/background/cc-background-preview.c b/panels/background/cc-background-preview.c
index 9fef9be40..f87634612 100644
--- a/panels/background/cc-background-preview.c
+++ b/panels/background/cc-background-preview.c
@@ -24,7 +24,7 @@
struct _CcBackgroundPreview
{
- GtkBox parent;
+ GtkWidget parent;
GtkImage *animated_background_icon;
GtkLabel *desktop_clock_label;
@@ -32,6 +32,7 @@ struct _CcBackgroundPreview
GtkDrawingArea *drawing_area;
GtkFrame *lock_frame;
GtkLabel *lock_screen_label;
+ GtkWidget *overlay;
GtkStack *stack;
GnomeDesktopThumbnailFactory *thumbnail_factory;
@@ -45,7 +46,7 @@ struct _CcBackgroundPreview
gboolean is_24h_format;
};
-G_DEFINE_TYPE (CcBackgroundPreview, cc_background_preview, GTK_TYPE_BOX)
+G_DEFINE_TYPE (CcBackgroundPreview, cc_background_preview, GTK_TYPE_WIDGET)
enum
{
@@ -112,9 +113,9 @@ load_custom_css (CcBackgroundPreview *self)
/* use custom CSS */
provider = gtk_css_provider_new ();
gtk_css_provider_load_from_resource (provider, "/org/gnome/control-center/background/preview.css");
- gtk_style_context_add_provider_for_screen (gdk_screen_get_default (),
- GTK_STYLE_PROVIDER (provider),
- GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+ gtk_style_context_add_provider_for_display (gdk_display_get_default (),
+ GTK_STYLE_PROVIDER (provider),
+ GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
}
@@ -152,23 +153,25 @@ stop_monitor_time (CcBackgroundPreview *self)
/* Callbacks */
-static gboolean
-on_preview_draw_cb (CcBackgroundPreview *self,
- cairo_t *cr)
+static void
+draw_preview_func (GtkDrawingArea *drawing_area,
+ cairo_t *cr,
+ gint width,
+ gint height,
+ gpointer user_data)
{
+ CcBackgroundPreview *self = CC_BACKGROUND_PREVIEW (user_data);
g_autoptr(GdkPixbuf) pixbuf = NULL;
- GtkAllocation allocation;
gint scale_factor;
if (!self->item)
- return FALSE;
+ return;
- scale_factor = gtk_widget_get_scale_factor (GTK_WIDGET (self->drawing_area));
- gtk_widget_get_allocation (GTK_WIDGET (self->drawing_area), &allocation);
+ scale_factor = gtk_widget_get_scale_factor (GTK_WIDGET (drawing_area));
pixbuf = cc_background_item_get_frame_thumbnail (self->item,
self->thumbnail_factory,
- allocation.width,
- allocation.height,
+ width,
+ height,
scale_factor,
0,
TRUE);
@@ -176,13 +179,21 @@ on_preview_draw_cb (CcBackgroundPreview *self,
gdk_cairo_set_source_pixbuf (cr, pixbuf, 0, 0);
cairo_paint (cr);
-
- return TRUE;
}
/* GObject overrides */
static void
+cc_background_preview_dispose (GObject *object)
+{
+ CcBackgroundPreview *self = (CcBackgroundPreview *)object;
+
+ g_clear_pointer (&self->overlay, gtk_widget_unparent);
+
+ G_OBJECT_CLASS (cc_background_preview_parent_class)->dispose (object);
+}
+
+static void
cc_background_preview_finalize (GObject *object)
{
CcBackgroundPreview *self = (CcBackgroundPreview *)object;
@@ -256,16 +267,19 @@ static gfloat
get_primary_monitor_aspect_ratio (void)
{
GdkDisplay *display;
- GdkMonitor *primary_monitor;
+ GListModel *monitors;
gfloat aspect_ratio;
display = gdk_display_get_default ();
- primary_monitor = gdk_display_get_primary_monitor (display);
aspect_ratio = 16.0 / 9.0;
- if (primary_monitor)
+ monitors = gdk_display_get_monitors (display);
+ if (monitors)
{
+ g_autoptr(GdkMonitor) primary_monitor = NULL;
GdkRectangle monitor_layout;
+
+ primary_monitor = g_list_model_get_item (monitors, 0);
gdk_monitor_get_geometry (primary_monitor, &monitor_layout);
aspect_ratio = monitor_layout.width / (gfloat) monitor_layout.height;
}
@@ -274,25 +288,50 @@ get_primary_monitor_aspect_ratio (void)
}
static void
-cc_background_preview_get_preferred_height_for_width (GtkWidget *widget,
- gint width,
- gint *minimum,
- gint *natural)
+cc_background_preview_measure (GtkWidget *widget,
+ GtkOrientation orientation,
+ gint for_size,
+ gint *minimum,
+ gint *natural,
+ gint *minimum_baseline,
+ gint *natural_baseline)
{
- gfloat aspect_ratio = get_primary_monitor_aspect_ratio ();
+ CcBackgroundPreview *self = (CcBackgroundPreview *)widget;
+ gint child_min, child_nat;
+ gfloat aspect_ratio;
+
+ aspect_ratio = get_primary_monitor_aspect_ratio ();
+
+ gtk_widget_measure (self->overlay,
+ orientation,
+ for_size,
+ &child_min,
+ &child_nat,
+ NULL, NULL);
+
+ switch (orientation)
+ {
+ case GTK_ORIENTATION_HORIZONTAL:
+ *minimum = MAX (2, child_min * aspect_ratio);
+ *natural = MAX (2, child_nat * aspect_ratio);
+ break;
- *minimum = *natural = MAX (2, width / aspect_ratio);
+ case GTK_ORIENTATION_VERTICAL:
+ *minimum = MAX (2, for_size / aspect_ratio);
+ *natural = MAX (2, for_size / aspect_ratio);
+ break;
+ }
}
static void
-cc_background_preview_get_preferred_width_for_height (GtkWidget *widget,
- gint height,
- gint *minimum,
- gint *natural)
+cc_background_preview_size_allocate (GtkWidget *widget,
+ gint width,
+ gint height,
+ gint baseline)
{
- gfloat aspect_ratio = get_primary_monitor_aspect_ratio ();
+ CcBackgroundPreview *self = CC_BACKGROUND_PREVIEW (widget);
- *minimum = *natural = MAX (2, height * aspect_ratio);
+ gtk_widget_allocate (self->overlay, width, height, baseline, NULL);
}
static void
@@ -301,13 +340,14 @@ cc_background_preview_class_init (CcBackgroundPreviewClass *klass)
GObjectClass *object_class = G_OBJECT_CLASS (klass);
GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+ object_class->dispose = cc_background_preview_dispose;
object_class->finalize = cc_background_preview_finalize;
object_class->get_property = cc_background_preview_get_property;
object_class->set_property = cc_background_preview_set_property;
widget_class->get_request_mode = cc_background_preview_get_request_mode;
- widget_class->get_preferred_height_for_width = cc_background_preview_get_preferred_height_for_width;
- widget_class->get_preferred_width_for_height = cc_background_preview_get_preferred_width_for_height;
+ widget_class->measure = cc_background_preview_measure;
+ widget_class->size_allocate = cc_background_preview_size_allocate;
properties[PROP_IS_LOCK_SCREEN] = g_param_spec_boolean ("is-lock-screen",
"Lock screen",
@@ -331,9 +371,8 @@ cc_background_preview_class_init (CcBackgroundPreviewClass *klass)
gtk_widget_class_bind_template_child (widget_class, CcBackgroundPreview, drawing_area);
gtk_widget_class_bind_template_child (widget_class, CcBackgroundPreview, lock_frame);
gtk_widget_class_bind_template_child (widget_class, CcBackgroundPreview, lock_screen_label);
+ gtk_widget_class_bind_template_child (widget_class, CcBackgroundPreview, overlay);
gtk_widget_class_bind_template_child (widget_class, CcBackgroundPreview, stack);
-
- gtk_widget_class_bind_template_callback (widget_class, on_preview_draw_cb);
}
static void
@@ -376,6 +415,7 @@ cc_background_preview_set_item (CcBackgroundPreview *self,
gtk_widget_set_visible (GTK_WIDGET (self->animated_background_icon),
cc_background_item_changes_with_time (item));
+ gtk_drawing_area_set_draw_func (self->drawing_area, draw_preview_func, self, NULL);
gtk_widget_queue_draw (GTK_WIDGET (self->drawing_area));
g_object_notify_by_pspec (G_OBJECT (self), properties[PROP_ITEM]);
diff --git a/panels/background/cc-background-preview.h b/panels/background/cc-background-preview.h
index e8e20d49d..40393c042 100644
--- a/panels/background/cc-background-preview.h
+++ b/panels/background/cc-background-preview.h
@@ -27,7 +27,7 @@
G_BEGIN_DECLS
#define CC_TYPE_BACKGROUND_PREVIEW (cc_background_preview_get_type())
-G_DECLARE_FINAL_TYPE (CcBackgroundPreview, cc_background_preview, CC, BACKGROUND_PREVIEW, GtkBox)
+G_DECLARE_FINAL_TYPE (CcBackgroundPreview, cc_background_preview, CC, BACKGROUND_PREVIEW, GtkWidget)
CcBackgroundItem* cc_background_preview_get_item (CcBackgroundPreview *self);
void cc_background_preview_set_item (CcBackgroundPreview *self,
diff --git a/panels/background/cc-background-preview.ui b/panels/background/cc-background-preview.ui
index 30f7902ca..e747bf516 100644
--- a/panels/background/cc-background-preview.ui
+++ b/panels/background/cc-background-preview.ui
@@ -1,9 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<interface>
<!-- interface-requires gtk+ 3.0 -->
- <template class="CcBackgroundPreview" parent="GtkBox">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
+ <template class="CcBackgroundPreview" parent="GtkWidget">
<property name="hexpand">True</property>
<property name="vexpand">False</property>
<style>
@@ -11,94 +9,69 @@
</style>
<child>
- <object class="GtkOverlay">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="hexpand">True</property>
+ <object class="GtkOverlay" id="overlay">
+ <property name="hexpand">True</property>
<!-- Wallpaper -->
<child>
<object class="GtkDrawingArea" id="drawing_area">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="expand">True</property>
- <signal name="draw" handler="on_preview_draw_cb" object="CcBackgroundPreview" swapped="yes" />
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
</object>
</child>
<!-- Desktop / Lock Screen widgets -->
<child type="overlay">
<object class="GtkStack" id="stack">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="expand">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
<child>
<object class="GtkFrame" id="desktop_frame">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="shadow-type">none</property>
<property name="valign">start</property>
<style>
<class name="desktop-preview" />
</style>
<child>
- <object class="GtkBox">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
+ <object class="GtkCenterBox">
- <child>
+ <child type="start">
<object class="GtkLabel">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="label" translatable="yes">Activities</property>
+ <property name="label" translatable="yes">Activities</property>
</object>
</child>
<child type="center">
<object class="GtkLabel" id="desktop_clock_label">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- </object>
+ </object>
</child>
- <child>
+ <child type="end">
<object class="GtkBox">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="spacing">4</property>
+ <property name="spacing">4</property>
<child>
<object class="GtkImage">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="icon-name">network-wireless-symbolic</property>
+ <property name="icon-name">network-wireless-symbolic</property>
<property name="pixel-size">6</property>
</object>
</child>
<child>
<object class="GtkImage">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="icon-name">audio-volume-high-symbolic</property>
+ <property name="icon-name">audio-volume-high-symbolic</property>
<property name="pixel-size">6</property>
</object>
</child>
<child>
<object class="GtkImage">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="icon-name">battery-low-symbolic</property>
+ <property name="icon-name">battery-low-symbolic</property>
<property name="pixel-size">6</property>
</object>
</child>
</object>
- <packing>
- <property name="pack-type">end</property>
- </packing>
</child>
</object>
</child>
@@ -109,14 +82,10 @@
<child>
<object class="GtkFrame" id="lock_frame">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="shadow-type">none</property>
<child>
<object class="GtkLabel" id="lock_screen_label">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="expand">True</property>
+ <property name="hexpand">True</property>
+ <property name="vexpand">True</property>
<property name="xalign">0.5</property>
<property name="yalign">0.5</property>
</object>
@@ -132,9 +101,7 @@
<!-- Wallpaper -->
<child type="overlay">
<object class="GtkImage" id="animated_background_icon">
- <property name="visible">True</property>
- <property name="can-focus">False</property>
- <property name="halign">end</property>
+ <property name="halign">end</property>
<property name="valign">end</property>
<property name="margin-end">8</property>
<property name="margin-bottom">8</property>
diff --git a/panels/background/meson.build b/panels/background/meson.build
index eb5e9ec84..e96d020fd 100644
--- a/panels/background/meson.build
+++ b/panels/background/meson.build
@@ -88,7 +88,7 @@ sources = common_sources + files(
deps = common_deps + [
gdk_pixbuf_dep,
- gnome_desktop_dep,
+ gnome_bg_dep,
libxml_dep,
dependency('cairo-gobject'),
]
@@ -98,10 +98,6 @@ cflags += [
'-DGNOME_DESKTOP_USE_UNSTABLE_API'
]
-if gnome_desktop_dep.version().version_compare('>=3.35.4')
- cflags += '-DGNOME_DESKTOP_BG_API_BREAK'
-endif
-
panels_libs += static_library(
cappletname,
sources: sources,
diff --git a/panels/background/preview.css b/panels/background/preview.css
index c7416597f..2c9022f28 100644
--- a/panels/background/preview.css
+++ b/panels/background/preview.css
@@ -2,6 +2,7 @@ frame.desktop-preview {
min-height: 10px;
padding: 0 4px;
background-color: black;
+ border-radius: 0;
}
frame.desktop-preview image {
@@ -33,7 +34,6 @@ image.slideshow-icon {
button.remove-button {
border-radius: 9999px;
- -gtk-outline-radius: 9999px;
padding: 1px 0px; /* circles instead of ellipses */
background-origin: padding-box, border-box;
background-clip: padding-box, border-box;
diff --git a/panels/meson.build b/panels/meson.build
index f57bdbffa..5e318abc7 100644
--- a/panels/meson.build
+++ b/panels/meson.build
@@ -2,7 +2,7 @@ subdir('common')
panels = [
'applications',
-# 'background',
+ 'background',
'camera',
# 'color',
'datetime',
diff --git a/shell/cc-panel-loader.c b/shell/cc-panel-loader.c
index 643068752..bb6ed1dcc 100644
--- a/shell/cc-panel-loader.c
+++ b/shell/cc-panel-loader.c
@@ -32,7 +32,7 @@
/* Extension points */
extern GType cc_applications_panel_get_type (void);
-//extern GType cc_background_panel_get_type (void);
+extern GType cc_background_panel_get_type (void);
#ifdef BUILD_BLUETOOTH
extern GType cc_bluetooth_panel_get_type (void);
#endif /* BUILD_BLUETOOTH */
@@ -98,7 +98,7 @@ extern void cc_diagnostics_panel_static_init_func (void);
static CcPanelLoaderVtable default_panels[] =
{
PANEL_TYPE("applications", cc_applications_panel_get_type, NULL),
- //PANEL_TYPE("background", cc_background_panel_get_type, NULL),
+ PANEL_TYPE("background", cc_background_panel_get_type, NULL),
#ifdef BUILD_BLUETOOTH
PANEL_TYPE("bluetooth", cc_bluetooth_panel_get_type, NULL),
#endif