mirror of
https://github.com/ZoiteChat/zoitechat.git
synced 2026-03-23 05:50:18 +00:00
Compare commits
5 Commits
taskbar-ic
...
zoitechat-
| Author | SHA1 | Date | |
|---|---|---|---|
| ab54d9f782 | |||
|
|
1208449322 | ||
| a11ec3a05b | |||
|
|
e39dfcf00c | ||
| 5f1e0fe7d8 |
@@ -1,6 +1,28 @@
|
|||||||
ZoiteChat ChangeLog
|
ZoiteChat ChangeLog
|
||||||
=================
|
=================
|
||||||
|
|
||||||
|
2.18.0~pre5 (2026-03-22)
|
||||||
|
------------------------
|
||||||
|
- Overhauled preferences/config saving: fully staged and transactional, debounced
|
||||||
|
with flush on close, write failures now surfaced.
|
||||||
|
- Overhauled GTK theme handling: live preview, correct colour reset persistence,
|
||||||
|
proper file:// import paths, consistent menubar CSS.
|
||||||
|
- Fixed GTK entry scroll artifact in the input box.
|
||||||
|
- Hardened tray menu lifetime; fixed stale pointer crash on menu destruction.
|
||||||
|
- Fixed AppIndicator tray init for Wayland/source builds; skip redundant X11
|
||||||
|
tray probe for AppIndicator builds.
|
||||||
|
- Split topic/mode rows in channel bar, tighten spacing, persist userlist column widths.
|
||||||
|
- Preserve saved right-pane size on first layout.
|
||||||
|
- Fixed sounds prefs section.
|
||||||
|
- Fixed chanview tree layout and header alignment; tighten topic URL hit-testing.
|
||||||
|
- Dropped realpath() in favour of GLib-only absolute path build.
|
||||||
|
- Made About dialog links explicit; added GPL licence URL.
|
||||||
|
- Added licence headers to new source files.
|
||||||
|
- Windows installer: fixed VC++ redist URL, added non-plugin download fallback,
|
||||||
|
switched to registry-based runtime detection.
|
||||||
|
- Made libayatana-appindicator a required dep in PKGBUILD.
|
||||||
|
- Cleaned up Meson libperl detection.
|
||||||
|
|
||||||
2.18.0~pre4 (2026-03-15)
|
2.18.0~pre4 (2026-03-15)
|
||||||
------------------------
|
------------------------
|
||||||
|
|
||||||
|
|||||||
@@ -29,6 +29,45 @@
|
|||||||
<id>zoitechat.desktop</id>
|
<id>zoitechat.desktop</id>
|
||||||
</provides>
|
</provides>
|
||||||
<releases>
|
<releases>
|
||||||
|
<release date="2026-03-22" version="2.18.0~pre5">
|
||||||
|
<description>
|
||||||
|
<p>Preferences and config saving:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Overhauled preferences/config saving: fully staged and transactional, debounced with flush on close, write failures now surfaced.</li>
|
||||||
|
</ul>
|
||||||
|
<p>GTK theme and UI:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Overhauled GTK theme handling: live preview, correct colour reset persistence, proper <code>file://</code> import paths, consistent menubar CSS.</li>
|
||||||
|
<li>Fixed GTK entry scroll artifact in the input box.</li>
|
||||||
|
<li>Split topic/mode rows in channel bar, tighten spacing, persist userlist column widths.</li>
|
||||||
|
<li>Preserve saved right-pane size on first layout.</li>
|
||||||
|
<li>Fixed sounds prefs section.</li>
|
||||||
|
<li>Fixed chanview tree layout and header alignment; tighten topic URL hit-testing.</li>
|
||||||
|
</ul>
|
||||||
|
<p>Tray:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Hardened tray menu lifetime; fixed stale pointer crash on menu destruction.</li>
|
||||||
|
<li>Fixed AppIndicator tray init for Wayland/source builds; skip redundant X11 tray probe for AppIndicator builds.</li>
|
||||||
|
</ul>
|
||||||
|
<p>Build and packaging:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Dropped <code>realpath()</code> in favour of GLib-only absolute path build.</li>
|
||||||
|
<li>Made About dialog links explicit; added GPL licence URL.</li>
|
||||||
|
<li>Added licence headers to new source files.</li>
|
||||||
|
<li>Windows installer: fixed VC++ redist URL, added non-plugin download fallback, switched to registry-based runtime detection.</li>
|
||||||
|
<li>Made <code>libayatana-appindicator</code> a required dep in PKGBUILD.</li>
|
||||||
|
<li>Cleaned up Meson libperl detection.</li>
|
||||||
|
</ul>
|
||||||
|
</description>
|
||||||
|
</release>
|
||||||
|
<release date="2026-03-22" version="2.18.0~pre5">
|
||||||
|
<description>
|
||||||
|
<p>Version metadata update:</p>
|
||||||
|
<ul>
|
||||||
|
<li>Bumped release version references to <code>2.18.0~pre5</code> across build and packaging files.</li>
|
||||||
|
</ul>
|
||||||
|
</description>
|
||||||
|
</release>
|
||||||
<release date="2026-03-14" version="2.18.0~pre4">
|
<release date="2026-03-14" version="2.18.0~pre4">
|
||||||
<description>
|
<description>
|
||||||
<p>UI fixes, topic bar improvements, and selection styling updates:</p>
|
<p>UI fixes, topic bar improvements, and selection styling updates:</p>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
project('zoitechat', 'c',
|
project('zoitechat', 'c',
|
||||||
version: '2.18.0~pre4',
|
version: '2.18.0~pre5',
|
||||||
meson_version: '>= 0.55.0',
|
meson_version: '>= 0.55.0',
|
||||||
default_options: [
|
default_options: [
|
||||||
'c_std=c17',
|
'c_std=c17',
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ else:
|
|||||||
if not hasattr(sys, 'argv'):
|
if not hasattr(sys, 'argv'):
|
||||||
sys.argv = ['<zoitechat>']
|
sys.argv = ['<zoitechat>']
|
||||||
|
|
||||||
VERSION = b'2.18.0~pre4'
|
VERSION = b'2.18.0~pre5'
|
||||||
PLUGIN_NAME = ffi.new('char[]', b'Python')
|
PLUGIN_NAME = ffi.new('char[]', b'Python')
|
||||||
PLUGIN_DESC = ffi.new('char[]', b'Python %d.%d scripting interface' % (sys.version_info[0], sys.version_info[1]))
|
PLUGIN_DESC = ffi.new('char[]', b'Python %d.%d scripting interface' % (sys.version_info[0], sys.version_info[1]))
|
||||||
PLUGIN_VERSION = ffi.new('char[]', VERSION)
|
PLUGIN_VERSION = ffi.new('char[]', VERSION)
|
||||||
|
|||||||
@@ -125,6 +125,7 @@ static void tray_menu_notify_cb (GObject *tray, GParamSpec *pspec, gpointer user
|
|||||||
static void tray_update_toggle_item_label (void);
|
static void tray_update_toggle_item_label (void);
|
||||||
static gboolean tray_window_state_cb (GtkWidget *widget, GdkEventWindowState *event, gpointer userdata);
|
static gboolean tray_window_state_cb (GtkWidget *widget, GdkEventWindowState *event, gpointer userdata);
|
||||||
static void tray_window_visibility_cb (GtkWidget *widget, gpointer userdata);
|
static void tray_window_visibility_cb (GtkWidget *widget, gpointer userdata);
|
||||||
|
static void tray_toggle_item_destroy_cb (GtkWidget *widget, gpointer userdata);
|
||||||
#if HAVE_APPINDICATOR_BACKEND
|
#if HAVE_APPINDICATOR_BACKEND
|
||||||
static void tray_menu_show_cb (GtkWidget *menu, gpointer userdata) G_GNUC_UNUSED;
|
static void tray_menu_show_cb (GtkWidget *menu, gpointer userdata) G_GNUC_UNUSED;
|
||||||
#endif
|
#endif
|
||||||
@@ -408,6 +409,7 @@ tray_app_indicator_cleanup (void)
|
|||||||
|
|
||||||
if (tray_menu)
|
if (tray_menu)
|
||||||
{
|
{
|
||||||
|
if (GTK_IS_WIDGET (tray_menu))
|
||||||
gtk_widget_destroy (tray_menu);
|
gtk_widget_destroy (tray_menu);
|
||||||
tray_menu = NULL;
|
tray_menu = NULL;
|
||||||
}
|
}
|
||||||
@@ -1026,9 +1028,14 @@ blink_item (unsigned int *setting, GtkWidget *menu, char *label)
|
|||||||
static void
|
static void
|
||||||
tray_menu_destroy (GtkWidget *menu, gpointer userdata)
|
tray_menu_destroy (GtkWidget *menu, gpointer userdata)
|
||||||
{
|
{
|
||||||
(void)userdata;
|
GtkWidget **menu_ptr = userdata;
|
||||||
|
|
||||||
|
if (menu_ptr && *menu_ptr == menu)
|
||||||
|
*menu_ptr = NULL;
|
||||||
|
|
||||||
|
if (GTK_IS_WIDGET (menu))
|
||||||
gtk_widget_destroy (menu);
|
gtk_widget_destroy (menu);
|
||||||
|
if (G_IS_OBJECT (menu))
|
||||||
g_object_unref (menu);
|
g_object_unref (menu);
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
g_source_remove (tray_menu_timer);
|
g_source_remove (tray_menu_timer);
|
||||||
@@ -1089,6 +1096,8 @@ tray_menu_populate (GtkWidget *menu)
|
|||||||
zoitechat_set_context (ph, zoitechat_find_context (ph, NULL, NULL));
|
zoitechat_set_context (ph, zoitechat_find_context (ph, NULL, NULL));
|
||||||
|
|
||||||
tray_toggle_item = tray_make_item (menu, _("_Hide Window"), tray_menu_restore_cb, NULL);
|
tray_toggle_item = tray_make_item (menu, _("_Hide Window"), tray_menu_restore_cb, NULL);
|
||||||
|
g_signal_connect (G_OBJECT (tray_toggle_item), "destroy",
|
||||||
|
G_CALLBACK (tray_toggle_item_destroy_cb), NULL);
|
||||||
tray_update_toggle_item_label ();
|
tray_update_toggle_item_label ();
|
||||||
tray_make_item (menu, NULL, tray_menu_quit_cb, NULL);
|
tray_make_item (menu, NULL, tray_menu_quit_cb, NULL);
|
||||||
|
|
||||||
@@ -1129,12 +1138,22 @@ tray_menu_clear (GtkWidget *menu)
|
|||||||
|
|
||||||
children = gtk_container_get_children (GTK_CONTAINER (menu));
|
children = gtk_container_get_children (GTK_CONTAINER (menu));
|
||||||
for (iter = children; iter; iter = iter->next)
|
for (iter = children; iter; iter = iter->next)
|
||||||
|
if (GTK_IS_WIDGET (iter->data))
|
||||||
gtk_widget_destroy (GTK_WIDGET (iter->data));
|
gtk_widget_destroy (GTK_WIDGET (iter->data));
|
||||||
g_list_free (children);
|
g_list_free (children);
|
||||||
tray_toggle_item = NULL;
|
tray_toggle_item = NULL;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
static void
|
||||||
|
tray_toggle_item_destroy_cb (GtkWidget *widget, gpointer userdata)
|
||||||
|
{
|
||||||
|
(void)userdata;
|
||||||
|
|
||||||
|
if (tray_toggle_item == widget)
|
||||||
|
tray_toggle_item = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
tray_update_toggle_item_label (void)
|
tray_update_toggle_item_label (void)
|
||||||
{
|
{
|
||||||
@@ -1142,6 +1161,11 @@ tray_update_toggle_item_label (void)
|
|||||||
|
|
||||||
if (!tray_toggle_item)
|
if (!tray_toggle_item)
|
||||||
return;
|
return;
|
||||||
|
if (!GTK_IS_MENU_ITEM (tray_toggle_item))
|
||||||
|
{
|
||||||
|
tray_toggle_item = NULL;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (tray_get_window_status () == WS_HIDDEN)
|
if (tray_get_window_status () == WS_HIDDEN)
|
||||||
label = _("_Restore Window");
|
label = _("_Restore Window");
|
||||||
@@ -1194,10 +1218,9 @@ tray_menu_cb (GtkWidget *widget, guint button, guint time, gpointer userdata)
|
|||||||
(void)time;
|
(void)time;
|
||||||
(void)userdata;
|
(void)userdata;
|
||||||
|
|
||||||
/* close any old menu */
|
if (menu)
|
||||||
if (G_IS_OBJECT (menu))
|
|
||||||
{
|
{
|
||||||
tray_menu_destroy (menu, NULL);
|
tray_menu_destroy (menu, &menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
menu = gtk_menu_new ();
|
menu = gtk_menu_new ();
|
||||||
@@ -1207,8 +1230,9 @@ tray_menu_cb (GtkWidget *widget, guint button, guint time, gpointer userdata)
|
|||||||
g_object_ref (menu);
|
g_object_ref (menu);
|
||||||
g_object_ref_sink (menu);
|
g_object_ref_sink (menu);
|
||||||
g_object_unref (menu);
|
g_object_unref (menu);
|
||||||
|
g_object_add_weak_pointer (G_OBJECT (menu), (gpointer *)&menu);
|
||||||
g_signal_connect (G_OBJECT (menu), "selection-done",
|
g_signal_connect (G_OBJECT (menu), "selection-done",
|
||||||
G_CALLBACK (tray_menu_destroy), NULL);
|
G_CALLBACK (tray_menu_destroy), &menu);
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
g_signal_connect (G_OBJECT (menu), "leave-notify-event",
|
g_signal_connect (G_OBJECT (menu), "leave-notify-event",
|
||||||
G_CALLBACK (tray_menu_left_cb), NULL);
|
G_CALLBACK (tray_menu_left_cb), NULL);
|
||||||
|
|||||||
@@ -2197,8 +2197,8 @@ setup_ok_cb (GtkWidget *but, GtkWidget *win)
|
|||||||
char buffer[192];
|
char buffer[192];
|
||||||
|
|
||||||
memcpy (&old_prefs, &prefs, sizeof (prefs));
|
memcpy (&old_prefs, &prefs, sizeof (prefs));
|
||||||
theme_preferences_stage_apply ();
|
|
||||||
setup_apply (&setup_prefs);
|
setup_apply (&setup_prefs);
|
||||||
|
theme_preferences_stage_apply ();
|
||||||
save_result = preferences_persistence_save_all ();
|
save_result = preferences_persistence_save_all ();
|
||||||
if (save_result.success)
|
if (save_result.success)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -68,6 +68,16 @@ theme_get_color (ThemeSemanticToken token, GdkRGBA *color)
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
theme_get_widget_style_values_for_widget (GtkWidget *widget, ThemeWidgetStyleValues *out_values)
|
||||||
|
{
|
||||||
|
(void)widget;
|
||||||
|
if (!out_values)
|
||||||
|
return;
|
||||||
|
gdk_rgba_parse (&out_values->foreground, "#111111");
|
||||||
|
gdk_rgba_parse (&out_values->background, "#f0f0f0");
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
theme_manager_set_token_color (unsigned int dark_mode, ThemeSemanticToken token, const GdkRGBA *color, gboolean *changed)
|
theme_manager_set_token_color (unsigned int dark_mode, ThemeSemanticToken token, const GdkRGBA *color, gboolean *changed)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -723,6 +723,7 @@ theme_preferences_manager_dialog_response_cb (GtkDialog *dialog, gint response_i
|
|||||||
if (theme_preferences_stage.active)
|
if (theme_preferences_stage.active)
|
||||||
{
|
{
|
||||||
ThemeSemanticToken token;
|
ThemeSemanticToken token;
|
||||||
|
ThemeWidgetStyleValues style_values;
|
||||||
|
|
||||||
for (token = THEME_TOKEN_MIRC_0; token < THEME_TOKEN_COUNT; token++)
|
for (token = THEME_TOKEN_MIRC_0; token < THEME_TOKEN_COUNT; token++)
|
||||||
{
|
{
|
||||||
@@ -733,6 +734,12 @@ theme_preferences_manager_dialog_response_cb (GtkDialog *dialog, gint response_i
|
|||||||
theme_preferences_stage.staged[token] = rgba;
|
theme_preferences_stage.staged[token] = rgba;
|
||||||
theme_preferences_stage.staged_valid[token] = TRUE;
|
theme_preferences_stage.staged_valid[token] = TRUE;
|
||||||
}
|
}
|
||||||
|
theme_get_widget_style_values_for_widget (GTK_WIDGET (dialog), &style_values);
|
||||||
|
theme_preferences_stage.staged[THEME_TOKEN_TEXT_FOREGROUND] = style_values.foreground;
|
||||||
|
theme_preferences_stage.staged_valid[THEME_TOKEN_TEXT_FOREGROUND] = TRUE;
|
||||||
|
theme_preferences_stage.staged[THEME_TOKEN_TEXT_BACKGROUND] = style_values.background;
|
||||||
|
theme_preferences_stage.staged_valid[THEME_TOKEN_TEXT_BACKGROUND] = TRUE;
|
||||||
|
theme_preferences_stage_sync_runtime_to_staged ();
|
||||||
theme_preferences_stage_recompute_changed ();
|
theme_preferences_stage_recompute_changed ();
|
||||||
if (ui->color_change_flag)
|
if (ui->color_change_flag)
|
||||||
*ui->color_change_flag = theme_preferences_stage.changed;
|
*ui->color_change_flag = theme_preferences_stage.changed;
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
2.18.0~pre4
|
2.18.0~pre5
|
||||||
|
|||||||
Reference in New Issue
Block a user