Embed default icon, in case it is not found on the system (e.g. tint2 not installed, just compiled)
This commit is contained in:
parent
b4610fcb6e
commit
dd1fd28114
7 changed files with 102 additions and 14 deletions
|
@ -134,6 +134,7 @@ set( SOURCES src/config.c
|
||||||
src/util/tracing.c
|
src/util/tracing.c
|
||||||
src/mouse_actions.c
|
src/mouse_actions.c
|
||||||
src/drag_and_drop.c
|
src/drag_and_drop.c
|
||||||
|
src/default_icon.c
|
||||||
src/clock/clock.c
|
src/clock/clock.c
|
||||||
src/systray/systraybar.c
|
src/systray/systraybar.c
|
||||||
src/launcher/launcher.c
|
src/launcher/launcher.c
|
||||||
|
|
5
src/default_icon.c
Normal file
5
src/default_icon.c
Normal file
File diff suppressed because one or more lines are too long
10
src/default_icon.h
Normal file
10
src/default_icon.h
Normal file
|
@ -0,0 +1,10 @@
|
||||||
|
#ifndef default_icon_h
|
||||||
|
#define default_icon_h
|
||||||
|
|
||||||
|
#include <Imlib2.h>
|
||||||
|
|
||||||
|
extern int default_icon_width;
|
||||||
|
extern int default_icon_height;
|
||||||
|
extern DATA32 default_icon_data[];
|
||||||
|
|
||||||
|
#endif
|
35
src/init.c
35
src/init.c
|
@ -12,6 +12,7 @@
|
||||||
#include <X11/extensions/XShm.h>
|
#include <X11/extensions/XShm.h>
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
#include "default_icon.h"
|
||||||
#include "drag_and_drop.h"
|
#include "drag_and_drop.h"
|
||||||
#include "fps_distribution.h"
|
#include "fps_distribution.h"
|
||||||
#include "panel.h"
|
#include "panel.h"
|
||||||
|
@ -55,6 +56,9 @@ void handle_cli_arguments(int argc, char **argv)
|
||||||
} else if (strcmp(argv[i], "--test-verbose") == 0) {
|
} else if (strcmp(argv[i], "--test-verbose") == 0) {
|
||||||
run_all_tests(true);
|
run_all_tests(true);
|
||||||
exit(0);
|
exit(0);
|
||||||
|
} else if (strcmp(argv[i], "--dump-image-data") == 0) {
|
||||||
|
dump_image_data(argv[i+1], argv[i+2]);
|
||||||
|
exit(0);
|
||||||
} else if (strcmp(argv[i], "-c") == 0) {
|
} else if (strcmp(argv[i], "-c") == 0) {
|
||||||
if (i + 1 < argc) {
|
if (i + 1 < argc) {
|
||||||
i++;
|
i++;
|
||||||
|
@ -165,6 +169,22 @@ void create_default_elements()
|
||||||
default_panel();
|
default_panel();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void load_default_task_icon()
|
||||||
|
{
|
||||||
|
const gchar *const *data_dirs = g_get_system_data_dirs();
|
||||||
|
for (int i = 0; data_dirs[i] != NULL; i++) {
|
||||||
|
gchar *path = g_build_filename(data_dirs[i], "tint2", "default_icon.png", NULL);
|
||||||
|
if (g_file_test(path, G_FILE_TEST_EXISTS))
|
||||||
|
default_icon = load_image(path, TRUE);
|
||||||
|
g_free(path);
|
||||||
|
}
|
||||||
|
if (!default_icon) {
|
||||||
|
default_icon = imlib_create_image_using_data(default_icon_width,
|
||||||
|
default_icon_height,
|
||||||
|
default_icon_data);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void init_post_config()
|
void init_post_config()
|
||||||
{
|
{
|
||||||
server_init_visual();
|
server_init_visual();
|
||||||
|
@ -175,20 +195,7 @@ void init_post_config()
|
||||||
imlib_context_set_colormap(server.colormap);
|
imlib_context_set_colormap(server.colormap);
|
||||||
|
|
||||||
init_signals_postconfig();
|
init_signals_postconfig();
|
||||||
|
load_default_task_icon();
|
||||||
// load default icon
|
|
||||||
const gchar *const *data_dirs = g_get_system_data_dirs();
|
|
||||||
for (int i = 0; data_dirs[i] != NULL; i++) {
|
|
||||||
gchar *path = g_build_filename(data_dirs[i], "tint2", "default_icon.png", NULL);
|
|
||||||
if (g_file_test(path, G_FILE_TEST_EXISTS))
|
|
||||||
default_icon = load_image(path, TRUE);
|
|
||||||
g_free(path);
|
|
||||||
}
|
|
||||||
if (!default_icon) {
|
|
||||||
fprintf(stderr,
|
|
||||||
RED "Could not load default_icon.png. Please check that tint2 has been installed correctly!" RESET
|
|
||||||
"\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
XSync(server.display, False);
|
XSync(server.display, False);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1114,3 +1114,63 @@ void adjust_color(Color *color, int alpha, int saturation, int brightness)
|
||||||
color->rgb[1] = g / 255.;
|
color->rgb[1] = g / 255.;
|
||||||
color->rgb[2] = b / 255.;
|
color->rgb[2] = b / 255.;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void dump_image_data(const char *file_name, const char *name)
|
||||||
|
{
|
||||||
|
Imlib_Image image = load_image(file_name, false);
|
||||||
|
if (!image) {
|
||||||
|
fprintf(stderr, "tint2: Could not load image from file\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
gchar *header_name = g_strdup_printf("%s.h", name);
|
||||||
|
gchar *guard = g_strdup_printf("%s_h", name);
|
||||||
|
FILE *header = fopen(header_name, "wt");
|
||||||
|
fprintf(header,
|
||||||
|
"#ifndef %s\n"
|
||||||
|
"#define %s\n"
|
||||||
|
"\n"
|
||||||
|
"#include <Imlib2.h>\n"
|
||||||
|
"\n"
|
||||||
|
"extern int %s_width;\n"
|
||||||
|
"extern int %s_height;\n"
|
||||||
|
"extern DATA32 %s_data[];\n"
|
||||||
|
"\n"
|
||||||
|
"#endif\n",
|
||||||
|
guard,
|
||||||
|
guard,
|
||||||
|
name,
|
||||||
|
name,
|
||||||
|
name);
|
||||||
|
fclose(header);
|
||||||
|
g_free(guard);
|
||||||
|
g_free(header_name);
|
||||||
|
|
||||||
|
imlib_context_set_image(image);
|
||||||
|
|
||||||
|
gchar *source_name = g_strdup_printf("%s.c", name);
|
||||||
|
FILE *source = fopen(source_name, "wt");
|
||||||
|
fprintf(source,
|
||||||
|
"#include <%s.h>\n"
|
||||||
|
"\n"
|
||||||
|
"int %s_width = %d;\n"
|
||||||
|
"int %s_height = %d;\n"
|
||||||
|
"DATA32 %s_data[] = {",
|
||||||
|
name,
|
||||||
|
name,
|
||||||
|
imlib_image_get_width(),
|
||||||
|
name,
|
||||||
|
imlib_image_get_height(),
|
||||||
|
name);
|
||||||
|
|
||||||
|
size_t size = (size_t)imlib_image_get_width() * (size_t)imlib_image_get_height();
|
||||||
|
DATA32 *data = imlib_image_get_data_for_reading_only();
|
||||||
|
for (size_t i = 0; i < size; i++) {
|
||||||
|
fprintf(source, "%s%u", i == 0 ? "" : ", ", data[i]);
|
||||||
|
}
|
||||||
|
fprintf(source, "};\n");
|
||||||
|
fclose(source);
|
||||||
|
g_free(source_name);
|
||||||
|
|
||||||
|
imlib_free_image();
|
||||||
|
}
|
||||||
|
|
|
@ -149,6 +149,8 @@ GString *tint2_g_string_replace(GString *s, const char *from, const char *to);
|
||||||
|
|
||||||
void get_image_mean_color(const Imlib_Image image, Color *mean_color);
|
void get_image_mean_color(const Imlib_Image image, Color *mean_color);
|
||||||
|
|
||||||
|
void dump_image_data(const char *file_name, const char *name);
|
||||||
|
|
||||||
#define free_and_null(p) \
|
#define free_and_null(p) \
|
||||||
{ \
|
{ \
|
||||||
free(p); \
|
free(p); \
|
||||||
|
|
|
@ -20,6 +20,9 @@ src/battery/battery.c
|
||||||
src/battery/battery.h
|
src/battery/battery.h
|
||||||
src/clock/clock.c
|
src/clock/clock.c
|
||||||
src/clock/clock.h
|
src/clock/clock.h
|
||||||
|
src/default_icon.c
|
||||||
|
src/default_icon.c
|
||||||
|
src/default_icon.h
|
||||||
src/execplugin/execplugin.c
|
src/execplugin/execplugin.c
|
||||||
src/execplugin/execplugin.h
|
src/execplugin/execplugin.h
|
||||||
src/launcher/launcher.c
|
src/launcher/launcher.c
|
||||||
|
|
Loading…
Reference in a new issue