]>
glassweightruler.freedombox.rocks Git - Ventoy.git/blob - LinuxGUI/Ventoy2Disk/main_gtk.c
11 #include <ventoy_define.h>
12 #include <ventoy_util.h>
13 #include "ventoy_gtk.h"
15 static int set_image_from_pixbuf(GtkBuilder
*pBuilder
, const char *id
, const void *pData
, int len
)
17 GtkImage
*pImage
= NULL
;
18 GdkPixbuf
*pPixbuf
= NULL
;
19 GInputStream
*pStream
= NULL
;
21 pImage
= (GtkImage
*)gtk_builder_get_object(pBuilder
, id
);
22 pStream
= g_memory_input_stream_new_from_data(pData
, len
, NULL
);
23 pPixbuf
= gdk_pixbuf_new_from_stream(pStream
, NULL
, NULL
);
24 gtk_image_set_from_pixbuf(pImage
, pPixbuf
);
29 static int set_window_icon_from_pixbuf(GtkWindow
*window
, const void *pData
, int len
)
31 GdkPixbuf
*pPixbuf
= NULL
;
32 GInputStream
*pStream
= NULL
;
34 pStream
= g_memory_input_stream_new_from_data(pData
, len
, NULL
);
35 pPixbuf
= gdk_pixbuf_new_from_stream(pStream
, NULL
, NULL
);
37 gtk_window_set_icon(window
, pPixbuf
);
41 int early_msgbox(GtkMessageType type
, GtkButtonsType buttons
, const char *str
)
44 GtkWidget
*pMsgBox
= NULL
;
46 pMsgBox
= gtk_message_dialog_new(NULL
, GTK_DIALOG_MODAL
, type
, buttons
, str
);
48 ret
= gtk_dialog_run(GTK_DIALOG(pMsgBox
));
49 gtk_widget_destroy(pMsgBox
);
54 int main(int argc
, char *argv
[])
57 const void *pData
= NULL
;
58 GtkWidget
*pWidget
= NULL
;
59 GtkBuilder
*pBuilder
= NULL
;
62 gtk_init(&argc
, &argv
);
66 early_msgbox(GTK_MESSAGE_ERROR
, GTK_BUTTONS_CLOSE
,
67 "Ventoy2Disk permission denied!\r\nPlease run with root privileges.");
71 if (access("./boot/boot.img", F_OK
) == -1)
73 early_msgbox(GTK_MESSAGE_ERROR
, GTK_BUTTONS_CLOSE
, "Please run under the correct directory.");
79 vlog("================================================\n");
80 vlog("===== Ventoy2Disk %s powered by GTK%d.x =====\n", ventoy_get_local_version(), GTK_MAJOR_VERSION
);
81 vlog("================================================\n");
87 pBuilder
= gtk_builder_new();
90 vlog("failed to create builder\n");
94 if (!gtk_builder_add_from_file(pBuilder
, "./tool/VentoyGTK.glade", &error
))
96 vlog("gtk_builder_add_from_file failed:%s\n", error
->message
);
97 g_clear_error(&error
);
101 pData
= get_refresh_icon_raw_data(&len
);
102 set_image_from_pixbuf(pBuilder
, "image_refresh", pData
, len
);
104 pData
= get_secure_icon_raw_data(&len
);
105 set_image_from_pixbuf(pBuilder
, "image_secure_local", pData
, len
);
106 set_image_from_pixbuf(pBuilder
, "image_secure_dev", pData
, len
);
108 pWidget
= GTK_WIDGET(gtk_builder_get_object(pBuilder
, "window"));
109 gtk_widget_show_all(pWidget
);
111 pData
= get_window_icon_raw_data(&len
);
112 set_window_icon_from_pixbuf(GTK_WINDOW(pWidget
), pData
, len
);
114 on_init_window(pBuilder
);
115 g_signal_connect(G_OBJECT(pWidget
), "delete_event", G_CALLBACK(on_exit_window
), NULL
);
122 g_object_unref (G_OBJECT(pBuilder
));
124 vlog("######## Ventoy2Disk GTK %s exit ########\n", ventoy_get_local_version());
126 /* log exit must at the end */