📄 main.c
字号:
locale_file_name( g_file_name, furl);
g_print( "%s\n", furl);
read_url( furl, 1, g_document->current_stream);
}
}
}
static void link_clicked( HtmlDocument* doc, const gchar* url)
{
g_print("%s link clicked: %s!\n", url);
}
static gboolean url_requested(HtmlDocument *doc, const gchar* url, HtmlStream* stream)
{
char furl[PATH_MAX] = {0};
if( strstr( url, "://")) {//absolute path
g_stpcpy( furl, url);
} else {//relative path
if( strstr( g_file_name, "://")) {//网络请求
if( strstr( dirname( g_file_name), "://")) {
g_stpcpy( furl, dirname( g_file_name));
} else {
g_stpcpy( furl, g_file_name);
}
//if( furl[strlen(furl)-1] != '/')
g_strlcat( furl, "/", sizeof( furl));
g_strlcat( furl, url, sizeof( furl));
} else {
g_stpcpy( furl, "file://");
g_strlcat( furl, dirname( g_file_name), sizeof( furl));
g_strlcat( furl, "\\", sizeof( furl));
g_strlcat( furl, url, sizeof( furl));
}
}
g_print("%s requested\n", furl);
read_url( furl, 0, stream);
return TRUE;
}
static gboolean
request_object (HtmlView *view, GtkWidget *widget, gpointer user_data)
{
GtkWidget *sel;
sel = gtk_color_selection_new ();
gtk_widget_show (sel);
gtk_container_add (GTK_CONTAINER (widget), sel);
return TRUE;
}
G_MODULE_EXPORT void on_comb_changed( GtkWidget *widget, gpointer user_data)
{
g_print("Selected item changed\n");
static iitem = -1;
if( g_is_trans == FALSE
&& gtk_combo_box_get_active( GTK_COMBO_BOX(g_combox)) != iitem) {
if( g_file_name) g_free(g_file_name),g_file_name=NULL;
g_file_name = gtk_combo_box_get_active_text( GTK_COMBO_BOX(g_combox));
char furl[PATH_MAX] = {0};
if( strlen( g_file_name) > 0) {
html_view_set_document (HTML_VIEW (g_view), NULL);
html_document_clear( g_document);
html_view_set_document(HTML_VIEW(g_view), g_document);
html_document_open_stream( g_document, "text/html");
locale_file_name( g_file_name, furl);
g_print( "%s\n", furl);
read_url( furl, 0, NULL);
}
}
}
G_MODULE_EXPORT void on_okbut_clicked( GtkWidget *widget, gpointer user_data)
{
g_print("Button clicked\n");
if( g_file_name) g_free(g_file_name),g_file_name=NULL;
if( g_is_trans == FALSE) {
g_file_name = gtk_combo_box_get_active_text( GTK_COMBO_BOX(g_combox));
char furl[PATH_MAX] = {0};
if( strlen( g_file_name) > 0) {
html_view_set_document (HTML_VIEW (g_view), NULL);
html_document_clear( g_document);
html_view_set_document(HTML_VIEW(g_view), g_document);
html_document_open_stream( g_document, "text/html");
locale_file_name( g_file_name, furl);
g_print( "%s\n", furl);
read_url( furl, 0, NULL);
}
}
}
G_MODULE_EXPORT void on_win_delete_event( GtkWidget *widget, gpointer user_data)
{
g_print("Window deleted\n");
gtk_main_quit();
}
G_MODULE_EXPORT void on_quit_activate( GtkWidget *widget, gpointer user_data)
{
g_print("Application terminated\n");
gtk_main_quit();
}
G_MODULE_EXPORT void on_logwin_window_state_event( GtkWidget *widget, GdkEventWindowState *event, gpointer user_data)
{
g_print( "Window manager event %x\n", event->new_window_state);
if( event->new_window_state == GDK_WINDOW_STATE_ICONIFIED) {
g_print( "Window hidden\n");
g_is_refr = FALSE;
} else if( event->new_window_state == 0) {
g_print( "Window showed\n");
gtk_widget_queue_draw( g_win);
g_is_refr = TRUE;
}
}
/** open file browser */
G_MODULE_EXPORT void on_open_activate (GtkWidget *widget, gpointer user_data)
{
GtkWidget *dialog;
if( g_file_name) {
g_free( g_file_name);
g_file_name = NULL;
}
dialog = gtk_file_chooser_dialog_new ("选择本地文件",
GTK_WINDOW(gtk_widget_get_toplevel( widget)),
GTK_FILE_CHOOSER_ACTION_OPEN,
GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL,
GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT,
NULL);
if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_ACCEPT){
g_file_name = gtk_file_chooser_get_filename (GTK_FILE_CHOOSER (dialog));
}
gtk_widget_destroy( dialog);
if( g_is_trans == FALSE) {
char furl[PATH_MAX] = {0};
if( g_file_name && strlen( g_file_name) > 0) {
html_view_set_document( HTML_VIEW (g_view), NULL);
html_document_clear( g_document);
html_view_set_document(HTML_VIEW(g_view), g_document);
html_document_open_stream( g_document, "text/html");
locale_file_name( g_file_name, furl);
g_print( "%s\n", furl);
read_url( furl, 1, NULL);
}
}
}
/* G_MODULE_EXPORT GtkWidget* create_html_widget(gchar *widget_name, gchar *string1, gchar *string2,
gint int1, gint int2)
{
//New the view
g_view = html_view_new();
// This is very important
gtk_widget_show_all( g_view);
return g_view;
} */
int main(int argc, char *argv[])
{
GladeXML* xml = NULL;
GMainLoop* loop = NULL;
/* init gtk library*/
gtk_init(&argc, &argv);
/* load the interface */
xml = glade_xml_new("browser.glade", NULL, NULL);
/* get main window widget*/
g_win = glade_xml_get_widget( xml, "browser");
/* get combboxenty widget*/
g_combox = glade_xml_get_widget( xml, "comboboxentry1");
/* get child of combboxentry --GtkEntry*/
g_signal_connect(GTK_ENTRY( GTK_BIN(g_combox)->child),
"activate",
G_CALLBACK(on_comb_editing_done),
NULL);
/*init libgtkhtml*/
g_object_set( G_OBJECT( gtk_html_context_get()),
"debug_painting", FALSE, NULL);
/* create new html document*/
g_document = html_document_new();
g_signal_connect(G_OBJECT (g_document), "request_url",
G_CALLBACK (url_requested), NULL);
g_signal_connect (G_OBJECT (g_document), "link_clicked",
G_CALLBACK (link_clicked), NULL);
/* g_signal_connect (G_OBJECT (g_document), "dom_mouse_down",
G_CALLBACK (dom_mouse_down), NULL);
g_signal_connect (G_OBJECT (g_document), "dom_mouse_up",
G_CALLBACK (dom_mouse_up), NULL);
g_signal_connect (G_OBJECT (g_document), "dom_mouse_click",
G_CALLBACK (dom_mouse_click), NULL);
g_signal_connect (G_OBJECT (g_document), "dom_mouse_over",
G_CALLBACK (dom_mouse_over), NULL);
g_signal_connect (G_OBJECT (g_document), "dom_mouse_out",
G_CALLBACK (dom_mouse_out), NULL); */
/*sync with scrolled window*/
/* GtkWidget* sw = glade_xml_get_widget( xml, "scrolledwindow1");
gtk_scrolled_window_set_hadjustment( GTK_SCROLLED_WINDOW( sw),
gtk_layout_get_hadjustment( GTK_LAYOUT( g_view)));
gtk_scrolled_window_set_vadjustment( GTK_SCROLLED_WINDOW( sw),
gtk_layout_get_vadjustment( GTK_LAYOUT( g_view))); */
/* And the view */
g_view = html_view_new();
g_signal_connect(G_OBJECT( g_view), "request_object",
G_CALLBACK( request_object), NULL);
GtkWidget* sw = gtk_scrolled_window_new( gtk_layout_get_hadjustment( GTK_LAYOUT( g_view)),
gtk_layout_get_vadjustment( GTK_LAYOUT( g_view)));
gtk_container_add( GTK_CONTAINER( sw), g_view);
gtk_container_add( GTK_CONTAINER( glade_xml_get_widget( xml, "frame1")), sw);
/* connect the signals in the interface */
glade_xml_signal_autoconnect( xml);
/* init glibcurl */
glibcurl_init();
loop = g_main_loop_new(NULL, TRUE);
glibcurl_set_callback( &curlCallback, loop);
/* link the document and view */
html_view_set_document( HTML_VIEW( g_view), g_document);
/* important*/
gtk_widget_show_all( g_win);
/* start the event loop */
gtk_main();
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -