[gtk+/wip/gbsneto/edge-constraints-gtk4: 5/5] window: Add individual CSS classes based on edge constraints
- From: Georges Basile Stavracas Neto <gbsneto src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk+/wip/gbsneto/edge-constraints-gtk4: 5/5] window: Add individual CSS classes based on edge constraints
- Date: Sun, 17 Sep 2017 20:51:42 +0000 (UTC)
commit 735728df0d3adae09996cd7e9b128b8cd2f2aa0d
Author: Georges Basile Stavracas Neto <georges stavracas gmail com>
Date: Fri Aug 18 20:12:23 2017 -0300
window: Add individual CSS classes based on edge constraints
The last touch on this patch series is making GtkWindow able to
selectively adjust various UI details based on the different
tiled edges. The main driver here is that we don't want to show
shadows on edges that are constrained.
This patch adds the necessary code to do that, while still
maintaining compatibility with the old ways.
https://bugzilla.gnome.org/show_bug.cgi?id=783669
gtk/gtkwindow.c | 42 +++++++++++++++++++++++++++---
gtk/theme/Adwaita/_common.scss | 16 ++++++++++-
gtk/theme/Adwaita/gtk-contained-dark.css | 6 ++--
gtk/theme/Adwaita/gtk-contained.css | 6 ++--
4 files changed, 58 insertions(+), 12 deletions(-)
---
diff --git a/gtk/gtkwindow.c b/gtk/gtkwindow.c
index d2af718..7e9c832 100644
--- a/gtk/gtkwindow.c
+++ b/gtk/gtkwindow.c
@@ -6919,13 +6919,40 @@ update_window_style_classes (GtkWindow *window)
{
GtkWindowPrivate *priv = window->priv;
GtkStyleContext *context;
+ guint edge_constraints;
context = gtk_widget_get_style_context (GTK_WIDGET (window));
+ edge_constraints = priv->edge_constraints;
- if (priv->tiled)
- gtk_style_context_add_class (context, "tiled");
+ if (!priv->edge_constraints)
+ {
+ if (priv->tiled)
+ gtk_style_context_add_class (context, "tiled");
+ else
+ gtk_style_context_remove_class (context, "tiled");
+ }
else
- gtk_style_context_remove_class (context, "tiled");
+ {
+ if (edge_constraints & GDK_WINDOW_STATE_TOP_TILED)
+ gtk_style_context_add_class (context, "tiled-top");
+ else
+ gtk_style_context_remove_class (context, "tiled-top");
+
+ if (edge_constraints & GDK_WINDOW_STATE_RIGHT_TILED)
+ gtk_style_context_add_class (context, "tiled-right");
+ else
+ gtk_style_context_remove_class (context, "tiled-right");
+
+ if (edge_constraints & GDK_WINDOW_STATE_BOTTOM_TILED)
+ gtk_style_context_add_class (context, "tiled-bottom");
+ else
+ gtk_style_context_remove_class (context, "tiled-bottom");
+
+ if (edge_constraints & GDK_WINDOW_STATE_LEFT_TILED)
+ gtk_style_context_add_class (context, "tiled-left");
+ else
+ gtk_style_context_remove_class (context, "tiled-left");
+ }
if (priv->maximized)
gtk_style_context_add_class (context, "maximized");
@@ -7191,7 +7218,14 @@ gtk_window_state_event (GtkWidget *widget,
update_edge_constraints (window, event);
- if (event->changed_mask & (GDK_WINDOW_STATE_FULLSCREEN | GDK_WINDOW_STATE_MAXIMIZED |
GDK_WINDOW_STATE_TILED))
+ if (event->changed_mask & (GDK_WINDOW_STATE_FULLSCREEN |
+ GDK_WINDOW_STATE_MAXIMIZED |
+ GDK_WINDOW_STATE_TILED |
+ GDK_WINDOW_STATE_TOP_TILED |
+ GDK_WINDOW_STATE_TOP_TILED |
+ GDK_WINDOW_STATE_RIGHT_TILED |
+ GDK_WINDOW_STATE_BOTTOM_TILED |
+ GDK_WINDOW_STATE_LEFT_TILED))
{
update_window_style_classes (window);
update_window_buttons (window);
diff --git a/gtk/theme/Adwaita/_common.scss b/gtk/theme/Adwaita/_common.scss
index 4901c1f..3cf7274 100644
--- a/gtk/theme/Adwaita/_common.scss
+++ b/gtk/theme/Adwaita/_common.scss
@@ -1557,6 +1557,10 @@ headerbar {
// squared corners when the window is maximized, tiled, or fullscreen
.tiled &,
+ .tiled-top &,
+ .tiled-left &,
+ .tiled-right &,
+ .tiled-bottom &,
.maximized &,
.fullscreen & {
&:backdrop, & {
@@ -1604,7 +1608,11 @@ headerbar {
}
}
-.background:not(.tiled):not(.maximized):not(.solid-csd) .titlebar {
+.background:not(.tiled):not(.maximized):not(.solid-csd) .titlebar,
+.background:not(.tiled-top):not(.maximized):not(.solid-csd) .titlebar,
+.background:not(.tiled-left):not(.maximized):not(.solid-csd) .titlebar,
+.background:not(.tiled-right):not(.maximized):not(.solid-csd) .titlebar,
+.background:not(.tiled-bottom):not(.maximized):not(.solid-csd) .titlebar {
&:backdrop, & {
border-top-left-radius: 7px;
border-top-right-radius: 7px;
@@ -4236,7 +4244,11 @@ decoration {
.maximized &,
.fullscreen &,
- .tiled & { border-radius: 0; }
+ .tiled &,
+ .tiled-top &,
+ .tiled-left &,
+ .tiled-right &,
+ .tiled-bottom & { border-radius: 0; }
.popup & { box-shadow: none; }
diff --git a/gtk/theme/Adwaita/gtk-contained-dark.css b/gtk/theme/Adwaita/gtk-contained-dark.css
index 70db241..d7010c8 100644
--- a/gtk/theme/Adwaita/gtk-contained-dark.css
+++ b/gtk/theme/Adwaita/gtk-contained-dark.css
@@ -650,7 +650,7 @@ searchbar, .location-bar { border-width: 0 0 1px; padding: 3px; }
.selection-mode.titlebar:not(headerbar) .selection-menu:backdrop .arrow,
.selection-mode.titlebar:not(headerbar) .selection-menu .arrow, headerbar.selection-mode
.selection-menu:backdrop .arrow, headerbar.selection-mode .selection-menu .arrow { -gtk-icon-source:
-gtk-icontheme("pan-down-symbolic"); color: rgba(255, 255, 255, 0.5); -gtk-icon-shadow: none; }
-.tiled .titlebar:backdrop:not(headerbar), .tiled .titlebar:not(headerbar), .maximized
.titlebar:backdrop:not(headerbar), .maximized .titlebar:not(headerbar), .fullscreen
.titlebar:backdrop:not(headerbar), .fullscreen .titlebar:not(headerbar), .tiled headerbar:backdrop, .tiled
headerbar, .maximized headerbar:backdrop, .maximized headerbar, .fullscreen headerbar:backdrop, .fullscreen
headerbar { border-radius: 0; }
+.tiled .titlebar:backdrop:not(headerbar), .tiled .titlebar:not(headerbar), .tiled-top
.titlebar:backdrop:not(headerbar), .tiled-top .titlebar:not(headerbar), .tiled-left
.titlebar:backdrop:not(headerbar), .tiled-left .titlebar:not(headerbar), .tiled-right
.titlebar:backdrop:not(headerbar), .tiled-right .titlebar:not(headerbar), .tiled-bottom
.titlebar:backdrop:not(headerbar), .tiled-bottom .titlebar:not(headerbar), .maximized
.titlebar:backdrop:not(headerbar), .maximized .titlebar:not(headerbar), .fullscreen
.titlebar:backdrop:not(headerbar), .fullscreen .titlebar:not(headerbar), .tiled headerbar:backdrop, .tiled
headerbar, .tiled-top headerbar:backdrop, .tiled-top headerbar, .tiled-left headerbar:backdrop, .tiled-left
headerbar, .tiled-right headerbar:backdrop, .tiled-right headerbar, .tiled-bottom headerbar:backdrop,
.tiled-bottom headerbar, .maximized headerbar:backdrop, .maximized headerbar, .fullscreen headerbar:backdrop,
.fullscreen headerbar { border-radius: 0; }
.default-decoration.titlebar:not(headerbar), headerbar.default-decoration { min-height: 28px; padding: 4px; }
@@ -662,7 +662,7 @@ headerbar entry, headerbar spinbutton, headerbar separator, headerbar button { m
headerbar switch { margin-top: 9px; margin-bottom: 9px; }
-.background:not(.tiled):not(.maximized):not(.solid-csd) .titlebar:backdrop,
.background:not(.tiled):not(.maximized):not(.solid-csd) .titlebar { border-top-left-radius: 7px;
border-top-right-radius: 7px; }
+.background:not(.tiled):not(.maximized):not(.solid-csd) .titlebar:backdrop,
.background:not(.tiled):not(.maximized):not(.solid-csd) .titlebar,
.background:not(.tiled-top):not(.maximized):not(.solid-csd) .titlebar:backdrop,
.background:not(.tiled-top):not(.maximized):not(.solid-csd) .titlebar,
.background:not(.tiled-left):not(.maximized):not(.solid-csd) .titlebar:backdrop,
.background:not(.tiled-left):not(.maximized):not(.solid-csd) .titlebar,
.background:not(.tiled-right):not(.maximized):not(.solid-csd) .titlebar:backdrop,
.background:not(.tiled-right):not(.maximized):not(.solid-csd) .titlebar,
.background:not(.tiled-bottom):not(.maximized):not(.solid-csd) .titlebar:backdrop,
.background:not(.tiled-bottom):not(.maximized):not(.solid-csd) .titlebar { border-top-left-radius: 7px;
border-top-right-radius: 7px; }
window:not(.tiled):not(.maximized):not(.fullscreen):not(.solid-csd) separator:first-child +
headerbar:backdrop, window:not(.tiled):not(.maximized):not(.fullscreen):not(.solid-csd) separator:first-child
+ headerbar, window:not(.tiled):not(.maximized):not(.fullscreen):not(.solid-csd)
headerbar:first-child:backdrop, window:not(.tiled):not(.maximized):not(.fullscreen):not(.solid-csd)
headerbar:first-child { border-top-left-radius: 7px; }
@@ -1828,7 +1828,7 @@ decoration { border-radius: 7px 7px 0 0; border-width: 0px; box-shadow: 0 3px 9p
decoration:backdrop { box-shadow: 0 3px 9px 1px transparent, 0 2px 6px 2px rgba(0, 0, 0, 0.2), 0 0 0 1px
rgba(27, 31, 32, 0.9); transition: 200ms ease-out; }
-.maximized decoration, .fullscreen decoration, .tiled decoration { border-radius: 0; }
+.maximized decoration, .fullscreen decoration, .tiled decoration, .tiled-top decoration, .tiled-left
decoration, .tiled-right decoration, .tiled-bottom decoration { border-radius: 0; }
.popup decoration { box-shadow: none; }
diff --git a/gtk/theme/Adwaita/gtk-contained.css b/gtk/theme/Adwaita/gtk-contained.css
index 1bed44a..a5f18f3 100644
--- a/gtk/theme/Adwaita/gtk-contained.css
+++ b/gtk/theme/Adwaita/gtk-contained.css
@@ -658,7 +658,7 @@ searchbar, .location-bar { border-width: 0 0 1px; padding: 3px; }
.selection-mode.titlebar:not(headerbar) .selection-menu:backdrop .arrow,
.selection-mode.titlebar:not(headerbar) .selection-menu .arrow, headerbar.selection-mode
.selection-menu:backdrop .arrow, headerbar.selection-mode .selection-menu .arrow { -gtk-icon-source:
-gtk-icontheme("pan-down-symbolic"); color: rgba(255, 255, 255, 0.5); -gtk-icon-shadow: none; }
-.tiled .titlebar:backdrop:not(headerbar), .tiled .titlebar:not(headerbar), .maximized
.titlebar:backdrop:not(headerbar), .maximized .titlebar:not(headerbar), .fullscreen
.titlebar:backdrop:not(headerbar), .fullscreen .titlebar:not(headerbar), .tiled headerbar:backdrop, .tiled
headerbar, .maximized headerbar:backdrop, .maximized headerbar, .fullscreen headerbar:backdrop, .fullscreen
headerbar { border-radius: 0; }
+.tiled .titlebar:backdrop:not(headerbar), .tiled .titlebar:not(headerbar), .tiled-top
.titlebar:backdrop:not(headerbar), .tiled-top .titlebar:not(headerbar), .tiled-left
.titlebar:backdrop:not(headerbar), .tiled-left .titlebar:not(headerbar), .tiled-right
.titlebar:backdrop:not(headerbar), .tiled-right .titlebar:not(headerbar), .tiled-bottom
.titlebar:backdrop:not(headerbar), .tiled-bottom .titlebar:not(headerbar), .maximized
.titlebar:backdrop:not(headerbar), .maximized .titlebar:not(headerbar), .fullscreen
.titlebar:backdrop:not(headerbar), .fullscreen .titlebar:not(headerbar), .tiled headerbar:backdrop, .tiled
headerbar, .tiled-top headerbar:backdrop, .tiled-top headerbar, .tiled-left headerbar:backdrop, .tiled-left
headerbar, .tiled-right headerbar:backdrop, .tiled-right headerbar, .tiled-bottom headerbar:backdrop,
.tiled-bottom headerbar, .maximized headerbar:backdrop, .maximized headerbar, .fullscreen headerbar:backdrop,
.fullscreen headerbar { border-radius: 0; }
.default-decoration.titlebar:not(headerbar), headerbar.default-decoration { min-height: 28px; padding: 4px; }
@@ -670,7 +670,7 @@ headerbar entry, headerbar spinbutton, headerbar separator, headerbar button { m
headerbar switch { margin-top: 9px; margin-bottom: 9px; }
-.background:not(.tiled):not(.maximized):not(.solid-csd) .titlebar:backdrop,
.background:not(.tiled):not(.maximized):not(.solid-csd) .titlebar { border-top-left-radius: 7px;
border-top-right-radius: 7px; }
+.background:not(.tiled):not(.maximized):not(.solid-csd) .titlebar:backdrop,
.background:not(.tiled):not(.maximized):not(.solid-csd) .titlebar,
.background:not(.tiled-top):not(.maximized):not(.solid-csd) .titlebar:backdrop,
.background:not(.tiled-top):not(.maximized):not(.solid-csd) .titlebar,
.background:not(.tiled-left):not(.maximized):not(.solid-csd) .titlebar:backdrop,
.background:not(.tiled-left):not(.maximized):not(.solid-csd) .titlebar,
.background:not(.tiled-right):not(.maximized):not(.solid-csd) .titlebar:backdrop,
.background:not(.tiled-right):not(.maximized):not(.solid-csd) .titlebar,
.background:not(.tiled-bottom):not(.maximized):not(.solid-csd) .titlebar:backdrop,
.background:not(.tiled-bottom):not(.maximized):not(.solid-csd) .titlebar { border-top-left-radius: 7px;
border-top-right-radius: 7px; }
window:not(.tiled):not(.maximized):not(.fullscreen):not(.solid-csd) separator:first-child +
headerbar:backdrop, window:not(.tiled):not(.maximized):not(.fullscreen):not(.solid-csd) separator:first-child
+ headerbar, window:not(.tiled):not(.maximized):not(.fullscreen):not(.solid-csd)
headerbar:first-child:backdrop, window:not(.tiled):not(.maximized):not(.fullscreen):not(.solid-csd)
headerbar:first-child { border-top-left-radius: 7px; }
@@ -1848,7 +1848,7 @@ decoration { border-radius: 7px 7px 0 0; border-width: 0px; box-shadow: 0 3px 9p
decoration:backdrop { box-shadow: 0 3px 9px 1px transparent, 0 2px 6px 2px rgba(0, 0, 0, 0.2), 0 0 0 1px
rgba(0, 0, 0, 0.18); transition: 200ms ease-out; }
-.maximized decoration, .fullscreen decoration, .tiled decoration { border-radius: 0; }
+.maximized decoration, .fullscreen decoration, .tiled decoration, .tiled-top decoration, .tiled-left
decoration, .tiled-right decoration, .tiled-bottom decoration { border-radius: 0; }
.popup decoration { box-shadow: none; }
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]