mirror of
https://github.com/ZoiteChat/zoitechat.git
synced 2026-03-15 10:10:19 +00:00
Compare commits
7 Commits
theme-test
...
zoitechat-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b9bd0ed61c | ||
| 1f33ed8034 | |||
|
|
38f38cd2c4 | ||
| 71478a0262 | |||
|
|
f76f2cd94c | ||
| 183b134817 | |||
| 6a7d2012a5 |
68
.github/workflows/theme-tests.yml
vendored
68
.github/workflows/theme-tests.yml
vendored
@@ -1,68 +0,0 @@
|
||||
name: Theme Tests
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [master, main]
|
||||
paths:
|
||||
- '.github/workflows/theme-tests.yml'
|
||||
- 'meson.build'
|
||||
- 'meson_options.txt'
|
||||
- 'src/common/**'
|
||||
- 'src/fe-gtk/meson.build'
|
||||
- 'src/fe-gtk/theme/**'
|
||||
pull_request:
|
||||
branches: [master, main]
|
||||
paths:
|
||||
- '.github/workflows/theme-tests.yml'
|
||||
- 'meson.build'
|
||||
- 'meson_options.txt'
|
||||
- 'src/common/**'
|
||||
- 'src/fe-gtk/meson.build'
|
||||
- 'src/fe-gtk/theme/**'
|
||||
workflow_dispatch:
|
||||
|
||||
permissions:
|
||||
contents: read
|
||||
|
||||
jobs:
|
||||
theme_tests:
|
||||
runs-on: ubuntu-22.04
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v5
|
||||
with:
|
||||
submodules: true
|
||||
|
||||
- name: Install dependencies
|
||||
run: |
|
||||
set -eux
|
||||
sudo apt-get update
|
||||
sudo apt-get install -y --no-install-recommends \
|
||||
build-essential \
|
||||
meson \
|
||||
ninja-build \
|
||||
pkg-config \
|
||||
gettext \
|
||||
libgtk-3-dev \
|
||||
libglib2.0-dev \
|
||||
libdbus-glib-1-dev \
|
||||
libcanberra-dev \
|
||||
libarchive-dev \
|
||||
libssl-dev \
|
||||
xvfb
|
||||
|
||||
- name: Configure
|
||||
run: |
|
||||
set -eux
|
||||
meson setup build-theme-tests \
|
||||
-Dauto_features=disabled \
|
||||
-Dplugin=false \
|
||||
-Dtext-frontend=true
|
||||
|
||||
- name: Run theme tests
|
||||
run: |
|
||||
set -eux
|
||||
xvfb-run -a env NO_AT_BRIDGE=1 GSETTINGS_BACKEND=memory \
|
||||
meson test -C build-theme-tests --print-errorlogs \
|
||||
--timeout-multiplier 2 \
|
||||
'Theme Manager Dispatch Routing Tests'
|
||||
@@ -2415,6 +2415,20 @@ mg_apply_entry_style (GtkWidget *entry)
|
||||
theme_manager_apply_entry_palette (entry, input_style->font_desc);
|
||||
}
|
||||
|
||||
static gboolean
|
||||
mg_entry_select_all (GtkWidget *entry, GdkEventKey *event, gpointer userdata)
|
||||
{
|
||||
if ((event->state & GDK_CONTROL_MASK) &&
|
||||
!(event->state & (GDK_SHIFT_MASK | GDK_MOD1_MASK | GDK_META_MASK)) &&
|
||||
(event->keyval == GDK_KEY_a || event->keyval == GDK_KEY_A))
|
||||
{
|
||||
gtk_editable_select_region (GTK_EDITABLE (entry), 0, -1);
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void
|
||||
mg_create_chanmodebuttons (session_gui *gui, GtkWidget *box)
|
||||
{
|
||||
@@ -2434,6 +2448,8 @@ mg_create_chanmodebuttons (session_gui *gui, GtkWidget *box)
|
||||
mg_apply_emoji_fallback_widget (gui->key_entry);
|
||||
g_signal_connect (G_OBJECT (gui->key_entry), "activate",
|
||||
G_CALLBACK (mg_key_entry_cb), NULL);
|
||||
g_signal_connect (G_OBJECT (gui->key_entry), "key_press_event",
|
||||
G_CALLBACK (mg_entry_select_all), NULL);
|
||||
|
||||
if (prefs.hex_gui_input_style)
|
||||
mg_apply_entry_style (gui->key_entry);
|
||||
@@ -2447,6 +2463,8 @@ mg_create_chanmodebuttons (session_gui *gui, GtkWidget *box)
|
||||
mg_apply_emoji_fallback_widget (gui->limit_entry);
|
||||
g_signal_connect (G_OBJECT (gui->limit_entry), "activate",
|
||||
G_CALLBACK (mg_limit_entry_cb), NULL);
|
||||
g_signal_connect (G_OBJECT (gui->limit_entry), "key_press_event",
|
||||
G_CALLBACK (mg_entry_select_all), NULL);
|
||||
|
||||
if (prefs.hex_gui_input_style)
|
||||
mg_apply_entry_style (gui->limit_entry);
|
||||
@@ -2537,6 +2555,8 @@ mg_create_topicbar (session *sess, GtkWidget *box)
|
||||
mg_apply_emoji_fallback_widget (topic);
|
||||
g_signal_connect (G_OBJECT (topic), "activate",
|
||||
G_CALLBACK (mg_topic_cb), 0);
|
||||
g_signal_connect (G_OBJECT (topic), "key_press_event",
|
||||
G_CALLBACK (mg_entry_select_all), NULL);
|
||||
|
||||
if (prefs.hex_gui_input_style)
|
||||
mg_apply_entry_style (topic);
|
||||
|
||||
@@ -926,6 +926,11 @@ menu_setting_foreach (void (*callback) (session *), int id, guint state)
|
||||
while (list)
|
||||
{
|
||||
sess = list->data;
|
||||
if (!sess || !sess->gui)
|
||||
{
|
||||
list = list->next;
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!sess->gui->is_tab || !maindone)
|
||||
{
|
||||
@@ -937,7 +942,18 @@ menu_setting_foreach (void (*callback) (session *), int id, guint state)
|
||||
|
||||
if (menu_item != NULL)
|
||||
{
|
||||
gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item), state);
|
||||
guint toggled_signal = g_signal_lookup ("toggled", G_OBJECT_TYPE (menu_item));
|
||||
|
||||
if (toggled_signal != 0)
|
||||
{
|
||||
g_signal_handlers_block_matched (menu_item, G_SIGNAL_MATCH_ID, toggled_signal, 0, NULL, NULL, NULL);
|
||||
gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item), state);
|
||||
g_signal_handlers_unblock_matched (menu_item, G_SIGNAL_MATCH_ID, toggled_signal, 0, NULL, NULL, NULL);
|
||||
}
|
||||
else
|
||||
{
|
||||
gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_item), state);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (callback)
|
||||
@@ -2170,6 +2186,11 @@ menu_foreach_gui (menu_entry *me, void (*callback) (GtkWidget *, menu_entry *, c
|
||||
while (list)
|
||||
{
|
||||
sess = list->data;
|
||||
if (!sess || !sess->gui)
|
||||
{
|
||||
list = list->next;
|
||||
continue;
|
||||
}
|
||||
/* do it only once for tab sessions, since they share a GUI */
|
||||
if (!sess->gui->is_tab || !tabdone)
|
||||
{
|
||||
@@ -2595,13 +2616,14 @@ menu_create_main (void *accel_group, int bar, int away, int toplevel,
|
||||
normalitem:
|
||||
if (mymenu[i].key != 0)
|
||||
gtk_widget_add_accelerator (item, "activate", accel_group,
|
||||
mymenu[i].key,
|
||||
mymenu[i].key == GDK_KEY_F1 ? 0 :
|
||||
mymenu[i].key == GDK_KEY_w ? close_mask :
|
||||
(g_ascii_isupper (mymenu[i].key)) ?
|
||||
STATE_SHIFT | STATE_CTRL :
|
||||
STATE_CTRL,
|
||||
GTK_ACCEL_VISIBLE);
|
||||
mymenu[i].key,
|
||||
mymenu[i].key == GDK_KEY_F1 ? 0 :
|
||||
mymenu[i].key == GDK_KEY_w ? close_mask :
|
||||
mymenu[i].id == MENU_ID_AWAY ? away_mask :
|
||||
(g_ascii_isupper (mymenu[i].key)) ?
|
||||
STATE_SHIFT | STATE_CTRL :
|
||||
STATE_CTRL,
|
||||
GTK_ACCEL_VISIBLE);
|
||||
if (mymenu[i].callback)
|
||||
g_signal_connect (G_OBJECT (item), "activate",
|
||||
G_CALLBACK (mymenu[i].callback), 0);
|
||||
|
||||
@@ -27,6 +27,12 @@ typedef struct
|
||||
guint16 bg_red;
|
||||
guint16 bg_green;
|
||||
guint16 bg_blue;
|
||||
guint16 sel_fg_red;
|
||||
guint16 sel_fg_green;
|
||||
guint16 sel_fg_blue;
|
||||
guint16 sel_bg_red;
|
||||
guint16 sel_bg_green;
|
||||
guint16 sel_bg_blue;
|
||||
} ThemeCssInputFingerprint;
|
||||
|
||||
static GtkCssProvider *theme_css_input_provider;
|
||||
@@ -92,6 +98,12 @@ theme_css_input_fingerprint_matches (const ThemeCssInputFingerprint *next)
|
||||
if (theme_css_input_fp.bg_red != next->bg_red || theme_css_input_fp.bg_green != next->bg_green
|
||||
|| theme_css_input_fp.bg_blue != next->bg_blue)
|
||||
return FALSE;
|
||||
if (theme_css_input_fp.sel_fg_red != next->sel_fg_red || theme_css_input_fp.sel_fg_green != next->sel_fg_green
|
||||
|| theme_css_input_fp.sel_fg_blue != next->sel_fg_blue)
|
||||
return FALSE;
|
||||
if (theme_css_input_fp.sel_bg_red != next->sel_bg_red || theme_css_input_fp.sel_bg_green != next->sel_bg_green
|
||||
|| theme_css_input_fp.sel_bg_blue != next->sel_bg_blue)
|
||||
return FALSE;
|
||||
if (g_strcmp0 (theme_css_input_fp.theme_name, next->theme_name) != 0)
|
||||
return FALSE;
|
||||
if (g_strcmp0 (theme_css_input_fp.font, next->font) != 0)
|
||||
@@ -119,7 +131,9 @@ theme_css_input_fingerprint_clear (void)
|
||||
|
||||
static char *
|
||||
theme_css_build_input (const char *theme_name, guint16 fg_red, guint16 fg_green, guint16 fg_blue,
|
||||
guint16 bg_red, guint16 bg_green, guint16 bg_blue)
|
||||
guint16 bg_red, guint16 bg_green, guint16 bg_blue,
|
||||
guint16 sel_fg_red, guint16 sel_fg_green, guint16 sel_fg_blue,
|
||||
guint16 sel_bg_red, guint16 sel_bg_green, guint16 sel_bg_blue)
|
||||
{
|
||||
GString *css = g_string_new ("");
|
||||
|
||||
@@ -137,6 +151,11 @@ theme_css_build_input (const char *theme_name, guint16 fg_red, guint16 fg_green,
|
||||
"%s {"
|
||||
"color: #%02x%02x%02x;"
|
||||
"caret-color: #%02x%02x%02x;"
|
||||
"}"
|
||||
"%s selection, %s text selection, %s:focus selection, %s:focus text selection, %s *:selected, %s *:selected:focus {"
|
||||
"background-color: #%02x%02x%02x;"
|
||||
"color: #%02x%02x%02x;"
|
||||
"text-shadow: none;"
|
||||
"}",
|
||||
theme_css_selector_input,
|
||||
(bg_red >> 8), (bg_green >> 8), (bg_blue >> 8),
|
||||
@@ -144,7 +163,15 @@ theme_css_build_input (const char *theme_name, guint16 fg_red, guint16 fg_green,
|
||||
(fg_red >> 8), (fg_green >> 8), (fg_blue >> 8),
|
||||
theme_css_selector_input_text,
|
||||
(fg_red >> 8), (fg_green >> 8), (fg_blue >> 8),
|
||||
(fg_red >> 8), (fg_green >> 8), (fg_blue >> 8));
|
||||
(fg_red >> 8), (fg_green >> 8), (fg_blue >> 8),
|
||||
theme_css_selector_input,
|
||||
theme_css_selector_input,
|
||||
theme_css_selector_input,
|
||||
theme_css_selector_input,
|
||||
theme_css_selector_input,
|
||||
theme_css_selector_input,
|
||||
(sel_bg_red >> 8), (sel_bg_green >> 8), (sel_bg_blue >> 8),
|
||||
(sel_fg_red >> 8), (sel_fg_green >> 8), (sel_fg_blue >> 8));
|
||||
|
||||
return g_string_free (css, FALSE);
|
||||
}
|
||||
@@ -177,6 +204,10 @@ theme_css_reload_input_style (gboolean enabled, const PangoFontDescription *font
|
||||
&next.fg_red, &next.fg_green, &next.fg_blue);
|
||||
theme_palette_color_get_rgb16 (&style_values.background,
|
||||
&next.bg_red, &next.bg_green, &next.bg_blue);
|
||||
theme_palette_color_get_rgb16 (&style_values.selection_foreground,
|
||||
&next.sel_fg_red, &next.sel_fg_green, &next.sel_fg_blue);
|
||||
theme_palette_color_get_rgb16 (&style_values.selection_background,
|
||||
&next.sel_bg_red, &next.sel_bg_green, &next.sel_bg_blue);
|
||||
next.colors_set = TRUE;
|
||||
}
|
||||
|
||||
@@ -193,7 +224,9 @@ theme_css_reload_input_style (gboolean enabled, const PangoFontDescription *font
|
||||
|
||||
css = theme_css_build_input (theme_name ? theme_name : "",
|
||||
next.fg_red, next.fg_green, next.fg_blue,
|
||||
next.bg_red, next.bg_green, next.bg_blue);
|
||||
next.bg_red, next.bg_green, next.bg_blue,
|
||||
next.sel_fg_red, next.sel_fg_green, next.sel_fg_blue,
|
||||
next.sel_bg_red, next.sel_bg_green, next.sel_bg_blue);
|
||||
gtk_css_provider_load_from_data (theme_css_input_provider, css, -1, NULL);
|
||||
g_free (css);
|
||||
theme_css_apply_app_provider (GTK_STYLE_PROVIDER (theme_css_input_provider));
|
||||
@@ -276,7 +309,7 @@ theme_css_apply_palette_widget (GtkWidget *widget, const GdkRGBA *bg, const GdkR
|
||||
if (fg)
|
||||
g_string_append_printf (css, " color: %s;", fg_color);
|
||||
g_string_append (css, " }");
|
||||
g_string_append_printf (css, ".%s *:selected, .%s *:selected:focus, .%s *:selected:hover, .%s treeview.view:selected, .%s treeview.view:selected:focus, .%s treeview.view:selected:hover, .%s row:selected, .%s row:selected:focus, .%s row:selected:hover {", theme_css_selector_palette_class, theme_css_selector_palette_class, theme_css_selector_palette_class, theme_css_selector_palette_class, theme_css_selector_palette_class, theme_css_selector_palette_class, theme_css_selector_palette_class, theme_css_selector_palette_class, theme_css_selector_palette_class);
|
||||
g_string_append_printf (css, ".%s *:selected, .%s *:selected:focus, .%s *:selected:hover, .%s treeview.view:selected, .%s treeview.view:selected:focus, .%s treeview.view:selected:hover, .%s row:selected, .%s row:selected:focus, .%s row:selected:hover, .%s selection, .%s text selection, .%s entry selection, .%s entry text selection, .%s:focus selection, .%s:focus text selection {", theme_css_selector_palette_class, theme_css_selector_palette_class, theme_css_selector_palette_class, theme_css_selector_palette_class, theme_css_selector_palette_class, theme_css_selector_palette_class, theme_css_selector_palette_class, theme_css_selector_palette_class, theme_css_selector_palette_class, theme_css_selector_palette_class, theme_css_selector_palette_class, theme_css_selector_palette_class, theme_css_selector_palette_class, theme_css_selector_palette_class, theme_css_selector_palette_class);
|
||||
if (sel_bg_color)
|
||||
g_string_append_printf (css, " background-color: %s;", sel_bg_color);
|
||||
else if (bg)
|
||||
|
||||
Reference in New Issue
Block a user