From 56294d30a82ec2da6f9ce399740c1ef65a9ddef4 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 27 Apr 2024 17:18:46 +0200 Subject: Adding upstream version 3.38.1. Signed-off-by: Daniel Baumann --- src/gs-progress-button.c | 87 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 src/gs-progress-button.c (limited to 'src/gs-progress-button.c') diff --git a/src/gs-progress-button.c b/src/gs-progress-button.c new file mode 100644 index 0000000..ee6a855 --- /dev/null +++ b/src/gs-progress-button.c @@ -0,0 +1,87 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: t; c-basic-offset: 8 -*- + * vi:set noexpandtab tabstop=8 shiftwidth=8: + * + * Copyright (C) 2013-2014 Richard Hughes + * Copyright (C) 2015 Kalev Lember + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include "config.h" + +#include "gs-app.h" +#include "gs-progress-button.h" + +struct _GsProgressButton +{ + GtkButton parent_instance; + + GtkCssProvider *css_provider; +}; + +G_DEFINE_TYPE (GsProgressButton, gs_progress_button, GTK_TYPE_BUTTON) + +void +gs_progress_button_set_progress (GsProgressButton *button, guint percentage) +{ + g_autofree gchar *css = NULL; + + if (percentage == GS_APP_PROGRESS_UNKNOWN) { + g_warning ("FIXME: Unknown progress handling is not yet implemented for GsProgressButton"); + percentage = 0; + } + + if (percentage == 0) + css = g_strdup (".install-progress { background-size: 0; }"); + else if (percentage == 100) + css = g_strdup (".install-progress { background-size: 100%; }"); + else + css = g_strdup_printf (".install-progress { background-size: %u%%; }", percentage); + + gtk_css_provider_load_from_data (button->css_provider, css, -1, NULL); +} + +void +gs_progress_button_set_show_progress (GsProgressButton *button, gboolean show_progress) +{ + GtkStyleContext *context; + + context = gtk_widget_get_style_context (GTK_WIDGET (button)); + if (show_progress) + gtk_style_context_add_class (context, "install-progress"); + else + gtk_style_context_remove_class (context, "install-progress"); +} + +static void +gs_progress_button_dispose (GObject *object) +{ + GsProgressButton *button = GS_PROGRESS_BUTTON (object); + + g_clear_object (&button->css_provider); + + G_OBJECT_CLASS (gs_progress_button_parent_class)->dispose (object); +} + +static void +gs_progress_button_init (GsProgressButton *button) +{ + button->css_provider = gtk_css_provider_new (); + gtk_style_context_add_provider (gtk_widget_get_style_context (GTK_WIDGET (button)), + GTK_STYLE_PROVIDER (button->css_provider), + GTK_STYLE_PROVIDER_PRIORITY_APPLICATION); +} + +static void +gs_progress_button_class_init (GsProgressButtonClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->dispose = gs_progress_button_dispose; +} + +GtkWidget * +gs_progress_button_new (void) +{ + return g_object_new (GS_TYPE_PROGRESS_BUTTON, NULL); +} -- cgit v1.2.3