]>
glassweightruler.freedombox.rocks Git - Ventoy.git/blob - LinuxGUI/Ventoy2Disk/main_gtk.c
11 #include <sys/types.h>
13 #include <linux/limits.h>
14 #include <ventoy_define.h>
15 #include <ventoy_util.h>
16 #include "ventoy_gtk.h"
18 static int g_kiosk_mode
= 0;
19 char g_log_file
[PATH_MAX
];
20 char g_ini_file
[PATH_MAX
];
22 static int set_image_from_pixbuf(GtkBuilder
*pBuilder
, const char *id
, const void *pData
, int len
)
24 GtkImage
*pImage
= NULL
;
25 GdkPixbuf
*pPixbuf
= NULL
;
26 GInputStream
*pStream
= NULL
;
28 pImage
= (GtkImage
*)gtk_builder_get_object(pBuilder
, id
);
29 pStream
= g_memory_input_stream_new_from_data(pData
, len
, NULL
);
30 pPixbuf
= gdk_pixbuf_new_from_stream(pStream
, NULL
, NULL
);
31 gtk_image_set_from_pixbuf(pImage
, pPixbuf
);
36 static int set_window_icon_from_pixbuf(GtkWindow
*window
, const void *pData
, int len
)
38 GdkPixbuf
*pPixbuf
= NULL
;
39 GInputStream
*pStream
= NULL
;
41 pStream
= g_memory_input_stream_new_from_data(pData
, len
, NULL
);
42 pPixbuf
= gdk_pixbuf_new_from_stream(pStream
, NULL
, NULL
);
44 gtk_window_set_icon(window
, pPixbuf
);
48 int early_msgbox(GtkMessageType type
, GtkButtonsType buttons
, const char *str
)
51 GtkWidget
*pMsgBox
= NULL
;
53 pMsgBox
= gtk_message_dialog_new(NULL
, GTK_DIALOG_MODAL
, type
, buttons
, str
);
55 ret
= gtk_dialog_run(GTK_DIALOG(pMsgBox
));
56 gtk_widget_destroy(pMsgBox
);
61 static int adjust_cur_dir(char *argv0
)
73 for (pos
= argv0
; pos
&& *pos
; pos
++)
86 pos
= strstr(argv0
, "/tool/");
104 int main(int argc
, char *argv
[])
108 const void *pData
= NULL
;
109 GtkWidget
*pWidget
= NULL
;
110 GtkBuilder
*pBuilder
= NULL
;
111 GError
*error
= NULL
;
114 gtk_init(&argc
, &argv
);
118 early_msgbox(GTK_MESSAGE_ERROR
, GTK_BUTTONS_CLOSE
,
119 "Ventoy2Disk permission denied!\r\nPlease run with root privileges.");
123 if (access("./boot/boot.img", F_OK
) == -1)
125 adjust_cur_dir(argv
[0]);
128 if (access("./boot/boot.img", F_OK
) == -1)
130 early_msgbox(GTK_MESSAGE_ERROR
, GTK_BUTTONS_CLOSE
, "Please run under the correct directory.");
134 for (i
= 0; i
< argc
; i
++)
136 if (argv
[i
] && strcmp(argv
[i
], "--kiosk") == 0)
143 snprintf(g_log_file
, sizeof(g_log_file
), "log.txt");
144 snprintf(g_ini_file
, sizeof(g_ini_file
), "./Ventoy2Disk.ini");
145 for (i
= 0; i
< argc
; i
++)
147 if (argv
[i
] && argv
[i
+ 1] && strcmp(argv
[i
], "-l") == 0)
149 snprintf(g_log_file
, sizeof(g_log_file
), "%s", argv
[i
+ 1]);
151 else if (argv
[i
] && argv
[i
+ 1] && strcmp(argv
[i
], "-i") == 0)
153 snprintf(g_ini_file
, sizeof(g_ini_file
), "%s", argv
[i
+ 1]);
157 memset(&logstat
, 0, sizeof(logstat
));
158 if (0 == stat(g_log_file
, &logstat
))
160 if (logstat
.st_size
>= 4 * SIZE_1MB
)
168 vlog("================================================\n");
169 vlog("===== Ventoy2Disk %s powered by GTK%d.x =====\n", ventoy_get_local_version(), GTK_MAJOR_VERSION
);
170 vlog("================================================\n");
171 vlog("log file is <%s> lastsize:%lld\n", g_log_file
, (long long)logstat
.st_size
);
172 vlog("ini file is <%s>\n", g_ini_file
);
178 pBuilder
= gtk_builder_new();
181 vlog("failed to create builder\n");
185 if (!gtk_builder_add_from_file(pBuilder
, "./tool/VentoyGTK.glade", &error
))
187 vlog("gtk_builder_add_from_file failed:%s\n", error
->message
);
188 g_clear_error(&error
);
194 gtk_image_set_from_file((GtkImage
*)gtk_builder_get_object(pBuilder
, "image_refresh"), "/ventoy/refresh.png");
195 gtk_image_set_from_file((GtkImage
*)gtk_builder_get_object(pBuilder
, "image_secure_local"), "/ventoy/secure.png");
196 gtk_image_set_from_file((GtkImage
*)gtk_builder_get_object(pBuilder
, "image_secure_dev"), "/ventoy/secure.png");
200 pData
= get_refresh_icon_raw_data(&len
);
201 set_image_from_pixbuf(pBuilder
, "image_refresh", pData
, len
);
202 pData
= get_secure_icon_raw_data(&len
);
203 set_image_from_pixbuf(pBuilder
, "image_secure_local", pData
, len
);
204 set_image_from_pixbuf(pBuilder
, "image_secure_dev", pData
, len
);
207 pWidget
= GTK_WIDGET(gtk_builder_get_object(pBuilder
, "window"));
208 gtk_widget_show_all(pWidget
);
210 pData
= get_window_icon_raw_data(&len
);
211 set_window_icon_from_pixbuf(GTK_WINDOW(pWidget
), pData
, len
);
213 on_init_window(pBuilder
);
214 g_signal_connect(G_OBJECT(pWidget
), "delete_event", G_CALLBACK(on_exit_window
), NULL
);
215 g_signal_connect(G_OBJECT(pWidget
), "destroy", G_CALLBACK(gtk_main_quit
), NULL
);
222 g_object_unref (G_OBJECT(pBuilder
));
224 vlog("######## Ventoy2Disk GTK %s exit ########\n", ventoy_get_local_version());
226 /* log exit must at the end */