mirror of
https://github.com/ZoiteChat/zoitechat.git
synced 2026-03-10 07:50:19 +00:00
fixing zoitechat/hexchat theme usage.
This commit is contained in:
@@ -3783,9 +3783,19 @@ cmd_url (struct session *sess, char *tbuf, char *word[], char *word_eol[])
|
|||||||
|
|
||||||
if (zoitechat_import_theme (theme_path, &error))
|
if (zoitechat_import_theme (theme_path, &error))
|
||||||
{
|
{
|
||||||
message = g_strdup_printf (_("Theme \"%s\" imported."), basename);
|
if (zoitechat_apply_theme (basename, &error))
|
||||||
fe_message (message, FE_MSG_INFO);
|
{
|
||||||
g_free (message);
|
message = g_strdup_printf (_("Theme \"%s\" imported and applied."), basename);
|
||||||
|
fe_message (message, FE_MSG_INFO);
|
||||||
|
handle_command (sess, "gui apply", FALSE);
|
||||||
|
g_free (message);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fe_message (error ? error->message : _("Theme imported, but failed to apply."),
|
||||||
|
FE_MSG_ERROR);
|
||||||
|
g_clear_error (&error);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -247,6 +247,85 @@ zoitechat_remote_win32 (void)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
zoitechat_copy_theme_file (const char *src, const char *dest, GError **error)
|
||||||
|
{
|
||||||
|
char *data = NULL;
|
||||||
|
gsize len = 0;
|
||||||
|
|
||||||
|
if (!g_file_get_contents (src, &data, &len, error))
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
if (!g_file_set_contents (dest, data, len, error))
|
||||||
|
{
|
||||||
|
g_free (data);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
g_free (data);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
gboolean
|
||||||
|
zoitechat_apply_theme (const char *theme_name, GError **error)
|
||||||
|
{
|
||||||
|
char *theme_dir;
|
||||||
|
char *colors_src;
|
||||||
|
char *colors_dest;
|
||||||
|
char *events_src;
|
||||||
|
char *events_dest;
|
||||||
|
gboolean ok = FALSE;
|
||||||
|
|
||||||
|
if (!theme_name || !*theme_name)
|
||||||
|
{
|
||||||
|
g_set_error (error, G_IO_ERROR, G_IO_ERROR_INVALID_ARGUMENT,
|
||||||
|
_("No theme name specified."));
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
theme_dir = g_build_filename (get_xdir (), "themes", theme_name, NULL);
|
||||||
|
colors_src = g_build_filename (theme_dir, "colors.conf", NULL);
|
||||||
|
colors_dest = g_build_filename (get_xdir (), "colors.conf", NULL);
|
||||||
|
events_src = g_build_filename (theme_dir, "pevents.conf", NULL);
|
||||||
|
events_dest = g_build_filename (get_xdir (), "pevents.conf", NULL);
|
||||||
|
|
||||||
|
if (!g_file_test (colors_src, G_FILE_TEST_IS_REGULAR))
|
||||||
|
{
|
||||||
|
g_set_error (error, G_IO_ERROR, G_IO_ERROR_NOT_FOUND,
|
||||||
|
_("This theme is missing a colors.conf file."));
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!zoitechat_copy_theme_file (colors_src, colors_dest, error))
|
||||||
|
goto cleanup;
|
||||||
|
|
||||||
|
if (g_file_test (events_src, G_FILE_TEST_IS_REGULAR))
|
||||||
|
{
|
||||||
|
if (!zoitechat_copy_theme_file (events_src, events_dest, error))
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
else if (g_file_test (events_dest, G_FILE_TEST_EXISTS))
|
||||||
|
{
|
||||||
|
if (g_unlink (events_dest) != 0)
|
||||||
|
{
|
||||||
|
g_set_error (error, G_FILE_ERROR, g_file_error_from_errno (errno),
|
||||||
|
_("Failed to remove existing event settings."));
|
||||||
|
goto cleanup;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ok = TRUE;
|
||||||
|
|
||||||
|
cleanup:
|
||||||
|
g_free (events_dest);
|
||||||
|
g_free (events_src);
|
||||||
|
g_free (colors_dest);
|
||||||
|
g_free (colors_src);
|
||||||
|
g_free (theme_dir);
|
||||||
|
return ok;
|
||||||
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
zoitechat_import_theme (const char *path, GError **error)
|
zoitechat_import_theme (const char *path, GError **error)
|
||||||
{
|
{
|
||||||
@@ -754,9 +833,19 @@ irc_init (session *sess)
|
|||||||
|
|
||||||
if (zoitechat_import_theme (theme_path, &error))
|
if (zoitechat_import_theme (theme_path, &error))
|
||||||
{
|
{
|
||||||
message = g_strdup_printf (_("Theme \"%s\" imported."), basename);
|
if (zoitechat_apply_theme (basename, &error))
|
||||||
fe_message (message, FE_MSG_INFO);
|
{
|
||||||
g_free (message);
|
message = g_strdup_printf (_("Theme \"%s\" imported and applied."), basename);
|
||||||
|
fe_message (message, FE_MSG_INFO);
|
||||||
|
handle_command (sess, "gui apply", FALSE);
|
||||||
|
g_free (message);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fe_message (error ? error->message : _("Theme imported, but failed to apply."),
|
||||||
|
FE_MSG_ERROR);
|
||||||
|
g_clear_error (&error);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@@ -796,9 +885,19 @@ irc_init (session *sess)
|
|||||||
|
|
||||||
if (zoitechat_import_theme (theme_path, &error))
|
if (zoitechat_import_theme (theme_path, &error))
|
||||||
{
|
{
|
||||||
message = g_strdup_printf (_("Theme \"%s\" imported."), basename);
|
if (zoitechat_apply_theme (basename, &error))
|
||||||
fe_message (message, FE_MSG_INFO);
|
{
|
||||||
g_free (message);
|
message = g_strdup_printf (_("Theme \"%s\" imported and applied."), basename);
|
||||||
|
fe_message (message, FE_MSG_INFO);
|
||||||
|
handle_command (sess, "gui apply", FALSE);
|
||||||
|
g_free (message);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
fe_message (error ? error->message : _("Theme imported, but failed to apply."),
|
||||||
|
FE_MSG_ERROR);
|
||||||
|
g_clear_error (&error);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -31,6 +31,7 @@
|
|||||||
|
|
||||||
gboolean zoitechat_theme_path_from_arg (const char *arg, char **path_out);
|
gboolean zoitechat_theme_path_from_arg (const char *arg, char **path_out);
|
||||||
gboolean zoitechat_import_theme (const char *path, GError **error);
|
gboolean zoitechat_import_theme (const char *path, GError **error);
|
||||||
|
gboolean zoitechat_apply_theme (const char *theme_name, GError **error);
|
||||||
|
|
||||||
#ifdef USE_OPENSSL
|
#ifdef USE_OPENSSL
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
|
|||||||
@@ -2045,22 +2045,6 @@ setup_theme_show_message (GtkMessageType message_type, const char *primary)
|
|||||||
gtk_widget_destroy (dialog);
|
gtk_widget_destroy (dialog);
|
||||||
}
|
}
|
||||||
|
|
||||||
static gboolean
|
|
||||||
setup_theme_copy_file (const char *src, const char *dest, GError **error)
|
|
||||||
{
|
|
||||||
GFile *src_file;
|
|
||||||
GFile *dest_file;
|
|
||||||
gboolean success;
|
|
||||||
|
|
||||||
src_file = g_file_new_for_path (src);
|
|
||||||
dest_file = g_file_new_for_path (dest);
|
|
||||||
success = g_file_copy (src_file, dest_file, G_FILE_COPY_OVERWRITE, NULL, NULL, NULL, error);
|
|
||||||
g_object_unref (src_file);
|
|
||||||
g_object_unref (dest_file);
|
|
||||||
|
|
||||||
return success;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
setup_theme_populate (setup_theme_ui *ui)
|
setup_theme_populate (setup_theme_ui *ui)
|
||||||
{
|
{
|
||||||
@@ -2138,11 +2122,6 @@ setup_theme_apply_cb (GtkWidget *button, gpointer user_data)
|
|||||||
GtkWidget *dialog;
|
GtkWidget *dialog;
|
||||||
gint response;
|
gint response;
|
||||||
char *theme;
|
char *theme;
|
||||||
char *theme_dir = NULL;
|
|
||||||
char *colors_src = NULL;
|
|
||||||
char *colors_dest = NULL;
|
|
||||||
char *events_src = NULL;
|
|
||||||
char *events_dest = NULL;
|
|
||||||
GError *error = NULL;
|
GError *error = NULL;
|
||||||
|
|
||||||
theme = gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT (ui->combo));
|
theme = gtk_combo_box_text_get_active_text (GTK_COMBO_BOX_TEXT (ui->combo));
|
||||||
@@ -2161,40 +2140,13 @@ setup_theme_apply_cb (GtkWidget *button, gpointer user_data)
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
theme_dir = g_build_filename (get_xdir (), "themes", theme, NULL);
|
if (!zoitechat_apply_theme (theme, &error))
|
||||||
colors_src = g_build_filename (theme_dir, "colors.conf", NULL);
|
|
||||||
colors_dest = g_build_filename (get_xdir (), "colors.conf", NULL);
|
|
||||||
|
|
||||||
if (!g_file_test (colors_src, G_FILE_TEST_IS_REGULAR))
|
|
||||||
{
|
|
||||||
setup_theme_show_message (GTK_MESSAGE_ERROR, _("This theme is missing a colors.conf file."));
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!setup_theme_copy_file (colors_src, colors_dest, &error))
|
|
||||||
{
|
{
|
||||||
setup_theme_show_message (GTK_MESSAGE_ERROR, error ? error->message : _("Failed to apply theme."));
|
setup_theme_show_message (GTK_MESSAGE_ERROR, error ? error->message : _("Failed to apply theme."));
|
||||||
g_clear_error (&error);
|
g_clear_error (&error);
|
||||||
goto cleanup;
|
goto cleanup;
|
||||||
}
|
}
|
||||||
|
|
||||||
events_src = g_build_filename (theme_dir, "pevents.conf", NULL);
|
|
||||||
events_dest = g_build_filename (get_xdir (), "pevents.conf", NULL);
|
|
||||||
|
|
||||||
if (g_file_test (events_src, G_FILE_TEST_IS_REGULAR))
|
|
||||||
{
|
|
||||||
if (!setup_theme_copy_file (events_src, events_dest, &error))
|
|
||||||
{
|
|
||||||
setup_theme_show_message (GTK_MESSAGE_ERROR, error ? error->message : _("Failed to apply event settings."));
|
|
||||||
g_clear_error (&error);
|
|
||||||
goto cleanup;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (g_file_test (events_dest, G_FILE_TEST_EXISTS))
|
|
||||||
{
|
|
||||||
g_unlink (events_dest);
|
|
||||||
}
|
|
||||||
|
|
||||||
palette_load ();
|
palette_load ();
|
||||||
palette_apply_dark_mode (fe_dark_mode_is_enabled ());
|
palette_apply_dark_mode (fe_dark_mode_is_enabled ());
|
||||||
color_change = TRUE;
|
color_change = TRUE;
|
||||||
@@ -2203,11 +2155,6 @@ setup_theme_apply_cb (GtkWidget *button, gpointer user_data)
|
|||||||
setup_theme_show_message (GTK_MESSAGE_INFO, _("Theme applied. Some changes may require a restart to take full effect."));
|
setup_theme_show_message (GTK_MESSAGE_INFO, _("Theme applied. Some changes may require a restart to take full effect."));
|
||||||
|
|
||||||
cleanup:
|
cleanup:
|
||||||
g_free (events_dest);
|
|
||||||
g_free (events_src);
|
|
||||||
g_free (colors_dest);
|
|
||||||
g_free (colors_src);
|
|
||||||
g_free (theme_dir);
|
|
||||||
g_free (theme);
|
g_free (theme);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user