summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEmmanuele Bassi <ebassi@gnome.org>2018-04-10 12:43:28 +0100
committerEmmanuele Bassi <ebassi@gnome.org>2018-05-08 09:16:53 +0100
commitbb54bc7d1412d65d29cf0ccf6910db83a5b33496 (patch)
treea771482361350ded987741f84a6e484a37501f3f
parent772c994fd08d02bd0eaab5e8adab0b14578a8a4b (diff)
downloadgtk+-devel-theme.tar.gz
Add a "devel" CSS theme for our demosdevel-theme
It's useful to know if you're running the demos from an unstable version of GTK+, so we should use a CSS fragment that updates the visual identity of gtk-demo and gtk-widget-factory depending on the version of GTK+ they are running against.
-rw-r--r--demos/gtk-demo/demo.gresource.xml1
-rw-r--r--demos/gtk-demo/main.c49
-rw-r--r--demos/gtk-demo/theme.css10
-rw-r--r--demos/widget-factory/widget-factory.c28
-rw-r--r--demos/widget-factory/widget-factory.css11
5 files changed, 99 insertions, 0 deletions
diff --git a/demos/gtk-demo/demo.gresource.xml b/demos/gtk-demo/demo.gresource.xml
index 0b6952d237..662afb3e9d 100644
--- a/demos/gtk-demo/demo.gresource.xml
+++ b/demos/gtk-demo/demo.gresource.xml
@@ -3,6 +3,7 @@
<gresource prefix="/ui">
<file preprocess="xml-stripblanks">main.ui</file>
<file preprocess="xml-stripblanks">appmenu.ui</file>
+ <file>theme.css</file>
</gresource>
<gresource prefix="/application_demo">
<file>application.c</file>
diff --git a/demos/gtk-demo/main.c b/demos/gtk-demo/main.c
index 98f730ae74..39b2d3a482 100644
--- a/demos/gtk-demo/main.c
+++ b/demos/gtk-demo/main.c
@@ -998,6 +998,41 @@ scrollbar_popup (GtkWidget *scrollbar, GtkWidget *menu)
}
static void
+settings__notify_gtk_theme_name (GObject *gobject,
+ GParamSpec *pspec,
+ gpointer data)
+{
+ static GtkCssProvider *css_provider;
+
+ GtkWidget *window = data;
+ char *theme_name;
+
+ g_object_get (gobject, "gtk-theme-name", &theme_name, NULL);
+ if (g_strcmp0 (theme_name, "Adwaita") == 0)
+ {
+ if (css_provider == NULL)
+ {
+ css_provider = gtk_css_provider_new ();
+ gtk_css_provider_load_from_resource (css_provider, "/ui/theme.css");
+ gtk_style_context_add_provider_for_display (gtk_widget_get_display (window),
+ GTK_STYLE_PROVIDER (css_provider),
+ GTK_STYLE_PROVIDER_PRIORITY_APPLICATION);
+ }
+ }
+ else
+ {
+ if (css_provider != NULL)
+ {
+ gtk_style_context_remove_provider_for_display (gtk_widget_get_display (window),
+ GTK_STYLE_PROVIDER (css_provider));
+ g_clear_object (&css_provider);
+ }
+ }
+
+ g_free (theme_name);
+}
+
+static void
activate (GApplication *app)
{
GtkBuilder *builder;
@@ -1029,6 +1064,20 @@ activate (GApplication *app)
win_entries, G_N_ELEMENTS (win_entries),
window);
+ g_signal_connect (gtk_settings_get_default (), "notify::gtk-theme-name",
+ G_CALLBACK (settings__notify_gtk_theme_name),
+ window);
+
+ if (gtk_get_minor_version () % 2 != 0)
+ {
+ GtkStyleContext *context = gtk_widget_get_style_context (GTK_WIDGET (window));
+ gtk_style_context_add_class (context, "devel");
+ }
+
+ settings__notify_gtk_theme_name (G_OBJECT (gtk_widget_get_settings (GTK_WIDGET (window))),
+ NULL,
+ window);
+
notebook = (GtkWidget *)gtk_builder_get_object (builder, "notebook");
info_view = (GtkWidget *)gtk_builder_get_object (builder, "info-textview");
diff --git a/demos/gtk-demo/theme.css b/demos/gtk-demo/theme.css
new file mode 100644
index 0000000000..6a4ad9f54d
--- /dev/null
+++ b/demos/gtk-demo/theme.css
@@ -0,0 +1,10 @@
+window.devel headerbar {
+ background: #cbd2d9 -gtk-icontheme("system-run-symbolic") 70% 0/64px 64px no-repeat, linear-gradient(to left, #a5b1bd 0%, #a5b1bd 8%, @theme_bg_color 25%);
+ box-shadow: inset 0 1px #f1f3f5;
+ border-color: #909fae;
+ color: rgba(46, 52, 54, 0.2);
+}
+
+window.devel headerbar label {
+ color: @theme_fg_color;
+}
diff --git a/demos/widget-factory/widget-factory.c b/demos/widget-factory/widget-factory.c
index 8b8e852dd5..acc8abd450 100644
--- a/demos/widget-factory/widget-factory.c
+++ b/demos/widget-factory/widget-factory.c
@@ -1606,6 +1606,27 @@ adjustment3_value_changed (GtkAdjustment *adj, GtkProgressBar *pbar)
}
static void
+settings__notify_gtk_theme_name (GObject *gobject,
+ GParamSpec *pspec,
+ gpointer data)
+{
+ GtkWidget *window = data;
+ char *theme_name = NULL;
+
+ g_object_get (gobject, "gtk-theme-name", &theme_name, NULL);
+
+ if (g_strcmp0 (theme_name, "Adwaita") == 0)
+ {
+ if (gtk_get_minor_version () % 2 != 0)
+ gtk_style_context_add_class (gtk_widget_get_style_context (window), "devel");
+ }
+ else
+ gtk_style_context_remove_class (gtk_widget_get_style_context (window), "devel");
+
+ g_free (theme_name);
+}
+
+static void
activate (GApplication *app)
{
GtkBuilder *builder;
@@ -1680,6 +1701,13 @@ activate (GApplication *app)
win_entries, G_N_ELEMENTS (win_entries),
window);
+ g_signal_connect (gtk_settings_get_default (), "notify::gtk-theme-name",
+ G_CALLBACK (settings__notify_gtk_theme_name),
+ window);
+ settings__notify_gtk_theme_name (G_OBJECT (gtk_settings_get_default ()),
+ NULL,
+ window);
+
for (i = 0; i < G_N_ELEMENTS (accels); i++)
gtk_application_set_accels_for_action (GTK_APPLICATION (app), accels[i].action_and_target, accels[i].accelerators);
diff --git a/demos/widget-factory/widget-factory.css b/demos/widget-factory/widget-factory.css
index 1674f189ac..dae614649c 100644
--- a/demos/widget-factory/widget-factory.css
+++ b/demos/widget-factory/widget-factory.css
@@ -24,3 +24,14 @@
.border-ridge {
border-width: 2px;
}
+
+window.devel headerbar {
+ background: #cbd2d9 -gtk-icontheme("system-run-symbolic") 70% 0/64px 64px no-repeat, linear-gradient(to left, #a5b1bd 0%, #a5b1bd 8%, @theme_bg_color 25%);
+ box-shadow: inset 0 1px #f1f3f5;
+ border-color: #909fae;
+ color: rgba(46, 52, 54, 0.2);
+}
+
+window.devel headerbar label {
+ color: @theme_fg_color;
+}